HEX
Server: Apache/2.4.46 (Ubuntu)
System: Linux localhost 5.11.0-49-generic #55-Ubuntu SMP Wed Jan 12 17:36:34 UTC 2022 x86_64
User: root (0)
PHP: 7.4.16
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/html/dev-hrms/app/Http/Controllers/LeaveManagementController.php
<?php
namespace App\Http\Controllers;
use App\Models\LeaveManagement;
use App\Models\EmployeeProfile;
use App\Models\LeaveTypes;
use App\Models\Leave;
use App\Models\Admin;
// use App\Models\Approval;
use App\Models\LeaveApproval;
use App\Models\Profile;
use App\Models\EmployeeGeneralDetail;
use App\Models\EmployeePayMatrix;
use App\Models\EmployeeLeave;
use App\Models\EmployeeEarnedCommutedLeave;
use App\Models\LeaveTravelConcession;
use DB;

use App\Library\UserLib;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\File;
use Illuminate\Http\Request;

class LeaveManagementController extends Controller
{
    protected $userLib;
    protected $UserSessionId;
    public function __construct(UserLib $userLib)
    {
        $this->userLib = $userLib;
    }

    ### New Application
    public function createLeave(Request $request)
    {
        $LeaveId = $this->userLib->useridGenrator();
        $CreatedDate = date('Y-m-d H:i:s',time());
        $EmployeeId = $request->input('EmployeeId');
        $EmployeeCode = $request->input('EmployeeCode');
        $employeeDepartment = $request->input('employeeDepartment');
        $LeaveType = $request->input('LeaveType');
        $leaveStartDate = $request->input('leaveStartDate');
        $leaveEndDate = $request->input('leaveEndDate');
        $Remarks = $request->input('Remarks');
        $UserName = $request->input('UserName');
        $Authority = $request->input('Authority');
        $employeeDesignation = $request->input('employeeDesignation');
        $EmployeeName = $request->input('EmployeeName');        
        $LeaveDay = $request->input('LeaveDay');
        $NoOfDays = $request->input('NoOfDays');
        $PromotionTransferId = $request->input('PromotionTransferId');
        $PayMatrixId = $request->input('PayMatrixId');
        $EmployeesAddressId = $request->input('EmployeesAddressId');
        $leaveStartDate = str_replace('/', '-', $leaveStartDate);
        $leaveEndDate = str_replace('/', '-', $leaveEndDate);

        // Hometown LTC
        $HometownLTC = $request->input('HometownLTC');
        $LTCOrderNo = $request->input('LTCOrderNo');
        $HomeTownBlockYear = $request->input('HomeTownBlockYear');
        $LTCDescription = $request->input('LTCDescription');

        if ($HometownLTC == 'Yes') {
            $OrderDate = '';
            if ($request->input('OrderDate')) {
                $LTCOrderDate = str_replace('/', '-', $request->input('OrderDate'));
            }
            $OrderDate = date('Y-m-d', strtotime($LTCOrderDate));

            $LTCData = array();
            $LTCData['HometownTravelId'] = $this->userLib->useridGenrator();
            $LTCData['TravelOrderNumber'] = $LTCOrderNo;
            $LTCData['HomeTownBlockYear'] = $HomeTownBlockYear;
            $LTCData['TravelDescription'] = $LTCDescription;
            $LTCData['TravelOrderDate'] = $OrderDate;
            $LTCData['EmployeeId'] = $EmployeeId;
            $LTCData['EmployeeCode'] = $EmployeeCode;
            $LTCData['LeaveStartDate'] = date('Y-m-d', strtotime($leaveStartDate));
            $LTCData['LeaveEndDate'] = date('Y-m-d', strtotime($leaveEndDate));
            $LTCData['NoOfDays'] = $NoOfDays;
            $LTCData['TravelOrderFilePath'] = null;
            $LTCData['Created_by'] = session('UserId');
            $LTCData['Created_at'] = date('Y-m-d H:i:s', time());
            $LTCData['Updated_by'] = session('UserId');
            $LTCData['Updated_at'] = date('Y-m-d H:i:s', time());
            $LTCData['IsDeleted'] = 0;
            $LTCData['Status'] = 1;
            $LeaveTravelConcession = LeaveTravelConcession::insert($LTCData);

        }

        $data = array();
        $data['LeaveId'] = $LeaveId;
        $data['ApplicationNo'] = "LEAVE-" . time() . '-' . rand();
        $data['EmployeeId'] = $EmployeeId;
        $data['EmployeeCode'] = $EmployeeCode;      
        $data['EmployeeName'] = $EmployeeName;    
        $data['LeaveTypeId'] = $LeaveType;
        $data['StartDate'] = date('Y-m-d', strtotime($leaveStartDate));
        $data['EndDate'] = date('Y-m-d', strtotime($leaveEndDate));
        $data['Description'] = $Remarks;
        $data['LeaveName'] = $LeaveDay;
        if($LeaveType == 'XCRCWT2323SF6242GS611')
        {
          $data['AvailedEOL'] = $NoOfDays;  
        }
        
        $data['TotalLeave'] = $NoOfDays;      
        $data['Status'] = '1';
        $data['IsDeleted'] = '0';
        $data['LeaveStatus'] = '0';
        $data['ApprovalStatus'] = '0';
        $data['Created_at'] = $CreatedDate;
        $data['Created_by'] = session('UserId');
        // $data['Updated_at'] = $CreatedDate;
        $data['Updated_by'] = session('UserId');
        $data['UserName'] = $UserName;
        $data['AssignTo'] = $Authority;
        $data['PromotionTransferId'] = $PromotionTransferId;
        $data['PayMatrixId'] = $PayMatrixId;
        $data['EmployeesAddressId'] = $EmployeesAddressId;
        
        $LastId = Leave::insertGetId($data);
       
        $GetLeaveDetail = Leave::select('*')
            ->where('id', $LastId)
            ->get();
        if($GetLeaveDetail->count() > 0)
        {
            foreach($GetLeaveDetail as $LValue)
            {
                $Authority = $LValue->AssignTo;
            }
        }

        $AuthorityName = explode(",", $Authority);
        for ($i = 0; $i < count($AuthorityName); $i++) {

            $SelectedUserId = $AuthorityName[$i];
            
            $data = array();
            $data['ApprovalId'] = $this->userLib->useridGenrator();
            $data['LeaveId'] = $LeaveId;
            $data['ApprovalBy'] = $SelectedUserId;            
            $data['ApprovalStatus'] = '0';
            $data['Created_at'] = date('Y-m-d H:i:s',time());
            $data['Created_by'] = session('UserId');
    
            $InsertApprovalData = LeaveApproval::insert($data);    
        }
        if ($InsertApprovalData) {
           return response()->json('success');
        } else {
           return response()->json('failed');
        }
    }

    public function editApplication(Request $request, $LeaveId='')
    {   
        $AllEmployee = EmployeeProfile::select('tbl_employees.*', 'tbl_department.DepartmentName as DepartmentName', 'tbl_designation.DesignationName as DesignationName')
        ->leftJoin('tbl_department', 'tbl_employees.DepartmentId', '=', 'tbl_department.DepartmentId')
        ->leftJoin('tbl_designation', 'tbl_employees.DesignationId', '=', 'tbl_designation.DesignationId')
        ->where('tbl_employees.IsDeleted', '=', '0')
        ->orderBy('tbl_employees.id', 'desc')
        ->get();

        $LeaveTypes = LeaveTypes::select('*')
        ->where('IsDeleted', '=', '0')
        ->where('Status', '=', '1')
        ->orderBy('LeaveTypeName', 'asc')
        ->get();

        $LeaveDetails = Leave::select('tbl_leave.*','tbl_leave_type.LeaveTypeName')
        ->leftJoin('tbl_leave_type', 'tbl_leave.LeaveTypeId', '=', 'tbl_leave_type.LeaveTypeId')
        ->where('tbl_leave.IsDeleted', '=', '0')
        ->where('tbl_leave.Status', '=', '1')
        ->where('tbl_leave.LeaveId', $LeaveId)
        ->orderBy('tbl_leave.Created_at', 'desc')
        ->get();
        if($LeaveDetails->count() > 0)
        {
            $LeaveDetail = $LeaveDetails->first();
        }

        $ApprovalDetails = LeaveApproval::select('tbl_leave_approval.*','tbl_admin.ProfileId')
        ->leftJoin('tbl_admin', 'tbl_admin.UserId', '=', 'tbl_leave_approval.ApprovalBy')
        ->where('tbl_leave_approval.ApprovalStatus', '=', '0')
        ->where('tbl_leave_approval.LeaveId', $LeaveId)
        ->get();
        if($ApprovalDetails->count() > 0)
        {
            $ApprovalDetail = $ApprovalDetails->first();
        }
 
        return view('admin.LeaveManagement.edit-application', ['EmployeesData' => $AllEmployee, 'LeaveTypes' => $LeaveTypes, 'LeaveDetails'=>$LeaveDetail,'ApprovalDetail'=>$ApprovalDetail]);
    }

