91 lines
3.3 KiB
PHP
91 lines
3.3 KiB
PHP
<?php
|
|
|
|
namespace routes;
|
|
|
|
use classes\authentication;
|
|
use classes\selfserve;
|
|
use modules\selfserve\classes\selfserve_wash_flow;
|
|
use objects\department_lanes_o;
|
|
use objects\logs_o;
|
|
use objects\plate_scanners_o;
|
|
use traits\route_t;
|
|
|
|
class machineButtonPressRoute
|
|
{
|
|
use route_t;
|
|
|
|
public function run(): void
|
|
{
|
|
$handler = function () {
|
|
global $response;
|
|
|
|
self::requirePlateScannerAuth();
|
|
$plate_scanner = (new authentication())->get_plate_scanner();
|
|
if (!$plate_scanner) {
|
|
$response->error('Invalid plate scanner session', 403);
|
|
}
|
|
|
|
$lane_id = $this->resolveLaneId($plate_scanner);
|
|
$reg = self::isParametersSet(['reg']) ? selfserve::standardize_registration((string)self::getParameter('reg')) : null;
|
|
$payload = $this->getParametersAsArray();
|
|
unset($payload['token']);
|
|
|
|
try {
|
|
$summary = (new selfserve_wash_flow())->recordMachineStartWebhook($lane_id, $reg, $payload);
|
|
} catch (\RuntimeException $e) {
|
|
$response->error($e->getMessage(), 404);
|
|
}
|
|
|
|
(new logs_o())->add('relay', $plate_scanner->department_id->value(), 1, 0, 'TRIGGER_BUTTON_PRESS', 'Button was pressed on the machine with the plate scanner: ' . $plate_scanner->id . ' for lane ' . $lane_id);
|
|
$response->success([
|
|
'message' => 'Button press recorded.',
|
|
'scanner' => $plate_scanner->name->value(),
|
|
'lane_id' => $lane_id,
|
|
'selfserve' => $summary,
|
|
], 201);
|
|
};
|
|
|
|
$this->get('/relay/button/press/post', $handler, [
|
|
'add_button_press' => 'Add a button press'
|
|
]);
|
|
|
|
$this->post('/relay/button/press/post', $handler, [
|
|
'add_button_press' => 'Add a button press'
|
|
]);
|
|
}
|
|
|
|
private function resolveLaneId(plate_scanners_o $plateScanner): int
|
|
{
|
|
global $response;
|
|
|
|
if (self::isParametersSet(['lane_id'])) {
|
|
$lane = (new department_lanes_o())->select((int)self::getParameter('lane_id'));
|
|
if (!$lane->exists()) {
|
|
$response->error('Department lane not found', 404);
|
|
}
|
|
if ((int)$lane->department->value() !== (int)$plateScanner->department_id->value()) {
|
|
$response->error('The lane does not belong to the plate scanner department', 403);
|
|
}
|
|
return (int)$lane->id;
|
|
}
|
|
|
|
if ($plateScanner->lane_id->value() !== null) {
|
|
$lane = (new department_lanes_o())->select((int)$plateScanner->lane_id->value());
|
|
if (!$lane->exists()) {
|
|
$response->error('The default lane configured for the plate scanner no longer exists', 404);
|
|
}
|
|
if ((int)$lane->department->value() !== (int)$plateScanner->department_id->value()) {
|
|
$response->error('The default lane does not belong to the plate scanner department', 403);
|
|
}
|
|
return (int)$lane->id;
|
|
}
|
|
|
|
$lanes = (new department_lanes_o())->getDepartmentLanes((int)$plateScanner->department_id->value());
|
|
if (count($lanes) === 1) {
|
|
return (int)$lanes[0]->id;
|
|
}
|
|
|
|
$response->error('lane_id is required when the department has multiple self-serve lanes', 400);
|
|
}
|
|
}
|