Compare commits

...

6 Commits

Author SHA1 Message Date
6d68dceacb v1.3.1 release 2026-07-15 20:55:54 +02:00
Marco Mooij | DigiState
e4596c151d minor changes after travel reimbursement tests 2026-07-09 11:21:44 +02:00
Marco Mooij | DigiState
295b86a3c3 travel reimbursement documentation updated 2026-07-09 10:33:45 +02:00
3bfccab663 companies activate moved 2026-07-08 23:42:38 +02:00
921f6c0d67 GET Companies added 2026-07-08 23:42:23 +02:00
3eae1e6862 v.1.3.0 update travel reimbursement added 2026-07-08 23:42:13 +02:00
11 changed files with 477 additions and 51 deletions

View File

@@ -0,0 +1,73 @@
# GET Companies
This will get all the companies from the database.
#### Location
```
/api/v1/customers/companies/
```
#### Permissions required
`customer-companies` RO.
#### Body parameters
| Parameter | Type | Required | Description |
| -------------------- | ------ | -------- | ----------- |
| builder[0][where][0] | string | no | |
| builder[0][where][1] | string | no | |
### Example Body (json)
None.
### Example Request
```php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => $baseUrl . '/api/v1/customers/companies/' .
'?builder[0][where][0]=company_state'.
'&builder[0][where][1]=active',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $token,
],
]);
$response = curl_exec($curl);
$httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($response === false) {
echo curl_error($curl);
}
curl_close($curl);
```
### Example Response
```json
[
{
"company_uuid":"0f6a9c83-809b-4d54-8b16-a8197ac64ab4",
"source_uuid":"3c318a1f-a976-485e-8785-74eb3ec8030d",
"company_source_id":"1001",
"company_source_id2":"facadaka",
"company_name":"Meteo",
"company_state":"active",
"company_create_timestamp":1780172782,
"company_modified_timestamp":null
},
{
"company_uuid":"5e0fe765-6dae-11f1-8c62-bc2411125ba4",
"source_uuid":"3c318a1f-a976-485e-8785-74eb3ec8030d",
"company_source_id":"1003",
"company_source_id2":"facadaka",
"company_name":"Test",
"company_state":"active",
"company_create_timestamp":1780172782,
"company_modified_timestamp":null
}
]
```
#### Known errors or issues.
None are known at the time
If you do encounter issues and get an http code in return, check the response codes on this page.

View File

@@ -0,0 +1,57 @@
# DELETE Travel reimbursement
This API call deletes a Travel reimbursement.
#### Location
```
/api/v1/office/travel-reimburse/
```
#### Permissions required
`office-travel-reimburse` RW
#### Body parameters
| Parameter | Type | Required | Description |
| -------------- | ---- | -------- | --------------------------------- |
| reimburse_uuid | uuid | yes | Unique id of the Travel reimburse |
### Example Body (json)
```json
{
"reimburse_uuid": "e0a60eba-52f6-11f1-8bcc-bc2411125ba4",
}
```
### Example Request
```php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => $baseUrl . '/api/v1/office/travel-reimburse/',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $json_payload,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $token,
'Content-Type: application/json',
'X-HTTP-Method-Override: DELETE'
],
]);
$response = curl_exec($curl);
$httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($response === false) {
echo curl_error($curl);
}
curl_close($curl);
```
### Example Response
```json
"Travel reimburse removed."
```
#### Known errors or issues.
None are known at the time
If you do encounter issues and get an http code in return, check the response codes on this page.

View File