    #### Reform Application
    public function reformApplication(Request $request, $LeaveId='')
    {   
        $AllEmployee = EmployeeProfile::select('tbl_employees.*', 'tbl_department.DepartmentName as DepartmentName', 'tbl_designation.DesignationName as DesignationName')
        ->leftJoin('tbl_department', 'tbl_employees.DepartmentId', '=', 'tbl_department.DepartmentId')
        ->leftJoin('tbl_designation', 'tbl_employees.DesignationId', '=', 'tbl_designation.DesignationId')
        ->where('tbl_employees.IsDeleted', '=', '0')
        ->orderBy('tbl_employees.id', 'desc')
        ->get();

        $LeaveTypes = LeaveTypes::select('*')
        ->where('IsDeleted', '=', '0')
        ->where('Status', '=', '1')
        ->orderBy('LeaveTypeName', 'asc')
        ->get();

        $LeaveDetails = Leave::select('tbl_leave.*','tbl_leave_type.LeaveTypeName')
        ->leftJoin('tbl_leave_type', 'tbl_leave.LeaveTypeId', '=', 'tbl_leave_type.LeaveTypeId')
        ->where('tbl_leave.IsDeleted', '=', '0')
        ->where('tbl_leave.Status', '=', '1')
        ->where('tbl_leave.LeaveId', $LeaveId)
        ->orderBy('tbl_leave.Created_at', 'desc')
        ->get();
        if($LeaveDetails->count() > 0)
        {
            $LeaveDetail = $LeaveDetails->first();
        }

        $ApprovalDetails = LeaveApproval::select('tbl_leave_approval.*','tbl_admin.ProfileId')
        ->leftJoin('tbl_admin', 'tbl_admin.UserId', '=', 'tbl_leave_approval.ApprovalBy')
        //->where('tbl_leave_approval.ApprovalStatus', '=', '0')
        ->where('tbl_leave_approval.LeaveId', $LeaveId)
        ->get();
        if($ApprovalDetails->count() > 0)
        {
            $ApprovalDetail = $ApprovalDetails->first();
        }
 
        return view('admin.LeaveManagement.reform-application', ['EmployeesData' => $AllEmployee, 'LeaveTypes' => $LeaveTypes, 'LeaveDetails'=>$LeaveDetail,'ApprovalDetail'=>$ApprovalDetail]);
    }

    ### Update Reform Application
    public function updateReformLeave(Request $request)
    {
        $CreatedDate = date('Y-m-d H:i:s',time());
        $LeaveId = $request->input('LeaveId');
        $EmployeeId = $request->input('EmployeeId');
        $EmployeeCode = $request->input('EmployeeCode');
        $employeeDepartment = $request->input('employeeDepartment');
        $LeaveType = $request->input('LeaveType');
        $UserName = $request->input('UserName');
        $Authority = $request->input('Authority');
        $StartDate = $request->input('leaveStartDate');
        $EndDate = $request->input('ReformDate');
        $leaveStartDate = str_replace('/', '-', $StartDate);
        $leaveEndDate = str_replace('/', '-', $EndDate);
        $Remarks = $request->input('Remarks');
        $EmployeeName = $request->input('EmployeeName'); 
        $employeeDesignation = $request->input('employeeDesignation');       
        $LeaveDay = $request->input('LeaveDay');
        $NoOfDays = $request->input('NoOfDays');
       
          
        $data = array();

        $data['EmployeeId'] = $EmployeeId;
        $data['EmployeeCode'] = $EmployeeCode;      
        $data['EmployeeName'] = $EmployeeName;    
        $data['LeaveTypeId'] = $LeaveType;
        $data['IsReformed'] = 'Yes'; // If Reformed Leave
        $data['StartDate'] = date('Y-m-d', strtotime($leaveStartDate));
        $data['ReformDate'] = date('Y-m-d', strtotime($leaveEndDate));
        $data['Description'] = $Remarks;
        $data['LeaveName'] = $LeaveDay;
        $data['TotalLeave'] = $NoOfDays;      
        $data['Status'] = '1';
        $data['IsDeleted'] = '0';
        $data['LeaveStatus'] = '0';
        $data['UserName'] = $UserName;
        $data['ApprovalStatus'] = '0';
        $data['Created_at'] = $CreatedDate;
        $data['Created_by'] = session('UserId');
        $data['Updated_at'] = $CreatedDate;
        $data['Updated_by'] = session('UserId');
        $data['AssignTo'] = $Authority;

        // Update Leave Application 
        $UpdateLeave = Leave::where('LeaveId', $LeaveId)->update($data);

        // When leave application updated successfully then delete the approval authority from tbl leave approval 
        $DelApproval = LeaveApproval::where('LeaveId', $LeaveId)->delete();

        // After the  insert new leave approval in tbl approval
        $AuthorityName = explode(",", $Authority);
        $InsertApprovalData = '';
        for ($i = 0; $i < count($AuthorityName); $i++) {

            $SelectedUserId = $AuthorityName[$i];
            $data = array();
            $data['ApprovalId'] = $this->userLib->useridGenrator();;
            $data['LeaveId'] = $LeaveId;
            $data['ApprovalBy'] = $SelectedUserId;
            $data['ApprovalStatus'] = '0';
            $data['Created_at'] = date('Y-m-d H:i:s',time());
            $data['Created_by'] = session('UserId');
    
            $InsertApprovalData = LeaveApproval::insert($data);
        }
        if($InsertApprovalData){
        // return response()->json('success');
        }
        else{
        // return response()->json('failed');
        }
    }

    ### Edit Application
    public function editLeave(Request $request)
    {
        $CreatedDate = date('Y-m-d H:i:s',time());
        $LeaveId = $request->input('LeaveId');
        $EmployeeId = $request->input('EmployeeId');
        $EmployeeCode = $request->input('EmployeeCode');
        $employeeDepartment = $request->input('employeeDepartment');
        $LeaveType = $request->input('LeaveType');
        $UserName = $request->input('UserName');
        $Authority = $request->input('Authority');
        $StartDate = $request->input('leaveStartDate');
        $EndDate = $request->input('leaveEndDate');
        $leaveStartDate = str_replace('/', '-', $StartDate);
        $leaveEndDate = str_replace('/', '-', $EndDate);
        $Remarks = $request->input('Remarks');
        $EmployeeName = $request->input('EmployeeName'); 
        $employeeDesignation = $request->input('employeeDesignation');       
        $LeaveDay = $request->input('LeaveDay');
        $NoOfDays = $request->input('NoOfDays');
          
        $data = array();

        $data['EmployeeId'] = $EmployeeId;
        $data['EmployeeCode'] = $EmployeeCode;      
        $data['EmployeeName'] = $EmployeeName;    
        $data['LeaveTypeId'] = $LeaveType;
        $data['StartDate'] = date('Y-m-d', strtotime($leaveStartDate));
        $data['EndDate'] = date('Y-m-d', strtotime($leaveEndDate));
        $data['Description'] = $Remarks;
        $data['LeaveName'] = $LeaveDay;
        $data['TotalLeave'] = $NoOfDays;      
        $data['Status'] = '1';
        $data['IsDeleted'] = '0';
        $data['LeaveStatus'] = '0';
        $data['UserName'] = $UserName;
        $data['ApprovalStatus'] = '0';
        $data['Created_at'] = $CreatedDate;
        $data['Created_by'] = session('UserId');
        $data['Updated_at'] = $CreatedDate;
        $data['Updated_by'] = session('UserId');
        $data['AssignTo'] = $Authority;

        $UpdateLeave = Leave::where('LeaveId', $LeaveId)->update($data);
        $DelApproval = LeaveApproval::where('LeaveId', $LeaveId)->delete();

        $AuthorityName = explode(",", $Authority);
        $InsertApprovalData = '';
        for ($i = 0; $i < count($AuthorityName); $i++) {

            $SelectedUserId = $AuthorityName[$i];
            $data = array();
            $data['ApprovalId'] = $this->userLib->useridGenrator();;
            $data['LeaveId'] = $LeaveId;
            $data['ApprovalBy'] = $SelectedUserId;            
            $data['ApprovalStatus'] = '0';
            $data['Created_at'] = date('Y-m-d H:i:s',time());
            $data['Created_by'] = session('UserId');
    
            $InsertApprovalData = LeaveApproval::insert($data);    
        }
        if($InsertApprovalData){
        return response()->json('success');
        }
        else{
        return response()->json('failed');
        }
    }

    ### Delete Application
    public function deleteLeave(Request $request)
    {        
        $CreatedDate = date('Y-m-d H:i:s',time());
        $LeaveId = $request->input('LeaveId');                          
        $Leave = Leave::where('LeaveId', $LeaveId)->delete();
        $Approval = LeaveApproval::where('LeaveId', $LeaveId)->delete();
        if ($Leave || $Approval) {
            return response()->json('success');
        } else {
            return response()->json('failed');
        }
    }

