public function applyLeave() { $params = $this->_check_parameter(array('leavetypeID', 'startdate', 'enddate', 'starttime', 'endtime', 'remarks')); if ($this->_session_info->role_id == 1 || $this->_session_info->role_id == 2) { $this->_response['code'] = -8; $this->_response['error_message'] = "Master Admin and Centre Admin Cannot Apply for Leave"; echo json_encode($this->_response); exit; } $remarks = $params->remarks; $leavetypeID = $params->leavetypeID; $start_date = $params->startdate; $start_time = $params->starttime; $end_date = $params->enddate; $end_time = $params->endtime; $from = strtotime($start_date . ' ' . $start_time); $to = strtotime($end_date . ' ' . $end_time); $today = strtotime(date('Y-m-d')); $this->load->model('leave/work_profile_model'); $work_profile_id = $this->work_profile_model->select('id')->getOneWhere(array('user_id' => $this->_user->id), IMS_DB_PREFIX . 'work_profile'); if (empty($work_profile_id)) { $this->_response['error_message'] = 'Failed to take leave! Your work profile has not been set yet.'; } elseif ($from > $to) { $this->_response['error_message'] = 'From date can not be greater than To date.'; } elseif ($from < $today) { $this->_response['error_message'] = 'You can not take leave before today.'; } else { $work_profile_id = $work_profile_id->id; $work_profile = $this->work_profile_model->get_work_profile_by_id($work_profile_id); $leave_taken = calculate_leave_hours($start_date, $start_time, $end_date, $end_time, $work_profile); $available_leave = $this->work_profile_model->select('hours')->getOneWhere(array('user_id' => $this->_user->id, 'leave_type_id' => $leavetypeID), IMS_DB_PREFIX . 'entitled_leave'); $available_leave = $available_leave ? $available_leave->hours : 0; if ($leave_taken > $available_leave) { $this->_response['error_message'] = "Sorry Your balance is less than your request hour..."; } else { $leave_request = array('leave_type_id' => $leavetypeID, 'user_id' => $this->_user->id, 'start_date' => $start_date, 'start_time' => $start_time, 'end_date' => $end_date, 'end_time' => $end_time, 'status' => 0, 'description' => $remarks, 'is_deleted' => 0, 'applied_date' => date('Y-m-d'), 'hours' => $leave_taken); $result = $this->work_profile_model->insertRow($leave_request, IMS_DB_PREFIX . 'leave_requests'); if ($result) { $this->_response['msg'] = "You leave application will be submitted to your supervisor for approval. Once approved, you will be notified by email"; } } } echo json_encode($this->_response); }
public function save_leave_request($request_id = NULL) { if ($this->input->post()) { if ($this->_validate_leave_request()) { $data = array('leave_type_id' => $this->input->post('leave_type_id'), 'user_id' => $this->input->post('staff_id'), 'status' => '0', 'start_date' => mysqlDateFormat($this->input->post('start_date')), 'end_date' => mysqlDateFormat($this->input->post('end_date')), 'start_time' => $this->input->post('start_time'), 'end_time' => $this->input->post('end_time'), 'description' => $this->input->post('remarks'), 'is_deleted' => '0', 'applied_date' => date('Y-m-d')); $this->load->model('work_profile_model'); $work_profile_id = $this->work_profile_model->select('id')->getOneWhere(array('user_id' => $this->input->post('staff_id')), IMS_DB_PREFIX . 'work_profile'); if (empty($work_profile_id)) { die(json_encode(array('status' => 'error', 'msg' => 'Fail to take leave! Your work profile has not been set yet.'))); } else { $work_profile_id = $work_profile_id->id; } $work_profile = $this->work_profile_model->get_work_profile_by_id($work_profile_id); $time = calculate_leave_hours($this->input->post('start_date'), $this->input->post('start_time'), $this->input->post('end_date'), $this->input->post('end_time'), $work_profile); $data['hours'] = $time; if ($request_id != NULL) { $result = $this->leave_model->updateRow($request_id, $data, 'id', IMS_DB_PREFIX . 'leave_requests'); $data['request_id'] = $request_id; $result ? die(json_encode(array('status' => 'success', 'msg' => 'Leave Request Edited Successfully.', 'data' => $data))) : die(json_encode(array('status' => 'error', 'msg' => 'Cannot Edit Leave Application. Please try again later.'))); } else { $request_id = $this->leave_model->insertRow($data, IMS_DB_PREFIX . 'leave_requests'); $data['request_id'] = $request_id; $selected_year = $this->input->post('selected_year'); if ($this->input->post('leave_type_id') == 1) { $data['off_claimed'] = $this->leave_model->getUserBalance($this->input->post('staff_id'), 1, $selected_year); } $total_leave_claimed = $this->leave_model->getTotalLeaveTaken($data['user_id'], $selected_year, 1, 'not'); $total_leave_off_claimed = $this->leave_model->getTotalLeaveTaken($data['user_id'], $selected_year, 1); $total_leave_accumulated = $this->leave_model->getTotalLeaveAccumulated($data['user_id'], $selected_year); $leave_request = $this->leave_model->getLeaveRequestByID($request_id); $leave_request->start_date = dateFormat($leave_request->start_date); $leave_request->end_date = dateFormat($leave_request->end_date); $leave_request->start_time = timeFormat($leave_request->start_time); $leave_request->end_time = timeFormat($leave_request->end_time); $leave_request->applied_date = dateFormat($leave_request->applied_date); $leave_request->leave_left = $total_leave_accumulated - ($total_leave_claimed + $total_leave_off_claimed); $leave_request->leave_off_claimed = $total_leave_off_claimed; if ($request_id) { $user = $this->leave_model->getFromId($this->input->post('staff_id'), 'id', IMS_DB_PREFIX . 'user'); global $_current_centre_role; $centre_admin = centre_admin($_current_centre_role->centre_id); if (!empty($centre_admin)) { $subject = 'A new leave is requested.'; // $message = '<p>' . $centre_admin->first_name . ',</p>' // . '<p>Leave have been requested' // . 'by : ' . $user->first_name . ' ' . $user->last_name . '</p>' // . '<p>From : ' . $this->input->post('start_date') . '</p>' // . '<p>To : ' . $this->input->post('end_date') . '</p>' // . '<p>Waiting for your approval!</p>'; $leave_type_name = $this->leave_model->select('leave_type')->getOneWhere(array('id' => $this->input->post('leave_type_id')), IMS_DB_PREFIX . 'leave_types')->leave_type; $message = "<p>{name_of_superior},</p>" . "<p>{leave_type} application has been submitted by: {name_of_subordinate}</p>" . "<p>From : {from_start_date} {from_start_time}</p>" . "<p>To : {to_start_date} {to_start_time}</p>" . "<a href='{link_to_leave_application}'>Please review the leave application here</a>"; $leave_info = array('name_of_superior' => $centre_admin->first_name, 'leave_type' => $leave_type_name, 'name_of_subordinate' => $user->first_name . ' ' . $user->last_name, 'from_start_date' => $this->input->post('start_date'), 'from_start_time' => $this->input->post('start_time'), 'to_start_date' => $this->input->post('end_date'), 'to_start_time' => $this->input->post('end_time'), 'link_to_leave_application' => site_url("leave/leave_manage")); $this->load->library('parser'); $message = $this->parser->parse_string($message, $leave_info, TRUE); // die($message); $this->send_mail($centre_admin->email, 'Centre Admin', $subject, $message); } die(json_encode(array('status' => 'success', 'msg' => 'Leave Application Submitted Successfully.', 'data' => $leave_request))); } else { die(json_encode(array('status' => 'error', 'msg' => 'Cannot Submit Leave Application. Please try again later.'))); } } } else { $response = array('status' => 'validation_error', 'error' => array()); if (form_error('leave_type_id')) { $response['error']['leave_type_id'] = form_error('leave_type_id'); } if (form_error('start_date')) { $response['error']['start_date'] = form_error('start_date'); } if (form_error('end_date')) { $response['error']['end_date'] = form_error('end_date'); } if (form_error('start_time')) { $response['error']['start_time'] = form_error('start_time'); } if (form_error('end_time')) { $response['error']['end_time'] = form_error('end_time'); } die(json_encode($response)); } } }