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

128 lines
9.0 KiB
PHP

<?php
namespace Database\Seeders;
use App\Models\PerformanceIndicator;
use App\Models\PerformanceIndicatorCategory;
use App\Models\User;
use Illuminate\Database\Seeder;
class PerformanceIndicatorSeeder 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 performance indicators by category for consistent data
$indicatorsByCategory = [
'Job Performance' => [
['name' => 'Task Completion Rate', 'description' => 'Percentage of assigned tasks completed within specified timeframes', 'unit' => 'Percentage', 'target' => '95%'],
['name' => 'Goal Achievement', 'description' => 'Success rate in achieving individual and team objectives', 'unit' => 'Percentage', 'target' => '90%'],
['name' => 'Productivity Level', 'description' => 'Output efficiency compared to established benchmarks', 'unit' => 'Rating', 'target' => '4/5']
],
'Quality of Work' => [
['name' => 'Error Rate', 'description' => 'Frequency of mistakes or defects in work output', 'unit' => 'Percentage', 'target' => '<5%'],
['name' => 'Accuracy Level', 'description' => 'Precision and correctness in completing tasks and deliverables', 'unit' => 'Percentage', 'target' => '98%'],
['name' => 'Attention to Detail', 'description' => 'Thoroughness and care in reviewing and completing work', 'unit' => 'Rating', 'target' => '4/5']
],
'Communication Skills' => [
['name' => 'Verbal Communication', 'description' => 'Effectiveness in spoken communication and presentations', 'unit' => 'Rating', 'target' => '4/5'],
['name' => 'Written Communication', 'description' => 'Clarity and professionalism in written correspondence', 'unit' => 'Rating', 'target' => '4/5'],
['name' => 'Active Listening', 'description' => 'Ability to understand and respond appropriately to others', 'unit' => 'Rating', 'target' => '4/5']
],
'Teamwork and Collaboration' => [
['name' => 'Team Contribution', 'description' => 'Active participation and valuable input in team activities', 'unit' => 'Rating', 'target' => '4/5'],
['name' => 'Cooperation Level', 'description' => 'Willingness to work with others and support team goals', 'unit' => 'Rating', 'target' => '4/5'],
['name' => 'Conflict Resolution', 'description' => 'Ability to handle disagreements constructively', 'unit' => 'Rating', 'target' => '3/5']
],
'Leadership and Initiative' => [
['name' => 'Decision Making', 'description' => 'Quality and timeliness of decisions made independently', 'unit' => 'Rating', 'target' => '4/5'],
['name' => 'Initiative Taking', 'description' => 'Proactive approach to identifying and addressing opportunities', 'unit' => 'Rating', 'target' => '4/5'],
['name' => 'Mentoring Ability', 'description' => 'Effectiveness in guiding and developing junior team members', 'unit' => 'Rating', 'target' => '3/5']
],
'Problem Solving' => [
['name' => 'Analytical Thinking', 'description' => 'Ability to break down complex problems and analyze components', 'unit' => 'Rating', 'target' => '4/5'],
['name' => 'Creative Solutions', 'description' => 'Innovation and creativity in developing problem solutions', 'unit' => 'Rating', 'target' => '3/5'],
['name' => 'Resolution Speed', 'description' => 'Efficiency in identifying and implementing solutions', 'unit' => 'Rating', 'target' => '4/5']
],
'Adaptability and Flexibility' => [
['name' => 'Change Adaptation', 'description' => 'Ability to adjust to new processes, systems, or requirements', 'unit' => 'Rating', 'target' => '4/5'],
['name' => 'Learning Agility', 'description' => 'Speed and effectiveness in acquiring new skills and knowledge', 'unit' => 'Rating', 'target' => '4/5'],
['name' => 'Stress Management', 'description' => 'Ability to maintain performance under pressure', 'unit' => 'Rating', 'target' => '3/5']
],
'Time Management' => [
['name' => 'Deadline Adherence', 'description' => 'Consistency in meeting project and task deadlines', 'unit' => 'Percentage', 'target' => '95%'],
['name' => 'Priority Management', 'description' => 'Effectiveness in organizing and prioritizing multiple tasks', 'unit' => 'Rating', 'target' => '4/5'],
['name' => 'Efficiency Rating', 'description' => 'Optimal use of time and resources to achieve objectives', 'unit' => 'Rating', 'target' => '4/5']
],
'Customer Service' => [
['name' => 'Customer Satisfaction', 'description' => 'Level of customer satisfaction with service provided', 'unit' => 'Rating', 'target' => '4.5/5'],
['name' => 'Response Time', 'description' => 'Speed in responding to customer inquiries and requests', 'unit' => 'Hours', 'target' => '<24'],
['name' => 'Issue Resolution', 'description' => 'Effectiveness in resolving customer problems and complaints', 'unit' => 'Percentage', 'target' => '90%']
],
'Technical Competency' => [
['name' => 'Skill Proficiency', 'description' => 'Level of expertise in job-related technical skills', 'unit' => 'Rating', 'target' => '4/5'],
['name' => 'Tool Utilization', 'description' => 'Effective use of software, systems, and technical tools', 'unit' => 'Rating', 'target' => '4/5'],
['name' => 'Knowledge Application', 'description' => 'Practical application of technical knowledge to solve problems', 'unit' => 'Rating', 'target' => '4/5']
],
'Professional Development' => [
['name' => 'Training Completion', 'description' => 'Participation and completion rate in professional development programs', 'unit' => 'Percentage', 'target' => '100%'],
['name' => 'Skill Enhancement', 'description' => 'Progress in developing new competencies and improving existing skills', 'unit' => 'Rating', 'target' => '3/5'],
['name' => 'Certification Achievement', 'description' => 'Success in obtaining relevant professional certifications', 'unit' => 'Count', 'target' => '2/year']
],
'Attendance and Punctuality' => [
['name' => 'Attendance Rate', 'description' => 'Percentage of scheduled work days attended', 'unit' => 'Percentage', 'target' => '98%'],
['name' => 'Punctuality Score', 'description' => 'Consistency in arriving on time for work and meetings', 'unit' => 'Percentage', 'target' => '95%'],
['name' => 'Leave Management', 'description' => 'Appropriate use of leave policies and advance notification', 'unit' => 'Rating', 'target' => '4/5']
]
];
foreach ($companies as $company) {
// Get performance indicator categories for this company
$categories = PerformanceIndicatorCategory::where('created_by', $company->id)->get();
if ($categories->isEmpty()) {
$this->command->warn('No performance indicator categories found for company: ' . $company->name . '. Please run PerformanceIndicatorCategorySeeder first.');
continue;
}
foreach ($categories as $category) {
$categoryIndicators = $indicatorsByCategory[$category->name] ?? [];
foreach ($categoryIndicators as $indicatorData) {
// Check if indicator already exists for this category
if (PerformanceIndicator::where('name', $indicatorData['name'])->where('category_id', $category->id)->exists()) {
continue;
}
try {
PerformanceIndicator::create([
'category_id' => $category->id,
'name' => $indicatorData['name'],
'description' => $indicatorData['description'],
'measurement_unit' => $indicatorData['unit'],
'target_value' => $indicatorData['target'],
'status' => 'active',
'created_by' => $company->id,
]);
} catch (\Exception $e) {
$this->command->error('Failed to create performance indicator: ' . $indicatorData['name'] . ' for company: ' . $company->name);
continue;
}
}
}
}
$this->command->info('PerformanceIndicator seeder completed successfully!');
}
}