Enhance self-serve lane functionality with new relay management and configuration updates
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user