diff --git a/services/nginx/app/modules/economic/customers/economic_customer_mo.php b/services/nginx/app/modules/economic/customers/economic_customer_mo.php index ee641e51..4f3b0735 100644 --- a/services/nginx/app/modules/economic/customers/economic_customer_mo.php +++ b/services/nginx/app/modules/economic/customers/economic_customer_mo.php @@ -18,6 +18,7 @@ class economic_customer_mo public null|string $mobilePhone; public null|string $currency; public null|string $country; + public bool $barred; public function getCustomerByCustomerNumber(int $customer_number): static { @@ -46,6 +47,7 @@ class economic_customer_mo $this->mobilePhone = ($customer->mobilePhone ?? null); $this->currency = ($customer->currency ?? null); $this->country = ($customer->country ?? null); + $this->barred = (isset($customer->barred) ? (bool)$customer->barred : false); $users_o = new users_o(); $user = $users_o->getUserByCustomerNumber($this->customer_number); @@ -75,6 +77,7 @@ class economic_customer_mo 'mobilePhone' => $this->mobilePhone, 'currency' => $this->currency, 'country' => $this->country, + 'barred' => $this->barred, ]; } } \ No newline at end of file diff --git a/services/nginx/app/objects/customer_vehicles_o.php b/services/nginx/app/objects/customer_vehicles_o.php index 1290672c..d10ac302 100644 --- a/services/nginx/app/objects/customer_vehicles_o.php +++ b/services/nginx/app/objects/customer_vehicles_o.php @@ -46,15 +46,17 @@ class customer_vehicles_o extends db self::getAvailableAddons() ); $last_order_id = self::getLastOrderId(); + $customer_number = (int)$this->customer_id->value(); return [ 'id' => (int)$this->id, - 'user_id' => (int)(new users_o())->getUserIdFromEconomic((int)$this->customer_id->value()), + 'user_id' => (int)(new users_o())->getUserIdFromEconomic((int)$customer_number), 'customer_id' => (int)$this->customer_id->value(), - 'customer_name' => (string)(new users_o())->getCustomerName((int)$this->customer_id->value()), + 'customer_name' => (string)(new users_o())->getCustomerName((int)$customer_number), 'type' => (int)$this->type->value(), 'reg' => (string)$this->reg->value(), 'reference' => ($this->reference->value() ? (string)$this->reference->value() : null), 'wash_subscription' => $wash_subscription, + 'barred' => (bool)(new users_o())->isCustomerBarred((int)$customer_number), 'addons' => [ 'enabled' => count($addons), 'available' => count($available_addons), @@ -197,5 +199,27 @@ class customer_vehicles_o extends db $this->deleted_at = new object_property($this->table, $this->id, 'deleted_at', 'timestamp', false); } + /** + * Get the customer object for the vehicle + * @param string $reg The registration number of the vehicle + * @return int|null The customer number for the vehicle, or null if the vehicle is not registered to a customer + * @throws Exception If the customer_id does not exist + */ + public function getPlateCustomerNumber(string $reg): int|null + { + // Get the customer id from the vehicle + $result = self::getFieldsWhere([ + 'reg' => $reg, + ], [ + 'customer_id', + ]); + // If the customer id is not found, return null + if (count($result) === 0) { + return null; + } + // If the customer id is found, return it + return (int)$result[0]['customer_id']; + } + } \ No newline at end of file diff --git a/services/nginx/app/objects/users_o.php b/services/nginx/app/objects/users_o.php index a42d4961..9de88f38 100644 --- a/services/nginx/app/objects/users_o.php +++ b/services/nginx/app/objects/users_o.php @@ -1078,4 +1078,24 @@ class users_o extends db // Set the email $this->email->set($email); } + + public function isCustomerBarred(int $customer_number): bool + { + if ($customer_number === 0) { + return false; + } + // Create a temporary user object + $tmp_user = new users_o(); + $tmp_user->getUserByCustomerNumber($customer_number); + // Get the customer name (Check cache first) + $cached = $tmp_user->getCached('economic_customer'); + if (!$cached) { + $tmp_user->getCustomerEcocomicData($customer_number); + $cached = $tmp_user->getCached('economic_customer'); + } + if ($cached) { + return (isset($cached->barred) && $cached->barred); + } + return false; + } } \ No newline at end of file diff --git a/services/nginx/app/routes/plateScansRoute.php b/services/nginx/app/routes/plateScansRoute.php index 725398dd..2cf49248 100644 --- a/services/nginx/app/routes/plateScansRoute.php +++ b/services/nginx/app/routes/plateScansRoute.php @@ -3,8 +3,10 @@ namespace routes; use classes\authentication; +use objects\customer_vehicles_o; use objects\logs_o; use objects\plate_scans_o; +use objects\users_o; use traits\route_t; class plateScansRoute @@ -81,7 +83,26 @@ class plateScansRoute if ($user) { // Get the number plate scans $number_plate_scans = (new plate_scans_o()); - $result = $number_plate_scans->listObjectsWithPaginationIfSet(null, + $result = $number_plate_scans->listObjectsWithPaginationIfSet( + function ($scan) { + $tmp_scan_customer = [ + 'barred' => false, + 'customer_number' => null, + ]; + // Check if the vehicle is registered to a customer + $vehicle_customer_number = (new customer_vehicles_o())->getPlateCustomerNumber((string)$scan['plate']); + if ($vehicle_customer_number) { + $tmp_scan_customer = [ + 'barred' => (new users_o())->isCustomerBarred($vehicle_customer_number), + 'customer_number' => (int)$vehicle_customer_number, + ]; + } + // Return the object as an array + return [ + ...$scan, + ...$tmp_scan_customer, + ]; + }, $number_plate_scans->forceRestrictFilters( [ 'department_id' => $user->getGroup()->getDepartments() diff --git a/services/nginx/app/routes/vehiclesRoute.php b/services/nginx/app/routes/vehiclesRoute.php index 2446df98..f634d190 100644 --- a/services/nginx/app/routes/vehiclesRoute.php +++ b/services/nginx/app/routes/vehiclesRoute.php @@ -3,6 +3,7 @@ namespace routes; use classes\authentication; +use customers\economic_customer_mo; use objects\customer_vehicles_o; use objects\logs_o; use objects\orders_o; @@ -387,6 +388,7 @@ class vehiclesRoute 'id' => (int)$customer->id, 'customer_name' => (string)$customer->getCustomerName((int)$customer_number), 'customer_number' => (int)$customer_number, + 'barred' => (new economic_customer_mo())->getCustomerByCustomerNumber((int)$customer_number)->asArray()['barred'], ]; }, $customers) );