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/EmployeeResignationController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\EmployeeResignation;
use App\Models\EmployeeProfile;
use App\Models\Profiles;
use App\Models\Approval;

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


class EmployeeResignationController extends Controller
{
    protected $userLib;
    protected $UserSessionId;
    protected $TeamList = array();
    protected $LevelList = array();
    protected $ViewProfileIds = array();
    protected $ViewApprovalUsers = array();

    public function __construct(UserLib $userLib)
    {
        $this->userLib = $userLib;
    }

    public function getAccessUserProfileList($ProfileId = '')
    {
        $users = Profiles::select('*')
            ->leftJoin('tbl_roles', 'tbl_roles.RoleId', '=', 'tbl_profiles.RoleId')
            ->where('tbl_roles.ReadPermission', 'like', '1')
            ->where('tbl_roles.WritePermission', 'like', '1')
            ->where('tbl_roles.UpdatePermission', 'like', '1')
            ->where('tbl_roles.ApprovalPermission', 'like', '1')
            ->where('tbl_profiles.ServiceBookApprovalPermission', 'like', 'YES')
            ->where('tbl_profiles.ProfileId', 'like', $ProfileId) //check not equal to user profile                   
            ->get();

        if ($users->count() > 0) {   //email is exist                
            foreach ($users as $key => $UValue) {
                $ProfileId = $UValue['ProfileId'];
                $ProfileName = $UValue['ProfileName'];
                $ParentId = $UValue['ParentId'];
                $this->TeamList[] = $UValue;
                $this->ViewProfileIds[] = $ProfileId;
                if ($ParentId) {
                    $this->getAccessUserProfileList($ParentId);
                }
            }
        }

        return $responseData = $this->ViewProfileIds;

        //return response()->json($responseData);
    }



    // Get Approval User 
    public function getApprovalUserLevel($ProfileId = '', $Level = 1)
    {

        $users = Profiles::select('*')
            ->leftJoin('tbl_roles', 'tbl_roles.RoleId', '=', 'tbl_profiles.RoleId')
            ->where('tbl_roles.ReadPermission', 'like', '1')
            ->where('tbl_roles.WritePermission', 'like', '1')
            ->where('tbl_roles.UpdatePermission', 'like', '1')
            ->where('tbl_roles.ApprovalPermission', 'like', '1')
            //->where('tbl_profiles.ServiceBookApprovalPermission','like','YES')
            ->where('tbl_profiles.ProfileId', 'like', $ProfileId) //check not equal to user profile                   
            ->get();

        // echo $users;
        //exit;

        if ($users->count() > 0) {   //email is exist                
            foreach ($users as $key => $UValue) {
                $ProfileId = $UValue['ProfileId'];
                $ProfileName = $UValue['ProfileName'];
                $ParentId = $UValue['ParentId'];
                $this->TeamList[] = $UValue;
                $this->ViewApprovalUsers[] = $ProfileId;
                //$this->LevelList[] = $Level;
                //echo $Level.'-'.$ParentId.'<br/>';

                if ($Level >= 2) {
                    continue;
                }
                if ($ParentId) {
                    $Level++;
                    $this->getApprovalUserLevel($ParentId, $Level);
                }
            }
        }
        return $this->ViewApprovalUsers;
    }

    public function empResignation()
    {
        $this->UserSessionId = session('UserId');
        if (empty($this->UserSessionId)) {
            return redirect('/');
        }
        $EmpResignation = EmployeeResignation::select('tbl_employee_resignation.*', 'tbl_employees.EmployeeName as EmployeeName')
            ->leftJoin('tbl_employees', 'tbl_employee_resignation.EmployeeId', '=', 'tbl_employees.EmployeeId')
            ->where('tbl_employee_resignation.Status', '=', '1')
            ->where('tbl_employee_resignation.IsDeleted', '=', '0')
            ->get();
        return view('admin.EmployeeProfile.employee-resignation', ['EmpResignation' => $EmpResignation]);
    }