    public function newApplication()
    {

        // if(session('UserType') == 'Super Admin')
        // {
            $AllEmployee = EmployeeProfile::select('tbl_employees.*', 'tbl_department.DepartmentName as DepartmentName', 'tbl_designation.DesignationName as DesignationName')
            ->leftJoin('tbl_department', 'tbl_employees.DepartmentId', '=', 'tbl_department.DepartmentId')
            ->leftJoin('tbl_designation', 'tbl_employees.DesignationId', '=', 'tbl_designation.DesignationId')
            ->where('tbl_employees.IsDeleted', '=', '0')
            ->orderBy('tbl_employees.id', 'desc')
            ->get();
        // }
        // else
        // {
        //     $EmployeeId = session('UserId');
        //     $AllEmployee = EmployeeProfile::select('tbl_employees.*', 'tbl_department.DepartmentName as DepartmentName', 'tbl_designation.DesignationName as DesignationName')
        //     ->leftJoin('tbl_department', 'tbl_employees.DepartmentId', '=', 'tbl_department.DepartmentId')
        //     ->leftJoin('tbl_designation', 'tbl_employees.DesignationId', '=', 'tbl_designation.DesignationId')
        //     ->where('tbl_employees.UserId', $EmployeeId)
        //     ->where('tbl_employees.IsDeleted', '=', '0')
        //     ->orderBy('tbl_employees.id', 'desc')
        //     ->get();
        // }

        $LeaveTypes = LeaveTypes::select('*')
        ->where('IsDeleted', '=', '0')
        ->where('Status', '=', '1')
        ->orderBy('LeaveTypeName', 'asc')
        ->get();

        return view('admin.LeaveManagement.new-application', ['EmployeesData' => $AllEmployee, 'LeaveTypes' => $LeaveTypes]);
    }


    public function detailsApplication(Request $request, $LeaveId='', $DisplayView = '')
    {
        $LeaveDetails = Leave::select('tbl_leave.*','tbl_leave_type.LeaveTypeName')
        ->leftJoin('tbl_leave_type', 'tbl_leave.LeaveTypeId', '=', 'tbl_leave_type.LeaveTypeId')
        ->where('tbl_leave.IsDeleted', '=', '0')
        ->where('tbl_leave.Status', '=', '1')
        ->where('tbl_leave.LeaveId', $LeaveId)
        ->orderBy('tbl_leave.Created_at', 'desc')
        ->get();
        if($LeaveDetails->count() > 0)
        {
            $LeaveDetail = $LeaveDetails->first();

            $LeaveTypes = LeaveTypes::select('*')
            ->where('IsDeleted', '=', '0')
            ->where('Status', '=', '1')
            ->where('LeaveTypeId',  $LeaveDetail->LeaveTypeId)
            ->orderBy('LeaveTypeName', 'asc')
            ->get();
            if($LeaveTypes->count() > 0)
            {
                $LeaveTypeDetail = $LeaveTypes->first();
                $LeaveDetail->LeaveTypeName = $LeaveTypeDetail->LeaveTypeName;
            }

            $AllEmployee = EmployeeProfile::select('tbl_employees.*', 'tbl_department.DepartmentName as DepartmentName', 'tbl_designation.DesignationName as DesignationName','tbl_name_title.NameTitle as Title','tbl_employees_address.HomeTownDeclaration as HomeAddress')
            ->leftJoin('tbl_department', 'tbl_employees.DepartmentId', '=', 'tbl_department.DepartmentId')
            ->leftJoin('tbl_designation', 'tbl_employees.DesignationId', '=', 'tbl_designation.DesignationId')
            ->leftJoin('tbl_name_title', 'tbl_name_title.NameTitleId', '=', 'tbl_employees.NameTitleId')
            ->leftJoin('tbl_employees_address', 'tbl_employees_address.EmployeeId', '=', 'tbl_employees.EmployeeId')
            ->where('tbl_employees.IsDeleted', '=', '0')
            ->where('tbl_employees.EmployeeId',  $LeaveDetail->EmployeeId)
            ->orderBy('tbl_employees.id', 'desc')
            ->get();
            if($AllEmployee->count() > 0)
            {
                $AllEmployeeDetails = $AllEmployee->first();
                $LeaveDetail->EmployeeName = $AllEmployeeDetails->EmployeeName;
                $LeaveDetail->DepartmentName = $AllEmployeeDetails->DepartmentName;
                $LeaveDetail->DesignationName = $AllEmployeeDetails->DesignationName;
                $LeaveDetail->Title = $AllEmployeeDetails->Title;
                $LeaveDetail->HomeAddress = $AllEmployeeDetails->HomeAddress;
            }
            $EmployeeGeneralDetail = EmployeeGeneralDetail::select('tbl_employee_general_detail.*', 'tbl_gender.GenderName as Gender',)
            ->leftJoin('tbl_admin', 'tbl_employee_general_detail.Updated_by', '=', 'tbl_admin.UserId')
            ->leftJoin('tbl_gender', 'tbl_employee_general_detail.GenderId', '=', 'tbl_gender.GenderId')
            ->where('tbl_employee_general_detail.EmployeeId', $LeaveDetail->EmployeeId)
            ->get();
            if($EmployeeGeneralDetail->count() > 0)
            {
                $EmployeeGeneralDetails = $EmployeeGeneralDetail->first();
                $LeaveDetail->Gender = $EmployeeGeneralDetails->Gender;
                $LeaveDetail->EmployeeSignPath = $EmployeeGeneralDetails->EmployeeSignPath;
            }
            
            $EmployeePayMatrix = EmployeePayMatrix::select('tbl_employees_paymatrix.*','tbl_payband.PayBandName as PayBand', 'tbl_gradepay.GradePayName as GradePay')
            ->leftJoin('tbl_payband', 'tbl_employees_paymatrix.PayBandId', '=', 'tbl_payband.PayBandId')
            ->leftJoin('tbl_gradepay', 'tbl_employees_paymatrix.GradePayId', '=', 'tbl_gradepay.GradePayId')
            ->where('tbl_employees_paymatrix.EmployeeId', $LeaveDetail->EmployeeId)
            ->where('tbl_employees_paymatrix.IsDeleted', '0')
            // ->orderBy('tbl_employees_paymatrix.id', 'DESC')
            ->get();
            
            if($EmployeePayMatrix->count() > 0)
            {
                $EmployeePayMatrixs = $EmployeePayMatrix->first();
                $LeaveDetail->PayBand = $EmployeePayMatrixs->PayBand;
                $LeaveDetail->GradePay = $EmployeePayMatrixs->GradePay;
                $LeaveDetail->PayLevelAmount = $EmployeePayMatrixs->PayLevelAmount;
            }
        }
        
            $NumberOfLeaveId = 0;
            $NumberOfApprovalStatus = 0;
            $PreviousLeaveTypeName = 0;
            $PreviousLeaveStartDate = 0;
            $PreviousLeaveEndDate = 0;
            if($LeaveDetails->count() > 0)
            {
                foreach($LeaveDetails as $key => $Value) {

                    $LeaveId = $Value->LeaveId;

                    
                    $previousLeaveDetail = Leave::select('tbl_leave.*','tbl_leave_type.LeaveTypeName')
                    ->leftJoin('tbl_leave_type', 'tbl_leave_type.LeaveTypeId', '=', 'tbl_leave.LeaveTypeId')
                    ->where('tbl_leave.id','<', $Value->id)
                    ->get();
                    $previousLeave = $previousLeaveDetail->first();
                    $PreviousLeaveTypeName = isset($previousLeave->LeaveTypeName) ? $previousLeave->LeaveTypeName : '';
                    $Value->PreviousLeaveTypeName = $PreviousLeaveTypeName;

                    $PreviousLeaveStartDate = isset($previousLeave->StartDate) ? $previousLeave->StartDate : '';
                    $Value->PreviousLeaveStartDate = $PreviousLeaveStartDate;

                    $PreviousLeaveEndDate = isset($previousLeave->EndDate) ? $previousLeave->EndDate : '';
                    $Value->PreviousLeaveEndDate = $PreviousLeaveEndDate;

                    $getTotalSameLeaveId = LeaveApproval::where('LeaveId',$LeaveId)->get();
                    $NumberOfLeaveId = $getTotalSameLeaveId->count();

                    $getTotalForward = LeaveApproval::where('LeaveId',"$LeaveId")->where('ApprovalStatus', '=', 3)->get();
                    $NumberOfForward = $getTotalForward->count();
                     
                    $getTotalApprovals = LeaveApproval::where('LeaveId',"$LeaveId")->where('ApprovalStatus', '=', 1)->get();
                    $NumberOfApprovalStatus = $getTotalApprovals->count();
                    $TotalApproval = $NumberOfApprovalStatus + $NumberOfForward;
                     
                    $Value->NumberOfLeaveId = $NumberOfLeaveId;
                    $Value->NumberOfApprovalStatus = $TotalApproval;
                   
                }  

            }
            // echo "<pre>";
            // print_r($LeaveDetails);exit;

            if($DisplayView)
            {
                return view('admin.LeaveManagement.details-application-order', ['EmployeesData' => $AllEmployee, 'LeaveTypes' => $LeaveTypes, 'LeaveDetails'=>$LeaveDetail,'NumberOfLeaveId' => $NumberOfLeaveId, 'NumberOfApprovalStatus'=>$NumberOfApprovalStatus,'PreviousLeaveTypeName'=>$PreviousLeaveTypeName, 'PreviousLeaveStartDate'=>$PreviousLeaveStartDate, 'PreviousLeaveEndDate'=>$PreviousLeaveEndDate]);
            }
            else
            {
                return view('admin.LeaveManagement.details-application', ['EmployeesData' => $AllEmployee, 'LeaveTypes' => $LeaveTypes, 'LeaveDetails'=>$LeaveDetail,'NumberOfLeaveId' => $NumberOfLeaveId, 'NumberOfApprovalStatus'=>$NumberOfApprovalStatus,'PreviousLeaveTypeName'=>$PreviousLeaveTypeName, 'PreviousLeaveStartDate'=>$PreviousLeaveStartDate, 'PreviousLeaveEndDate'=>$PreviousLeaveEndDate]);
            }
        
    }

