feat(tickets): enhance AdminAppTicketResource and service with purchase details and update tests
This commit is contained in:
@@ -3,6 +3,7 @@
|
|||||||
namespace App\Domains\Ticket\Resources\AdminApp;
|
namespace App\Domains\Ticket\Resources\AdminApp;
|
||||||
|
|
||||||
use App\Domains\Catalog\Models\ItemAttribute;
|
use App\Domains\Catalog\Models\ItemAttribute;
|
||||||
|
use App\Domains\Purchase\Models\PurchaseItem;
|
||||||
use App\Domains\Ticket\Models\Ticket;
|
use App\Domains\Ticket\Models\Ticket;
|
||||||
use App\Domains\Ticket\Resources\TicketResource;
|
use App\Domains\Ticket\Resources\TicketResource;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
@@ -13,12 +14,36 @@ class AdminAppTicketResource extends TicketResource
|
|||||||
/** @return array<string, mixed> */
|
/** @return array<string, mixed> */
|
||||||
public function toArray(Request $request): array
|
public function toArray(Request $request): array
|
||||||
{
|
{
|
||||||
|
$purchaseItem = $this->sourcePurchaseItem();
|
||||||
|
|
||||||
return [
|
return [
|
||||||
...parent::toArray($request),
|
...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(),
|
'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{
|
* @return list<array{
|
||||||
* code: string,
|
* code: string,
|
||||||
|
|||||||
@@ -20,7 +20,9 @@ class AdminAppTicketService
|
|||||||
...TicketValidityResolver::RELATIONS,
|
...TicketValidityResolver::RELATIONS,
|
||||||
...TicketPresentationResolver::RELATIONS,
|
...TicketPresentationResolver::RELATIONS,
|
||||||
'user',
|
'user',
|
||||||
|
'scannerUser',
|
||||||
'sourceCatalogItem.category',
|
'sourceCatalogItem.category',
|
||||||
|
'sourcePurchase.items',
|
||||||
])
|
])
|
||||||
->orderByDesc('id')
|
->orderByDesc('id')
|
||||||
->paginateFromRequest()
|
->paginateFromRequest()
|
||||||
|
|||||||
@@ -11,6 +11,8 @@ use App\Domains\Catalog\Models\CatalogItem;
|
|||||||
use App\Domains\Catalog\Models\Inventory;
|
use App\Domains\Catalog\Models\Inventory;
|
||||||
use App\Domains\Catalog\Models\Variant;
|
use App\Domains\Catalog\Models\Variant;
|
||||||
use App\Domains\Menu\Models\Menu;
|
use App\Domains\Menu\Models\Menu;
|
||||||
|
use App\Domains\Purchase\Models\Purchase;
|
||||||
|
use App\Domains\Purchase\Models\PurchaseItem;
|
||||||
use App\Domains\Shared\Enums\FieldType;
|
use App\Domains\Shared\Enums\FieldType;
|
||||||
use App\Domains\Tenant\Models\Tenant;
|
use App\Domains\Tenant\Models\Tenant;
|
||||||
use App\Domains\Tenant\Models\WebsiteType;
|
use App\Domains\Tenant\Models\WebsiteType;
|
||||||
@@ -145,14 +147,41 @@ class AdminAppTicketControllerTest extends TestCase
|
|||||||
'item_attribute_id' => $itemAttribute->id,
|
'item_attribute_id' => $itemAttribute->id,
|
||||||
'value' => 'xl',
|
'value' => 'xl',
|
||||||
]);
|
]);
|
||||||
$ticket = $this->createTicket($tenant, $admin, [
|
$purchase = Purchase::query()->create([
|
||||||
|
'tenant_codigo' => $tenant->codigo,
|
||||||
|
'user_id' => $admin->id,
|
||||||
|
'status' => Purchase::STATUS_PAID,
|
||||||
|
'nombre_apellido' => 'Nombre Apellido',
|
||||||
|
'total' => '8000.00',
|
||||||
|
]);
|
||||||
|
PurchaseItem::query()->create([
|
||||||
|
'compra_id' => $purchase->id,
|
||||||
'source_catalog_item_id' => $item->id,
|
'source_catalog_item_id' => $item->id,
|
||||||
'source_variant_id' => $variant->id,
|
'source_variant_id' => $variant->id,
|
||||||
|
'nombre' => 'Remera',
|
||||||
|
'descripcion' => '',
|
||||||
|
'slug' => 'remera',
|
||||||
|
'item_nombre' => 'Remera',
|
||||||
|
'cantidad' => 1,
|
||||||
|
'precio_unitario' => '8000.00',
|
||||||
|
'total' => '8000.00',
|
||||||
|
]);
|
||||||
|
$ticket = $this->createTicket($tenant, $admin, [
|
||||||
|
'source_purchase_id' => $purchase->id,
|
||||||
|
'source_catalog_item_id' => $item->id,
|
||||||
|
'source_variant_id' => $variant->id,
|
||||||
|
'scanner_user_id' => $admin->id,
|
||||||
|
'used_at' => now(),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$this->getJson('/api/v1/adminapp/tenant/tickets')
|
$this->getJson('/api/v1/adminapp/tenant/tickets')
|
||||||
->assertOk()
|
->assertOk()
|
||||||
->assertJsonPath('data.0.id', $ticket->id)
|
->assertJsonPath('data.0.id', $ticket->id)
|
||||||
|
->assertJsonPath('data.0.order_number', $purchase->id)
|
||||||
|
->assertJsonPath('data.0.product', 'Remera')
|
||||||
|
->assertJsonPath('data.0.amount', '8000.00')
|
||||||
|
->assertJsonPath('data.0.status', Ticket::STATUS_USED)
|
||||||
|
->assertJsonPath('data.0.scanned_by', $admin->nombre_apellido)
|
||||||
->assertJsonPath('data.0.variant_properties.0.code', 'size')
|
->assertJsonPath('data.0.variant_properties.0.code', 'size')
|
||||||
->assertJsonPath('data.0.variant_properties.0.label', 'Talle')
|
->assertJsonPath('data.0.variant_properties.0.label', 'Talle')
|
||||||
->assertJsonPath('data.0.variant_properties.0.values.0.value', 'xl')
|
->assertJsonPath('data.0.variant_properties.0.values.0.value', 'xl')
|
||||||
|
|||||||
Reference in New Issue
Block a user