feat(tickets): add PDF and Excel export endpoints

This commit is contained in:
2026-08-31 12:03:25 -03:00
parent 457eba68a9
commit 5250d1a818
9 changed files with 575 additions and 1 deletions

View File

@@ -17,6 +17,7 @@ use App\Domains\Shared\Enums\FieldType;
use App\Domains\Tenant\Models\Tenant;
use App\Domains\Tenant\Models\WebsiteType;
use App\Domains\Ticket\Models\Ticket;
use Barryvdh\DomPDF\ServiceProvider as DomPdfServiceProvider;
use Database\Seeders\AttributeSeeder;
use Database\Seeders\AuthorizationSeeder;
use Database\Seeders\FiestaFutbolInfantilProductSeeder;
@@ -33,6 +34,8 @@ class AdminAppTicketControllerTest extends TestCase
{
parent::setUp();
$this->app->register(DomPdfServiceProvider::class);
$this->seed(AuthorizationSeeder::class);
WebsiteType::query()->create(['codigo' => 'onticket', 'nombre' => 'OnTicket']);
}
@@ -284,6 +287,42 @@ class AdminAppTicketControllerTest extends TestCase
->assertJsonPath('data.0.id', $active->id);
}
public function test_it_downloads_filtered_ticket_reports(): void
{
$tenant = $this->createTenant('fiesta_futbol_infantil');
$admin = $this->createAdminAppUser($tenant);
$this->grantTicketsMenu($tenant);
Sanctum::actingAs($admin);
$ticket = $this->createTicket($tenant, $admin);
$query = http_build_query([
'q' => (string) $ticket->id,
'timezone' => 'America/Argentina/Buenos_Aires',
]);
$this->get('/api/v1/adminapp/tenant/tickets/pdf?'.$query)
->assertOk()
->assertHeader('content-type', 'application/pdf');
$this->get('/api/v1/adminapp/tenant/tickets/excel?'.$query)
->assertOk()
->assertHeader(
'content-type',
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
);
}
public function test_ticket_reports_require_a_valid_timezone(): void
{
$tenant = $this->createTenant('fiesta_futbol_infantil');
$this->grantTicketsMenu($tenant);
Sanctum::actingAs($this->createAdminAppUser($tenant));
$this->getJson('/api/v1/adminapp/tenant/tickets/pdf')->assertUnprocessable();
$this->getJson('/api/v1/adminapp/tenant/tickets/excel?timezone=Invalid')
->assertUnprocessable();
}
private function createTenant(string $code): Tenant
{
$headerLogo = $this->createAttachment("{$code}-header.png");