Files
api/services/nginx/app/objects/customer_vehicles_addons_o.php
T
Jepp9350 6cc5e6bbf0 Add custom routes, subscription features, and refactor orders
Introduced a new POST route for collected vehicle subscription invoices and enhanced responses with wash subscription transactions. Refactored order handling by adding department-based pricing logic and simplifying reusable methods. Various minor improvements include exception handling, input validation, and updated permissions.
2025-04-28 14:24:11 +02:00

94 lines
2.7 KiB
PHP

<?php
namespace objects;
use classes\db;
use classes\object_property;
use Exception;
use traits\db_object_t;
class customer_vehicles_addons_o extends db
{
use db_object_t;
public object_property $vehicle_id; // The id of the vehicle
public object_property $addon_id; // The id of the addon
public object_property $amount; // The amount of the addon
public function structure(): void
{
$this->setTable('customer_vehicles_addons');
}
/**
* Add a new vehicle addon
* @param int $vehicle_id
* @param int $addon_id
* @param int $amount
* @return void
* @throws Exception If the object was not created successfully
*/
public function add(int $vehicle_id, int $addon_id, int $amount = 1): void
{
$tmp_id = self::add_object([
'vehicle_id' => (int)$vehicle_id,
'addon_id' => (int)$addon_id,
'amount' => (int)$amount
]);
$this->id = $tmp_id;
self::getObjectProperties();
self::objectChanged();
}
public function getObjectProperties(): void
{
$this->vehicle_id = new object_property($this->table, $this->id, 'vehicle_id', 'int', true);
$this->addon_id = new object_property($this->table, $this->id, 'addon_id', 'int', true);
$this->amount = new object_property($this->table, $this->id, 'amount', 'int', true);
}
public function objectChanged(): void
{
//TODO: Add cache invalidation
}
/**
* Convert the object to an array
* @throws Exception If the object is not selected
* @throws Exception If the object is not foun
*/
public function asArray(): array
{
self::requireSelected();
return [
'id' => (int)$this->id,
'vehicle_id' => (int)$this->vehicle_id->value(),
'addon_id' => (int)$this->addon_id->value(),
'amount' => (int)$this->amount->value(),
'product' => self::getProduct($this->getOption((int)$this->addon_id->value()))->asArray(),
];
}
/**
* @param product_options_o $product_option
* @return products_o
* @throws Exception If the object is not selected
* @throws Exception If the product is not selected
* @throws Exception If the product is not found
*/
private function getProduct(product_options_o $product_option): products_o
{
return (new products_o())->select((int)$product_option->option_id->value());
}
/**
* @return product_options_o
* @throws Exception If the object is not selected
*/
private function getOption(): product_options_o
{
self::requireSelected();
return (new product_options_o())->select((int)$this->addon_id->value());
}
}