@@ -0,0 +1,78 @@
# GET Travel reimbursement
This will get travel reimbursement entries from the database.
#### Location
```
/api/v1/office/travel-reimburse/
```
#### Permissions required
`office-travel-reimburse` RO
>[!note]
>You can only get the travel reimbursements of your user.
#### Body parameters
| Parameter | Type | Required | Description |
| ---------------------- | ------ | -------- | ------------------------- |
| builder[0][between][0] | string | no | Get between `travel_date` |
| builder[0][between][1] | date | no | For example 2026-06-01 |
| builder[0][between][2] | date | no | For example 2026-06-25 |
| builder[0][where][0] | string | no | |
| builder[0][where][1] | string | no | |
### Example Body (json)
None.
### Example Request
```php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => $baseUrl . '/api/v1/office/travel-reimburse/',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $token,
],
]);
$response = curl_exec($curl);
$httpCode = curl_getinfo($curl, CURL INFO_HTTP_CODE);
if ($response === false) {
echo curl_error($curl);
}
curl_close($curl);
```
### Example Response
```json
[
{
"reimburse_uuid":"1c0b5323-6d79-11f1-8c62-bc2411125ba4",
"user_uuid":"5219edbb-512d-11f1-8bac-bc2411125ba4",
"departure_postcode":"3448BT",
"destination_postcode":"3433AA",
"travel_distance":56,
"travel_date":"2026-06-21",
"travel_description":null,
"company_uuid":null,
"company_name":null
},
{
"reimburse_uuid":"85d5db8a-6d79-11f1-8c62-bc2411125ba4",
"user_uuid":"5219edbb-512d-11f1-8bac-bc2411125ba4",
"departure_postcode":"3448BT",
"destination_postcode":"3433AA",
"travel_distance":56,
"travel_date":"2026-06-21",
"travel_description":null,
"company_uuid":null,
"company_name":null
}
]
```
#### Known errors or issues.
None are known at the time
If you do encounter issues and get an http code in return, check the response codes on this page.

View File

@@ -0,0 +1,72 @@
# POST Travel reimbursement
This API call adds a entry for the travel reimbursement
#### Location
```
/api/v1/office/travel-reimburse/
```
#### Permissions required
`office-travel-reimburse` RW
>[!note]
>You can only post the travel reimbursements on your user.
#### Body parameters
| Parameter | Type | Required | Description |
| ----------------------------------- | ------- | --------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
| departure_postcode | string | yes | Postcode of the departure point |
| destination_postcode | string | yes | Postcode of the destination point |
| travel_date | date | yes | The date of the travel (YYYY-MM-DD) |
| travel_distance | integer | yes | The travel distance |
| travel_description | string | no | Description of the travel |
| office_travelreimburse_company_uuid | uuid | yes, if customers module enabled | *Only when the Customers modules is enabled* The company uuid that the travel is linked to. Set the home/work travel company in system settings |
| office_travelreimburse_company_name | string | yes, if customers module disabled | *Only when the Customers module is disabled* The that the travel is linked to. Set the home/work travel company in system settings |
| homework | int | 1 or 0 | Set to 1 if the travel entry is home-work travel. |
### Example Body (json)
```json
{
"departure_postcode": "3448BT",
"destination_postcode": "3433AA",
"travel_date": "2026-06-21",
"travel_distance": "56",
"travel_description": "Example description",
"office_travelreimburse_company_uuid": "0f6a9c83-809b-4d54-8b16-a8197ac64ab4",
"homework": 1
}
```
### Example Request
```php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => $baseUrl . '/api/v1/office/travel-reimburse/',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $json_payload,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $token,
'Content-Type: application/json',
],
]);
$response = curl_exec($curl);
$httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($response === false) {
echo curl_error($curl);
}
curl_close($curl);
```
### Example Response
```json
"Travel reimburse added."
```
#### Known errors or issues.
None are known at the time
If you do encounter issues and get an http code in return, check the response codes on this page.

View File

@@ -0,0 +1,77 @@
# PUT Travel reimbursement
This PUT modifies an existing reimbursement item.
#### Location
```
/api/v1/office/travel-reimburse/
```
#### Permissions required
`office-travel-reimburse` RW
>[!note]
>You can only update the travel reimbursements on your user.
#### Body parameters
| Parameter | Type | Required | Description |
| ----------------------------------- | ------- | --------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
| reimburse_uuid | uuid | yes | Unique id of the reimburse to edit |
| departure_postcode | string | yes | Postcode of the departure point |
| destination_postcode | string | yes | Postcode of the destination point |
| travel_date | date | yes | The date of the travel (YYYY-MM-DD) |
| travel_distance | integer | yes | The travel distance |
| travel_description | string | no | Description of the travel |
| office_travelreimburse_company_uuid | uuid | yes, if customers module enabled | *Only when the Customers modules is enabled* The company uuid that the travel is linked to. Set the home/work travel company in system settings |
| office_travelreimburse_company_name | string | yes, if customers module disabled | *Only when the Customers module is disabled* The that the travel is linked to. Set the home/work travel company in system settings |
| homework | int | 1 or 0 | Set to 1 if the travel entry is home-work travel. |
### Example Body (json)
```json
{
"reimburse_uuid": "1c0b5323-6d79-11f1-8c62-bc2411125ba4",
"departure_postcode": "3448BT",
"destination_postcode": "3433AA",
"travel_date": "2026-06-21",
"travel_distance": "56",
"travel_description": "Example description",
"office_travelreimburse_company_uuid": "0f6a9c83-809b-4d54-8b16-a8197ac64ab4",
"homework": 1
}
```
### Example Request
```php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => $baseUrl . '/api/v1/office/travel-reimburse/',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $json_payload,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $token,
'Content-Type: application/json',
'X-HTTP-Method-Override: PUT'
],
]);
$response = curl_exec($curl);
$httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($response === false) {
echo curl_error($curl);
}
curl_close($curl);
```
### Example Response
```json
"Module enabled successfully."
```
#### Known errors or issues.
None are known at the time
If you do encounter issues and get an http code in return, check the response codes on this page.

