Add unit tests for invoicing, orders normalization, gateway commands, and department complaints. Update schema bootstraps and improve agent command execution logic.
This commit is contained in:
@@ -6,6 +6,7 @@ use attachments\helpers\attachment_content;
|
||||
use classes\db;
|
||||
use classes\email;
|
||||
use classes\invoicing_period_utils;
|
||||
use classes\orders_schema_bootstrap;
|
||||
use classes\pdf_generator;
|
||||
use classes\motorapi;
|
||||
use classes\object_property;
|
||||
@@ -31,6 +32,7 @@ class orders_o extends db
|
||||
public object_property $reg_3;
|
||||
public economic_module_orders $economic_module_orders;
|
||||
public object_property $created_at;
|
||||
public object_property $include_in_invoice;
|
||||
public object_property $deleted_at;
|
||||
|
||||
public object_property $completed_at;
|
||||
@@ -53,6 +55,7 @@ class orders_o extends db
|
||||
|
||||
public function structure(): void
|
||||
{
|
||||
orders_schema_bootstrap::ensureTables();
|
||||
$this->setTable('orders');
|
||||
}
|
||||
|
||||
@@ -86,6 +89,7 @@ class orders_o extends db
|
||||
$this->reg_2 = new object_property($this->table, $this->id, 'reg_2', 'string', false);
|
||||
$this->reg_3 = new object_property($this->table, $this->id, 'reg_3', 'string', false);
|
||||
$this->created_at = new object_property($this->table, $this->id, 'created_at', 'timestamp', false);
|
||||
$this->include_in_invoice = new object_property($this->table, $this->id, 'include_in_invoice', 'bool', false);
|
||||
$this->completed_at = new object_property($this->table, $this->id, 'completed_at', 'timestamp', false);
|
||||
$this->economic_module_orders = (new economic_module_orders())->getByOrderId($this->id);
|
||||
$this->stripe_module_orders = (new stripe_module_orders_o())->select($this->id);
|
||||
@@ -568,6 +572,8 @@ class orders_o extends db
|
||||
'reg_3' => $this->reg_3->value(),
|
||||
'completed_at' => $this->completed_at->value(),
|
||||
'created_at' => $this->created_at->value(),
|
||||
'include_in_invoice' => $this->getIncludeInInvoiceOverride(),
|
||||
'include_in_invoice_effective' => $this->isIncludedInInvoicing(),
|
||||
'deleted_at' => $this->deleted_at->value(),
|
||||
'total_net_amount' => $this->temporary_net_amount ?: $this->getNetAmount(),
|
||||
'invoice_collection_id' => (int)$this->invoice_collection_id->value(),
|
||||
@@ -1491,6 +1497,44 @@ class orders_o extends db
|
||||
public function isIncludedInInvoicing(): bool
|
||||
{
|
||||
self::requireSelected();
|
||||
$override = $this->getIncludeInInvoiceOverride();
|
||||
if ($override !== null) {
|
||||
return $override;
|
||||
}
|
||||
|
||||
return $this->resolveDepartmentIncludedInInvoicing();
|
||||
}
|
||||
|
||||
public static function normalizeNullableBooleanValue(mixed $value): ?bool
|
||||
{
|
||||
if ($value === null || $value === '') {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (is_bool($value)) {
|
||||
return $value;
|
||||
}
|
||||
|
||||
if (is_int($value)) {
|
||||
return $value === 1 ? true : ($value === 0 ? false : null);
|
||||
}
|
||||
|
||||
$normalized = strtolower(trim((string)$value));
|
||||
return match ($normalized) {
|
||||
'1', 'true' => true,
|
||||
'0', 'false' => false,
|
||||
default => null,
|
||||
};
|
||||
}
|
||||
|
||||
public function getIncludeInInvoiceOverride(): ?bool
|
||||
{
|
||||
self::requireSelected();
|
||||
return self::normalizeNullableBooleanValue($this->include_in_invoice->value());
|
||||
}
|
||||
|
||||
protected function resolveDepartmentIncludedInInvoicing(): bool
|
||||
{
|
||||
return !(new departments_o())->select((int)$this->department_id->value())->isExcludedFromInvoicing();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user