Files
HRM-System/database/seeders/HrDocumentSeeder.php
2026-04-13 08:16:56 +08:00

241 lines
11 KiB
PHP

<?php
namespace Database\Seeders;
use App\Models\HrDocument;
use App\Models\DocumentCategory;
use App\Models\User;
use Illuminate\Database\Seeder;
class HrDocumentSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
// Get all companies
$companies = User::where('type', 'company')->get();
if ($companies->isEmpty()) {
$this->command->warn('No company users found. Please run DefaultCompanySeeder first.');
return;
}
// Fixed HR documents for consistent data
$hrDocuments = [
[
'title' => 'Employee Handbook 2024',
'description' => 'Comprehensive employee handbook covering company policies, procedures, and guidelines for all employees',
'category' => 'Compliance Documents',
'file_name' => 'employee_handbook_2024.png',
'file_path' => randomImage(),
'file_type' => 'image/png',
'file_size' => 2048576,
'version' => '2.1',
'status' => 'Published',
'effective_date' => '2024-01-01',
'expiry_date' => '2024-12-31',
'requires_acknowledgment' => true,
'download_count' => 45
],
[
'title' => 'Code of Conduct Policy',
'description' => 'Company code of conduct and ethical guidelines for professional behavior and workplace standards',
'category' => 'Compliance Documents',
'file_name' => 'code_of_conduct_policy.png',
'file_path' => randomImage(),
'file_type' => 'image/png',
'file_size' => 1024768,
'version' => '1.5',
'status' => 'Published',
'effective_date' => '2024-01-15',
'expiry_date' => null,
'requires_acknowledgment' => true,
'download_count' => 38
],
[
'title' => 'Leave Policy Document',
'description' => 'Detailed leave policy including annual leave, sick leave, maternity/paternity leave, and special leave provisions',
'category' => 'Employment Documents',
'file_name' => 'leave_policy_2024.png',
'file_path' => randomImage(),
'file_type' => 'image/png',
'file_size' => 768432,
'version' => '1.3',
'status' => 'Published',
'effective_date' => '2024-02-01',
'expiry_date' => '2024-12-31',
'requires_acknowledgment' => true,
'download_count' => 52
],
[
'title' => 'Health and Safety Guidelines',
'description' => 'Workplace health and safety procedures, emergency protocols, and safety compliance requirements',
'category' => 'Medical Records',
'file_name' => 'health_safety_guidelines.png',
'file_path' => randomImage(),
'file_type' => 'image/png',
'file_size' => 1536789,
'version' => '1.8',
'status' => 'Published',
'effective_date' => '2024-01-10',
'expiry_date' => null,
'requires_acknowledgment' => true,
'download_count' => 29
],
[
'title' => 'Performance Evaluation Form',
'description' => 'Standard performance evaluation form template for annual and quarterly employee assessments',
'category' => 'Performance Records',
'file_name' => 'performance_evaluation_form.docx',
'file_path' => randomImage(),
'file_type' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
'file_size' => 245760,
'version' => '2.0',
'status' => 'Published',
'effective_date' => '2024-03-01',
'expiry_date' => null,
'requires_acknowledgment' => false,
'download_count' => 67
],
[
'title' => 'Training and Development Policy',
'description' => 'Company policy on employee training, skill development programs, and professional growth opportunities',
'category' => 'Training Certificates',
'file_name' => 'training_development_policy.png',
'file_path' => randomImage(),
'file_type' => 'image/png',
'file_size' => 892345,
'version' => '1.2',
'status' => 'Published',
'effective_date' => '2024-02-15',
'expiry_date' => '2025-02-14',
'requires_acknowledgment' => false,
'download_count' => 34
],
[
'title' => 'Remote Work Policy',
'description' => 'Guidelines and procedures for remote work arrangements, equipment, and productivity expectations',
'category' => 'Employment Documents',
'file_name' => 'remote_work_policy.png',
'file_path' => randomImage(),
'file_type' => 'image/png',
'file_size' => 654321,
'version' => '1.4',
'status' => 'Published',
'effective_date' => '2024-01-20',
'expiry_date' => null,
'requires_acknowledgment' => true,
'download_count' => 78
],
[
'title' => 'Expense Reimbursement Policy',
'description' => 'Policy and procedures for business expense reimbursements, travel expenses, and claim processes',
'category' => 'Financial Documents',
'file_name' => 'expense_reimbursement_policy.png',
'file_path' => randomImage(),
'file_type' => 'image/png',
'file_size' => 432198,
'version' => '1.6',
'status' => 'Published',
'effective_date' => '2024-01-05',
'expiry_date' => null,
'requires_acknowledgment' => false,
'download_count' => 41
],
[
'title' => 'Data Privacy and Security Policy',
'description' => 'Company data protection policy, privacy guidelines, and information security protocols',
'category' => 'Legal Documents',
'file_name' => 'data_privacy_security_policy.png',
'file_path' => randomImage(),
'file_type' => 'image/png',
'file_size' => 1234567,
'version' => '2.3',
'status' => 'Published',
'effective_date' => '2024-01-01',
'expiry_date' => null,
'requires_acknowledgment' => true,
'download_count' => 56
],
[
'title' => 'Emergency Contact Form',
'description' => 'Standard form for employees to provide emergency contact information and medical details',
'category' => 'Personal Documents',
'file_name' => 'emergency_contact_form.png',
'file_path' => randomImage(),
'file_type' => 'image/png',
'file_size' => 187654,
'version' => '1.1',
'status' => 'Published',
'effective_date' => '2024-01-01',
'expiry_date' => null,
'requires_acknowledgment' => false,
'download_count' => 89
]
];
foreach ($companies as $company) {
// Get document categories for this company
$documentCategories = DocumentCategory::where('created_by', $company->id)->get();
if ($documentCategories->isEmpty()) {
$this->command->warn('No document categories found for company: ' . $company->name . '. Please run DocumentCategorySeeder first.');
continue;
}
// Get HR users for uploading and approval
$hrUsers = User::whereIn('type', ['hr', 'manager'])
->where('created_by', $company->id)
->get();
if ($hrUsers->isEmpty()) {
$this->command->warn('No HR users found for company: ' . $company->name);
continue;
}
foreach ($hrDocuments as $index => $documentData) {
// Find matching category
$category = $documentCategories->where('name', $documentData['category'])->first();
if (!$category) $category = $documentCategories->first();
// Check if document already exists for this company
if (HrDocument::where('title', $documentData['title'])->where('created_by', $company->id)->exists()) {
continue;
}
// Select uploader and approver
$uploader = $hrUsers->first();
$approver = $hrUsers->count() > 1 ? $hrUsers->skip(1)->first() : $hrUsers->first();
try {
HrDocument::create([
'title' => $documentData['title'],
'description' => $documentData['description'],
'category_id' => $category->id,
'file_name' => $documentData['file_name'],
'file_path' => $documentData['file_path'],
'file_type' => $documentData['file_type'],
'file_size' => $documentData['file_size'],
'version' => $documentData['version'],
'status' => $documentData['status'],
'effective_date' => $documentData['effective_date'],
'expiry_date' => $documentData['expiry_date'],
'requires_acknowledgment' => $documentData['requires_acknowledgment'],
'download_count' => $documentData['download_count'],
'uploaded_by' => $company->id,
'approved_by' => $documentData['status'] === 'Published' ? $approver->id : null,
'approved_at' => $documentData['status'] === 'Published' ? now() : null,
'created_by' => $company->id,
]);
} catch (\Exception $e) {
$this->command->error('Failed to create HR document: ' . $documentData['title'] . ' for company: ' . $company->name);
continue;
}
}
}
$this->command->info('HrDocument seeder completed successfully!');
}
}