Car-Repairs-Shop/database/seeders/RolesAndPermissionsSeeder.php
sackey e3b2b220d2
Some checks are pending
linter / quality (push) Waiting to run
tests / ci (push) Waiting to run
Enhance UI and functionality across various components
- Increased icon sizes in service items, service orders, users, and technician management for better visibility.
- Added custom loading indicators with appropriate icons in search fields for vehicles, work orders, and technicians.
- Introduced invoice management routes for better organization and access control.
- Created a new test for the estimate PDF functionality to ensure proper rendering and data integrity.
2025-08-16 14:36:58 +00:00

398 lines
22 KiB
PHP

<?php
namespace Database\Seeders;
use App\Models\Permission;
use App\Models\Role;
use App\Models\User;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\Hash;
class RolesAndPermissionsSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
// Create Permissions grouped by modules
$permissions = [
// Dashboard & System
'system' => [
['name' => 'dashboard.view', 'display_name' => 'View Dashboard', 'description' => 'Can view main dashboard'],
['name' => 'analytics.view', 'display_name' => 'View Analytics', 'description' => 'Can view analytics and reports'],
['name' => 'settings.manage', 'display_name' => 'Manage Settings', 'description' => 'Can manage system settings'],
['name' => 'users.manage', 'display_name' => 'Manage Users', 'description' => 'Can manage user accounts'],
['name' => 'roles.manage', 'display_name' => 'Manage Roles', 'description' => 'Can manage roles and permissions'],
],
// Customer Management
'customers' => [
['name' => 'customers.view', 'display_name' => 'View Customers', 'description' => 'Can view customer list'],
['name' => 'customers.create', 'display_name' => 'Create Customers', 'description' => 'Can create new customers'],
['name' => 'customers.update', 'display_name' => 'Edit Customers', 'description' => 'Can edit customer information'],
['name' => 'customers.delete', 'display_name' => 'Delete Customers', 'description' => 'Can delete customers'],
['name' => 'customers.details', 'display_name' => 'View Customer Details', 'description' => 'Can view detailed customer information'],
],
// Vehicle Management
'vehicles' => [
['name' => 'vehicles.view', 'display_name' => 'View Vehicles', 'description' => 'Can view vehicle list'],
['name' => 'vehicles.create', 'display_name' => 'Create Vehicles', 'description' => 'Can register new vehicles'],
['name' => 'vehicles.update', 'display_name' => 'Edit Vehicles', 'description' => 'Can edit vehicle information'],
['name' => 'vehicles.delete', 'display_name' => 'Delete Vehicles', 'description' => 'Can delete vehicles'],
['name' => 'vehicles.history', 'display_name' => 'View Vehicle History', 'description' => 'Can view vehicle service history'],
],
// Service Orders
'service-orders' => [
['name' => 'service-orders.view', 'display_name' => 'View Service Orders', 'description' => 'Can view service orders'],
['name' => 'service-orders.create', 'display_name' => 'Create Service Orders', 'description' => 'Can create new service orders'],
['name' => 'service-orders.update', 'display_name' => 'Edit Service Orders', 'description' => 'Can edit service orders'],
['name' => 'service-orders.delete', 'display_name' => 'Delete Service Orders', 'description' => 'Can delete service orders'],
['name' => 'service-orders.approve', 'display_name' => 'Approve Service Orders', 'description' => 'Can approve service orders'],
['name' => 'service-orders.complete', 'display_name' => 'Complete Service Orders', 'description' => 'Can mark service orders as complete'],
],
// Job Cards
'job-cards' => [
['name' => 'job-cards.view', 'display_name' => 'View Job Cards', 'description' => 'Can view job cards'],
['name' => 'job-cards.create', 'display_name' => 'Create Job Cards', 'description' => 'Can create new job cards'],
['name' => 'job-cards.update', 'display_name' => 'Edit Job Cards', 'description' => 'Can edit job cards'],
['name' => 'job-cards.delete', 'display_name' => 'Delete Job Cards', 'description' => 'Can delete job cards'],
['name' => 'job-cards.assign', 'display_name' => 'Assign Job Cards', 'description' => 'Can assign job cards to technicians'],
],
// Work Orders
'work-orders' => [
['name' => 'work-orders.view', 'display_name' => 'View Work Orders', 'description' => 'Can view work orders'],
['name' => 'work-orders.create', 'display_name' => 'Create Work Orders', 'description' => 'Can create new work orders'],
['name' => 'work-orders.update', 'display_name' => 'Edit Work Orders', 'description' => 'Can edit work orders'],
['name' => 'work-orders.delete', 'display_name' => 'Delete Work Orders', 'description' => 'Can delete work orders'],
['name' => 'work-orders.complete', 'display_name' => 'Complete Work Orders', 'description' => 'Can mark work orders as complete'],
],
// Appointments
'appointments' => [
['name' => 'appointments.view', 'display_name' => 'View Appointments', 'description' => 'Can view appointments'],
['name' => 'appointments.create', 'display_name' => 'Create Appointments', 'description' => 'Can schedule new appointments'],
['name' => 'appointments.update', 'display_name' => 'Edit Appointments', 'description' => 'Can edit appointments'],
['name' => 'appointments.delete', 'display_name' => 'Delete Appointments', 'description' => 'Can cancel appointments'],
['name' => 'appointments.confirm', 'display_name' => 'Confirm Appointments', 'description' => 'Can confirm appointments'],
],
// Inventory Management
'inventory' => [
['name' => 'inventory.view', 'display_name' => 'View Inventory', 'description' => 'Can view inventory items'],
['name' => 'inventory.create', 'display_name' => 'Create Parts', 'description' => 'Can add new parts to inventory'],
['name' => 'inventory.update', 'display_name' => 'Edit Parts', 'description' => 'Can edit part information'],
['name' => 'inventory.delete', 'display_name' => 'Delete Parts', 'description' => 'Can delete parts from inventory'],
['name' => 'inventory.stock', 'display_name' => 'Manage Stock', 'description' => 'Can manage stock levels'],
['name' => 'inventory.stock-movements', 'display_name' => 'View Stock Movements', 'description' => 'Can view stock movement history'],
['name' => 'inventory.purchase-orders', 'display_name' => 'Manage Purchase Orders', 'description' => 'Can create and manage purchase orders'],
['name' => 'inventory.purchase-orders-approve', 'display_name' => 'Approve Purchase Orders', 'description' => 'Can approve purchase orders'],
],
// Technician Management
'technicians' => [
['name' => 'technicians.view', 'display_name' => 'View Technicians', 'description' => 'Can view technician list'],
['name' => 'technicians.create', 'display_name' => 'Create Technicians', 'description' => 'Can add new technicians'],
['name' => 'technicians.update', 'display_name' => 'Edit Technicians', 'description' => 'Can edit technician information'],
['name' => 'technicians.delete', 'display_name' => 'Delete Technicians', 'description' => 'Can remove technicians'],
['name' => 'technicians.view-performance', 'display_name' => 'View Technician Performance', 'description' => 'Can view technician performance metrics'],
['name' => 'technicians.schedules', 'display_name' => 'Manage Technician Schedules', 'description' => 'Can manage technician work schedules'],
],
// Inspections
'inspections' => [
['name' => 'inspections.view', 'display_name' => 'View Inspections', 'description' => 'Can view vehicle inspections'],
['name' => 'inspections.create', 'display_name' => 'Create Inspections', 'description' => 'Can create new inspections'],
['name' => 'inspections.update', 'display_name' => 'Edit Inspections', 'description' => 'Can edit inspection results'],
['name' => 'inspections.approve', 'display_name' => 'Approve Inspections', 'description' => 'Can approve inspection results'],
['name' => 'inspections.reschedule', 'display_name' => 'Schedule Reinspections', 'description' => 'Can schedule reinspections'],
],
// Estimates & Diagnosis
'estimates' => [
['name' => 'estimates.view', 'display_name' => 'View Estimates', 'description' => 'Can view estimates'],
['name' => 'estimates.create', 'display_name' => 'Create Estimates', 'description' => 'Can create new estimates'],
['name' => 'estimates.update', 'display_name' => 'Edit Estimates', 'description' => 'Can edit estimates'],
['name' => 'estimates.approve', 'display_name' => 'Approve Estimates', 'description' => 'Can approve estimates'],
['name' => 'diagnosis.view', 'display_name' => 'View Diagnosis', 'description' => 'Can view diagnosis results'],
['name' => 'diagnosis.create', 'display_name' => 'Create Diagnosis', 'description' => 'Can create diagnosis reports'],
],
// Invoices
'invoices' => [
['name' => 'invoices.view', 'display_name' => 'View Invoices', 'description' => 'Can view invoices'],
['name' => 'invoices.create', 'display_name' => 'Create Invoices', 'description' => 'Can create new invoices'],
['name' => 'invoices.update', 'display_name' => 'Edit Invoices', 'description' => 'Can edit invoices'],
['name' => 'invoices.send', 'display_name' => 'Send Invoices', 'description' => 'Can send invoices to customers'],
['name' => 'invoices.payment', 'display_name' => 'Record Payments', 'description' => 'Can record invoice payments'],
],
// Reports & Analytics
'reports' => [
['name' => 'reports.view', 'display_name' => 'View Reports', 'description' => 'Can view business reports'],
['name' => 'reports.create', 'display_name' => 'Create Reports', 'description' => 'Can generate new reports'],
['name' => 'reports.export', 'display_name' => 'Export Reports', 'description' => 'Can export reports to various formats'],
['name' => 'reports.financial', 'display_name' => 'View Financial Reports', 'description' => 'Can view financial and revenue reports'],
],
// Timesheets
'timesheets' => [
['name' => 'timesheets.view', 'display_name' => 'View Timesheets', 'description' => 'Can view timesheet records'],
['name' => 'timesheets.create', 'display_name' => 'Create Timesheets', 'description' => 'Can create timesheet entries'],
['name' => 'timesheets.update', 'display_name' => 'Edit Timesheets', 'description' => 'Can edit timesheet entries'],
['name' => 'timesheets.approve', 'display_name' => 'Approve Timesheets', 'description' => 'Can approve timesheet entries'],
],
];
// Create permissions
foreach ($permissions as $module => $modulePermissions) {
foreach ($modulePermissions as $permission) {
Permission::firstOrCreate(
['name' => $permission['name']],
[
'display_name' => $permission['display_name'],
'description' => $permission['description'],
'module' => $module,
'is_active' => true,
]
);
}
}
// Create Roles
$roles = [
[
'name' => 'super_admin',
'display_name' => 'Super Administrator',
'description' => 'Full system access with all permissions',
'permissions' => 'all', // Special case - gets all permissions
],
[
'name' => 'manager',
'display_name' => 'Manager',
'description' => 'Management level access with most permissions',
'permissions' => [
'dashboard.view', 'analytics.view', 'settings.manage',
'customers.view', 'customers.create', 'customers.update', 'customers.details',
'vehicles.view', 'vehicles.create', 'vehicles.update', 'vehicles.history',
'service-orders.view', 'service-orders.create', 'service-orders.update', 'service-orders.approve', 'service-orders.complete',
'job-cards.view', 'job-cards.create', 'job-cards.update', 'job-cards.assign',
'work-orders.view', 'work-orders.create', 'work-orders.update', 'work-orders.complete',
'appointments.view', 'appointments.create', 'appointments.update', 'appointments.confirm',
'inventory.view', 'inventory.create', 'inventory.update', 'inventory.stock', 'inventory.stock-movements', 'inventory.purchase-orders', 'inventory.purchase-orders-approve',
'technicians.view', 'technicians.create', 'technicians.update', 'technicians.view-performance', 'technicians.schedules',
'inspections.view', 'inspections.create', 'inspections.update', 'inspections.approve', 'inspections.reschedule',
'estimates.view', 'estimates.create', 'estimates.update', 'estimates.approve', 'diagnosis.view', 'diagnosis.create',
'invoices.view', 'invoices.create', 'invoices.update', 'invoices.send', 'invoices.payment',
'reports.view', 'reports.create', 'reports.export', 'reports.financial',
'timesheets.view', 'timesheets.approve',
],
],
[
'name' => 'service_advisor',
'display_name' => 'Service Advisor',
'description' => 'Customer service and appointment management',
'permissions' => [
'dashboard.view',
'customers.view', 'customers.create', 'customers.update', 'customers.details',
'vehicles.view', 'vehicles.create', 'vehicles.update', 'vehicles.history',
'service-orders.view', 'service-orders.create', 'service-orders.update',
'appointments.view', 'appointments.create', 'appointments.update', 'appointments.confirm',
'estimates.view', 'estimates.create', 'diagnosis.view',
'invoices.view', 'invoices.create',
'inventory.view', 'inventory.stock-movements',
'inspections.view', 'inspections.create',
],
],
[
'name' => 'technician',
'display_name' => 'Technician',
'description' => 'Workshop technician with job execution permissions',
'permissions' => [
'dashboard.view',
'customers.view', 'customers.details',
'vehicles.view', 'vehicles.history',
'service-orders.view',
'job-cards.view', 'job-cards.update',
'work-orders.view', 'work-orders.update', 'work-orders.complete',
'inventory.view', 'inventory.stock-movements',
'inspections.view', 'inspections.create', 'inspections.update',
'diagnosis.view', 'diagnosis.create',
'timesheets.view', 'timesheets.create', 'timesheets.update',
],
],
[
'name' => 'inventory_manager',
'display_name' => 'Inventory Manager',
'description' => 'Inventory and parts management specialist',
'permissions' => [
'dashboard.view',
'inventory.view', 'inventory.create', 'inventory.update', 'inventory.stock', 'inventory.stock-movements',
'inventory.purchase-orders', 'inventory.purchase-orders-approve',
'service-orders.view', 'work-orders.view',
'reports.view', 'reports.create', 'reports.export',
],
],
[
'name' => 'customer_portal',
'display_name' => 'Customer Portal',
'description' => 'Limited customer portal access',
'permissions' => [
'appointments.view',
'vehicles.view', 'vehicles.history',
'service-orders.view',
'estimates.view',
],
],
];
// Create roles and assign permissions
foreach ($roles as $roleData) {
$role = Role::firstOrCreate(
['name' => $roleData['name']],
[
'display_name' => $roleData['display_name'],
'description' => $roleData['description'],
'is_active' => true,
]
);
// Assign permissions to role
if ($roleData['permissions'] === 'all') {
// Super admin gets all permissions
$allPermissions = Permission::where('is_active', true)->get();
$role->permissions()->sync($allPermissions->pluck('id')->toArray());
} else {
// Get permission IDs by names
$permissionIds = Permission::whereIn('name', $roleData['permissions'])
->where('is_active', true)
->pluck('id')
->toArray();
$role->permissions()->sync($permissionIds);
}
}
// Create dedicated super admin user
$superAdminUser = User::firstOrCreate(
['email' => 'admin@admin.com'],
[
'name' => 'Super Administrator',
'password' => Hash::make('danewcash54899'),
'email_verified_at' => now(),
'employee_id' => 'ADMIN001',
'position' => 'System Administrator',
'department' => 'IT',
'status' => 'active',
]
);
// Assign super_admin role
$superAdminRole = Role::where('name', 'super_admin')->first();
if ($superAdminRole) {
$superAdminUser->roles()->sync([$superAdminRole->id]);
}
// Create a test manager user
$managerUser = User::firstOrCreate(
['email' => 'manager@carrepairs.com'],
[
'name' => 'Workshop Manager',
'password' => Hash::make('password'),
'email_verified_at' => now(),
'employee_id' => 'MGR001',
'position' => 'Workshop Manager',
'department' => 'Management',
'status' => 'active',
]
);
$managerRole = Role::where('name', 'manager')->first();
if ($managerRole) {
$managerUser->roles()->sync([$managerRole->id]);
}
// Create a test technician user
$technicianUser = User::firstOrCreate(
['email' => 'technician@carrepairs.com'],
[
'name' => 'Lead Technician',
'password' => Hash::make('password'),
'email_verified_at' => now(),
'employee_id' => 'TECH001',
'position' => 'Lead Technician',
'department' => 'Workshop',
'status' => 'active',
]
);
$technicianRole = Role::where('name', 'technician')->first();
if ($technicianRole) {
$technicianUser->roles()->sync([$technicianRole->id]);
}
// Create a test service advisor user
$advisorUser = User::firstOrCreate(
['email' => 'advisor@carrepairs.com'],
[
'name' => 'Service Advisor',
'password' => Hash::make('password'),
'email_verified_at' => now(),
'employee_id' => 'ADV001',
'position' => 'Service Advisor',
'department' => 'Customer Service',
'status' => 'active',
]
);
// Create a test technician user
$technicianUser = User::firstOrCreate(
['email' => 'technician@carrepairs.com'],
[
'name' => 'Lead Technician',
'password' => Hash::make('password'),
'email_verified_at' => now(),
'employee_id' => 'TECH001',
'position' => 'Lead Technician',
'department' => 'Workshop',
'status' => 'active',
]
);
$technicianRole = Role::where('name', 'technician')->first();
if ($technicianRole) {
$technicianUser->roles()->sync([$technicianRole->id]);
}
// Create a test service advisor user
$advisorUser = User::firstOrCreate(
['email' => 'advisor@carrepairs.com'],
[
'name' => 'Service Advisor',
'password' => Hash::make('password'),
'email_verified_at' => now(),
'employee_id' => 'ADV001',
'position' => 'Service Advisor',
'department' => 'Customer Service',
'status' => 'active',
]
);
$advisorRole = Role::where('name', 'service_advisor')->first();
if ($advisorRole) {
$advisorUser->roles()->sync([$advisorRole->id]);
}
$this->command->info('Roles, permissions, and users created successfully!');
$this->command->info('Login credentials:');
$this->command->info('Super Admin - Email: admin@admin.com, Password: danewcash54899');
$this->command->info('Manager - Email: manager@carrepairs.com, Password: password');
$this->command->info('Technician - Email: technician@carrepairs.com, Password: password');
$this->command->info('Service Advisor - Email: advisor@carrepairs.com, Password: password');
}
}