    #### Check Duplicate Resignation
    public function checkDuplicateResignation(Request $request)
    {
        $this->UserSessionId = session('UserId');
        if (empty($this->UserSessionId)) {
            return redirect('/');
        }

        $EmployeeId = $request->input('EmployeeId');

        $CheckResignation = EmployeeResignation::select('tbl_employee_resignation.*')
            ->where('EmployeeId', $EmployeeId)
            ->where('IsDeleted', '0')
            ->first();
        if ($CheckResignation) {
            echo 'false';
        } else {
            echo 'true';
        }
    }

    #### Store Resignation
    public function storeResignation(Request $request)
    {
        $this->UserSessionId = session('UserId');
        if (empty($this->UserSessionId)) {
            return redirect('/');
        }

        $input = $request->all();
        $data = $input;

        $ResignationOrderDate = '';
        if ($request->input('OrderDateOfResignation')) {
            $OrderDateOfResignation = str_replace('/', '-', $request->input('OrderDateOfResignation'));
            $ResignationOrderDate = date('Y-m-d', strtotime($OrderDateOfResignation));
            $data['ResignationOrderDate'] =  $ResignationOrderDate;
        }


        $ResignationDate = '';
        if ($request->input('DateOfResignation')) {
            $DateOfResignation = str_replace('/', '-', $request->input('DateOfResignation'));
            $ResignationDate = date('Y-m-d', strtotime($DateOfResignation));
            $data['ResignationDate'] =  $ResignationDate;
        }


        // Order File
        $CertName = $this->userLib->useridGenrator();
        $ResignationOrderFilePath = '';
        if ($request->hasFile('ResignationOrderFile')) {
            $file = $request->file('ResignationOrderFile');
            $extension = $file->getClientOriginalExtension();
            $FileName = $CertName . '-' . time() . '.' . $extension;

            Storage::putFileAs(
                'public/resignation_order',
                $file,
                $FileName
            );
            $ResignationOrderFilePath = Storage::url('resignation_order/' . $FileName);
            $data['ResignationOrderFilePath'] = $ResignationOrderFilePath;
        }


        unset($data['_token']);
        unset($data['OrderDateOfResignation']);
        unset($data['DateOfResignation']);
        unset($data['ResignationOrderFile']);

        $data['ResignationId'] =  $this->userLib->useridGenrator();

        $data['IsDeleted'] = 0;
        $data['Status'] = 1;
        $data['Created_by'] = session('UserId');
        $data['Created_at'] = date('Y-m-d H:i:s', time());
        $data['Updated_by'] = session('UserId');
        $data['Updated_at'] = date('Y-m-d H:i:s', time());

        $Resignation = EmployeeResignation::insert($data);
        if ($Resignation) {
            return response()->json('status_success');
        } else {
            return response()->json('status_failed');
        }
    }

    ### Edit Resignation
    public function editResignation(Request $request)
    {
        $this->UserSessionId = session('UserId');
        if (empty($this->UserSessionId)) {
            return redirect('/');
        }

        $ResignationId = $request->input('ResignationId');
        $GetResignation = EmployeeResignation::select('tbl_employee_resignation.*', 'tbl_employees.EmployeeName as EmployeeName')
            ->leftJoin('tbl_employees', 'tbl_employee_resignation.EmployeeId', '=', 'tbl_employees.EmployeeId')
            ->where('tbl_employee_resignation.ResignationId', $ResignationId)
            //->where('IsDeleted', '=', '0')
            ->get()->first();

        return response()->json([
            'status' => 200,
            'GetResignation' => $GetResignation,
        ]);
    }

