Squashed commit of the following:

commit 6ae625d4fdc11989950ef0678db62fdb52be7c8c
Author: ncoronel <ncoronel@quo.ar>
Date:   Wed Sep 2 09:46:18 2026 -0300

    refactor(tickets): enhance search functionality for tickets by client names and formatted amounts

commit 098e525d32be9cb6487bc01a3d120aa0f2386a15
Author: ncoronel <ncoronel@quo.ar>
Date:   Wed Sep 2 09:09:30 2026 -0300

    fix(tickets): protect referenced purchase items

commit 210db17f2f6a6a4a509297b773a2b5d3e3149a3d
Author: ncoronel <ncoronel@quo.ar>
Date:   Wed Sep 2 08:59:24 2026 -0300

    test(tickets): cover purchase item references

commit 6a004713c4bad622dfa5e26394458925db1cb5a7
Author: ncoronel <ncoronel@quo.ar>
Date:   Wed Sep 2 08:59:02 2026 -0300

    refactor(tickets): reference purchase items directly
This commit is contained in:
2026-09-02 09:47:04 -03:00
parent 836aa1afd7
commit ee906d2d2e
18 changed files with 504 additions and 85 deletions

View File

@@ -3,7 +3,6 @@
namespace App\Domains\Ticket\Services;
use App\Domains\Catalog\Models\ItemAttribute;
use App\Domains\Purchase\Models\PurchaseItem;
use App\Domains\Ticket\Models\Ticket;
use Illuminate\Support\Collection;
@@ -23,16 +22,16 @@ class AdminAppTicketRowService
/** @return array<string, mixed> */
public function details(Ticket $ticket): array
{
$purchaseItem = $this->sourcePurchaseItem($ticket);
$purchaseItem = $ticket->sourcePurchaseItem;
return [
'source_purchase_id' => $ticket->source_purchase_id,
'order_number' => $ticket->source_purchase_id,
'source_purchase_item_id' => $ticket->source_purchase_item_id,
'order_number' => $purchaseItem?->compra_id,
'product' => $purchaseItem?->item_nombre
?? $ticket->sourceCatalogItem?->nombre
?? $ticket->name,
'amount' => $purchaseItem?->precio_unitario,
'client' => $ticket->sourcePurchase?->nombre_apellido ?? $ticket->user?->nombre_apellido,
'client' => $purchaseItem?->purchase?->nombre_apellido ?? $ticket->user?->nombre_apellido,
'status' => $ticket->status,
'scanned_by' => $ticket->scannerUser?->nombre_apellido,
'variant_properties' => $this->variantProperties($ticket),
@@ -175,18 +174,6 @@ class AdminAppTicketRowService
->implode(', ');
}
private function sourcePurchaseItem(Ticket $ticket): ?PurchaseItem
{
return $ticket->sourcePurchase?->items->first(function (PurchaseItem $item) use ($ticket): bool {
if ($ticket->source_variant_id !== null) {
return $item->source_variant_id === $ticket->source_variant_id;
}
return $item->source_catalog_item_id === $ticket->source_catalog_item_id
&& $item->source_variant_id === null;
});
}
/** @return list<array{code: string, label: string, values: list<array{value: string, label: string}>}> */
private function variantProperties(Ticket $ticket): array
{