page_data=globalfunc::getMessage($parent,$parent->lang,'crtraining');
if(count($parent->params)==0)
{
$this->functraining($parent);
}else
{
$qry_params=explode ("?",$parent->params[0]);
$parameter_val=strtolower($qry_params[0]);
switch($parameter_val){
case "baselevel":
case 'getassessmentnames':
case "trainingcalenderlist":
case "updatetraining":
case "cancelreschedulelist":
case "declinetrainingreasonlist":
case "canceltraining":
case "rescheduletraining":
case "acceptdeclinetraining":
case "updatetrainingpresentabsent":
case "traininglevelscore":
case "updatetrainingscore":
case "amacknowledgement":
case "trainingattendancenotification":
case "trainingattendancenotificationupdate":
case "trainingqrcodegeneration":
case "trainingdseqrcode":
case "traininggroupimage":
case "trainingsummery":
case "dsefeedbacklist":
case "dsescoreresultlist":
case "trainingfeedbackquestion":
case "trainingsfeedbacklist":
case "trainingalluserfeedbackquestion":
case "trainingcolors":
$this->$parameter_val($parent );
break;
default:
$this->functraining($parent);
break;
}
}
$parent->response(array('response'=>'failed', 'message' => 'PAGE NOT FOUND'), 404);
//print_r($parent);
}
//
// GET BASE LEVEL
private function baselevel ($parent) {
globalfunc::checkMethodType($parent,array('GET'));
globalfunc::checkAuthrozation($parent,array('type'=>'user'));
globalfunc::checkParamCount($parent,1);
$training_str = "SELECT `lvl_id`, `lvl_name`, `training_days`, `training_gap_days`, `assessment_values` FROM ".TABLE_TRAINING_LEVEL." ORDER BY lvl_id ";
$trainer_arr = $parent->getQueryValue($training_str);
$arr = (count($trainer_arr)>0)?$trainer_arr:array();
$parent->response(array('response'=>'success', 'data'=>$arr,'message'=>$this->page_data['success1']),200);
}
// Training Colors
private function trainingcolors ($parent) {
globalfunc::checkMethodType($parent,array('GET'));
globalfunc::checkAuthrozation($parent,array('type'=>'user'));
globalfunc::checkParamCount($parent,1);
$training_colors = array();
$training_colors[0]['id'] = 1;
$training_colors[0]['name'] = 'Training Scheduled not Published';
$training_colors[0]['color_code'] = '#9900CC';
$training_colors[1]['id'] = 2;
$training_colors[1]['name'] = 'Training Scheduled';
$training_colors[1]['color_code'] = '#3F51B5';
$training_colors[2]['id'] = 3;
$training_colors[2]['name'] = 'Training Confirmed';
$training_colors[2]['color_code'] = '#6D6D6D';
$training_colors[3]['id'] = 4;
$training_colors[3]['name'] = 'Training In Progress';
$training_colors[3]['color_code'] = '#F67280';
$training_colors[4]['id'] = 5;
$training_colors[4]['name'] = 'Training Completed';
$training_colors[4]['color_code'] = '#933A16';
$training_colors[5]['id'] = 6;
$training_colors[5]['name'] = 'Training Closed';
$training_colors[5]['color_code'] = '#348E00';
$training_colors[6]['id'] = 7;
$training_colors[6]['name'] = 'Training Reschedule';
$training_colors[6]['color_code'] = '#F9B316';
$training_colors[7]['id'] = 8;
$training_colors[7]['name'] = 'Training Cancelled';
$training_colors[7]['color_code'] = '#F90303';
$parent->response(array('response'=>'success', 'data'=>$training_colors,'message'=>$this->page_data['success1']),200);
}
// Get Assessment Names
private function getassessmentnames ($parent) {
globalfunc::checkMethodType($parent,array('GET'));
globalfunc::checkAuthrozation($parent,array('type'=>'user'));
globalfunc::checkParamCount($parent,3);
$title = escape_str($parent->params[1]);
$segment = escape_str($parent->params[2]);
if ($segment == 1) {
$segment = 'Parents/Guardian';
}
else if ($segment == 2) {
$segment = 'Instructor';
}
else if ($segment == 3) {
$segment = 'Student Learner';
}
$training_str = "SELECT `assessment_values`, lvl_name FROM ".TABLE_TRAINING_LEVEL." WHERE lvl_id = '" . $title . "' ";
$trainer_arr = $parent->getQueryValue($training_str);
$data = array();
if(count($trainer_arr)>0) {
$assessment_values_array = explode(',', $trainer_arr[0]->assessment_values);
foreach ($assessment_values_array as $key => $value) {
if ($value == 1) {
$data['pre'] = 'PRE-' . strtoupper($trainer_arr[0]->lvl_name) . '-' . $segment . '-ASSESSMENT';
}
else if ($value == 2) {
$data['post'] = 'POST-' . strtoupper($trainer_arr[0]->lvl_name) . '-' . $segment . '-ASSESSMENT';
}
}
}
$parent->response(array('response'=>'success', 'data'=>$data,'message'=>$this->page_data['success1']),200);
}
// FUNCTIONS
private function functraining ($parent) {
switch($parent->get_request_method()) {
case "GET" : $this->trainingdetails($parent); break;
case "POST" : $this->newtraining($parent); break;
case "DELETE": $this->canceltraining($parent);break;
default:
$parent->response(array('response'=>'failed'),404);
break;
}
}
private function trainingdetails ($parent) {
globalfunc::checkMethodType($parent,array('GET' ));
globalfunc::checkAuthrozation($parent,array('type'=>'user'));
$current_role = $parent->current_user_data->role;
//globalfunc::checkParamCount($parent,1);
$schedule_id = escape_str($parent->params[0]);
$input_date = escape_str($parent->params[1]);
$schedule_str = "SELECT s.*, tl.lvl_name as title, CONCAT(u.fname, ' ', u.lname) as organizer_name FROM ".TABLE_TRAINING_SCHEDULE." s JOIN " . TABLE_TRAINING_LEVEL . " tl ON s.lvl_id = tl.lvl_id JOIN ".TABLE_USER." u ON s.trainer_id = u.userid WHERE s.schedule_id='".$schedule_id."' LIMIT 1 ";
$schedule_arr = $parent->getQueryValue($schedule_str);
if(count($schedule_arr) > 0) {
$todaydate_time = date('Y-m-d H:i:s');
// Business Segment Name
if ($schedule_arr[0]->business_segment == 2) {
$schedule_arr[0]->segment_name = 'Parents/Guardian';
}
else if ($schedule_arr[0]->business_segment == 1) {
$schedule_arr[0]->segment_name = 'Instructor';
}
else if ($schedule_arr[0]->business_segment == 3) {
$schedule_arr[0]->segment_name = 'Student Learner';
}
// Get Assessment Ids
$assessment_str = "SELECT assessmentid, assessmenttype FROM " . TABLE_ASSESSMENT . " WHERE schedule_id = '" . $schedule_arr[0]->schedule_id . "' ";
if ($current_role == 10) {
$schedule_arr[0]->userid = $parent->current_user_id;
}
$schedule_arr[0]->startdate = date_format(date_create($schedule_arr[0]->start_date), "Y-m-d");
//$schedule_arr[0]->starttime = date_format(date_create($schedule_arr[0]->start_date), "H:i:s");
$schedule_arr[0]->enddate = date_format(date_create($schedule_arr[0]->end_date), "Y-m-d");
//$schedule_arr[0]->endtime = date_format(date_create($schedule_arr[0]->end_date), "H:i:s");
if($schedule_arr[0]->training_group_image != '') {
//CONNECT S3
$s3 = awsfileserver::connectS3();
$schedule_arr[0]->training_group_image = awsfileserver::getS3FileUrl($s3,S3_BUCKET,S3_TRAINING_URL.$schedule_arr[0]->training_group_image);
}else {
$schedule_arr[0]->training_group_image = USER_NOIMAGE_URL;
}
$datediff = strtotime($schedule_arr[0]->enddate) - strtotime($schedule_arr[0]->startdate);
$schedule_arr[0]->training_days = round($datediff / (60 * 60 * 24)) + 1;
$starttime_array = json_decode(stripslashes($schedule_arr[0]->starttime), true);
$endtime_array = json_decode(stripslashes($schedule_arr[0]->endtime), true);
$todaydate = date('Y-m-d');
$schedule_arr[0]->submit_enable = 0;
if ( (strtotime($schedule_arr[0]->startdate) <= strtotime($todaydate)) && (strtotime($schedule_arr[0]->enddate) >= strtotime($todaydate)) ) {
$datediff = strtotime($todaydate) - strtotime($schedule_arr[0]->startdate);
$schedule_arr[0]->current_day = round($datediff / (60 * 60 * 24)) + 1;
$currentday = round($datediff / (60 * 60 * 24));
// Attendance Update Status before and after 30 mins
$current_starttime = $starttime_array[$currentday];
$current_endtime = $endtime_array[$currentday];
$session_starttime = date("H:i", strtotime('-60 minutes', strtotime($current_starttime)));
// $session_endtime = date("H:i", strtotime('+30 minutes', strtotime($current_endtime)));
$today_time = date("H:i");
//if ( (strtotime($session_starttime) <= strtotime($today_time)) && (strtotime($session_endtime) >= strtotime($today_time)) ) {
if ( (strtotime($session_starttime) <= strtotime($today_time)) ) {
$schedule_arr[0]->attendance_update_status = 1;
}
//$schedule_arr[0]->attendance_update_status = 1;
// Attendance and Score Submit Button Enable
if (strtotime($schedule_arr[0]->enddate) == strtotime($todaydate)) {
$schedule_arr[0]->submit_enable = 1;
}
$attendance_submit_array = json_decode($schedule_arr[0]->attendance_submit, true);
$am_acknowledgement_array = json_decode($schedule_arr[0]->am_acknowledgement, true);
//print $attendance_submit_array[$currentday];
$schedule_arr[0]->current_attendance_submit_status = $schedule_arr[0]->current_am_acknowledgement_status = 0;
if (!empty($attendance_submit_array[$currentday])) {
$schedule_arr[0]->current_attendance_submit_status = $attendance_submit_array[$currentday];
}
if (!empty($am_acknowledgement_array[$currentday])) {
$schedule_arr[0]->current_am_acknowledgement_status = $am_acknowledgement_array[$currentday];
}
//print_r($attendance_submit_array);
//print($am_acknowledgement_array);
}
$schedule_arr[0]->notes = '';
if ($schedule_arr[0]->current_day == 1) {
$schedule_arr[0]->notes = 'Note: On clicking Save button, Pre-Assesment will be triggered to all participants who are marked present.';
}
if (strtotime($schedule_arr[0]->enddate) == strtotime($todaydate)) {
if (!empty($schedule_arr[0]->notes)) {
$schedule_arr[0]->notes .= '
';
}
$schedule_arr[0]->notes .= 'Note: On clicking Submit button, Post-Assesment will be triggered to all participants who are marked present.';
}
$schedule_arr[0]->training_completed = false;
if ( (strtotime($schedule_arr[0]->enddate) < strtotime($todaydate)) ) {
$schedule_arr[0]->training_completed = true;
}
// Checking 6 hours checking for accept
$schedule_arr[0]->is_active_hours = 1;
$training_start_date = date("Y-m-d", strtotime($schedule_arr[0]->start_date));
$date_time_diff_str = strtotime($training_start_date . ' ' . $starttime_array[0]) - strtotime($todaydate_time);
$date_time_diff_str = round($date_time_diff_str / (60 * 60));
// if ($date_time_diff_str < 1) {
// $schedule_arr[0]->is_active_hours = 0;
// }
// Training Update or Reaschedule before 1 hours
$schedule_arr[0]->training_update_status = true;
if ($date_time_diff_str < 1) {
$schedule_arr[0]->training_update_status = false;
}
//PARTICIPANT
switch ($current_role) {
case "7":
$filter_cond = " AND d.am_email = '".$parent->current_user_data->emailid."'";
break;
case "6":
// Reginal Manager
$filter_cond = " AND d.rm_email = '".$parent->current_user_data->emailid."'";
break;
case "7":
// Area Manager
$filter_cond = " AND d.am_email = '".$parent->current_user_data->emailid."'";
break;
case "10":
// User
$filter_cond = " AND p.userid='".$parent->current_user_id."'";
break;
case "14":
// Dealer
$filter_cond = " AND u.dealer_code='".$parent->current_user_data->dealer_code."'";
break;
default :
$filter_cond = " ";
break;
}
$participant_str = "SELECT p.`userid`, p.`is_attendance`,p.remarks, p.`roleplay_or_demo`, p.`assignment`, p.`performance`, p.`certification`, p.overall, p.absence_reason, p.manual_attendance_reason, p.qr_code, u.smpin, p.status, p.acknowledge_by, p.decline_reason, drl.name as decline_reason_name, p.decline_reason_desc, CONCAT(fname, ' ', lname)as name, u.profile_photo, d.dealer_name, d.dealer_code, d.am_name, d.am_email, p.creatorid, p.am_absence_reason, am_drl.name as am_absence_reason_name, p.am_absence_reason_desc FROM ".TABLE_TRAINING_PARTICIPANT." p LEFT JOIN ".TABLE_TRAINING_DECLINE_REASON_LIST." drl ON p.decline_reason = drl.id LEFT JOIN ".TABLE_TRAINING_DECLINE_REASON_LIST." am_drl ON p.am_absence_reason = am_drl.id JOIN ".TABLE_USER." u ON p.userid=u.userid JOIN ".DMS_DEALER." d ON d.dealer_code = u.dealer_code WHERE p.schedule_id='".$schedule_arr[0]->schedule_id."' " . $filter_cond . " ";
$participant_arr = $parent->getQueryValue($participant_str);
// Getting Percentage of Training Level
$score_percentage_str = "SELECT id, name, percentage FROM ".TABLE_TRAINING_LEVEL_SCORE." WHERE level = '" . $schedule_arr[0]->lvl_id. "'";
$score_percentage_arr = $parent->getQueryValue($score_percentage_str);
foreach ($score_percentage_arr as $percentage_key => $percentages) {
if (strtolower($percentages->name) == '2') {
$pre_test_percentage = $percentages->percentage;
}
elseif (strtolower($percentages->name) == '3') {
$post_test_percentage = $percentages->percentage;
}
}
if(count($participant_arr) > 0) {
foreach($participant_arr as $skey => $res_part) {
// Getting Pre and Post Assessment Scores
$res_part->pre_test = $res_part->post_test = $res_part->pre_test_percentage = $res_part->post_test_percentage = 0;
$assessment_str = "SELECT a.`assessmenttype`, au.`highscore` FROM ".TABLE_ASSESSMENT_USER." au JOIN ".TABLE_ASSESSMENT." a ON a.assessmentid = au.assessmentid WHERE a.schedule_id = '".$schedule_arr[0]->schedule_id."' AND au.userid = '" . $res_part->userid . "' AND au.highscorearid != 0 ";
$assessment_arr = $parent->getQueryValue($assessment_str);
if(count($assessment_arr) > 0) {
foreach ($assessment_arr as $assessment_key => $assessments) {
if ($assessments->assessmenttype == 1) {
$res_part->pre_test = $assessments->highscore;
$res_part->pre_test_percentage = ($res_part->pre_test * $pre_test_percentage) / 100;
}
elseif ($assessments->assessmenttype == 2) {
$res_part->post_test = $assessments->highscore;
$res_part->post_test_percentage = ($res_part->post_test * $post_test_percentage) / 100;
}
}
}
// if ($res_part->roleplay_or_demo == 0) {
// $res_part->roleplay_or_demo = '';
// }
if($res_part->profile_photo != '') {
//CONNECT S3
$s3 = awsfileserver::connectS3();
$res_part->profile_photo = awsfileserver::getS3FileUrl($s3,S3_BUCKET,S3_PROFILE_IMAGE_URL.$res_part->profile_photo);
}else {
$res_part->profile_photo = USER_NOIMAGE_URL;
}
// attendance array
if (!empty($input_date)) {
$datediff = strtotime($input_date) - strtotime($schedule_arr[0]->startdate);
$input_date_count = round($datediff / (60 * 60 * 24)) + 1;
$day_cond = ' AND day = ' . $input_date_count;
}
//$res_part->attendance = '';
$participant_atten_str = "SELECT `day`, `ispresent`, `image`, `manual_attendance_reason`, `absence_reason` FROM ".TABLE_TRAINING_PARTICIPANT_ATTENDANCE." WHERE schedule_id = '".$schedule_arr[0]->schedule_id."' AND userid = '" . $res_part->userid . "' " . $day_cond;
$participant_atten_arr = $parent->getQueryValue($participant_atten_str);
foreach ($participant_atten_arr as $atten_key => $atten_details) {
if($atten_details->image != '') {
//CONNECT S3
$s3 = awsfileserver::connectS3();
//$atten_details->image = awsfileserver::getS3FileUrl($s3,S3_BUCKET,S3_PROFILE_IMAGE_URL.$atten_details->image);
$atten_details->image = awsfileserver::getS3FileUrl($s3,S3_BUCKET,S3_TRAINING_URL.$atten_details->image);
}else {
$atten_details->image = USER_NOIMAGE_URL;
}
}
if (!empty($input_date) ) {
$res_part->attendance = $participant_atten_arr[0];
}
else {
$res_part->attendance = $participant_atten_arr;
}
}
$assessment_str = "SELECT assessmentid, assessmentname, lvl_id, if(assessmenttype=1, 'pre', 'Post') as assessmenttype, total_question, assessmenttime FROM ".TABLE_ASSESSMENT." WHERE schedule_id='".$schedule_arr[0]->schedule_id."'";
$assessment_arr = $parent->getQueryValue($assessment_str);
$schedule_arr[0]->participant = $participant_arr;
$schedule_arr[0]->assessment = $assessment_arr;
}
}
$parent->response(array('response'=>'success', 'data'=> $schedule_arr, 'message'=>$this->page_data['success1']),200);
}
private function trainingcalenderlist ($parent) {
globalfunc::checkMethodType($parent,array('POST' ));
globalfunc::checkAuthrozation($parent,array('type'=>'user'));
globalfunc::checkParamCount($parent,1);
$month = escape_str($parent->_request["month"]);
$date_array = explode('-', $month);
if (strlen($date_array[1]) == 1) {
$month = $date_array[0] . '-0'.$date_array[1];
}
$current_role = $parent->current_user_data->role;
switch ($current_role) {
case "3":
$filter_cond = "";
break;
case "4":
// Zone Manager
$dealer_cond = " JOIN " . DMS_DEALER . " d ON u.dealer_code = d.dealer_code ";
$filter_cond = " AND d.zm_email = '".$parent->current_user_data->emailid."'";
break;
case "5":
$filter_cond = " AND s.trainer_id='".$parent->current_user_id."'";
break;
case "6":
// Reginal Manager
$dealer_cond = " JOIN " . DMS_DEALER . " d ON u.dealer_code = d.dealer_code ";
$filter_cond = " AND d.rm_email = '".$parent->current_user_data->emailid."'";
break;
case "7":
// Area Manager
$dealer_cond = " JOIN " . DMS_DEALER . " d ON u.dealer_code = d.dealer_code ";
$filter_cond = " AND d.am_email = '".$parent->current_user_data->emailid."'";
break;
case "10":
// User
$filter_cond = " AND p.userid='".$parent->current_user_id."'";
break;
case "14":
// Dealer
$filter_cond = " AND u.dealer_code='".$parent->current_user_data->dealer_code."'";
// $dealer_cond = " ON u.emailid=d.am_email ";
// $usercond = " AND u.role=7 AND d.zone='".$trainer_arr[0]->zone."'";
break;
default :$parent->response(array('response'=>'failed', 'message'=>$this->page_data['error2']), 406); break;
}
if ($current_role != 5) {
$save_training_cond = " AND s.status > 0 ";
}
//$month = strtotime($month);
for($i = 1; $i <= 31; $i++) {
if (strlen($i) == 1 ) {
$i = '0' . $i;
}
$training_date = $month . '-' . $i;
$training_date_starttime = $month . '-' . $i . " 00:00:00";
$training_date_endtime = $month . '-' . $i . " 23:59:59";
//print $schedule_str = "SELECT s.*, tl.lvl_name as title FROM ".TABLE_TRAINING_SCHEDULE." s INNER JOIN " . TABLE_TRAINING_LEVEL . " tl ON s.lvl_id = tl.lvl_id INNER JOIN " . TABLE_TRAINING_PARTICIPANT . " p ON s.schedule_id = p.schedule_id WHERE s.start_date <= '".$training_date ."' AND s.end_date >= '".$training_date ."' " . $filter_cond . " ";
//print $schedule_str = "SELECT s.*, tl.lvl_name as title FROM ".TABLE_TRAINING_SCHEDULE." s INNER JOIN " . TABLE_TRAINING_LEVEL . " tl ON s.lvl_id = tl.lvl_id WHERE (s.start_date <= '".$training_date ."' OR s.end_date >= '".$training_date ."') " . $filter_cond . " ";
$schedule_str = "SELECT DISTINCT (s.`schedule_id`), s.*, tl.lvl_name as title FROM ".TABLE_TRAINING_SCHEDULE." s INNER JOIN " . TABLE_TRAINING_LEVEL . " tl ON s.lvl_id = tl.lvl_id INNER JOIN " . TABLE_TRAINING_PARTICIPANT . " p ON s.schedule_id = p.schedule_id JOIN ".TABLE_USER." u ON p.userid = u.userid " . $dealer_cond . " WHERE (('".$training_date ."' between s.start_date AND s.end_date ) OR s.start_date LIKE '" . $training_date . "%' )" . $save_training_cond . $filter_cond . " ORDER BY s.start_date ";
$schedule_arr = $parent->getQueryValue($schedule_str);
if(count($schedule_arr) > 0) {
$today_date = date('Y-m-d H:i:s');
foreach ($schedule_arr as $schedule_key => $schedule_details) {
// Dates
$schedule_details->startdate = date_format(date_create($schedule_details->start_date), "Y-m-d");
//$schedule_details->starttime = date_format(date_create($schedule_details->start_date), "H:i:s");
$schedule_details->enddate = date_format(date_create($schedule_details->end_date), "Y-m-d");
// $schedule_details->endtime = date_format(date_create($schedule_details->end_date), "H:i:s");
$datediff = strtotime($todaydate) - strtotime($schedule_details->startdate);
$schedule_arr[$schedule_key]->current_day = round($datediff / (60 * 60 * 24)) + 1;
$currentday = round($datediff / (60 * 60 * 24));
// Start and end times
$starttime_array = json_decode(stripslashes($schedule_details->starttime), true);
$endtime_array = json_decode($schedule_details->endtime, true);
$training_start_datetime = $schedule_details->startdate . ' ' . $starttime_array[0];
$current_starttime = $starttime_array[$currentday];
$current_endtime = $endtime_array[$currentday];
$session_starttime = date("H:i", strtotime('-60 minutes', strtotime($current_starttime)));
// $session_endtime = date("H:i", strtotime('+30 minutes', strtotime($current_endtime)));
$today_time = date("H:i");
// if ( (strtotime($session_starttime) <= strtotime($today_time)) && (strtotime($session_endtime) >= strtotime($today_time)) ) {
if ( (strtotime($session_starttime) <= strtotime($today_time)) ) {
$schedule_arr[$schedule_key]->attendance_update_status = 1;
}
// Days Calculation
$datediff = strtotime($schedule_details->enddate) - strtotime($schedule_details->startdate);
$schedule_details->training_days = round($datediff / (60 * 60 * 24)) + 1;
$todaydate = date('Y-m-d');
if ( (strtotime($schedule_details->startdate) <= strtotime($todaydate)) && (strtotime($schedule_details->enddate) >= strtotime($todaydate)) ) {
$datediff = strtotime($todaydate) - strtotime($schedule_details->startdate);
$schedule_details->current_day = round($datediff / (60 * 60 * 24)) + 1;
$schedule_arr[0]->attendance_update_status = 1;
}
// Training Update or Reaschedule before 6 hours
$date_time_diff_str = strtotime($schedule_details->startdate . ' ' . $starttime_array[0]) - strtotime($today_date);
$date_time_diff_str = round($date_time_diff_str / (60 * 60));
$schedule_details->training_update_status = true;
if ($date_time_diff_str < 1) {
$schedule_details->training_update_status = false;
}
if ($schedule_details->is_deleted == 1) {
// Training Cancelled
$schedule_details->training_status = '#F90303';
}
else {
if ($schedule_details->status == 1) {
//print $training_start_datetime . '--' . $todaydate . '--' . $schedule_details->enddate . "
";
// 6 hours before training
$six_hours_before_time = date("Y-m-d H:i:s", strtotime('-1 hours', strtotime($training_start_datetime)));
if ( (strtotime($six_hours_before_time) <= strtotime($today_date)) && (strtotime($training_start_datetime) >= strtotime($today_date)) ) {
$schedule_details->training_status = '#6D6D6D';
}
// Reschedule Training
//else if ( ($schedule_details->reschedule_status == 1) AND ($schedule_details->end_date < $today_date) ) {
else if ( ($schedule_details->reschedule_status == 1) AND (strtotime($training_start_datetime) > strtotime($today_date)) ) {
$schedule_details->training_status = '#F9B316';
}
// Training Scheduled
else if ( strtotime($six_hours_before_time) >= strtotime($today_date) ) {
$schedule_details->training_status = '#3F51B5';
}
// In Progress
elseif ( (strtotime($training_start_datetime) <= strtotime($today_date)) && (strtotime($schedule_details->enddate) >= strtotime($todaydate)) ) {
$schedule_details->training_status = '#F67280';
}
// Training completed based on time
//elseif ($schedule_details->end_date < $todaydate) {
elseif ($schedule_details->end_date < $todaydate && ($schedule_details->score_submit == 0 || $schedule_details->score_submit == 1) ) {
$schedule_details->training_status = '#933A16';
}
elseif ($schedule_details->score_submit == 2) {
// Completed
$schedule_details->training_status = '#348E00';
}
// elseif ($schedule_details->end_date > $todaydate) {
// // Not Started
// $schedule_details->training_status = '#6D6D6D';
// }
}
else if ($schedule_details->status == 0) {
// Save Training
$schedule_details->training_status = '#9900CC';
}
}
//PARTICIPANT
/*$participant_str = "SELECT p.`userid`, p.`is_attendance`,p.remarks, p.`score`, p.`assessment_score`,u.smpin,CONCAT(fname,lname)as name, u.profile_photo ,d.dealer_name,p.creatorid FROM ".TABLE_TRAINING_PARTICIPANT." p JOIN ".TABLE_USER." u ON p.userid=u.userid JOIN ".DMS_DEALER." d ON d.dealer_code=u.dealer_code WHERE p.schedule_id='".$schedule_arr[$schedule_key]->schedule_id."' ";
$participant_arr = $parent->getQueryValue($participant_str);
if(count($participant_arr) > 0) {
foreach($participant_arr as $skey => $res_part) {
if($res_part->profile_photo != '') {
//CONNECT S3
$s3 = awsfileserver::connectS3();
$res_part->profile_photo = awsfileserver::getS3FileUrl($s3,S3_BUCKET,S3_PROFILE_IMAGE_URL.$res_part->profile_photo);
}else {
$res_part->profile_photo = USER_NOIMAGE_URL;
}
}
$assessment_str = "SELECT assessmentid, assessmentname, lvl_id, if(assessmenttype=1, 'pre', 'Post') as assessmenttype, total_question, assessmenttime FROM ".TABLE_ASSESSMENT." WHERE schedule_id='".$schedule_arr[$schedule_key]->schedule_id."'";
$assessment_arr = $parent->getQueryValue($assessment_str);
if ($current_role != 10) {
$schedule_arr[$schedule_key]->participant = $participant_arr;
}
$schedule_arr[$schedule_key]->assessment = $assessment_arr;
}*/
}
$arr[$i] = $schedule_arr;
}
}
$parent->response(array('response'=>'success', 'data'=> $arr, 'message'=>$this->page_data['success1']),200);
}
// Cancel or Reschedule list
private function cancelreschedulelist ($parent) {
globalfunc::checkMethodType($parent,array('GET' ));
globalfunc::checkAuthrozation($parent,array('type'=>'user'));
globalfunc::checkParamCount($parent,1);
$reschedule_str = "SELECT id, name FROM ".TABLE_TRAINING_RESCHEDULE_LIST." WHERE status = 1 ";
$reschedule_arr = $parent->getQueryValue($reschedule_str);
if(count($reschedule_arr) > 0) {
$parent->response(array('response'=>'success', 'data'=> $reschedule_arr, 'message'=>$this->page_data['success1']),200);
}
}
private function newtraining($parent) {
globalfunc::checkMethodType($parent,array('POST' ));
globalfunc::checkAuthrozation($parent,array('type'=>'user'));
//globalfunc::checkParamCount($parent,1);
//$REQUEST_KEYS=array('title'=>'number','description'=>'string','startdate'=>'date|Y-m-d','enddate'=>'date|Y-m-d');
$REQUEST_KEYS=array('title'=>'number','startdate'=>'date|Y-m-d','enddate'=>'date|Y-m-d');
globalfunc::mandatoryKey($parent,$REQUEST_KEYS);
$lvl_id=escape_str($parent->_request["title"]);
$training_start_date = $startdate = escape_str($parent->_request["startdate"]);
$enddate=escape_str($parent->_request["enddate"]);
$starttime=escape_str($parent->_request["starttime"]);
$endtime=escape_str($parent->_request["endtime"]);
$training_total_hours = escape_str($parent->_request["training_total_hours"]);
// if($starttime!='' && $endtime!='') {
// $startdate.=" ".$starttime;
// $enddate.=" ".$endtime;
// }else {
// $startdate.=" 00:00:00";
// $enddate.=" 23:59:59";
// }
$adhoc_training=escape_str($parent->_request["adhoc_training"]);
$business_segment=escape_str($parent->_request["business_segment"]);
$training_other_title=escape_str($parent->_request["training_other_title"]);
$date_restriction=escape_str($parent->_request["date_restriction"]);
$status=escape_str($parent->_request["status"]);
$filter_zone = escape_str($parent->_request["filter_zone"]);
$trainer_id=$parent->current_user_id;
$description = escape_str($parent->_request['description']);
$is_feedback = escape_str($parent->_request["is_feedback"]);
$venue_type = escape_str($parent->_request["venue_type"]);
$venue_am = escape_str($parent->_request["venue_am"]);
$venue_dealer = escape_str($parent->_request["venue_dealer"]);
$venue_address = escape_str($parent->_request["venue_address"]);
$training_id = '';
// Getting Training Level Nice Name
$training_level_str = "SELECT nick_name FROM ".TABLE_TRAINING_LEVEL." WHERE lvl_id = '".$lvl_id."' ";
$training_level_arr = $parent->getQueryValue($training_level_str);
if(count($training_level_arr) > 0) {
$training_id .= $training_level_arr[0]->nick_name . '-';
}
if (!empty($parent->current_user_data->fname)) {
$trainer_fname = $parent->current_user_data->fname;
$trainer_lname = $parent->current_user_data->lname;
$fwords = explode(' ', $trainer_fname);
$lwords = explode(' ', $trainer_lname);
$training_id .= $fwords[0][0] . $fwords[1][0] . $lwords[0][0] . '-';
}
$training_id .= date("dmy", strtotime($startdate)) . '-' . date("dmy", strtotime($enddate));
// Check Condition Training already available or not
// $training_check_ques_str = "SELECT schedule_id FROM ".TABLE_TRAINING_SCHEDULE." WHERE `is_deleted` != '1' AND trainer_id='".$parent->current_user_id."' AND ('".$startdate ."' between start_date AND end_date )";
// $training_check_ques_arr=$parent->getQueryValue($training_check_ques_str);
// if(count($training_check_ques_arr)>0) {
// $parent->response(array('response'=>'failed','message'=>'Training already available in this time period.'),406);
// }
if(strtotime($startdate)response(array('response'=>'failed','message'=>$this->page_data["error4"]),406);
if(strtotime($enddate)response(array('response'=>'failed','message'=>$this->page_data["error4"]),406);
if(strtotime($startdate)>strtotime($enddate)) $parent->response(array('response'=>'failed','message'=>'from date should be greater than to date'),406);
$todaydate_time = date('Y-m-d H:i:s');
$starttime_array = json_decode(stripslashes($starttime), true);
$endtime_array = json_decode($endtime, true);
// Check Condition about 6 hours
$date_time_diff_str = strtotime($startdate . ' ' . $starttime_array[0]) - strtotime($todaydate_time);
$date_time_diff_str = round($date_time_diff_str / (60 * 60));
// if ($date_time_diff_str < 1) {
// $parent->response(array('response'=>'failed','message'=>'You can able to create training before 1 hour '),406);
// }
$dse = $parent->_request['dse'];
$participant_arr = json_decode($dse); //sending as string
if(!(is_array($participant_arr) && count($participant_arr)>0)) $parent->response(array('response'=>'failed','message'=>$this->page_data["error2"]),406);
//$insert_qry = "INSERT INTO ".TABLE_TRAINING_SCHEDULE ." ( `lvl_id`, `schedule_name`, `trainer_id`, `start_date`, `end_date`, `venue_type`, `venue_am`, `venue_dealer`, `venue_address`, is_feedback, `is_deleted`, `status`, `created_on`, `modified_on`) VALUES ( '".$lvl_id."', '".$description."', '".$trainer_id."','".$startdate."', '".$enddate."', '".$venue_type."', '".$venue_am."', '".$venue_dealer."','".$venue_address."','".$is_feedback."', '0', '1','".NOW."', '".NOW."')";
$insert_qry = "INSERT INTO ".TABLE_TRAINING_SCHEDULE ." ( `training_id`, `lvl_id`, `schedule_name`, `trainer_id`, `start_date`, `end_date`, `venue_type`, `venue_am`, `venue_dealer`, `venue_address`, is_feedback, `starttime`, `endtime`, `training_total_hours`, `date_restriction`, `filter_zone`, `adhoc_training`, `business_segment`, `training_other_title`, `is_deleted`, `status`, `created_on`, `modified_on`) VALUES ( '".$training_id."', '".$lvl_id."', '".$description."', '".$trainer_id."','".$startdate."', '".$enddate."', '".$venue_type."', '".$venue_am."', '".$venue_dealer."','".$venue_address."','".$is_feedback."', '".$starttime."', '".$endtime."', '".$training_total_hours."', '".$date_restriction."', '".$filter_zone."', '".$adhoc_training."', '".$business_segment."', '".$training_other_title."', '0', '".$status."', '".NOW."', '".NOW."')";
$parent->executeQuery($insert_qry);
$schedule_id=$parent->lastInsertId();
if(count($participant_arr)>0) {
$participant_arr= array_unique($participant_arr);
$ins_participant_arr=array();
$training_userids = '';
foreach($participant_arr as $userid) {
// Check Condition Training already available or not
$training_check_ques_str = "SELECT s.schedule_id FROM ".TABLE_TRAINING_SCHEDULE." s JOIN ".TABLE_TRAINING_PARTICIPANT ." p ON s.schedule_id = p.schedule_id WHERE ('".$training_start_date ."' between DATE_FORMAT(s.start_date,'%Y-%m-%d') AND DATE_FORMAT(s.end_date, '%Y-%m-%d') ) AND p.userid = '".$userid."' ";
$training_check_ques_arr = $parent->getQueryValue($training_check_ques_str);
if(count($training_check_ques_arr) > 0) {
$training_userids .= $userid . ',';
}
$ins_participant_arr[] =" ( '".$schedule_id."', '".$userid."', '0', '0', '0', 'qwertyuiopasdfghjklzxcvbnm', '".$trainer_id."','".NOW."', '".NOW."')";
}
$training_userids = trim($training_userids, ',');
if(!empty($training_userids)) {
// Get DSE
$user_dse_str = "SELECT userid, smpin FROM ".TABLE_USER." WHERE userid in (".$training_userids.") ";
$user_dse_arr = $parent->getQueryValue($user_dse_str);
$dse_smpin = '';
foreach ($user_dse_arr as $user_key => $user_dse) {
$dse_smpin .= $user_dse->smpin . ', ';
}
$dse_smpin = trim($dse_smpin, ', ');
if (!empty($dse_smpin)) {
$parent->response(array('response'=>'failed','message'=>'DSE (' . $dse_smpin . ') have already training in this time period.'),406);
}
}
//print_r($ins_participant_arr);
$insert_qry = "INSERT INTO ".TABLE_TRAINING_PARTICIPANT ." ( `schedule_id`, `userid`, `is_attendance`, `score`, `assessment_score`, `qr_code`, `creatorid`, `created_on`, `modified_on`) VALUES ".@implode(',',$ins_participant_arr);
$parent->executeQuery($insert_qry);
// Training Notification
if ($status == 1) {
$mobj = new stdClass();
$mobj->schedule_id = $schedule_id;
$mobj->type = 'new';
$this->trainingnotifictaion($parent, $mobj);
}
}
$assessments = $parent->_request['assessments'];
$assessmenttype_array=json_decode($assessments, true);
if(count($assessmenttype_array) > 0) {
//ASSESSMENT QUESTION ADD
$vehicle_type = 0;
if ($business_segment == 1) {
$vehicle_type = 1;
}
else if ($business_segment == 2) {
$vehicle_type = 2;
}
foreach ($assessmenttype_array as $assessmentkey => $assessmenttypes) {
if(!empty($assessmenttypes['name'])) {
if ($assessmenttypes['assessment'] == 'pre') {
$assessmenttype = '1';
}
else if ($assessmenttypes['assessment'] == 'post') {
$assessmenttype = '2';
}
$assessmentname = $assessmenttypes['name'];
$ques_count = $assessmenttypes["ques_count"];
$assessmenttime = $assessmenttypes["duration"];
//GET ASSESSMENT START AND END DATES
$buffer_day = 1;
if ($assessmenttype == 1) {
$assessment_startdate=date('Y-m-d H:i:s',strtotime($startdate));
$assessment_enddate=date('Y-m-d H:i:s',strtotime('+'.$buffer_day.' day',strtotime($startdate)));
}
else {
$assessment_startdate=date('Y-m-d H:i:s',strtotime($enddate));
$assessment_enddate=date('Y-m-d H:i:s',strtotime('+'.$buffer_day.' day',strtotime($enddate)));
}
//INSERT ASSESSMENT
$insert_qry = "INSERT INTO ".TABLE_ASSESSMENT ." ( `atype`, `lvl_id`, `assessmentname`, `description`, `assessmentimage`, `assessmenttype`, `assettypeid`, `assessmenttimetype`, `assessmenttime`, `attemptslimit`, `publisheddate`, `enddate`, `randomcond`, `filter_role`, `filter_zone`, `filter_region`, `filter_dealer`, `assessmentnotification`, `total_question`,`schedule_id`, `status`, `creatorid`, `created_on`, `modified_on`) VALUES ('1','".$lvl_id."','".$assessmentname."','".$assessmentname."','','".$assessmenttype."','1','1','".$assessmenttime."','1','".$assessment_startdate."','".$assessment_enddate."','".$randomcond."','','','','','','".$ques_count."','".$schedule_id."','1','".$trainer_id."','".NOW."','".NOW."')";
$parent->executeQuery($insert_qry);
$assessmentid = $parent->lastInsertId();
/*if(count($participant_arr)>0) {
$ins_assess_arr=array();
foreach($participant_arr as $userid) {
$ins_assess_arr[] =" ( '".$assessmentid."', '".$schedule_id."', '".$userid."', '0')";
}
}
//ASSESSMENT PARTICPANT ADD
$insert_qry = "INSERT INTO ".TABLE_TRAINING_ASSESSMENT ." ( `assessmentid`, `schedule_id`, `userid`, `is_attended`) VALUES ".@implode(',',$ins_assess_arr);
$parent->executeQuery($insert_qry);*/
$rcond = ($randomcond)?"ORDER BY RAND()":"ORDER BY id ASC";
$ques_str = "SELECT * FROM ".TABLE_QUESTION." WHERE vehicle_type = '" . $vehicle_type . "' AND assessment_type = '" . $assessmenttype . "' AND status='1' " . $rcond . " LIMIT " . $ques_count;
//$ques_str = "SELECT * FROM ".TABLE_QUESTION." WHERE status='1' AND cateid='" . $lvl_id . "' " . $rcond . " LIMIT " . $ques_count;
$ques_arr=$parent->getQueryValue($ques_str);
if(count($ques_arr)>0) {
$ins_ques_arr=array();
foreach($ques_arr as $res_ques) {
$ins_ques_arr[] =" ( '".$assessmentid."','".$res_ques->id."', '1', '".$trainer_id."','".NOW."', '".NOW."')";
}
//ASSESSMENT QUESTION
$insert_qry = "INSERT INTO ".TABLE_ASSESSMENT_QUESTION ." (`assessmentid`, `qid`, `is_mandatory`, `creatorid`, `created_on`, `modified_on`) VALUES ".@implode(',',$ins_ques_arr);
$parent->executeQuery($insert_qry);
}
}
}
}
$parent->response(array('response'=>'success', 'message'=>$this->page_data['success1']),200);
}
// Training Schedule, Reschedule and Cancel Notification
private function trainingnotifictaion ($parent, $obj) {
if(!(isset($obj) && isset($obj->schedule_id))) $parent->response(array('response'=>'failed','message'=>'PHP ERROR Value not passed'),500);
$schedule_id = $obj->schedule_id;
$query_str = "SELECT s.schedule_name, s.start_date, s.end_date, tl.lvl_name as title FROM ".TABLE_TRAINING_SCHEDULE." s JOIN " . TABLE_TRAINING_LEVEL . " tl ON s.lvl_id = tl.lvl_id WHERE s.is_deleted='0' AND s.schedule_id='".$schedule_id."' LIMIT 1";
$query_arr=$parent->getQueryValue($query_str);
// Set condition for Feedback Notofications
$training_notification_type = $obj->type;
if ($training_notification_type == 'feedback') {
//$user_condition = " AND status='1' and is_attendance = 1 ";
$user_condition = " AND status in (0,1) ";
}
if ($training_notification_type == 'pre' or $training_notification_type == 'post' or $training_notification_type == 'userscore_certified' or $training_notification_type == 'userscore_fail') {
$user_condition .= " AND userid in (" . $obj->users . ") ";
}
$query_str = "SELECT userid FROM `".TABLE_TRAINING_PARTICIPANT."` WHERE schedule_id='".$schedule_id."' " . $user_condition . " ";
$part_arr=$parent->getQueryValue($query_str);
if(count($query_arr)>0 && count($part_arr) > 0) {
if ($obj->type == 'new') {
$schedule_type_name = 'New Training Scheduled ';
}
else if ($obj->type == 'update') {
$schedule_type_name = 'Training Updated ';
}
else if ($obj->type == 'cancel') {
$schedule_type_name = 'Training Cancelled ';
}
else if ($obj->type == 'reschedule') {
$schedule_type_name = 'Training rescheduled ';
}
else if ($obj->type == 'feedback') {
$schedule_type_name = 'Training Feedback ';
}
else if ($obj->type == 'pre') {
$schedule_type_name = 'Training Pre Assessment ';
}
else if ($obj->type == 'post') {
$schedule_type_name = 'Training Post Assessment ';
}
else if ($obj->type == 'score') {
$schedule_type_name = 'Result of ';
}
// Notification Text
if ($obj->type == 'feedback' OR $obj->type == 'pre' OR $obj->type == 'post') {
if ($obj->type == 'pre') {
$assessmenttype = 1;
}
else if ($obj->type == 'post') {
$assessmenttype = 2;
}
$assess_query_str = "SELECT assessmentid, assessmenttime, assessmenttype FROM `".TABLE_ASSESSMENT."` WHERE schedule_id='".$schedule_id."' AND assessmenttype = '".$assessmenttype."' ";
$assess_arr = $parent->getQueryValue($assess_query_str);
$ntext = $schedule_type_name . ' - ' . $query_arr[0]->title . ' Duration : ' . $assess_arr[0]->assessmenttime;
}
else if ($obj->type == 'score') {
$ntext = $schedule_type_name . $query_arr[0]->title . " date : " . date('d M Y',strtotime($query_arr[0]->start_date))." - ".date('d M Y',strtotime($query_arr[0]->end_date)) . " training has been published.";
}
else if ($obj->type == 'userscore_certified') {
$ntext = 'Congratulations! You have cleared ' . $query_arr[0]->title . ' Certification';
}
else if ($obj->type == 'userscore_fail') {
$ntext = 'You have not cleared the ' . $query_arr[0]->title . ' Certification, You need to attend the training again.';
}
else {
$ntext = $schedule_type_name . ' - ' . $query_arr[0]->title . " from date : ".date('d M Y',strtotime($query_arr[0]->start_date))." - ".date('d M Y',strtotime($query_arr[0]->end_date));
}
$notificationtitle = $query_arr[0]->title . ' - ' . $query_arr[0]->schedule_name;
$notificationtext = $ntext;
$notificationtype = 10;
if ($training_notification_type == 'pre' OR $training_notification_type == 'post') {
$notificationtype = 2;
}
else if ($training_notification_type == 'feedback') {
$notificationtype = 11;
}
else if ($training_notification_type == 'score' OR $training_notification_type == 'userscore_certified' OR $training_notification_type == 'userscore_fail' ) {
$notificationtype = 12;
}
$nobj = new stdClass();
$nobj->schedule_id = $schedule_id;
if ($obj->type == 'feedback' OR $obj->type == 'pre' OR $obj->type == 'post') {
$nobj->assessmentid = $assess_arr[0]->assessmentid;
}
$notificationdata = json_encode($nobj);
//INSERT NOTIFICATION
$parent->executeQuery("INSERT INTO `".TABLE_NOTIFICATION."` ( `notificationtitle`, `notificationtext`, `notificationdata`, `notificationtype`, `status`, `publisheddate`, `created_on`, `modified_on`) VALUES ('".escape_str($notificationtitle)."','".escape_str($notificationtext)."','".$notificationdata."','".$notificationtype."', '1','".NOW."','".NOW."','".NOW."')");
$notificationid = $parent->lastInsertId();
$data = array('notification_id'=>$notificationid, 'title'=>$notificationtitle, 'message'=>$notificationtext, 'notificationtype'=>$notificationtype, 'notificationdata'=>$notificationdata, 'created_date'=>NOW);
if(count($part_arr)>0) {
foreach ($part_arr as $res_user) {
$user_arr[] = $res_user->userid;
$dse_ids .= $res_user->userid . ',';
}
// Sending notification only to dealer, AM, RM, ZM
if ($training_notification_type == 'score') {
$user_arr = array();
}
if ($training_notification_type == 'new' or $training_notification_type == 'cancel' or $training_notification_type == 'reschedule' or $training_notification_type == 'score' or $training_notification_type == 'update') {
// Get Dealer code of DSE
$dse_ids = trim($dse_ids, ',');
$dealer_str = " SELECT dealer_code FROM `".TABLE_USER."` WHERE userid in (".$dse_ids.") GROUP BY dealer_code ";
$dealer_arr = $parent->getQueryValue($dealer_str);
if(count($dealer_arr) > 0) {
foreach ($dealer_arr as $dealers) {
$dealer_codes .= $dealers->dealer_code . ',';
}
$dealer_codes = trim($dealer_codes, ',');
}
// Get ZM ids
if (!empty($dealer_codes)) {
$zm_str = "SELECT u.userid FROM `".TABLE_USER."` u WHERE emailid in (SELECT zm_email FROM `".DMS_DEALER."` WHERE dealer_code in (".$dealer_codes.") GROUP BY zm_email) ";
$zm_arr = $parent->getQueryValue($zm_str);
if(count($zm_arr)>0) {
foreach ($zm_arr as $zm_res_user) {
$user_arr[] = $zm_res_user->userid;
}
}
// Get RM ids
$rm_str = "SELECT u.userid FROM `".TABLE_USER."` u WHERE emailid in (SELECT rm_email FROM `".DMS_DEALER."` WHERE dealer_code in (".$dealer_codes.") GROUP BY rm_email) ";
$rm_arr = $parent->getQueryValue($rm_str);
if(count($rm_arr)>0) {
foreach ($rm_arr as $rm_res_user) {
$user_arr[] = $rm_res_user->userid;
}
}
// Get AM ids
$am_str = "SELECT u.userid FROM `".TABLE_USER."` u WHERE emailid in (SELECT am_email FROM `".DMS_DEALER."` WHERE dealer_code in (".$dealer_codes.") GROUP BY am_email) ";
$am_arr = $parent->getQueryValue($am_str);
if(count($am_arr)>0) {
foreach ($am_arr as $am_res_user) {
$user_arr[] = $am_res_user->userid;
}
}
// Get DEALER ids
$dealer_str = "SELECT u.userid FROM `".TABLE_USER."` u WHERE dealer_code in (".$dealer_codes.") GROUP BY u.dealer_code ";
$dealer_arr = $parent->getQueryValue($dealer_str);
if(count($dealer_arr)>0) {
foreach ($dealer_arr as $dealer_res_user) {
$user_arr[] = $dealer_res_user->userid;
}
}
}
}
//print_r($user_arr);exit();
$ins_arr = array();
foreach($user_arr as $res) {
$ins_arr[] = " ('".$notificationid."', '".$res."', '0', '".NOW."')";
}
$insert_chunk = array_chunk($ins_arr, 1000);
foreach($insert_chunk as $chunk_ins) {
//print "INSERT INTO ".TABLE_NOTIFICATION_USER."(`notificationid`, `userid`, `status`, `created_on`) VALUES ".@implode(',',$chunk_ins)." ON DUPLICATE KEY UPDATE `status` =0";
$parent->executeQuery("INSERT INTO ".TABLE_NOTIFICATION_USER."(`notificationid`, `userid`, `status`, `created_on`) VALUES ".@implode(',',$chunk_ins)." ON DUPLICATE KEY UPDATE `status` =0");
}
$usertokenarr['ios']=array();
$usertokenarr['android']=array();
$user_device_str = "SELECT ud.devicetype,ud.token FROM `".TABLE_USER_DEVICES."` as ud JOIN (SELECT userid FROM ".TABLE_NOTIFICATION_USER." WHERE notificationid='".$notificationid."') as u ON ud.userid=u.userid WHERE ud.is_deleted='0' AND (devicetype='ios' OR devicetype='android') AND token!=''";
$user_device_arr = $parent->getQueryValue($user_device_str);
if(count($user_device_arr) > 0) {
foreach($user_device_arr as $res_dev) {
//print_r($user_device_arr);
if(strtolower($res_dev->devicetype) == 'ios') {
$usertokenarr['ios'][] = $res_dev->token;
}
else if(strtolower($res_dev->devicetype) == 'android') {
$usertokenarr['android'][] = $res_dev->token;
}
}
// globalfunc::sendUserNotification($data,$usertokenarr);
}
}
}
}
// Cancel Training
private function canceltraining ($parent) {
globalfunc::checkMethodType($parent,array('GET' ));
globalfunc::checkAuthrozation($parent,array('type'=>'user'));
globalfunc::checkParamCount($parent,3);
$schedule_id = escape_str($parent->params[1]);
$cancel_or_reschedule_type = escape_str($parent->params[2]);
$update_qry = "UPDATE ".TABLE_TRAINING_SCHEDULE ." SET `cancel_or_reschedule_type`='".$cancel_or_reschedule_type."', `is_deleted`='1', `modified_on`='".NOW."' WHERE schedule_id='".$schedule_id."'";
$query = $parent->executeQuery($update_qry);
if ($query) {
// Training Notification
$training_str = "SELECT status FROM ".TABLE_TRAINING_SCHEDULE." WHERE schedule_id='".$schedule_id."' LIMIT 1 ";
$training_arr = $parent->getQueryValue($training_str);
if ($training_arr[0]->status == 1) {
$mobj = new stdClass();
$mobj->schedule_id = $schedule_id;
$mobj->type = 'cancel';
$this->trainingnotifictaion($parent, $mobj);
}
}
$parent->response(array('response'=>'success', 'message'=>$this->page_data['success1']),200);
}
// Reschedule Training
private function rescheduletraining ($parent) {
globalfunc::checkMethodType($parent,array('POST' ));
globalfunc::checkAuthrozation($parent,array('type'=>'user'));
globalfunc::checkParamCount($parent,3);
$startdate=escape_str($parent->_request["startdate"]);
$enddate=escape_str($parent->_request["enddate"]);
$starttime=escape_str($parent->_request["starttime"]);
$endtime=escape_str($parent->_request["endtime"]);
$training_total_hours = escape_str($parent->_request["training_total_hours"]);
// if($starttime!='' && $endtime!='') {
// $startdate.=" ".$starttime;
// $enddate.=" ".$endtime;
// }else {
// $startdate.=" 00:00:00";
// $enddate.=" 23:59:59";
// }
$todaydate_time = date('Y-m-d H:i:s');
$starttime = stripslashes($starttime);
$starttime_array = json_decode($starttime, true);
$endtime_array = json_decode($endtime, true);
// Check Condition about 6 hours
$date_time_diff_str = strtotime($startdate . ' ' . $starttime_array[0]) - strtotime($todaydate_time);
$date_time_diff_str = round($date_time_diff_str / (60 * 60));
if ($date_time_diff_str < 1) {
$parent->response(array('response'=>'failed','message'=>'You can able to reschedule training before 1 hours '),406);
}
$schedule_id = escape_str($parent->params[1]);
$cancel_or_reschedule_type = escape_str($parent->params[2]);
$update_qry = "UPDATE ".TABLE_TRAINING_SCHEDULE ." SET `start_date`='".$startdate."', `end_date`='".$enddate."', `starttime`='".$starttime."', `endtime`='".$endtime."', `training_total_hours`='".$training_total_hours."', `cancel_or_reschedule_type`='".$cancel_or_reschedule_type."', `reschedule_status`='1', `modified_on`='".NOW."' WHERE schedule_id='".$schedule_id."'";
$query = $parent->executeQuery($update_qry);
if ($query) {
// Update Assessment
for($assessmenttype=1; $assessmenttype<=2; $assessmenttype++) {
//GET ASSESSMENT START AND END DATES
$buffer_day = 1;
if ($assessmenttype == 1) {
$assessment_startdate=date('Y-m-d H:i:s',strtotime($startdate));
$assessment_enddate=date('Y-m-d H:i:s',strtotime('+'.$buffer_day.' day',strtotime($startdate)));
}
else {
$assessment_startdate=date('Y-m-d H:i:s',strtotime($enddate));
$assessment_enddate=date('Y-m-d H:i:s',strtotime('+'.$buffer_day.' day',strtotime($enddate)));
}
$train_assess_str = "SELECT assessmentid FROM ".TABLE_ASSESSMENT." WHERE schedule_id='".$schedule_id."' AND assessmenttype = '" . $assessmenttype . "' LIMIT 1 ";
$train_assess_arr = $parent->getQueryValue($train_assess_str);
if(count($train_assess_arr) > 0) {
$old_assessmentid = $train_assess_arr[0]->assessmentid;
}
$update_qry = "UPDATE ".TABLE_ASSESSMENT ." SET `publisheddate`='".$assessment_startdate."', `enddate`='".$assessment_enddate."' WHERE assessmentid='".$old_assessmentid."'";
$parent->executeQuery($update_qry);
}
// Training Notification
$training_str = "SELECT status FROM ".TABLE_TRAINING_SCHEDULE." WHERE schedule_id='".$schedule_id."' LIMIT 1 ";
$training_arr = $parent->getQueryValue($training_str);
if ($training_arr[0]->status == 1) {
$mobj = new stdClass();
$mobj->schedule_id = $schedule_id;
$mobj->type = 'reschedule';
$this->trainingnotifictaion($parent, $mobj);
}
}
$parent->response(array('response'=>'success', 'message'=>$this->page_data['success1']),200);
}
// Decline Treaining Reaosn list
private function declinetrainingreasonlist ($parent) {
globalfunc::checkMethodType($parent,array('GET' ));
globalfunc::checkAuthrozation($parent,array('type'=>'user'));
globalfunc::checkParamCount($parent,1);
$reschedule_str = "SELECT id, name FROM ".TABLE_TRAINING_DECLINE_REASON_LIST." WHERE status = 1 ";
$reschedule_arr = $parent->getQueryValue($reschedule_str);
if(count($reschedule_arr) > 0) {
$parent->response(array('response'=>'success', 'data'=> $reschedule_arr, 'message'=>$this->page_data['success1']),200);
}
}
// Cancel Training
private function acceptdeclinetraining ($parent) {
globalfunc::checkMethodType($parent,array('POST' ));
globalfunc::checkAuthrozation($parent,array('type'=>'user'));
//globalfunc::checkParamCount($parent,4);
$schedule_id = escape_str($parent->_request["schedule_id"]);
$userid = escape_str($parent->_request["userid"]);
$status = escape_str($parent->_request["status"]);
$acknowledge_by = escape_str($parent->_request["acknowledge_by"]);
$decline_reason = escape_str($parent->_request["decline_reason"]);
$decline_reason_desc = escape_str($parent->_request["decline_reason_desc"]);
$update_qry = "UPDATE ".TABLE_TRAINING_PARTICIPANT ." SET `status`='".$status."', acknowledge_by = '".$acknowledge_by."',acknowledge_by = '".$acknowledge_by."',`decline_reason`='".$decline_reason."', `decline_reason_desc`='".$decline_reason_desc."', `modified_on`='".NOW."' WHERE schedule_id='".$schedule_id."' AND userid='".$userid."'";
$parent->executeQuery($update_qry);
$parent->response(array('response'=>'success', 'message'=>$this->page_data['success1']),200);
}
// Upload Training Group Image
private function traininggroupimage ($parent) {
globalfunc::checkParamCount($parent,1);
$user_details=globalfunc::checkAuthrozation($parent,array('type'=>'user'));
$REQUEST_KEYS=array('schedule_id'=>'number');
globalfunc::mandatoryKey($parent,$REQUEST_KEYS);
$schedule_id = escape_str($parent->_request['schedule_id']);
//CHECK FILE
if(isset($_FILES['file']) && $_FILES['file']['name']) {
//CONNECT S3
$s3=awsfileserver::connectS3();
//IMAGE UPLOAD
$obj= new stdClass();
$obj->filekey='file';
$obj->size='10'; //IN MB
$obj->type=array('jpg','jpeg','png');
globalfunc::validateFile($parent,$obj);
$obj->path=$this->training_path;
$obj->filename= 'profile_'.$parent->current_user_id.'_'.date('Ymd').uniqid();
if(isset($parent->_request['width']))$obj->width=$parent->_request['width'];
if(isset($parent->_request['height']))$obj->height=$parent->_request['height'];
$obj->cord=(isset($parent->_request['cord']))?$parent->_request['cord']:NULL;
$fileName=globalfunc::uploadFile($parent,$obj);
awsfileserver::checkupload($parent,$s3,S3_BUCKET,S3_TRAINING_URL.$fileName,dirname(__FILE__)."/../../../".S3_TRAINING_URL.$fileName) ;
//UNLINK
@unlink(dirname(__FILE__).'/../'.$this->training_path.$fileName);
$econd=" ,training_group_img='".$fileName."'";
$parent->executeQuery(" UPDATE ".TABLE_TRAINING_SCHEDULE." SET training_group_image='".$fileName."', `modified_on` = '".NOW."' WHERE schedule_id = '".$schedule_id."' ");
}
//LOG
$logstr='Training Group Photo UPDATE';
globalfunc::insertUserLog($parent,$logstr);
$parent->response(array('response'=>'success', 'message'=>$this->page_data['success1']),200);
}
private function updatetraining($parent) {
globalfunc::checkMethodType($parent,array('POST' ));
globalfunc::checkAuthrozation($parent,array('type'=>'user'));
$REQUEST_KEYS=array('schedule_id'=>'number', 'title'=>'number');
globalfunc::mandatoryKey($parent,$REQUEST_KEYS);
$schedule_id=escape_str($parent->_request["schedule_id"]);
$lvl_id=escape_str($parent->_request["title"]);
$trainer_id=$parent->current_user_id;
$adhoc_training=escape_str($parent->_request["adhoc_training"]);
$business_segment=escape_str($parent->_request["business_segment"]);
$training_other_title=escape_str($parent->_request["training_other_title"]);
//$date_restriction=escape_str($parent->_request["date_restriction"]);
$status=escape_str($parent->_request["status"]);
$filter_zone = escape_str($parent->_request["filter_zone"]);
$description = escape_str($parent->_request['description']);
$is_feedback = escape_str($parent->_request["is_feedback"]);
$venue_type = escape_str($parent->_request["venue_type"]);
$venue_am = escape_str($parent->_request["venue_am"]);
$venue_dealer = escape_str($parent->_request["venue_dealer"]);
$venue_address = escape_str($parent->_request["venue_address"]);
// if(strtotime($startdate)response(array('response'=>'failed','message'=>$this->page_data["error4"]),406);
// if(strtotime($enddate)response(array('response'=>'failed','message'=>$this->page_data["error4"]),406);
//if(strtotime($startdate)>strtotime($enddate)) $parent->response(array('response'=>'failed','message'=>'from date should be greater than to date'),406);
$dse = $parent->_request['dse'];
$participant_arr = json_decode($dse); //sending as string
if(!(is_array($participant_arr) && count($participant_arr)>0)) $parent->response(array('response'=>'failed','message'=>$this->page_data["error2"]),406);
//$update_qry = "UPDATE ".TABLE_TRAINING_SCHEDULE ." SET `lvl_id`='".$lvl_id."', `schedule_name`='".$description."', `trainer_id`='".$trainer_id."', `schedule_name`='".$description."', `start_date`='".$startdate."', `end_date`='".$enddate."', `starttime`='".$starttime."', `endtime`='".$endtime."', `training_total_hours`='".$training_total_hours."', `date_restriction`='".$date_restriction."', `venue_type`='".$venue_type."', `venue_am`='".$venue_am."', `venue_dealer`='".$venue_dealer."', `venue_address`='".$venue_address."', `filter_zone`='".$filter_zone."', `adhoc_training`='".$adhoc_training."', `business_segment`='".$business_segment."', `training_other_title`='".$training_other_title."', `status`='".$status."', `is_feedback`='".$is_feedback."', modified_on='".NOW."' WHERE schedule_id='".$schedule_id."'";
$update_qry = "UPDATE ".TABLE_TRAINING_SCHEDULE ." SET `lvl_id`='".$lvl_id."', `schedule_name`='".$description."', `trainer_id`='".$trainer_id."', `schedule_name`='".$description."', `venue_type`='".$venue_type."', `venue_am`='".$venue_am."', `venue_dealer`='".$venue_dealer."', `venue_address`='".$venue_address."', `filter_zone`='".$filter_zone."', `adhoc_training`='".$adhoc_training."', `business_segment`='".$business_segment."', `training_other_title`='".$training_other_title."', `status`='".$status."', `is_feedback`='".$is_feedback."', modified_on='".NOW."' WHERE schedule_id='".$schedule_id."'";
$parent->executeQuery($update_qry);
if(count($participant_arr)>0) {
// Delete Old One
$delete_qry = $parent->executeQuery("DELETE FROM " . TABLE_TRAINING_PARTICIPANT . " WHERE schedule_id = '" . $schedule_id . "' ");
$participant_arr= array_unique($participant_arr);
$ins_participant_arr=array();
foreach($participant_arr as $userid) {
$ins_participant_arr[] =" ( '".$schedule_id."', '".$userid."', '0', '0', '0', '".$trainer_id."','".NOW."', '".NOW."')";
}
//print_r($ins_participant_arr);
$insert_qry = "INSERT INTO ".TABLE_TRAINING_PARTICIPANT ." ( `schedule_id`, `userid`, `is_attendance`, `score`, `assessment_score`, `creatorid`, `created_on`, `modified_on`) VALUES ".@implode(',',$ins_participant_arr);
$parent->executeQuery($insert_qry);
$assessments = $parent->_request['assessments'];
$assessmenttype_array=json_decode($assessments, true);
if(count($assessmenttype_array) > 0) {
//print_r($assessmenttype_array);
// $delete_qry = $parent->executeQuery("DELETE FROM " . TABLE_ASSESSMENT . " WHERE schedule_id = '" . $schedule_id . "' ");
// $delete_qry = $parent->executeQuery("DELETE FROM " . TABLE_TRAINING_ASSESSMENT . " WHERE schedule_id = '" . $schedule_id . "' ");
//ASSESSMENT QUESTION ADD
$vehicle_type = 0;
if ($business_segment == 1) {
$vehicle_type = 1;
}
else if ($business_segment == 2) {
$vehicle_type = 2;
}
foreach ($assessmenttype_array as $assessmentkey => $assessmenttypes) {
if(!empty($assessmenttypes['name'])) {
if ($assessmenttypes['assessment'] == 'pre') {
$assessmenttype = '1';
}
else if ($assessmenttypes['assessment'] == 'post') {
$assessmenttype = '2';
}
$assessmentname = $assessmenttypes['name'];
$ques_count = $assessmenttypes["ques_count"];
$assessmenttime = $assessmenttypes["duration"];
$train_assess_str = "SELECT assessmentid FROM ".TABLE_ASSESSMENT." WHERE schedule_id='".$schedule_id."' AND assessmenttype = '" . $assessmenttype . "' LIMIT 1 ";
$train_assess_arr = $parent->getQueryValue($train_assess_str);
if(count($train_assess_arr) > 0) {
$old_assessmentid = $train_assess_arr[0]->assessmentid;
}
$delete_qry = $parent->executeQuery("DELETE FROM " . TABLE_ASSESSMENT_QUESTION . " WHERE assessmentid = '" . $old_assessmentid . "' ");
//INSERT ASSESSMENT
// $insert_qry = "INSERT INTO ".TABLE_ASSESSMENT ." ( `atype`, `lvl_id`, `assessmentname`, `description`, `assessmentimage`, `assessmenttype`, `assettypeid`, `assessmenttimetype`, `assessmenttime`, `attemptslimit`, `publisheddate`, `enddate`, `randomcond`, `filter_role`, `filter_zone`, `filter_region`, `filter_dealer`, `assessmentnotification`, `total_question`,`schedule_id`, `status`, `creatorid`, `created_on`, `modified_on`) VALUES ('1','".$lvl_id."','".$assessmentname."','".$assessmentname."','','".$assessmenttype."','1','1','".$assessmenttime."','1','".$assessment_startdate."','".$assessment_enddate."','".$randomcond."','','','','','','".$ques_count."','".$schedule_id."','1','".$trainer_id."','".NOW."','".NOW."')";
// $parent->executeQuery($insert_qry);
// $assessmentid = $parent->lastInsertId();
$update_qry = "UPDATE ".TABLE_ASSESSMENT ." SET `assessmentname`='".$assessmentname."', `total_question`='".$ques_count."', `assessmenttime`='".$assessmenttime."', modified_on='".NOW."' WHERE assessmentid='".$old_assessmentid."'";
$parent->executeQuery($update_qry);
/* if(count($participant_arr)>0) {
$ins_assess_arr=array();
foreach($participant_arr as $userid) {
$ins_assess_arr[] =" ( '".$assessmentid."', '".$schedule_id."', '".$userid."', '0')";
}
}
//ASSESSMENT PARTICPANT ADD
$insert_qry = "INSERT INTO ".TABLE_TRAINING_ASSESSMENT ." ( `assessmentid`, `schedule_id`, `userid`, `is_attended`) VALUES ".@implode(',',$ins_assess_arr);
$parent->executeQuery($insert_qry);*/
//ASSESSMENT QUESTION ADD
$rcond = "ORDER BY RAND()";
$ques_str = "SELECT * FROM ".TABLE_QUESTION." WHERE vehicle_type = '" . $vehicle_type . "' AND assessment_type = '" . $assessmenttype . "' AND status='1' " . $rcond . " LIMIT " . $ques_count;
$ques_arr=$parent->getQueryValue($ques_str);
if(count($ques_arr)>0) {
$ins_ques_arr=array();
foreach($ques_arr as $res_ques) {
$ins_ques_arr[] =" ( '".$old_assessmentid."','".$res_ques->id."', '1', '".$trainer_id."','".NOW."', '".NOW."')";
}
//ASSESSMENT QUESTION
$insert_qry = "INSERT INTO ".TABLE_ASSESSMENT_QUESTION ." (`assessmentid`, `qid`, `is_mandatory`, `creatorid`, `created_on`, `modified_on`) VALUES ".@implode(',',$ins_ques_arr);
$parent->executeQuery($insert_qry);
}
}
}
}
}
// Training Notification
if ($status == 1) {
$mobj = new stdClass();
$mobj->schedule_id = $schedule_id;
$mobj->type = 'update';
$this->trainingnotifictaion($parent, $mobj);
}
$parent->response(array('response'=>'success', 'message'=>$this->page_data['success1']),200);
}
private function updatetrainingpresentabsent ($parent) {
globalfunc::checkMethodType($parent,array('POST' ));
globalfunc::checkAuthrozation($parent,array('type'=>'user'));
globalfunc::checkParamCount($parent,1);
$REQUEST_KEYS = array('schedule_id'=>'number', 'attendance'=>'string');
globalfunc::mandatoryKey($parent,$REQUEST_KEYS);
$schedule_id = $parent->_request['schedule_id'];
$attendance = $parent->_request['attendance'];
$attendance_submit = $parent->_request['attendance_submit'];
$attendance_array = json_decode($attendance, true);
// Gertting Training Details
$schedule_str = "SELECT start_date, end_date FROM ".TABLE_TRAINING_SCHEDULE." WHERE schedule_id='".$schedule_id."' LIMIT 1 ";
$schedule_arr = $parent->getQueryValue($schedule_str);
if(count($schedule_arr) > 0) {
$datediff = strtotime($schedule_arr[0]->end_date) - strtotime($schedule_arr[0]->start_date);
$training_days = round($datediff / (60 * 60 * 24)) + 1;
}
//print_r($attendance_array);exit();
if(count($attendance_array) > 0) {
$todaydate = date('Y-m-d');
// Get Pre Assessment Id
$pre_assess_str = "SELECT assessmentid FROM ".TABLE_ASSESSMENT." WHERE schedule_id='".$schedule_id."' AND assessmenttype='1' LIMIT 1 ";
$pre_assess_arr = $parent->getQueryValue($pre_assess_str);
// Get Post Assessment Id
$post_assess_str = "SELECT assessmentid FROM ".TABLE_ASSESSMENT." WHERE schedule_id='".$schedule_id."' AND assessmenttype='2' LIMIT 1 ";
$post_assess_arr = $parent->getQueryValue($post_assess_str);
foreach ($attendance_array as $attendance_key => $atten) {
$userid = $atten['userid'];
$day = $atten['day'];
$ispresent = $atten['ispresent'];
if ($atten['ispresent'] == 2) {
$absent_users .= $userid . ',';
}
$manual_attendance_reason = $atten['manual_attendance_reason'];
$absence_reason = $atten['absence_reason'];
//CHECK FILE
//if(isset($_FILES['upload_photo']) && $_FILES['upload_photo']['name']) {
$fileName = '';
if (isset($atten['upload_photo']) AND $atten['ispresent'] == 1) {
$image_parts = explode(";base64,", $atten['upload_photo']);
$image_type_aux = explode("image/", $image_parts[0]);
$image_type = $image_type_aux[1];
if (!empty($image_type)) {
$image_base64 = base64_decode($image_parts[1]);
$fileName = 'atten_'.$atten['userid'].'_'.date('Ymd').uniqid() . '.' . $image_type;
file_put_contents($this->training_path . $fileName, $image_base64);
//CONNECT S3
$s3=awsfileserver::connectS3();
//IMAGE UPLOAD
// $obj= new stdClass();
// $obj->filekey='upload_photo';
// $obj->size='10'; //IN MB
// $obj->type=array('jpg','jpeg','png');
// globalfunc::validateFile($parent,$obj);
// $obj->path=$this->training_path;
// $obj->filename= 'profile_'.$parent->current_user_id.'_'.date('Ymd').uniqid();
// if(isset($parent->_request['width']))$obj->width=$parent->_request['width'];
// if(isset($parent->_request['height']))$obj->height=$parent->_request['height'];
// $obj->cord=(isset($parent->_request['cord']))?$parent->_request['cord']:NULL;
// $fileName=globalfunc::uploadFile($parent,$obj);
awsfileserver::checkupload($parent,$s3,S3_BUCKET,S3_TRAINING_URL.$fileName,dirname(__FILE__)."/../../../".S3_TRAINING_URL.$fileName) ;
//UNLINK
@unlink(dirname(__FILE__).'/../'.$this->training_path . $fileName);
// Update Condition
$file_condition = " ,`image`='" . $fileName . "'";
}
}
// Check already attendance available or not
$atten_str = "SELECT id FROM ".TABLE_TRAINING_PARTICIPANT_ATTENDANCE." WHERE schedule_id = '" . $schedule_id . "' AND userid='" . $userid . "' AND day='" . $day . "' LIMIT 1";
//print $ispresent . '--'. $day . '--'. $pre_assess_arr[0]->assessmentid;
$atten_arr = $parent->getQueryValue($atten_str);
if(count($atten_arr) == 0) {
// UPDATE TRAINING
$insert_qry = "INSERT INTO ".TABLE_TRAINING_PARTICIPANT_ATTENDANCE ." (`schedule_id`, `userid`, `day`, `ispresent`, `image`, `manual_attendance_reason`, `absence_reason`, `status`, `created_on`, `modified_on`) VALUES ( '".$schedule_id."', '".$userid."', '".$day."', '".$ispresent."', '".$fileName."', '".$manual_attendance_reason."', '".$absence_reason."', '1', '".NOW."', '".NOW."') ";
$parent->executeQuery($insert_qry);
}
else {
$update_qry = "UPDATE ".TABLE_TRAINING_PARTICIPANT_ATTENDANCE ." SET `day`='".$day."', `ispresent`='" . $ispresent . "', `absence_reason`='" . $absence_reason . "', `manual_attendance_reason`='" . $manual_attendance_reason . "', `status`='" . $status . "', `modified_on` = '".NOW."' " . $file_condition . " WHERE schedule_id = '".$schedule_id."' AND userid = '" . $userid . "' AND day='" . $day . "' ";
$parent->executeQuery($update_qry);
}
// PRE ASSESSMENT PARTICPANT ADD
if ($ispresent == 1 AND $day == 1 AND !empty($pre_assess_arr[0]->assessmentid)) {
// Get Pre Assessment Id
$check_pre_assess_user_str = "SELECT assessmentid FROM ".TABLE_TRAINING_ASSESSMENT." WHERE schedule_id='".$schedule_id."' AND assessmentid='".$pre_assess_arr[0]->assessmentid."' AND userid='".$userid."' LIMIT 1 ";
$check_pre_assess_user_arr = $parent->getQueryValue($check_pre_assess_user_str);
if (count($check_pre_assess_user_arr) == 0) {
$ins_pre_assess_arr[] =" ( '".$pre_assess_arr[0]->assessmentid."', '".$schedule_id."', '".$userid."', '0')";
$pre_assess_notification_users .= $userid . ',';
}
}
// POST ASSESSMENT PARTICPANT ADD
//print $ispresent . '--'. strtotime($schedule_arr[0]->end_date) . '--'. strtotime($todaydate) . '--'. $post_assess_arr[0]->assessmentid . '--'. $attendance_submit;
if ($ispresent == 1 AND ( strtotime($schedule_arr[0]->end_date) == strtotime($todaydate) ) AND !empty($post_assess_arr[0]->assessmentid) AND (!empty($attendance_submit)) ) {
// Get Pre Assessment Id
$check_post_assess_user_str = "SELECT assessmentid FROM ".TABLE_TRAINING_ASSESSMENT." WHERE schedule_id='".$schedule_id."' AND assessmentid='".$post_assess_arr[0]->assessmentid."' AND userid='".$userid."' LIMIT 1 ";
$check_post_assess_user_arr = $parent->getQueryValue($check_post_assess_user_str);
if (count($check_post_assess_user_arr) == 0) {
$ins_post_assess_arr[] =" ( '".$post_assess_arr[0]->assessmentid."', '".$schedule_id."', '".$userid."', '0')";
$post_assess_notification_users .= $userid . ',';
}
}
// Giving Default adbsent for other days if 1st day is absent start
if ( ($training_days > 1) AND ($day == 1 and $ispresent == 2) ) {
for($i = 2; $i <= $training_days; $i++) {
$atten_str = "SELECT id FROM ".TABLE_TRAINING_PARTICIPANT_ATTENDANCE." WHERE schedule_id = '" . $schedule_id . "' AND userid='" . $userid . "' AND day='" . $i . "' LIMIT 1";
$atten_arr = $parent->getQueryValue($atten_str);
if(count($atten_arr) == 0) {
//ASSESSMENT QUESTION
$insert_qry = "INSERT INTO ".TABLE_TRAINING_PARTICIPANT_ATTENDANCE ." (`schedule_id`, `userid`, `day`, `ispresent`, `image`, `manual_attendance_reason`, `absence_reason`, `status`, `created_on`, `modified_on`) VALUES ( '".$schedule_id."', '".$userid."', '".$i."', '2', '".$fileName."', '".$manual_attendance_reason."', '".$absence_reason."', '1', '".NOW."', '".NOW."') ";
$parent->executeQuery($insert_qry);
}
else {
$update_qry = "UPDATE ".TABLE_TRAINING_PARTICIPANT_ATTENDANCE ." SET `day`='".$i."', `ispresent`='2', `absence_reason`='" . $absence_reason . "', `manual_attendance_reason`='" . $manual_attendance_reason . "', `status`='" . $status . "', `modified_on` = '".NOW."' WHERE schedule_id = '".$schedule_id."' AND userid = '" . $userid . "' AND day='" . $i . "' ";
$parent->executeQuery($update_qry);
}
}
}
// Giving Default adbsent for other days if 1st day is absent end
}
// Update Submit Status in Training Schedule
if (!empty($parent->_request['attendance_submit'])) {
$update_qry = "UPDATE ".TABLE_TRAINING_SCHEDULE ." SET `attendance_submit`='".$attendance_submit."', `modified_on` = '".NOW."' WHERE schedule_id = '".$schedule_id."' ";
$parent->executeQuery($update_qry);
$absent_users = trim($absent_users, ',');
//print $absent_users;exit();
if (!empty($absent_users) ) {
// Get DSE id from Users
$dse_str = " SELECT smpin FROM `".TABLE_USER."` WHERE userid in (".$absent_users.") ";
$dse_arr = $parent->getQueryValue($dse_str);
if(count($dse_arr) > 0) {
foreach ($dse_arr as $dses) {
$dse_codes .= $dses->smpin . ', ';
}
$dse_codes = trim($dse_codes, ', ');
}
// Training Notification
$mobj = new stdClass();
$mobj->schedule_id = $schedule_id;
$mobj->type = 'absent';
$mobj->absent_users = $absent_users;
$mobj->dse_codes = $dse_codes;
$this->trainingabsentnotifictaion($parent, $mobj);
}
}
// Insert Pre Assessment Users
if (!empty($ins_pre_assess_arr)) {
$insert_qry = "INSERT INTO ".TABLE_TRAINING_ASSESSMENT ." ( `assessmentid`, `schedule_id`, `userid`, `is_attended`) VALUES ".@implode(',', $ins_pre_assess_arr);
$parent->executeQuery($insert_qry);
// Notifications
$pre_assess_notification_users = trim($pre_assess_notification_users, ',');
$mobj = new stdClass();
$mobj->schedule_id = $schedule_id;
$mobj->type = 'pre';
$mobj->users = $pre_assess_notification_users;
$this->trainingnotifictaion($parent, $mobj);
}
// Insert Post Assessment Users
if (!empty($ins_post_assess_arr)) {
$insert_qry = "INSERT INTO ".TABLE_TRAINING_ASSESSMENT ." ( `assessmentid`, `schedule_id`, `userid`, `is_attended`) VALUES ".@implode(',', $ins_post_assess_arr);
$parent->executeQuery($insert_qry);
// Notifications
$post_assess_notification_users = trim($post_assess_notification_users, ',');
$mobj = new stdClass();
$mobj->schedule_id = $schedule_id;
$mobj->type = 'post';
$mobj->users = $post_assess_notification_users;
$this->trainingnotifictaion($parent, $mobj);
}
}
$parent->response(array('response'=>'success', 'message'=>$this->page_data['success1']),200);
}
// Training Absent Notification
private function trainingabsentnotifictaion ($parent, $obj) {
if(!(isset($obj) && isset($obj->schedule_id))) $parent->response(array('response'=>'failed','message'=>'PHP ERROR Value not passed'),500);
$schedule_id = $obj->schedule_id;
$query_str = "SELECT s.schedule_name, s.start_date, s.end_date, tl.lvl_name as title FROM ".TABLE_TRAINING_SCHEDULE." s JOIN " . TABLE_TRAINING_LEVEL . " tl ON s.lvl_id = tl.lvl_id WHERE s.is_deleted='0' AND s.schedule_id='".$schedule_id."' LIMIT 1";
$query_arr=$parent->getQueryValue($query_str);
// $query_str = "SELECT userid FROM `".TABLE_TRAINING_PARTICIPANT."` WHERE schedule_id='".$schedule_id."' ";
// $part_arr = $parent->getQueryValue($query_str);
$absent_users = $obj->absent_users;
$dse_codes = $obj->dse_codes;
if(count($query_arr) > 0 && !empty($absent_users)) {
if ($obj->type == 'absent') {
$schedule_type_name = 'Red Alert - ';
$ntext = $schedule_type_name . "You are marked absent in today's - " . $query_arr[0]->title . " training";
}
$notificationtitle = $query_arr[0]->title . ' - ' . $query_arr[0]->schedule_name;
$notificationtext = $ntext;
$notificationtype = 10;
$nobj = new stdClass();
$nobj->schedule_id = $schedule_id;
$notificationdata = json_encode($nobj);
//INSERT NOTIFICATION
$parent->executeQuery("INSERT INTO `".TABLE_NOTIFICATION."` ( `notificationtitle`, `notificationtext`, `notificationdata`, `notificationtype`, `status`, `publisheddate`, `created_on`, `modified_on`) VALUES ('".escape_str($notificationtitle)."','".escape_str($notificationtext)."','".$notificationdata."','".$notificationtype."', '1','".NOW."','".NOW."','".NOW."')");
$notificationid = $parent->lastInsertId();
$data = array('notification_id'=>$notificationid, 'title'=>$notificationtitle, 'message'=>$notificationtext, 'notificationtype'=>$notificationtype, 'notificationdata'=>$notificationdata, 'created_date'=>NOW);
if(!empty($absent_users)) {
$part_arr = explode(',', $absent_users);
foreach ($part_arr as $res_user) {
$user_arr[] = $res_user;
}
// Absent Notification to User
$ins_arr = array();
foreach($user_arr as $res) {
$ins_arr[] = " ('".$notificationid."', '".$res."', '0', '".NOW."')";
}
$insert_chunk = array_chunk($ins_arr, 1000);
foreach($insert_chunk as $chunk_ins) {
//print "INSERT INTO ".TABLE_NOTIFICATION_USER."(`notificationid`, `userid`, `status`, `created_on`) VALUES ".@implode(',',$chunk_ins)." ON DUPLICATE KEY UPDATE `status` =0";
$parent->executeQuery("INSERT INTO ".TABLE_NOTIFICATION_USER."(`notificationid`, `userid`, `status`, `created_on`) VALUES ".@implode(',',$chunk_ins)." ON DUPLICATE KEY UPDATE `status` =0");
}
$usertokenarr['ios']=array();
$usertokenarr['android']=array();
$user_device_str = "SELECT ud.devicetype,ud.token FROM `".TABLE_USER_DEVICES."` as ud JOIN (SELECT userid FROM ".TABLE_NOTIFICATION_USER." WHERE notificationid='".$notificationid."') as u ON ud.userid=u.userid WHERE ud.is_deleted='0' AND (devicetype='ios' OR devicetype='android') AND token!=''";
$user_device_arr = $parent->getQueryValue($user_device_str);
if(count($user_device_arr) > 0) {
foreach($user_device_arr as $res_dev) {
//print_r($user_device_arr);
if(strtolower($res_dev->devicetype) == 'ios') {
$usertokenarr['ios'][] = $res_dev->token;
}
else if(strtolower($res_dev->devicetype) == 'android') {
$usertokenarr['android'][] = $res_dev->token;
}
}
// globalfunc::sendUserNotification($data,$usertokenarr);
}
// Absent Notification to AM
if (!empty($dse_codes)) {
$notication_dse = '( ' . $dse_codes . ' )';
}
$schedule_type_name = 'Red Alert - ';
$ntext = $schedule_type_name . 'Your DSE ' . $notication_dse . ' s is/are absent for - ' . $query_arr[0]->title . ' training';
$notificationtitle = $query_arr[0]->title . ' - ' . $query_arr[0]->schedule_name;
$notificationtext = $ntext;
$notificationtype = 10;
$nobj = new stdClass();
$nobj->schedule_id = $schedule_id;
$notificationdata = json_encode($nobj);
//INSERT NOTIFICATION
$parent->executeQuery("INSERT INTO `".TABLE_NOTIFICATION."` ( `notificationtitle`, `notificationtext`, `notificationdata`, `notificationtype`, `status`, `publisheddate`, `created_on`, `modified_on`) VALUES ('".escape_str($notificationtitle)."','".escape_str($notificationtext)."','".$notificationdata."','".$notificationtype."', '1','".NOW."','".NOW."','".NOW."')");
$notificationid = $parent->lastInsertId();
$data = array('notification_id'=>$notificationid, 'title'=>$notificationtitle, 'message'=>$notificationtext, 'notificationtype'=>$notificationtype, 'notificationdata'=>$notificationdata, 'created_date'=>NOW);
// Get Dealer code of DSE
$dealer_str = " SELECT dealer_code FROM `".TABLE_USER."` WHERE userid in (".$absent_users.") GROUP BY dealer_code ";
$dealer_arr = $parent->getQueryValue($dealer_str);
if(count($dealer_arr) > 0) {
foreach ($dealer_arr as $dealers) {
$dealer_codes .= $dealers->dealer_code . ',';
}
$dealer_codes = trim($dealer_codes, ',');
}
// Get AM ids
$user_arr = '';
$zm_str = "SELECT u.userid FROM `".TABLE_USER."` u WHERE emailid in (SELECT am_email FROM `".DMS_DEALER."` WHERE dealer_code in (".$dealer_codes.") GROUP BY am_email) ";
$zm_arr = $parent->getQueryValue($zm_str);
if(count($zm_arr)>0) {
foreach ($zm_arr as $res_user) {
$user_arr[] = $res_user->userid;
}
}
// Get Dealer ids
$user_arr = '';
$zm_str = "SELECT userid FROM `".TABLE_USER."` WHERE dealer_code in (".$dealer_codes.") GROUP BY dealer_code ";
$zm_arr = $parent->getQueryValue($zm_str);
if(count($zm_arr)>0) {
foreach ($zm_arr as $res_user) {
$user_arr[] = $res_user->userid;
}
}
$ins_arr = array();
foreach($user_arr as $res) {
$ins_arr[] = " ('".$notificationid."', '".$res."', '0', '".NOW."')";
}
$insert_chunk = array_chunk($ins_arr, 1000);
foreach($insert_chunk as $chunk_ins) {
//print "INSERT INTO ".TABLE_NOTIFICATION_USER."(`notificationid`, `userid`, `status`, `created_on`) VALUES ".@implode(',',$chunk_ins)." ON DUPLICATE KEY UPDATE `status` =0";
$parent->executeQuery("INSERT INTO ".TABLE_NOTIFICATION_USER."(`notificationid`, `userid`, `status`, `created_on`) VALUES ".@implode(',',$chunk_ins)." ON DUPLICATE KEY UPDATE `status` =0");
}
$usertokenarr['ios']=array();
$usertokenarr['android']=array();
$user_device_str = "SELECT ud.devicetype,ud.token FROM `".TABLE_USER_DEVICES."` as ud JOIN (SELECT userid FROM ".TABLE_NOTIFICATION_USER." WHERE notificationid='".$notificationid."') as u ON ud.userid=u.userid WHERE ud.is_deleted='0' AND (devicetype='ios' OR devicetype='android') AND token!=''";
$user_device_arr = $parent->getQueryValue($user_device_str);
if(count($user_device_arr) > 0) {
foreach($user_device_arr as $res_dev) {
//print_r($user_device_arr);
if(strtolower($res_dev->devicetype) == 'ios') {
$usertokenarr['ios'][] = $res_dev->token;
}
else if(strtolower($res_dev->devicetype) == 'android') {
$usertokenarr['android'][] = $res_dev->token;
}
}
// globalfunc::sendUserNotification($data,$usertokenarr);
}
}
}
}
// Training Level Score
private function traininglevelscore ($parent) {
globalfunc::checkMethodType($parent,array('GET' ));
globalfunc::checkAuthrozation($parent,array('type'=>'user'));
globalfunc::checkParamCount($parent,2);
$level = escape_str($parent->params[1]);
$reschedule_str = "SELECT l.name as id, ln.name as name, l.percentage FROM ".TABLE_TRAINING_LEVEL_SCORE." l JOIN ".TABLE_TRAINING_LEVEL_SCORE_NAMES." ln ON ln.id = l.name WHERE l.level = '".$level."' AND l.status = 1 ";
$reschedule_arr = $parent->getQueryValue($reschedule_str);
if(count($reschedule_arr) > 0) {
$parent->response(array('response'=>'success', 'data'=> $reschedule_arr, 'message'=>$this->page_data['success1']),200);
}
}
private function updatetrainingscore ($parent) {
globalfunc::checkMethodType($parent,array('POST' ));
globalfunc::checkAuthrozation($parent,array('type'=>'user'));
globalfunc::checkParamCount($parent,1);
$REQUEST_KEYS = array('schedule_id'=>'number');
globalfunc::mandatoryKey($parent,$REQUEST_KEYS);
$schedule_id = $parent->_request['schedule_id'];
$score = $parent->_request['score'];
$score_submit = $parent->_request['score_submit'];
$score_array = json_decode($score, true);
if(count($score_array) > 0) {
foreach ($score_array as $score_key => $atten) {
$userid = $atten['userid'];
$roleplay_or_demo = $atten['roleplay_or_demo'];
$assignment = $atten['assignment'];
$performance = $atten['performance'];
$certification = $atten['certification'];
$overall = $atten['overall'];
$remarks = $atten['remarks'];
$update_qry = "UPDATE ".TABLE_TRAINING_PARTICIPANT ." SET `roleplay_or_demo`='".$roleplay_or_demo."', `assignment`='".$assignment."', `performance`='".$performance."', `overall`='".$overall."', `remarks`='" . $remarks . "', `certification`='" . $certification . "', `modified_on` = '".NOW."' WHERE schedule_id = '".$schedule_id."' AND userid = '" . $userid . "' ";
$parent->executeQuery($update_qry);
}
}
// Update Submit Status in Training Schedule
if ($parent->_request['score_submit'] == 1 or $parent->_request['score_submit'] == 2) {
$update_qry = "UPDATE ".TABLE_TRAINING_SCHEDULE ." SET `score_submit`='".$score_submit."', `modified_on` = '".NOW."' WHERE schedule_id = '".$schedule_id."' ";
$parent->executeQuery($update_qry);
if ($parent->_request['score_submit'] == 1) {
// feedback Questions
$query_str = " SELECT schedule_id, schedule_name, is_feedback, lvl_id FROM ".TABLE_TRAINING_SCHEDULE." WHERE is_deleted='0' AND schedule_id='".$schedule_id."' LIMIT 1";
$query_arr = $parent->getQueryValue($query_str);
// Publish Score of Training Notification to AM, RM, ZM
$mobj = new stdClass();
$mobj->schedule_id = $schedule_id;
$mobj->type = 'score';
$this->trainingnotifictaion($parent, $mobj);
// NOtifications to DSE, AM & Dealer about Score certified or failed
//$query_str = " SELECT p.userid, p.certification FROM ".TABLE_TRAINING_PARTICIPANT." p JOIN ".TABLE_TRAINING_PARTICIPANT_ATTENDANCE." pa ON p.schedule_id = pa.schedule_id AND p.userid = pa.userid WHERE pa.ispresent = '1' AND p.schedule_id='".$schedule_id."' GROUP BY pa.userid ";
$part_query_str = " SELECT p.userid, p.certification FROM ".TABLE_TRAINING_PARTICIPANT." p WHERE p.status in (0, 1) AND p.schedule_id='".$schedule_id."' ";
$part_query_arr = $parent->getQueryValue($part_query_str);
$cerified_users = $failed_users = '';
foreach ($part_query_arr as $key => $values) {
if ($values->certification == 1) {
$cerified_users .= $values->userid . ',';
}
else if ($values->certification == 2) {
$failed_users .= $values->userid . ',';
}
}
$cerified_users = trim($cerified_users, ',');
$failed_users = trim($failed_users, ',');
// Ceritication Notification
if (!empty($cerified_users)) {
$mobj = new stdClass();
$mobj->schedule_id = $schedule_id;
$mobj->users = $cerified_users;
$mobj->type = 'userscore_certified';
$this->trainingnotifictaion($parent, $mobj);
}
// Failerd Notifcations
if (!empty($failed_users)) {
$mobj = new stdClass();
$mobj->schedule_id = $schedule_id;
$mobj->users = $failed_users;
$mobj->type = 'userscore_fail';
$this->trainingnotifictaion($parent, $mobj);
}
// Feedback
if ($query_arr[0]->is_feedback == 1) {
// Checking Assessmengt Avaible or not
$check_asse_str = " SELECT assessmentid FROM ".TABLE_ASSESSMENT." WHERE assettypeid='2' AND schedule_id='".$schedule_id."' LIMIT 1";
$check_asse_arr = $parent->getQueryValue($check_asse_str);
if(count($check_asse_arr) == 0) {
//INSERT ASSESSMENT
$assessmentname = $query_arr[0]->schedule_name . " feedback";
$ques_count = 5;
$assessmenttime = 60;
$buffer_day = 2;
$assessment_startdate=date('Y-m-d H:i:s');
//GET ASSESSMENT END DATE
$assessment_enddate=date('Y-m-d H:i:s',strtotime('+'.$buffer_day.' day'));
$insert_qry = "INSERT INTO ".TABLE_ASSESSMENT ." ( `atype`, `lvl_id`, `assessmentname`, `description`, `assessmentimage`, `assessmenttype`, `assettypeid`, `assessmenttimetype`, `assessmenttime`, `attemptslimit`, `publisheddate`, `enddate`, `randomcond`, `filter_role`, `filter_zone`, `filter_region`, `filter_dealer`, `assessmentnotification`, `total_question`,`schedule_id`, `status`, `creatorid`, `created_on`, `modified_on`) VALUES ('1','".$lvl_id."','".$assessmentname."','".$assessmentname."','','".$assessmenttype."','2','2','".$assessmenttime."','1','".$assessment_startdate."','".$assessment_enddate."','".$randomcond."','','','','','','".$ques_count."','".$schedule_id."','1','".$trainer_id."','".NOW."','".NOW."')";
$parent->executeQuery($insert_qry);
$assessmentid = $parent->lastInsertId();
// Getting PArtcipants Array
$participant_str = " SELECT DISTINCT( p.userid ) FROM ".TABLE_TRAINING_PARTICIPANT." p JOIN ".TABLE_TRAINING_PARTICIPANT_ATTENDANCE." pa ON p.schedule_id = pa.schedule_id AND p.userid = pa.userid WHERE p.status in (0,1) and pa.ispresent = 1 AND p.schedule_id='".$schedule_id."'";
$participant_arr = $parent->getQueryValue($participant_str);
if(count($participant_arr)>0) {
$ins_assess_arr=array();
foreach($participant_arr as $userid => $participants) {
$ins_assess_arr[] =" ( '".$assessmentid."', '".$schedule_id."', '".$participants->userid."', '0')";
}
$insert_survey_qry = "INSERT INTO ".TABLE_TRAINING_SURVEY ." ( `assessmentid`, `schedule_id`, `userid`, `is_attended`) VALUES ".@implode(',',$ins_assess_arr);
}
//ASSESSMENT PARTICPANT ADD
$parent->executeQuery($insert_survey_qry);
// Notification
//if ($query) {
// Training Notification
$mobj = new stdClass();
$mobj->schedule_id = $schedule_id;
$mobj->type = 'feedback';
$this->trainingnotifictaion($parent, $mobj);
//}
//ASSESSMENT QUESTION ADD
$rcond = ($randomcond)?"ORDER BY RAND()":"ORDER BY id ASC";
$ques_str = "SELECT * FROM ".TABLE_TRAINING_FEEDBACK_QUESTION." WHERE status='1' ";
$ques_arr=$parent->getQueryValue($ques_str);
if(count($ques_arr)>0) {
$ins_ques_arr=array();
foreach($ques_arr as $res_ques) {
$ins_ques_arr[] =" ( '".$assessmentid."','".$res_ques->id."', '1', '".$trainer_id."','".NOW."', '".NOW."')";
}
//ASSESSMENT QUESTION
$insert_ques_qry = "INSERT INTO ".TABLE_ASSESSMENT_QUESTION ." (`assessmentid`, `qid`, `is_mandatory`, `creatorid`, `created_on`, `modified_on`) VALUES ".@implode(',',$ins_ques_arr);
$query = $parent->executeQuery($insert_ques_qry);
}
}
}
}
}
$parent->response(array('response'=>'success', 'message'=>$this->page_data['success1']),200);
}
// AM Acknowledge to Training
private function amacknowledgement ($parent) {
globalfunc::checkMethodType($parent,array('POST' ));
globalfunc::checkAuthrozation($parent,array('type'=>'user'));
globalfunc::checkParamCount($parent,1);
$REQUEST_KEYS = array('schedule_id'=>'number', 'absent_reason'=>'string');
globalfunc::mandatoryKey($parent,$REQUEST_KEYS);
$schedule_id = $parent->_request['schedule_id'];
$absent_reason = $parent->_request['absent_reason'];
$am_acknowledgement = $parent->_request['am_acknowledgement'];
$participant_absent_reason_array = json_decode($absent_reason, true);
if(count($participant_absent_reason_array) > 0) {
foreach ($participant_absent_reason_array as $absent_key => $atten) {
$userid = $atten['userid'];
$am_absence_reason = $atten['am_absence_reason'];
$am_absence_reason_desc = $atten['am_absence_reason_desc'];
$update_qry = "UPDATE ".TABLE_TRAINING_PARTICIPANT ." SET `am_absence_reason`='".$am_absence_reason."', `am_absence_reason_desc`='".$am_absence_reason_desc."', `modified_on` = '".NOW."' WHERE schedule_id = '".$schedule_id."' AND userid = '" . $userid . "' ";
$parent->executeQuery($update_qry);
}
// Update AM Aknowledgment in Training Schedule
// Get Acknowledge Details
$query_str = " SELECT p.userid FROM ".TABLE_TRAINING_PARTICIPANT." p LEFT JOIN ".TABLE_TRAINING_PARTICIPANT_ATTENDANCE." pa ON p.schedule_id = pa.schedule_id AND p.userid = pa.userid WHERE pa.ispresent = '2' AND p.schedule_id='".$schedule_id."' AND p.am_absence_reason = '' ";
$query_arr = $parent->getQueryValue($query_str);
if (!empty($parent->_request['am_acknowledgement']) and count($query_arr) == 0 ) {
$update_qry = "UPDATE ".TABLE_TRAINING_SCHEDULE ." SET `am_acknowledgement`='".$am_acknowledgement."', `modified_on` = '".NOW."' WHERE schedule_id = '".$schedule_id."' ";
$parent->executeQuery($update_qry);
}
$parent->response(array('response'=>'success', 'message'=>$this->page_data['success1']),200);
}
else {
$parent->response(array('response'=>'failed', 'message'=>$this->page_data['error11']), 406);
}
}
// Training Summery
private function trainingsummery ($parent) {
globalfunc::checkMethodType($parent,array('GET' ));
globalfunc::checkAuthrozation($parent,array('type'=>'user'));
$schedule_id = escape_str($parent->params[1]);
$schedule_str = "SELECT s.*, tl.lvl_name as title, CONCAT(u.fname, ' ', u.lname) as organizer_name FROM ".TABLE_TRAINING_SCHEDULE." s JOIN " . TABLE_TRAINING_LEVEL . " tl ON s.lvl_id = tl.lvl_id JOIN ".TABLE_USER." u ON s.trainer_id = u.userid WHERE s.schedule_id = '".$schedule_id."' LIMIT 1 ";
$schedule_arr = $parent->getQueryValue($schedule_str);
if(count($schedule_arr) > 0) {
// Total Particpants
$participant_str = "SELECT count(participant_id) as total_planned_participant FROM ".TABLE_TRAINING_PARTICIPANT." WHERE schedule_id='".$schedule_id."' ";
$participant_arr = $parent->getQueryValue($participant_str);
$schedule_arr[0]->total_planned_participant = $participant_arr[0]->total_planned_participant;
// Attendance
$participant_atten_str = "SELECT `day`, count(id) as total_participant_appeared FROM ".TABLE_TRAINING_PARTICIPANT_ATTENDANCE." WHERE schedule_id = '".$schedule_id."' AND ispresent = '1' group by day ";
$participant_atten_arr = $parent->getQueryValue($participant_atten_str);
foreach ($participant_atten_arr as $atten_key => $atten_details) {
$atten_details->total_planned_participant = $participant_arr[0]->total_planned_participant;
$atten_details->no_of_absents = $atten_details->total_planned_participant - $atten_details->total_participant_appeared;
}
$schedule_arr[0]->attendance = $participant_atten_arr;
// Total Particpants Appeared
$participant_appr_str = "SELECT id FROM ".TABLE_TRAINING_PARTICIPANT_ATTENDANCE." WHERE schedule_id = '".$schedule_id."' AND ispresent = '1' group by userid ";
$participant_appr_arr = $parent->getQueryValue($participant_appr_str);
$schedule_arr[0]->total_participant_appeared = count($participant_appr_arr);
// Total Particpants Cerified
$participant_str = "SELECT count(participant_id) as no_of_dse_certified FROM ".TABLE_TRAINING_PARTICIPANT." WHERE schedule_id='".$schedule_id."' AND certification = 1 ";
$participant_arr = $parent->getQueryValue($participant_str);
$schedule_arr[0]->no_of_dse_certified = $participant_arr[0]->no_of_dse_certified;
// Total Particpants Failed
$schedule_arr[0]->no_of_dse_failed = $schedule_arr[0]->total_participant_appeared - $schedule_arr[0]->no_of_dse_certified;
// Batch through
$score_percentage_str = "SELECT percentage FROM ".TABLE_TRAINING_LEVEL_SCORE." WHERE level = '" . $schedule_arr[0]->lvl_id. "' AND name = 1";
$score_percentage_arr = $parent->getQueryValue($score_percentage_str);
$schedule_arr[0]->batch_through = $score_percentage_arr[0]->percentage;
// Average Batch score
$participant_avg_str = "SELECT AVG(overall) AS average_batch_score FROM ".TABLE_TRAINING_PARTICIPANT." WHERE schedule_id='".$schedule_id."' ";
$participant_avg_arr = $parent->getQueryValue($participant_avg_str);
$schedule_arr[0]->average_batch_score = round($participant_avg_arr[0]->average_batch_score);
}
$parent->response(array('response'=>'success', 'data'=> $schedule_arr[0], 'message'=>$this->page_data['success1']),200);
}
private function trainingattendancenotification ($parent) {
globalfunc::checkMethodType($parent,array('POST' ));
globalfunc::checkAuthrozation($parent,array('type'=>'user'));
globalfunc::checkParamCount($parent,1);
$REQUEST_KEYS = array('userid'=>'number', 'schedule_id'=>'number');
globalfunc::mandatoryKey($parent,$REQUEST_KEYS);
$schedule_id = $parent->_request['schedule_id'];
$userid = $parent->_request['userid'];
$query_str = "SELECT s.schedule_name, s.start_date, s.end_date, tl.lvl_name as title FROM ".TABLE_TRAINING_SCHEDULE." s JOIN " . TABLE_TRAINING_LEVEL . " tl ON s.lvl_id = tl.lvl_id WHERE s.is_deleted='0' AND s.schedule_id='".$schedule_id."' LIMIT 1";
$query_arr = $parent->getQueryValue($query_str);
$otp_expiry = globalfunc::generateExpiryTime($parent, ENQUIRY_OTP_EXPIRY_MIN);
$otp = globalfunc::generateOTP();
// Update OTP
$update_qry = " UPDATE ".TABLE_TRAINING_PARTICIPANT ." SET `present_otp`='".$otp."', `modified_on` = '".NOW."' WHERE schedule_id = '".$schedule_id."' AND userid = '" . $userid . "' ";
$parent->executeQuery($update_qry);
$notificationtitle = $query_arr[0]->title . ' - ' . $query_arr[0]->schedule_name;
$notificationtext = "OTP for marking your attendance is " . $otp ;
$notificationtype = 10;
$nobj = new stdClass();
$nobj->schedule_id = $schedule_id;
$notificationdata = json_encode($nobj);
//INSERT NOTIFICATION
$parent->executeQuery("INSERT INTO `".TABLE_NOTIFICATION."` ( `notificationtitle`, `notificationtext`, `notificationdata`, `notificationtype`, `status`, `publisheddate`, `created_on`, `modified_on`) VALUES ('".escape_str($notificationtitle)."','".escape_str($notificationtext)."','".$notificationdata."','".$notificationtype."', '1','".NOW."','".NOW."','".NOW."')");
$notificationid = $parent->lastInsertId();
$data = array('notification_id' => $notificationid, 'title'=>$notificationtitle, 'message'=>$notificationtext, 'notificationtype'=>$notificationtype,' notificationdata'=>$notificationdata, 'created_date'=>NOW);
$parent->executeQuery("INSERT INTO ".TABLE_NOTIFICATION_USER. "(`notificationid`, `userid`, `status`, `created_on`) VALUES ('".$notificationid."', '".$userid."', '0', '".NOW."')" );
$usertokenarr['ios']=array();
$usertokenarr['android']=array();
$user_device_str = "SELECT ud.devicetype, ud.token FROM `".TABLE_USER_DEVICES."` as ud JOIN (SELECT userid FROM ".TABLE_NOTIFICATION_USER." WHERE notificationid='".$notificationid."') as u ON ud.userid=u.userid WHERE ud.is_deleted='0' AND (devicetype='ios' OR devicetype='android') AND token!=''";
$user_device_arr = $parent->getQueryValue($user_device_str);
if(strtolower($user_device_arr[0]->devicetype) == 'ios') {
$usertokenarr['ios'][] = $user_device_arr[0]->token;
}
else if(strtolower($user_device_arr[0]->devicetype) == 'android') {
$usertokenarr['android'][] = $user_device_arr[0]->token;
}
// globalfunc::sendUserNotification($data, $usertokenarr);
$parent->response(array('response'=>'success', 'message'=>$this->page_data['success1']),200);
}
private function trainingattendancenotificationupdate ($parent) {
globalfunc::checkMethodType($parent,array('POST' ));
globalfunc::checkAuthrozation($parent,array('type'=>'user'));
globalfunc::checkParamCount($parent,1);
$REQUEST_KEYS = array('userid'=>'number', 'schedule_id'=>'number', 'otp'=>'number');
globalfunc::mandatoryKey($parent,$REQUEST_KEYS);
$schedule_id = $parent->_request['schedule_id'];
$userid = $parent->_request['userid'];
$otp = $parent->_request['otp'];
$query_str = " SELECT participant_id FROM ".TABLE_TRAINING_PARTICIPANT." WHERE schedule_id='".$schedule_id."' AND userid='".$userid."' AND present_otp='".$otp."' LIMIT 1";
$query_arr = $parent->getQueryValue($query_str);
if (count($query_arr) > 0) {
$parent->response(array('response'=>'success', 'message'=>$this->page_data['success1']),200);
}
else {
$parent->response(array('response'=>'failed', 'message'=>$this->page_data['error11']), 406);
}
}
// QR Code Generation
private function trainingqrcodegeneration ($parent) {
require "qrcode/qrlib.php";
header('Content-type: image/png');
$qr_data = "testdata";
chmod($foldername, 0777);
$errorCorrectionLevel = 'L';
$matrixPointSize = 4;
print $filename = $foldername . $qr_data . '.png';
try {
// QRcode::png('barrda554');
// //echo 'You can provide data in GET parameter: like that
';
//QRcode::png('PHP QR Code :)', $filename, $errorCorrectionLevel, $matrixPointSize, 2);
QRcode::png($qr_data, $filename, $errorCorrectionLevel, $matrixPointSize, 2);
//QRcode::png($qr_data, $filename, QR_ECLEVEL_L, 4);
}
catch(PDOException $e) {
echo $e->getMessage();
}
}
// QR Code Generation
private function trainingdseqrcode ($parent) {
globalfunc::checkMethodType($parent,array('GET' ));
globalfunc::checkAuthrozation($parent,array('type'=>'user'));
globalfunc::checkParamCount($parent,2);
//print_r($parent);
//$schedule_id = escape_str($parent->params[1]);
$dse = escape_str($parent->params[1]);
$todaydate_time = date('Y-m-d');
$training_check_ques_str = "SELECT s.schedule_id, tl.lvl_name as title, s.start_date, s.end_date, s.starttime, s.endtime FROM ".TABLE_TRAINING_SCHEDULE." s INNER JOIN " . TABLE_TRAINING_LEVEL . " tl ON s.lvl_id = tl.lvl_id JOIN ".TABLE_TRAINING_PARTICIPANT ." p ON s.schedule_id = p.schedule_id JOIN " . TABLE_USER . " u ON p.userid = u.userid WHERE ('".$todaydate_time ."' between DATE_FORMAT(s.start_date,'%Y-%m-%d') AND DATE_FORMAT(s.end_date, '%Y-%m-%d') ) AND u.smpin = '".$dse."' ";
$training_check_ques_arr = $parent->getQueryValue($training_check_ques_str);
if(count($training_check_ques_arr) > 0) {
//$link = $SITE_URL . "hypermupload/training/crtraining.png";
$todaydate = date('Y-m-d');
$datediff = strtotime($todaydate) - strtotime($training_check_ques_arr[0]->start_date);
$currentday = round($datediff / (60 * 60 * 24));
$starttime_array = json_decode(stripslashes($training_check_ques_arr[0]->starttime), true);
$endtime_array = json_decode(stripslashes($training_check_ques_arr[0]->endtime), true);
$current_starttime = $starttime_array[$currentday];
$current_endtime = $endtime_array[$currentday];
$time1 = strtotime($current_starttime);
$time2 = strtotime($current_endtime);
$training_check_ques_arr[0]->duration = round(abs($time2 - $time1) / 3600,2);
$s3 = awsfileserver::connectS3();
$training_check_ques_arr[0]->link = awsfileserver::getS3FileUrl($s3,S3_BUCKET,S3_TRAINING_URL.'crtraining.png');
$training_check_ques_arr[0]->training_date = date('d/m/Y');
//$parent->response(array('response'=>'success', 'data'=> $link, 'message'=>$this->page_data['success1']),200);
$parent->response(array('response'=>'success', 'data'=> $training_check_ques_arr[0], 'message'=>$this->page_data['success1']),200);
}
else {
$parent->response(array('response'=>'success', 'message'=>$this->page_data['success1']),200);
}
}
// DSE Score and Result
private function dsescoreresultlist ($parent) {
globalfunc::checkMethodType($parent,array('GET'));
globalfunc::checkParamCount($parent,1);
globalfunc::checkAuthrozation($parent,array('type'=>'user'));
$schedule_str = "SELECT s.schedule_id, s.lvl_id, s.start_date, s.end_date, s.venue_type, s.venue_am, s.venue_dealer, s.venue_address, tl.lvl_name as title, s.starttime, s.endtime, s.training_id, p.`roleplay_or_demo`, p.`assignment`, p.`performance`, p.`certification`, p.overall FROM ".TABLE_TRAINING_SCHEDULE." s INNER JOIN " . TABLE_TRAINING_LEVEL . " tl ON s.lvl_id = tl.lvl_id INNER JOIN " . TABLE_TRAINING_PARTICIPANT . " p ON s.schedule_id = p.schedule_id WHERE p.userid = '".$parent->current_user_id."' ";
$schedule_arr = $parent->getQueryValue($schedule_str);
foreach ($schedule_arr as $key => $schedules) {
$score_percentage_str = "SELECT id, name, percentage FROM ".TABLE_TRAINING_LEVEL_SCORE." WHERE level = '" . $schedules->lvl_id. "'";
$score_percentage_arr = $parent->getQueryValue($score_percentage_str);
foreach ($score_percentage_arr as $percentage_key => $percentages) {
if (strtolower($percentages->name) == '2') {
$pre_test_percentage = $percentages->percentage;
}
elseif (strtolower($percentages->name) == '3') {
$post_test_percentage = $percentages->percentage;
}
}
// Getting Pre and Post Assessment Scores
$schedule_arr[$key]->pre_test = $schedule_arr[$key]->post_test = $schedule_arr[$key]->pre_test_percentage = $schedule_arr[$key]->post_test_percentage = 0;
$assessment_str = "SELECT a.`assessmenttype`, au.`highscore` FROM ".TABLE_ASSESSMENT_USER." au JOIN ".TABLE_ASSESSMENT." a ON a.assessmentid = au.assessmentid WHERE a.schedule_id = '".$schedules->schedule_id."' AND au.userid = '" . $parent->current_user_id . "' AND au.highscorearid != 0 ";
$assessment_arr = $parent->getQueryValue($assessment_str);
if(count($assessment_arr) > 0) {
foreach ($assessment_arr as $assessment_key => $assessments) {
if ($assessments->assessmenttype == 1) {
$schedule_arr[$key]->pre_test = $assessments->highscore;
$schedule_arr[$key]->pre_test_percentage = ($schedule_arr[$key]->pre_test * $pre_test_percentage) / 100;
}
elseif ($assessments->assessmenttype == 2) {
$schedule_arr[$key]->post_test = $assessments->highscore;
$schedule_arr[$key]->post_test_percentage = ($schedule_arr[$key]->post_test * $post_test_percentage) / 100;
}
}
}
}
$parent->response(array('response'=>'success', 'data'=>$schedule_arr,'message'=>$this->page_data['success1']),200);
}
// DSE FeedBack List
private function dsefeedbacklist ($parent) {
globalfunc::checkMethodType($parent,array('GET'));
globalfunc::checkParamCount($parent,1);
globalfunc::checkAuthrozation($parent,array('type'=>'user'));
//USER COND
// $user_cond_arr=projectfunc::getUserAssessmentCond($parent);
// $user_cond=" AND ".@implode(' AND ',$user_cond_arr);
// $status_arr=array();
// //NEW ROLE CONDITION
// $user_cond.=($parent->current_user_role>7 && $parent->current_user_role<14)?" AND a.user_type=0 ":" AND a.user_type=1 ";
// if($parent->current_user_role>7 && $parent->current_user_role<14) {
// $user_cond.=" AND (a.segment='0' OR a.segment='".$parent->current_user_data->segment."')";
// }
//print $assessment_str = "SELECT a.* FROM ".TABLE_ASSESSMENT." as a WHERE a.status='1' AND a.assettypeid='2' AND schedule_id !='' AND a.publisheddate<='".NOW."' ".$user_cond;
$assessment_str = "SELECT CONCAT(u.fname, ' ', u.lname) as organizer_name, a.assessmentid, a.filter_zone, a.filter_region, a.filter_dealer, a.status, a.schedule_id, s.training_group_image, s.business_segment, s.training_group_image, s.lvl_id, s.start_date, s.end_date, s.venue_type, s.venue_am, s.venue_dealer, s.venue_address, tl.lvl_name as title, s.starttime, s.endtime, s.training_id, d.dealer_code, d.am_name, d.am_email FROM ".TABLE_ASSESSMENT." as a JOIN ".TABLE_TRAINING_SCHEDULE." s ON a.schedule_id = s.schedule_id JOIN ".TABLE_USER." u ON s.trainer_id = u.userid LEFT JOIN ".DMS_DEALER." d ON d.dealer_code = u.dealer_code JOIN " . TABLE_TRAINING_LEVEL . " tl ON s.lvl_id = tl.lvl_id JOIN ". TABLE_TRAINING_SURVEY ." ts ON ts.assessmentid = a.assessmentid and ts.userid = '".$parent->current_user_id."' WHERE a.status='1' AND a.assettypeid='2' AND a.schedule_id !='' ";
//$assessment_str = "SELECT s.*, a.assessmentid FROM ".TABLE_ASSESSMENT." as a JOIN ". TABLE_TRAINING_SCHEDULE ." s WHERE a.status='1' AND a.assettypeid='2' AND a.schedule_id !='' ".$user_cond;
$assessment_arr=$parent->getQueryValue($assessment_str);
if(count($assessment_arr)>0) {
/* //GET ALL STATUS
$status_str = "SELECT `statusid`, `status` FROM ".TABLE_STATUS;
$status_res_arr=$parent->getQueryValue($status_str);
if(count($status_res_arr)>0) {
foreach($status_res_arr as $res) {
$obj_key=$res->statusid;
$status_arr[$obj_key]=$res->status;
}
}
//S3 OBJECT
$s3=awsfileserver::connectS3();*/
//ADD EXTRA FIELDS
foreach($assessment_arr as $key=>$res_assessment) {
// Business Segment Name
if ($res_assessment->business_segment == 2) {
$res_assessment->segment_name = 'Parents/Guardian';
}
else if ($res_assessment->business_segment == 1) {
$res_assessment->segment_name = 'Instructor';
}
else if ($res_assessment->business_segment == 3) {
$res_assessment->segment_name = 'Student Learner';
}
if($res_assessment->training_group_image != '') {
//CONNECT S3
$s3 = awsfileserver::connectS3();
$res_assessment->training_group_image = awsfileserver::getS3FileUrl($s3,S3_BUCKET,S3_TRAINING_URL.$res_assessment->training_group_image);
}else {
$res_assessment->training_group_image = USER_NOIMAGE_URL;
}
$datediff = strtotime($res_assessment->enddate) - strtotime($res_assessment->startdate);
$assessment_arr[$key]->training_days = round($datediff / (60 * 60 * 24)) + 1;
// Participants count
$participant_str = "SELECT count(participant_id) as total_participants FROM ".TABLE_TRAINING_PARTICIPANT." WHERE schedule_id='".$res_assessment->schedule_id."' AND status in (0,1) ";
$participant_arr = $parent->getQueryValue($participant_str);
$assessment_arr[$key]->total_participants = $participant_arr[0]->total_participants;
//SURVEY IMAGE
/* $assessment_arr[$key]->assessmentimage_url=SURVEYIMAGE_URL;
if($res_assessment->assessmentimage!='') {
$assessment_arr[$key]->assessmentimage_url=awsfileserver::getS3FileUrl($s3,S3_BUCKET,S3_ASSESSMENT_URL.$res_assessment->assessmentimage);
}*/
$assessment_arr[$key]->is_expired ='0';
$assessment_arr[$key]->is_completed ='0';
//CHECK ALREADY ATTENDTED
$assessment_result_str = "SELECT remarks FROM ".TABLE_ASSESSMENTRESULT." WHERE assessmentid='".$res_assessment->assessmentid."' AND userid='".$parent->current_user_id."' ORDER BY arid DESC";
$assessment_result_arr=$parent->getQueryValue($assessment_result_str);
if(count($assessment_result_arr)>0) {
$assessment_arr[$key]->is_completed ='1';
// 3-Completed , 4 - In Progress
// $assessment_arr[$key]->status =($assessment_result_arr[0]->status=='1')?'3':'1';
// $res_assessment->status = $assessment_arr[$key]->status;
} else {
// $assessment_arr[$key]->status ='7';
// $res_assessment->status = $assessment_arr[$key]->status;
}
$res_assessment->remarks = $assessment_result_arr[0]->remarks;
//EXPIRED
if(strtotime($res_assessment->enddate)is_expired='1';
$assessment_arr[$key]->status = '8';
$res_assessment->status = '8';
}
//STATUS STRING
// $assessment_arr[$key]->statusname=(isset($status_arr[$res_assessment->status]))?$status_arr[$res_assessment->status]:"";
// //ATTEMPT TIME
// $attempt_time_str = "SELECT * FROM ".TABLE_ASSESSMENTRESULT." WHERE assessmentid='".$res_assessment->assessmentid."' AND userid='".$parent->current_user_id."' ORDER by attempt_time DESC";
// $attempt_time_arr=$parent->getQueryValue($attempt_time_str);
// $assessment_arr[$key]->attempt_time=(count($attempt_time_arr)>0)?$attempt_time_arr[0]->attempt_time:0;
// //IS ATTENDED
// $assessment_arr[$key]->is_attended='0';
// $assessment_arr[$key]->result_id='';
//HIGHSCORE
// $assessment_arr[$key]->highscore='0';
// if(count($attempt_time_arr)>0) {
// $user_assessment_score_arr=array_column($attempt_time_arr,'percentage_score');
// rsort( $user_assessment_score_arr);
// $assessment_arr[$key]->highscore=(string)$user_assessment_score_arr[0];
// $assessment_arr[$key]->is_attended='1';
// //FOR SURVEY RESULT VIEW
// $assessment_arr[$key]->result_id=$attempt_time_arr[0]->arid;
// }
$assessment_arr[$key]->training_feedback = $assessment_arr[$key]->trainer_feedback = $assessment_arr[$key]->overall_feedback = 0;
// Survey Training feedback
$survey_feedback_str =" SELECT count(userresultid) as question_count, SUM(r.choiseid) as question_sum FROM ".TABLE_ASSESSMENT_USERRESULT." r JOIN ". TABLE_TRAINING_FEEDBACK_QUESTION ." q ON q.id = r.qid WHERE r.assessmentid='".$res_assessment->assessmentid."' AND q.questiontype = 1 AND userid='".$parent->current_user_id."' ";
$survey_feedback_arr=$parent->getQueryValue($survey_feedback_str);
if (count($survey_feedback_arr) > 0 AND $survey_feedback_arr[0]->question_count > 0) {
$training_feedback = round($survey_feedback_arr[0]->question_sum / $survey_feedback_arr[0]->question_count, 1);
$assessment_arr[$key]->training_feedback = $training_feedback . '/' . '5';
}
// Survey Trainer feedback
$survey_feedback_str =" SELECT count(userresultid) as question_count, SUM(r.choiseid) as question_sum FROM ".TABLE_ASSESSMENT_USERRESULT." r JOIN ". TABLE_TRAINING_FEEDBACK_QUESTION ." q ON q.id = r.qid WHERE r.assessmentid='".$res_assessment->assessmentid."' AND q.questiontype = 2 AND userid='".$parent->current_user_id."' ";
$survey_feedback_arr=$parent->getQueryValue($survey_feedback_str);
if (count($survey_feedback_arr) > 0 AND $survey_feedback_arr[0]->question_count > 0) {
$trainer_feedback = round($survey_feedback_arr[0]->question_sum / $survey_feedback_arr[0]->question_count, 1);
$assessment_arr[$key]->trainer_feedback = $trainer_feedback . '/' . '5';
}
// Overrall Feedback
if (!empty($training_feedback) and !empty($trainer_feedback)) {
$overall_feedback = round( ($training_feedback + $trainer_feedback) / 2);
$assessment_arr[$key]->overall_feedback = $overall_feedback . '/' . '5';
}
}
}
//LOG
$logstr='SURVEY LIST';
globalfunc::insertUserLog($parent,$logstr);
$parent->response(array('response'=>'success', 'data'=>$assessment_arr,'message'=>$this->page_data['success1']),200);
}
// Feedback Question
private function trainingfeedbackquestion ($parent) {
globalfunc::checkMethodType($parent,array('GET'));
globalfunc::checkParamCount($parent,2);
globalfunc::checkAuthrozation($parent,array('type'=>'user'));
$assessmentid = escape_str($parent->params['1']);
//VALIDATE ASSESSMENT
projectfunc::userSurveyValid($parent,$parent->current_user_id,$assessmentid);
//ASSESSMENT VALIDATION
/*$assessment_str = "SELECT * FROM ".TABLE_ASSESSMENT." WHERE assessmentid='".$assessmentid."' AND status='1' AND assettypeid='2' LIMIT 1";
$assessment_arr=$parent->getQueryValue($assessment_str);
if(count($assessment_arr)!=1) $parent->response(array('response'=>'failed','message'=>$this->page_data["error2"]),406);
//S3 OBJECT
$s3=awsfileserver::connectS3();
if($assessment_arr[0]->randomcond=='1' )
{
$econd=" ORDER BY RAND() ";
}else
{
$econd=" ORDER BY aq.aqid ASC";
}*/
//GET RATINGS IS COMMON
$survey_str = "SELECT id, score options FROM ".TABLE_SURVEY_RATING." ORDER BY id ASC";
$survey_arr=$parent->getQueryValue($survey_str);
// Training feedback question type ids array
//$limit_str=" LIMIT 0,".$assessment_arr[0]->total_question." ";
$ques_str ="SELECT aq.aqid ,q.id as qid, q.`questiontype`, if(q.`questiontype`=1, 'training', 'trainer') as questiontype_name, q.`questiontext` FROM ".TABLE_TRAINING_FEEDBACK_QUESTION." as q JOIN (SELECT * FROM ".TABLE_ASSESSMENT_QUESTION." WHERE assessmentid='".$assessmentid."' )as aq ON q.id=aq.qid ";
$ques_arr=$parent->getQueryValue($ques_str);
if(count($ques_arr)>0) {
//CONNECT S3
$s3=awsfileserver::connectS3();
$this->rating_rid=1;
$data->training_feedback_score = $data->trainer_feedback_score = 0;
$training_question_count = $trainer_question_count = 0;
foreach($ques_arr as $key=>$res_ques) {
$res_ques->rating_options=array();
// Question Answer Result
$feedback_question_str =" SELECT choiseid FROM ".TABLE_ASSESSMENT_USERRESULT." WHERE assessmentid='".$assessmentid."' AND userid='".$parent->current_user_id."' AND qid = ".$res_ques->qid." ";
$feedback_question_arr=$parent->getQueryValue($feedback_question_str);
if (count($feedback_question_arr) > 0 AND $feedback_question_arr[0]->choiseid > 0 ) {
$res_ques->question_ans = $feedback_question_arr[0]->choiseid;
if ($res_ques->questiontype == 1) {
$training_question_count++;
$data->training_feedback_score += $feedback_question_arr[0]->choiseid;
}
else if ($res_ques->questiontype == 2) {
$trainer_question_count++;
$data->trainer_feedback_score += $feedback_question_arr[0]->choiseid;
}
}
else {
$res_ques->rating_options=$survey_arr;
}
$question_arr[]=$res_ques;
}
//print $data->training_feedback_score .' --' . $training_question_count;
if($data->training_feedback_score > 0 and $training_question_count > 0) {
$data->training_feedback_score_avg = round( ($data->training_feedback_score / $training_question_count ), 1);
}
if($data->trainer_feedback_score > 0 and $trainer_question_count > 0) {
$data->trainer_feedback_score_avg = round( ($data->trainer_feedback_score / $trainer_question_count ), 1);
}
// Getting Remarks
$data->remarks = '';
$get_userresult_str="SELECT remarks FROM ".TABLE_ASSESSMENTRESULT." WHERE assessmentid='".$assessmentid."' AND userid='".$parent->current_user_id."' ORDER BY arid DESC";
$userresult_arr=$parent->getQueryValue($get_userresult_str);
if ( count($userresult_arr) > 0) {
$data->remarks = $userresult_arr[0]->remarks;
}
$data->questions = $question_arr;
}
//LOG
$logstr='TRAINING FEEDBACK QUESTION';
globalfunc::insertUserLog($parent,$logstr,$assessmentid);
$parent->response(array('response'=>'success', 'data'=>$data,'message'=>$this->page_data['success1']),200);
}
// Trainer Feedback List
private function trainingsfeedbacklist ($parent) {
globalfunc::checkMethodType($parent,array('GET'));
globalfunc::checkParamCount($parent,1);
globalfunc::checkAuthrozation($parent,array('type'=>'user'));
$current_role = $parent->current_user_data->role;
switch ($current_role) {
case "3":
$filter_cond = "";
break;
case "4":
// Zone Manager
$dealer_cond = " JOIN " . DMS_DEALER . " d ON u.dealer_code = d.dealer_code ";
$filter_cond = " AND d.zm_email = '".$parent->current_user_data->emailid."'";
break;
case "5":
$filter_cond = " AND s.trainer_id='".$parent->current_user_id."'";
break;
case "6":
// Reginal Manager
$dealer_cond = " JOIN " . DMS_DEALER . " d ON u.dealer_code = d.dealer_code ";
$filter_cond = " AND d.rm_email = '".$parent->current_user_data->emailid."'";
break;
case "7":
// Area Manager
$dealer_cond = " JOIN " . DMS_DEALER . " d ON u.dealer_code = d.dealer_code ";
$filter_cond = " AND d.am_email = '".$parent->current_user_data->emailid."'";
break;
case "14":
// Dealer
$filter_cond = " AND u.dealer_code='".$parent->current_user_data->dealer_code."'";
break;
default :
$filter_cond = " ";
break;
}
//print $assessment_str = "SELECT a.* FROM ".TABLE_ASSESSMENT." as a WHERE a.status='1' AND a.assettypeid='2' AND schedule_id !='' AND a.publisheddate<='".NOW."' ".$user_cond;
$assessment_str = "SELECT CONCAT(u.fname, ' ', u.lname) as organizer_name, a.assessmentid, a.filter_zone, a.filter_region, a.filter_dealer, a.status, a.schedule_id, s.business_segment, s.training_group_image, s.lvl_id, s.start_date, s.end_date, s.venue_type, s.venue_am, s.venue_dealer, s.venue_address, tl.lvl_name as title, s.starttime, s.endtime, s.training_id FROM ".TABLE_ASSESSMENT." as a JOIN ".TABLE_TRAINING_SCHEDULE." s ON a.schedule_id = s.schedule_id JOIN ".TABLE_USER." u ON s.trainer_id = u.userid " . $dealer_cond . " JOIN " . TABLE_TRAINING_LEVEL . " tl ON s.lvl_id = tl.lvl_id WHERE a.status='1' AND a.assettypeid='2' AND a.schedule_id !='' " . $filter_cond . " ";
$assessment_arr=$parent->getQueryValue($assessment_str);
if(count($assessment_arr)>0) {
//GET ALL STATUS
$status_str = "SELECT `statusid`, `status` FROM ".TABLE_STATUS;
$status_res_arr=$parent->getQueryValue($status_str);
// ADD EXTRA FIELDS
foreach($assessment_arr as $key=>$res_assessment) {
// Business Segment Name
if ($res_assessment->business_segment == 2) {
$res_assessment->segment_name = 'Parents/Guardian';
}
else if ($res_assessment->business_segment == 1) {
$res_assessment->segment_name = 'Instructor';
}
else if ($res_assessment->business_segment == 3) {
$res_assessment->segment_name = 'Student Learner';
}
if($res_assessment->training_group_image != '') {
//CONNECT S3
$s3 = awsfileserver::connectS3();
$res_assessment->training_group_image = awsfileserver::getS3FileUrl($s3,S3_BUCKET,S3_TRAINING_URL.$res_assessment->training_group_image);
}else {
$res_assessment->training_group_image = USER_NOIMAGE_URL;
}
$datediff = strtotime($res_assessment->enddate) - strtotime($res_assessment->startdate);
$assessment_arr[$key]->training_days = round($datediff / (60 * 60 * 24)) + 1;
// Participants count
$participant_str = "SELECT count(id) as total_participants FROM ".TABLE_TRAINING_SURVEY." WHERE schedule_id='".$res_assessment->schedule_id."' AND assessmentid ='".$res_assessment->assessmentid."' ";
$participant_arr = $parent->getQueryValue($participant_str);
$assessment_arr[$key]->total_participants = $participant_arr[0]->total_participants;
$assessment_arr[$key]->training_feedback = $assessment_arr[$key]->trainer_feedback = $assessment_arr[$key]->overall_feedback = 0;
// Survey Training feedback
$survey_feedback_str =" SELECT avg(r.choiseid) as choiseid FROM ".TABLE_ASSESSMENT_USERRESULT." r JOIN ". TABLE_TRAINING_FEEDBACK_QUESTION ." q ON q.id = r.qid WHERE r.assessmentid='".$res_assessment->assessmentid."' AND q.questiontype = 1 ";
$survey_feedback_arr=$parent->getQueryValue($survey_feedback_str);
if (count($survey_feedback_arr) > 0 AND $survey_feedback_arr[0]->choiseid > 0) {
$training_feedback = round($survey_feedback_arr[0]->choiseid, 1);
$assessment_arr[$key]->training_feedback = $training_feedback . '/' . '5';
}
// Survey Trainer feedback
$survey_trainer_str =" SELECT avg(r.choiseid) as choiseid FROM ".TABLE_ASSESSMENT_USERRESULT." r JOIN ". TABLE_TRAINING_FEEDBACK_QUESTION ." q ON q.id = r.qid WHERE r.assessmentid='".$res_assessment->assessmentid."' AND q.questiontype = 2 ";
$survey_trainer_arr=$parent->getQueryValue($survey_trainer_str);
if (count($survey_trainer_arr) > 0 AND $survey_trainer_arr[0]->choiseid > 0) {
$trainer_feedback = round($survey_trainer_arr[0]->choiseid, 1);
$assessment_arr[$key]->trainer_feedback = $trainer_feedback . '/' . '5';
}
/*$survey_feedback_str =" SELECT count(userresultid) as question_count, SUM(r.choiseid) as question_sum FROM ".TABLE_ASSESSMENT_USERRESULT." r JOIN ". TABLE_TRAINING_FEEDBACK_QUESTION ." q ON q.id = r.qid WHERE r.assessmentid='".$res_assessment->assessmentid."' AND q.questiontype = 1 AND userid in (SELECT userid FROM ".TABLE_TRAINING_SURVEY." WHERE schedule_id='".$res_assessment->schedule_id."' AND assessmentid ='".$res_assessment->assessmentid."') ";
$survey_feedback_arr=$parent->getQueryValue($survey_feedback_str);
if (count($survey_feedback_arr) > 0 AND $survey_feedback_arr[0]->question_count > 0) {
$training_feedback = round( ($survey_feedback_arr[0]->question_sum / $survey_feedback_arr[0]->question_count) / $assessment_arr[$key]->total_participants , 1);
$assessment_arr[$key]->training_feedback = $training_feedback . '/' . '5';
}
//Survey Trainer feedback
$survey_feedback_str =" SELECT count(userresultid) as question_count, SUM(r.choiseid) as question_sum FROM ".TABLE_ASSESSMENT_USERRESULT." r JOIN ". TABLE_TRAINING_FEEDBACK_QUESTION ." q ON q.id = r.qid WHERE r.assessmentid='".$res_assessment->assessmentid."' AND q.questiontype = 2 AND userid in (SELECT userid FROM ".TABLE_TRAINING_SURVEY." WHERE schedule_id='".$res_assessment->schedule_id."' AND assessmentid ='".$res_assessment->assessmentid."') ";
$survey_feedback_arr=$parent->getQueryValue($survey_feedback_str);
if (count($survey_feedback_arr) > 0 AND $survey_feedback_arr[0]->question_count > 0) {
$trainer_feedback = round( ($survey_feedback_arr[0]->question_sum / $survey_feedback_arr[0]->question_count) / $assessment_arr[$key]->total_participants, 1);
$assessment_arr[$key]->trainer_feedback = $trainer_feedback . '/' . '5';
}*/
// Overrall Feedback
if (!empty($training_feedback) and !empty($trainer_feedback)) {
$overall_feedback = round( ($training_feedback + $trainer_feedback) / 2);
$assessment_arr[$key]->overall_feedback = $overall_feedback . '/' . '5';
}
}
}
//LOG
$logstr='TRAINER FEEDBACK LIST';
globalfunc::insertUserLog($parent,$logstr);
$parent->response(array('response'=>'success', 'data'=>$assessment_arr,'message'=>$this->page_data['success1']),200);
}
// Feedback Question
private function trainingalluserfeedbackquestion ($parent) {
globalfunc::checkMethodType($parent,array('GET'));
globalfunc::checkParamCount($parent,2);
globalfunc::checkAuthrozation($parent,array('type'=>'user'));
$assessmentid = escape_str($parent->params['1']);
//GET RATINGS IS COMMON
$survey_str = "SELECT id, score options FROM ".TABLE_SURVEY_RATING." ORDER BY id ASC";
$survey_arr=$parent->getQueryValue($survey_str);
// Training feedback users
// $get_userresult_str = "SELECT CONCAT(u.fname, ' ', u.lname) as dse_name, ar.assessmentid, ar.userid, ar.remarks FROM ".TABLE_ASSESSMENTRESULT." ar JOIN ".TABLE_USER." u ON ar.userid = u.userid WHERE ar.assessmentid='".$assessmentid."' ";
// $userresult_arr=$parent->getQueryValue($get_userresult_str);
// if ( count($userresult_arr) > 0) {
$ques_str ="SELECT DISTINCT(aq.aqid) , q.id as qid, q.`questiontype`, if(q.`questiontype`=1, 'training', 'trainer') as questiontype_name, q.`questiontext` FROM ".TABLE_TRAINING_FEEDBACK_QUESTION." as q JOIN (SELECT * FROM ".TABLE_ASSESSMENT_QUESTION." WHERE assessmentid='".$assessmentid."' )as aq ON q.id=aq.qid ";
$ques_arr=$parent->getQueryValue($ques_str);
// foreach ($userresult_arr as $user_assess_key => $userresult) {
$question_arr = '';
if(count($ques_arr)>0) {
$userresult_arr->training_feedback_score = $userresult_arr->trainer_feedback_score = 0;
$training_question_count = $trainer_question_count = 0;
foreach($ques_arr as $key=>$res_ques) {
// Question Answer Result
//$feedback_question_str =" SELECT choiseid FROM ".TABLE_ASSESSMENT_USERRESULT." WHERE assessmentid='".$assessmentid."' AND userid='".$userresult->userid."' ";
$feedback_question_str =" SELECT avg(choiseid) as choiseid FROM ".TABLE_ASSESSMENT_USERRESULT." WHERE assessmentid='".$assessmentid."' AND qid = '".$res_ques->qid."' ";
$feedback_question_arr=$parent->getQueryValue($feedback_question_str);
if (count($feedback_question_arr) > 0 AND $feedback_question_arr[0]->choiseid > 0 ) {
$res_ques->question_ans = round($feedback_question_arr[0]->choiseid, 1);
if ($res_ques->questiontype == 1) {
$training_question_count++;
$userresult_arr->training_feedback_score += $feedback_question_arr[0]->choiseid;
}
else if ($res_ques->questiontype == 2) {
$trainer_question_count++;
$userresult_arr->trainer_feedback_score += $feedback_question_arr[0]->choiseid;
}
}
$question_arr[]=$res_ques;
}
$userresult_arr->training_feedback_score_avg = round( ($userresult_arr->training_feedback_score / $training_question_count ), 1);
$userresult_arr->trainer_feedback_score_avg = round( ($userresult_arr->trainer_feedback_score / $trainer_question_count ), 1);
$userresult_arr->questions = $question_arr;
// Getting Remarks
// $data->remarks = '';
// $get_userresult_str="SELECT remarks FROM ".TABLE_ASSESSMENTRESULT." WHERE assessmentid='".$assessmentid."' AND userid='".$parent->current_user_id."' ORDER BY arid DESC";
// $userresult_arr=$parent->getQueryValue($get_userresult_str);
// if ( count($userresult_arr) > 0) {
// $data->remarks = $userresult_arr[0]->remarks;
// }
}
// }
// }
//LOG
$logstr='TRAINING FEEDBACK QUESTION';
globalfunc::insertUserLog($parent,$logstr,$assessmentid);
$parent->response(array('response'=>'success', 'data'=>$userresult_arr,'message'=>$this->page_data['success1']),200);
}
}