    ### All Application
    public function allApplication(Request $request, $EmployeeId='')
    {
        $this->UserSessionId = session('UserId');
        if (empty($this->UserSessionId)) {
            return redirect('/');
        }
        $UserId = session('UserId');

        $Leaves = Leave::select('tbl_leave.*','tbl_leave_type.LeaveTypeName','tbl_employees.EmployeeCode','tbl_employees.EmployeeName')
        ->leftJoin('tbl_leave_type', 'tbl_leave_type.LeaveTypeId', '=', 'tbl_leave.LeaveTypeId')
        ->leftJoin('tbl_employees', 'tbl_employees.EmployeeId', '=', 'tbl_leave.EmployeeId')
        ->where('tbl_leave.Status', '=', '1')
        ->where('tbl_leave.IsDeleted', '=', '0')
        //->where('tbl_employees.UserId', $UserId)
        ->orderBy('tbl_leave.Created_at', 'desc')
        ->get();
        $NumberOfLeaveId = 0;
        $NumberOfForward = 0;
        $NumberOfApprovalStatus = 0;
        $NumberOfRejectStatus = 0;
        if($Leaves->count() > 0)
        {
            foreach($Leaves as $key => $Value) {

                $LeaveId = $Value->LeaveId;

                $getTotalSameLeaveId = LeaveApproval::where('LeaveId',$LeaveId)->get();
                $NumberOfLeaveId = $getTotalSameLeaveId->count();

                $getTotalForward = LeaveApproval::where('LeaveId',"$LeaveId")->where('ApprovalStatus', '=', 3)->get();
                $NumberOfForward = $getTotalForward->count();

                $getTotalApprovals = LeaveApproval::where('LeaveId',"$LeaveId")->where('ApprovalStatus', '=', 1)->get();
                $NumberOfApprovalStatus = $getTotalApprovals->count();
                    
                $TotalApproval = $NumberOfApprovalStatus + $NumberOfForward;
                $getTotalReject = LeaveApproval::where('LeaveId',$LeaveId)->where('ApprovalStatus','=','2')->get();
                $NumberOfRejectStatus = $getTotalReject->count();

                $Value->NumberOfLeaveId = $NumberOfLeaveId;
                $Value->NumberOfForward = $NumberOfForward;
                $Value->NumberOfApprovalStatus = $TotalApproval;
                $Value->NumberOfRejectStatus = $NumberOfRejectStatus;
            }    

        }
    
        $LeaveTypes = LeaveTypes::select('*')
        ->where('IsDeleted', '=', '0')
        ->where('Status', '=', '1')
        ->orderBy('LeaveTypeName', 'asc')
        ->get();
        
        if($LeaveTypes->count() > 0)
        {
            foreach ($LeaveTypes as $key => $LValue) 
            {     
                $LeaveTypeId = $LValue->LeaveTypeId;  

                $LeaveDetails = Leave::select('tbl_leave.*')
                ->leftJoin('tbl_employees', 'tbl_employees.EmployeeId', '=', 'tbl_leave.EmployeeId')                 
                ->where('tbl_leave.Status', '=', '1')
                ->where('tbl_leave.LeaveTypeId', $LeaveTypeId)
                ->where('tbl_employees.UserId', $UserId)
                ->get();
                $TotalLeaveDayCount = 0;
                if($LeaveDetails->count() > 0)
                {
                    foreach ($LeaveDetails as $key => $LeaveValue) 
                    {
                    $LeaveTypeId = $LeaveValue->LeaveTypeId;
                    $LeaveId = $LeaveValue->LeaveId;
                    
                    $TotalLeave = $LeaveValue->TotalLeave;

                    $TotalLeaveDayCount = $TotalLeaveDayCount + $TotalLeave;
                    }
                }
                $LValue->TotalLeaveDayCount = $TotalLeaveDayCount;

            }
        }
        return view('admin.LeaveManagement.all-application', ['LeaveTypes' => $LeaveTypes, 'Leaves'=>$Leaves,'NumberOfLeaveId'=>$NumberOfLeaveId,'NumberOfApprovalStatus'=>$NumberOfApprovalStatus,'NumberOfRejectStatus'=>$NumberOfRejectStatus]);
    }

    ### Leave Category
    public function leaveCategory()
    {
        return view('admin.LeaveManagement.leave-category');
    }

    ### Leave Type
    public function leaveType()
    {
        return view('admin.LeaveManagement.leave-type');
    }

    ### Holiday List
    public function holidayList()
    {
        return view('admin.LeaveManagement.holiday-list');
    }

    ### View Application
    public function viewApplication()
    {
        return view('admin.LeaveManagement.view-application');
    }