    #### Update Resignation
    public function updateResignation(Request $request)
    {
        $this->UserSessionId = session('UserId');
        if (empty($this->UserSessionId)) {
            return redirect('/');
        }

        $input = $request->all();
        $data = $input;

        $ResignationId = $request->input('ResignationId');

        $ResignationOrderDate = '';
        if ($request->input('OrderDateOfResignation')) {
            $OrderDateOfResignation = str_replace('/', '-', $request->input('OrderDateOfResignation'));
            $ResignationOrderDate = date('Y-m-d', strtotime($OrderDateOfResignation));
            $data['ResignationOrderDate'] =  $ResignationOrderDate;
        }


        $ResignationDate = '';
        if ($request->input('DateOfResignation')) {
            $DateOfResignation = str_replace('/', '-', $request->input('DateOfResignation'));
            $ResignationDate = date('Y-m-d', strtotime($DateOfResignation));
            $data['ResignationDate'] =  $ResignationDate;
        }


        // Order File
        $CertName = $this->userLib->useridGenrator();
        $ResignationOrderFilePath = '';
        if ($request->hasFile('ResignationOrderFile')) {
            $file = $request->file('ResignationOrderFile');
            $extension = $file->getClientOriginalExtension();
            $FileName = $CertName . '-' . time() . '.' . $extension;

            Storage::putFileAs(
                'public/resignation_order',
                $file,
                $FileName
            );
            $ResignationOrderFilePath = Storage::url('resignation_order/' . $FileName);
            $data['ResignationOrderFilePath'] = $ResignationOrderFilePath;
        }


        unset($data['_token']);
        unset($data['OrderDateOfResignation']);
        unset($data['DateOfResignation']);
        unset($data['ResignationOrderFile']);


        $data['Updated_by'] = session('UserId');
        $data['Updated_at'] = date('Y-m-d H:i:s', time());

        $Resignation = EmployeeResignation::where('ResignationId', $ResignationId)->update($data);
        if ($Resignation) {
            return response()->json('status_success');
        } else {
            return response()->json('status_failed');
        }
    }

    #### Delete Resignation
    public function deleteResignation(Request $request)
    {
        $this->UserSessionId = session('UserId');
        if (empty($this->UserSessionId)) {
            return redirect('/');
        }

        $data = array();
        $ResignationId = $request->input('ResignationId');
        $data['IsDeleted'] = 1;
        $data['Status'] = 0;
        $data['Updated_by'] = session('UserId');
        $data['Updated_at'] = date('Y-m-d H:i:s', time());

        $deleteData = EmployeeResignation::where('ResignationId', $ResignationId)->update($data);
        if ($deleteData) {
            return response()->json('status_success');
        } else {
            return response()->json('status_failed');
        }
    }

    #### Delete Permanent Resignation
    public function destroyResignation(Request $request)
    {
        $this->UserSessionId = session('UserId');
        if (empty($this->UserSessionId)) {
            return redirect('/');
        }
        $ResignationId = $request->input('ResignationId');
        $destroyData = EmployeeResignation::where('ResignationId', $ResignationId);
        $destroyData->delete();
        if ($destroyData) {
            return response()->json('status_success');
        } else {
            return response()->json('status_failed');
        }
    }

