IMMREX7

aku nok ndi : /home/spdtg/www/schoolmis/app/Http/Controllers/School/
File Up :
aku nok ndi : /home/spdtg/www/schoolmis/app/Http/Controllers/School/EmpAttendanceController.php

<?php

namespace App\Http\Controllers\School;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use DB;
use Auth;
use Exception;
use Carbon\Carbon;
use Session;
use App\Http\SendSmsApi;
use Illuminate\Support\Facades\Redirect;
use PDF;

class EmpAttendanceController extends SchoolController {

    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request) {
        if ($request->has('date') && $request->date != null) {
            $tdate = \Carbon\Carbon::parse($request->date)->format('Y-m-d');
        } else {
            $tdate = \Carbon\Carbon::parse(today_date())->format('Y-m-d');
        }
        $months = \App\Month::get()->pluck('monthName', 'idMonth')->toArray();
        $school = \App\School::where('idSchool', '=', Auth::guard('school')->user()->idSchool)->first();
        $departments = ['All' => 'All'] + \App\Department::where('idSchool', '=', Auth::guard('school')->user()->idSchool)
                        ->orderBy('departmentName')->get()->pluck('departmentName', 'idDepartment')->toArray();
        $designation =  \App\Designation::where('idSchool', '=', Auth::guard('school')->user()->idSchool)
        ->orderBy('designationName')->get()->pluck('designationName', 'idDesignation')->toArray(); 
        $now = \Carbon\Carbon::now();
        $month_name = $now->format('M');
        $current_month = \App\Month::where('monthName', 'like', '%' . $month_name . '%')->first();
        if($request->idDepartment == "All"){
            $employees =  \App\Employee::with(['attandance' => function($query) use ($school, $tdate) {
                $query->whereDate('date', '=', $tdate);
                $query->where('Device_ID', '=', $school->Device_ID);
            }])->where('idSchool', '=', $school->idSchool)
            ->get();
        }else if ($request->has('employees') && count($request->employees) > 0) {
            $employees = \App\Employee::with(['attandance' => function($query) use ($school, $tdate) {
                            $query->whereDate('date', '=', $tdate);
                            $query->where('Device_ID', '=', $school->Device_ID);
                        }])
                    ->whereIn('idEmployee', $request->employees)
                    ->where('idSchool', '=', $school->idSchool)
                    ->get();
        } elseif ($request->has('designations') && count($request->designations) > 0) {

            $employees = \App\Employee::with(['attandance' => function($query) use ($school, $tdate) {
                            $query->whereDate('date', '=', $tdate);
                            $query->where('Device_ID', '=', $school->Device_ID);
                        }])
                    ->whereIn('idDesignation', $request->designations)
                    ->where('idSchool', '=', $school->idSchool)
                    ->get();
        } else if ($request->has('departments') && count($request->departments) > 0) {

            $employees = \App\Employee::with(['attandance' => function($query) use ($school, $tdate) {
                            $query->whereDate('date', '=', $tdate);
                            $query->where('Device_ID', '=', $school->Device_ID);
                        }])
                    ->whereIn('idDepartment', $request->departments)
                    ->where('idSchool', '=', $school->idSchool)
                    ->get();
        } else {
            $employees = [];
        }
        return view('schools.hrms.emp_attendance', compact('designation','departments', 'tdate', 'employees', 'current_month', 'school', 'months'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create(Request $request) {
        $school = \App\School::where('idSchool', '=', Auth::guard('school')->user()->idSchool)->first();
        $departments =  ['All' => 'All'] + \App\Department::where('idSchool', '=', Auth::guard('school')->user()->idSchool)
                        ->orderBy('departmentName')->get()->pluck('departmentName', 'idDepartment')->toArray();
        $designation =  \App\Designation::where('idSchool', '=', Auth::guard('school')->user()->idSchool)
        ->orderBy('designationName')->get()->pluck('designationName', 'idDesignation')->toArray();
        $employees = [];
        if($request->idDepartment == "All"){
            $employees = \App\Employee::where('idSchool', '=', $school->idSchool)
            ->get();
        }else if ($request->has('idDesignation') && $request->idDesignation != null) {
            $employees = \App\Employee::where('idDesignation', '=', $request->idDesignation)
                    //  ->where('isActive', '=', 'Y')
                    ->get();
        } else {
            $employees = \App\Employee::where('idDepartment', '=', $request->idDepartment)
                    // ->where('isActive', '=', 'Y')
                    ->get();
        }
        $month = \App\Month::where('idMonth', '=', $request->idMonth)->first();
        $now = \Carbon\Carbon::now();
        $month_name = $now->format('M');
        $current_month = \App\Month::where('monthName', 'like', '%' . $month_name . '%')->first();
        return view('schools.hrms.manual_attendance', compact('designation','departments', 'employees', 'month', 'current_month','school'));
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request) {
        if ($request->has('employees')) {
            $now = \Carbon\Carbon::now();
            $school = \App\School::where('idSchool', '=', Auth::guard('school')->user()->idSchool)->first();
            foreach ($request->employees as $key => $var) {
                foreach ($var as $k1 => $v1) {
                    $jdate = Carbon::parse($k1)->format('Y-m-d');
                    foreach ($v1 as $k2 => $v2) {
                        if ($k2 == 'inTime' && isset($k1) && isset($v2)) {
                            $intimemarked = \App\EmpAttendance::where('idSchool','=',Auth::guard('school')->user()->idSchool)
                                    ->where('Enrollment_Number', '=', $key)
                                    ->whereDate('date', '=', $jdate)
                                    ->where('idType', '=', 'M')
                                    ->where('status', '=', 'IN')
                                    ->first();
                            if ((isset($intimemarked) && $intimemarked != null) && $v2 != null) {
                                $timestamp = \Carbon\Carbon::createFromTimestamp(strtotime($k1 . $v2 . ":00"))->toDateTimeString();
                                $intimemarked->TimeStamp = $timestamp;
                                $intimemarked->update();
                            } else if ($v2 != null) {
                                $attendance = new \App\EmpAttendance();
                                $attendance->fill($request->all());
                                $attendance->Enrollment_Number = $key;
                                $timestamp = \Carbon\Carbon::createFromTimestamp(strtotime($k1 . $v2 . ":00"))->toDateTimeString();
                                $attendance->TimeStamp = $timestamp;
                                $attendance->idSchool = Auth::guard('school')->user()->idSchool;
                                $attendance->date = $k1;
                                $attendance->status = 'IN';
                                $attendance->save();
                            }

                            $employee = \App\Employee::where('enrollmentNo',$key)->first();
                            if($employee != null){
                                $phone_number = $employee->mobile;
                                if($employee->firstName != null){
                                    if($school->idSchool == 73 || $school->idSchool == 79){
                                        $message = 'Dear Admin, ' . trim($employee->firstName) . ' has reached at ' . $now->format('d-M-Y H:i:s').' Regards '.$school->sms_regard_text.'.';
                                    }else
                                    $message = 'Dear Admin, ' . trim($employee->firstName) . ' has reached at ' . $now->format('d-M-Y H:i:s') . ' Regards, Regards JIJAU ENTP.';
                                    $template = \App\SchoolSmsTemplate::where('idSchool', '=', $school->idSchool)->where('template_name', '=', 'emp_attendance')->first();
                                    if (!empty($template)) {
                                        $tempid = $template->template_id;
                                        if($template->status == "Y")
                                        \App\Http\SendSmsApi::getUserNumber($phone_number, $message, $school, $tempid);
                                    }
                                }
                            }
                            

                        } elseif ($k2 == 'outTime' && isset($k1) && isset($v2)) {
                            $outtimemarked = \App\EmpAttendance::where('idSchool','=',Auth::guard('school')->user()->idSchool)
                                    ->where('Enrollment_Number', '=', $key)
                                    ->whereDate('date', '=', $jdate)
                                    ->where('idType', '=', 'M')
                                    ->where('status', '=', 'OUT')
                                    ->first();
                            if ((isset($outtimemarked) && $outtimemarked != null) && $v2 != null) {
                                $timestamp = \Carbon\Carbon::createFromTimestamp(strtotime($k1 . $v2 . ":00"))->toDateTimeString();
                                $outtimemarked->TimeStamp = $timestamp;
                                $outtimemarked->update();
                            } else if ($v2 != null) {
                                $attendance = new \App\EmpAttendance();
                                $attendance->fill($request->all());
                                $attendance->Enrollment_Number = $key;
                                $timestamp = \Carbon\Carbon::createFromTimestamp(strtotime($k1 . $v2 . ":00"))->toDateTimeString();
                                $attendance->TimeStamp = $timestamp;
                                $attendance->idSchool = Auth::guard('school')->user()->idSchool;
                                $attendance->date = $k1;
                                $attendance->status = 'OUT';
                                $attendance->save();
                            }

                            $employee = \App\Employee::where('enrollmentNo',$key)->first();
                            if($employee != null){
                                $phone_number = $employee->mobile;
                                if($employee->firstName != null){
                                    if($school->idSchool == 73 || $school->idSchool == 79){
                                        $message = 'Dear Admin, ' . trim($employee->firstName) . ' left at ' . $now->format('d-M-Y H:i:s').' Regards '.$school->sms_regard_text.'.';
                                    }else$message = 'Dear Admin, ' . trim($employee->firstName) . ' left at ' . $now->format('d-M-Y H:i:s') . ' Regards, Regards JIJAU ENTP.';
                                    $template = \App\SchoolSmsTemplate::where('idSchool', '=', $school->idSchool)->where('template_name', '=', 'emp_attendance_left')->first();
                                    if (!empty($template)) {
                                        $tempid = $template->template_id;
                                        if($template->status == "Y")
                                        \App\Http\SendSmsApi::getUserNumber($phone_number, $message, $school, $tempid);
                                    }
                                }
                            }
                        }
                    }
                }
            }


            flash('Attendance saved successfully.');
            return redirect()->back();
        } else {
            flash('No Employee has been selected for attendance');
            return redirect()->back();
        }
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id) {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id) {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id) {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id) {
        //
    }

    public function monthlyAttendance(Request $request) {
        $todaydate = \Carbon\Carbon::parse(today_date())->format('Y-m-d');
        $months = \App\Month::get()->pluck('monthName', 'idMonth')->toArray();
        $school = \App\School::where('idSchool', '=', Auth::guard('school')->user()->idSchool)->first();
        $departments = ['All' => 'All'] + \App\Department::where('idSchool', '=', Auth::guard('school')->user()->idSchool)
                        ->orderBy('departmentName')->get()->pluck('departmentName', 'idDepartment')->toArray();
        $designation =  \App\Designation::where('idSchool', '=', Auth::guard('school')->user()->idSchool)
        ->orderBy('designationName')->get()->pluck('designationName', 'idDesignation')->toArray();  
        $now = \Carbon\Carbon::now();
        $month_name = $now->format('M');
        $current_month = \App\Month::where('monthName', 'like', '%' . $month_name . '%')->first();

        //get selected month
        if ($request->has('idMonth')) {
            $month = \App\Month::where('idMonth', '=', $request->idMonth)->first();

            $noOfdays = $month->noOfDays;
            $m = $month->idMonth;
//            $fy = \App\FinancialYear::where('idFinancialYear','=', Session::get('idFinancialYear'))->first();
//            $startDate = $fy->startDate;
            $y = $request->year;
            $days = [];


            if($request->idDepartment == "All"){
                $employees = \App\Employee::where('idSchool', '=', $school->idSchool)
                ->get();
            }else if ($request->has('employees') && count($request->employees) > 0) {
                $employees = \App\Employee::whereIn('idEmployee', $request->employees)
                        ->where('idSchool', '=', $school->idSchool)
                        ->get();
            } elseif ($request->has('designations') && count($request->designations) > 0) {
                $employees = \App\Employee::whereIn('idDesignation', $request->designations)
                        ->where('idSchool', '=', $school->idSchool)
                        ->get();
            } else if ($request->has('departments') && count($request->departments) > 0) {
                $employees = \App\Employee::whereIn('idDepartment', $request->departments)
                        ->where('idSchool', '=', $school->idSchool)
                        ->get();
            } else {
                $employees = [];
            }

            $ln = 1;
            if($school->idSchool == 172){
                $ln = 26;
                $et = '25-' . $m . '-' . $y;
                $dt = $ln . '-' . $m . '-' . $y;
                $tdate = \Carbon\Carbon::parse($dt);
                $edate = \Carbon\Carbon::parse($et);
                $tdate->subMonth();
                $diff = $edate->diff($tdate)->days;
                for ($i = 0; $i <= $diff; $i++) {
                    $jdate = $tdate->format('Y-m-d');
                    $hd = '';
                    if($school->idCountry == 1){
                        if ($tdate->dayOfWeek == '0' ) {
                            $hd = 'SUNDAY';
                        }else if($tdate->dayOfWeek == '6'){
                            $hd = 'SATURDAY';
                        }
                    }else{
                        if ($tdate->dayOfWeek == '5') {
                            $hd = 'FRIDAY';
                        }
                    }
                    
                    $days[] = array($tdate->format('d-m-Y'), $hd);
                    $tdate->addDays(1);
                }
            }else{
                for ($i = 1; $i <= $noOfdays; $i++) {
                    $dt = $ln . '-' . $m . '-' . $y;
    
                    $tdate = \Carbon\Carbon::parse($dt);
                    $jdate = $tdate->format('Y-m-d');
                    $hd = '';
                    /*$holiday = \App\HrmsHoliday::where('idSchool', '=', Auth::guard('school')->user()->idSchool)
                    ->whereDate('fromDate', '<=', $jdate)
                    ->whereDate('toDate', '>=', $jdate)
                    ->first();
            
                    if ($holiday != null) {
                        $hd = $holiday->holidayName;
                    } else */
                    if($school->idCountry == 1){
                        if ($tdate->dayOfWeek == '0' && $school->idSchool != 144 ) {
                            $hd = 'SUNDAY';
                        }
                    }else{
                        if ($tdate->dayOfWeek == '5') {
                            $hd = 'FRIDAY';
                        }
                    }
                    
                    $days[] = array($dt, $hd);
                    $ln++;
                }
            }
            
        }
        if ($request->has('idMonth'))
        return view('schools.hrms.empmonthly_attendance', compact('designation','todaydate', 'days', 'tdate', 'departments', 'month', 'employees', 'current_month', 'school', 'months'));
        else return view('schools.hrms.empmonthly_attendance', compact('designation','departments', 'months','school','todaydate','current_month',));
    }

    public function fetchAttendance($jdate,$idEmployee){
        $school = \App\School::where('idSchool', '=', Auth::guard('school')->user()->idSchool)->first();
        $employees = \App\Employee::where('idEmployee', $idEmployee)
            ->where('idSchool', '=',Auth::guard('school')->user()->idSchool)
            ->first();
        $response = array();    
        if($employees != null){
            $aintime = \App\EmpAttendance::where('Enrollment_Number', '=', $employees->enrollmentNo)
                    ->where('Device_ID', '=',$school->Device_ID)
                    ->whereDate('date', '=', Carbon::parse($jdate)->format("Y-m-d"))
                    ->where('status', '=', 'IN')
                    ->where('idType', '=', 'A')
                    ->first();
            $aouttime = \App\EmpAttendance::where('Enrollment_Number', '=', $employees->enrollmentNo)
                    ->where('Device_ID', '=',$school->Device_ID)
                    ->whereDate('date', '=', Carbon::parse($jdate)->format("Y-m-d"))
                    ->where('status', '=', 'OUT')
                    ->where('idType', '=', 'A')
                    ->first();
            if($aintime != null){
                $response["in_time"] = $aintime->TimeStamp->format('h:i');
            } 
            if($aouttime != null){
                $response["out_time"] = $aouttime->TimeStamp->format('h:i');
            }        
        } 
        
        return json_encode($response);
    }


    public function reportAttendance(Request $request) {
        $todaydate = \Carbon\Carbon::parse(today_date())->format('Y-m-d');
        $months = \App\Month::get()->pluck('monthName', 'idMonth')->toArray();
        $school = \App\School::where('idSchool', '=', Auth::guard('school')->user()->idSchool)->first();
        $departments =  ['All' => 'All'] + \App\Department::where('idSchool', '=', Auth::guard('school')->user()->idSchool)
                        ->orderBy('departmentName')->get()->pluck('departmentName', 'idDepartment')->toArray();
        $designation =  \App\Designation::where('idSchool', '=', Auth::guard('school')->user()->idSchool)
        ->orderBy('designationName')->get()->pluck('designationName', 'idDesignation')->toArray();         
        $now = \Carbon\Carbon::now();
        $month_name = $now->format('M');
        $current_month = \App\Month::where('monthName', 'like', '%' . $month_name . '%')->first();
        
        //get selected month
        if ($request->has('idMonth')) {
            $month = \App\Month::where('idMonth', '=', $request->idMonth)->first();

            $noOfdays = $month->noOfDays;
            $m = $month->idMonth;
//            $fy = \App\FinancialYear::where('idFinancialYear','=', Session::get('idFinancialYear'))->first();
//            $startDate = $fy->startDate;
            $y = $request->year;
            $days = [];


            if($request->idDepartment == "All"){
                $employees = \App\Employee::where('idSchool', '=', $school->idSchool)
                ->get();
            }else if ($request->has('employees') && count($request->employees) > 0) {
                $employees = \App\Employee::whereIn('idEmployee', $request->employees)
                        ->where('idSchool', '=', $school->idSchool)
                        ->get();
            } elseif ($request->has('designations') && count($request->designations) > 0) {
                $employees = \App\Employee::whereIn('idDesignation', $request->designations)
                        ->where('idSchool', '=', $school->idSchool)
                        ->get();
            } else if ($request->has('departments') && count($request->departments) > 0) {
                $employees = \App\Employee::whereIn('idDepartment', $request->departments)
                        ->where('idSchool', '=', $school->idSchool)
                        ->get();
            } else {
                $employees = [];
            }

            $holidayType = [];
            if($school->idSchool == 172){
                $ln = 26;
                $et = '25-' . $m . '-' . $y;
                $dt = $ln . '-' . $m . '-' . $y;
                $tdate = \Carbon\Carbon::parse($dt);
                $edate = \Carbon\Carbon::parse($et);
                $tdate->subMonth();
                $diff = $edate->diff($tdate)->days;
                for ($i = 0; $i <= $diff; $i++) {
                    $jdate = $tdate->format('Y-m-d');
                    $hd = '';
                    if($school->idCountry == 1){
                        if ($tdate->dayOfWeek == '0' ) {
                            $hd = 'SUNDAY';
                        }else if($tdate->dayOfWeek == '6'){
                            $hd = 'SATURDAY';
                        }
                    }else{
                        if ($tdate->dayOfWeek == '5') {
                            $hd = 'FRIDAY';
                        }
                    }
                    
                    $days[] = array($tdate->format('d-m-Y'), $hd);
                    $tdate->addDays(1);
                }
            }else{
                for ($i = 1; $i <= $noOfdays; $i++) {
                    $dt = $i . '-' . $m . '-' . $y;
    
                    $tdate = \Carbon\Carbon::parse($dt);
                    $jdate = $tdate->format('Y-m-d');
                    $hd = '';
    
                    /*$holiday = \App\HrmsHoliday::where('idSchool', '=', Auth::guard('school')->user()->idSchool)
                            ->where()
                            ->whereDate('fromDate', '<=', $jdate)
                            ->whereDate('toDate', '>=', $jdate)
                            ->first();
    
                    $holidayType[$dt] = "NA";
    
                    if ($holiday != null) {
                        $hd = $holiday->holidayName;
                        $holidayType[$dt] = $holiday->type;
                    } else */
                    
                    if($school->idCountry == 1){
                        if ($tdate->dayOfWeek == '0' && $school->idSchool != 144 ) {
                            $hd = 'SUNDAY';
                        }
                    }else{
                        if ($tdate->dayOfWeek == '5') {
                            $hd = 'FRIDAY';
                        }
                    }
                    $days[] = array($dt, $hd);
                }
            }
        }
        $query = "";
        foreach($request->query() as $key => $value){
            if(is_array($value)){
                $url = "";
                foreach($value as $index => $data){
                    if($index < (count($value) - 1))
                    $url = $url.$data.',';
                    else $url = $url.$data;
                }
                $query = $query.$key.'[]='.$url.'&';
            }else
            $query = $query.$key.'='.$value.'&';
        }
        if ($request->has('idMonth')) 
        return view('schools.hrms.report_attendance', compact('designation','query','todaydate', 'days', 'tdate', 'departments', 'month', 'employees', 'current_month', 'school', 'months','holidayType'));
        else
        return view('schools.hrms.report_attendance', compact('designation','query','todaydate', 'departments', 'current_month', 'school', 'months'));
    }


    public function manageAttendance(){
        $school = \App\School::where('idSchool', '=', Auth::guard('school')->user()->idSchool)->first();
        $employees = \App\Employee::select(DB::raw('CONCAT(firstName," ",IFNULL(middleName,"")," ",IFNULL(lastName,""),"(",enrollmentNo,")")'),'idEmployee')->where('idSchool', '=', $school->idSchool)
                        ->get()->pluck('CONCAT(firstName," ",IFNULL(middleName,"")," ",IFNULL(lastName,""),"(",enrollmentNo,")")','idEmployee')->toArray();
        return view('schools.hrms.edit_attendance',compact('employees'));
    }

    public function addAutoAttendance(Request $request){
        $rules = [
            'idEmployee' => 'required',
            'attendance_date' => 'required',
        ];
        $messages = [
            'idEmployee.required' => 'Employee details not available',
            'attendance_date.required' => 'Date must be filled',
        ];
        $this->validate($request, $rules, $messages);
        try{
            $employee = \App\Employee::where('idEmployee',$request->idEmployee)->where('idSchool',Auth::guard('school')->user()->idSchool)->first();
                if($employee == null){
                    return response()->json(['message' => "Employee details not found",'success' => "FAILED"], 422, ['app-status' => 'success']);
                }
            $school = \App\School::where('idSchool', '=', Auth::guard('school')->user()->idSchool)->first();

            if($request->status == "P"){

                if($request->in_time == null || $request->out_time == null){
                    return response()->json(['message' => "IN time and OUT time are manditory",'success' => "FAILED"], 422, ['app-status' => 'success']);
                }

                if($request->in_time == $request->out_time){
                    return response()->json(['message' => "IN time and OUT time cannot be same",'success' => "FAILED"], 422, ['app-status' => 'success']);
                }
    
                $validateIn =  \Carbon\Carbon::parse($request->in_time)->format('H:i'); 
                if($validateIn == "00:00"){
                    return response()->json(['message' => "Invalid format of time (HH:mm)",'success' => "FAILED"], 422, ['app-status' => 'success']);
                }
    
                $validateOut =  \Carbon\Carbon::parse($request->out_time)->format('H:i'); 
                if($validateOut == "00:00"){
                    return response()->json(['message' => "Invalid format of time (HH:mm)",'success' => "FAILED"], 422, ['app-status' => 'success']);
                }
    
                $inTime =  \Carbon\Carbon::parse($request->attendance_date.' '.$request->in_time.':00 '.$request->in_am);
                $outTime =  \Carbon\Carbon::parse($request->attendance_date.' '.$request->out_time.':00 '.$request->out_am);
    
                if($inTime->gt($outTime)){
                    return response()->json(['message' => "IN time cannot be greate than OUT time",'success' => "FAILED"], 422, ['app-status' => 'success']);
                }

                \App\EmpAttendance::where('Enrollment_Number',$employee->enrollmentNo)
                    ->where('idSchool',$school->idSchool)
                    ->where('date',Carbon::parse($request->attendance_date)->format('d-m-Y'))
                    ->delete();
    
                $empAttendance = new \App\EmpAttendance();
                $empAttendance->Enrollment_Number = $employee->enrollmentNo;
                $empAttendance->idSchool = $school->idSchool;
                $empAttendance->idMonth = Carbon::createFromFormat('Y-m-d', Carbon::parse($request->attendance_date)->format('Y-m-d'))->month;
                $empAttendance->TimeStamp = \Carbon\Carbon::parse($request->attendance_date.' '.$request->in_time.':00 '.$request->in_am)->format('Y-m-d H:i:s'); 
                $empAttendance->status = "IN";
                $empAttendance->idType = "A";
                $empAttendance->Device_ID = $school->Device_ID;
                $empAttendance->date =  Carbon::parse($request->attendance_date)->format('d-m-Y');
                if(isset($request->remarks))
                $empAttendance->remarks = $request->remarks;
                $empAttendance->save();
    
                DB::table('track_attendance')->insert(['idEmployee' =>  $request->idEmployee, 'idSchool' => Auth::guard('school')->user()->idSchool, 'attendance_date' => Carbon::parse($request->attendance_date)->format('Y-m-d'),
                'attendance_status' => $empAttendance->status, 'created_by' => Auth::guard('school')->user()->idSchoolUser,'created_at' => Carbon::now()->format('Y-m-d H:i:s'),'updated_at' => Carbon::now()->format('Y-m-d H:i:s')]);
    
                $outAttendance = new \App\EmpAttendance();
                $outAttendance->Enrollment_Number = $employee->enrollmentNo;
                $outAttendance->idSchool = $school->idSchool;
                $outAttendance->idMonth = Carbon::createFromFormat('Y-m-d', Carbon::parse($request->attendance_date)->format('Y-m-d'))->month;
                $outAttendance->TimeStamp = \Carbon\Carbon::parse($request->attendance_date.' '.$request->out_time.':00 '.$request->out_am)->format('Y-m-d H:i:s'); 
                $outAttendance->status = "OUT";
                $outAttendance->idType = "A";
                $outAttendance->Device_ID = $school->Device_ID;
                $outAttendance->date =  Carbon::parse($request->attendance_date)->format('d-m-Y');
                if(isset($request->remarks))
                $outAttendance->remarks = $request->remarks;
                $outAttendance->save();
    
                DB::table('track_attendance')->insert(['idEmployee' =>  $request->idEmployee, 'idSchool' => Auth::guard('school')->user()->idSchool, 'attendance_date' => Carbon::parse($request->attendance_date)->format('Y-m-d'),
                'attendance_status' => $outAttendance->status, 'created_by' => Auth::guard('school')->user()->idSchoolUser,'created_at' => Carbon::now()->format('Y-m-d H:i:s'),'updated_at' => Carbon::now()->format('Y-m-d H:i:s')]);
            }else if($request->status == "OD"){
                \App\EmpAttendance::where('Enrollment_Number',$employee->enrollmentNo)
                ->where('idSchool',$school->idSchool)
                ->where('idMonth',Carbon::createFromFormat('Y-m-d', Carbon::parse($request->attendance_date)->format('Y-m-d'))->month)
                ->where('Device_ID',$school->Device_ID)
                ->where('date',Carbon::parse($request->attendance_date)->format('d-m-Y'))
                ->delete();

                $attendance = new \App\EmpAttendance();
                $attendance->Enrollment_Number = $employee->enrollmentNo;
                $attendance->idSchool = $school->idSchool;
                $attendance->idMonth = Carbon::createFromFormat('Y-m-d', Carbon::parse($request->attendance_date)->format('Y-m-d'))->month;
                $attendance->TimeStamp = \Carbon\Carbon::parse($request->attendance_date.' 01:00:00')->format('Y-m-d H:i:s'); 
                $attendance->status = "P";
                $attendance->idType = "M";
                $attendance->Device_ID = $school->Device_ID;
                $attendance->date =  Carbon::parse($request->attendance_date)->format('d-m-Y');
                if(isset($request->remarks))
                $attendance->remarks = $request->remarks;
                $attendance->save();


                DB::table('track_attendance')->insert(['idEmployee' =>  $request->idEmployee, 'idSchool' => Auth::guard('school')->user()->idSchool, 'attendance_date' => Carbon::parse($request->attendance_date)->format('Y-m-d'),
                'attendance_status' => $request->status, 'created_by' => Auth::guard('school')->user()->idSchoolUser,'created_at' => Carbon::now()->format('Y-m-d H:i:s'),'updated_at' => Carbon::now()->format('Y-m-d H:i:s')]);
            }else{
                \App\EmpAttendance::where('Enrollment_Number',$employee->enrollmentNo)
                ->where('idSchool',$school->idSchool)
                ->where('idMonth',Carbon::createFromFormat('Y-m-d', Carbon::parse($request->attendance_date)->format('Y-m-d'))->month)
                ->where('Device_ID',$school->Device_ID)
                ->where('date',Carbon::parse($request->attendance_date)->format('d-m-Y'))
                ->delete();


                $attendance = new \App\EmpAttendance();
                $attendance->Enrollment_Number = $employee->enrollmentNo;
                $attendance->idSchool = $school->idSchool;
                $attendance->idMonth = Carbon::createFromFormat('Y-m-d', Carbon::parse($request->attendance_date)->format('Y-m-d'))->month;
                $attendance->TimeStamp = \Carbon\Carbon::parse($request->attendance_date.' 01:00:00')->format('Y-m-d H:i:s'); 
                $attendance->status = $request->status;
                $attendance->idType = "M";
                $attendance->Device_ID = $school->Device_ID;
                $attendance->date =  Carbon::parse($request->attendance_date)->format('d-m-Y');
                if(isset($request->remarks))
                $attendance->remarks = $request->remarks;
                $attendance->save();

                DB::table('track_attendance')->insert(['idEmployee' =>  $request->idEmployee, 'idSchool' => Auth::guard('school')->user()->idSchool, 'attendance_date' => Carbon::parse($request->attendance_date)->format('Y-m-d'),
                'attendance_status' => $request->status, 'created_by' => Auth::guard('school')->user()->idSchoolUser,'created_at' => Carbon::now()->format('Y-m-d H:i:s'),'updated_at' => Carbon::now()->format('Y-m-d H:i:s')]);
            }
            return response()->json(['success' => "SUCCESS"], 200, ['app-status' => 'success']);
        }catch(\Exception $e){
            return response()->json(['message' => "Attendance not updated","error" => $e->getMessage(),'success' => "FAILED"], 422, ['app-status' => 'success']);
        }
    }

    public function attendanceSheet(Request $request){
        ini_set('max_execution_time', '300');
        ini_set("pcre.backtrack_limit", "5000000");
        $todaydate = \Carbon\Carbon::parse(today_date())->format('Y-m-d');
        $months = \App\Month::get()->pluck('monthName', 'idMonth')->toArray();
        $school = \App\School::where('idSchool', '=', Auth::guard('school')->user()->idSchool)->first();
        $departments = ['' => '--Select--'] + \App\Department::where('idSchool', '=', Auth::guard('school')->user()->idSchool)
                        ->orderBy('departmentName')->get()->pluck('departmentName', 'idDepartment')->toArray();
        $now = \Carbon\Carbon::now();
        $month_name = $now->format('M');
        $current_month = \App\Month::where('monthName', 'like', '%' . $month_name . '%')->first();
        $fy = Session::get('idFinancialYear');
        //get selected month
        if ($request->has('idMonth')) {
            $month = \App\Month::where('idMonth', '=', $request->idMonth)->first();
            $noOfdays = $month->noOfDays;
            $m = $month->idMonth;
            $y = $request->year;
            $days = [];
            $emp = [];
            $designations = [];
            if(is_array($request->employees)){
                if(count($request->employees) > 0)
                $emp = explode(",",$request->employees[0]);
            }
            
            if(count($request->designations) > 0)
            $designations = explode(",",$request->designations[0]);

            if ($request->has('employees') && count($emp) > 0) {
                $employees = \App\Employee::whereIn('idEmployee', $emp)
                        ->where('idSchool', '=', $school->idSchool)
                        ->get();
            } elseif ($request->has('designations') && count($designations) > 0) {
                $employees = \App\Employee::whereIn('idDesignation', $designations)
                        ->where('idSchool', '=', $school->idSchool)
                        ->get();
            } else if ($request->has('departments') && count($request->departments) > 0) {
                $employees = \App\Employee::whereIn('idDepartment', $request->departments)
                        ->where('idSchool', '=', $school->idSchool)
                        ->get();
            } else {
                $employees = [];
            }

            if($school->idSchool == 172){
                $ln = 26;
                $et = '25-' . $m . '-' . $y;
                $dt = $ln . '-' . $m . '-' . $y;
                $tdate = \Carbon\Carbon::parse($dt);
                $edate = \Carbon\Carbon::parse($et);
                $tdate->subMonth();
                $diff = $edate->diff($tdate)->days;
                for ($i = 0; $i <= $diff; $i++) {
                    $jdate = $tdate->format('Y-m-d');
                    $hd = '';
                    if($school->idCountry == 1){
                        if ($tdate->dayOfWeek == '0' ) {
                            $hd = 'SUNDAY';
                        }else if($tdate->dayOfWeek == '6'){
                            $hd = 'SATURDAY';
                        }
                    }else{
                        if ($tdate->dayOfWeek == '5') {
                            $hd = 'FRIDAY';
                        }
                    }
                    
                    $days[] = array($tdate->format('d-m-Y'), $hd);
                    $tdate->addDays(1);
                }
            }else{
                for ($i = 1; $i <= $noOfdays; $i++) {
                    $dt = $i . '-' . $m . '-' . $y;
                    $tdate = \Carbon\Carbon::parse($dt);
                    $hd = '';                
                    if($school->idCountry == 1){
                        if ($tdate->dayOfWeek == '0' && $school->idSchool != 144 ) {
                            $hd = 'SUNDAY';
                        }
                    }else{
                        if ($tdate->dayOfWeek == '5') {
                            $hd = 'FRIDAY';
                        }
                    }
                    $days[] = array($dt, $hd);
                }
            }
        }else{
            return redirect('/school/empattendance-report');
        }
        if($school->idSchool == 172){
            $pdf = PDF::loadView('schools.vishwajyot_attendance_print', ['margin_top' => 20, 'days' => $days ,'fy' => $fy
            , 'noOfdays' => $noOfdays , 'm' => $m  , 'y' => $y  , 'employees' => $employees, 'month' => $month , 'school' => $school, 'todaydate' => $todaydate]);
        }else
        $pdf = PDF::loadView('schools.royal_attendance_print', ['margin_top' => 20, 'days' => $days ,'fy' => $fy
        , 'noOfdays' => $noOfdays , 'm' => $m  , 'y' => $y  , 'employees' => $employees, 'month' => $month , 'school' => $school, 'todaydate' => $todaydate]);
        return $pdf->stream('attendance_sheet.pdf');
    }

}

Copyright © 2021 - 2025 IMMREX7