88 lines
3.0 KiB
PHP
88 lines
3.0 KiB
PHP
<?php
|
|
|
|
namespace App\Domains\Ticket\Resources\AdminApp;
|
|
|
|
use App\Domains\Catalog\Models\ItemAttribute;
|
|
use App\Domains\Purchase\Models\PurchaseItem;
|
|
use App\Domains\Ticket\Models\Ticket;
|
|
use App\Domains\Ticket\Resources\TicketResource;
|
|
use Illuminate\Http\Request;
|
|
|
|
/** @mixin Ticket */
|
|
class AdminAppTicketResource extends TicketResource
|
|
{
|
|
/** @return array<string, mixed> */
|
|
public function toArray(Request $request): array
|
|
{
|
|
$purchaseItem = $this->sourcePurchaseItem();
|
|
|
|
return [
|
|
...parent::toArray($request),
|
|
'source_purchase_id' => $this->source_purchase_id,
|
|
'order_number' => $this->source_purchase_id,
|
|
'product' => $purchaseItem?->item_nombre
|
|
?? $this->sourceCatalogItem?->nombre
|
|
?? $this->name,
|
|
'amount' => $purchaseItem?->precio_unitario,
|
|
'client' => $this->sourcePurchase?->nombre_apellido ?? $this->user?->nombre_apellido,
|
|
'date' => $this->sourcePurchase?->created_at,
|
|
'status' => $this->status,
|
|
'scanned_by' => $this->scannerUser?->nombre_apellido,
|
|
'variant_properties' => $this->variantProperties(),
|
|
];
|
|
}
|
|
|
|
private function sourcePurchaseItem(): ?PurchaseItem
|
|
{
|
|
return $this->sourcePurchase?->items->first(function (PurchaseItem $item): bool {
|
|
if ($this->source_variant_id !== null) {
|
|
return $item->source_variant_id === $this->source_variant_id;
|
|
}
|
|
|
|
return $item->source_catalog_item_id === $this->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(): array
|
|
{
|
|
$variant = $this->sourceVariant;
|
|
|
|
if ($variant === null) {
|
|
return [];
|
|
}
|
|
|
|
$itemAttributes = $variant->definitions
|
|
->map(fn ($definition) => $definition->itemAttribute)
|
|
->filter()
|
|
->merge($variant->catalogItem?->itemAttributes ?? collect())
|
|
->unique('id')
|
|
->values();
|
|
|
|
return $variant->selectionOptions($itemAttributes)
|
|
->map(function (array $selection, string $attributeCode) use ($itemAttributes): array {
|
|
$itemAttribute = $itemAttributes->first(
|
|
fn (ItemAttribute $itemAttribute): bool => $itemAttribute->attribute?->codigo
|
|
=== $attributeCode,
|
|
);
|
|
$values = array_is_list($selection) ? $selection : [$selection];
|
|
|
|
return [
|
|
'code' => $attributeCode,
|
|
'label' => $itemAttribute?->attribute?->nombre
|
|
?? ($attributeCode === 'event_date' ? 'Fecha' : $attributeCode),
|
|
'values' => array_values($values),
|
|
];
|
|
})
|
|
->values()
|
|
->all();
|
|
}
|
|
}
|