pdv.backend/database/seeders/RoleSeeder.php

325 lines
12 KiB
PHP

<?php
namespace Database\Seeders;
/**
* @copyright (c) 2025 Notsoweb Software (https://notsoweb.com) - All Rights Reserved
*/
use App\Models\PermissionType;
use App\Models\Role;
use Illuminate\Database\Seeder;
use Notsoweb\LaravelCore\Traits\MySql\RolePermission;
use Spatie\Permission\Models\Permission;
/**
* Roles y permisos
*
* @author Moisés Cortés C. <moises.cortes@notsoweb.com>
*
* @version 1.0.0
*/
class RoleSeeder extends Seeder
{
use RolePermission;
/**
* Run the database seeds.
*/
public function run(): void
{
$users = PermissionType::firstOrCreate([
'name' => 'Usuarios'
]);
[
$userIndex,
$userCreate,
$userEdit,
$userDestroy
] = $this->onCRUD('users', $users, 'api');
$userSettings = $this->onPermission('users.settings', 'Configuración de usuarios', $users, 'api');
$userOnline = $this->onPermission('users.online', 'Usuarios en linea', $users, 'api');
$roles = PermissionType::firstOrCreate([
'name' => 'Roles'
]);
[
$roleIndex,
$roleCreate,
$roleEdit,
$roleDestroy
] = $this->onCRUD('roles', $roles, 'api');
$pulse = PermissionType::firstOrCreate([
'name' => 'Sistema'
]);
$systemPulse = $this->onPermission('pulse', 'Monitoreo de Pulse', $pulse, 'api');
$pulse = PermissionType::firstOrCreate([
'name' => 'Historial de actividades'
]);
$activityIndex = $this->onIndex(
code: 'activities',
type: $pulse,
guardName: 'api'
);
// ==================== NUEVOS PERMISOS PARA PDV ====================
// Permisos de Caja
$cashRegisterType = PermissionType::firstOrCreate([
'name' => 'Caja registradora'
]);
$cashRegisterIndex = $this->onIndex('cash-registers', 'Mostrar datos', $cashRegisterType, 'api');
$cashRegisterOpen = $this->onPermission('cash-registers.open', 'Abrir caja', $cashRegisterType, 'api');
$cashRegisterClose = $this->onPermission('cash-registers.close', 'Cerrar caja', $cashRegisterType, 'api');
$cashRegisterCurrent = $this->onPermission('cash-registers.current', 'Ver caja actual', $cashRegisterType, 'api');
// Permisos de Ventas
$salesType = PermissionType::firstOrCreate([
'name' => 'Ventas'
]);
$salesIndex = $this->onIndex('sales', 'Mostrar datos', $salesType, 'api');
$salesCreate = $this->onCreate('sales', 'Crear registros', $salesType, 'api');
$salesCancel = $this->onPermission('sales.cancel', 'Cancelar venta', $salesType, 'api');
// Permisos de Inventario
$inventoryType = PermissionType::firstOrCreate([
'name' => 'Inventario'
]);
$inventoryIndex = $this->onIndex('inventario', 'Mostrar datos', $inventoryType, 'api');
$inventoryCreate = $this->onCreate('inventario', 'Crear registros', $inventoryType, 'api');
$inventoryEdit = $this->onEdit('inventario', 'Actualizar registro', $inventoryType, 'api');
$inventoryDestroy = $this->onDestroy('inventario', 'Eliminar registro', $inventoryType, 'api');
$inventoryImport = $this->onPermission('inventario.import', 'Importar productos desde Excel', $inventoryType, 'api');
// Permisos de Categorías
$categoriesType = PermissionType::firstOrCreate([
'name' => 'Categorías de productos'
]);
$categoriesIndex = $this->onIndex('categorias', 'Mostrar datos', $categoriesType, 'api');
$categoriesCreate = $this->onCreate('categorias', 'Crear registros', $categoriesType, 'api');
$categoriesEdit = $this->onEdit('categorias', 'Actualizar registro', $categoriesType, 'api');
$categoriesDestroy = $this->onDestroy('categorias', 'Eliminar registro', $categoriesType, 'api');
//Permisos de Unidades de medida
$unitsType = PermissionType::firstOrCreate([
'name' => 'Unidades de medida'
]);
$unitsIndex = $this->onIndex('units', 'Mostrar datos', $unitsType, 'api');
$unitsCreate = $this->onCreate('units', 'Crear registros', $unitsType, 'api');
$unitsEdit = $this->onEdit('units', 'Actualizar registro', $unitsType, 'api');
$unitsDestroy = $this->onDestroy('units', 'Eliminar registro', $unitsType, 'api');
// Permisos de Clientes
$clientsType = PermissionType::firstOrCreate([
'name' => 'Clientes'
]);
[
$clientIndex,
$clientCreate,
$clientEdit,
$clientDestroy
] = $this->onCRUD('clients', $clientsType, 'api');
// Permisos de Niveles de Clientes (Tiers)
$clientTiersType = PermissionType::firstOrCreate([
'name' => 'Niveles de clientes'
]);
[
$clientTierIndex,
$clientTierCreate,
$clientTierEdit,
$clientTierDestroy
] = $this->onCRUD('client-tiers', $clientTiersType, 'api');
// Permisos de Solicitudes de Factura
$invoiceRequestsType = PermissionType::firstOrCreate([
'name' => 'Solicitudes de factura'
]);
$invoiceRequestIndex = $this->onIndex('invoice-requests', 'Mostrar solicitudes', $invoiceRequestsType, 'api');
$invoiceRequestShow = $this->onPermission('invoice-requests.show', 'Ver detalles', $invoiceRequestsType, 'api');
$invoiceRequestProcess = $this->onPermission('invoice-requests.process', 'Procesar solicitud', $invoiceRequestsType, 'api');
$invoiceRequestReject = $this->onPermission('invoice-requests.reject', 'Rechazar solicitud', $invoiceRequestsType, 'api');
$invoiceRequestUpload = $this->onPermission('invoice-requests.upload', 'Subir archivos de factura', $invoiceRequestsType, 'api');
$invoiceRequestStats = $this->onPermission('invoice-requests.stats', 'Ver estadísticas', $invoiceRequestsType, 'api');
$warehouseType = PermissionType::firstOrCreate([
'name' => 'Almacenes'
]);
$warehouseIndex = $this->onIndex('warehouses', 'Mostrar datos', $warehouseType, 'api');
$warehouseCreate = $this->onCreate('warehouses', 'Crear registros', $warehouseType, 'api');
$warehouseEdit = $this->onEdit('warehouses', 'Actualizar registro', $warehouseType, 'api');
$warehouseDestroy = $this->onDestroy('warehouses', 'Eliminar registro', $warehouseType, 'api');
$movementsType = PermissionType::firstOrCreate([
'name' => 'Movimientos de inventario'
]);
$movementsIndex = $this->onIndex('movements', 'Mostrar datos', $movementsType, 'api');
$movementsCreate = $this->onCreate('movements', 'Crear registros', $movementsType, 'api');
$movementsEdit = $this->onEdit('movements', 'Actualizar registro', $movementsType, 'api');
$movementsDestroy = $this->onDestroy('movements', 'Eliminar registro', $movementsType, 'api');
$suppliers = PermissionType::firstOrCreate([
'name' => 'Proveedores'
]);
$supplierIndex = $this->onIndex('suppliers', 'Mostrar datos', $suppliers, 'api');
$supplierCreate = $this->onCreate('suppliers', 'Crear registros', $suppliers, 'api');
$supplierEdit = $this->onEdit('suppliers', 'Actualizar registro', $suppliers, 'api');
$supplierDestroy = $this->onDestroy('suppliers', 'Eliminar registro', $suppliers, 'api');
$bundles = PermissionType::firstOrCreate([
'name' => 'Paquetes'
]);
$bundleIndex = $this->onIndex('bundles', 'Mostrar datos', $bundles, 'api');
$bundleShow = $this->onPermission('bundles.show', 'Ver detalles', $bundles, 'api');
$bundleCreate = $this->onCreate('bundles', 'Crear registros', $bundles, 'api');
$bundleEdit = $this->onEdit('bundles', 'Actualizar registro', $bundles, 'api');
$bundleDestroy = $this->onDestroy('bundles', 'Eliminar registro', $bundles, 'api');
$returns = PermissionType::firstOrCreate([
'name' => 'Devoluciones'
]);
$returnIndex = $this->onIndex('returns', 'Mostrar datos', $returns, 'api');
$returnCreate = $this->onCreate('returns', 'Crear registros', $returns, 'api');
$returnEdit = $this->onEdit('returns', 'Actualizar registro', $returns, 'api');
$returnDestroy = $this->onDestroy('returns', 'Eliminar registro', $returns, 'api');
// ==================== ROLES ====================
// Desarrollador
Role::firstOrCreate([
'name' => 'developer',
'description' => 'Desarrollador',
'guard_name' => 'api'
])->syncPermissions(Permission::all());
// Administrador
Role::firstOrCreate([
'name' => 'admin',
'description' => 'Administrador',
'guard_name' => 'api'
])->syncPermissions(
$userIndex,
$userCreate,
$userEdit,
$userDestroy,
$userSettings,
$userOnline,
$roleIndex,
$roleCreate,
$roleEdit,
$roleDestroy,
$systemPulse,
$activityIndex,
// Permisos completos de PDV
$cashRegisterIndex,
$cashRegisterOpen,
$cashRegisterClose,
$cashRegisterCurrent,
$salesIndex,
$salesCreate,
$salesCancel,
$inventoryIndex,
$inventoryImport,
$inventoryCreate,
$inventoryEdit,
$inventoryDestroy,
$categoriesIndex,
$categoriesCreate,
$categoriesEdit,
$categoriesDestroy,
$clientIndex,
$clientCreate,
$clientEdit,
$clientDestroy,
$clientTierIndex,
$clientTierCreate,
$clientTierEdit,
$clientTierDestroy,
$invoiceRequestIndex,
$invoiceRequestShow,
$invoiceRequestProcess,
$invoiceRequestReject,
$invoiceRequestUpload,
$invoiceRequestStats,
$warehouseIndex,
$warehouseCreate,
$warehouseEdit,
$warehouseDestroy,
$movementsIndex,
$movementsCreate,
$movementsEdit,
$movementsDestroy,
$unitsIndex,
$unitsCreate,
$unitsEdit,
$unitsDestroy,
$supplierIndex,
$supplierCreate,
$supplierEdit,
$supplierDestroy,
$bundleIndex,
$bundleShow,
$bundleCreate,
$bundleEdit,
$bundleDestroy,
$returnIndex,
$returnCreate,
$returnEdit,
$returnDestroy
);
//Operador PDV (solo permisos de operación de caja y ventas)
Role::firstOrCreate([
'name' => 'operador_pdv',
'description' => 'Operador de Punto de Venta',
'guard_name' => 'api'
])->syncPermissions(
// Caja
$cashRegisterIndex, // Ver historial de cajas
$cashRegisterOpen, // Abrir caja
$cashRegisterClose, // Cerrar caja
$cashRegisterCurrent, // Ver caja actual
// Ventas
$salesIndex, // Ver historial de ventas
$salesCreate, // Crear ventas
// Inventario (solo lectura)
$inventoryIndex,
$inventoryImport, // Importar productos
$inventoryCreate,
$inventoryEdit,
$inventoryDestroy,
// Clientes
$clientIndex,
$clientTierIndex,
$clientTierCreate,
$clientTierEdit,
$clientTierDestroy,
// Solicitudes de factura (solo lectura)
$invoiceRequestIndex
);
}
}