    #### Submit For Approval
    public function SubmitResignationApproval(Request $request, $ProfileId = '')
    {
        $this->UserSessionId = session('UserId');
        if (empty($this->UserSessionId)) {
            return redirect('/');
        }
        $data = array();
        $EmployeeId = $request->input('EmployeeId');
        $ProfileId = $request->input('ProfileId');
        $UserId = $request->input('UserId');
        $ApprovalRemark = $request->input('ApprovalRemark');
        // In case of Farward for review
        $ModuleId = $request->input('ModuleId');

        $data['ApprovalLock'] = 1;
        $data['ApprovalStatus'] = 0;
        $data['Updated_by'] = session('UserId');
        $data['Updated_at'] = date('Y-m-d H:i:s', time());
        $data['Created_by'] = session('UserId');
        $data['Created_at'] = date('Y-m-d H:i:s', time());

        if ($ModuleId) {

            $GetNoOfApproval = EmployeeResignation::where('EmployeeId', $EmployeeId)->get()->first();
            $NoOfApproval = $GetNoOfApproval->NoOfApproval + 1;
            // Update Employee Resignation Table
            $data['NoOfApproval'] = $NoOfApproval;
            // Update Approval Table in case of Farward for review
            $update_approval['ApprovalStatus'] =  '3'; // Approve = 1, Reject = 2, Forward = 3.
            $update_approval['ApprovalLevel'] = $NoOfApproval;
            $update_approval['Created_by'] = session('UserId');
            $update_approval['Created_at'] = date('Y-m-d H:i:s', time());
            $update_approval['Updated_by'] = session('UserId');
            $update_approval['Updated_at'] = date('Y-m-d H:i:s', time());

            $ApprovalRequest = EmployeeResignation::where('EmployeeId', $EmployeeId)->update($data);
            $Update_Approval_Module = Approval::where('ModuleId', $ModuleId)->where('UserId', session('UserId'))->update($update_approval);
            if ($ApprovalRequest) {

                $approval =  array();
                $approval['ModuleId'] =  $ModuleId;
                $approval['EmployeeId'] =  $EmployeeId;
                $approval['ModuleTitle'] =  'Resignation';
                $approval['ApprovalStatus'] =  '0';
                $approval['ApprovalComments'] =  $ApprovalRemark;
                $approval['ApprovalFrom'] = session('UserId');
                $approval['ProfileId'] = $ProfileId;
                $approval['UserId'] = $UserId;

                //$approval['ApprovalLevel'] = '';
                $approval['Created_at'] = date('Y-m-d H:i:s', time());
                $approval['Created_by'] = session('UserId');
                $approval['Updated_by'] = session('UserId');
                $approval['Updated_at'] = date('Y-m-d H:i:s', time());
                $Approval_Module = Approval::insert($approval);

                if ($Approval_Module) {
                    return response()->json('status_success');
                } else {
                    return response()->json('status_fail');
                }
            }
        } else {

            $data['NoOfApproval'] = 0;
            $data['ApprovalComment'] = '';
            $ApprovalRequest = EmployeeResignation::where('EmployeeId', $EmployeeId)->update($data);
            if ($ApprovalRequest) {

                $approval =  array();
                $approval['ModuleId'] =  $this->userLib->useridGenrator();
                $approval['EmployeeId'] =  $EmployeeId;
                $approval['ModuleTitle'] =  'Resignation';
                $approval['ApprovalStatus'] =  '0';
                $approval['ApprovalComments'] =  $ApprovalRemark;
                $approval['ApprovalFrom'] = session('UserId');
                $approval['ProfileId'] = $ProfileId;
                $approval['UserId'] = $UserId;

                //$approval['ApprovalLevel'] = '';
                $approval['Created_at'] = date('Y-m-d H:i:s', time());
                $approval['Created_by'] = session('UserId');
                $approval['Updated_by'] = session('UserId');
                $approval['Updated_at'] = date('Y-m-d H:i:s', time());
                $Approval_Module = Approval::insert($approval);

                if ($Approval_Module) {
                    return response()->json('status_success');
                } else {
                    return response()->json('status_fail');
                }
            }
        }
    }

