63 lines
1.9 KiB
PHP
63 lines
1.9 KiB
PHP
<?php
|
|
|
|
namespace App\Domains\Ticket\Resources\AdminApp;
|
|
|
|
use App\Domains\Catalog\Models\ItemAttribute;
|
|
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
|
|
{
|
|
return [
|
|
...parent::toArray($request),
|
|
'variant_properties' => $this->variantProperties(),
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @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();
|
|
}
|
|
}
|