    #### Approved Or Rejected Leave Application
    public function ApprovedLeaveApplication($LeaveId='')
    {
        $value = array();
        $Status = $_GET['status'];
        $Reason = $_GET['reason'];
        $UserId = session('UserId');

    // leave (+,-) after and before present employee during om the leave
        $LeaveDetails = Leave::select('tbl_leave.*','tbl_leave_type.LeaveTypeName')
        ->leftJoin('tbl_leave_type', 'tbl_leave.LeaveTypeId', '=', 'tbl_leave_type.LeaveTypeId')
        ->where('tbl_leave.IsDeleted', '=', '0')
        ->where('tbl_leave.Status', '=', '1')
        ->where('tbl_leave.LeaveId', $LeaveId)
        ->orderBy('tbl_leave.Created_at', 'desc')
        ->get()
        ->first();
    // When Reform Application update then perform this activity 
    if($LeaveDetails->IsReformed == 'Yes')
    {
        $value['ApprovalStatus'] = '1';
        $value['RejectedReason'] = "";
        $UpdatedDate = date('Y-m-d H:i:s', time());
        $ApprovedDate = date('Y-m-d H:i:s');
        $value['Updated_at'] = $UpdatedDate;
        $value['ApprovedBy'] = $UserId;
        $value['ApprovedDate'] = $ApprovedDate;
        $value['Updated_by'] = $UserId;
        $change_leave_status = Leave::where('LeaveId', $LeaveId)->update($value);
        $change_approval_status = LeaveApproval::where(['LeaveId'=>$LeaveId,'ApprovalBy'=>$UserId])->update($value);
        if($change_leave_status && $change_approval_status)
        {
            $StartDate = strtotime($LeaveDetails->StartDate);
            $EndDate = strtotime($LeaveDetails->EndDate);
            $ReformDate = strtotime($LeaveDetails->EndDate);
            $LeaveTypeName = $LeaveDetails->LeaveTypeName;
            $EmployeeId = $LeaveDetails->EmployeeId;

            $DifApplyLeaveDays = (($EndDate - $StartDate)/86400);

            $ReformEndDate = strtotime($ReformDate);

            $DifReformLeaveDays = (($ReformEndDate - $StartDate)/86400);

            $BalLeaveDays = ($DifApplyLeaveDays - $DifReformLeaveDays);

            $GetBalanceLeaveDetail = EmployeeEarnedCommutedLeave::select()
            ->where('EmployeeId', $EmployeeId)
            ->where('IsDeleted', '=', '0')
            ->where('Status', '=', 1)
            ->orderBy('id', 'desc')
            ->get();
            
            $BalanceEarnedLeave = 0;
            $BalanceCommutedLeave = 0;
            if ($GetBalanceLeaveDetail->count() > 0) 
                {
                    foreach ($GetBalanceLeaveDetail as $Balance) 
                    {
                        $BalanceEarnedLeave = $Balance->BalanceEarnedLeave;
                        $BalanceCommutedLeave = $Balance->BalanceCummetedLeave;
                    }
                } 
            else if($LeaveTypeName == "Earned Leave")
            {
                if($BalLeaveDays > 0)
                {
                    $j_data['Updated_at'] =date('Y-m-d H:i:s', time());
                    $j_data['Updated_by'] = session('UserId');
                    $j_data['BalanceEarnedLeave'] =   $BalanceEarnedLeave + $BalLeaveDays;

                    $UpdateLeaveBalance = EmployeeEarnedCommutedLeave::where('EmployeeId', $EmployeeId)->orderBy('id','DESC')->update($j_data);
                } 
                else
                {
                    $j_data['Updated_at'] =date('Y-m-d H:i:s', time());
                    $j_data['Updated_by'] = session('UserId');
                    $j_data['BalanceEarnedLeave'] =   $BalanceEarnedLeave - $BalLeaveDays;

                    $UpdateLeaveBalance = EmployeeEarnedCommutedLeave::where('EmployeeId', $EmployeeId)->orderBy('id','DESC')->update($j_data);
                } 
            }

            else if($LeaveTypeName == "Commuted Leave")
            {
                if($BalLeaveDays > 0)
                {
                    $j_data['Updated_at'] =date('Y-m-d H:i:s', time());
                    $j_data['Updated_by'] = session('UserId');
                    $j_data['BalanceCummetedLeave'] = $BalanceCommutedLeave + $BalLeaveDays;

                    $UpdateLeaveBalance = EmployeeEarnedCommutedLeave::where('EmployeeId', $EmployeeId)->orderBy('id','DESC')->update($j_data);
                }
                else
                {
                    $j_data['Updated_at'] =date('Y-m-d H:i:s', time());
                    $j_data['Updated_by'] = session('UserId');
                    $j_data['BalanceCummetedLeave'] = $BalanceCommutedLeave - $BalLeaveDays;

                    $UpdateLeaveBalance = EmployeeEarnedCommutedLeave::where('EmployeeId', $EmployeeId)->orderBy('id','DESC')->update($j_data);
                }
            }
            return response()->json('status_success');
        } 
        else 
        {
            return response()->json('status_failed');
        }   
      
    }
     
    else if($LeaveDetails->IsReformed == 'No')
    {
            if ($Status == '1') 
            {
                $LeaveTypeId = $LeaveDetails->LeaveTypeId;
                $EmployeeId = $LeaveDetails->EmployeeId;
                $LeaveId = $LeaveDetails->LeaveId;
                if($LeaveTypeId == 'XCRCWT2323SF6242GS611')
                {
                    $GetEarnedLeave = EmployeeEarnedCommutedLeave::select()
                    ->where('EmployeeId', $EmployeeId)
                    ->where('IsDeleted', '=', '0')
                    ->where('Status', '=', 1)
                    ->orderBy('id', 'desc')
                    ->get();
                    $TotalEarnedLeave = 0;
                    if ($GetEarnedLeave->count() > 0) 
                        {
                            $Balance = $GetEarnedLeave->first();
                            $TotalEarnedLeave = $Balance->BalanceEarnedLeave;
                        }
                    $GetAvailedEOL = Leave::select('tbl_leave.*')
                    ->where('LeaveId',$LeaveId)
                    ->where('LeaveTypeId',$LeaveTypeId)
                    ->where('EmployeeId', $EmployeeId)
                    ->where('ApprovalStatus', '=', '0')
                    ->get()
                    ->first();
                    $TotalAvailedEOL = isset($GetAvailedEOL->AvailedEOL) ? $GetAvailedEOL->AvailedEOL : '';
        
                    echo $TotalAvailedEOL.'<br>';
                    if($TotalAvailedEOL >0 && $TotalAvailedEOL <= 10)
                    {
                       echo '10'.'<br>';
                    
                    $e_value['BalanceEarnedLeave'] = $TotalEarnedLeave - 1;
                    $e_value['Updated_at'] =date('Y-m-d H:i:s', time());
                    $e_value['Updated_by'] = session('UserId');
                    $Less_Earned_Leave = EmployeeEarnedCommutedLeave::where('EmployeeId', $EmployeeId)->orderBy('id','DESC')->update($e_value); 
                    }
                    else if($TotalAvailedEOL >11 && $TotalAvailedEOL <= 20)
                    {
                        echo '20'.'<br>';
                    $e_value['BalanceEarnedLeave'] = $TotalEarnedLeave - 2;
                    $e_value['Updated_at'] =date('Y-m-d H:i:s', time());
                    $e_value['Updated_by'] = session('UserId');
                    $Less_Earned_Leave = EmployeeEarnedCommutedLeave::where('EmployeeId', $EmployeeId)->orderBy('id','DESC')->update($e_value); 
                    }
                    else if($TotalAvailedEOL >21 && $TotalAvailedEOL <= 30)
                    {
                        echo '30'.'<br>';
                    $e_value['BalanceEarnedLeave'] = $TotalEarnedLeave - 3;
                    $e_value['Updated_at'] =date('Y-m-d H:i:s', time());
                    $e_value['Updated_by'] = session('UserId');
                    $Less_Earned_Leave = EmployeeEarnedCommutedLeave::where('EmployeeId', $EmployeeId)->orderBy('id','DESC')->update($e_value); 
                    }
                    else if($TotalAvailedEOL >31 && $TotalAvailedEOL <= 40)
                    {
                        echo '40'.'<br>';
                    $e_value['BalanceEarnedLeave'] = $TotalEarnedLeave - 4;
                    $e_value['Updated_at'] =date('Y-m-d H:i:s', time());
                    $e_value['Updated_by'] = session('UserId');
                    $Less_Earned_Leave = EmployeeEarnedCommutedLeave::where('EmployeeId', $EmployeeId)->orderBy('id','DESC')->update($e_value); 
                    }
                    else{
                        echo '0'.'<br>';
                        $e_value['BalanceEarnedLeave'] = $TotalEarnedLeave - 0;
                        $e_value['Updated_at'] =date('Y-m-d H:i:s', time());
                        $e_value['Updated_by'] = session('UserId');
                        $Less_Earned_Leave = EmployeeEarnedCommutedLeave::where('EmployeeId', $EmployeeId)->orderBy('id','DESC')->update($e_value); 
                    }
                }
                $value['ApprovalStatus'] = '1';
                $value['RejectedReason'] = "";
                $UpdatedDate = date('Y-m-d H:i:s', time());
                $ApprovedDate = date('Y-m-d H:i:s');
                $value['Updated_at'] = $UpdatedDate;
                $value['ApprovedBy'] = $UserId;
                $value['ApprovedDate'] = $ApprovedDate;
                $value['Updated_by'] = $UserId;
                $change_leave_status = Leave::where('LeaveId', $LeaveId)->update($value);
                $change_approval_status = LeaveApproval::where(['LeaveId'=>$LeaveId,'ApprovalBy'=>$UserId])->update($value);
                if ($change_leave_status && $change_approval_status) 
                {
                    
                        $GetApplicationDetail = Leave::select('tbl_leave.*','tbl_leave_type.LeaveTypeName')
                        ->leftJoin('tbl_leave_type', 'tbl_leave.LeaveTypeId', '=', 'tbl_leave_type.LeaveTypeId')
                        ->where('tbl_leave.IsDeleted', '=', '0')
                        ->where('tbl_leave.Status', '=', '1')
                        ->where('tbl_leave.LeaveId', $LeaveId)
                        ->get();
                        $EarnedLeave = '';
                        $CommutedLeave = '';
                        $TotalLeave = 0;
                        $GetEmployeeId = '';
                        // $LeaveTypeId = '';
                        // $EmployeeId = '';
                        // $LeaveId = '';
                        if($GetApplicationDetail->count())
                        { 
                            foreach ($GetApplicationDetail as $AValue) 
                            {

                                // $LeaveTypeId = $AValue->LeaveTypeId;
                                // $EmployeeId = $AValue->EmployeeId;
                                // $LeaveId = $AValue->LeaveId;

                                if($AValue->LeaveTypeName == "Earned Leave")
                                {
                                $EarnedLeave  = $AValue->LeaveTypeName;
                                $TotalLeave .= $AValue->TotalLeave;
                                $GetEmployeeId = $AValue->EmployeeId;
                                } 
                                if($AValue->LeaveTypeName == "Commuted Leave")
                                {
                                $CommutedLeave  = $AValue->LeaveTypeName;
                                $TotalLeave .= $AValue->TotalLeave;
                                $GetEmployeeId = $AValue->EmployeeId;
                                } 
                            }
                        }

                            $GetBalanceLeaveDetail = EmployeeEarnedCommutedLeave::select()
                            ->where('EmployeeId', $GetEmployeeId)
                            ->where('IsDeleted', '=', '0')
                            ->where('Status', '=', 1)
                            ->orderBy('id', 'desc')
                            ->get();
                            $BalanceEarnedLeave = 0;
                            $BalanceCommutedLeave = 0;
                            if ($GetBalanceLeaveDetail->count() > 0) 
                                {
                                    $Balance = $GetBalanceLeaveDetail->first();
                                    $BalanceEarnedLeave = $Balance->BalanceEarnedLeave;
                                    $BalanceCommutedLeave = $Balance->BalanceCummetedLeave;
                                }
                        if($EarnedLeave)
                        {          
                            $e_value['BalanceEarnedLeave'] = $BalanceEarnedLeave - $TotalLeave;
                            $e_value['Updated_at'] =date('Y-m-d H:i:s', time());
                            $e_value['Updated_by'] = session('UserId');
                            $Less_Earned_Leave = EmployeeEarnedCommutedLeave::where('EmployeeId', $GetEmployeeId)->orderBy('id','DESC')->update($e_value);
                        }
                        if($CommutedLeave)
                        {    
                            $c_value['BalanceCummetedLeave'] = $BalanceCommutedLeave - $TotalLeave;
                            $c_value['Updated_at'] =date('Y-m-d H:i:s', time());
                            $c_value['Updated_by'] = session('UserId');
                            $Less_Earned_Leave = EmployeeEarnedCommutedLeave::where('EmployeeId', $GetEmployeeId)->orderBy('id','DESC')->update($c_value);
                        }
                        

                    return response()->json('status_success');
                } 
                else 
                {
                    return response()->json('status_failed');
                }
            } 
            else 
            {
                $value['ApprovalStatus'] = '2';
                $value['RejectedReason'] = $Reason;
                $value['Updated_by'] = $UserId;
                $UpdatedDate = date('Y-m-d H:i:s', time());
                $ApprovedDate = date('Y-m-d H:i:s');
                $value['Updated_at'] = $UpdatedDate;
                $value['ApprovedBy'] = $UserId;
                $value['ApprovedDate'] = $ApprovedDate;
                $change_leave_status = Leave::where('LeaveId', $LeaveId)->update($value);
                $change_approval_status = LeaveApproval::where(['LeaveId'=>$LeaveId])->update($value);
                if ($change_leave_status && $change_approval_status) 
                {
                    return response()->json('status_success');
                } 
                else 
                {
                    return response()->json('status_failed');
                }
            }
        }
    }
    
