Enhance self-serve functionality by adding lane availability checks and updating response data
This commit is contained in:
@@ -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()")
|
||||
|
||||
Reference in New Issue
Block a user