Files
HRM-System/database/seeders/DefaultCompanyUserSeeder.php
2026-04-20 00:20:10 +08:00

866 lines
28 KiB
PHP

<?php
namespace Database\Seeders;
use App\Models\Permission;
use App\Models\Role;
use App\Models\User;
use Faker\Factory as Faker;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\Hash;
class DefaultCompanyUserSeeder extends Seeder
{
public function run(): void
{
$faker = Faker::create();
$companies = User::where('type', 'company')->get();
if ($companies->isEmpty()) {
$this->command->warn('No company users found. Please run CompanySeeder first.');
return;
}
foreach ($companies as $company) {
$this->createRoles($company);
$this->createUsers($company, $faker);
}
}
private function createRoles($company)
{
// Employee Role
$employeeRole = Role::firstOrCreate(
['name' => 'employee', 'guard_name' => 'web', 'created_by' => $company->id],
['label' => 'Employee', 'description' => 'Employee Role', 'created_by' => $company->id]
);
$employeeRole->syncPermissions(Permission::whereIn('name', $this->getEmployeePermissions())->get());
// Manager Role
$managerRole = Role::firstOrCreate(
['name' => 'manager', 'guard_name' => 'web', 'created_by' => $company->id],
['label' => 'Manager', 'description' => 'Manager Role', 'created_by' => $company->id]
);
$managerRole->syncPermissions(Permission::whereIn('name', $this->getManagerPermissions())->get());
// HR Role
$hrRole = Role::firstOrCreate(
['name' => 'hr', 'guard_name' => 'web', 'created_by' => $company->id],
['label' => 'HR', 'description' => 'HR Role', 'created_by' => $company->id]
);
$hrRole->syncPermissions(Permission::whereIn('name', $this->getHRPermissions())->get());
}
private function createUsers($company, $faker)
{
$isDemo = config('app.is_demo');
$isSaas = isSaas();
if ($isSaas && $isDemo) {
// SaaS + Demo: 2 managers, 2 HR, 10 employees
$roles = [
['role' => 'manager', 'count' => 2],
['role' => 'hr', 'count' => 2],
['role' => 'employee', 'count' => 10],
];
} elseif ($isSaas && ! $isDemo) {
// SaaS + Non-Demo: 1 manager, 1 HR, 0 employees
$roles = [
['role' => 'manager', 'count' => 1],
['role' => 'hr', 'count' => 1],
['role' => 'employee', 'count' => 0],
];
} elseif (! $isSaas && $isDemo) {
// Non-SaaS + Demo: 2 managers, 2 HR, 10 employees
$roles = [
['role' => 'manager', 'count' => 2],
['role' => 'hr', 'count' => 2],
['role' => 'employee', 'count' => 10],
];
} else {
// Non-SaaS + Non-Demo: 1 manager, 1 HR, 0 employees
$roles = [
['role' => 'manager', 'count' => 1],
['role' => 'hr', 'count' => 1],
['role' => 'employee', 'count' => 0],
];
}
foreach ($roles as $roleData) {
for ($i = 1; $i <= $roleData['count']; $i++) {
$userData = $this->getUserData($roleData['role'], $faker, $isDemo, $i);
$user = User::firstOrCreate(
['email' => $userData['email']],
[
'name' => $userData['name'],
'type' => $roleData['role'],
'password' => Hash::make('password'),
'status' => 'active',
'created_by' => $company->id,
]
);
$user->assignRole(Role::where('name', $roleData['role'])->where('created_by', $company->id)->first());
}
}
}
private function getUserData($roleType, $faker, $isDemo, $index)
{
// If index > 1, use faker data to avoid duplicates
if ($index > 1) {
return ['name' => $faker->name, 'email' => $faker->unique()->safeEmail];
}
switch ($roleType) {
case 'manager':
return ['name' => 'Manager', 'email' => 'manager@example.com'];
case 'hr':
return ['name' => 'HR', 'email' => 'hr@example.com'];
case 'employee':
return ['name' => 'Employee', 'email' => 'employee@example.com'];
default:
return ['name' => $faker->name, 'email' => $faker->unique()->safeEmail];
}
}
private function getEmployeePermissions(): array
{
return [
// Dashboard
'manage-dashboard',
// Attendance
'manage-attendance-records',
'manage-own-attendance-records',
'clock-in-out',
'manage-attendance-regularizations',
'manage-own-attendance-regularizations',
'create-attendance-regularizations',
'view-own-attendance-regularizations',
// Leaves
'manage-leave-applications',
'manage-own-leave-applications',
'create-leave-applications',
'edit-leave-applications',
'manage-leave-balances',
'manage-own-leave-balances',
// Payroll
'manage-payslips',
'manage-own-payslips',
'download-payslips',
// Performance & Goals
'manage-employee-goals',
'manage-own-employee-goals',
'manage-employee-reviews',
'manage-own-employee-reviews',
'manage-performance-indicators',
'manage-own-performance-indicators',
// Documents & Contracts
'manage-hr-documents',
'manage-own-hr-documents',
'manage-employee-contracts',
'manage-own-employee-contracts',
'manage-document-acknowledgments',
'manage-own-document-acknowledgments',
'acknowledge-document-acknowledgments',
// Assets
'manage-assets',
'manage-own-assets',
// Social & Communication
'manage-announcements',
'manage-own-announcements',
'manage-holidays',
'view-calendar',
'manage-meetings',
'manage-own-meetings',
// Training
'manage-employee-trainings',
'manage-own-employee-trainings',
// Career
'manage-career-page',
];
}
}
private function getManagerPermissions(): array
{
return [
'manage-dashboard',
'view-dashboard',
'manage-calendar',
'view-calendar',
'manage-analytics',
// Media Permissions
'manage-media',
'manage-any-media',
'create-media',
'edit-media',
'delete-media',
'view-media',
'download-media',
// Media Directory
'manage-media-directories',
'manage-any-media-directories',
'create-media-directories',
'edit-media-directories',
'delete-media-directories',
// Branch Permissions
'manage-branches',
'manage-any-branches',
'view-branches',
'create-branches',
'edit-branches',
'delete-branches',
'toggle-status-branches',
// Department Permissions
'manage-departments',
'manage-any-departments',
'view-departments',
'create-departments',
'edit-departments',
'delete-departments',
'toggle-status-departments',
// Designation Permissions
'manage-designations',
'manage-any-designations',
'view-designations',
'create-designations',
'edit-designations',
'delete-designations',
'toggle-status-designations',
// Document Type Permissions
'manage-document-types',
'manage-any-document-types',
'view-document-types',
'create-document-types',
'edit-document-types',
'delete-document-types',
// Employee permissions
'manage-employees',
'manage-any-employees',
'view-employees',
'create-employees',
'edit-employees',
// Award Type management
'manage-award-types',
'manage-any-award-types',
'view-award-types',
'create-award-types',
'edit-award-types',
'delete-award-types',
// Award Type management
'manage-award-types',
'manage-any-award-types',
'view-award-types',
'create-award-types',
'edit-award-types',
'delete-award-types',
// Award management
'manage-awards',
'manage-any-awards',
'view-awards',
'create-awards',
'edit-awards',
'delete-awards',
// Promotion management
'manage-promotions',
'manage-any-promotions',
'view-promotions',
'create-promotions',
'edit-promotions',
'delete-promotions',
'approve-promotions',
'reject-promotions',
// Resignation management
'manage-resignations',
'manage-any-resignations',
'view-resignations',
'create-resignations',
'edit-resignations',
'delete-resignations',
'approve-resignations',
'reject-resignations',
// Termination management
'manage-terminations',
'manage-any-terminations',
'view-terminations',
'create-terminations',
'edit-terminations',
'delete-terminations',
'approve-terminations',
'reject-terminations',
// Warning management
'manage-warnings',
'manage-any-warnings',
'view-warnings',
'create-warnings',
'edit-warnings',
'delete-warnings',
'approve-warnings',
'acknowledge-warnings',
// Trip management
'manage-trips',
'manage-any-trips',
'view-trips',
'create-trips',
'edit-trips',
'delete-trips',
'approve-trips',
'manage-trip-expenses',
'approve-trip-expenses',
// Complaint management
'manage-complaints',
'manage-any-complaints',
'view-complaints',
'create-complaints',
'edit-complaints',
'delete-complaints',
'assign-complaints',
'resolve-complaints',
// Employee Transfer management
'manage-employee-transfers',
'manage-any-employee-transfers',
'view-employee-transfers',
'create-employee-transfers',
'edit-employee-transfers',
'delete-employee-transfers',
'approve-employee-transfers',
'reject-employee-transfers',
// Holiday management
'manage-holidays',
'manage-any-holidays',
'view-holidays',
'create-holidays',
'edit-holidays',
'delete-holidays',
// Announcement management
'manage-announcements',
'manage-any-announcements',
'view-announcements',
'create-announcements',
'edit-announcements',
'delete-announcements',
// Asset Type management
'manage-asset-types',
'manage-any-asset-types',
'view-asset-types',
'create-asset-types',
'edit-asset-types',
'delete-asset-types',
// Asset management
'manage-assets',
'manage-any-assets',
'view-assets',
'create-assets',
'edit-assets',
'delete-assets',
'assign-assets',
'manage-asset-maintenance',
// Training Type management
'manage-training-types',
'manage-any-training-types',
'view-training-types',
'create-training-types',
'edit-training-types',
'delete-training-types',
// Training Program management
'manage-training-programs',
'manage-any-training-programs',
'view-training-programs',
'create-training-programs',
'edit-training-programs',
'delete-training-programs',
// Training Session management
'manage-training-sessions',
'manage-any-training-sessions',
'view-training-sessions',
'create-training-sessions',
'edit-training-sessions',
'delete-training-sessions',
'manage-attendance',
// Employee Training management
'manage-employee-trainings',
'manage-any-employee-trainings',
'view-employee-trainings',
'create-employee-trainings',
'edit-employee-trainings',
'delete-employee-trainings',
'assign-trainings',
'manage-assessments',
'record-assessment-results',
// Performance Indicator Category management
'manage-performance-indicator-categories',
'manage-any-performance-indicator-categories',
'view-performance-indicator-categories',
'create-performance-indicator-categories',
'edit-performance-indicator-categories',
'delete-performance-indicator-categories',
// Performance Indicators management
'manage-performance-indicators',
'manage-any-performance-indicators',
'view-performance-indicators',
'create-performance-indicators',
'edit-performance-indicators',
'delete-performance-indicators',
// Goal Types
'manage-goal-types',
'manage-any-goal-types',
'view-goal-types',
'create-goal-types',
'edit-goal-types',
'delete-goal-types',
// Employee Goals
'manage-employee-goals',
'manage-any-employee-goals',
'view-employee-goals',
'create-employee-goals',
'edit-employee-goals',
'delete-employee-goals',
// Review Cycles
'manage-review-cycles',
'manage-any-review-cycles',
'view-review-cycles',
'create-review-cycles',
'edit-review-cycles',
'delete-review-cycles',
// Employee Reviews
'manage-employee-reviews',
'manage-any-employee-reviews',
'view-employee-reviews',
'create-employee-reviews',
'edit-employee-reviews',
'delete-employee-reviews',
// Job Categories
'manage-job-categories',
'manage-any-job-categories',
'view-job-categories',
'create-job-categories',
'edit-job-categories',
'delete-job-categories',
// Job Requisitions
'manage-job-requisitions',
'manage-any-job-requisitions',
'view-job-requisitions',
'create-job-requisitions',
'edit-job-requisitions',
'delete-job-requisitions',
'approve-job-requisitions',
// Job Types
'manage-job-types',
'manage-any-job-types',
'view-job-types',
'create-job-types',
'edit-job-types',
'delete-job-types',
// Job Locations
'manage-job-locations',
'manage-any-job-locations',
'view-job-locations',
'create-job-locations',
'edit-job-locations',
'delete-job-locations',
// Job Postings
'manage-job-postings',
'manage-any-job-postings',
'view-job-postings',
'create-job-postings',
'edit-job-postings',
'delete-job-postings',
'publish-job-postings',
// Candidate Sources
'manage-candidate-sources',
'manage-any-candidate-sources',
'view-candidate-sources',
'create-candidate-sources',
'edit-candidate-sources',
'delete-candidate-sources',
// Candidates
'manage-candidates',
'manage-any-candidates',
'view-candidates',
'convert-to-employee',
// 'create-candidates',
'edit-candidates',
'delete-candidates',
// Interview Types
'manage-interview-types',
'manage-any-interview-types',
'view-interview-types',
'create-interview-types',
'edit-interview-types',
'delete-interview-types',
// Interview Rounds
'manage-interview-rounds',
'manage-any-interview-rounds',
'view-interview-rounds',
'create-interview-rounds',
'edit-interview-rounds',
'delete-interview-rounds',
// Interviews
'manage-interviews',
'manage-any-interviews',
'view-interviews',
'create-interviews',
'edit-interviews',
'delete-interviews',
// Interview Feedback
'manage-interview-feedback',
'manage-any-interview-feedback',
'view-interview-feedback',
'create-interview-feedback',
'edit-interview-feedback',
'delete-interview-feedback',
// Candidate Assessments
'manage-candidate-assessments',
'manage-any-candidate-assessments',
'view-candidate-assessments',
'create-candidate-assessments',
'edit-candidate-assessments',
'delete-candidate-assessments',
// Offer Templates
'manage-offer-templates',
'manage-any-offer-templates',
'view-offer-templates',
'create-offer-templates',
'edit-offer-templates',
'delete-offer-templates',
// Offers
'manage-offers',
'manage-any-offers',
'view-offers',
'create-offers',
'edit-offers',
'delete-offers',
'approve-offers',
// Onboarding Checklists management
'manage-onboarding-checklists',
'manage-any-onboarding-checklists',
'view-onboarding-checklists',
'create-onboarding-checklists',
'edit-onboarding-checklists',
'delete-onboarding-checklists',
// Checklist Items management
'manage-checklist-items',
'manage-any-checklist-items',
'view-checklist-items',
'create-checklist-items',
'edit-checklist-items',
'delete-checklist-items',
// Candidate Onboarding management
'manage-candidate-onboarding',
'manage-any-candidate-onboarding',
'manage-candidate-onboarding-status',
'view-candidate-onboarding',
'create-candidate-onboarding',
'edit-candidate-onboarding',
'delete-candidate-onboarding',
// Meeting Types management
'manage-meeting-types',
'manage-any-meeting-types',
'view-meeting-types',
'create-meeting-types',
'edit-meeting-types',
'delete-meeting-types',
// Meeting Rooms management
'manage-meeting-rooms',
'manage-any-meeting-rooms',
'view-meeting-rooms',
'create-meeting-rooms',
'edit-meeting-rooms',
'delete-meeting-rooms',
// Meetings management
'manage-meetings',
'manage-any-meetings',
'view-meetings',
'create-meetings',
'edit-meetings',
'delete-meetings',
'manage-meeting-status',
// Meeting Attendees management
'manage-meeting-attendees',
'manage-any-meeting-attendees',
'view-meeting-attendees',
'create-meeting-attendees',
'edit-meeting-attendees',
'delete-meeting-attendees',
'manage-meeting-rsvp-status',
'manage-meeting-attendance',
// Meeting Minutes management
'manage-meeting-minutes',
'manage-any-meeting-minutes',
'view-meeting-minutes',
'create-meeting-minutes',
'edit-meeting-minutes',
'delete-meeting-minutes',
// Action Items management
'manage-action-items',
'manage-any-action-items',
'view-action-items',
'create-action-items',
'edit-action-items',
'delete-action-items',
// Contract Types management
'manage-contract-types',
'manage-any-contract-types',
'view-contract-types',
'create-contract-types',
'edit-contract-types',
'delete-contract-types',
// Employee Contracts management
'manage-employee-contracts',
'manage-any-employee-contracts',
'view-employee-contracts',
'create-employee-contracts',
'edit-employee-contracts',
'delete-employee-contracts',
'approve-employee-contracts',
'reject-employee-contracts',
// Contract Renewals management
'manage-contract-renewals',
'manage-any-contract-renewals',
'view-contract-renewals',
'create-contract-renewals',
'edit-contract-renewals',
'delete-contract-renewals',
'approve-contract-renewals',
'reject-contract-renewals',
// Contract Templates management
'manage-contract-templates',
'manage-any-contract-templates',
'view-contract-templates',
'create-contract-templates',
'edit-contract-templates',
'delete-contract-templates',
// Document Categories management
'manage-document-categories',
'manage-any-document-categories',
'view-document-categories',
'create-document-categories',
'edit-document-categories',
'delete-document-categories',
// HR Documents management
'manage-hr-documents',
'manage-any-hr-documents',
'view-hr-documents',
'create-hr-documents',
'edit-hr-documents',
'delete-hr-documents',
// Document Acknowledgments management
'manage-document-acknowledgments',
'manage-any-document-acknowledgments',
'view-document-acknowledgments',
'create-document-acknowledgments',
'edit-document-acknowledgments',
'delete-document-acknowledgments',
'acknowledge-document-acknowledgments',
// Document Templates management
'manage-document-templates',
'manage-any-document-templates',
'view-document-templates',
'create-document-templates',
'edit-document-templates',
'delete-document-templates',
// Leave Types management
'manage-leave-types',
'manage-any-leave-types',
'view-leave-types',
'create-leave-types',
'edit-leave-types',
'delete-leave-types',
// Leave Policies management
'manage-leave-policies',
'manage-any-leave-policies',
'view-leave-policies',
'create-leave-policies',
'edit-leave-policies',
'delete-leave-policies',
// Leave Applications management
'manage-leave-applications',
'manage-any-leave-applications',
'view-leave-applications',
'create-leave-applications',
'edit-leave-applications',
'delete-leave-applications',
'approve-leave-applications',
'reject-leave-applications',
// Leave Balances management
'manage-leave-balances',
'manage-any-leave-balances',
'view-leave-balances',
'create-leave-balances',
'edit-leave-balances',
'delete-leave-balances',
'adjust-leave-balances',
// Shifts management
'manage-shifts',
'manage-any-shifts',
'view-shifts',
'create-shifts',
'edit-shifts',
'delete-shifts',
// Attendance Policies management
'manage-attendance-policies',
'manage-any-attendance-policies',
'view-attendance-policies',
'create-attendance-policies',
'edit-attendance-policies',
'delete-attendance-policies',
// Attendance Records management
'manage-attendance-records',
'manage-any-attendance-records',
'view-attendance-records',
'create-attendance-records',
'edit-attendance-records',
'delete-attendance-records',
'clock-in-out',
// Attendance Regularizations management
'manage-attendance-regularizations',
'manage-any-attendance-regularizations',
'view-attendance-regularizations',
'create-attendance-regularizations',
'edit-attendance-regularizations',
'delete-attendance-regularizations',
'approve-attendance-regularizations',
'reject-attendance-regularizations',
// Time Entries management
'manage-time-entries',
'manage-any-time-entries',
'view-time-entries',
'create-time-entries',
'edit-time-entries',
'delete-time-entries',
'approve-time-entries',
'reject-time-entries',
// Salary Components management
'manage-salary-components',
'manage-any-salary-components',
'view-salary-components',
'create-salary-components',
'edit-salary-components',
'delete-salary-components',
// Employee Salaries management
'manage-employee-salaries',
'manage-any-employee-salaries',
'view-employee-salaries',
'create-employee-salaries',
'edit-employee-salaries',
'delete-employee-salaries',
// Payroll Runs management
'manage-payroll-runs',
'manage-any-payroll-runs',
'view-payroll-runs',
'create-payroll-runs',
'edit-payroll-runs',
'delete-payroll-runs',
'process-payroll-runs',
// Payslips management
'manage-payslips',
'manage-any-payslips',
'view-payslips',
'create-payslips',
'download-payslips',
'send-payslips',
// career page
'manage-career-page',
// Download Certificate permission
'download-joining-letter',
'download-experience-certificate',
'download-noc-certificate',
];
}
private function getHRPermissions(): array
{
return $this->getManagerPermissions();
}
}