public function changeLeaveStatus($req){ //$employee = $this->baseService->getElement('Employee',$this->getCurrentEmployeeId()); $employeeLeave = new EmployeeLeave(); $employeeLeave->Load("id = ?",array($req->id)); if($employeeLeave->id != $req->id){ return new IceResponse(IceResponse::ERROR,"Leave not found"); } if($this->user->user_level != 'Admin'){ return new IceResponse(IceResponse::ERROR,"Only an admin can do this"); } $oldLeaveStatus = $employeeLeave->status; $employeeLeave->status = $req->status; $ok = $employeeLeave->Save(); if(!$ok){ LogManager::getInstance()->info($employeeLeave->ErrorMsg()); return new IceResponse(IceResponse::ERROR,"Error occured while saving leave infomation. Please contact admin"); } $employeeLeaveLog = new EmployeeLeaveLog(); $employeeLeaveLog->employee_leave = $employeeLeave->id; $employeeLeaveLog->user_id = $this->baseService->getCurrentUser()->id; $employeeLeaveLog->status_from = $oldLeaveStatus; $employeeLeaveLog->status_to = $employeeLeave->status; $employeeLeaveLog->created = date("Y-m-d H:i:s"); $employeeLeaveLog->data = isset($req->reason)?$req->reason:""; $ok = $employeeLeaveLog->Save(); if(!$ok){ LogManager::getInstance()->info($employeeLeaveLog->ErrorMsg()); } $employee = $this->getEmployeeById($employeeLeave->employee); if($oldLeaveStatus != $employeeLeave->status){ $this->sendLeaveStatusChangedEmail($employee, $employeeLeave); } $this->baseService->audit(IceConstants::AUDIT_ACTION, "Leave status changed \ from:".$oldLeaveStatus."\ to:".$employeeLeave->status." \ id:".$employeeLeave->id); $currentEmpId = $this->getCurrentProfileId(); if(!empty($currentEmpId)){ $employee = $this->baseService->getElement('Employee',$currentEmpId); if($employeeLeave->status != "Pending"){ $notificationMsg = "Your leave has been $employeeLeave->status by ".$employee->first_name." ".$employee->last_name; if(!empty($req->reason)){ $notificationMsg.=" (Note:".$req->reason.")"; } } $this->baseService->notificationManager->addNotification($employeeLeave->employee,$notificationMsg,'{"type":"url","url":"g=modules&n=leaves&m=module_Leaves#tabEmployeeLeaveApproved"}',IceConstants::NOTIFICATION_LEAVE); } return new IceResponse(IceResponse::SUCCESS,""); }
public function changeLeaveStatus($req) { $employee = $this->baseService->getElement('Employee', $this->getCurrentProfileId(), null, true); $subordinate = new Employee(); $subordinates = $subordinate->Find("supervisor = ?", array($employee->id)); $subordinatesIds = array(); foreach ($subordinates as $sub) { $subordinatesIds[] = $sub->id; } $employeeLeave = new EmployeeLeave(); $employeeLeave->Load("id = ?", array($req->id)); if ($employeeLeave->id != $req->id) { return new IceResponse(IceResponse::ERROR, "Leave not found"); } if (!in_array($employeeLeave->employee, $subordinatesIds) && $this->user->user_level != 'Admin') { return new IceResponse(IceResponse::ERROR, "This leave does not belong to any of your subordinates"); } $oldLeaveStatus = $employeeLeave->status; $employeeLeave->status = $req->status; if ($oldLeaveStatus == $req->status) { return new IceResponse(IceResponse::SUCCESS, ""); } $ok = $employeeLeave->Save(); if (!$ok) { LogManager::getInstance()->info($employeeLeave->ErrorMsg()); return new IceResponse(IceResponse::ERROR, "Error occured while saving leave infomation. Please contact admin"); } $employeeLeaveLog = new EmployeeLeaveLog(); $employeeLeaveLog->employee_leave = $employeeLeave->id; $employeeLeaveLog->user_id = $this->baseService->getCurrentUser()->id; $employeeLeaveLog->status_from = $oldLeaveStatus; $employeeLeaveLog->status_to = $employeeLeave->status; $employeeLeaveLog->created = date("Y-m-d H:i:s"); $employeeLeaveLog->data = isset($req->reason) ? $req->reason : ""; $ok = $employeeLeaveLog->Save(); if (!$ok) { LogManager::getInstance()->info($employeeLeaveLog->ErrorMsg()); } if (!empty($this->emailSender) && $oldLeaveStatus != $employeeLeave->status) { $leavesEmailSender = new LeavesEmailSender($this->emailSender, $this); $leavesEmailSender->sendLeaveStatusChangedEmail($employee, $employeeLeave); } $this->baseService->audit(IceConstants::AUDIT_ACTION, "Leave status changed \\ from:" . $oldLeaveStatus . "\\ to:" . $employeeLeave->status . " \\ id:" . $employeeLeave->id); if ($employeeLeave->status != "Pending") { $notificationMsg = "Your leave has been {$employeeLeave->status} by " . $employee->first_name . " " . $employee->last_name; if (!empty($req->reason)) { $notificationMsg .= " (Note:" . $req->reason . ")"; } } $this->baseService->notificationManager->addNotification($employeeLeave->employee, $notificationMsg, '{"type":"url","url":"g=modules&n=leaves&m=module_Leaves#tabEmployeeLeaveApproved"}', IceConstants::NOTIFICATION_LEAVE); return new IceResponse(IceResponse::SUCCESS, ""); }
public function getLeaveDaysReadonly($req) { $leaveId = $req->leave_id; $leaveLogs = array(); $employeeLeave = new EmployeeLeave(); $employeeLeave->Load("id = ?", array($leaveId)); $currentLeavePeriodResp = $this->getCurrentLeavePeriod($employeeLeave->date_start, $employeeLeave->date_end); if ($currentLeavePeriodResp->getStatus() != IceResponse::SUCCESS) { return new IceResponse(IceResponse::ERROR, $currentLeavePeriodResp->getData()); } else { $currentLeavePeriod = $currentLeavePeriodResp->getData(); } $employee = $this->baseService->getElement('Employee', $employeeLeave->employee, null, true); $rule = $this->getLeaveRule($employee, $employeeLeave->leave_type, $currentLeavePeriod); $currentLeavePeriodResp = $this->getCurrentLeavePeriod($employeeLeave->date_start, $employeeLeave->date_end); if ($currentLeavePeriodResp->getStatus() != IceResponse::SUCCESS) { return new IceResponse(IceResponse::ERROR, $currentLeavePeriodResp->getData()); } else { $currentLeavePeriod = $currentLeavePeriodResp->getData(); } $leaveMatrix = $this->getAvailableLeaveMatrixForEmployeeLeaveType($employee, $currentLeavePeriod, $employeeLeave->leave_type); $leaves = array(); $leaves['totalLeaves'] = floatval($leaveMatrix[0]); $leaves['pendingLeaves'] = floatval($leaveMatrix[1]); $leaves['approvedLeaves'] = floatval($leaveMatrix[2]); $leaves['rejectedLeaves'] = floatval($leaveMatrix[3]); $leaves['cancelRequestedLeaves'] = floatval($leaveMatrix[5]); $leaves['availableLeaves'] = $leaves['totalLeaves'] - $leaves['pendingLeaves'] - $leaves['approvedLeaves'] - $leaves['cancelRequestedLeaves']; $leaves['attachment'] = $employeeLeave->attachment; $employeeLeaveDay = new EmployeeLeaveDay(); $days = $employeeLeaveDay->Find("employee_leave = ?", array($leaveId)); $employeeLeaveLog = new EmployeeLeaveLog(); $logsTemp = $employeeLeaveLog->Find("employee_leave = ? order by created", array($leaveId)); foreach ($logsTemp as $empLeaveLog) { $t = array(); $t['time'] = $empLeaveLog->created; $t['status_from'] = $empLeaveLog->status_from; $t['status_to'] = $empLeaveLog->status_to; $t['time'] = $empLeaveLog->created; $userName = null; if (!empty($empLeaveLog->user_id)) { $lgUser = new User(); $lgUser->Load("id = ?", array($empLeaveLog->user_id)); if ($lgUser->id == $empLeaveLog->user_id) { if (!empty($lgUser->employee)) { $lgEmployee = new Employee(); $lgEmployee->Load("id = ?", array($lgUser->employee)); $userName = $lgEmployee->first_name . " " . $lgEmployee->last_name; } else { $userName = $lgUser->userName; } } } if (!empty($userName)) { $t['note'] = $empLeaveLog->data . " (by: " . $userName . ")"; } else { $t['note'] = $empLeaveLog->data; } $leaveLogs[] = $t; } return new IceResponse(IceResponse::SUCCESS, array($days, $leaves, $leaveId, $employeeLeave, $leaveLogs)); }