View File

@@ -0,0 +1,64 @@
# PUT Global travel reimbursements settings
This PUT call configures the global Sentri settings for the Travel reimbursement in the office module.
#### Location
```
/api/v1/office/travel-reimburse/configure/
```
#### Permissions required
`admin-portalsettings` RW
#### Body parameters
| Parameter | Type | Required | Description |
| -------------------------------------------- | ------ | --------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
| office_travelreimburse_cents_homework_incl | int | yes | The cents per km for home/work travel with taxes included. |
| office_travelreimburse_cents_homework_excl | int | yes | The cents per km for home/work travel with taxes excluded. |
| office_travelreimburse_cents_business_incl | int | yes | The cents per km for business travel with taxes included. |
| office_travelreimburse_cents_business_excl | int | yes | The cents per km for business travel with taxes excluded. |
### Example Body (json)
```json
{
"portal_uuid": "effda0c0-0830-11f0-9300-7e99ed98b725",
"office_travelreimburse_cents_homework_incl": 23,
"office_travelreimburse_cents_homework_excl": 23,
"office_travelreimburse_cents_business_incl": 23,
"office_travelreimburse_cents_business_excl": 23
}
```
### Example Request
```php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => $baseUrl . '/api/v1/office/travel-reimburse/configure/',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $json_payload,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $token,
'Content-Type: application/json',
'X-HTTP-Method-Override: PUT'
],
]);
$response = curl_exec($curl);
$httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($response === false) {
echo curl_error($curl);
}
curl_close($curl);
```
### Example Response
```json
"portal settings updated successfully."
```
#### Known errors or issues.
None are known at the time
If you do encounter issues and get an http code in return, check the response codes on this page.

View File

@@ -1,45 +0,0 @@
# GET Sync cloud distributor
This API call synchronizes active companies in Sentri with the corresponding cloud distributor companies in Inserve. These cloud distributor companies are required to associate Sentri server licenses with companies in Inserve.
#### Location
```
/api/v1/sources/inserve/sync-cloud-distributor/
```
#### Permissions required
`servers` RW
#### Body parameters
None.
### Example Body (json)
None.
### Example Request
```php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://sentri.nl/api/v1/sources/inserve/sync-cloud-distributor/',
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <API your Bearer Token>",
"Accept: application/json",
"Content-Type: application/json"
]
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
```
### Example Response
```json
"Sync is done successfully"
```
#### Known errors or issues.
None are known at the time
If you do encounter issues and get an http code in return, check the response codes on this page.

View File

@@ -0,0 +1,27 @@
# Travel Reimbursement
The travel reimbursement feature allows users to enter information about the distance they have traveled, enabling the system to calculate and send an reimburse invoice of the associated travel costs to the user.
Users can open a calendar month and set their default travel information. By clicking on a day in the calendar, users can create a travel entry. These travel entries are then aggregated, and the total travel costs are calculated based on the cost settings configured by the administrator.
## Using Travel Reimbursement
Permissions required: `office-travel-reimburse` RW.
To use travel reimbursement, navigate to _Travel Reimbursement_ and configure your default travel information above the calendar. These defaults will be applied automatically when creating new travel entries. Click **Save** to store the defaults for future use.
To create a travel entry, click on the date for which you want to add a travel reimbursement. Multiple travel entries can be added to the same day. Click on an existing entry to edit its details, such as adding a description. From the same menu, you can also choose to delete the entry.
To send the invoice, click the **Mail travel reimbursement** button below the calendar. The invoice will be send to your email address.
## Configuring Travel Reimbursement
Permissions required: `admin-portalsettings` RW.
To configure the travel Travel Reimbursement settings go to *portal-management* > *Modules* > *configure Office* > *Travel Reimbursement*.
Here you can configure the following:
- Cents per/km home-work incl. VAT
- Cents per/km home-work excl. VAT
- Cents per/km business incl. VAT
- Cents per/km business excl. VAT

