feat(menu): implement menu hierarchy and static content for help section in MenuSeeder and related tests
This commit is contained in:
@@ -2,9 +2,9 @@
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Seeder;
|
||||
use App\Domains\Menu\Models\Menu;
|
||||
use App\Domains\Tenant\Models\Tenant;
|
||||
use Illuminate\Database\Seeder;
|
||||
|
||||
class MenuSeeder extends Seeder
|
||||
{
|
||||
@@ -20,15 +20,123 @@ class MenuSeeder extends Seeder
|
||||
['code' => 'profile', 'route' => '/profile'],
|
||||
['code' => 'purchases', 'route' => '/purchases'],
|
||||
['code' => 'tickets', 'route' => '/tickets'],
|
||||
[
|
||||
'code' => 'help',
|
||||
'content_type' => Menu::CONTENT_TYPE_DYNAMIC,
|
||||
'route' => '/ayuda',
|
||||
],
|
||||
[
|
||||
'code' => 'help.faq',
|
||||
'parent_menu_code' => 'help',
|
||||
'content_type' => Menu::CONTENT_TYPE_STATIC,
|
||||
'static_content_schema' => [
|
||||
'*.pregunta' => 'required|string',
|
||||
'*.respuesta' => 'required|string',
|
||||
'*.is_active' => 'sometimes|boolean',
|
||||
],
|
||||
'route' => '/ayuda/preguntas-frecuentes',
|
||||
],
|
||||
[
|
||||
'code' => 'help.contact',
|
||||
'parent_menu_code' => 'help',
|
||||
'content_type' => Menu::CONTENT_TYPE_STATIC,
|
||||
'static_content_schema' => [
|
||||
'whatsapp' => 'required|array',
|
||||
'whatsapp.whatsapp_url' => 'required|url',
|
||||
'whatsapp.whatsapp_label' => 'required|string',
|
||||
'phone' => 'required|string',
|
||||
'locations' => 'required|array|min:1',
|
||||
'locations.*.label' => 'required|string',
|
||||
'locations.*.addresses' => 'required|array|min:1',
|
||||
'locations.*.addresses.*' => 'required|string',
|
||||
'map_locations' => 'required|array',
|
||||
'map_locations.*' => 'required|array|size:2',
|
||||
'map_locations.*.*' => 'required|numeric',
|
||||
],
|
||||
'route' => '/ayuda/contacto',
|
||||
],
|
||||
[
|
||||
'code' => 'help.payment-methods',
|
||||
'parent_menu_code' => 'help',
|
||||
'content_type' => Menu::CONTENT_TYPE_DYNAMIC,
|
||||
'route' => '/ayuda/medios-de-pago',
|
||||
],
|
||||
[
|
||||
'code' => 'help.shipping',
|
||||
'parent_menu_code' => 'help',
|
||||
'content_type' => Menu::CONTENT_TYPE_DYNAMIC,
|
||||
'route' => '/ayuda/envios',
|
||||
],
|
||||
[
|
||||
'code' => 'help.terms-and-conditions',
|
||||
'parent_menu_code' => 'help',
|
||||
'content_type' => Menu::CONTENT_TYPE_DYNAMIC,
|
||||
'route' => '/ayuda/terminos-y-condiciones',
|
||||
],
|
||||
];
|
||||
|
||||
foreach ($menus as $menuData) {
|
||||
Menu::firstOrCreate(['code' => $menuData['code']], $menuData);
|
||||
$menuData = array_merge([
|
||||
'parent_menu_code' => null,
|
||||
'content_type' => Menu::CONTENT_TYPE_DYNAMIC,
|
||||
'static_content_schema' => null,
|
||||
], $menuData);
|
||||
|
||||
Menu::updateOrCreate(['code' => $menuData['code']], $menuData);
|
||||
}
|
||||
|
||||
$tenants = Tenant::all();
|
||||
|
||||
$allMenus = Menu::pluck('code')->toArray();
|
||||
$helpMenuCodes = [
|
||||
'help',
|
||||
'help.faq',
|
||||
'help.contact',
|
||||
'help.payment-methods',
|
||||
'help.shipping',
|
||||
'help.terms-and-conditions',
|
||||
];
|
||||
$helpTenantCodes = [
|
||||
'sonder',
|
||||
'fiesta_futbol_infantil',
|
||||
];
|
||||
$frequentlyAskedQuestions = [
|
||||
[
|
||||
'pregunta' => '¿Hay algún límite de compra?',
|
||||
'respuesta' => 'No hay un límite general de compra. La cantidad disponible depende del stock de cada producto.',
|
||||
'is_active' => true,
|
||||
],
|
||||
[
|
||||
'pregunta' => '¿Cuáles son los medios de pago disponibles?',
|
||||
'respuesta' => 'Podés consultar y seleccionar los medios de pago habilitados al momento de finalizar tu compra.',
|
||||
'is_active' => false,
|
||||
],
|
||||
[
|
||||
'pregunta' => 'Necesito asesoramiento antes de comprar el producto, ¿cómo puedo hacer?',
|
||||
'respuesta' => 'Nuestro equipo comercial está preparado para asesorarte, no dudes en escribirnos por WhatsApp al (0341) 6658247 de lunes a viernes de 8.30 a 20 horas. Los sábados, domingos y feriados te contestaremos lo más rápido posible.',
|
||||
'is_active' => false,
|
||||
],
|
||||
];
|
||||
$contactContent = [
|
||||
'whatsapp' => [
|
||||
'whatsapp_url' => 'https://wa.me/543412602222',
|
||||
'whatsapp_label' => 'Chatea con nosotros',
|
||||
],
|
||||
'phone' => '+54 9 (0341) 6658247',
|
||||
'locations' => [
|
||||
'rosario' => [
|
||||
'label' => 'Rosario',
|
||||
'addresses' => [
|
||||
'Av. San Lorenzo 1542',
|
||||
],
|
||||
],
|
||||
],
|
||||
'map_locations' => [
|
||||
'gigante_de_arroyito' => [-32.913997, -60.674567],
|
||||
'punto_centro' => [-32.946820, -60.639320],
|
||||
'punto_sur' => [-32.971510, -60.650640],
|
||||
],
|
||||
];
|
||||
|
||||
foreach ($tenants as $tenant) {
|
||||
$menuCodes = $allMenus;
|
||||
@@ -41,8 +149,21 @@ class MenuSeeder extends Seeder
|
||||
$menuCodes = array_diff($menuCodes, ['product.detail']);
|
||||
}
|
||||
|
||||
if (! in_array($tenant->codigo, $helpTenantCodes, true)) {
|
||||
$menuCodes = array_diff($menuCodes, $helpMenuCodes);
|
||||
}
|
||||
|
||||
// Usar sync para asociar los menues al tenant
|
||||
$tenant->menues()->sync($menuCodes);
|
||||
|
||||
if (in_array($tenant->codigo, $helpTenantCodes, true)) {
|
||||
$tenant->menues()->updateExistingPivot('help.faq', [
|
||||
'static_content' => $frequentlyAskedQuestions,
|
||||
]);
|
||||
$tenant->menues()->updateExistingPivot('help.contact', [
|
||||
'static_content' => $contactContent,
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user