Files
api/services/nginx/app/routes/moduleSelfServeRoute.php
T
Jeppe Bundgaard 1b914b546e Add minute-based billing and lane management extensions to self-serve module
- Introduced `selfserve_lane_command_arguments` class for managing lane command parameters (e.g., customer number, license plate).
- Added traits for handling lane timer, invoice generation, license plate, and customer number management.
- Implemented minute-based billing logic with `selfserve_minute_product_c` configuration.
- Enhanced `selfserve_lane` with new behaviors: command arguments, invoicing, and time handling.
- Added `/modules/self-serve/lane/command` route for executing lane commands (START, STOP, RESET).
- Updated `/modules/self-serve/lane/status` route to include additional lane details (wash start, elapsed time, license plate, etc.).
- Improved Shelly device relay control for port management.
2025-12-08 23:05:35 +01:00

94 lines
3.5 KiB
PHP

<?php
namespace routes;
use classes\authentication;
use classes\email;
use classes\response;
use classes\router;
use classes\selfserve;
use classes\stripe;
use objects\departments_o;
use objects\logs_o;
use objects\orders_o;
use objects\stripe_module_customers_o;
use traits\route_t;
class moduleSelfServeRoute
{
use route_t;
public function run(): void
{
global /** @var response $response */
/** @var router $router */
$router, $response;
/** Modules > Self Serve > Lane > Status */
$this->get('/modules/self-serve/lane/status', function () {
global $response;
self::requirePermission('modules_selfserve_lane_status_view');
$selfserve = new selfserve();
$lane = $selfserve->lane(1);
$response->success([
'id' => $lane->id,
'status' => $lane->getLaneStatus()->name,
'mode' => $lane->getLaneMode()->name,
'state' => $lane->getLaneState()->name,
'wash_start_time' => $lane->getWashStartTime(),
'elapsed_wash_time' => $lane->getElapsedWashTime(),
'license_plate' => $lane->getLicensePlate(),
'customer_number' => $lane->getCustomerNumber(),
]);
},
[
'modules_selfserve_lane_status_view' => 'View self-serve lane status',
]
);
/** Modules > Self Serve > Lane > Command */
$this->post('/modules/self-serve/lane/command', function () {
global $response;
self::requirePermission('modules_selfserve_lane_command_execute');
$selfserve = new selfserve();
$param_lane_id = 'lane_id';
$param_command = 'command';
// Validate parameters
self::requireParameters([$param_lane_id, $param_command]);
$lane_id = (int)$this->getParameter($param_lane_id);
self::requireType($lane_id, self::type_int());
self::requireMinValue($lane_id, 1);
$commandParam = (string)$this->getParameter($param_command);
self::requireType($commandParam, self::type_string());
// Get the lane and command
$lane = $selfserve->lane($lane_id);
$command = \modules\selfserve\helpers\selfserve_lane_command::tryFrom($commandParam);
if ($command === null) {
$response->error("Invalid command: " . $commandParam);
}
// Execute the command
try {
$args = new \modules\selfserve\classes\selfserve_lane_command_arguments();
$args->setParameters($this->getParametersAsArray());
$lane->execute($command, $args);
$response->success([
'id' => $lane->id,
'status' => $lane->getLaneStatus()->name,
'mode' => $lane->getLaneMode()->name,
'state' => $lane->getLaneState()->name,
'wash_start_time' => $lane->getWashStartTime(),
'elapsed_wash_time' => $lane->getElapsedWashTime(),
'license_plate' => $lane->getLicensePlate(),
'customer_number' => $lane->getCustomerNumber(),
]);
} catch (\Exception $e) {
$response->error("Failed to execute command: " . $e->getMessage());
}
},
[
'modules_selfserve_lane_command_execute' => 'Execute self-serve lane command',
]
);
}
}