    #### Forward Leave Application
    public function ForwardLeaveApplicationStatus($LeaveId='')
    {
        $value = array();
        $Status = $_GET['status'];
        $Concern = $_GET['Concern'];
        $ProfileId = $_GET['ProfileId'];
        $UserId = session('UserId');
        
        $value['ApprovalStatus'] = $Status;
        $value['ForwardConcern'] = $Concern;
        $value['ForwardProfileId'] = $ProfileId;
        $UpdatedDate = date('Y-m-d H:i:s', time());
        $value['Updated_at'] = $UpdatedDate;
        $value['ApprovedBy'] = $UserId;
        $change_leave_status = Leave::where('LeaveId', $LeaveId)->update($value);
        $change_approval_status = LeaveApproval::where(['LeaveId'=>$LeaveId,'ApprovalBy'=>$UserId])->update($value);

        if($change_approval_status){

            $GetLeaveDetail = LeaveApproval::select('*')
            ->where('LeaveId', $LeaveId)
            ->where('ApprovalBy', $UserId)                
            ->get();
            if ($GetLeaveDetail->count()) {
                $data = array();
                foreach ($GetLeaveDetail as $LValue) {
                        $Nvalue['ApprovalId'] = $this->userLib->useridGenrator();
                        $Nvalue['ApprovalId'] = $LValue->ApprovalId;
                        $Nvalue['LeaveId'] = $LValue->LeaveId;
                        $Nvalue['ApprovalBy'] = $LValue->ForwardProfileId;
                        // $Nvalue['ApprovedBy'] = $LValue->ForwardProfileId;
                        $Nvalue['ApprovalStatus'] = '0';
                        $Nvalue['Created_by'] = $LValue->Created_by;
                        $Nvalue['Created_at'] = $LValue->Created_at;
                        $data = isset($Nvalue) ? $Nvalue : '';
                }
                $NewAprovalData = LeaveApproval::insert($data);
            }
        }    
        
        if ($change_leave_status && $change_approval_status && $NewAprovalData) {
            return response()->json('status_success');
        } else {
            return response()->json('status_failed');
        }
    }

    #Forward List
    public function forwardList()
    {
        $this->UserSessionId = session('UserId');
        if (empty($this->UserSessionId)) {
            return redirect('/');
        }
        $AllEmployee = EmployeeProfile::select('tbl_employees.*', 'tbl_department.DepartmentName as DepartmentName', 'tbl_designation.DesignationName as DesignationName')
        ->leftJoin('tbl_department', 'tbl_employees.DepartmentId', '=', 'tbl_department.DepartmentId')
        ->leftJoin('tbl_designation', 'tbl_employees.DesignationId', '=', 'tbl_designation.DesignationId')
        ->where('tbl_employees.IsDeleted', '=', '0') 
        ->orderBy('tbl_employees.id', 'desc')
        ->get();
 
        $AllEmployeeDetails = array();
        if($AllEmployee->count() > 0)
        {
            $AllEmployeeDetails = $AllEmployee->first();
        }
        $EmployeeId = session('UserId');
        $LeavesDetail = Leave::select('tbl_leave.*','tbl_leave_type.LeaveTypeName','tbl_leave_approval.ApprovalStatus')
        ->leftJoin('tbl_leave_type', 'tbl_leave.LeaveTypeId', '=', 'tbl_leave_type.LeaveTypeId')
        ->leftJoin('tbl_leave_approval', 'tbl_leave_approval.LeaveId', '=', 'tbl_leave.LeaveId')
        ->where('tbl_leave_approval.ApprovalStatus', '=', '3')
        ->where('tbl_leave_approval.ApprovalBy', $EmployeeId)
        ->get();
        if($LeavesDetail->count() > 0)
        {
            $ForwardUsername = "";
            foreach ($LeavesDetail as $FValue) {

                $ForwardProfileId = $FValue->ForwardProfileId;

                $ApprovedBy = $FValue->ApprovedBy;
            #Forward
                $ForwardUserDetails = Admin::select('*')
                ->where('UserId', $ForwardProfileId)
                ->get()->first();

                $FirstName = isset($ForwardUserDetails->FirstName) ? $ForwardUserDetails->FirstName : '';
                $MiddleName = isset($ForwardUserDetails->MiddleName) ? $ForwardUserDetails->MiddleName : '';
                $LastName = isset($ForwardUserDetails->LastName) ? $ForwardUserDetails->LastName : '';

                $FullName = '';
                if($FirstName)
                {
                    $FullName .= $FirstName;
                }
                if($MiddleName)
                {
                    $FullName .= " ".$MiddleName;
                }
                if($LastName)
                {
                    $FullName .= " ".$LastName;
                }
                $FValue->ForwardUsername = $FullName;
            }
        }

        return view('admin.LeaveManagement.forward-list', ['EmployeesData' => $AllEmployeeDetails,'LeavesDetail' => $LeavesDetail]);

    }

    public function ApplicationDetail(Request $request, $LeaveId='')
    {
        $LeaveDetails = LeaveApproval::select('tbl_leave_approval.*','tbl_admin.FirstName','tbl_admin.MiddleName','tbl_admin.LastName')
        ->leftJoin('tbl_admin', 'tbl_admin.UserId', '=', 'tbl_leave_approval.ApprovalBy')
        ->where('tbl_leave_approval.LeaveId', $LeaveId)
        ->orderBy('tbl_leave_approval.ApprovalId', 'DESC')
        ->get();
        if($LeaveDetails->count() > 0)
        {
            $ForwardUsername = "";
            $ApprovedUsername = "";
            $RejectUsername = "";
            foreach ($LeaveDetails as $FValue) {

                $ForwardProfileId = $FValue->ForwardProfileId;

                $ApprovedBy = $FValue->ApprovedBy;
            #Forward
                $ForwardUserDetails = Admin::select('*')
                ->where('UserId', $ForwardProfileId)
                ->get()->first();

                $FirstName = isset($ForwardUserDetails->FirstName) ? $ForwardUserDetails->FirstName : '';
                $MiddleName = isset($ForwardUserDetails->MiddleName) ? $ForwardUserDetails->MiddleName : '';
                $LastName = isset($ForwardUserDetails->LastName) ? $ForwardUserDetails->LastName : '';

                $FullName = '';
                if($FirstName)
                {
                    $FullName .= $FirstName;
                }
                if($MiddleName)
                {
                    $FullName .= " ".$MiddleName;
                }
                if($LastName)
                {
                    $FullName .= " ".$LastName;
                }
                $FValue->ForwardUsername = $FullName;
            #Approved
                $ApprovedUserDetails = Admin::select('tbl_admin.*')
                ->leftJoin('tbl_leave_approval', 'tbl_leave_approval.ApprovedBy', '=', 'tbl_admin.UserId')
                ->where('tbl_leave_approval.ApprovalStatus', '=', 1)
                ->where('tbl_leave_approval.LeaveId', $LeaveId)
                ->where('tbl_admin.UserId', $ApprovedBy)
                ->get()->first();

                $ApprovedFirstName = isset($ApprovedUserDetails->FirstName) ? $ApprovedUserDetails->FirstName : '';
                $ApprovedMiddleName = isset($ApprovedUserDetails->MiddleName) ? $ApprovedUserDetails->MiddleName : '';
                $ApprovedLastName = isset($ApprovedUserDetails->LastName) ? $ApprovedUserDetails->LastName : '';

                $ApprovedFullName = '';
                if($ApprovedFirstName)
                {
                    $ApprovedFullName .= $ApprovedFirstName;
                }
                if($ApprovedMiddleName)
                {
                    $ApprovedFullName .= " ".$ApprovedMiddleName;
                }
                if($ApprovedLastName)
                {
                    $ApprovedFullName .= " ".$ApprovedLastName;
                }
                $FValue->ApprovedUsername = $ApprovedFullName;

            #Rejected
                $RejectUserDetails = Admin::select('tbl_admin.*')
                ->leftJoin('tbl_leave_approval', 'tbl_leave_approval.ApprovedBy', '=', 'tbl_admin.UserId')
                ->where('tbl_leave_approval.ApprovalStatus', '=', 2)
                ->where('tbl_leave_approval.LeaveId', $LeaveId)
                ->where('tbl_admin.UserId', $ApprovedBy)
                ->get()->first();

                $RejectFirstName = isset($RejectUserDetails->FirstName) ? $RejectUserDetails->FirstName : '';
                $RejectMiddleName = isset($RejectUserDetails->MiddleName) ? $RejectUserDetails->MiddleName : '';
                $RejectLastName = isset($RejectUserDetails->LastName) ? $RejectUserDetails->LastName : '';

                $RejectFullName = '';
                if($RejectFirstName)
                {
                    $RejectFullName .= $RejectFirstName;
                }
                if($RejectMiddleName)
                {
                    $RejectFullName .= " ".$RejectMiddleName;
                }
                if($RejectLastName)
                {
                    $RejectFullName .= " ".$RejectLastName;
                }
                $FValue->RejectUsername = $RejectFullName;
                 
            }
        }

        return view('admin.LeaveManagement.application-detail', ['LeaveDetails'=>$LeaveDetails]);
    }

