From 94db48467e77494ec08547e39575f50d6f1b2e0a Mon Sep 17 00:00:00 2001 From: ncoronel Date: Tue, 29 Sep 2026 16:35:07 -0300 Subject: [PATCH] feat: add tenant menu visibility --- .../Services/TenantBootstrapService.php | 12 +++++--- app/Domains/Core/Menu/Models/Menu.php | 2 +- app/Domains/Core/Menu/Models/TenantMenu.php | 2 ++ app/Domains/Core/Tenant/Models/Tenant.php | 2 +- app/Http/Middleware/EnsureTenantHasMenu.php | 3 ++ ...add_is_enabled_to_tenants_menues_table.php | 22 ++++++++++++++ ..._020000_make_help_terms_content_static.php | 29 +++++++++++++++++++ database/seeders/MenuSeeder.php | 5 +++- 8 files changed, 70 insertions(+), 7 deletions(-) create mode 100644 database/migrations/2026_09_29_010000_add_is_enabled_to_tenants_menues_table.php create mode 100644 database/migrations/2026_09_29_020000_make_help_terms_content_static.php diff --git a/app/Domains/Core/Bootstrap/Services/TenantBootstrapService.php b/app/Domains/Core/Bootstrap/Services/TenantBootstrapService.php index 9ccb8aa3..a89e3c05 100644 --- a/app/Domains/Core/Bootstrap/Services/TenantBootstrapService.php +++ b/app/Domains/Core/Bootstrap/Services/TenantBootstrapService.php @@ -33,10 +33,14 @@ class TenantBootstrapService $tenant, [ 'eventDateChanges', - 'menues' => fn ($query) => $query->whereHas( - 'roles', - fn ($query) => $query->where('codigo', RoleCode::User->value) - ), + 'menues' => fn ($query) => $query + ->where(fn ($query) => $query + ->where('menues.code', 'help.contact') + ->orWhere('tenants_menues.is_enabled', true)) + ->whereHas( + 'roles', + fn ($query) => $query->where('codigo', RoleCode::User->value) + ), $tenant->storefront_website_type_code === 'onticket_multi_event' ? 'eventCategories' : 'categories' => fn ($query) => $query->orderBy('nombre'), ] diff --git a/app/Domains/Core/Menu/Models/Menu.php b/app/Domains/Core/Menu/Models/Menu.php index 5862decd..87a53c58 100644 --- a/app/Domains/Core/Menu/Models/Menu.php +++ b/app/Domains/Core/Menu/Models/Menu.php @@ -76,7 +76,7 @@ class Menu extends Model 'codigo' ) ->using(TenantMenu::class) - ->withPivot('static_content') + ->withPivot('static_content', 'is_enabled') ->withTimestamps(); } diff --git a/app/Domains/Core/Menu/Models/TenantMenu.php b/app/Domains/Core/Menu/Models/TenantMenu.php index d6f4e93d..9eb96c15 100644 --- a/app/Domains/Core/Menu/Models/TenantMenu.php +++ b/app/Domains/Core/Menu/Models/TenantMenu.php @@ -16,12 +16,14 @@ class TenantMenu extends Pivot 'tenant_code', 'menu_code', 'static_content', + 'is_enabled', ]; protected function casts(): array { return [ 'static_content' => 'array', + 'is_enabled' => 'boolean', ]; } diff --git a/app/Domains/Core/Tenant/Models/Tenant.php b/app/Domains/Core/Tenant/Models/Tenant.php index c06ecc6c..532264ea 100644 --- a/app/Domains/Core/Tenant/Models/Tenant.php +++ b/app/Domains/Core/Tenant/Models/Tenant.php @@ -319,7 +319,7 @@ class Tenant extends Model 'code' ) ->using(TenantMenu::class) - ->withPivot('static_content') + ->withPivot('static_content', 'is_enabled') ->withTimestamps(); } } diff --git a/app/Http/Middleware/EnsureTenantHasMenu.php b/app/Http/Middleware/EnsureTenantHasMenu.php index 659b0657..ef7eda08 100644 --- a/app/Http/Middleware/EnsureTenantHasMenu.php +++ b/app/Http/Middleware/EnsureTenantHasMenu.php @@ -13,6 +13,9 @@ class EnsureTenantHasMenu $tenant = $request->user()?->tenant()->first(); $hasMenu = $tenant?->menues() ->where('menues.code', $menuCode) + ->where(fn ($query) => $query + ->where('menues.code', 'help.contact') + ->orWhere('tenants_menues.is_enabled', true)) ->exists() ?? false; abort_unless($hasMenu, 404); diff --git a/database/migrations/2026_09_29_010000_add_is_enabled_to_tenants_menues_table.php b/database/migrations/2026_09_29_010000_add_is_enabled_to_tenants_menues_table.php new file mode 100644 index 00000000..88b1cef9 --- /dev/null +++ b/database/migrations/2026_09_29_010000_add_is_enabled_to_tenants_menues_table.php @@ -0,0 +1,22 @@ +boolean('is_enabled')->default(true); + }); + } + + public function down(): void + { + Schema::table('tenants_menues', function (Blueprint $table): void { + $table->dropColumn('is_enabled'); + }); + } +}; diff --git a/database/migrations/2026_09_29_020000_make_help_terms_content_static.php b/database/migrations/2026_09_29_020000_make_help_terms_content_static.php new file mode 100644 index 00000000..a318a661 --- /dev/null +++ b/database/migrations/2026_09_29_020000_make_help_terms_content_static.php @@ -0,0 +1,29 @@ +where('code', 'help.terms-and-conditions') + ->update([ + 'content_type' => 'static', + 'static_content_schema' => json_encode([ + 'html' => 'present|nullable|string', + ], JSON_THROW_ON_ERROR), + ]); + } + + public function down(): void + { + DB::table('menues') + ->where('code', 'help.terms-and-conditions') + ->update([ + 'content_type' => 'dynamic', + 'static_content_schema' => null, + ]); + } +}; diff --git a/database/seeders/MenuSeeder.php b/database/seeders/MenuSeeder.php index 5974e633..95d0eabf 100644 --- a/database/seeders/MenuSeeder.php +++ b/database/seeders/MenuSeeder.php @@ -261,7 +261,10 @@ class MenuSeeder extends Seeder 'code' => 'help.terms-and-conditions', 'label' => 'Términos y condiciones', 'parent_menu_code' => 'help', - 'content_type' => Menu::CONTENT_TYPE_DYNAMIC, + 'content_type' => Menu::CONTENT_TYPE_STATIC, + 'static_content_schema' => [ + 'html' => 'present|nullable|string', + ], 'route' => '/ayuda/terminos-y-condiciones', ], ];