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

277 lines
10 KiB
PHP

<?php
namespace Database\Seeders;
use App\Models\ContractTemplate;
use App\Models\ContractType;
use App\Models\User;
use Illuminate\Database\Seeder;
class ContractTemplateSeeder 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 contract templates for consistent data
$contractTemplates = [
[
'name' => 'Standard Permanent Employment Contract',
'description' => 'Standard template for permanent full-time employees with comprehensive terms and conditions',
'contract_type' => 'Permanent Full-time',
'template_content' => 'EMPLOYMENT AGREEMENT
This Employment Agreement is entered into between {{company_name}} and {{employee_name}}.
POSITION AND DUTIES:
Employee is hired as {{job_title}} in the {{department}} department, reporting to {{manager_name}}.
COMPENSATION:
- Basic Salary: {{basic_salary}} per annum
- Allowances: {{allowances}}
- Benefits: {{benefits}}
EMPLOYMENT TERMS:
- Start Date: {{start_date}}
- Probation Period: {{probation_period}} months
- Notice Period: {{notice_period}} days
- Working Hours: {{working_hours}}
CONFIDENTIALITY:
Employee agrees to maintain confidentiality of company information and trade secrets.
TERMINATION:
Either party may terminate this agreement with {{notice_period}} days written notice.
This agreement is governed by the laws of {{jurisdiction}}.
Signed:
{{employee_name}} - Employee
{{hr_manager}} - HR Manager
Date: {{contract_date}}',
'variables' => ['company_name', 'employee_name', 'job_title', 'department', 'manager_name', 'basic_salary', 'allowances', 'benefits', 'start_date', 'probation_period', 'notice_period', 'working_hours', 'jurisdiction', 'hr_manager', 'contract_date'],
'clauses' => ['Confidentiality', 'Non-Compete', 'Termination', 'Benefits', 'Working Hours'],
'is_default' => true,
'status' => 'active'
],
[
'name' => 'Fixed-Term Contract Template',
'description' => 'Template for fixed-term contracts with specific start and end dates',
'contract_type' => 'Fixed-term Contract',
'template_content' => 'FIXED-TERM EMPLOYMENT CONTRACT
This Fixed-Term Contract is between {{company_name}} and {{employee_name}}.
CONTRACT PERIOD:
- Start Date: {{start_date}}
- End Date: {{end_date}}
- Duration: {{contract_duration}} months
POSITION:
Employee is engaged as {{job_title}} for the specified contract period.
COMPENSATION:
- Monthly Salary: {{monthly_salary}}
- Total Contract Value: {{total_value}}
- Payment Terms: {{payment_terms}}
RENEWAL:
This contract may be renewed by mutual agreement before expiration.
EARLY TERMINATION:
Contract may be terminated early with {{notice_period}} days notice or payment in lieu.
DELIVERABLES:
{{project_deliverables}}
Signed:
{{employee_name}} - Contractor
{{project_manager}} - Project Manager
Date: {{contract_date}}',
'variables' => ['company_name', 'employee_name', 'start_date', 'end_date', 'contract_duration', 'job_title', 'monthly_salary', 'total_value', 'payment_terms', 'notice_period', 'project_deliverables', 'project_manager', 'contract_date'],
'clauses' => ['Contract Period', 'Renewal Terms', 'Early Termination', 'Deliverables'],
'is_default' => false,
'status' => 'active'
],
[
'name' => 'Part-Time Employment Contract',
'description' => 'Contract template for part-time employees with flexible working arrangements',
'contract_type' => 'Part-time Contract',
'template_content' => 'PART-TIME EMPLOYMENT AGREEMENT
Agreement between {{company_name}} and {{employee_name}} for part-time employment.
WORKING ARRANGEMENT:
- Position: {{job_title}}
- Working Hours: {{weekly_hours}} hours per week
- Schedule: {{work_schedule}}
- Flexible Hours: {{flexible_arrangement}}
COMPENSATION:
- Hourly Rate: {{hourly_rate}}
- Monthly Salary: {{monthly_salary}}
- Pro-rated Benefits: {{prorated_benefits}}
BENEFITS:
- Health Insurance: {{health_coverage}}
- Paid Leave: {{leave_entitlement}} days annually
- Professional Development: {{training_budget}}
PERFORMANCE:
Performance will be evaluated based on {{performance_metrics}}.
TERMINATION:
Either party may terminate with {{notice_period}} days notice.
Signed:
{{employee_name}} - Employee
{{hr_representative}} - HR Representative
Date: {{contract_date}}',
'variables' => ['company_name', 'employee_name', 'job_title', 'weekly_hours', 'work_schedule', 'flexible_arrangement', 'hourly_rate', 'monthly_salary', 'prorated_benefits', 'health_coverage', 'leave_entitlement', 'training_budget', 'performance_metrics', 'notice_period', 'hr_representative', 'contract_date'],
'clauses' => ['Working Hours', 'Flexible Arrangement', 'Pro-rated Benefits', 'Performance Metrics'],
'is_default' => false,
'status' => 'active'
],
[
'name' => 'Consultant Agreement Template',
'description' => 'Independent contractor agreement for consulting services',
'contract_type' => 'Consultant Agreement',
'template_content' => 'INDEPENDENT CONTRACTOR AGREEMENT
This Agreement is between {{company_name}} and {{contractor_name}}.
SERVICES:
Contractor will provide {{service_description}} as an independent contractor.
SCOPE OF WORK:
{{scope_of_work}}
COMPENSATION:
- Contract Rate: {{contract_rate}}
- Payment Schedule: {{payment_schedule}}
- Total Contract Value: {{total_value}}
- Expenses: {{expense_policy}}
DELIVERABLES:
{{deliverables_list}}
TIMELINE:
- Start Date: {{start_date}}
- Completion Date: {{end_date}}
- Milestones: {{project_milestones}}
INTELLECTUAL PROPERTY:
All work products belong to {{company_name}}.
CONFIDENTIALITY:
Contractor agrees to maintain strict confidentiality.
TERMINATION:
Either party may terminate with {{notice_period}} days notice.
Signed:
{{contractor_name}} - Contractor
{{project_manager}} - Project Manager
Date: {{contract_date}}',
'variables' => ['company_name', 'contractor_name', 'service_description', 'scope_of_work', 'contract_rate', 'payment_schedule', 'total_value', 'expense_policy', 'deliverables_list', 'start_date', 'end_date', 'project_milestones', 'notice_period', 'project_manager', 'contract_date'],
'clauses' => ['Scope of Work', 'Payment Terms', 'Intellectual Property', 'Confidentiality', 'Termination'],
'is_default' => false,
'status' => 'active'
],
[
'name' => 'Internship Agreement Template',
'description' => 'Agreement template for internship programs and student placements',
'contract_type' => 'Internship Contract',
'template_content' => 'INTERNSHIP AGREEMENT
Agreement between {{company_name}} and {{intern_name}} for internship program.
INTERNSHIP DETAILS:
- Position: {{internship_title}}
- Department: {{department}}
- Duration: {{internship_duration}}
- Start Date: {{start_date}}
- End Date: {{end_date}}
SUPERVISION:
- Supervisor: {{supervisor_name}}
- Mentor: {{mentor_name}}
LEARNING OBJECTIVES:
{{learning_objectives}}
COMPENSATION:
- Monthly Stipend: {{stipend_amount}}
- Benefits: {{intern_benefits}}
EVALUATION:
Performance will be evaluated {{evaluation_frequency}} based on {{evaluation_criteria}}.
CONFIDENTIALITY:
Intern agrees to maintain confidentiality of company information.
CERTIFICATE:
Upon successful completion, intern will receive {{certificate_type}}.
Signed:
{{intern_name}} - Intern
{{supervisor_name}} - Supervisor
Date: {{contract_date}}',
'variables' => ['company_name', 'intern_name', 'internship_title', 'department', 'internship_duration', 'start_date', 'end_date', 'supervisor_name', 'mentor_name', 'learning_objectives', 'stipend_amount', 'intern_benefits', 'evaluation_frequency', 'evaluation_criteria', 'certificate_type', 'contract_date'],
'clauses' => ['Learning Objectives', 'Supervision', 'Evaluation', 'Confidentiality', 'Certificate'],
'is_default' => false,
'status' => 'active'
]
];
foreach ($companies as $company) {
// Get contract types for this company
$contractTypes = ContractType::where('created_by', $company->id)->get();
if ($contractTypes->isEmpty()) {
$this->command->warn('No contract types found for company: ' . $company->name . '. Please run ContractTypeSeeder first.');
continue;
}
foreach ($contractTemplates as $templateData) {
// Find matching contract type
$contractType = $contractTypes->where('name', $templateData['contract_type'])->first();
if (!$contractType) $contractType = $contractTypes->first();
// Check if template already exists for this company
if (ContractTemplate::where('name', $templateData['name'])->where('created_by', $company->id)->exists()) {
continue;
}
try {
ContractTemplate::create([
'name' => $templateData['name'],
'description' => $templateData['description'],
'contract_type_id' => $contractType->id,
'template_content' => $templateData['template_content'],
'variables' => $templateData['variables'],
'clauses' => $templateData['clauses'],
'is_default' => $templateData['is_default'],
'status' => $templateData['status'],
'created_by' => $company->id,
]);
} catch (\Exception $e) {
$this->command->error('Failed to create contract template: ' . $templateData['name'] . ' for company: ' . $company->name);
continue;
}
}
}
$this->command->info('ContractTemplate seeder completed successfully!');
}
}