CasperSecurity
<?php
namespace App\Imports;
use App\Models\AssignDepartments;
use App\Models\EmployeeAttendance;
use App\Models\AttendanceRule;
use App\Models\EmployeeRegistration;
use Carbon\Carbon;
use Maatwebsite\Excel\Concerns\ToModel;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
class AttendanceImport implements ToModel, WithHeadingRow
{
/**
* @param array $row
*
* @return \Illuminate\Database\Eloquent\Model|null
*/
protected $selectedMonth;
public $startDate ,$endDate;
public function __construct($selectedMonth)
{
$this->selectedMonth = $selectedMonth;
}
public function model(array $row)
{
$empreginfo=EmployeeRegistration::where('user_id',$row['employee_id'])->latest()->first();
$nextMonth = date('Y-m', strtotime($this->selectedMonth . ' +1 month'));
$attrange=AttendanceRule::where('status',1)->first();
$this->startDate=date("$this->selectedMonth-$attrange->cal_start_date");
$this->endDate=date("$nextMonth-$attrange->cal_end_date");
$startDate = Carbon::parse( $this->startDate)->format('Y-m-d');
$endDate = Carbon::parse($this->endDate)->format('Y-m-d');
$starttime=$lateallowed=$assignworkinghours="";
if($empreginfo){
$empassigndept=AssignDepartments::where('employee_id',$empreginfo->id)->where('status',1)->latest()->first();
if($empassigndept){
$attendancerule=$empassigndept->getAttendanceType->getAttendanceRule;
if($attendancerule){
$starttime=$attendancerule->start_time;
$lateallowed=$attendancerule->late_allowed;
$assignworkinghours=$attendancerule->working_hr;
}
}
$diff= \Illuminate\Support\Carbon::parse($row['attendance_out_time'])->diff(Carbon::parse($row['attendance_time']));
$workinghours=$diff->h.".".$diff->i;
// dd($row['attendance_out_time']);
$workingstatus=0;
$allwoedstarttime=Carbon::parse($starttime)->addMinutes($lateallowed)->format('h:i:s');
if($allwoedstarttime < Carbon::parse($row['attendance_time'])->format('h:i:s')){
$workingstatus=2;
}else{
$workingstatus=1;
}
$dateToCheck = Carbon::parse($row['date'])->format('Y-m-d');
$checkk=EmployeeAttendance::where("employee_id",$empreginfo->id)->whereDate('date',Carbon::parse($row['date'])->format('Y-m-d'))->latest()->first();
if(!$checkk && $dateToCheck>=($startDate) && $dateToCheck<=($endDate)){
$attdata=[
'employee_id'=>$empreginfo->id,
'user_id'=>$row['employee_id'],
'date'=>Carbon::parse($row['date'])->format('Y-m-d'),
'attendance_time'=>Carbon::parse($row['attendance_time'])->format('H:i:s'),
'attendance_out_time'=>Carbon::parse($row['attendance_out_time'])->format('H:i:s'),
'working_hours'=>$workinghours,
'status'=>$workingstatus,
];
//dd($attdata);
return new EmployeeAttendance($attdata);
}
}
}
}