Enhance self-serve functionality by adding lane availability checks and updating response data

This commit is contained in:
Jeppe Bundgaard
2026-06-29 14:25:51 +02:00
parent 3ea92be722
commit 6cc4f2759d
2 changed files with 39 additions and 8 deletions
+33 -6
View File
@@ -4,6 +4,7 @@ namespace routes;
use classes\authentication;
use classes\recaptcha;
use classes\selfserve;
use classes\virkdata;
use objects\department_lanes_o;
use objects\departments_o;
@@ -53,31 +54,57 @@ class guestRoute
$this->get('/guest/departments', function () {
global $response;
$departments = (new departments_o());
try {
$self_serve_module_enabled = (bool)(new selfserve())->config->enabled->getVariableValue();
} catch (\Throwable) {
$self_serve_module_enabled = false;
}
// Check if the department lane status is requested to be included
$include_lane_status = false;
if (self::isParametersSet(['include_lanes']) && self::getParameter('include_lanes')) {
$include_lane_status = true;
}
$response->success($departments->listObjectsWithPaginationIfSet(function ($department_array) use ($departments, $include_lane_status) {
$response->success($departments->listObjectsWithPaginationIfSet(function ($department_array) use ($departments, $include_lane_status, $self_serve_module_enabled) {
$additional_data = [];
// If including lane status, fetch it
if ($include_lane_status) {
$department = $departments->select((int)$department_array['id']);
// Include the status of self-serve in the department (disabled, when staffed hours)
$additional_data['self_serve_enabled'] = (bool)$department->getSelfServeEnabled();
$department_self_serve_enabled = (bool)$department->getSelfServeEnabled();
$additional_data['self_serve_enabled'] = $department_self_serve_enabled;
$additional_data['self_serve_module_enabled'] = $self_serve_module_enabled;
$additional_data['lanes'] = array_map(
/**
* @param department_lanes_o $lane
* @return array
*/
function (department_lanes_o $lane) {
function (department_lanes_o $lane) use ($department_self_serve_enabled, $self_serve_module_enabled) {
$status = (string)$lane->getLaneStatus()->name;
$lane_self_serve_enabled = $lane->isSelfServeEnabled();
$self_serve_available = $self_serve_module_enabled
&& $department_self_serve_enabled
&& $lane_self_serve_enabled
&& strtoupper(trim($status)) === 'AVAILABLE';
$self_serve_unavailable_reason = null;
if (!$self_serve_module_enabled) {
$self_serve_unavailable_reason = 'self_serve_module_disabled';
} elseif (!$department_self_serve_enabled) {
$self_serve_unavailable_reason = 'department_self_serve_disabled';
} elseif (!$lane_self_serve_enabled) {
$self_serve_unavailable_reason = 'lane_self_serve_disabled';
} elseif (strtoupper(trim($status)) !== 'AVAILABLE') {
$self_serve_unavailable_reason = 'lane_status_' . strtolower($status);
}
return [
'id' => (int)$lane->id,
'name' => (string)$lane->name->value(),
'status' => (string)$lane->getLaneStatus()->name,
'status' => $status,
'products' => $lane->getSelfServeLaneProducts(),
'selfserve_enabled' => $lane->isSelfServeEnabled(),
'machine_available' => $lane->isSelfServeEnabled() && !empty($lane->relay_machine_id->value()),
'selfserve_enabled' => $lane_self_serve_enabled,
'selfserve_available' => $self_serve_available,
'selfserve_unavailable_reason' => $self_serve_unavailable_reason,
'machine_available' => $self_serve_available && !empty($lane->relay_machine_id->value()),
'dynamic_image_id' => $lane->dynamic_image_id->value() ? (int)$lane->dynamic_image_id->value() : null,
];
}, $department->getLanes());
@@ -74,8 +74,12 @@ it('wires lane-level self-serve toggles through lane APIs, guest payloads, and e
->and($laneObject)->toContain('setMachineCleanerRelayStatusHard(false)');
expect($guestRoute)->not->toBeFalse()
->and($guestRoute)->toContain("'selfserve_enabled' => \$lane->isSelfServeEnabled()")
->and($guestRoute)->toContain("'machine_available' => \$lane->isSelfServeEnabled() && !empty(\$lane->relay_machine_id->value())");
->and($guestRoute)->toContain("\$additional_data['self_serve_module_enabled'] = \$self_serve_module_enabled")
->and($guestRoute)->toContain("'self_serve_module_disabled'")
->and($guestRoute)->toContain("'selfserve_enabled' => \$lane_self_serve_enabled")
->and($guestRoute)->toContain("'selfserve_available' => \$self_serve_available")
->and($guestRoute)->toContain("'selfserve_unavailable_reason' => \$self_serve_unavailable_reason")
->and($guestRoute)->toContain("'machine_available' => \$self_serve_available && !empty(\$lane->relay_machine_id->value())");
expect($edgeWorkspace)->not->toBeFalse()
->and($edgeWorkspace)->toContain("'selfserve_enabled' => \$lane->isSelfServeEnabled()")