Implemented management of department time bookings, including API routes, objects, and logic for opening hours, types, and entries. Enhanced the gateway API to handle optional empty recipient handling.
352 lines
21 KiB
PHP
352 lines
21 KiB
PHP
<?php
|
|
|
|
namespace routes;
|
|
|
|
use classes\authentication;
|
|
use classes\response;
|
|
use classes\router;
|
|
use objects\department_time_bookings_entries_o;
|
|
use objects\department_time_bookings_opening_hours_o;
|
|
use objects\department_time_bookings_types_o;
|
|
use objects\logs_o;
|
|
use traits\route_t;
|
|
|
|
class departmentTimeBookingsRoute
|
|
{
|
|
use route_t;
|
|
|
|
public function run(): void
|
|
{
|
|
global /** @var response $response */
|
|
/** @var router $router */
|
|
$router, $response;
|
|
|
|
|
|
/** Department Time Bookings -> List */
|
|
$this->get('/department/timebookings/opening-hours', function () {
|
|
global $response;
|
|
self::requirePermission('department_timebookings_opening_hours_get');
|
|
$user = (new authentication())->get_user();
|
|
if ($user) {
|
|
$specific_department = null;
|
|
if (self::isParametersSet(['department'])) {
|
|
self::requireType((int)self::getParameter('department'), self::type_int());
|
|
self::requireMinValue((int)self::getParameter('department'), 1);
|
|
self::requireSameLength(self::getParameter('department'), (int)self::getParameter('department'));
|
|
self::requireDepartmentAccess((int)self::getParameter('department'));
|
|
$specific_department = (int)self::getParameter('department');
|
|
// Select the specific department
|
|
$department_time_bookings_opening_hours = new department_time_bookings_opening_hours_o();
|
|
$department_time_bookings_opening_hours->selectByDepartment(
|
|
(int)self::getParameter('department')
|
|
);
|
|
$response->success($department_time_bookings_opening_hours->asArray());
|
|
}
|
|
$department_time_bookings_opening_hours = new department_time_bookings_opening_hours_o();
|
|
$result = $department_time_bookings_opening_hours->listObjectsWithPaginationIfSet(
|
|
function ($tmp_object_array) {
|
|
return [
|
|
...$tmp_object_array,
|
|
'id' => (int)$tmp_object_array['id'],
|
|
'department' => (int)$tmp_object_array['department'],
|
|
];
|
|
},
|
|
$department_time_bookings_opening_hours->forceRestrictFilters(
|
|
[
|
|
// This makes sure that the user can only see orders from the departments they explicitly have access to
|
|
'department' => ($specific_department ?? $user->getGroup()->getDepartments()),
|
|
]
|
|
)
|
|
);
|
|
(new logs_o())->add('department_time_bookings_opening_hours', 'global', 0, $user->id, 'DEPARTMENT_TIME_BOOKINGS_OPENING_HOURS_GET', 'Get department time bookings opening hours');
|
|
$response->success($result);
|
|
} else {
|
|
(new logs_o())->add('department_time_bookings_opening_hours', 'global', 0, 0, 'DEPARTMENT_TIME_BOOKINGS_OPENING_HOURS_GET', 'Get department time bookings opening hours failed');
|
|
$response->error('Invalid session', 400);
|
|
}
|
|
},
|
|
[
|
|
'department_timebookings_opening_hours_get' => 'List department time bookings opening hours, in the departments the user has access to',
|
|
]
|
|
);
|
|
|
|
/** Department Time Bookings -> Update */
|
|
$this->put('/department/timebookings/opening-hours', function () {
|
|
global $response;
|
|
self::requirePermission('department_timebookings_opening_hours_put');
|
|
$user = (new authentication())->get_user();
|
|
if ($user) {
|
|
self::requireParameters(['id']);
|
|
self::requireType((int)self::getParameter('id'), self::type_int());
|
|
self::requireMinValue((int)self::getParameter('id'), 1);
|
|
self::requireSameLength(self::getParameter('id'), (int)self::getParameter('id'));
|
|
$department_time_bookings_opening_hours = new department_time_bookings_opening_hours_o();
|
|
$department_time_bookings_opening_hours->select(
|
|
(int)self::getParameter('id')
|
|
);
|
|
// Require the department access
|
|
self::requireDepartmentAccess((int)$department_time_bookings_opening_hours->department->value());
|
|
function ifEmptySetNull($value): ?string
|
|
{
|
|
return $value === '' ? null : $value;
|
|
}
|
|
|
|
// Update the department time bookings opening hours
|
|
$department_time_bookings_opening_hours->update([
|
|
...(self::isParametersSet(['monday_start']) ? ['monday_start' => ifEmptySetNull(self::getParameter('monday_start'))] : []),
|
|
...(self::isParametersSet(['monday_end']) ? ['monday_end' => ifEmptySetNull(self::getParameter('monday_end'))] : []),
|
|
...(self::isParametersSet(['tuesday_start']) ? ['tuesday_start' => ifEmptySetNull(self::getParameter('tuesday_start'))] : []),
|
|
...(self::isParametersSet(['tuesday_end']) ? ['tuesday_end' => ifEmptySetNull(self::getParameter('tuesday_end'))] : []),
|
|
...(self::isParametersSet(['wednesday_start']) ? ['wednesday_start' => ifEmptySetNull(self::getParameter('wednesday_start'))] : []),
|
|
...(self::isParametersSet(['wednesday_end']) ? ['wednesday_end' => ifEmptySetNull(self::getParameter('wednesday_end'))] : []),
|
|
...(self::isParametersSet(['thursday_start']) ? ['thursday_start' => ifEmptySetNull(self::getParameter('thursday_start'))] : []),
|
|
...(self::isParametersSet(['thursday_end']) ? ['thursday_end' => ifEmptySetNull(self::getParameter('thursday_end'))] : []),
|
|
...(self::isParametersSet(['friday_start']) ? ['friday_start' => ifEmptySetNull(self::getParameter('friday_start'))] : []),
|
|
...(self::isParametersSet(['friday_end']) ? ['friday_end' => ifEmptySetNull(self::getParameter('friday_end'))] : []),
|
|
...(self::isParametersSet(['saturday_start']) ? ['saturday_start' => ifEmptySetNull(self::getParameter('saturday_start'))] : []),
|
|
...(self::isParametersSet(['saturday_end']) ? ['saturday_end' => ifEmptySetNull(self::getParameter('saturday_end'))] : []),
|
|
...(self::isParametersSet(['sunday_start']) ? ['sunday_start' => ifEmptySetNull(self::getParameter('sunday_start'))] : []),
|
|
...(self::isParametersSet(['sunday_end']) ? ['sunday_end' => ifEmptySetNull(self::getParameter('sunday_end'))] : []),
|
|
]);
|
|
(new logs_o())->add('department_time_bookings_opening_hours', 'global', 0, $user->id, 'DEPARTMENT_TIME_BOOKINGS_OPENING_HOURS_PUT', 'Update department time bookings opening hours');
|
|
$response->success($department_time_bookings_opening_hours->asArray());
|
|
} else {
|
|
(new logs_o())->add('department_time_bookings_opening_hours', 'global', 0, 0, 'DEPARTMENT_TIME_BOOKINGS_OPENING_HOURS_PUT', 'Update department time bookings opening hours failed');
|
|
$response->error('Invalid session', 400);
|
|
}
|
|
},
|
|
[
|
|
'department_timebookings_opening_hours_put' => 'Update department time bookings opening hours',
|
|
]
|
|
);
|
|
|
|
/** Department Time Bookings -> Types */
|
|
$this->get('/department/timebookings/types', function () {
|
|
global $response;
|
|
self::requirePermission('department_timebookings_types_get');
|
|
$user = (new authentication())->get_user();
|
|
if ($user) {
|
|
$specific_department = null;
|
|
if (self::isParametersSet(['department'])) {
|
|
self::requireType((int)self::getParameter('department'), self::type_int());
|
|
self::requireMinValue((int)self::getParameter('department'), 1);
|
|
self::requireSameLength(self::getParameter('department'), (int)self::getParameter('department'));
|
|
self::requireDepartmentAccess((int)self::getParameter('department'));
|
|
$specific_department = (int)self::getParameter('department');
|
|
}
|
|
$department_time_bookings_types = new department_time_bookings_types_o();
|
|
$result = $department_time_bookings_types->listObjectsWithPaginationIfSet(
|
|
function ($tmp_object_array) {
|
|
return [
|
|
...$tmp_object_array,
|
|
'id' => (int)$tmp_object_array['id'],
|
|
'department' => (int)$tmp_object_array['department'],
|
|
'duration' => (int)$tmp_object_array['duration'],
|
|
];
|
|
},
|
|
$department_time_bookings_types->forceRestrictFilters(
|
|
[
|
|
// This makes sure that the user can only see orders from the departments they explicitly have access to
|
|
'department' => ($specific_department ?? $user->getGroup()->getDepartments()),
|
|
]
|
|
)
|
|
);
|
|
(new logs_o())->add('department_time_bookings_types', 'global', 0, $user->id, 'DEPARTMENT_TIME_BOOKINGS_TYPES_GET', 'Get department time bookings types');
|
|
$response->success($result);
|
|
} else {
|
|
(new logs_o())->add('department_time_bookings_types', 'global', 0, 0, 'DEPARTMENT_TIME_BOOKINGS_TYPES_GET', 'Get department time bookings types failed');
|
|
$response->error('Invalid session', 400);
|
|
}
|
|
},
|
|
[
|
|
'department_timebookings_types_get' => 'List department time bookings types, in the departments the user has access to',
|
|
]
|
|
);
|
|
|
|
/** Department Time Bookings -> Types -> Add */
|
|
$this->post('/department/timebookings/types', function () {
|
|
global $response;
|
|
self::requirePermission('department_timebookings_types_post');
|
|
$user = (new authentication())->get_user();
|
|
if ($user) {
|
|
self::requireParameters(['department', 'name']);
|
|
self::requireType((int)self::getParameter('department'), self::type_int());
|
|
self::requireMinValue((int)self::getParameter('department'), 1);
|
|
self::requireSameLength(self::getParameter('department'), (int)self::getParameter('department'));
|
|
self::requireDepartmentAccess((int)self::getParameter('department'));
|
|
// Add the department time bookings type
|
|
$department_time_bookings_types = new department_time_bookings_types_o();
|
|
$department_time_bookings_types->add(
|
|
(int)self::getParameter('department'),
|
|
(string)self::getParameter('name'),
|
|
(string)(self::isParametersSet(['description']) ? self::getParameter('description') : null),
|
|
(int)(self::isParametersSet(['duration']) ? self::getParameter('duration') : 0)
|
|
);
|
|
(new logs_o())->add('department_time_bookings_types', 'global', 0, $user->id, 'DEPARTMENT_TIME_BOOKINGS_TYPES_POST', 'Add department time bookings types');
|
|
$response->success($department_time_bookings_types->asArray());
|
|
} else {
|
|
(new logs_o())->add('department_time_bookings_types', 'global', 0, 0, 'DEPARTMENT_TIME_BOOKINGS_TYPES_POST', 'Add department time bookings types failed');
|
|
$response->error('Invalid session', 400);
|
|
}
|
|
},
|
|
[
|
|
'department_timebookings_types_post' => 'Add department time bookings types',
|
|
]
|
|
);
|
|
|
|
/** Department Time Bookings -> Types -> Update */
|
|
$this->put('/department/timebookings/types', function () {
|
|
global $response;
|
|
self::requirePermission('department_timebookings_types_put');
|
|
$user = (new authentication())->get_user();
|
|
if ($user) {
|
|
self::requireParameters(['id']);
|
|
self::requireType((int)self::getParameter('id'), self::type_int());
|
|
self::requireMinValue((int)self::getParameter('id'), 1);
|
|
self::requireSameLength(self::getParameter('id'), (int)self::getParameter('id'));
|
|
$department_time_bookings_types = new department_time_bookings_types_o();
|
|
$department_time_bookings_types->select(
|
|
(int)self::getParameter('id')
|
|
);
|
|
// Require the department access
|
|
self::requireDepartmentAccess((int)$department_time_bookings_types->department->value());
|
|
// Update the department time bookings type
|
|
$department_time_bookings_types->update([
|
|
...(self::isParametersSet(['name']) ? ['name' => (string)self::getParameter('name')] : []),
|
|
...(self::isParametersSet(['description']) ? ['description' => (string)self::getParameter('description')] : []),
|
|
...(self::isParametersSet(['duration']) ? ['duration' => (int)self::getParameter('duration')] : []),
|
|
]);
|
|
(new logs_o())->add('department_time_bookings_types', 'global', 0, $user->id, 'DEPARTMENT_TIME_BOOKINGS_TYPES_PUT', 'Update department time bookings types');
|
|
$response->success($department_time_bookings_types->asArray());
|
|
} else {
|
|
(new logs_o())->add('department_time_bookings_types', 'global', 0, 0, 'DEPARTMENT_TIME_BOOKINGS_TYPES_PUT', 'Update department time bookings types failed');
|
|
$response->error('Invalid session', 400);
|
|
}
|
|
},
|
|
[
|
|
'department_timebookings_types_put' => 'Update department time bookings types',
|
|
]
|
|
);
|
|
|
|
/** Department Time Bookings -> Types -> Delete */
|
|
$this->delete('/department/timebookings/types', function () {
|
|
global $response;
|
|
self::requirePermission('department_timebookings_types_delete');
|
|
$user = (new authentication())->get_user();
|
|
if ($user) {
|
|
self::requireParameters(['id']);
|
|
self::requireType((int)self::getParameter('id'), self::type_int());
|
|
self::requireMinValue((int)self::getParameter('id'), 1);
|
|
self::requireSameLength(self::getParameter('id'), (int)self::getParameter('id'));
|
|
$department_time_bookings_types = new department_time_bookings_types_o();
|
|
$department_time_bookings_types->select(
|
|
(int)self::getParameter('id')
|
|
);
|
|
// Require the department access
|
|
self::requireDepartmentAccess((int)$department_time_bookings_types->department->value());
|
|
// Delete the department time bookings type
|
|
$department_time_bookings_types->delete();
|
|
(new logs_o())->add('department_time_bookings_types', 'global', 0, $user->id, 'DEPARTMENT_TIME_BOOKINGS_TYPES_DELETE', 'Delete department time bookings types');
|
|
$response->success(['success' => true]);
|
|
} else {
|
|
(new logs_o())->add('department_time_bookings_types', 'global', 0, 0, 'DEPARTMENT_TIME_BOOKINGS_TYPES_DELETE', 'Delete department time bookings types failed');
|
|
$response->error('Invalid session', 400);
|
|
}
|
|
},
|
|
[
|
|
'department_timebookings_types_delete' => 'Delete department time bookings types',
|
|
]
|
|
);
|
|
|
|
/** Department Time Bookings -> Entries */
|
|
$this->get('/department/timebookings/entries', function () {
|
|
global $response;
|
|
self::requirePermission('department_timebookings_entries_get');
|
|
$user = (new authentication())->get_user();
|
|
if ($user) {
|
|
$specific_department = null;
|
|
if (self::isParametersSet(['id'])) {
|
|
self::requireType((int)self::getParameter('id'), self::type_int());
|
|
self::requireMinValue((int)self::getParameter('id'), 1);
|
|
self::requireSameLength(self::getParameter('id'), (int)self::getParameter('id'));
|
|
// Get the object
|
|
$department_time_bookings_entries = new department_time_bookings_entries_o();
|
|
$department_time_bookings_entries->select(
|
|
(int)self::getParameter('id')
|
|
);
|
|
// Require the department access
|
|
self::requireDepartmentAccess((int)$department_time_bookings_entries->department->value());
|
|
$response->success($department_time_bookings_entries->asArray());
|
|
}
|
|
$department_time_bookings_entries = new department_time_bookings_entries_o();
|
|
$result = $department_time_bookings_entries->listObjectsWithPaginationIfSet(
|
|
function ($tmp_object_array) {
|
|
return [
|
|
...$tmp_object_array,
|
|
'id' => (int)$tmp_object_array['id'],
|
|
'department' => (int)$tmp_object_array['department'],
|
|
'type' => (int)$tmp_object_array['type'],
|
|
'start' => (string)$tmp_object_array['start'],
|
|
'end' => (string)$tmp_object_array['end'],
|
|
'note' => $tmp_object_array['note'],
|
|
'reg' => $tmp_object_array['reg'],
|
|
'phone' => (int)$tmp_object_array['phone'],
|
|
'phone_country_code' => (int)$tmp_object_array['phone_country_code'],
|
|
];
|
|
},
|
|
$department_time_bookings_entries->forceRestrictFilters(
|
|
[
|
|
// This makes sure that the user can only see orders from the departments they explicitly have access to
|
|
'department' => ($specific_department ?? $user->getGroup()->getDepartments()),
|
|
]
|
|
)
|
|
);
|
|
(new logs_o())->add('department_time_bookings_entries', 'global', 0, $user->id, 'DEPARTMENT_TIME_BOOKINGS_ENTRIES_GET', 'Get department time bookings entries');
|
|
$response->success($result);
|
|
} else {
|
|
(new logs_o())->add('department_time_bookings_entries', 'global', 0, 0, 'DEPARTMENT_TIME_BOOKINGS_ENTRIES_GET', 'Get department time bookings entries failed');
|
|
$response->error('Invalid session', 400);
|
|
}
|
|
},
|
|
[
|
|
'department_timebookings_entries_get' => 'List department time bookings entries, in the departments the user has access to',
|
|
]
|
|
);
|
|
|
|
/** Department Time Bookings -> Entries -> Add */
|
|
$this->post('/department/timebookings/entries', function () {
|
|
global $response;
|
|
self::requirePermission('department_timebookings_entries_post');
|
|
$user = (new authentication())->get_user();
|
|
if ($user) {
|
|
self::requireParameters(['department', 'type', 'start', 'end']);
|
|
self::requireType((int)self::getParameter('department'), self::type_int());
|
|
self::requireMinValue((int)self::getParameter('department'), 1);
|
|
self::requireSameLength(self::getParameter('department'), (int)self::getParameter('department'));
|
|
self::requireDepartmentAccess((int)self::getParameter('department'));
|
|
|
|
// Add the department time bookings entry
|
|
$department_time_bookings_entries = new department_time_bookings_entries_o();
|
|
$department_time_bookings_entries->add(
|
|
(int)self::getParameter('department'),
|
|
(int)self::getParameter('type'),
|
|
(string)self::getParameter('start'),
|
|
(string)self::getParameter('end'),
|
|
(int)(self::isParametersSet(['phone_country_code']) ? self::getParameter('phone_country_code') : 0),
|
|
(int)(self::isParametersSet(['phone']) ? self::getParameter('phone') : 0),
|
|
(self::isParametersSet(['note']) ? (string)self::getParameter('note') : null),
|
|
(self::isParametersSet(['reg']) ? (string)self::getParameter('reg') : null)
|
|
);
|
|
(new logs_o())->add('department_time_bookings_entries', 'global', 0, $user->id, 'DEPARTMENT_TIME_BOOKINGS_ENTRIES_POST', 'Add department time bookings entries');
|
|
$response->success($department_time_bookings_entries->asArray());
|
|
} else {
|
|
(new logs_o())->add('department_time_bookings_entries', 'global', 0, 0, 'DEPARTMENT_TIME_BOOKINGS_ENTRIES_POST', 'Add department time bookings entries failed');
|
|
$response->error('Invalid session', 400);
|
|
}
|
|
},
|
|
[
|
|
'department_timebookings_entries_post' => 'Add department time bookings entries',
|
|
]
|
|
);
|
|
}
|
|
} |