Enhance self-serve lane functionality with new relay management and configuration updates

This commit is contained in:
Jeppe Bundgaard
2026-06-02 17:27:22 +02:00
parent 6d739cfebc
commit 1b99523366
18 changed files with 133418 additions and 90 deletions
@@ -22,6 +22,7 @@ use objects\logs_o;
use objects\orders_o;
use objects\customer_vehicles_o;
use objects\selfserve_wash_sessions_o;
use objects\selfserve_wash_session_tasks_o;
use objects\stripe_module_customers_o;
use objects\users_o;
use traits\route_t;
@@ -630,23 +631,59 @@ class moduleSelfServeRoute
// Build allowed services from provided tasks
$lane = $selfserve->lane($lane_id);
$customer_number = $this->resolveEffectiveCustomerNumber();
self::requirePermission('modules_selfserve_lane_services_set_allowed');
$this->requireSelfServeLaneAccess(
$lane,
$customer_number === null ? 0 : (int)$customer_number,
['modules_selfserve_lane_services_set_allowed'],
false
);
$session_task_services = [];
$latest_session = (new selfserve_wash_sessions_o())->selectLatestOpenByLane(
$lane_id,
$customer_number === null || (int)$customer_number <= 0 ? null : (int)$customer_number
);
if (!$latest_session->exists() && $customer_number !== null && (int)$customer_number > 0) {
$latest_session = (new selfserve_wash_sessions_o())->selectLatestOpenByLane($lane_id);
}
if ($latest_session->exists()) {
foreach ((new selfserve_wash_session_tasks_o())->listBySession((int)$latest_session->id) as $session_task) {
$task_id = (int)($session_task['task_id'] ?? 0);
if ($task_id > 0) {
$services = $session_task['services'] ?? [];
if (is_string($services)) {
$decoded_services = json_decode($services, true);
$services = json_last_error() === JSON_ERROR_NONE && is_array($decoded_services)
? $decoded_services
: [];
}
$session_task_services[$task_id] = is_array($services) ? $services : [];
}
}
}
$allowed_services = [];
foreach ($task_ids as $tid) {
if ($tid <= 0) continue;
$t = new \objects\department_selfserve_tasks_o();
$t->select($tid);
if (!$t->exists()) continue; // ignore unknown ids
// Validate the task belongs to the same lane
if ((int)$t->lane->value() !== $lane_id) continue;
// Merge services (if any)
$services = (array)$t->services->value();
$merge_services = static function (array $services) use (&$allowed_services): void {
foreach ($services as $srv) {
$name = strtoupper((string)$srv);
if (!in_array($name, $allowed_services, true)) {
$allowed_services[] = $name;
}
}
};
foreach ($task_ids as $tid) {
if ($tid <= 0) continue;
if (array_key_exists($tid, $session_task_services)) {
$merge_services($session_task_services[$tid]);
continue;
}
$t = new \objects\department_selfserve_tasks_o();
$t->select($tid);
if (!$t->exists()) continue; // ignore unknown ids
// Validate the task belongs to the same lane
if ((int)$t->lane->value() !== $lane_id) continue;
// Merge services (if any)
$merge_services((array)$t->services->value());
}
// Persist on lane cache (overwrites previous allowed services)
try {