    //////////////////////////////    Employee Leave Detail  ////////////////////////

    ### Holiday List
    public function empLeaves(Request $request, $LeaveId='')
    {
        $AllEmployee = EmployeeProfile::select('tbl_employees.*', 'tbl_department.DepartmentName as DepartmentName', 'tbl_designation.DesignationName as DesignationName')
        ->leftJoin('tbl_department', 'tbl_employees.DepartmentId', '=', 'tbl_department.DepartmentId')
        ->leftJoin('tbl_designation', 'tbl_employees.DesignationId', '=', 'tbl_designation.DesignationId')
        ->where('tbl_employees.IsDeleted', '=', '0')
        ->orderBy('tbl_employees.id', 'desc')
        ->get();

        return view('admin.LeaveManagement.employee-leaves', ['AllEmployee'=>$AllEmployee]);              
    }

    ### Detail of Leave
    public function detailsEmployeeApplication(Request $request, $EmployeeId='')
    {
        $AllEmployee = EmployeeProfile::select('tbl_employees.*', 'tbl_department.DepartmentName as DepartmentName', 'tbl_designation.DesignationName as DesignationName')
        ->leftJoin('tbl_department', 'tbl_employees.DepartmentId', '=', 'tbl_department.DepartmentId')
        ->leftJoin('tbl_designation', 'tbl_employees.DesignationId', '=', 'tbl_designation.DesignationId')
        ->leftJoin('tbl_employee_leaves', 'tbl_employee_leaves.EmployeeId', '=', 'tbl_employees.EmployeeId')
        ->where('tbl_employees.IsDeleted', '=', '0')
        ->where('tbl_employees.EmployeeId', $EmployeeId)
        ->orderBy('EmployeeId', 'desc')
        ->get()->first();
        
        $EmployeeLeaveDetails = EmployeeLeave::select('tbl_employee_leaves.*')
        ->where('EmployeeId', $EmployeeId)
        ->where('IsDeleted', '=', '0')
        ->where('Status', '=', 1)
        ->orderBy('EmployeeId', 'desc')
        ->get();
        if($EmployeeLeaveDetails->count() > 0){
            $EmployeeLeaveDetails = $EmployeeLeaveDetails->first();
        }
        else{
            $EmployeeLeaveDetails = '';
        }
        
       return view('admin.LeaveManagement.employee-application-details', ['EmployeeData' => $AllEmployee,'LeaveDetails'=>$EmployeeLeaveDetails, 'EmployeeId'=>$EmployeeId]);
    }
    ### Check Duplicate EmployeeId's Leave if Exist
    public function CheckDuplicateCreditLeave(Request $request)
    {
       
        $getFromDate = $request->input('LeaveFromDate');
        $FromDate =  date('Y-m-d', strtotime($getFromDate));
        $getToDate = $request->input('LeaveToDate');
        $ToDate =  date('Y-m-d', strtotime($getToDate));
        $EmployeeId = $request->input('EmployeeId');
        $getCreditLeave = EmployeeLeave::where('EmployeeId', $EmployeeId)->where('FromDate', $FromDate)->where('ToDate', $ToDate)->get();
        
        if ($getCreditLeave->count() > 0) {
            echo 'false';
        } else {
            echo 'true';
        }
    }

    ##### Store Leave Detail
    
    public function StoreLeaveDetail(Request $request)
    {
        $this->UserSessionId = session('UserId');
        if (empty($this->UserSessionId)) {
            return redirect('/');
        }
        $FromDate = str_replace('/', '-', $request->input('FromDate'));
        $ToDate = str_replace('/', '-', $request->input('ToDate'));

        $j_data['EmployeeLeaveId'] = $this->userLib->useridGenrator();
        
        $j_data['EmployeeId'] =  $request->input('EmployeeId');
        $j_data['FromDate'] = date('Y-m-d', strtotime($FromDate));
        $j_data['ToDate'] = date('Y-m-d', strtotime($ToDate));
        $j_data['EarnedLeave'] =  $request->input('EarnedLeave');
        $j_data['HalfPayLeave'] =  $request->input('HalfPayLeave');
        $j_data['CommutedLeave'] =  $request->input('CommutedLeave');
        $j_data['LeaveNotDue'] =  $request->input('LeaveNotDue');
        $j_data['Extraordinaryleave'] =  $request->input('Extraordinaryleave');
        $j_data['LeavePreparatoryToRetirement'] =  $request->input('LeavePreparatoryToRetirement');
        $j_data['MaternityLeave'] =  $request->input('MaternityLeave');
        $j_data['AbortionLeave'] =  $request->input('AbortionLeave');
        $j_data['SpecialLeave'] =  $request->input('SpecialLeave');
        $j_data['SpecialDissabilityLeave'] =  $request->input('SpecialDissabilityLeave');
        $j_data['HospitalLeave'] =  $request->input('HospitalLeave');
        $j_data['TBOrCancerLeprosyOrParalysisOrAidsLeave'] =  $request->input('TBOrCancerLeprosyOrParalysisOrAidsLeave');
        $j_data['StudyLeave'] =  $request->input('StudyLeave');
        $j_data['SpecialCasualLeave'] =  $request->input('SpecialCasualLeave');
        $j_data['CasualLeave'] =  $request->input('CasualLeave');
        $j_data['CompensationLeave'] =  $request->input('CompensationLeave');
        $j_data['LeaveForVipassana'] =  $request->input('LeaveForVipassana');
        $j_data['LeaveForDissableOffspring'] =  $request->input('LeaveForDissableOffspring');
        $j_data['MountaineeringExpeditionLeave'] =  $request->input('MountaineeringExpeditionLeave');
        $j_data['BalSnagopanLeave'] =  $request->input('BalSnagopanLeave');
        $j_data['Created_at'] = date('Y-m-d H:i:s', time());
        $j_data['Created_by'] = session('UserId');
        $j_data['Status'] = '1';
        $j_data['IsDeleted'] = '0';
    //    echo "<pre>";
	//    print_r($j_data);exit;
        $EmployeeLeaveDetail = EmployeeLeave::insert($j_data);
        if ($EmployeeLeaveDetail) {
            return response()->json([
                'status' => true,
                'message' => 'status_success'
            ]);
        } else {
            return response()->json([
                'status' => true,
                'message' => 'status_failed'
            ]);
        }
    }

    ### Edit Leave Detail of the Employee

    public function EditLeaveDetail(Request $request,$EmployeeLeaveId='')
    {
        $GetLeaveDetail = EmployeeLeave::select('tbl_employee_leaves.*')
            ->where('EmployeeLeaveId', $request->EmployeeLeaveId)
            ->where('IsDeleted', '=', '0')
            ->where('Status', '=', 1)
            ->get()->first();
        return response()->json([
            'status' => 200,
            'GetLeaveDetail' => $GetLeaveDetail,
        ]);
    }

    ##### Update Leave Detail

