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

@@ -5,6 +5,7 @@ namespace App\Domains\Desfile\Services;
use DateTimeInterface;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\Str;
use RuntimeException;
@@ -58,7 +59,7 @@ class InvitationPurchaseProvisioner
$allocation['type'],
);
$this->createPurchaseItem(
$purchaseItemId = $this->createPurchaseItem(
$purchaseId,
$catalogItem,
$variant,
@@ -70,6 +71,7 @@ class InvitationPurchaseProvisioner
);
$this->createTicketAndCommitStock(
$purchaseId,
$purchaseItemId,
$userId,
(int) $catalogItem->id,
$variant,
@@ -326,12 +328,13 @@ class InvitationPurchaseProvisioner
int $seat,
string $type,
DateTimeInterface $now,
): void {
if (DB::table('compra_items')
): int {
$existingId = DB::table('compra_items')
->where('compra_id', $purchaseId)
->where('source_variant_id', $variant->id)
->exists()) {
return;
->value('id');
if ($existingId !== null) {
return (int) $existingId;
}
$attributes = [
@@ -341,7 +344,7 @@ class InvitationPurchaseProvisioner
['name' => 'Asiento', 'value' => (string) $seat],
];
DB::table('compra_items')->insert([
return DB::table('compra_items')->insertGetId([
'compra_id' => $purchaseId,
'source_catalog_item_id' => $catalogItem->id,
'source_variant_id' => $variant->id,
@@ -367,13 +370,18 @@ class InvitationPurchaseProvisioner
private function createTicketAndCommitStock(
int $purchaseId,
int $purchaseItemId,
int $userId,
int $catalogItemId,
object $variant,
DateTimeInterface $now,
): void {
$purchaseReference = Schema::hasColumn('tickets', 'source_purchase_item_id')
? ['source_purchase_item_id' => $purchaseItemId]
: ['source_purchase_id' => $purchaseId];
if (DB::table('tickets')
->where('source_purchase_id', $purchaseId)
->where($purchaseReference)
->where('source_variant_id', $variant->id)
->exists()) {
return;
@@ -420,7 +428,7 @@ class InvitationPurchaseProvisioner
'ticket' => (string) Str::uuid(),
'name' => null,
'description' => null,
'source_purchase_id' => $purchaseId,
...$purchaseReference,
'source_catalog_item_id' => $catalogItemId,
'source_variant_id' => $variant->id,
'used_at' => null,