Commit ba5df702 authored by Mahmoud Aglan's avatar Mahmoud Aglan

fixhr2

parent 9bd4d36c
......@@ -143,7 +143,7 @@ class EmployeeProfileController extends Controller
[(int) $id]
);
$yearsOfService = $profile->getYearsOfService();
$yearsOfService = HrEmployeeProfile::getYearsOfService($profile->hire_date ?? date('Y-m-d'));
return $this->view('HR.Views.employees.show', [
'profile' => $profile,
......
......@@ -51,7 +51,7 @@ class PerformanceController extends Controller
public function createCycle(Request $request): Response
{
$name = trim((string) $request->post('name_ar', ''));
$cycleType = trim((string) $request->post('cycle_type', 'annual'));
$cycleType = trim((string) $request->post('period_type', 'annual'));
$startDate = trim((string) $request->post('start_date', ''));
$endDate = trim((string) $request->post('end_date', ''));
......@@ -78,7 +78,7 @@ class PerformanceController extends Controller
$cycleId = $db->insert('hr_performance_cycles', [
'name_ar' => $name,
'cycle_type' => $cycleType,
'period_type' => $cycleType,
'start_date' => $startDate,
'end_date' => $endDate,
'status' => 'draft',
......
......@@ -16,7 +16,7 @@ class SalaryStructureController extends Controller
{
$db = App::getInstance()->db();
$structures = $db->select(
"SELECT ss.*, (SELECT COUNT(*) FROM hr_salary_components sc WHERE sc.salary_structure_id = ss.id AND sc.is_archived = 0) as component_count
"SELECT ss.*, (SELECT COUNT(*) FROM hr_salary_components sc WHERE sc.structure_id = ss.id AND sc.is_active = 1) as component_count
FROM hr_salary_structures ss
WHERE ss.is_archived = 0
ORDER BY ss.is_default DESC, ss.name_ar ASC"
......@@ -142,10 +142,10 @@ class SalaryStructureController extends Controller
continue;
}
$db->insert('hr_salary_components', [
'salary_structure_id' => (int) $id,
'structure_id' => (int) $id,
'name_ar' => $name,
'name_en' => trim((string) ($compData['name_en'] ?? '')) ?: null,
'code' => strtoupper(trim((string) ($compData['code'] ?? ''))),
'component_code' => strtoupper(trim((string) ($compData['component_code'] ?? ''))),
'type' => trim((string) ($compData['type'] ?? 'earning')),
'calculation_type' => trim((string) ($compData['calculation_type'] ?? 'fixed')),
'default_amount' => trim((string) ($compData['default_amount'] ?? '0.00')),
......@@ -173,7 +173,7 @@ class SalaryStructureController extends Controller
'is_active' => (int) ($compData['is_active'] ?? 1),
'updated_at' => date('Y-m-d H:i:s'),
'updated_by' => $employee ? (int) $employee->id : null,
], '`id` = ? AND `salary_structure_id` = ?', [(int) $compId, (int) $id]);
], '`id` = ? AND `structure_id` = ?', [(int) $compId, (int) $id]);
}
}
......
......@@ -31,7 +31,7 @@ class HrEmployeeProfile extends Model
'photo_path', 'notes',
];
public static function getEmploymentStatuses(): array
public static function getStatuses(): array
{
return [
'active' => 'نشط',
......@@ -44,6 +44,11 @@ class HrEmployeeProfile extends Model
];
}
public static function getEmploymentStatuses(): array
{
return static::getStatuses();
}
public static function getEmploymentTypes(): array
{
return [
......@@ -107,7 +112,7 @@ class HrEmployeeProfile extends Model
{
$db = App::getInstance()->db();
$rows = $db->select(
"SELECT id, employee_id FROM hr_employee_profiles WHERE employment_status IN ('active','on_probation') AND is_archived = 0"
"SELECT id, employee_id, first_name_ar, last_name_ar, employee_number FROM hr_employee_profiles WHERE employment_status IN ('active','on_probation') AND is_archived = 0 ORDER BY first_name_ar ASC"
);
return $rows;
}
......
......@@ -16,7 +16,7 @@ class HrEndOfService extends Model
protected static bool $autoTrackAuthor = true;
protected static array $fillable = [
'employee_id', 'termination_type', 'request_date', 'effective_date',
'employee_profile_id', 'termination_type', 'request_date', 'effective_date',
'last_working_day', 'notice_period_start', 'notice_period_end',
'notice_period_served', 'notice_period_compensation',
'years_of_service', 'last_basic_salary', 'last_total_salary',
......@@ -70,7 +70,7 @@ class HrEndOfService extends Model
$countRow = $db->selectOne(
"SELECT COUNT(*) as cnt FROM hr_end_of_service eos
JOIN hr_employee_profiles p ON p.employee_id = eos.employee_id WHERE {$where}",
JOIN hr_employee_profiles p ON p.id = eos.employee_profile_id WHERE {$where}",
$params
);
$total = (int) ($countRow['cnt'] ?? 0);
......@@ -79,7 +79,7 @@ class HrEndOfService extends Model
$rows = $db->select(
"SELECT eos.*, CONCAT(p.first_name_ar, ' ', p.last_name_ar) as full_name_ar, p.employee_number
FROM hr_end_of_service eos
JOIN hr_employee_profiles p ON p.employee_id = eos.employee_id
JOIN hr_employee_profiles p ON p.id = eos.employee_profile_id
WHERE {$where}
ORDER BY eos.request_date DESC
LIMIT {$perPage} OFFSET {$offset}",
......
......@@ -53,7 +53,7 @@ class HrPerformanceCycle extends Model
"SELECT pr.*, CONCAT(p.first_name_ar, ' ', p.last_name_ar) as full_name_ar, p.employee_number, d.name_ar as department_name,
CONCAT(rev.first_name_ar, ' ', rev.last_name_ar) as reviewer_name
FROM hr_performance_reviews pr
JOIN hr_employee_profiles p ON p.employee_id = pr.employee_id
JOIN hr_employee_profiles p ON p.id = pr.employee_profile_id
LEFT JOIN hr_departments d ON d.id = p.department_id
LEFT JOIN hr_employee_profiles rev ON rev.employee_id = pr.reviewer_id
WHERE pr.cycle_id = ?
......
......@@ -15,7 +15,7 @@ class HrPerformanceReview extends Model
protected static bool $autoTrackAuthor = true;
protected static array $fillable = [
'cycle_id', 'employee_id', 'reviewer_id', 'review_date',
'cycle_id', 'employee_profile_id', 'reviewer_id', 'review_date',
'overall_rating', 'rating_label', 'scores_json',
'strengths', 'improvements', 'goals_json',
'employee_comment', 'status',
......@@ -62,7 +62,7 @@ class HrPerformanceReview extends Model
FROM hr_performance_reviews pr
JOIN hr_performance_cycles pc ON pc.id = pr.cycle_id
LEFT JOIN hr_employee_profiles rev ON rev.employee_id = pr.reviewer_id
WHERE pr.employee_id = ?
WHERE pr.employee_profile_id = ?
ORDER BY pc.year DESC",
[$employeeId]
);
......
......@@ -16,7 +16,7 @@ class HrSalaryAdjustment extends Model
protected static bool $autoTrackAuthor = true;
protected static array $fillable = [
'employee_id', 'adjustment_type', 'previous_basic_salary', 'new_basic_salary',
'employee_profile_id', 'adjustment_type', 'previous_basic_salary', 'new_basic_salary',
'previous_job_title_id', 'new_job_title_id', 'effective_date',
'reason', 'approved_by', 'approved_at', 'status', 'notes',
];
......@@ -50,7 +50,7 @@ class HrSalaryAdjustment extends Model
FROM hr_salary_adjustments sa
LEFT JOIN hr_job_titles jold ON jold.id = sa.previous_job_title_id
LEFT JOIN hr_job_titles jnew ON jnew.id = sa.new_job_title_id
WHERE sa.employee_id = ?
WHERE sa.employee_profile_id = ?
ORDER BY sa.effective_date DESC",
[$employeeId]
);
......@@ -73,7 +73,7 @@ class HrSalaryAdjustment extends Model
$countRow = $db->selectOne(
"SELECT COUNT(*) as cnt FROM hr_salary_adjustments sa
JOIN hr_employee_profiles p ON p.employee_id = sa.employee_id WHERE {$where}",
JOIN hr_employee_profiles p ON p.id = sa.employee_profile_id WHERE {$where}",
$params
);
$total = (int) ($countRow['cnt'] ?? 0);
......@@ -82,7 +82,7 @@ class HrSalaryAdjustment extends Model
$rows = $db->select(
"SELECT sa.*, CONCAT(p.first_name_ar, ' ', p.last_name_ar) as full_name_ar, p.employee_number
FROM hr_salary_adjustments sa
JOIN hr_employee_profiles p ON p.employee_id = sa.employee_id
JOIN hr_employee_profiles p ON p.id = sa.employee_profile_id
WHERE {$where}
ORDER BY sa.effective_date DESC
LIMIT {$perPage} OFFSET {$offset}",
......
......@@ -46,7 +46,7 @@
<?php else: ?>
<?php foreach ($departments as $dept): ?>
<tr>
<td><code><?= e($dept['code']) ?></code></td>
<td><code><?= e($dept['department_code']) ?></code></td>
<td><a href="/hr/departments/<?= (int) $dept['id'] ?>"><?= e($dept['name_ar']) ?></a></td>
<td><?= e($dept['parent_name'] ?? '-') ?></td>
<td><?= e($dept['branch_name'] ?? '-') ?></td>
......
......@@ -30,7 +30,7 @@
<?php else: ?>
<?php foreach ($jobTitles as $jt): ?>
<tr>
<td><code><?= e($jt['code']) ?></code></td>
<td><code><?= e($jt['title_code']) ?></code></td>
<td><?= e($jt['name_ar']) ?></td>
<td><?= $jt['grade_level'] ? (int) $jt['grade_level'] : '-' ?></td>
<td><?= $jt['min_salary'] ? number_format((float) $jt['min_salary'], 2) : '-' ?></td>
......
......@@ -23,7 +23,7 @@
<tbody>
<?php foreach ($earnings as $e): ?>
<tr>
<td><code><?= e($e['code']) ?></code></td>
<td><code><?= e($e['component_code']) ?></code></td>
<td><?= e($e['name_ar']) ?></td>
<td><?= e($e['calculation_type']) ?></td>
<td><?= number_format((float) $e['default_amount'], 2) ?></td>
......@@ -46,7 +46,7 @@
<tbody>
<?php foreach ($deductions as $d): ?>
<tr>
<td><code><?= e($d['code']) ?></code></td>
<td><code><?= e($d['component_code']) ?></code></td>
<td><?= e($d['name_ar']) ?></td>
<td><?= e($d['calculation_type']) ?></td>
<td><?= number_format((float) $d['default_amount'], 2) ?></td>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment