I am using Laravel-5.8 to develop a Staff Leave platform.
Currently, I am on Leave Request. At the beginning of every year the Admin set all the holidays and store in hr_holiday_dates table as shown below:
class HrHolidayDate extends Model
{
protected $table = 'hr_holiday_dates';
protected $primaryKey = 'id';
protected $fillable = [
'holiday_name',
'date_from',
'date_to',
];
}
The employee logs in into the application to make leave request.
Model: HrLeaveRequest:
class HrLeaveRequest extends Model
{
public $timestamps = false;
protected $table = 'hr_leave_requests';
protected $primaryKey = 'id';
protected $fillable = [
'id',
'employee_id',
'reason',
'leave_type_id',
'commencement_date',
'resumption_date',
'no_of_days',
];
public function employee()
{
return $this->belongsTo('App\Models\Hr\HrEmployee','employee_id');
}
public function leaveType()
{
return $this->belongsTo('App\Models\Hr\HrLeaveType','leave_type_id');
}
}
When the employee makes request for leave, he selects leave_type, commencement_date and resumption_date. The no_of_days is not selected, but is based on the application intelligence.
Controller
public function create()
{
return view('hr.leave_requests.create');
}
public function store(StoreLeaveRequest $request)
{
try {
$commencementDate = Carbon::parse($request->commencement_date);
$resumptionDate = Carbon::parse($request->resumption_date);
$employeeId = Auth::user()->employee_id;
$leave = new HrLeaveRequest();
$leave->leave_type_id = $request->leave_type_id;
$leave->commencement_date = $commencementDate ->toDateTimeString();
$leave->resumption_date = resumptionDate ->toDateTimeString();
$leave->no_of_days = $request->no_of_days;
Session::flash('success', 'Leave Request is created successfully');
return redirect()->route('hr.leave_requests.index');
} catch (Exception $exception) {
Session::flash('error', 'Action failed! Please try again');
return redirect()->route('hr.leave_requests.index');
}
}
For leave no_of_days, what I want is this, the application get it between commencement_date and resumption_date. But before it does that, it removes weekend (Saturday and Sunday) from the selected dates. Also, it goes to hr_holiday_days that falls into the range of the selected dates and extract the holidays. It should also put into consideration the weekend in the holiday.
How do I get:
$leave->no_of_days
from the explanation above?
Thank you.