    #### Approve Employee Resignation
    public function ApproveResignation(Request $request, $EmployeeId = '', $ModuleId = '')
    {
        $this->UserSessionId = session('UserId');
        if (empty($this->UserSessionId)) {
            return redirect('/');
        }

        $LoginUserProfileId = session('ProfileId');
        $EmployeeId = $request->input('EmployeeId');
        $ModuleId = $request->input('ModuleId');
        $ApprovalStatusTbl = $request->input('ApprovalStatus');


        $data = array();
        $GetNoOfApproval = EmployeeResignation::where('EmployeeId', $EmployeeId)->get()->first();
        $NoOfApproval = $GetNoOfApproval->NoOfApproval + 1;

        $data['ApprovalStatus'] = 1;
        $data['NoOfApproval'] = $NoOfApproval;
        $data['Updated_by'] = session('UserId');
        $data['Updated_at'] = date('Y-m-d H:i:s', time());

        $approval =  array();
        $approval['ApprovalStatus'] = $ApprovalStatusTbl;
        $approval['ApprovalLevel'] = $NoOfApproval;
        $approval['Updated_by'] = session('UserId');
        $approval['Updated_at'] = date('Y-m-d H:i:s', time());
        $ApprovalUpdate = Approval::where('ModuleId', $ModuleId)->where('EmployeeId', $EmployeeId)->where('UserId', session('UserId'))->where('ProfileId', $LoginUserProfileId)->update($approval);

        if ($ApprovalUpdate) {
            $getApprovals = Approval::where('ModuleId', $ModuleId)->where('EmployeeId', $EmployeeId)->where('ProfileId', $LoginUserProfileId)->where('ApprovalStatus', '1')->get();
            $NumberOfApproval = $getApprovals->count();
            //$data['NumberOfApproval'] = $NumberOfApproval;
            $approveData = EmployeeResignation::where('EmployeeId', $EmployeeId)->update($data);
            if ($approveData) {
                return response()->json('status_success');
            } else {
                return response()->json('status_failed');
            }
        } else {
            return response()->json('status_failed');
        }
    }

    #### Reject Employee Resignation
    public function RejectResignation(Request $request)
    {
        $this->UserSessionId = session('UserId');
        if (empty($this->UserSessionId)) {
            return redirect('/');
        }

        $data = array();
        $EmployeeId = $request->input('EmployeeId');
        $Comment = $request->input('RejectComment');
        $LoginUserProfileId = session('ProfileId');

        $ModuleId = $request->input('ModuleId');
        $ApprovalStatusTbl = $request->input('ApprovalStatus');

        $GetNoOfApproval = EmployeeResignation::where('EmployeeId', $EmployeeId)->get()->first();
        $NoOfApproval = $GetNoOfApproval->NoOfApproval + 1;

        // Rejected = 2,
        $data['ApprovalStatus'] = $ApprovalStatusTbl;
        $data['ApprovalLock'] = 0;
        $data['NoOfApproval'] = $NoOfApproval;
        $data['ApprovalComment'] = $Comment;
        $data['Updated_by'] = session('UserId');
        $data['Updated_at'] = date('Y-m-d H:i:s', time());
        
        $approval =  array();
        $approval['ApprovalStatus'] = $ApprovalStatusTbl;
        $approval['ApprovalComments'] = $Comment;
        $approval['ApprovalLevel'] = $NoOfApproval;
        $approval['Updated_by'] = session('UserId');
        $approval['Updated_at'] = date('Y-m-d H:i:s', time());
        // $ApprovalUpdate = Approval::where('ModuleId',$ModuleId)->where('EmployeeId',$EmployeeId)->where('ProfileId',$LoginUserProfileId)->update($approval);
        $ApprovalUpdate = Approval::where('ModuleId', $ModuleId)->where('EmployeeId', $EmployeeId)->where('UserId', session('UserId'))->where('ProfileId', $LoginUserProfileId)->update($approval);

        if ($ApprovalUpdate) {

            $getApprovals = Approval::where('ModuleId', $ModuleId)->where('EmployeeId', $EmployeeId)->where('ProfileId', $LoginUserProfileId)->where('ApprovalStatus', '1')->get();
            $NumberOfApproval = $getApprovals->count();
            //$data['NumberOfApproval'] = $NumberOfApproval;
            $rejectData = EmployeeResignation::where('EmployeeId', $EmployeeId)->update($data);
            if ($rejectData) {

                return response()->json('status_success');
            } else {
                return response()->json('status_failed');
            }
        } else {
            return response()->json('status_failed');
        }
    }
}