88 lines
3.0 KiB
PHP
88 lines
3.0 KiB
PHP
<?php
|
|
|
|
namespace App\Domains\Ticket\Controllers\AdminApp;
|
|
|
|
use App\Domains\Ticket\Requests\AdminAppTicketExportRequest;
|
|
use App\Domains\Ticket\Requests\AdminAppTicketIndexRequest;
|
|
use App\Domains\Ticket\Requests\AdminAppTicketRefundRequest;
|
|
use App\Domains\Ticket\Resources\AdminApp\AdminAppTicketCollection;
|
|
use App\Domains\Ticket\Resources\AdminApp\AdminAppTicketRefundCalculationResource;
|
|
use App\Domains\Ticket\Resources\AdminApp\AdminAppTicketResource;
|
|
use App\Domains\Ticket\Services\AdminAppTicketExcelService;
|
|
use App\Domains\Ticket\Services\AdminAppTicketPdfService;
|
|
use App\Domains\Ticket\Services\AdminAppTicketService;
|
|
use App\Http\Controllers\Controller;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Http\Response;
|
|
use Symfony\Component\HttpFoundation\StreamedResponse;
|
|
|
|
class TicketController extends Controller
|
|
{
|
|
public function __construct(
|
|
private readonly AdminAppTicketService $ticketService,
|
|
private readonly AdminAppTicketPdfService $ticketPdfService,
|
|
private readonly AdminAppTicketExcelService $ticketExcelService,
|
|
) {}
|
|
|
|
public function index(AdminAppTicketIndexRequest $request): AdminAppTicketCollection
|
|
{
|
|
$tenant = $request->user()->tenant()->firstOrFail();
|
|
|
|
return new AdminAppTicketCollection(
|
|
$this->ticketService->search($tenant, $request->validated())
|
|
);
|
|
}
|
|
|
|
public function cancel(Request $request, int $ticket): AdminAppTicketResource
|
|
{
|
|
$tenant = $request->user()->tenant()->firstOrFail();
|
|
|
|
return new AdminAppTicketResource($this->ticketService->cancel($tenant, $ticket));
|
|
}
|
|
|
|
public function calculateRefund(Request $request, int $ticket): AdminAppTicketRefundCalculationResource
|
|
{
|
|
$tenant = $request->user()->tenant()->firstOrFail();
|
|
|
|
return new AdminAppTicketRefundCalculationResource(
|
|
$this->ticketService->calculateRefund($tenant, $ticket)
|
|
);
|
|
}
|
|
|
|
public function refund(AdminAppTicketRefundRequest $request, int $ticket): AdminAppTicketResource
|
|
{
|
|
$tenant = $request->user()->tenant()->firstOrFail();
|
|
|
|
return new AdminAppTicketResource(
|
|
$this->ticketService->refund(
|
|
$tenant,
|
|
$ticket,
|
|
$request->validated('refund_type'),
|
|
$request->user(),
|
|
)
|
|
);
|
|
}
|
|
|
|
public function downloadPdf(AdminAppTicketExportRequest $request): Response
|
|
{
|
|
$tenant = $request->user()->tenant()->firstOrFail();
|
|
|
|
return $this->ticketPdfService->download(
|
|
$tenant,
|
|
$this->ticketService->ticketsForExport($tenant, $request->validated()),
|
|
$request->validated('timezone'),
|
|
);
|
|
}
|
|
|
|
public function downloadExcel(AdminAppTicketExportRequest $request): StreamedResponse
|
|
{
|
|
$tenant = $request->user()->tenant()->firstOrFail();
|
|
|
|
return $this->ticketExcelService->download(
|
|
$tenant,
|
|
$this->ticketService->ticketsForExport($tenant, $request->validated()),
|
|
$request->validated('timezone'),
|
|
);
|
|
}
|
|
}
|