/**
  * It's used for adding attendace,
  * render to attendance_add or attendance_list view
  */
 public function attendance_add()
 {
     $attendance = new Attendance();
     $data = array();
     if (strtoupper($_SERVER['REQUEST_METHOD']) == "POST") {
         if (!empty($_POST['title'])) {
             $check = Security::check_token();
             if ($check) {
                 $attendance->set_name($_POST['title']);
                 $attendance->set_description($_POST['description']);
                 $attendance->set_attendance_qualify_title($_POST['attendance_qualify_title']);
                 $attendance->set_attendance_weight($_POST['attendance_weight']);
                 $link_to_gradebook = false;
                 if (isset($_POST['attendance_qualify_gradebook']) && $_POST['attendance_qualify_gradebook'] == 1) {
                     $link_to_gradebook = true;
                 }
                 $attendance->category_id = $_POST['category_id'];
                 $last_id = $attendance->attendance_add($link_to_gradebook);
                 Security::clear_token();
             }
             $param_gradebook = '';
             if (isset($_SESSION['gradebook'])) {
                 $param_gradebook = '&gradebook=' . Security::remove_XSS($_SESSION['gradebook']);
             }
             //header('location:index.php?action=attendance_sheet_list&attendance_id='.$last_id.'&'.api_get_cidreq().$param_gradebook);
             header('location:index.php?action=calendar_add&attendance_id=' . $last_id . '&' . api_get_cidreq() . $param_gradebook);
             exit;
         } else {
             $data['error'] = true;
             $this->view->set_data($data);
             $this->view->set_layout('layout');
             $this->view->set_template('attendance_add');
             $this->view->render();
         }
     } else {
         $this->view->set_data($data);
         $this->view->set_layout('layout');
         $this->view->set_template('attendance_add');
         $this->view->render();
     }
 }
if (api_is_allowed_to_edit(null, true)) {
    $param_gradebook = '';
    if (isset($_SESSION['gradebook'])) {
        $param_gradebook = '&gradebook=' . Security::remove_XSS($_SESSION['gradebook']);
    }
    echo '<div class="actions">';
    echo '<a href="index.php?' . api_get_cidreq() . $param_gradebook . '&action=attendance_add">' . Display::return_icon('new_attendance_list.png', get_lang('CreateANewAttendance'), '', ICON_SIZE_MEDIUM) . '</a>';
    /*echo '<a href="index.php?'.api_get_cidreq().$param_gradebook.'&action=calendar_logins">'.
      Display::return_icon('attendance_list.png',get_lang('Logins'),'',ICON_SIZE_MEDIUM).'</a>';*/
    echo '</div>';
}
$attendance = new Attendance();
if ($attendance->get_number_of_attendances() == 0) {
    $attendance->set_name(get_lang('Attendances'));
    $attendance->set_description(get_lang('Attendances'));
    $attendance->attendance_add();
}
$table = new SortableTable('attendance_list', array('Attendance', 'get_number_of_attendances'), array('Attendance', 'get_attendance_data'), $default_column);
$table->set_additional_parameters($parameters);
$table->set_header(0, '', false, array('style' => 'width:20px;'));
$table->set_header(1, get_lang('Name'), true);
$table->set_header(2, get_lang('Description'), true);
$table->set_header(3, get_lang('CountDoneAttendance'), true, array('style' => 'width:90px;'));
if (api_is_allowed_to_edit(null, true)) {
    $table->set_header(4, get_lang('Actions'), false, array('style' => 'text-align:center'));
    $actions = array('attendance_set_invisible_select' => get_lang('SetInvisible'), 'attendance_set_visible_select' => get_lang('SetVisible'));
    $allow = api_get_configuration_value('allow_delete_attendance');
    if ($allow) {
        $actions['attendance_delete_select'] = get_lang('DeleteAllSelectedAttendances');
    }
    $table->set_form_actions($actions);
 static function transaction_34($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)) {
             //There's only one course per session so far
             $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);
                 }
                 // attendance are registered with date + time, so get time
                 // from session schedule
                 $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 = array();
                 if (is_array($data_list) && isset($data_list) && $data_list['boost_sessions'] && isset($data_list['sessions_attendances'][$course_info['real_id']][$session_id])) {
                     //error_log('Found reference to an existing sheet in data_list');
                     $list = $data_list['sessions_attendances'][$course_info['real_id']][$session_id];
                     foreach ($list as $at_id) {
                         $attendance_list[$at_id] = array('id' => $at_id);
                         //error_log('attendance sheet is '.$at_id);
                     }
                 } else {
                     $attendance_list = $attendance->get_attendances_list($course_info['real_id'], $session_id);
                     //error_log('Gotten attendance_sheet from table '.$attendance_list[0]['id']);
                 }
                 if (count($attendance_list) == 0) {
                     $d = array('session_id' => $session_id, 'user_id' => $user_id, 'fecha' => $attendance_date, 'status' => $attendance_user_status);
                     $attendance->set_name('Asistencia');
                     $attendance->set_description('');
                     $link_to_gradebook = false;
                     $attendance_id = $attendance->attendance_add($link_to_gradebook, self::default_admin_id);
                     if (is_array($data_list) && isset($data_list) && $data_list['boost_sessions']) {
                         $data_list['sessions_attendances'][$course_info['real_id']][$session_id][] = $attendance_sheet_id;
                     }
                     //error_log("Attendance created in attendance_id = $attendance_id - course code: {$course_info['code']} - session_id: $session_id - $attendance_date");
                     //self::create_attendance($d);
                     /*return array(
                           'entity' => 'attendance_sheet',
                           'before' => null,
                           'after'  => $attendance_sheet_after,
                           'message' => "Attendance sheet added with id: $result",
                           'status_id' => self::TRANSACTION_STATUS_SUCCESSFUL
                       );*/
                     /*
                     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);
                     error_log('Setting date ' . $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_info = $attendance->attendance_sheet_get_info($cal_id, $user_id);
                 if (empty($attendance_sheet_info)) {
                     $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);
                 } else {
                     return array('message' => "Attendance sheet can't be added, because it already exists - 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);
                 }
                 if ($result) {
                     return array('entity' => 'attendance_sheet', 'before' => null, 'after' => $attendance_sheet_after, 'message' => "Attendance sheet added with id: {$result}", 'status_id' => self::TRANSACTION_STATUS_SUCCESSFUL);
                 } else {
                     return array('message' => "Attendance sheet can't be added 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 = "Something is wrong with the course";
             }
         } else {
             $message = "NO course found for session id: {$session_id}";
         }
         return array('message' => $message, 'status_id' => self::TRANSACTION_STATUS_FAILED);
     } else {
         return $data;
     }
 }