From 6ee3f22e41c5a509df214e82f55aa3565c948c88 Mon Sep 17 00:00:00 2001 From: ncoronel Date: Fri, 28 Aug 2026 14:44:55 -0300 Subject: [PATCH] feat(menu): add tickets menu and update related seeder and tests --- ..._futbol_infantil_tickets_adminapp_menu.php | 82 +++++++++++++++++++ database/seeders/MenuSeeder.php | 7 ++ tests/Feature/Seeders/MenuSeederTest.php | 7 +- 3 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 database/migrations/2026_08_28_000000_add_fiesta_futbol_infantil_tickets_adminapp_menu.php diff --git a/database/migrations/2026_08_28_000000_add_fiesta_futbol_infantil_tickets_adminapp_menu.php b/database/migrations/2026_08_28_000000_add_fiesta_futbol_infantil_tickets_adminapp_menu.php new file mode 100644 index 0000000..87c41fb --- /dev/null +++ b/database/migrations/2026_08_28_000000_add_fiesta_futbol_infantil_tickets_adminapp_menu.php @@ -0,0 +1,82 @@ +where('code', 'main.adminapp')->exists()) { + // Reference data is added by seeders on fresh installations. + return; + } + + $now = now(); + + DB::transaction(function () use ($now): void { + DB::table('menues')->updateOrInsert( + ['code' => self::MENU_CODE], + [ + 'label' => 'Tickets', + 'parent_menu_code' => 'main.adminapp', + 'content_type' => 'dynamic', + 'static_content_schema' => null, + 'route' => '/admin/tickets', + 'created_at' => $now, + 'updated_at' => $now, + ], + ); + + DB::table('tenants_menues') + ->where('menu_code', self::MENU_CODE) + ->where('tenant_code', '!=', self::TENANT_CODE) + ->delete(); + + if (DB::table('tenants')->where('codigo', self::TENANT_CODE)->exists()) { + DB::table('tenants_menues')->updateOrInsert( + [ + 'tenant_code' => self::TENANT_CODE, + 'menu_code' => self::MENU_CODE, + ], + [ + 'static_content' => null, + 'created_at' => $now, + 'updated_at' => $now, + ], + ); + } + + DB::table('roles') + ->whereIn('codigo', ['admin', 'adminapp']) + ->pluck('codigo') + ->each(function (string $roleCode): void { + DB::table('roles_menues')->updateOrInsert([ + 'rol_codigo' => $roleCode, + 'menu_codigo' => self::MENU_CODE, + ]); + }); + }); + } + + public function down(): void + { + DB::transaction(function (): void { + DB::table('tenants_menues') + ->where('menu_code', self::MENU_CODE) + ->delete(); + + DB::table('roles_menues') + ->where('menu_codigo', self::MENU_CODE) + ->delete(); + + DB::table('menues') + ->where('code', self::MENU_CODE) + ->delete(); + }); + } +}; diff --git a/database/seeders/MenuSeeder.php b/database/seeders/MenuSeeder.php index dbab420..11885b5 100644 --- a/database/seeders/MenuSeeder.php +++ b/database/seeders/MenuSeeder.php @@ -78,6 +78,12 @@ class MenuSeeder extends Seeder 'parent_menu_code' => 'main.adminapp', 'route' => '/admin/staff', ], + [ + 'code' => 'adminapp.tickets', + 'label' => 'Tickets', + 'parent_menu_code' => 'main.adminapp', + 'route' => '/admin/tickets', + ], [ 'code' => 'adminapp.fiesta-futbol-infantil.entradas', 'label' => 'Entradas', @@ -270,6 +276,7 @@ class MenuSeeder extends Seeder 'fiesta_futbol_infantil', ]; $fiestaCategoryMenuCodes = [ + 'adminapp.tickets', 'adminapp.fiesta-futbol-infantil.entradas', 'adminapp.fiesta-futbol-infantil.alojamientos', 'adminapp.fiesta-futbol-infantil.merchandising', diff --git a/tests/Feature/Seeders/MenuSeederTest.php b/tests/Feature/Seeders/MenuSeederTest.php index 6f579d0..d253c8d 100644 --- a/tests/Feature/Seeders/MenuSeederTest.php +++ b/tests/Feature/Seeders/MenuSeederTest.php @@ -34,6 +34,7 @@ class MenuSeederTest extends TestCase 'adminapp.ventas' => ['Ventas', '/admin/ventas'], ]; $fiestaCategoryMenus = [ + 'adminapp.tickets' => ['Tickets', '/admin/tickets'], 'adminapp.fiesta-futbol-infantil.entradas' => ['Entradas', '/admin/entradas'], 'adminapp.fiesta-futbol-infantil.alojamientos' => ['Alojamientos', '/admin/alojamientos'], 'adminapp.fiesta-futbol-infantil.merchandising' => ['Merchandising', '/admin/merchandising'], @@ -49,7 +50,11 @@ class MenuSeederTest extends TestCase $this->assertSame(Menu::CONTENT_TYPE_DYNAMIC, $adminApp->content_type); $this->assertSame('/', $adminApp->route); $this->assertSame( - array_keys([...$expectedMenus, ...$fiestaCategoryMenus]), + collect(array_keys([ + ...$expectedMenus, + ...$fiestaCategoryMenus, + 'adminapp.desfile.entradas' => ['Entradas', '/admin/desfile/entradas'], + ]))->sort()->values()->all(), $adminApp->children->pluck('code')->sort()->values()->all() ); $this->assertTrue(