diff --git a/app/Domains/Ticketing/Ticket/Controllers/AdminApp/TicketController.php b/app/Domains/Ticketing/Ticket/Controllers/AdminApp/TicketController.php index 6106ddd1..3c9bdbaa 100644 --- a/app/Domains/Ticketing/Ticket/Controllers/AdminApp/TicketController.php +++ b/app/Domains/Ticketing/Ticket/Controllers/AdminApp/TicketController.php @@ -29,7 +29,7 @@ class TicketController extends Controller $tenant = $request->user()->tenant()->firstOrFail(); return new AdminAppTicketCollection( - $this->ticketService->search($tenant, $request->validated()) + $this->ticketService->search($tenant, $request->validated(), $request->user()->event_id) ); } @@ -37,7 +37,7 @@ class TicketController extends Controller { $tenant = $request->user()->tenant()->firstOrFail(); - return new AdminAppTicketResource($this->ticketService->cancel($tenant, $ticket)); + return new AdminAppTicketResource($this->ticketService->cancel($tenant, $ticket, $request->user()->event_id)); } public function calculateRefund(Request $request, int $ticket): AdminAppTicketRefundCalculationResource @@ -45,7 +45,7 @@ class TicketController extends Controller $tenant = $request->user()->tenant()->firstOrFail(); return new AdminAppTicketRefundCalculationResource( - $this->ticketService->calculateRefund($tenant, $ticket) + $this->ticketService->calculateRefund($tenant, $ticket, $request->user()->event_id) ); } @@ -69,7 +69,7 @@ class TicketController extends Controller return $this->ticketPdfService->download( $tenant, - $this->ticketService->ticketsForExport($tenant, $request->validated()), + $this->ticketService->ticketsForExport($tenant, $request->validated(), $request->user()->event_id), $request->validated('timezone'), ); } @@ -80,7 +80,7 @@ class TicketController extends Controller return $this->ticketExcelService->download( $tenant, - $this->ticketService->ticketsForExport($tenant, $request->validated()), + $this->ticketService->ticketsForExport($tenant, $request->validated(), $request->user()->event_id), $request->validated('timezone'), ); } diff --git a/app/Domains/Ticketing/Ticket/Services/AdminAppTicketService.php b/app/Domains/Ticketing/Ticket/Services/AdminAppTicketService.php index 81dbfa0f..e8dc384d 100644 --- a/app/Domains/Ticketing/Ticket/Services/AdminAppTicketService.php +++ b/app/Domains/Ticketing/Ticket/Services/AdminAppTicketService.php @@ -41,9 +41,9 @@ class AdminAppTicketService /** * @param array{q?: string|null, category?: string|null, product?: string|null, type?: string|null, date?: string|null, size?: string|null, status?: string|null, page?: int, per_page?: int, sort_by?: string|null, sort_direction?: string|null} $filters */ - public function search(Tenant $tenant, array $filters = []): AdminAppTicketResult + public function search(Tenant $tenant, array $filters = [], ?int $eventId = null): AdminAppTicketResult { - $query = $this->baseQuery($tenant, $filters); + $query = $this->baseQuery($tenant, $filters, $eventId); $countQuery = clone $query; $databaseSorted = $this->applyDatabaseSort($query, $tenant, $filters); @@ -77,7 +77,7 @@ class AdminAppTicketService tickets: $tickets, scannedTickets: $scannedTickets, totalTickets: $totalTickets, - refundedTotal: $this->refundSummaryService->totalForTenant($tenant), + refundedTotal: $this->refundSummaryService->totalForTenant($tenant, $eventId), ); } @@ -85,9 +85,9 @@ class AdminAppTicketService * @param array{q?: string|null, category?: string|null, product?: string|null, type?: string|null, date?: string|null, size?: string|null, status?: string|null, sort_by?: string|null, sort_direction?: string|null} $filters * @return Collection */ - public function ticketsForExport(Tenant $tenant, array $filters = []): Collection + public function ticketsForExport(Tenant $tenant, array $filters = [], ?int $eventId = null): Collection { - $query = $this->baseQuery($tenant, $filters); + $query = $this->baseQuery($tenant, $filters, $eventId); $databaseSorted = $this->applyDatabaseSort($query, $tenant, $filters); $tickets = $query ->with(self::RELATIONS) @@ -97,11 +97,10 @@ class AdminAppTicketService return $databaseSorted ? $tickets : $this->sortTickets($tickets, $tenant, $filters); } - public function cancel(Tenant $tenant, int $ticketId): Ticket + public function cancel(Tenant $tenant, int $ticketId, ?int $eventId = null): Ticket { - return DB::transaction(function () use ($tenant, $ticketId): Ticket { - $ticket = Ticket::query() - ->where('tenant_code', $tenant->codigo) + return DB::transaction(function () use ($tenant, $ticketId, $eventId): Ticket { + $ticket = $this->ticketsQuery($tenant, $eventId) ->lockForUpdate() ->findOrFail($ticketId); @@ -124,10 +123,9 @@ class AdminAppTicketService * partial: string|null, * } */ - public function calculateRefund(Tenant $tenant, int $ticketId): array + public function calculateRefund(Tenant $tenant, int $ticketId, ?int $eventId = null): array { - $ticket = Ticket::query() - ->where('tenant_code', $tenant->codigo) + $ticket = $this->ticketsQuery($tenant, $eventId) ->findOrFail($ticketId); if (! $ticket->can_refund()) { @@ -175,14 +173,13 @@ class AdminAppTicketService string $refundType, ?User $createdBy = null, ): Ticket { - $this->ensureRefundIsAllowed($tenant, $refundType); - return DB::transaction(function () use ($tenant, $ticketId, $refundType, $createdBy): Ticket { - $ticket = Ticket::query() - ->where('tenant_code', $tenant->codigo) + $ticket = $this->ticketsQuery($tenant, $createdBy?->event_id) ->lockForUpdate() ->findOrFail($ticketId); + $this->ensureRefundIsAllowed($tenant, $refundType); + if (! $ticket->can_refund()) { if ($ticket->status !== Ticket::STATUS_ACTIVE) { throw ValidationException::withMessages([ @@ -314,12 +311,11 @@ class AdminAppTicketService * @param array{q?: string|null, category?: string|null, product?: string|null, type?: string|null, date?: string|null, size?: string|null, status?: string|null, page?: int, per_page?: int} $filters * @return Builder */ - private function baseQuery(Tenant $tenant, array $filters): Builder + private function baseQuery(Tenant $tenant, array $filters, ?int $eventId = null): Builder { $search = trim((string) ($filters['q'] ?? '')); - $query = Ticket::query() - ->where('tenant_code', $tenant->codigo) + $query = $this->ticketsQuery($tenant, $eventId) ->when($search !== '', function (Builder $query) use ($search): void { $this->applySearchFilter($query, $search); }) @@ -359,6 +355,14 @@ class AdminAppTicketService return $query; } + /** @return Builder */ + private function ticketsQuery(Tenant $tenant, ?int $eventId): Builder + { + return Ticket::query() + ->where('tenant_code', $tenant->codigo) + ->when($eventId !== null, fn (Builder $query): Builder => $query->where('tickets.event_id', $eventId)); + } + /** @param Builder $query */ private function applySearchFilter(Builder $query, string $search): void {