83 lines
2.8 KiB
PHP
83 lines
2.8 KiB
PHP
<?php
|
|
|
|
namespace App\Jobs;
|
|
|
|
use App\Models\LeaveDays;
|
|
use App\Models\User;
|
|
use Carbon\Carbon;
|
|
use Illuminate\Bus\Queueable;
|
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
|
use Illuminate\Foundation\Bus\Dispatchable;
|
|
use Illuminate\Queue\InteractsWithQueue;
|
|
use Illuminate\Queue\SerializesModels;
|
|
use Modules\Admin\app\Models\Category;
|
|
|
|
class AddMonthlyLeaveDays implements ShouldQueue
|
|
{
|
|
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
|
|
|
|
protected $month;
|
|
protected $year;
|
|
|
|
private const ONLEAVE_PER_MONTH = 1; // Ngày phép cộng mỗi tháng
|
|
|
|
public function __construct($month = null, $year = null)
|
|
{
|
|
$this->month = $month ?? Carbon::now()->month;
|
|
$this->year = $year ?? Carbon::now()->year;
|
|
}
|
|
|
|
public function handle(): void
|
|
{
|
|
$users = User::get();
|
|
|
|
foreach ($users as $user) {
|
|
// Nếu là nhân viên chưa chính thức, ko cộng phép
|
|
if (!$user->is_permanent) {
|
|
continue;
|
|
}
|
|
|
|
$leaveDay = LeaveDays::where('ld_user_id', $user->id)
|
|
->where('ld_year', $this->year)
|
|
->first();
|
|
|
|
if (!$leaveDay) {
|
|
// Nếu chưa có dữ liệu năm hiện tại, tạo mới
|
|
// Số ngày phép bằng với tháng hiện tại
|
|
$leaveDay = new LeaveDays([
|
|
'ld_user_id' => $user->id,
|
|
'ld_day_total' => $this->month, // Số ngày phép bằng tháng hiện tại
|
|
'ld_year' => $this->year,
|
|
'ld_additional_day' => 0,
|
|
'ld_note' => 'Khởi tạo ngày phép đến tháng ' . $this->month,
|
|
'ld_special_leave_day' => 0,
|
|
]);
|
|
$leaveDay->save();
|
|
} else {
|
|
// Check có phải là nhân viên chính thức trong năm nay (Nhân viên mới)
|
|
if ($user->permanent_date && $user->permanent_date !== '0000-00-00') {
|
|
$permenantYear = Carbon::parse($user->permanent_date)->year;
|
|
|
|
if ($permenantYear === $this->year) {
|
|
$permanentCategory = Category::where('c_type', 'PERMANENT_ONLEAVE')->where('c_code', "PERMANENT")->first();
|
|
$permanentDefault = (int) $permanentCategory->c_value; // Ngày phép khi thành nv chính thức
|
|
|
|
$permanentMonth = Carbon::parse($user->permanent_date)->month;
|
|
if ($this->month > $leaveDay->ld_day_total - ($permanentDefault - $permanentMonth)) {
|
|
$leaveDay->ld_day_total += self::ONLEAVE_PER_MONTH;
|
|
$leaveDay->save();
|
|
}
|
|
}
|
|
}
|
|
|
|
// Kiểm tra nếu số ngày phép hiện tại nhỏ hơn tháng hiện tại (Nhân viên cũ)
|
|
if ($leaveDay->ld_day_total < $this->month) {
|
|
// Cộng mỗi tháng 1 ngày phép cho nhân viên
|
|
$leaveDay->ld_day_total += self::ONLEAVE_PER_MONTH;
|
|
$leaveDay->save();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|