示例#1
0
 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);
 }
示例#2
0
 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));
         }
     }
 }