View File

@@ -1,14 +1,31 @@
# Release notes # Release notes
## v.1.3 ## v.1.3.1
`to be announced` `13-06-2026`
### Changes ### Changes
- Rename the servers module to Inventory so it supports other things as well. - Name of the travel reimbursement PDF attachment changed.
- Added CSP headers to PHP code - Changes in server license creation due to Inserve removing creation of cloud distributor companies.
### Fixes
- Error when deleting last travel entry.
- Error when posting server without server_state.
- Return url of portal-management forms went to /systemconfig/.
- List of travel entries in travel reimbursement PDF is not sorted on date.
- Calculation in total km not correct.
## v.1.3
`08-07-2026`
### Features ### Features
- Hypervisor overview. - Travel reimbursement feature added.
- Network devices overview.
### Fixes
- [b4f3553f1e](https://gitea.mooij.me/meteo/Sentri/commit/b4f3553f1eeedb7ea47686b49e66acd6fccfe145) Disabling MFA in userprofile does not hide button correctly.
- [97963b34aa](https://gitea.mooij.me/meteo/Sentri/commit/97963b34aa138c9dbfca8d0a2d8f326e96adb925) Update different composer packages.
- [68c9e00afb](https://gitea.mooij.me/meteo/Sentri/commit/68c9e00afb79ba2c63e0ecb9970a6f04b04e6e7a) cloudDistributor not set when creating Inserve subscription licenses.
- [94f349597d](https://gitea.mooij.me/meteo/Sentri/commit/94f349597d97f480aa2713589508baf46428ad80) Changed /systemconfig/ page to /portal-management/.
- [b31185c2e9](https://gitea.mooij.me/meteo/Sentri/commit/b31185c2e92945fa06ca223d6b0ac95b5cd1180d) Login without username/password now shows error on login page.
- [f94bafb25d](https://gitea.mooij.me/meteo/Sentri/commit/f94bafb25dd1ba17ba59b5114a9b0dff6d687f8c) Server overview wont hide last modify column.
- [fa3515625b](https://gitea.mooij.me/meteo/Sentri/commit/fa3515625b7ff5e80e3737c5feb5fbcd7a2b6cbe) No response toast anymore when saving something
## v.1.2.4 ## v.1.2.4
`21-06-2026` `21-06-2026`

View File

@@ -1,4 +1,5 @@
# Welcome to the Sentri docs! # Welcome to the Sentri docs!
>[!note] >[!note]
>The making of the this documentation is still in progress. >The making of the this documentation is still in progress.
# What is Sentri # What is Sentri
@@ -18,7 +19,12 @@ The following CRM customer sources are currently available:
- [[Inserve|Inserve]] - [[Inserve|Inserve]]
## Module: Office ## Module: Office
### Stompjes
This module currently provides a feature that lets you “stomp” a colleague. It can be used to keep track of things such as counting your mom jokes or other actions between team members. These events are counted and visualized through a simple graph. This module currently provides a feature that lets you “stomp” a colleague. It can be used to keep track of things such as counting your mom jokes or other actions between team members. These events are counted and visualized through a simple graph.
### Travel reimbursement
Another feature is the travel reimbursement feature. This allows users to enter information about the distance they have traveled, enabling the system to calculate and send an reimburse invoice of the associated travel costs to the user.
## Module: Servers ## Module: Servers
The Servers module is designed to help you keep track of all servers you manage. It centralizes key information such as assigned resources, configured backups, used licenses, and more. The Servers module is designed to help you keep track of all servers you manage. It centralizes key information such as assigned resources, configured backups, used licenses, and more.