/**
  * It's used for controlling attendance sheet (list, add),
  * render to attendance_sheet view
  * @param string $action
  * @param int    $attendance_id
  * @param int    $student_id
  * @param bool   $edit
  */
 public function attendance_sheet($action, $attendance_id, $student_id = 0, $edit = true)
 {
     $attendance = new Attendance();
     $data = array();
     $data['attendance_id'] = $attendance_id;
     $groupId = isset($_REQUEST['group_id']) ? $_REQUEST['group_id'] : null;
     $data['users_in_course'] = $attendance->get_users_rel_course($attendance_id, $groupId);
     $filter_type = 'today';
     if (!empty($_REQUEST['filter'])) {
         $filter_type = $_REQUEST['filter'];
     }
     $isDrhOfCourse = CourseManager::isUserSubscribedInCourseAsDrh(api_get_user_id(), api_get_course_info());
     if ($edit == true) {
         if (api_is_allowed_to_edit(null, true) || $isDrhOfCourse) {
             $data['users_presence'] = $attendance->get_users_attendance_sheet($attendance_id, 0, $groupId);
         }
     } else {
         if (!empty($student_id)) {
             $user_id = intval($student_id);
         } else {
             $user_id = api_get_user_id();
         }
         if (api_is_allowed_to_edit(null, true) || api_is_coach(api_get_session_id(), api_get_course_int_id()) || $isDrhOfCourse) {
             $data['users_presence'] = $attendance->get_users_attendance_sheet($attendance_id, 0, $groupId);
         } else {
             $data['users_presence'] = $attendance->get_users_attendance_sheet($attendance_id, $user_id, $groupId);
         }
         $data['faults'] = $attendance->get_faults_of_user($user_id, $attendance_id, $groupId);
         $data['user_id'] = $user_id;
     }
     $data['next_attendance_calendar_id'] = $attendance->get_next_attendance_calendar_id($attendance_id);
     $data['next_attendance_calendar_datetime'] = $attendance->get_next_attendance_calendar_datetime($attendance_id);
     if (strtoupper($_SERVER['REQUEST_METHOD']) == "POST") {
         if (isset($_POST['hidden_input'])) {
             foreach ($_POST['hidden_input'] as $cal_id) {
                 $users_present = array();
                 if (isset($_POST['check_presence'][$cal_id])) {
                     $users_present = $_POST['check_presence'][$cal_id];
                 }
                 $attendance->attendance_sheet_add($cal_id, $users_present, $attendance_id);
             }
         }
         $data['users_in_course'] = $attendance->get_users_rel_course($attendance_id, $groupId);
         $my_calendar_id = null;
         if (is_numeric($filter_type)) {
             $my_calendar_id = $filter_type;
             $filter_type = 'calendar_id';
         }
         $data['attendant_calendar'] = $attendance->get_attendance_calendar($attendance_id, $filter_type, $my_calendar_id, $groupId);
         $data['attendant_calendar_all'] = $attendance->get_attendance_calendar($attendance_id, 'all', null, $groupId);
         $data['users_presence'] = $attendance->get_users_attendance_sheet($attendance_id, 0, $groupId);
         $data['next_attendance_calendar_id'] = $attendance->get_next_attendance_calendar_id($attendance_id);
         $data['next_attendance_calendar_datetime'] = $attendance->get_next_attendance_calendar_datetime($attendance_id);
     } else {
         $data['attendant_calendar_all'] = $attendance->get_attendance_calendar($attendance_id, 'all', null, $groupId);
         $data['attendant_calendar'] = $attendance->get_attendance_calendar($attendance_id, $filter_type, null, $groupId);
     }
     $data['edit_table'] = intval($edit);
     $data['is_locked_attendance'] = $attendance->is_locked_attendance($attendance_id);
     $this->view->set_data($data);
     $this->view->set_layout('layout');
     $this->view->set_template('attendance_sheet');
     $this->view->render();
 }
 /**
  * It's used for controlling attendace sheet (list, add),
  * render to attendance_sheet view
  * @param string action
  * @param int	 attendance id
  */
 public function attendance_sheet($action, $attendance_id, $user_id = 0, $edit = true)
 {
     $attendance = new Attendance();
     $data = array();
     $data['attendance_id'] = $attendance_id;
     $data['attendance_obj'] = $attendance;
     $data['attendance_states'] = $attendance->get_attendance_states();
     $data['users_in_course'] = $attendance->get_users_rel_course($attendance_id);
     $filter_type = 'today';
     if (!empty($user_id)) {
         $user_id = intval($user_id);
     } else {
         $user_id = api_get_user_id();
     }
     if (!empty($_REQUEST['filter'])) {
         $filter_type = $_REQUEST['filter'];
     }
     if ($edit == true) {
         if (api_is_allowed_to_edit(null, true)) {
             $data['users_presence'] = $attendance->get_users_attendance_sheet($attendance_id);
         }
     } else {
         if (api_is_allowed_to_edit(null, true) || api_is_coach(api_get_session_id(), api_get_course_int_id())) {
             $data['users_presence'] = $attendance->get_users_attendance_sheet($attendance_id);
         } else {
             $data['users_presence'] = $attendance->get_users_attendance_sheet($attendance_id, $user_id);
         }
         $data['faults'] = $attendance->get_faults_of_user($user_id, $attendance_id);
         $data['user_id'] = $user_id;
     }
     $data['next_attendance_calendar_id'] = $attendance->get_next_attendance_calendar_id($attendance_id);
     $data['next_attendance_calendar_datetime'] = $attendance->get_next_attendance_calendar_datetime($attendance_id);
     if (strtoupper($_SERVER['REQUEST_METHOD']) == "POST") {
         if (isset($_POST['hidden_input'])) {
             $columns_to_update = $_POST['hidden_input'];
             $columns_to_update = array_unique(array_filter($columns_to_update));
             foreach ($columns_to_update as $cal_id) {
                 $users_result = array();
                 if (isset($_POST['check_presence'][$cal_id])) {
                     $users_result = $_POST['check_presence'][$cal_id];
                 }
                 $user_final_results = array();
                 if (!empty($users_result)) {
                     foreach ($users_result as $result) {
                         //Example: state_1_link_2_12_3  ==> state_[stateid]_YY_[userid]_calid
                         $user_status = explode('_', $result);
                         if (isset($user_status[0]) && $user_status[0] == 'state' && isset($user_status[4]) && isset($user_status[1])) {
                             $user_final_results[$user_status[4]] = $user_status[1];
                         }
                     }
                 }
                 if (!empty($user_final_results)) {
                     $attendance->attendance_sheet_add($cal_id, $user_final_results, $attendance_id, false, true);
                 }
             }
         }
         $data['users_in_course'] = $attendance->get_users_rel_course($attendance_id);
         $my_calendar_id = null;
         if (is_numeric($filter_type)) {
             $my_calendar_id = $filter_type;
             $filter_type = 'calendar_id';
         }
         $data['attendant_calendar'] = $attendance->get_attendance_calendar($attendance_id, $filter_type, $my_calendar_id);
         $data['attendant_calendar_all'] = $attendance->get_attendance_calendar($attendance_id);
         $data['users_presence'] = $attendance->get_users_attendance_sheet($attendance_id);
         $data['next_attendance_calendar_id'] = $attendance->get_next_attendance_calendar_id($attendance_id);
         $data['next_attendance_calendar_datetime'] = $attendance->get_next_attendance_calendar_datetime($attendance_id);
     } else {
         $data['attendant_calendar_all'] = $attendance->get_attendance_calendar($attendance_id);
         $data['attendant_calendar'] = $attendance->get_attendance_calendar($attendance_id, $filter_type);
     }
     $data['edit_table'] = intval($edit);
     $data['is_locked_attendance'] = $attendance->is_locked_attendance($attendance_id);
     $this->view->set_data($data);
     $this->view->set_layout('layout');
     $this->view->set_template('attendance_sheet');
     $this->view->render();
 }
 static function transaction_36($original_data, $web_service_details)
 {
     global $data_list;
     $data = Migration::soap_call($web_service_details, 'asistenciaDetalles', array('uididpersona' => $original_data['item_id'], 'uididprograma' => $original_data['orig_id'], 'uididfecha' => $original_data['info'], 'intIdSede' => $original_data['branch_id']));
     if ($data['error'] == false) {
         $uidIdPrograma = $original_data['orig_id'];
         $uidIdPersona = $original_data['item_id'];
         $attendance_date = $data['date_assist'];
         $attendance_user_status = $data['status'];
         // modified in the asistenciaDetalles function
         $session_id = self::get_session_id_by_programa_id($uidIdPrograma, $data_list);
         $user_id = self::get_user_id_by_persona_id($uidIdPersona, $data_list);
         if (empty($user_id)) {
             return array('message' => "User does not exists in DB: {$uidIdPersona}", 'status_id' => self::TRANSACTION_STATUS_FAILED);
         }
         if (empty($session_id)) {
             return array('message' => "Session does not exists {$uidIdPrograma}", 'status_id' => self::TRANSACTION_STATUS_FAILED);
         }
         $course_list = SessionManager::get_course_list_by_session_id($session_id);
         if (!empty($course_list)) {
             $course_data = current($course_list);
             if (isset($course_data['code'])) {
                 //Check if user exist in the session
                 $status = SessionManager::get_user_status_in_course_session($user_id, $course_data['id'], $session_id);
                 if ($status === false) {
                     return array('message' => "User #{$user_id} is not registered in course code: {$course_data['code']} - session_id: {$session_id}", 'status_id' => self::TRANSACTION_STATUS_FAILED);
                 }
                 $time = self::get_horario_value($session_id);
                 $attendance_date .= " {$time}:00";
                 $attendance = new Attendance();
                 $course_info = api_get_course_info($course_data['code']);
                 $attendance->set_course_id($course_info['code']);
                 $attendance->set_course_int_id($course_info['real_id']);
                 $attendance->set_session_id($session_id);
                 $attendance_list = $attendance->get_attendances_list($course_info['real_id'], $session_id);
                 if (empty($attendance_list)) {
                     return array('message' => "Attendance not found for course code: {$course_info['code']} - session_id: {$session_id}", 'status_id' => self::TRANSACTION_STATUS_FAILED);
                     //only 1 course per session
                 } else {
                     $attendance_data = current($attendance_list);
                     $attendance_id = $attendance_data['id'];
                     error_log("Attendance found in attendance_id = {$attendance_id} - course code: {$course_info['code']} - session_id: {$session_id} - {$attendance_date}");
                 }
                 $cal_info = $attendance->get_attendance_calendar_data_by_date($attendance_id, $attendance_date);
                 if ($cal_info && isset($cal_info['id'])) {
                     $cal_id = $cal_info['id'];
                 } else {
                     //Creating the attendance date
                     $attendance->set_date_time($attendance_date);
                     $cal_id = $attendance->attendance_calendar_add($attendance_id, true);
                     error_log("Creating a new calendar item {$cal_id}");
                     /*
                                             return array(
                                                 'message' => "Attendance calendar does not exist for date: $attendance_date in attendance_id = $attendance_id - course code: {$course_info['code']} - session_id: $session_id",
                                                 'status_id' => self::TRANSACTION_STATUS_FAILED
                                             );*/
                 }
                 $users_present = array($user_id => $attendance_user_status);
                 $attendance_sheet_before = $attendance->attendance_sheet_get_info($cal_id, $user_id);
                 $result = $attendance->attendance_sheet_add($cal_id, $users_present, $attendance_id, false, true);
                 $attendance_sheet_after = $attendance->attendance_sheet_get_info($cal_id, $user_id);
                 if ($result) {
                     return array('entity' => 'attendance_sheet', 'before' => $attendance_sheet_before, 'after' => $attendance_sheet_after, 'message' => "Attendance sheet edited with", 'status_id' => self::TRANSACTION_STATUS_SUCCESSFUL);
                 } else {
                     return array('message' => "Attendance sheet can't be edited attendance_id: {$attendance_id} - cal_id: {$cal_id} - user_id: {$user_id} - course: {$course_info['code']} - session_id: {$session_id} ", 'status_id' => self::TRANSACTION_STATUS_FAILED);
                 }
             } else {
                 $message = "Course is not set";
             }
         } else {
             $message = "NO course found for session id: {$session_id}";
         }
         return array('message' => $message, 'status_id' => self::TRANSACTION_STATUS_FAILED);
     } else {
         return $data;
     }
 }