    public function UpdateLeaveDetail(Request $request)
    {
        $StartDate = $request->input('FromDate');
        $EndDate = $request->input('ToDate'); 
        $FromDate = str_replace('/', '-', $StartDate);
        $ToDate = str_replace('/', '-', $EndDate);
        $EmployeeLeaveId = $request->input('EmployeeLeaveId');
    
        $j_data['EmployeeId'] =  $request->input('EmployeeId');
        $j_data['FromDate'] =  date('Y-m-d', strtotime($FromDate));
        $j_data['ToDate'] =  date('Y-m-d', strtotime($ToDate));
        $j_data['EarnedLeave'] =  $request->input('EarnedLeave');
        $j_data['HalfPayLeave'] =  $request->input('HalfPayLeave');
        $j_data['CommutedLeave'] =  $request->input('CommutedLeave');
        $j_data['LeaveNotDue'] =  $request->input('LeaveNotDue');
        $j_data['Extraordinaryleave'] =  $request->input('Extraordinaryleave');
        $j_data['LeavePreparatoryToRetirement'] =  $request->input('LeavePreparatoryToRetirement');
        $j_data['MaternityLeave'] =  $request->input('MaternityLeave');
        $j_data['AbortionLeave'] =  $request->input('AbortionLeave');
        $j_data['SpecialLeave'] =  $request->input('SpecialLeave');
        $j_data['SpecialDissabilityLeave'] =  $request->input('SpecialDissabilityLeave');
        $j_data['HospitalLeave'] =  $request->input('HospitalLeave');
        $j_data['TBOrCancerLeprosyOrParalysisOrAidsLeave'] =  $request->input('TBOrCancerLeprosyOrParalysisOrAidsLeave');
        $j_data['StudyLeave'] =  $request->input('StudyLeave');
        $j_data['SpecialCasualLeave'] =  $request->input('SpecialCasualLeave');
        $j_data['CasualLeave'] =  $request->input('CasualLeave');
        $j_data['CompensationLeave'] =  $request->input('CompensationLeave');
        $j_data['LeaveForVipassana'] =  $request->input('LeaveForVipassana');
        $j_data['LeaveForDissableOffspring'] =  $request->input('LeaveForDissableOffspring');
        $j_data['MountaineeringExpeditionLeave'] =  $request->input('MountaineeringExpeditionLeave');
        $j_data['BalSnagopanLeave'] =  $request->input('BalSnagopanLeave');
        $j_data['Updated_by'] = session('UserId');
        $j_data['Status'] = '1';
        $j_data['IsDeleted'] = '0';
        $j_data['Updated_at'] = date('Y-m-d H:i:s', time());

        $UpdateLeaveDetailData = EmployeeLeave::where('EmployeeLeaveId', $EmployeeLeaveId)->update($j_data);
        if ($UpdateLeaveDetailData) {
            return response()->json('status_success');
        } else {
            return response()->json('status_failed');
        }
    }

    ### Delete Leave Detail of the Employee

    public function DeleteLeaveDetail(Request $request)
    {
        $this->UserSessionId = session('UserId');
        if (empty($this->UserSessionId)) {
            return redirect('/');
        }
        $EmployeeLeaveId = $request->input('EmployeeLeaveId');
        $l_data = array();
        $j_data['Updated_by'] = session('UserId');
        $l_data['IsDeleted'] = 1;
        $l_data['Status'] = 0;

        $DeleteLeaveDetailData = EmployeeLeave::where('EmployeeLeaveId', $EmployeeLeaveId)->update($l_data);
        if ($DeleteLeaveDetailData) {
            return response()->json('status_success');
        } else {
            return response()->json('status_failed');
        }
    }

    //////////////////////////////    Employee Earned Commuted Leave Detail  ////////////////////////


    public function EmpEarnedCommutedLeaves()
    {
        $EmployeeEarnedCommutedLeaveDetails = EmployeeEarnedCommutedLeave::select('tbl_employee_earned_commuted_leave.*','tbl_employees.EmployeeCode','tbl_employees.EmployeeName')
        ->leftJoin('tbl_employees', 'tbl_employees.EmployeeId', '=', 'tbl_employee_earned_commuted_leave.EmployeeId')
        ->where('tbl_employee_earned_commuted_leave.IsDeleted', '=', '0')
        ->where('tbl_employee_earned_commuted_leave.Status', '=', 1)
        // ->orderBy('tbl_employee_earned_commuted_leave.id', 'desc')
        ->get();
        
     return  view('admin.LeaveManagement.employee-earned-commuted-details',['EmployeeEarnedCommutedLeaveDetails'=>$EmployeeEarnedCommutedLeaveDetails]);

    }

    ### Check Duplicate EmployeeId's Earned Commuted Leave if Exist
    public function CheckDuplicateEarnedCommutedLeave(Request $request)
    {
       
        $getFromDate = str_replace('/', '-', $request->input('EarnFromDate'));
        $getToDate = str_replace('/', '-', $request->input('EarnToDate'));

        $FromDate =  date('Y-m-d', strtotime($getFromDate));
        $ToDate =  date('Y-m-d', strtotime($getToDate));
        
        $EmployeeId = $request->input('EmployeeId');
    
        $getEarnedCommutedLeave = EmployeeEarnedCommutedLeave::where('EmployeeId', $EmployeeId)->where('FromDate', $FromDate)->where('ToDate', $ToDate)->get();
        
        if ($getEarnedCommutedLeave->count() > 0) {
            echo 'false';
        } else {
            echo 'true';
        }
    }

    ##### Store Earned Commuted Leave Detail
    
    public function StoreEarnCommutLeaveDetail(Request $request)
    {
        $EmployeeId = $request->input('EmployeeId');
        $GetBalanceLeaveDetail = EmployeeEarnedCommutedLeave::select()
        ->where('EmployeeId', $EmployeeId)
        ->where('IsDeleted', '=', '0')
        ->where('Status', '=', 1)
        ->orderBy('id', 'desc')
        ->get();
        $BalanceEarnedLeave = 0;
        $BalanceCommutedLeave = 0;
        if ($GetBalanceLeaveDetail->count() > 0) 
            {
                foreach ($GetBalanceLeaveDetail as $Balance) 
                {
                    $BalanceEarnedLeave = $Balance->BalanceEarnedLeave;
                    $BalanceCommutedLeave = $Balance->BalanceCummetedLeave;
                }
            }

        $FromDate = str_replace('/', '-', $request->input('FromDate'));
        $ToDate = str_replace('/', '-', $request->input('ToDate'));

        $j_data['EmployeeELCLId'] = $this->userLib->useridGenrator();
        
        $j_data['EmployeeId'] = $EmployeeId; 
        $j_data['FromDate'] = date('Y-m-d', strtotime($FromDate));
        $j_data['ToDate'] = date('Y-m-d', strtotime($ToDate));
        $j_data['EarnedLeave'] =  $request->input('EarnedLeave');
        $j_data['CommutedLeave'] =  $request->input('CommutedLeave');
        $j_data['BalanceEarnedLeave'] =  $request->input('EarnedLeave') + $BalanceEarnedLeave;
        $j_data['BalanceCummetedLeave'] =  $request->input('CommutedLeave') + $BalanceCommutedLeave;
        $j_data['Created_at'] = date('Y-m-d H:i:s', time());
        $j_data['Created_by'] = session('UserId');
        $j_data['Status'] = '1';
        $j_data['IsDeleted'] = '0';
        $EarnCommutLeaveDetail = EmployeeEarnedCommutedLeave::insert($j_data);
        if ($EarnCommutLeaveDetail) {
            return response()->json([
                'status' => true,
                'message' => 'status_success'
            ]);
        } else {
            return response()->json([
                'status' => true,
                'message' => 'status_failed'
            ]);
        }
    }

    ### Edit Earned Commuted Leave Detail of the Employee

    public function EditEarnedCommutedLeaveDetail(Request $request,$EmployeeELCLId='')
    {
        $GetEarnCommutLeaveDetail = EmployeeEarnedCommutedLeave::select()
            ->where('EmployeeELCLId', $request->EmployeeELCLId)
            ->where('IsDeleted', '=', '0')
            ->where('Status', '=', 1)
            ->get()->first();
        return response()->json([
            'status' => 200,
            'GetEarnCommutLeaveDetail' => $GetEarnCommutLeaveDetail,
        ]);
    }

    ##### Update Earned Commuted Leave Detail

    public function UpdateEarnedCommutedLeaveDetail(Request $request)
    {
        $FromDate = str_replace('/', '-', $request->input('FromDate'));
        $ToDate = str_replace('/', '-', $request->input('ToDate'));

        $EmployeeELCLId = $request->input('EmployeeELCLId');
        
        $j_data['EmployeeId'] =  $request->input('EmployeeId');
        $j_data['FromDate'] = date('Y-m-d', strtotime($FromDate));
        $j_data['ToDate'] = date('Y-m-d', strtotime($ToDate));
        $j_data['EarnedLeave'] =  $request->input('EarnedLeave');
        $j_data['CommutedLeave'] =  $request->input('CommutedLeave');
        $j_data['Updated_at'] = date('Y-m-d H:i:s', time());
        $j_data['Updated_by'] = session('UserId');
        
        $UpdateLeaveDetailData = EmployeeEarnedCommutedLeave::where('EmployeeELCLId', $EmployeeELCLId)->update($j_data);
        if ($UpdateLeaveDetailData) {
            return response()->json('status_success');
        } else {
            return response()->json('status_failed');
        }
    }

    ### Delete Earned Commuted Leave Detail of the Employee

    public function DeleteEarnedCommutedLeaveDetail(Request $request)
    {
       
        $EmployeeELCLId = $request->input('EmployeeELCLId');
        $earned_commuted_data = array();
        $earned_commuted_data['Updated_by'] = session('UserId');
        $earned_commuted_data['IsDeleted'] = 1;
        // $earned_commuted_data['Status'] = 0;
         
        $DeleteLeaveDetailData = EmployeeEarnedCommutedLeave::where('EmployeeELCLId', $EmployeeELCLId)->update($earned_commuted_data);
        if ($DeleteLeaveDetailData) {
            return response()->json('status_success');
        } else {
            return response()->json('status_failed');
        }
    }

    
}