*/ 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 * }> */ 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(); } }