crtraining.php 140 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490
  1. <?php
  2. /****************************
  3. * File : crtrainer.php
  4. * Author : Cygnusa
  5. * @2018
  6. ****************************/
  7. //SECURITY
  8. if ( ! defined('APPLICATION_PATH')) exit('No direct script access allowed');
  9. //FUNCTION LISTS
  10. class crtraining {
  11. private $training_path="../../".S3_TRAINING_URL;
  12. function __construct($parent) {
  13. //print_r($parent); exit();
  14. //GET PAGE MESSAGE
  15. $this->page_data=globalfunc::getMessage($parent,$parent->lang,'crtraining');
  16. if(count($parent->params)==0)
  17. {
  18. $this->functraining($parent);
  19. }else
  20. {
  21. $qry_params=explode ("?",$parent->params[0]);
  22. $parameter_val=strtolower($qry_params[0]);
  23. switch($parameter_val){
  24. case "baselevel":
  25. case 'getassessmentnames':
  26. case "trainingcalenderlist":
  27. case "updatetraining":
  28. case "cancelreschedulelist":
  29. case "declinetrainingreasonlist":
  30. case "canceltraining":
  31. case "rescheduletraining":
  32. case "acceptdeclinetraining":
  33. case "updatetrainingpresentabsent":
  34. case "traininglevelscore":
  35. case "updatetrainingscore":
  36. case "amacknowledgement":
  37. case "trainingattendancenotification":
  38. case "trainingattendancenotificationupdate":
  39. case "trainingqrcodegeneration":
  40. case "trainingdseqrcode":
  41. case "traininggroupimage":
  42. case "trainingsummery":
  43. case "dsefeedbacklist":
  44. case "dsescoreresultlist":
  45. case "trainingfeedbackquestion":
  46. case "trainingsfeedbacklist":
  47. case "trainingalluserfeedbackquestion":
  48. case "trainingcolors":
  49. $this->$parameter_val($parent );
  50. break;
  51. default:
  52. $this->functraining($parent);
  53. break;
  54. }
  55. }
  56. $parent->response(array('response'=>'failed', 'message' => 'PAGE NOT FOUND'), 404);
  57. //print_r($parent);
  58. }
  59. //
  60. // GET BASE LEVEL
  61. private function baselevel ($parent) {
  62. globalfunc::checkMethodType($parent,array('GET'));
  63. globalfunc::checkAuthrozation($parent,array('type'=>'user'));
  64. globalfunc::checkParamCount($parent,1);
  65. $training_str = "SELECT `lvl_id`, `lvl_name`, `training_days`, `training_gap_days`, `assessment_values` FROM ".TABLE_TRAINING_LEVEL." ORDER BY lvl_id ";
  66. $trainer_arr = $parent->getQueryValue($training_str);
  67. $arr = (count($trainer_arr)>0)?$trainer_arr:array();
  68. $parent->response(array('response'=>'success', 'data'=>$arr,'message'=>$this->page_data['success1']),200);
  69. }
  70. // Training Colors
  71. private function trainingcolors ($parent) {
  72. globalfunc::checkMethodType($parent,array('GET'));
  73. globalfunc::checkAuthrozation($parent,array('type'=>'user'));
  74. globalfunc::checkParamCount($parent,1);
  75. $training_colors = array();
  76. $training_colors[0]['id'] = 1;
  77. $training_colors[0]['name'] = 'Training Scheduled not Published';
  78. $training_colors[0]['color_code'] = '#9900CC';
  79. $training_colors[1]['id'] = 2;
  80. $training_colors[1]['name'] = 'Training Scheduled';
  81. $training_colors[1]['color_code'] = '#3F51B5';
  82. $training_colors[2]['id'] = 3;
  83. $training_colors[2]['name'] = 'Training Confirmed';
  84. $training_colors[2]['color_code'] = '#6D6D6D';
  85. $training_colors[3]['id'] = 4;
  86. $training_colors[3]['name'] = 'Training In Progress';
  87. $training_colors[3]['color_code'] = '#F67280';
  88. $training_colors[4]['id'] = 5;
  89. $training_colors[4]['name'] = 'Training Completed';
  90. $training_colors[4]['color_code'] = '#933A16';
  91. $training_colors[5]['id'] = 6;
  92. $training_colors[5]['name'] = 'Training Closed';
  93. $training_colors[5]['color_code'] = '#348E00';
  94. $training_colors[6]['id'] = 7;
  95. $training_colors[6]['name'] = 'Training Reschedule';
  96. $training_colors[6]['color_code'] = '#F9B316';
  97. $training_colors[7]['id'] = 8;
  98. $training_colors[7]['name'] = 'Training Cancelled';
  99. $training_colors[7]['color_code'] = '#F90303';
  100. $parent->response(array('response'=>'success', 'data'=>$training_colors,'message'=>$this->page_data['success1']),200);
  101. }
  102. // Get Assessment Names
  103. private function getassessmentnames ($parent) {
  104. globalfunc::checkMethodType($parent,array('GET'));
  105. globalfunc::checkAuthrozation($parent,array('type'=>'user'));
  106. globalfunc::checkParamCount($parent,3);
  107. $title = escape_str($parent->params[1]);
  108. $segment = escape_str($parent->params[2]);
  109. if ($segment == 1) {
  110. $segment = 'Parents/Guardian';
  111. }
  112. else if ($segment == 2) {
  113. $segment = 'Instructor';
  114. }
  115. else if ($segment == 3) {
  116. $segment = 'Student Learner';
  117. }
  118. $training_str = "SELECT `assessment_values`, lvl_name FROM ".TABLE_TRAINING_LEVEL." WHERE lvl_id = '" . $title . "' ";
  119. $trainer_arr = $parent->getQueryValue($training_str);
  120. $data = array();
  121. if(count($trainer_arr)>0) {
  122. $assessment_values_array = explode(',', $trainer_arr[0]->assessment_values);
  123. foreach ($assessment_values_array as $key => $value) {
  124. if ($value == 1) {
  125. $data['pre'] = 'PRE-' . strtoupper($trainer_arr[0]->lvl_name) . '-' . $segment . '-ASSESSMENT';
  126. }
  127. else if ($value == 2) {
  128. $data['post'] = 'POST-' . strtoupper($trainer_arr[0]->lvl_name) . '-' . $segment . '-ASSESSMENT';
  129. }
  130. }
  131. }
  132. $parent->response(array('response'=>'success', 'data'=>$data,'message'=>$this->page_data['success1']),200);
  133. }
  134. // FUNCTIONS
  135. private function functraining ($parent) {
  136. switch($parent->get_request_method()) {
  137. case "GET" : $this->trainingdetails($parent); break;
  138. case "POST" : $this->newtraining($parent); break;
  139. case "DELETE": $this->canceltraining($parent);break;
  140. default:
  141. $parent->response(array('response'=>'failed'),404);
  142. break;
  143. }
  144. }
  145. private function trainingdetails ($parent) {
  146. globalfunc::checkMethodType($parent,array('GET' ));
  147. globalfunc::checkAuthrozation($parent,array('type'=>'user'));
  148. $current_role = $parent->current_user_data->role;
  149. //globalfunc::checkParamCount($parent,1);
  150. $schedule_id = escape_str($parent->params[0]);
  151. $input_date = escape_str($parent->params[1]);
  152. $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 ";
  153. $schedule_arr = $parent->getQueryValue($schedule_str);
  154. if(count($schedule_arr) > 0) {
  155. $todaydate_time = date('Y-m-d H:i:s');
  156. // Business Segment Name
  157. if ($schedule_arr[0]->business_segment == 2) {
  158. $schedule_arr[0]->segment_name = 'Parents/Guardian';
  159. }
  160. else if ($schedule_arr[0]->business_segment == 1) {
  161. $schedule_arr[0]->segment_name = 'Instructor';
  162. }
  163. else if ($schedule_arr[0]->business_segment == 3) {
  164. $schedule_arr[0]->segment_name = 'Student Learner';
  165. }
  166. // Get Assessment Ids
  167. $assessment_str = "SELECT assessmentid, assessmenttype FROM " . TABLE_ASSESSMENT . " WHERE schedule_id = '" . $schedule_arr[0]->schedule_id . "' ";
  168. if ($current_role == 10) {
  169. $schedule_arr[0]->userid = $parent->current_user_id;
  170. }
  171. $schedule_arr[0]->startdate = date_format(date_create($schedule_arr[0]->start_date), "Y-m-d");
  172. //$schedule_arr[0]->starttime = date_format(date_create($schedule_arr[0]->start_date), "H:i:s");
  173. $schedule_arr[0]->enddate = date_format(date_create($schedule_arr[0]->end_date), "Y-m-d");
  174. //$schedule_arr[0]->endtime = date_format(date_create($schedule_arr[0]->end_date), "H:i:s");
  175. if($schedule_arr[0]->training_group_image != '') {
  176. //CONNECT S3
  177. $s3 = awsfileserver::connectS3();
  178. $schedule_arr[0]->training_group_image = awsfileserver::getS3FileUrl($s3,S3_BUCKET,S3_TRAINING_URL.$schedule_arr[0]->training_group_image);
  179. }else {
  180. $schedule_arr[0]->training_group_image = USER_NOIMAGE_URL;
  181. }
  182. $datediff = strtotime($schedule_arr[0]->enddate) - strtotime($schedule_arr[0]->startdate);
  183. $schedule_arr[0]->training_days = round($datediff / (60 * 60 * 24)) + 1;
  184. $starttime_array = json_decode(stripslashes($schedule_arr[0]->starttime), true);
  185. $endtime_array = json_decode(stripslashes($schedule_arr[0]->endtime), true);
  186. $todaydate = date('Y-m-d');
  187. $schedule_arr[0]->submit_enable = 0;
  188. if ( (strtotime($schedule_arr[0]->startdate) <= strtotime($todaydate)) && (strtotime($schedule_arr[0]->enddate) >= strtotime($todaydate)) ) {
  189. $datediff = strtotime($todaydate) - strtotime($schedule_arr[0]->startdate);
  190. $schedule_arr[0]->current_day = round($datediff / (60 * 60 * 24)) + 1;
  191. $currentday = round($datediff / (60 * 60 * 24));
  192. // Attendance Update Status before and after 30 mins
  193. $current_starttime = $starttime_array[$currentday];
  194. $current_endtime = $endtime_array[$currentday];
  195. $session_starttime = date("H:i", strtotime('-60 minutes', strtotime($current_starttime)));
  196. // $session_endtime = date("H:i", strtotime('+30 minutes', strtotime($current_endtime)));
  197. $today_time = date("H:i");
  198. //if ( (strtotime($session_starttime) <= strtotime($today_time)) && (strtotime($session_endtime) >= strtotime($today_time)) ) {
  199. if ( (strtotime($session_starttime) <= strtotime($today_time)) ) {
  200. $schedule_arr[0]->attendance_update_status = 1;
  201. }
  202. //$schedule_arr[0]->attendance_update_status = 1;
  203. // Attendance and Score Submit Button Enable
  204. if (strtotime($schedule_arr[0]->enddate) == strtotime($todaydate)) {
  205. $schedule_arr[0]->submit_enable = 1;
  206. }
  207. $attendance_submit_array = json_decode($schedule_arr[0]->attendance_submit, true);
  208. $am_acknowledgement_array = json_decode($schedule_arr[0]->am_acknowledgement, true);
  209. //print $attendance_submit_array[$currentday];
  210. $schedule_arr[0]->current_attendance_submit_status = $schedule_arr[0]->current_am_acknowledgement_status = 0;
  211. if (!empty($attendance_submit_array[$currentday])) {
  212. $schedule_arr[0]->current_attendance_submit_status = $attendance_submit_array[$currentday];
  213. }
  214. if (!empty($am_acknowledgement_array[$currentday])) {
  215. $schedule_arr[0]->current_am_acknowledgement_status = $am_acknowledgement_array[$currentday];
  216. }
  217. //print_r($attendance_submit_array);
  218. //print($am_acknowledgement_array);
  219. }
  220. $schedule_arr[0]->notes = '';
  221. if ($schedule_arr[0]->current_day == 1) {
  222. $schedule_arr[0]->notes = 'Note: On clicking Save button, Pre-Assesment will be triggered to all participants who are marked present.';
  223. }
  224. if (strtotime($schedule_arr[0]->enddate) == strtotime($todaydate)) {
  225. if (!empty($schedule_arr[0]->notes)) {
  226. $schedule_arr[0]->notes .= '<br/>';
  227. }
  228. $schedule_arr[0]->notes .= 'Note: On clicking Submit button, Post-Assesment will be triggered to all participants who are marked present.';
  229. }
  230. $schedule_arr[0]->training_completed = false;
  231. if ( (strtotime($schedule_arr[0]->enddate) < strtotime($todaydate)) ) {
  232. $schedule_arr[0]->training_completed = true;
  233. }
  234. // Checking 6 hours checking for accept
  235. $schedule_arr[0]->is_active_hours = 1;
  236. $training_start_date = date("Y-m-d", strtotime($schedule_arr[0]->start_date));
  237. $date_time_diff_str = strtotime($training_start_date . ' ' . $starttime_array[0]) - strtotime($todaydate_time);
  238. $date_time_diff_str = round($date_time_diff_str / (60 * 60));
  239. // if ($date_time_diff_str < 1) {
  240. // $schedule_arr[0]->is_active_hours = 0;
  241. // }
  242. // Training Update or Reaschedule before 1 hours
  243. $schedule_arr[0]->training_update_status = true;
  244. if ($date_time_diff_str < 1) {
  245. $schedule_arr[0]->training_update_status = false;
  246. }
  247. //PARTICIPANT
  248. switch ($current_role) {
  249. case "7":
  250. $filter_cond = " AND d.am_email = '".$parent->current_user_data->emailid."'";
  251. break;
  252. case "6":
  253. // Reginal Manager
  254. $filter_cond = " AND d.rm_email = '".$parent->current_user_data->emailid."'";
  255. break;
  256. case "7":
  257. // Area Manager
  258. $filter_cond = " AND d.am_email = '".$parent->current_user_data->emailid."'";
  259. break;
  260. case "10":
  261. // User
  262. $filter_cond = " AND p.userid='".$parent->current_user_id."'";
  263. break;
  264. case "14":
  265. // Dealer
  266. $filter_cond = " AND u.dealer_code='".$parent->current_user_data->dealer_code."'";
  267. break;
  268. default :
  269. $filter_cond = " ";
  270. break;
  271. }
  272. $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 . " ";
  273. $participant_arr = $parent->getQueryValue($participant_str);
  274. // Getting Percentage of Training Level
  275. $score_percentage_str = "SELECT id, name, percentage FROM ".TABLE_TRAINING_LEVEL_SCORE." WHERE level = '" . $schedule_arr[0]->lvl_id. "'";
  276. $score_percentage_arr = $parent->getQueryValue($score_percentage_str);
  277. foreach ($score_percentage_arr as $percentage_key => $percentages) {
  278. if (strtolower($percentages->name) == '2') {
  279. $pre_test_percentage = $percentages->percentage;
  280. }
  281. elseif (strtolower($percentages->name) == '3') {
  282. $post_test_percentage = $percentages->percentage;
  283. }
  284. }
  285. if(count($participant_arr) > 0) {
  286. foreach($participant_arr as $skey => $res_part) {
  287. // Getting Pre and Post Assessment Scores
  288. $res_part->pre_test = $res_part->post_test = $res_part->pre_test_percentage = $res_part->post_test_percentage = 0;
  289. $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 ";
  290. $assessment_arr = $parent->getQueryValue($assessment_str);
  291. if(count($assessment_arr) > 0) {
  292. foreach ($assessment_arr as $assessment_key => $assessments) {
  293. if ($assessments->assessmenttype == 1) {
  294. $res_part->pre_test = $assessments->highscore;
  295. $res_part->pre_test_percentage = ($res_part->pre_test * $pre_test_percentage) / 100;
  296. }
  297. elseif ($assessments->assessmenttype == 2) {
  298. $res_part->post_test = $assessments->highscore;
  299. $res_part->post_test_percentage = ($res_part->post_test * $post_test_percentage) / 100;
  300. }
  301. }
  302. }
  303. // if ($res_part->roleplay_or_demo == 0) {
  304. // $res_part->roleplay_or_demo = '';
  305. // }
  306. if($res_part->profile_photo != '') {
  307. //CONNECT S3
  308. $s3 = awsfileserver::connectS3();
  309. $res_part->profile_photo = awsfileserver::getS3FileUrl($s3,S3_BUCKET,S3_PROFILE_IMAGE_URL.$res_part->profile_photo);
  310. }else {
  311. $res_part->profile_photo = USER_NOIMAGE_URL;
  312. }
  313. // attendance array
  314. if (!empty($input_date)) {
  315. $datediff = strtotime($input_date) - strtotime($schedule_arr[0]->startdate);
  316. $input_date_count = round($datediff / (60 * 60 * 24)) + 1;
  317. $day_cond = ' AND day = ' . $input_date_count;
  318. }
  319. //$res_part->attendance = '';
  320. $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;
  321. $participant_atten_arr = $parent->getQueryValue($participant_atten_str);
  322. foreach ($participant_atten_arr as $atten_key => $atten_details) {
  323. if($atten_details->image != '') {
  324. //CONNECT S3
  325. $s3 = awsfileserver::connectS3();
  326. //$atten_details->image = awsfileserver::getS3FileUrl($s3,S3_BUCKET,S3_PROFILE_IMAGE_URL.$atten_details->image);
  327. $atten_details->image = awsfileserver::getS3FileUrl($s3,S3_BUCKET,S3_TRAINING_URL.$atten_details->image);
  328. }else {
  329. $atten_details->image = USER_NOIMAGE_URL;
  330. }
  331. }
  332. if (!empty($input_date) ) {
  333. $res_part->attendance = $participant_atten_arr[0];
  334. }
  335. else {
  336. $res_part->attendance = $participant_atten_arr;
  337. }
  338. }
  339. $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."'";
  340. $assessment_arr = $parent->getQueryValue($assessment_str);
  341. $schedule_arr[0]->participant = $participant_arr;
  342. $schedule_arr[0]->assessment = $assessment_arr;
  343. }
  344. }
  345. $parent->response(array('response'=>'success', 'data'=> $schedule_arr, 'message'=>$this->page_data['success1']),200);
  346. }
  347. private function trainingcalenderlist ($parent) {
  348. globalfunc::checkMethodType($parent,array('POST' ));
  349. globalfunc::checkAuthrozation($parent,array('type'=>'user'));
  350. globalfunc::checkParamCount($parent,1);
  351. $month = escape_str($parent->_request["month"]);
  352. $date_array = explode('-', $month);
  353. if (strlen($date_array[1]) == 1) {
  354. $month = $date_array[0] . '-0'.$date_array[1];
  355. }
  356. $current_role = $parent->current_user_data->role;
  357. switch ($current_role) {
  358. case "3":
  359. $filter_cond = "";
  360. break;
  361. case "4":
  362. // Zone Manager
  363. $dealer_cond = " JOIN " . DMS_DEALER . " d ON u.dealer_code = d.dealer_code ";
  364. $filter_cond = " AND d.zm_email = '".$parent->current_user_data->emailid."'";
  365. break;
  366. case "5":
  367. $filter_cond = " AND s.trainer_id='".$parent->current_user_id."'";
  368. break;
  369. case "6":
  370. // Reginal Manager
  371. $dealer_cond = " JOIN " . DMS_DEALER . " d ON u.dealer_code = d.dealer_code ";
  372. $filter_cond = " AND d.rm_email = '".$parent->current_user_data->emailid."'";
  373. break;
  374. case "7":
  375. // Area Manager
  376. $dealer_cond = " JOIN " . DMS_DEALER . " d ON u.dealer_code = d.dealer_code ";
  377. $filter_cond = " AND d.am_email = '".$parent->current_user_data->emailid."'";
  378. break;
  379. case "10":
  380. // User
  381. $filter_cond = " AND p.userid='".$parent->current_user_id."'";
  382. break;
  383. case "14":
  384. // Dealer
  385. $filter_cond = " AND u.dealer_code='".$parent->current_user_data->dealer_code."'";
  386. // $dealer_cond = " ON u.emailid=d.am_email ";
  387. // $usercond = " AND u.role=7 AND d.zone='".$trainer_arr[0]->zone."'";
  388. break;
  389. default :$parent->response(array('response'=>'failed', 'message'=>$this->page_data['error2']), 406); break;
  390. }
  391. if ($current_role != 5) {
  392. $save_training_cond = " AND s.status > 0 ";
  393. }
  394. //$month = strtotime($month);
  395. for($i = 1; $i <= 31; $i++) {
  396. if (strlen($i) == 1 ) {
  397. $i = '0' . $i;
  398. }
  399. $training_date = $month . '-' . $i;
  400. $training_date_starttime = $month . '-' . $i . " 00:00:00";
  401. $training_date_endtime = $month . '-' . $i . " 23:59:59";
  402. //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 . " ";
  403. //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 . " ";
  404. $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 ";
  405. $schedule_arr = $parent->getQueryValue($schedule_str);
  406. if(count($schedule_arr) > 0) {
  407. $today_date = date('Y-m-d H:i:s');
  408. foreach ($schedule_arr as $schedule_key => $schedule_details) {
  409. // Dates
  410. $schedule_details->startdate = date_format(date_create($schedule_details->start_date), "Y-m-d");
  411. //$schedule_details->starttime = date_format(date_create($schedule_details->start_date), "H:i:s");
  412. $schedule_details->enddate = date_format(date_create($schedule_details->end_date), "Y-m-d");
  413. // $schedule_details->endtime = date_format(date_create($schedule_details->end_date), "H:i:s");
  414. $datediff = strtotime($todaydate) - strtotime($schedule_details->startdate);
  415. $schedule_arr[$schedule_key]->current_day = round($datediff / (60 * 60 * 24)) + 1;
  416. $currentday = round($datediff / (60 * 60 * 24));
  417. // Start and end times
  418. $starttime_array = json_decode(stripslashes($schedule_details->starttime), true);
  419. $endtime_array = json_decode($schedule_details->endtime, true);
  420. $training_start_datetime = $schedule_details->startdate . ' ' . $starttime_array[0];
  421. $current_starttime = $starttime_array[$currentday];
  422. $current_endtime = $endtime_array[$currentday];
  423. $session_starttime = date("H:i", strtotime('-60 minutes', strtotime($current_starttime)));
  424. // $session_endtime = date("H:i", strtotime('+30 minutes', strtotime($current_endtime)));
  425. $today_time = date("H:i");
  426. // if ( (strtotime($session_starttime) <= strtotime($today_time)) && (strtotime($session_endtime) >= strtotime($today_time)) ) {
  427. if ( (strtotime($session_starttime) <= strtotime($today_time)) ) {
  428. $schedule_arr[$schedule_key]->attendance_update_status = 1;
  429. }
  430. // Days Calculation
  431. $datediff = strtotime($schedule_details->enddate) - strtotime($schedule_details->startdate);
  432. $schedule_details->training_days = round($datediff / (60 * 60 * 24)) + 1;
  433. $todaydate = date('Y-m-d');
  434. if ( (strtotime($schedule_details->startdate) <= strtotime($todaydate)) && (strtotime($schedule_details->enddate) >= strtotime($todaydate)) ) {
  435. $datediff = strtotime($todaydate) - strtotime($schedule_details->startdate);
  436. $schedule_details->current_day = round($datediff / (60 * 60 * 24)) + 1;
  437. $schedule_arr[0]->attendance_update_status = 1;
  438. }
  439. // Training Update or Reaschedule before 6 hours
  440. $date_time_diff_str = strtotime($schedule_details->startdate . ' ' . $starttime_array[0]) - strtotime($today_date);
  441. $date_time_diff_str = round($date_time_diff_str / (60 * 60));
  442. $schedule_details->training_update_status = true;
  443. if ($date_time_diff_str < 1) {
  444. $schedule_details->training_update_status = false;
  445. }
  446. if ($schedule_details->is_deleted == 1) {
  447. // Training Cancelled
  448. $schedule_details->training_status = '#F90303';
  449. }
  450. else {
  451. if ($schedule_details->status == 1) {
  452. //print $training_start_datetime . '--' . $todaydate . '--' . $schedule_details->enddate . "<br/>";
  453. // 6 hours before training
  454. $six_hours_before_time = date("Y-m-d H:i:s", strtotime('-1 hours', strtotime($training_start_datetime)));
  455. if ( (strtotime($six_hours_before_time) <= strtotime($today_date)) && (strtotime($training_start_datetime) >= strtotime($today_date)) ) {
  456. $schedule_details->training_status = '#6D6D6D';
  457. }
  458. // Reschedule Training
  459. //else if ( ($schedule_details->reschedule_status == 1) AND ($schedule_details->end_date < $today_date) ) {
  460. else if ( ($schedule_details->reschedule_status == 1) AND (strtotime($training_start_datetime) > strtotime($today_date)) ) {
  461. $schedule_details->training_status = '#F9B316';
  462. }
  463. // Training Scheduled
  464. else if ( strtotime($six_hours_before_time) >= strtotime($today_date) ) {
  465. $schedule_details->training_status = '#3F51B5';
  466. }
  467. // In Progress
  468. elseif ( (strtotime($training_start_datetime) <= strtotime($today_date)) && (strtotime($schedule_details->enddate) >= strtotime($todaydate)) ) {
  469. $schedule_details->training_status = '#F67280';
  470. }
  471. // Training completed based on time
  472. //elseif ($schedule_details->end_date < $todaydate) {
  473. elseif ($schedule_details->end_date < $todaydate && ($schedule_details->score_submit == 0 || $schedule_details->score_submit == 1) ) {
  474. $schedule_details->training_status = '#933A16';
  475. }
  476. elseif ($schedule_details->score_submit == 2) {
  477. // Completed
  478. $schedule_details->training_status = '#348E00';
  479. }
  480. // elseif ($schedule_details->end_date > $todaydate) {
  481. // // Not Started
  482. // $schedule_details->training_status = '#6D6D6D';
  483. // }
  484. }
  485. else if ($schedule_details->status == 0) {
  486. // Save Training
  487. $schedule_details->training_status = '#9900CC';
  488. }
  489. }
  490. //PARTICIPANT
  491. /*$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."' ";
  492. $participant_arr = $parent->getQueryValue($participant_str);
  493. if(count($participant_arr) > 0) {
  494. foreach($participant_arr as $skey => $res_part) {
  495. if($res_part->profile_photo != '') {
  496. //CONNECT S3
  497. $s3 = awsfileserver::connectS3();
  498. $res_part->profile_photo = awsfileserver::getS3FileUrl($s3,S3_BUCKET,S3_PROFILE_IMAGE_URL.$res_part->profile_photo);
  499. }else {
  500. $res_part->profile_photo = USER_NOIMAGE_URL;
  501. }
  502. }
  503. $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."'";
  504. $assessment_arr = $parent->getQueryValue($assessment_str);
  505. if ($current_role != 10) {
  506. $schedule_arr[$schedule_key]->participant = $participant_arr;
  507. }
  508. $schedule_arr[$schedule_key]->assessment = $assessment_arr;
  509. }*/
  510. }
  511. $arr[$i] = $schedule_arr;
  512. }
  513. }
  514. $parent->response(array('response'=>'success', 'data'=> $arr, 'message'=>$this->page_data['success1']),200);
  515. }
  516. // Cancel or Reschedule list
  517. private function cancelreschedulelist ($parent) {
  518. globalfunc::checkMethodType($parent,array('GET' ));
  519. globalfunc::checkAuthrozation($parent,array('type'=>'user'));
  520. globalfunc::checkParamCount($parent,1);
  521. $reschedule_str = "SELECT id, name FROM ".TABLE_TRAINING_RESCHEDULE_LIST." WHERE status = 1 ";
  522. $reschedule_arr = $parent->getQueryValue($reschedule_str);
  523. if(count($reschedule_arr) > 0) {
  524. $parent->response(array('response'=>'success', 'data'=> $reschedule_arr, 'message'=>$this->page_data['success1']),200);
  525. }
  526. }
  527. private function newtraining($parent) {
  528. globalfunc::checkMethodType($parent,array('POST' ));
  529. globalfunc::checkAuthrozation($parent,array('type'=>'user'));
  530. //globalfunc::checkParamCount($parent,1);
  531. //$REQUEST_KEYS=array('title'=>'number','description'=>'string','startdate'=>'date|Y-m-d','enddate'=>'date|Y-m-d');
  532. $REQUEST_KEYS=array('title'=>'number','startdate'=>'date|Y-m-d','enddate'=>'date|Y-m-d');
  533. globalfunc::mandatoryKey($parent,$REQUEST_KEYS);
  534. $lvl_id=escape_str($parent->_request["title"]);
  535. $training_start_date = $startdate = escape_str($parent->_request["startdate"]);
  536. $enddate=escape_str($parent->_request["enddate"]);
  537. $starttime=escape_str($parent->_request["starttime"]);
  538. $endtime=escape_str($parent->_request["endtime"]);
  539. $training_total_hours = escape_str($parent->_request["training_total_hours"]);
  540. // if($starttime!='' && $endtime!='') {
  541. // $startdate.=" ".$starttime;
  542. // $enddate.=" ".$endtime;
  543. // }else {
  544. // $startdate.=" 00:00:00";
  545. // $enddate.=" 23:59:59";
  546. // }
  547. $adhoc_training=escape_str($parent->_request["adhoc_training"]);
  548. $business_segment=escape_str($parent->_request["business_segment"]);
  549. $training_other_title=escape_str($parent->_request["training_other_title"]);
  550. $date_restriction=escape_str($parent->_request["date_restriction"]);
  551. $status=escape_str($parent->_request["status"]);
  552. $filter_zone = escape_str($parent->_request["filter_zone"]);
  553. $trainer_id=$parent->current_user_id;
  554. $description = escape_str($parent->_request['description']);
  555. $is_feedback = escape_str($parent->_request["is_feedback"]);
  556. $venue_type = escape_str($parent->_request["venue_type"]);
  557. $venue_am = escape_str($parent->_request["venue_am"]);
  558. $venue_dealer = escape_str($parent->_request["venue_dealer"]);
  559. $venue_address = escape_str($parent->_request["venue_address"]);
  560. $training_id = '';
  561. // Getting Training Level Nice Name
  562. $training_level_str = "SELECT nick_name FROM ".TABLE_TRAINING_LEVEL." WHERE lvl_id = '".$lvl_id."' ";
  563. $training_level_arr = $parent->getQueryValue($training_level_str);
  564. if(count($training_level_arr) > 0) {
  565. $training_id .= $training_level_arr[0]->nick_name . '-';
  566. }
  567. if (!empty($parent->current_user_data->fname)) {
  568. $trainer_fname = $parent->current_user_data->fname;
  569. $trainer_lname = $parent->current_user_data->lname;
  570. $fwords = explode(' ', $trainer_fname);
  571. $lwords = explode(' ', $trainer_lname);
  572. $training_id .= $fwords[0][0] . $fwords[1][0] . $lwords[0][0] . '-';
  573. }
  574. $training_id .= date("dmy", strtotime($startdate)) . '-' . date("dmy", strtotime($enddate));
  575. // Check Condition Training already available or not
  576. // $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 )";
  577. // $training_check_ques_arr=$parent->getQueryValue($training_check_ques_str);
  578. // if(count($training_check_ques_arr)>0) {
  579. // $parent->response(array('response'=>'failed','message'=>'Training already available in this time period.'),406);
  580. // }
  581. if(strtotime($startdate)<NOW) $parent->response(array('response'=>'failed','message'=>$this->page_data["error4"]),406);
  582. if(strtotime($enddate)<NOW) $parent->response(array('response'=>'failed','message'=>$this->page_data["error4"]),406);
  583. if(strtotime($startdate)>strtotime($enddate)) $parent->response(array('response'=>'failed','message'=>'from date should be greater than to date'),406);
  584. $todaydate_time = date('Y-m-d H:i:s');
  585. $starttime_array = json_decode(stripslashes($starttime), true);
  586. $endtime_array = json_decode($endtime, true);
  587. // Check Condition about 6 hours
  588. $date_time_diff_str = strtotime($startdate . ' ' . $starttime_array[0]) - strtotime($todaydate_time);
  589. $date_time_diff_str = round($date_time_diff_str / (60 * 60));
  590. // if ($date_time_diff_str < 1) {
  591. // $parent->response(array('response'=>'failed','message'=>'You can able to create training before 1 hour '),406);
  592. // }
  593. $dse = $parent->_request['dse'];
  594. $participant_arr = json_decode($dse); //sending as string
  595. if(!(is_array($participant_arr) && count($participant_arr)>0)) $parent->response(array('response'=>'failed','message'=>$this->page_data["error2"]),406);
  596. //$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."')";
  597. $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."')";
  598. $parent->executeQuery($insert_qry);
  599. $schedule_id=$parent->lastInsertId();
  600. if(count($participant_arr)>0) {
  601. $participant_arr= array_unique($participant_arr);
  602. $ins_participant_arr=array();
  603. $training_userids = '';
  604. foreach($participant_arr as $userid) {
  605. // Check Condition Training already available or not
  606. $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."' ";
  607. $training_check_ques_arr = $parent->getQueryValue($training_check_ques_str);
  608. if(count($training_check_ques_arr) > 0) {
  609. $training_userids .= $userid . ',';
  610. }
  611. $ins_participant_arr[] =" ( '".$schedule_id."', '".$userid."', '0', '0', '0', 'qwertyuiopasdfghjklzxcvbnm', '".$trainer_id."','".NOW."', '".NOW."')";
  612. }
  613. $training_userids = trim($training_userids, ',');
  614. if(!empty($training_userids)) {
  615. // Get DSE
  616. $user_dse_str = "SELECT userid, smpin FROM ".TABLE_USER." WHERE userid in (".$training_userids.") ";
  617. $user_dse_arr = $parent->getQueryValue($user_dse_str);
  618. $dse_smpin = '';
  619. foreach ($user_dse_arr as $user_key => $user_dse) {
  620. $dse_smpin .= $user_dse->smpin . ', ';
  621. }
  622. $dse_smpin = trim($dse_smpin, ', ');
  623. if (!empty($dse_smpin)) {
  624. $parent->response(array('response'=>'failed','message'=>'DSE (' . $dse_smpin . ') have already training in this time period.'),406);
  625. }
  626. }
  627. //print_r($ins_participant_arr);
  628. $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);
  629. $parent->executeQuery($insert_qry);
  630. // Training Notification
  631. if ($status == 1) {
  632. $mobj = new stdClass();
  633. $mobj->schedule_id = $schedule_id;
  634. $mobj->type = 'new';
  635. $this->trainingnotifictaion($parent, $mobj);
  636. }
  637. }
  638. $assessments = $parent->_request['assessments'];
  639. $assessmenttype_array=json_decode($assessments, true);
  640. if(count($assessmenttype_array) > 0) {
  641. //ASSESSMENT QUESTION ADD
  642. $vehicle_type = 0;
  643. if ($business_segment == 1) {
  644. $vehicle_type = 1;
  645. }
  646. else if ($business_segment == 2) {
  647. $vehicle_type = 2;
  648. }
  649. foreach ($assessmenttype_array as $assessmentkey => $assessmenttypes) {
  650. if(!empty($assessmenttypes['name'])) {
  651. if ($assessmenttypes['assessment'] == 'pre') {
  652. $assessmenttype = '1';
  653. }
  654. else if ($assessmenttypes['assessment'] == 'post') {
  655. $assessmenttype = '2';
  656. }
  657. $assessmentname = $assessmenttypes['name'];
  658. $ques_count = $assessmenttypes["ques_count"];
  659. $assessmenttime = $assessmenttypes["duration"];
  660. //GET ASSESSMENT START AND END DATES
  661. $buffer_day = 1;
  662. if ($assessmenttype == 1) {
  663. $assessment_startdate=date('Y-m-d H:i:s',strtotime($startdate));
  664. $assessment_enddate=date('Y-m-d H:i:s',strtotime('+'.$buffer_day.' day',strtotime($startdate)));
  665. }
  666. else {
  667. $assessment_startdate=date('Y-m-d H:i:s',strtotime($enddate));
  668. $assessment_enddate=date('Y-m-d H:i:s',strtotime('+'.$buffer_day.' day',strtotime($enddate)));
  669. }
  670. //INSERT ASSESSMENT
  671. $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."')";
  672. $parent->executeQuery($insert_qry);
  673. $assessmentid = $parent->lastInsertId();
  674. /*if(count($participant_arr)>0) {
  675. $ins_assess_arr=array();
  676. foreach($participant_arr as $userid) {
  677. $ins_assess_arr[] =" ( '".$assessmentid."', '".$schedule_id."', '".$userid."', '0')";
  678. }
  679. }
  680. //ASSESSMENT PARTICPANT ADD
  681. $insert_qry = "INSERT INTO ".TABLE_TRAINING_ASSESSMENT ." ( `assessmentid`, `schedule_id`, `userid`, `is_attended`) VALUES ".@implode(',',$ins_assess_arr);
  682. $parent->executeQuery($insert_qry);*/
  683. $rcond = ($randomcond)?"ORDER BY RAND()":"ORDER BY id ASC";
  684. $ques_str = "SELECT * FROM ".TABLE_QUESTION." WHERE vehicle_type = '" . $vehicle_type . "' AND assessment_type = '" . $assessmenttype . "' AND status='1' " . $rcond . " LIMIT " . $ques_count;
  685. //$ques_str = "SELECT * FROM ".TABLE_QUESTION." WHERE status='1' AND cateid='" . $lvl_id . "' " . $rcond . " LIMIT " . $ques_count;
  686. $ques_arr=$parent->getQueryValue($ques_str);
  687. if(count($ques_arr)>0) {
  688. $ins_ques_arr=array();
  689. foreach($ques_arr as $res_ques) {
  690. $ins_ques_arr[] =" ( '".$assessmentid."','".$res_ques->id."', '1', '".$trainer_id."','".NOW."', '".NOW."')";
  691. }
  692. //ASSESSMENT QUESTION
  693. $insert_qry = "INSERT INTO ".TABLE_ASSESSMENT_QUESTION ." (`assessmentid`, `qid`, `is_mandatory`, `creatorid`, `created_on`, `modified_on`) VALUES ".@implode(',',$ins_ques_arr);
  694. $parent->executeQuery($insert_qry);
  695. }
  696. }
  697. }
  698. }
  699. $parent->response(array('response'=>'success', 'message'=>$this->page_data['success1']),200);
  700. }
  701. // Training Schedule, Reschedule and Cancel Notification
  702. private function trainingnotifictaion ($parent, $obj) {
  703. if(!(isset($obj) && isset($obj->schedule_id))) $parent->response(array('response'=>'failed','message'=>'PHP ERROR Value not passed'),500);
  704. $schedule_id = $obj->schedule_id;
  705. $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";
  706. $query_arr=$parent->getQueryValue($query_str);
  707. // Set condition for Feedback Notofications
  708. $training_notification_type = $obj->type;
  709. if ($training_notification_type == 'feedback') {
  710. //$user_condition = " AND status='1' and is_attendance = 1 ";
  711. $user_condition = " AND status in (0,1) ";
  712. }
  713. if ($training_notification_type == 'pre' or $training_notification_type == 'post' or $training_notification_type == 'userscore_certified' or $training_notification_type == 'userscore_fail') {
  714. $user_condition .= " AND userid in (" . $obj->users . ") ";
  715. }
  716. $query_str = "SELECT userid FROM `".TABLE_TRAINING_PARTICIPANT."` WHERE schedule_id='".$schedule_id."' " . $user_condition . " ";
  717. $part_arr=$parent->getQueryValue($query_str);
  718. if(count($query_arr)>0 && count($part_arr) > 0) {
  719. if ($obj->type == 'new') {
  720. $schedule_type_name = 'New Training Scheduled ';
  721. }
  722. else if ($obj->type == 'update') {
  723. $schedule_type_name = 'Training Updated ';
  724. }
  725. else if ($obj->type == 'cancel') {
  726. $schedule_type_name = 'Training Cancelled ';
  727. }
  728. else if ($obj->type == 'reschedule') {
  729. $schedule_type_name = 'Training rescheduled ';
  730. }
  731. else if ($obj->type == 'feedback') {
  732. $schedule_type_name = 'Training Feedback ';
  733. }
  734. else if ($obj->type == 'pre') {
  735. $schedule_type_name = 'Training Pre Assessment ';
  736. }
  737. else if ($obj->type == 'post') {
  738. $schedule_type_name = 'Training Post Assessment ';
  739. }
  740. else if ($obj->type == 'score') {
  741. $schedule_type_name = 'Result of ';
  742. }
  743. // Notification Text
  744. if ($obj->type == 'feedback' OR $obj->type == 'pre' OR $obj->type == 'post') {
  745. if ($obj->type == 'pre') {
  746. $assessmenttype = 1;
  747. }
  748. else if ($obj->type == 'post') {
  749. $assessmenttype = 2;
  750. }
  751. $assess_query_str = "SELECT assessmentid, assessmenttime, assessmenttype FROM `".TABLE_ASSESSMENT."` WHERE schedule_id='".$schedule_id."' AND assessmenttype = '".$assessmenttype."' ";
  752. $assess_arr = $parent->getQueryValue($assess_query_str);
  753. $ntext = $schedule_type_name . ' - ' . $query_arr[0]->title . ' Duration : ' . $assess_arr[0]->assessmenttime;
  754. }
  755. else if ($obj->type == 'score') {
  756. $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.";
  757. }
  758. else if ($obj->type == 'userscore_certified') {
  759. $ntext = 'Congratulations! You have cleared ' . $query_arr[0]->title . ' Certification';
  760. }
  761. else if ($obj->type == 'userscore_fail') {
  762. $ntext = 'You have not cleared the ' . $query_arr[0]->title . ' Certification, You need to attend the training again.';
  763. }
  764. else {
  765. $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));
  766. }
  767. $notificationtitle = $query_arr[0]->title . ' - ' . $query_arr[0]->schedule_name;
  768. $notificationtext = $ntext;
  769. $notificationtype = 10;
  770. if ($training_notification_type == 'pre' OR $training_notification_type == 'post') {
  771. $notificationtype = 2;
  772. }
  773. else if ($training_notification_type == 'feedback') {
  774. $notificationtype = 11;
  775. }
  776. else if ($training_notification_type == 'score' OR $training_notification_type == 'userscore_certified' OR $training_notification_type == 'userscore_fail' ) {
  777. $notificationtype = 12;
  778. }
  779. $nobj = new stdClass();
  780. $nobj->schedule_id = $schedule_id;
  781. if ($obj->type == 'feedback' OR $obj->type == 'pre' OR $obj->type == 'post') {
  782. $nobj->assessmentid = $assess_arr[0]->assessmentid;
  783. }
  784. $notificationdata = json_encode($nobj);
  785. //INSERT NOTIFICATION
  786. $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."')");
  787. $notificationid = $parent->lastInsertId();
  788. $data = array('notification_id'=>$notificationid, 'title'=>$notificationtitle, 'message'=>$notificationtext, 'notificationtype'=>$notificationtype, 'notificationdata'=>$notificationdata, 'created_date'=>NOW);
  789. if(count($part_arr)>0) {
  790. foreach ($part_arr as $res_user) {
  791. $user_arr[] = $res_user->userid;
  792. $dse_ids .= $res_user->userid . ',';
  793. }
  794. // Sending notification only to dealer, AM, RM, ZM
  795. if ($training_notification_type == 'score') {
  796. $user_arr = array();
  797. }
  798. 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') {
  799. // Get Dealer code of DSE
  800. $dse_ids = trim($dse_ids, ',');
  801. $dealer_str = " SELECT dealer_code FROM `".TABLE_USER."` WHERE userid in (".$dse_ids.") GROUP BY dealer_code ";
  802. $dealer_arr = $parent->getQueryValue($dealer_str);
  803. if(count($dealer_arr) > 0) {
  804. foreach ($dealer_arr as $dealers) {
  805. $dealer_codes .= $dealers->dealer_code . ',';
  806. }
  807. $dealer_codes = trim($dealer_codes, ',');
  808. }
  809. // Get ZM ids
  810. if (!empty($dealer_codes)) {
  811. $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) ";
  812. $zm_arr = $parent->getQueryValue($zm_str);
  813. if(count($zm_arr)>0) {
  814. foreach ($zm_arr as $zm_res_user) {
  815. $user_arr[] = $zm_res_user->userid;
  816. }
  817. }
  818. // Get RM ids
  819. $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) ";
  820. $rm_arr = $parent->getQueryValue($rm_str);
  821. if(count($rm_arr)>0) {
  822. foreach ($rm_arr as $rm_res_user) {
  823. $user_arr[] = $rm_res_user->userid;
  824. }
  825. }
  826. // Get AM ids
  827. $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) ";
  828. $am_arr = $parent->getQueryValue($am_str);
  829. if(count($am_arr)>0) {
  830. foreach ($am_arr as $am_res_user) {
  831. $user_arr[] = $am_res_user->userid;
  832. }
  833. }
  834. // Get DEALER ids
  835. $dealer_str = "SELECT u.userid FROM `".TABLE_USER."` u WHERE dealer_code in (".$dealer_codes.") GROUP BY u.dealer_code ";
  836. $dealer_arr = $parent->getQueryValue($dealer_str);
  837. if(count($dealer_arr)>0) {
  838. foreach ($dealer_arr as $dealer_res_user) {
  839. $user_arr[] = $dealer_res_user->userid;
  840. }
  841. }
  842. }
  843. }
  844. //print_r($user_arr);exit();
  845. $ins_arr = array();
  846. foreach($user_arr as $res) {
  847. $ins_arr[] = " ('".$notificationid."', '".$res."', '0', '".NOW."')";
  848. }
  849. $insert_chunk = array_chunk($ins_arr, 1000);
  850. foreach($insert_chunk as $chunk_ins) {
  851. //print "INSERT INTO ".TABLE_NOTIFICATION_USER."(`notificationid`, `userid`, `status`, `created_on`) VALUES ".@implode(',',$chunk_ins)." ON DUPLICATE KEY UPDATE `status` =0";
  852. $parent->executeQuery("INSERT INTO ".TABLE_NOTIFICATION_USER."(`notificationid`, `userid`, `status`, `created_on`) VALUES ".@implode(',',$chunk_ins)." ON DUPLICATE KEY UPDATE `status` =0");
  853. }
  854. $usertokenarr['ios']=array();
  855. $usertokenarr['android']=array();
  856. $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!=''";
  857. $user_device_arr = $parent->getQueryValue($user_device_str);
  858. if(count($user_device_arr) > 0) {
  859. foreach($user_device_arr as $res_dev) {
  860. //print_r($user_device_arr);
  861. if(strtolower($res_dev->devicetype) == 'ios') {
  862. $usertokenarr['ios'][] = $res_dev->token;
  863. }
  864. else if(strtolower($res_dev->devicetype) == 'android') {
  865. $usertokenarr['android'][] = $res_dev->token;
  866. }
  867. }
  868. // globalfunc::sendUserNotification($data,$usertokenarr);
  869. }
  870. }
  871. }
  872. }
  873. // Cancel Training
  874. private function canceltraining ($parent) {
  875. globalfunc::checkMethodType($parent,array('GET' ));
  876. globalfunc::checkAuthrozation($parent,array('type'=>'user'));
  877. globalfunc::checkParamCount($parent,3);
  878. $schedule_id = escape_str($parent->params[1]);
  879. $cancel_or_reschedule_type = escape_str($parent->params[2]);
  880. $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."'";
  881. $query = $parent->executeQuery($update_qry);
  882. if ($query) {
  883. // Training Notification
  884. $training_str = "SELECT status FROM ".TABLE_TRAINING_SCHEDULE." WHERE schedule_id='".$schedule_id."' LIMIT 1 ";
  885. $training_arr = $parent->getQueryValue($training_str);
  886. if ($training_arr[0]->status == 1) {
  887. $mobj = new stdClass();
  888. $mobj->schedule_id = $schedule_id;
  889. $mobj->type = 'cancel';
  890. $this->trainingnotifictaion($parent, $mobj);
  891. }
  892. }
  893. $parent->response(array('response'=>'success', 'message'=>$this->page_data['success1']),200);
  894. }
  895. // Reschedule Training
  896. private function rescheduletraining ($parent) {
  897. globalfunc::checkMethodType($parent,array('POST' ));
  898. globalfunc::checkAuthrozation($parent,array('type'=>'user'));
  899. globalfunc::checkParamCount($parent,3);
  900. $startdate=escape_str($parent->_request["startdate"]);
  901. $enddate=escape_str($parent->_request["enddate"]);
  902. $starttime=escape_str($parent->_request["starttime"]);
  903. $endtime=escape_str($parent->_request["endtime"]);
  904. $training_total_hours = escape_str($parent->_request["training_total_hours"]);
  905. // if($starttime!='' && $endtime!='') {
  906. // $startdate.=" ".$starttime;
  907. // $enddate.=" ".$endtime;
  908. // }else {
  909. // $startdate.=" 00:00:00";
  910. // $enddate.=" 23:59:59";
  911. // }
  912. $todaydate_time = date('Y-m-d H:i:s');
  913. $starttime = stripslashes($starttime);
  914. $starttime_array = json_decode($starttime, true);
  915. $endtime_array = json_decode($endtime, true);
  916. // Check Condition about 6 hours
  917. $date_time_diff_str = strtotime($startdate . ' ' . $starttime_array[0]) - strtotime($todaydate_time);
  918. $date_time_diff_str = round($date_time_diff_str / (60 * 60));
  919. if ($date_time_diff_str < 1) {
  920. $parent->response(array('response'=>'failed','message'=>'You can able to reschedule training before 1 hours '),406);
  921. }
  922. $schedule_id = escape_str($parent->params[1]);
  923. $cancel_or_reschedule_type = escape_str($parent->params[2]);
  924. $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."'";
  925. $query = $parent->executeQuery($update_qry);
  926. if ($query) {
  927. // Update Assessment
  928. for($assessmenttype=1; $assessmenttype<=2; $assessmenttype++) {
  929. //GET ASSESSMENT START AND END DATES
  930. $buffer_day = 1;
  931. if ($assessmenttype == 1) {
  932. $assessment_startdate=date('Y-m-d H:i:s',strtotime($startdate));
  933. $assessment_enddate=date('Y-m-d H:i:s',strtotime('+'.$buffer_day.' day',strtotime($startdate)));
  934. }
  935. else {
  936. $assessment_startdate=date('Y-m-d H:i:s',strtotime($enddate));
  937. $assessment_enddate=date('Y-m-d H:i:s',strtotime('+'.$buffer_day.' day',strtotime($enddate)));
  938. }
  939. $train_assess_str = "SELECT assessmentid FROM ".TABLE_ASSESSMENT." WHERE schedule_id='".$schedule_id."' AND assessmenttype = '" . $assessmenttype . "' LIMIT 1 ";
  940. $train_assess_arr = $parent->getQueryValue($train_assess_str);
  941. if(count($train_assess_arr) > 0) {
  942. $old_assessmentid = $train_assess_arr[0]->assessmentid;
  943. }
  944. $update_qry = "UPDATE ".TABLE_ASSESSMENT ." SET `publisheddate`='".$assessment_startdate."', `enddate`='".$assessment_enddate."' WHERE assessmentid='".$old_assessmentid."'";
  945. $parent->executeQuery($update_qry);
  946. }
  947. // Training Notification
  948. $training_str = "SELECT status FROM ".TABLE_TRAINING_SCHEDULE." WHERE schedule_id='".$schedule_id."' LIMIT 1 ";
  949. $training_arr = $parent->getQueryValue($training_str);
  950. if ($training_arr[0]->status == 1) {
  951. $mobj = new stdClass();
  952. $mobj->schedule_id = $schedule_id;
  953. $mobj->type = 'reschedule';
  954. $this->trainingnotifictaion($parent, $mobj);
  955. }
  956. }
  957. $parent->response(array('response'=>'success', 'message'=>$this->page_data['success1']),200);
  958. }
  959. // Decline Treaining Reaosn list
  960. private function declinetrainingreasonlist ($parent) {
  961. globalfunc::checkMethodType($parent,array('GET' ));
  962. globalfunc::checkAuthrozation($parent,array('type'=>'user'));
  963. globalfunc::checkParamCount($parent,1);
  964. $reschedule_str = "SELECT id, name FROM ".TABLE_TRAINING_DECLINE_REASON_LIST." WHERE status = 1 ";
  965. $reschedule_arr = $parent->getQueryValue($reschedule_str);
  966. if(count($reschedule_arr) > 0) {
  967. $parent->response(array('response'=>'success', 'data'=> $reschedule_arr, 'message'=>$this->page_data['success1']),200);
  968. }
  969. }
  970. // Cancel Training
  971. private function acceptdeclinetraining ($parent) {
  972. globalfunc::checkMethodType($parent,array('POST' ));
  973. globalfunc::checkAuthrozation($parent,array('type'=>'user'));
  974. //globalfunc::checkParamCount($parent,4);
  975. $schedule_id = escape_str($parent->_request["schedule_id"]);
  976. $userid = escape_str($parent->_request["userid"]);
  977. $status = escape_str($parent->_request["status"]);
  978. $acknowledge_by = escape_str($parent->_request["acknowledge_by"]);
  979. $decline_reason = escape_str($parent->_request["decline_reason"]);
  980. $decline_reason_desc = escape_str($parent->_request["decline_reason_desc"]);
  981. $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."'";
  982. $parent->executeQuery($update_qry);
  983. $parent->response(array('response'=>'success', 'message'=>$this->page_data['success1']),200);
  984. }
  985. // Upload Training Group Image
  986. private function traininggroupimage ($parent) {
  987. globalfunc::checkParamCount($parent,1);
  988. $user_details=globalfunc::checkAuthrozation($parent,array('type'=>'user'));
  989. $REQUEST_KEYS=array('schedule_id'=>'number');
  990. globalfunc::mandatoryKey($parent,$REQUEST_KEYS);
  991. $schedule_id = escape_str($parent->_request['schedule_id']);
  992. //CHECK FILE
  993. if(isset($_FILES['file']) && $_FILES['file']['name']) {
  994. //CONNECT S3
  995. $s3=awsfileserver::connectS3();
  996. //IMAGE UPLOAD
  997. $obj= new stdClass();
  998. $obj->filekey='file';
  999. $obj->size='10'; //IN MB
  1000. $obj->type=array('jpg','jpeg','png');
  1001. globalfunc::validateFile($parent,$obj);
  1002. $obj->path=$this->training_path;
  1003. $obj->filename= 'profile_'.$parent->current_user_id.'_'.date('Ymd').uniqid();
  1004. if(isset($parent->_request['width']))$obj->width=$parent->_request['width'];
  1005. if(isset($parent->_request['height']))$obj->height=$parent->_request['height'];
  1006. $obj->cord=(isset($parent->_request['cord']))?$parent->_request['cord']:NULL;
  1007. $fileName=globalfunc::uploadFile($parent,$obj);
  1008. awsfileserver::checkupload($parent,$s3,S3_BUCKET,S3_TRAINING_URL.$fileName,dirname(__FILE__)."/../../../".S3_TRAINING_URL.$fileName) ;
  1009. //UNLINK
  1010. @unlink(dirname(__FILE__).'/../'.$this->training_path.$fileName);
  1011. $econd=" ,training_group_img='".$fileName."'";
  1012. $parent->executeQuery(" UPDATE ".TABLE_TRAINING_SCHEDULE." SET training_group_image='".$fileName."', `modified_on` = '".NOW."' WHERE schedule_id = '".$schedule_id."' ");
  1013. }
  1014. //LOG
  1015. $logstr='Training Group Photo UPDATE';
  1016. globalfunc::insertUserLog($parent,$logstr);
  1017. $parent->response(array('response'=>'success', 'message'=>$this->page_data['success1']),200);
  1018. }
  1019. private function updatetraining($parent) {
  1020. globalfunc::checkMethodType($parent,array('POST' ));
  1021. globalfunc::checkAuthrozation($parent,array('type'=>'user'));
  1022. $REQUEST_KEYS=array('schedule_id'=>'number', 'title'=>'number');
  1023. globalfunc::mandatoryKey($parent,$REQUEST_KEYS);
  1024. $schedule_id=escape_str($parent->_request["schedule_id"]);
  1025. $lvl_id=escape_str($parent->_request["title"]);
  1026. $trainer_id=$parent->current_user_id;
  1027. $adhoc_training=escape_str($parent->_request["adhoc_training"]);
  1028. $business_segment=escape_str($parent->_request["business_segment"]);
  1029. $training_other_title=escape_str($parent->_request["training_other_title"]);
  1030. //$date_restriction=escape_str($parent->_request["date_restriction"]);
  1031. $status=escape_str($parent->_request["status"]);
  1032. $filter_zone = escape_str($parent->_request["filter_zone"]);
  1033. $description = escape_str($parent->_request['description']);
  1034. $is_feedback = escape_str($parent->_request["is_feedback"]);
  1035. $venue_type = escape_str($parent->_request["venue_type"]);
  1036. $venue_am = escape_str($parent->_request["venue_am"]);
  1037. $venue_dealer = escape_str($parent->_request["venue_dealer"]);
  1038. $venue_address = escape_str($parent->_request["venue_address"]);
  1039. // if(strtotime($startdate)<NOW) $parent->response(array('response'=>'failed','message'=>$this->page_data["error4"]),406);
  1040. // if(strtotime($enddate)<NOW) $parent->response(array('response'=>'failed','message'=>$this->page_data["error4"]),406);
  1041. //if(strtotime($startdate)>strtotime($enddate)) $parent->response(array('response'=>'failed','message'=>'from date should be greater than to date'),406);
  1042. $dse = $parent->_request['dse'];
  1043. $participant_arr = json_decode($dse); //sending as string
  1044. if(!(is_array($participant_arr) && count($participant_arr)>0)) $parent->response(array('response'=>'failed','message'=>$this->page_data["error2"]),406);
  1045. //$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."'";
  1046. $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."'";
  1047. $parent->executeQuery($update_qry);
  1048. if(count($participant_arr)>0) {
  1049. // Delete Old One
  1050. $delete_qry = $parent->executeQuery("DELETE FROM " . TABLE_TRAINING_PARTICIPANT . " WHERE schedule_id = '" . $schedule_id . "' ");
  1051. $participant_arr= array_unique($participant_arr);
  1052. $ins_participant_arr=array();
  1053. foreach($participant_arr as $userid) {
  1054. $ins_participant_arr[] =" ( '".$schedule_id."', '".$userid."', '0', '0', '0', '".$trainer_id."','".NOW."', '".NOW."')";
  1055. }
  1056. //print_r($ins_participant_arr);
  1057. $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);
  1058. $parent->executeQuery($insert_qry);
  1059. $assessments = $parent->_request['assessments'];
  1060. $assessmenttype_array=json_decode($assessments, true);
  1061. if(count($assessmenttype_array) > 0) {
  1062. //print_r($assessmenttype_array);
  1063. // $delete_qry = $parent->executeQuery("DELETE FROM " . TABLE_ASSESSMENT . " WHERE schedule_id = '" . $schedule_id . "' ");
  1064. // $delete_qry = $parent->executeQuery("DELETE FROM " . TABLE_TRAINING_ASSESSMENT . " WHERE schedule_id = '" . $schedule_id . "' ");
  1065. //ASSESSMENT QUESTION ADD
  1066. $vehicle_type = 0;
  1067. if ($business_segment == 1) {
  1068. $vehicle_type = 1;
  1069. }
  1070. else if ($business_segment == 2) {
  1071. $vehicle_type = 2;
  1072. }
  1073. foreach ($assessmenttype_array as $assessmentkey => $assessmenttypes) {
  1074. if(!empty($assessmenttypes['name'])) {
  1075. if ($assessmenttypes['assessment'] == 'pre') {
  1076. $assessmenttype = '1';
  1077. }
  1078. else if ($assessmenttypes['assessment'] == 'post') {
  1079. $assessmenttype = '2';
  1080. }
  1081. $assessmentname = $assessmenttypes['name'];
  1082. $ques_count = $assessmenttypes["ques_count"];
  1083. $assessmenttime = $assessmenttypes["duration"];
  1084. $train_assess_str = "SELECT assessmentid FROM ".TABLE_ASSESSMENT." WHERE schedule_id='".$schedule_id."' AND assessmenttype = '" . $assessmenttype . "' LIMIT 1 ";
  1085. $train_assess_arr = $parent->getQueryValue($train_assess_str);
  1086. if(count($train_assess_arr) > 0) {
  1087. $old_assessmentid = $train_assess_arr[0]->assessmentid;
  1088. }
  1089. $delete_qry = $parent->executeQuery("DELETE FROM " . TABLE_ASSESSMENT_QUESTION . " WHERE assessmentid = '" . $old_assessmentid . "' ");
  1090. //INSERT ASSESSMENT
  1091. // $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."')";
  1092. // $parent->executeQuery($insert_qry);
  1093. // $assessmentid = $parent->lastInsertId();
  1094. $update_qry = "UPDATE ".TABLE_ASSESSMENT ." SET `assessmentname`='".$assessmentname."', `total_question`='".$ques_count."', `assessmenttime`='".$assessmenttime."', modified_on='".NOW."' WHERE assessmentid='".$old_assessmentid."'";
  1095. $parent->executeQuery($update_qry);
  1096. /* if(count($participant_arr)>0) {
  1097. $ins_assess_arr=array();
  1098. foreach($participant_arr as $userid) {
  1099. $ins_assess_arr[] =" ( '".$assessmentid."', '".$schedule_id."', '".$userid."', '0')";
  1100. }
  1101. }
  1102. //ASSESSMENT PARTICPANT ADD
  1103. $insert_qry = "INSERT INTO ".TABLE_TRAINING_ASSESSMENT ." ( `assessmentid`, `schedule_id`, `userid`, `is_attended`) VALUES ".@implode(',',$ins_assess_arr);
  1104. $parent->executeQuery($insert_qry);*/
  1105. //ASSESSMENT QUESTION ADD
  1106. $rcond = "ORDER BY RAND()";
  1107. $ques_str = "SELECT * FROM ".TABLE_QUESTION." WHERE vehicle_type = '" . $vehicle_type . "' AND assessment_type = '" . $assessmenttype . "' AND status='1' " . $rcond . " LIMIT " . $ques_count;
  1108. $ques_arr=$parent->getQueryValue($ques_str);
  1109. if(count($ques_arr)>0) {
  1110. $ins_ques_arr=array();
  1111. foreach($ques_arr as $res_ques) {
  1112. $ins_ques_arr[] =" ( '".$old_assessmentid."','".$res_ques->id."', '1', '".$trainer_id."','".NOW."', '".NOW."')";
  1113. }
  1114. //ASSESSMENT QUESTION
  1115. $insert_qry = "INSERT INTO ".TABLE_ASSESSMENT_QUESTION ." (`assessmentid`, `qid`, `is_mandatory`, `creatorid`, `created_on`, `modified_on`) VALUES ".@implode(',',$ins_ques_arr);
  1116. $parent->executeQuery($insert_qry);
  1117. }
  1118. }
  1119. }
  1120. }
  1121. }
  1122. // Training Notification
  1123. if ($status == 1) {
  1124. $mobj = new stdClass();
  1125. $mobj->schedule_id = $schedule_id;
  1126. $mobj->type = 'update';
  1127. $this->trainingnotifictaion($parent, $mobj);
  1128. }
  1129. $parent->response(array('response'=>'success', 'message'=>$this->page_data['success1']),200);
  1130. }
  1131. private function updatetrainingpresentabsent ($parent) {
  1132. globalfunc::checkMethodType($parent,array('POST' ));
  1133. globalfunc::checkAuthrozation($parent,array('type'=>'user'));
  1134. globalfunc::checkParamCount($parent,1);
  1135. $REQUEST_KEYS = array('schedule_id'=>'number', 'attendance'=>'string');
  1136. globalfunc::mandatoryKey($parent,$REQUEST_KEYS);
  1137. $schedule_id = $parent->_request['schedule_id'];
  1138. $attendance = $parent->_request['attendance'];
  1139. $attendance_submit = $parent->_request['attendance_submit'];
  1140. $attendance_array = json_decode($attendance, true);
  1141. // Gertting Training Details
  1142. $schedule_str = "SELECT start_date, end_date FROM ".TABLE_TRAINING_SCHEDULE." WHERE schedule_id='".$schedule_id."' LIMIT 1 ";
  1143. $schedule_arr = $parent->getQueryValue($schedule_str);
  1144. if(count($schedule_arr) > 0) {
  1145. $datediff = strtotime($schedule_arr[0]->end_date) - strtotime($schedule_arr[0]->start_date);
  1146. $training_days = round($datediff / (60 * 60 * 24)) + 1;
  1147. }
  1148. //print_r($attendance_array);exit();
  1149. if(count($attendance_array) > 0) {
  1150. $todaydate = date('Y-m-d');
  1151. // Get Pre Assessment Id
  1152. $pre_assess_str = "SELECT assessmentid FROM ".TABLE_ASSESSMENT." WHERE schedule_id='".$schedule_id."' AND assessmenttype='1' LIMIT 1 ";
  1153. $pre_assess_arr = $parent->getQueryValue($pre_assess_str);
  1154. // Get Post Assessment Id
  1155. $post_assess_str = "SELECT assessmentid FROM ".TABLE_ASSESSMENT." WHERE schedule_id='".$schedule_id."' AND assessmenttype='2' LIMIT 1 ";
  1156. $post_assess_arr = $parent->getQueryValue($post_assess_str);
  1157. foreach ($attendance_array as $attendance_key => $atten) {
  1158. $userid = $atten['userid'];
  1159. $day = $atten['day'];
  1160. $ispresent = $atten['ispresent'];
  1161. if ($atten['ispresent'] == 2) {
  1162. $absent_users .= $userid . ',';
  1163. }
  1164. $manual_attendance_reason = $atten['manual_attendance_reason'];
  1165. $absence_reason = $atten['absence_reason'];
  1166. //CHECK FILE
  1167. //if(isset($_FILES['upload_photo']) && $_FILES['upload_photo']['name']) {
  1168. $fileName = '';
  1169. if (isset($atten['upload_photo']) AND $atten['ispresent'] == 1) {
  1170. $image_parts = explode(";base64,", $atten['upload_photo']);
  1171. $image_type_aux = explode("image/", $image_parts[0]);
  1172. $image_type = $image_type_aux[1];
  1173. if (!empty($image_type)) {
  1174. $image_base64 = base64_decode($image_parts[1]);
  1175. $fileName = 'atten_'.$atten['userid'].'_'.date('Ymd').uniqid() . '.' . $image_type;
  1176. file_put_contents($this->training_path . $fileName, $image_base64);
  1177. //CONNECT S3
  1178. $s3=awsfileserver::connectS3();
  1179. //IMAGE UPLOAD
  1180. // $obj= new stdClass();
  1181. // $obj->filekey='upload_photo';
  1182. // $obj->size='10'; //IN MB
  1183. // $obj->type=array('jpg','jpeg','png');
  1184. // globalfunc::validateFile($parent,$obj);
  1185. // $obj->path=$this->training_path;
  1186. // $obj->filename= 'profile_'.$parent->current_user_id.'_'.date('Ymd').uniqid();
  1187. // if(isset($parent->_request['width']))$obj->width=$parent->_request['width'];
  1188. // if(isset($parent->_request['height']))$obj->height=$parent->_request['height'];
  1189. // $obj->cord=(isset($parent->_request['cord']))?$parent->_request['cord']:NULL;
  1190. // $fileName=globalfunc::uploadFile($parent,$obj);
  1191. awsfileserver::checkupload($parent,$s3,S3_BUCKET,S3_TRAINING_URL.$fileName,dirname(__FILE__)."/../../../".S3_TRAINING_URL.$fileName) ;
  1192. //UNLINK
  1193. @unlink(dirname(__FILE__).'/../'.$this->training_path . $fileName);
  1194. // Update Condition
  1195. $file_condition = " ,`image`='" . $fileName . "'";
  1196. }
  1197. }
  1198. // Check already attendance available or not
  1199. $atten_str = "SELECT id FROM ".TABLE_TRAINING_PARTICIPANT_ATTENDANCE." WHERE schedule_id = '" . $schedule_id . "' AND userid='" . $userid . "' AND day='" . $day . "' LIMIT 1";
  1200. //print $ispresent . '--'. $day . '--'. $pre_assess_arr[0]->assessmentid;
  1201. $atten_arr = $parent->getQueryValue($atten_str);
  1202. if(count($atten_arr) == 0) {
  1203. // UPDATE TRAINING
  1204. $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."') ";
  1205. $parent->executeQuery($insert_qry);
  1206. }
  1207. else {
  1208. $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 . "' ";
  1209. $parent->executeQuery($update_qry);
  1210. }
  1211. // PRE ASSESSMENT PARTICPANT ADD
  1212. if ($ispresent == 1 AND $day == 1 AND !empty($pre_assess_arr[0]->assessmentid)) {
  1213. // Get Pre Assessment Id
  1214. $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 ";
  1215. $check_pre_assess_user_arr = $parent->getQueryValue($check_pre_assess_user_str);
  1216. if (count($check_pre_assess_user_arr) == 0) {
  1217. $ins_pre_assess_arr[] =" ( '".$pre_assess_arr[0]->assessmentid."', '".$schedule_id."', '".$userid."', '0')";
  1218. $pre_assess_notification_users .= $userid . ',';
  1219. }
  1220. }
  1221. // POST ASSESSMENT PARTICPANT ADD
  1222. //print $ispresent . '--'. strtotime($schedule_arr[0]->end_date) . '--'. strtotime($todaydate) . '--'. $post_assess_arr[0]->assessmentid . '--'. $attendance_submit;
  1223. if ($ispresent == 1 AND ( strtotime($schedule_arr[0]->end_date) == strtotime($todaydate) ) AND !empty($post_assess_arr[0]->assessmentid) AND (!empty($attendance_submit)) ) {
  1224. // Get Pre Assessment Id
  1225. $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 ";
  1226. $check_post_assess_user_arr = $parent->getQueryValue($check_post_assess_user_str);
  1227. if (count($check_post_assess_user_arr) == 0) {
  1228. $ins_post_assess_arr[] =" ( '".$post_assess_arr[0]->assessmentid."', '".$schedule_id."', '".$userid."', '0')";
  1229. $post_assess_notification_users .= $userid . ',';
  1230. }
  1231. }
  1232. // Giving Default adbsent for other days if 1st day is absent start
  1233. if ( ($training_days > 1) AND ($day == 1 and $ispresent == 2) ) {
  1234. for($i = 2; $i <= $training_days; $i++) {
  1235. $atten_str = "SELECT id FROM ".TABLE_TRAINING_PARTICIPANT_ATTENDANCE." WHERE schedule_id = '" . $schedule_id . "' AND userid='" . $userid . "' AND day='" . $i . "' LIMIT 1";
  1236. $atten_arr = $parent->getQueryValue($atten_str);
  1237. if(count($atten_arr) == 0) {
  1238. //ASSESSMENT QUESTION
  1239. $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."') ";
  1240. $parent->executeQuery($insert_qry);
  1241. }
  1242. else {
  1243. $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 . "' ";
  1244. $parent->executeQuery($update_qry);
  1245. }
  1246. }
  1247. }
  1248. // Giving Default adbsent for other days if 1st day is absent end
  1249. }
  1250. // Update Submit Status in Training Schedule
  1251. if (!empty($parent->_request['attendance_submit'])) {
  1252. $update_qry = "UPDATE ".TABLE_TRAINING_SCHEDULE ." SET `attendance_submit`='".$attendance_submit."', `modified_on` = '".NOW."' WHERE schedule_id = '".$schedule_id."' ";
  1253. $parent->executeQuery($update_qry);
  1254. $absent_users = trim($absent_users, ',');
  1255. //print $absent_users;exit();
  1256. if (!empty($absent_users) ) {
  1257. // Get DSE id from Users
  1258. $dse_str = " SELECT smpin FROM `".TABLE_USER."` WHERE userid in (".$absent_users.") ";
  1259. $dse_arr = $parent->getQueryValue($dse_str);
  1260. if(count($dse_arr) > 0) {
  1261. foreach ($dse_arr as $dses) {
  1262. $dse_codes .= $dses->smpin . ', ';
  1263. }
  1264. $dse_codes = trim($dse_codes, ', ');
  1265. }
  1266. // Training Notification
  1267. $mobj = new stdClass();
  1268. $mobj->schedule_id = $schedule_id;
  1269. $mobj->type = 'absent';
  1270. $mobj->absent_users = $absent_users;
  1271. $mobj->dse_codes = $dse_codes;
  1272. $this->trainingabsentnotifictaion($parent, $mobj);
  1273. }
  1274. }
  1275. // Insert Pre Assessment Users
  1276. if (!empty($ins_pre_assess_arr)) {
  1277. $insert_qry = "INSERT INTO ".TABLE_TRAINING_ASSESSMENT ." ( `assessmentid`, `schedule_id`, `userid`, `is_attended`) VALUES ".@implode(',', $ins_pre_assess_arr);
  1278. $parent->executeQuery($insert_qry);
  1279. // Notifications
  1280. $pre_assess_notification_users = trim($pre_assess_notification_users, ',');
  1281. $mobj = new stdClass();
  1282. $mobj->schedule_id = $schedule_id;
  1283. $mobj->type = 'pre';
  1284. $mobj->users = $pre_assess_notification_users;
  1285. $this->trainingnotifictaion($parent, $mobj);
  1286. }
  1287. // Insert Post Assessment Users
  1288. if (!empty($ins_post_assess_arr)) {
  1289. $insert_qry = "INSERT INTO ".TABLE_TRAINING_ASSESSMENT ." ( `assessmentid`, `schedule_id`, `userid`, `is_attended`) VALUES ".@implode(',', $ins_post_assess_arr);
  1290. $parent->executeQuery($insert_qry);
  1291. // Notifications
  1292. $post_assess_notification_users = trim($post_assess_notification_users, ',');
  1293. $mobj = new stdClass();
  1294. $mobj->schedule_id = $schedule_id;
  1295. $mobj->type = 'post';
  1296. $mobj->users = $post_assess_notification_users;
  1297. $this->trainingnotifictaion($parent, $mobj);
  1298. }
  1299. }
  1300. $parent->response(array('response'=>'success', 'message'=>$this->page_data['success1']),200);
  1301. }
  1302. // Training Absent Notification
  1303. private function trainingabsentnotifictaion ($parent, $obj) {
  1304. if(!(isset($obj) && isset($obj->schedule_id))) $parent->response(array('response'=>'failed','message'=>'PHP ERROR Value not passed'),500);
  1305. $schedule_id = $obj->schedule_id;
  1306. $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";
  1307. $query_arr=$parent->getQueryValue($query_str);
  1308. // $query_str = "SELECT userid FROM `".TABLE_TRAINING_PARTICIPANT."` WHERE schedule_id='".$schedule_id."' ";
  1309. // $part_arr = $parent->getQueryValue($query_str);
  1310. $absent_users = $obj->absent_users;
  1311. $dse_codes = $obj->dse_codes;
  1312. if(count($query_arr) > 0 && !empty($absent_users)) {
  1313. if ($obj->type == 'absent') {
  1314. $schedule_type_name = 'Red Alert - ';
  1315. $ntext = $schedule_type_name . "You are marked absent in today's - " . $query_arr[0]->title . " training";
  1316. }
  1317. $notificationtitle = $query_arr[0]->title . ' - ' . $query_arr[0]->schedule_name;
  1318. $notificationtext = $ntext;
  1319. $notificationtype = 10;
  1320. $nobj = new stdClass();
  1321. $nobj->schedule_id = $schedule_id;
  1322. $notificationdata = json_encode($nobj);
  1323. //INSERT NOTIFICATION
  1324. $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."')");
  1325. $notificationid = $parent->lastInsertId();
  1326. $data = array('notification_id'=>$notificationid, 'title'=>$notificationtitle, 'message'=>$notificationtext, 'notificationtype'=>$notificationtype, 'notificationdata'=>$notificationdata, 'created_date'=>NOW);
  1327. if(!empty($absent_users)) {
  1328. $part_arr = explode(',', $absent_users);
  1329. foreach ($part_arr as $res_user) {
  1330. $user_arr[] = $res_user;
  1331. }
  1332. // Absent Notification to User
  1333. $ins_arr = array();
  1334. foreach($user_arr as $res) {
  1335. $ins_arr[] = " ('".$notificationid."', '".$res."', '0', '".NOW."')";
  1336. }
  1337. $insert_chunk = array_chunk($ins_arr, 1000);
  1338. foreach($insert_chunk as $chunk_ins) {
  1339. //print "INSERT INTO ".TABLE_NOTIFICATION_USER."(`notificationid`, `userid`, `status`, `created_on`) VALUES ".@implode(',',$chunk_ins)." ON DUPLICATE KEY UPDATE `status` =0";
  1340. $parent->executeQuery("INSERT INTO ".TABLE_NOTIFICATION_USER."(`notificationid`, `userid`, `status`, `created_on`) VALUES ".@implode(',',$chunk_ins)." ON DUPLICATE KEY UPDATE `status` =0");
  1341. }
  1342. $usertokenarr['ios']=array();
  1343. $usertokenarr['android']=array();
  1344. $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!=''";
  1345. $user_device_arr = $parent->getQueryValue($user_device_str);
  1346. if(count($user_device_arr) > 0) {
  1347. foreach($user_device_arr as $res_dev) {
  1348. //print_r($user_device_arr);
  1349. if(strtolower($res_dev->devicetype) == 'ios') {
  1350. $usertokenarr['ios'][] = $res_dev->token;
  1351. }
  1352. else if(strtolower($res_dev->devicetype) == 'android') {
  1353. $usertokenarr['android'][] = $res_dev->token;
  1354. }
  1355. }
  1356. // globalfunc::sendUserNotification($data,$usertokenarr);
  1357. }
  1358. // Absent Notification to AM
  1359. if (!empty($dse_codes)) {
  1360. $notication_dse = '( ' . $dse_codes . ' )';
  1361. }
  1362. $schedule_type_name = 'Red Alert - ';
  1363. $ntext = $schedule_type_name . 'Your DSE ' . $notication_dse . ' s is/are absent for - ' . $query_arr[0]->title . ' training';
  1364. $notificationtitle = $query_arr[0]->title . ' - ' . $query_arr[0]->schedule_name;
  1365. $notificationtext = $ntext;
  1366. $notificationtype = 10;
  1367. $nobj = new stdClass();
  1368. $nobj->schedule_id = $schedule_id;
  1369. $notificationdata = json_encode($nobj);
  1370. //INSERT NOTIFICATION
  1371. $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."')");
  1372. $notificationid = $parent->lastInsertId();
  1373. $data = array('notification_id'=>$notificationid, 'title'=>$notificationtitle, 'message'=>$notificationtext, 'notificationtype'=>$notificationtype, 'notificationdata'=>$notificationdata, 'created_date'=>NOW);
  1374. // Get Dealer code of DSE
  1375. $dealer_str = " SELECT dealer_code FROM `".TABLE_USER."` WHERE userid in (".$absent_users.") GROUP BY dealer_code ";
  1376. $dealer_arr = $parent->getQueryValue($dealer_str);
  1377. if(count($dealer_arr) > 0) {
  1378. foreach ($dealer_arr as $dealers) {
  1379. $dealer_codes .= $dealers->dealer_code . ',';
  1380. }
  1381. $dealer_codes = trim($dealer_codes, ',');
  1382. }
  1383. // Get AM ids
  1384. $user_arr = '';
  1385. $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) ";
  1386. $zm_arr = $parent->getQueryValue($zm_str);
  1387. if(count($zm_arr)>0) {
  1388. foreach ($zm_arr as $res_user) {
  1389. $user_arr[] = $res_user->userid;
  1390. }
  1391. }
  1392. // Get Dealer ids
  1393. $user_arr = '';
  1394. $zm_str = "SELECT userid FROM `".TABLE_USER."` WHERE dealer_code in (".$dealer_codes.") GROUP BY dealer_code ";
  1395. $zm_arr = $parent->getQueryValue($zm_str);
  1396. if(count($zm_arr)>0) {
  1397. foreach ($zm_arr as $res_user) {
  1398. $user_arr[] = $res_user->userid;
  1399. }
  1400. }
  1401. $ins_arr = array();
  1402. foreach($user_arr as $res) {
  1403. $ins_arr[] = " ('".$notificationid."', '".$res."', '0', '".NOW."')";
  1404. }
  1405. $insert_chunk = array_chunk($ins_arr, 1000);
  1406. foreach($insert_chunk as $chunk_ins) {
  1407. //print "INSERT INTO ".TABLE_NOTIFICATION_USER."(`notificationid`, `userid`, `status`, `created_on`) VALUES ".@implode(',',$chunk_ins)." ON DUPLICATE KEY UPDATE `status` =0";
  1408. $parent->executeQuery("INSERT INTO ".TABLE_NOTIFICATION_USER."(`notificationid`, `userid`, `status`, `created_on`) VALUES ".@implode(',',$chunk_ins)." ON DUPLICATE KEY UPDATE `status` =0");
  1409. }
  1410. $usertokenarr['ios']=array();
  1411. $usertokenarr['android']=array();
  1412. $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!=''";
  1413. $user_device_arr = $parent->getQueryValue($user_device_str);
  1414. if(count($user_device_arr) > 0) {
  1415. foreach($user_device_arr as $res_dev) {
  1416. //print_r($user_device_arr);
  1417. if(strtolower($res_dev->devicetype) == 'ios') {
  1418. $usertokenarr['ios'][] = $res_dev->token;
  1419. }
  1420. else if(strtolower($res_dev->devicetype) == 'android') {
  1421. $usertokenarr['android'][] = $res_dev->token;
  1422. }
  1423. }
  1424. // globalfunc::sendUserNotification($data,$usertokenarr);
  1425. }
  1426. }
  1427. }
  1428. }
  1429. // Training Level Score
  1430. private function traininglevelscore ($parent) {
  1431. globalfunc::checkMethodType($parent,array('GET' ));
  1432. globalfunc::checkAuthrozation($parent,array('type'=>'user'));
  1433. globalfunc::checkParamCount($parent,2);
  1434. $level = escape_str($parent->params[1]);
  1435. $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 ";
  1436. $reschedule_arr = $parent->getQueryValue($reschedule_str);
  1437. if(count($reschedule_arr) > 0) {
  1438. $parent->response(array('response'=>'success', 'data'=> $reschedule_arr, 'message'=>$this->page_data['success1']),200);
  1439. }
  1440. }
  1441. private function updatetrainingscore ($parent) {
  1442. globalfunc::checkMethodType($parent,array('POST' ));
  1443. globalfunc::checkAuthrozation($parent,array('type'=>'user'));
  1444. globalfunc::checkParamCount($parent,1);
  1445. $REQUEST_KEYS = array('schedule_id'=>'number');
  1446. globalfunc::mandatoryKey($parent,$REQUEST_KEYS);
  1447. $schedule_id = $parent->_request['schedule_id'];
  1448. $score = $parent->_request['score'];
  1449. $score_submit = $parent->_request['score_submit'];
  1450. $score_array = json_decode($score, true);
  1451. if(count($score_array) > 0) {
  1452. foreach ($score_array as $score_key => $atten) {
  1453. $userid = $atten['userid'];
  1454. $roleplay_or_demo = $atten['roleplay_or_demo'];
  1455. $assignment = $atten['assignment'];
  1456. $performance = $atten['performance'];
  1457. $certification = $atten['certification'];
  1458. $overall = $atten['overall'];
  1459. $remarks = $atten['remarks'];
  1460. $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 . "' ";
  1461. $parent->executeQuery($update_qry);
  1462. }
  1463. }
  1464. // Update Submit Status in Training Schedule
  1465. if ($parent->_request['score_submit'] == 1 or $parent->_request['score_submit'] == 2) {
  1466. $update_qry = "UPDATE ".TABLE_TRAINING_SCHEDULE ." SET `score_submit`='".$score_submit."', `modified_on` = '".NOW."' WHERE schedule_id = '".$schedule_id."' ";
  1467. $parent->executeQuery($update_qry);
  1468. if ($parent->_request['score_submit'] == 1) {
  1469. // feedback Questions
  1470. $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";
  1471. $query_arr = $parent->getQueryValue($query_str);
  1472. // Publish Score of Training Notification to AM, RM, ZM
  1473. $mobj = new stdClass();
  1474. $mobj->schedule_id = $schedule_id;
  1475. $mobj->type = 'score';
  1476. $this->trainingnotifictaion($parent, $mobj);
  1477. // NOtifications to DSE, AM & Dealer about Score certified or failed
  1478. //$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 ";
  1479. $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."' ";
  1480. $part_query_arr = $parent->getQueryValue($part_query_str);
  1481. $cerified_users = $failed_users = '';
  1482. foreach ($part_query_arr as $key => $values) {
  1483. if ($values->certification == 1) {
  1484. $cerified_users .= $values->userid . ',';
  1485. }
  1486. else if ($values->certification == 2) {
  1487. $failed_users .= $values->userid . ',';
  1488. }
  1489. }
  1490. $cerified_users = trim($cerified_users, ',');
  1491. $failed_users = trim($failed_users, ',');
  1492. // Ceritication Notification
  1493. if (!empty($cerified_users)) {
  1494. $mobj = new stdClass();
  1495. $mobj->schedule_id = $schedule_id;
  1496. $mobj->users = $cerified_users;
  1497. $mobj->type = 'userscore_certified';
  1498. $this->trainingnotifictaion($parent, $mobj);
  1499. }
  1500. // Failerd Notifcations
  1501. if (!empty($failed_users)) {
  1502. $mobj = new stdClass();
  1503. $mobj->schedule_id = $schedule_id;
  1504. $mobj->users = $failed_users;
  1505. $mobj->type = 'userscore_fail';
  1506. $this->trainingnotifictaion($parent, $mobj);
  1507. }
  1508. // Feedback
  1509. if ($query_arr[0]->is_feedback == 1) {
  1510. // Checking Assessmengt Avaible or not
  1511. $check_asse_str = " SELECT assessmentid FROM ".TABLE_ASSESSMENT." WHERE assettypeid='2' AND schedule_id='".$schedule_id."' LIMIT 1";
  1512. $check_asse_arr = $parent->getQueryValue($check_asse_str);
  1513. if(count($check_asse_arr) == 0) {
  1514. //INSERT ASSESSMENT
  1515. $assessmentname = $query_arr[0]->schedule_name . " feedback";
  1516. $ques_count = 5;
  1517. $assessmenttime = 60;
  1518. $buffer_day = 2;
  1519. $assessment_startdate=date('Y-m-d H:i:s');
  1520. //GET ASSESSMENT END DATE
  1521. $assessment_enddate=date('Y-m-d H:i:s',strtotime('+'.$buffer_day.' day'));
  1522. $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."')";
  1523. $parent->executeQuery($insert_qry);
  1524. $assessmentid = $parent->lastInsertId();
  1525. // Getting PArtcipants Array
  1526. $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."'";
  1527. $participant_arr = $parent->getQueryValue($participant_str);
  1528. if(count($participant_arr)>0) {
  1529. $ins_assess_arr=array();
  1530. foreach($participant_arr as $userid => $participants) {
  1531. $ins_assess_arr[] =" ( '".$assessmentid."', '".$schedule_id."', '".$participants->userid."', '0')";
  1532. }
  1533. $insert_survey_qry = "INSERT INTO ".TABLE_TRAINING_SURVEY ." ( `assessmentid`, `schedule_id`, `userid`, `is_attended`) VALUES ".@implode(',',$ins_assess_arr);
  1534. }
  1535. //ASSESSMENT PARTICPANT ADD
  1536. $parent->executeQuery($insert_survey_qry);
  1537. // Notification
  1538. //if ($query) {
  1539. // Training Notification
  1540. $mobj = new stdClass();
  1541. $mobj->schedule_id = $schedule_id;
  1542. $mobj->type = 'feedback';
  1543. $this->trainingnotifictaion($parent, $mobj);
  1544. //}
  1545. //ASSESSMENT QUESTION ADD
  1546. $rcond = ($randomcond)?"ORDER BY RAND()":"ORDER BY id ASC";
  1547. $ques_str = "SELECT * FROM ".TABLE_TRAINING_FEEDBACK_QUESTION." WHERE status='1' ";
  1548. $ques_arr=$parent->getQueryValue($ques_str);
  1549. if(count($ques_arr)>0) {
  1550. $ins_ques_arr=array();
  1551. foreach($ques_arr as $res_ques) {
  1552. $ins_ques_arr[] =" ( '".$assessmentid."','".$res_ques->id."', '1', '".$trainer_id."','".NOW."', '".NOW."')";
  1553. }
  1554. //ASSESSMENT QUESTION
  1555. $insert_ques_qry = "INSERT INTO ".TABLE_ASSESSMENT_QUESTION ." (`assessmentid`, `qid`, `is_mandatory`, `creatorid`, `created_on`, `modified_on`) VALUES ".@implode(',',$ins_ques_arr);
  1556. $query = $parent->executeQuery($insert_ques_qry);
  1557. }
  1558. }
  1559. }
  1560. }
  1561. }
  1562. $parent->response(array('response'=>'success', 'message'=>$this->page_data['success1']),200);
  1563. }
  1564. // AM Acknowledge to Training
  1565. private function amacknowledgement ($parent) {
  1566. globalfunc::checkMethodType($parent,array('POST' ));
  1567. globalfunc::checkAuthrozation($parent,array('type'=>'user'));
  1568. globalfunc::checkParamCount($parent,1);
  1569. $REQUEST_KEYS = array('schedule_id'=>'number', 'absent_reason'=>'string');
  1570. globalfunc::mandatoryKey($parent,$REQUEST_KEYS);
  1571. $schedule_id = $parent->_request['schedule_id'];
  1572. $absent_reason = $parent->_request['absent_reason'];
  1573. $am_acknowledgement = $parent->_request['am_acknowledgement'];
  1574. $participant_absent_reason_array = json_decode($absent_reason, true);
  1575. if(count($participant_absent_reason_array) > 0) {
  1576. foreach ($participant_absent_reason_array as $absent_key => $atten) {
  1577. $userid = $atten['userid'];
  1578. $am_absence_reason = $atten['am_absence_reason'];
  1579. $am_absence_reason_desc = $atten['am_absence_reason_desc'];
  1580. $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 . "' ";
  1581. $parent->executeQuery($update_qry);
  1582. }
  1583. // Update AM Aknowledgment in Training Schedule
  1584. // Get Acknowledge Details
  1585. $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 = '' ";
  1586. $query_arr = $parent->getQueryValue($query_str);
  1587. if (!empty($parent->_request['am_acknowledgement']) and count($query_arr) == 0 ) {
  1588. $update_qry = "UPDATE ".TABLE_TRAINING_SCHEDULE ." SET `am_acknowledgement`='".$am_acknowledgement."', `modified_on` = '".NOW."' WHERE schedule_id = '".$schedule_id."' ";
  1589. $parent->executeQuery($update_qry);
  1590. }
  1591. $parent->response(array('response'=>'success', 'message'=>$this->page_data['success1']),200);
  1592. }
  1593. else {
  1594. $parent->response(array('response'=>'failed', 'message'=>$this->page_data['error11']), 406);
  1595. }
  1596. }
  1597. // Training Summery
  1598. private function trainingsummery ($parent) {
  1599. globalfunc::checkMethodType($parent,array('GET' ));
  1600. globalfunc::checkAuthrozation($parent,array('type'=>'user'));
  1601. $schedule_id = escape_str($parent->params[1]);
  1602. $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 ";
  1603. $schedule_arr = $parent->getQueryValue($schedule_str);
  1604. if(count($schedule_arr) > 0) {
  1605. // Total Particpants
  1606. $participant_str = "SELECT count(participant_id) as total_planned_participant FROM ".TABLE_TRAINING_PARTICIPANT." WHERE schedule_id='".$schedule_id."' ";
  1607. $participant_arr = $parent->getQueryValue($participant_str);
  1608. $schedule_arr[0]->total_planned_participant = $participant_arr[0]->total_planned_participant;
  1609. // Attendance
  1610. $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 ";
  1611. $participant_atten_arr = $parent->getQueryValue($participant_atten_str);
  1612. foreach ($participant_atten_arr as $atten_key => $atten_details) {
  1613. $atten_details->total_planned_participant = $participant_arr[0]->total_planned_participant;
  1614. $atten_details->no_of_absents = $atten_details->total_planned_participant - $atten_details->total_participant_appeared;
  1615. }
  1616. $schedule_arr[0]->attendance = $participant_atten_arr;
  1617. // Total Particpants Appeared
  1618. $participant_appr_str = "SELECT id FROM ".TABLE_TRAINING_PARTICIPANT_ATTENDANCE." WHERE schedule_id = '".$schedule_id."' AND ispresent = '1' group by userid ";
  1619. $participant_appr_arr = $parent->getQueryValue($participant_appr_str);
  1620. $schedule_arr[0]->total_participant_appeared = count($participant_appr_arr);
  1621. // Total Particpants Cerified
  1622. $participant_str = "SELECT count(participant_id) as no_of_dse_certified FROM ".TABLE_TRAINING_PARTICIPANT." WHERE schedule_id='".$schedule_id."' AND certification = 1 ";
  1623. $participant_arr = $parent->getQueryValue($participant_str);
  1624. $schedule_arr[0]->no_of_dse_certified = $participant_arr[0]->no_of_dse_certified;
  1625. // Total Particpants Failed
  1626. $schedule_arr[0]->no_of_dse_failed = $schedule_arr[0]->total_participant_appeared - $schedule_arr[0]->no_of_dse_certified;
  1627. // Batch through
  1628. $score_percentage_str = "SELECT percentage FROM ".TABLE_TRAINING_LEVEL_SCORE." WHERE level = '" . $schedule_arr[0]->lvl_id. "' AND name = 1";
  1629. $score_percentage_arr = $parent->getQueryValue($score_percentage_str);
  1630. $schedule_arr[0]->batch_through = $score_percentage_arr[0]->percentage;
  1631. // Average Batch score
  1632. $participant_avg_str = "SELECT AVG(overall) AS average_batch_score FROM ".TABLE_TRAINING_PARTICIPANT." WHERE schedule_id='".$schedule_id."' ";
  1633. $participant_avg_arr = $parent->getQueryValue($participant_avg_str);
  1634. $schedule_arr[0]->average_batch_score = round($participant_avg_arr[0]->average_batch_score);
  1635. }
  1636. $parent->response(array('response'=>'success', 'data'=> $schedule_arr[0], 'message'=>$this->page_data['success1']),200);
  1637. }
  1638. private function trainingattendancenotification ($parent) {
  1639. globalfunc::checkMethodType($parent,array('POST' ));
  1640. globalfunc::checkAuthrozation($parent,array('type'=>'user'));
  1641. globalfunc::checkParamCount($parent,1);
  1642. $REQUEST_KEYS = array('userid'=>'number', 'schedule_id'=>'number');
  1643. globalfunc::mandatoryKey($parent,$REQUEST_KEYS);
  1644. $schedule_id = $parent->_request['schedule_id'];
  1645. $userid = $parent->_request['userid'];
  1646. $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";
  1647. $query_arr = $parent->getQueryValue($query_str);
  1648. $otp_expiry = globalfunc::generateExpiryTime($parent, ENQUIRY_OTP_EXPIRY_MIN);
  1649. $otp = globalfunc::generateOTP();
  1650. // Update OTP
  1651. $update_qry = " UPDATE ".TABLE_TRAINING_PARTICIPANT ." SET `present_otp`='".$otp."', `modified_on` = '".NOW."' WHERE schedule_id = '".$schedule_id."' AND userid = '" . $userid . "' ";
  1652. $parent->executeQuery($update_qry);
  1653. $notificationtitle = $query_arr[0]->title . ' - ' . $query_arr[0]->schedule_name;
  1654. $notificationtext = "OTP for marking your attendance is " . $otp ;
  1655. $notificationtype = 10;
  1656. $nobj = new stdClass();
  1657. $nobj->schedule_id = $schedule_id;
  1658. $notificationdata = json_encode($nobj);
  1659. //INSERT NOTIFICATION
  1660. $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."')");
  1661. $notificationid = $parent->lastInsertId();
  1662. $data = array('notification_id' => $notificationid, 'title'=>$notificationtitle, 'message'=>$notificationtext, 'notificationtype'=>$notificationtype,' notificationdata'=>$notificationdata, 'created_date'=>NOW);
  1663. $parent->executeQuery("INSERT INTO ".TABLE_NOTIFICATION_USER. "(`notificationid`, `userid`, `status`, `created_on`) VALUES ('".$notificationid."', '".$userid."', '0', '".NOW."')" );
  1664. $usertokenarr['ios']=array();
  1665. $usertokenarr['android']=array();
  1666. $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!=''";
  1667. $user_device_arr = $parent->getQueryValue($user_device_str);
  1668. if(strtolower($user_device_arr[0]->devicetype) == 'ios') {
  1669. $usertokenarr['ios'][] = $user_device_arr[0]->token;
  1670. }
  1671. else if(strtolower($user_device_arr[0]->devicetype) == 'android') {
  1672. $usertokenarr['android'][] = $user_device_arr[0]->token;
  1673. }
  1674. // globalfunc::sendUserNotification($data, $usertokenarr);
  1675. $parent->response(array('response'=>'success', 'message'=>$this->page_data['success1']),200);
  1676. }
  1677. private function trainingattendancenotificationupdate ($parent) {
  1678. globalfunc::checkMethodType($parent,array('POST' ));
  1679. globalfunc::checkAuthrozation($parent,array('type'=>'user'));
  1680. globalfunc::checkParamCount($parent,1);
  1681. $REQUEST_KEYS = array('userid'=>'number', 'schedule_id'=>'number', 'otp'=>'number');
  1682. globalfunc::mandatoryKey($parent,$REQUEST_KEYS);
  1683. $schedule_id = $parent->_request['schedule_id'];
  1684. $userid = $parent->_request['userid'];
  1685. $otp = $parent->_request['otp'];
  1686. $query_str = " SELECT participant_id FROM ".TABLE_TRAINING_PARTICIPANT." WHERE schedule_id='".$schedule_id."' AND userid='".$userid."' AND present_otp='".$otp."' LIMIT 1";
  1687. $query_arr = $parent->getQueryValue($query_str);
  1688. if (count($query_arr) > 0) {
  1689. $parent->response(array('response'=>'success', 'message'=>$this->page_data['success1']),200);
  1690. }
  1691. else {
  1692. $parent->response(array('response'=>'failed', 'message'=>$this->page_data['error11']), 406);
  1693. }
  1694. }
  1695. // QR Code Generation
  1696. private function trainingqrcodegeneration ($parent) {
  1697. require "qrcode/qrlib.php";
  1698. header('Content-type: image/png');
  1699. $qr_data = "testdata";
  1700. chmod($foldername, 0777);
  1701. $errorCorrectionLevel = 'L';
  1702. $matrixPointSize = 4;
  1703. print $filename = $foldername . $qr_data . '.png';
  1704. try {
  1705. // QRcode::png('barrda554');
  1706. // //echo 'You can provide data in GET parameter: <a href="?data=' . $qr_data . '">like that</a><hr/>';
  1707. //QRcode::png('PHP QR Code :)', $filename, $errorCorrectionLevel, $matrixPointSize, 2);
  1708. QRcode::png($qr_data, $filename, $errorCorrectionLevel, $matrixPointSize, 2);
  1709. //QRcode::png($qr_data, $filename, QR_ECLEVEL_L, 4);
  1710. }
  1711. catch(PDOException $e) {
  1712. echo $e->getMessage();
  1713. }
  1714. }
  1715. // QR Code Generation
  1716. private function trainingdseqrcode ($parent) {
  1717. globalfunc::checkMethodType($parent,array('GET' ));
  1718. globalfunc::checkAuthrozation($parent,array('type'=>'user'));
  1719. globalfunc::checkParamCount($parent,2);
  1720. //print_r($parent);
  1721. //$schedule_id = escape_str($parent->params[1]);
  1722. $dse = escape_str($parent->params[1]);
  1723. $todaydate_time = date('Y-m-d');
  1724. $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."' ";
  1725. $training_check_ques_arr = $parent->getQueryValue($training_check_ques_str);
  1726. if(count($training_check_ques_arr) > 0) {
  1727. //$link = $SITE_URL . "hypermupload/training/crtraining.png";
  1728. $todaydate = date('Y-m-d');
  1729. $datediff = strtotime($todaydate) - strtotime($training_check_ques_arr[0]->start_date);
  1730. $currentday = round($datediff / (60 * 60 * 24));
  1731. $starttime_array = json_decode(stripslashes($training_check_ques_arr[0]->starttime), true);
  1732. $endtime_array = json_decode(stripslashes($training_check_ques_arr[0]->endtime), true);
  1733. $current_starttime = $starttime_array[$currentday];
  1734. $current_endtime = $endtime_array[$currentday];
  1735. $time1 = strtotime($current_starttime);
  1736. $time2 = strtotime($current_endtime);
  1737. $training_check_ques_arr[0]->duration = round(abs($time2 - $time1) / 3600,2);
  1738. $s3 = awsfileserver::connectS3();
  1739. $training_check_ques_arr[0]->link = awsfileserver::getS3FileUrl($s3,S3_BUCKET,S3_TRAINING_URL.'crtraining.png');
  1740. $training_check_ques_arr[0]->training_date = date('d/m/Y');
  1741. //$parent->response(array('response'=>'success', 'data'=> $link, 'message'=>$this->page_data['success1']),200);
  1742. $parent->response(array('response'=>'success', 'data'=> $training_check_ques_arr[0], 'message'=>$this->page_data['success1']),200);
  1743. }
  1744. else {
  1745. $parent->response(array('response'=>'success', 'message'=>$this->page_data['success1']),200);
  1746. }
  1747. }
  1748. // DSE Score and Result
  1749. private function dsescoreresultlist ($parent) {
  1750. globalfunc::checkMethodType($parent,array('GET'));
  1751. globalfunc::checkParamCount($parent,1);
  1752. globalfunc::checkAuthrozation($parent,array('type'=>'user'));
  1753. $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."' ";
  1754. $schedule_arr = $parent->getQueryValue($schedule_str);
  1755. foreach ($schedule_arr as $key => $schedules) {
  1756. $score_percentage_str = "SELECT id, name, percentage FROM ".TABLE_TRAINING_LEVEL_SCORE." WHERE level = '" . $schedules->lvl_id. "'";
  1757. $score_percentage_arr = $parent->getQueryValue($score_percentage_str);
  1758. foreach ($score_percentage_arr as $percentage_key => $percentages) {
  1759. if (strtolower($percentages->name) == '2') {
  1760. $pre_test_percentage = $percentages->percentage;
  1761. }
  1762. elseif (strtolower($percentages->name) == '3') {
  1763. $post_test_percentage = $percentages->percentage;
  1764. }
  1765. }
  1766. // Getting Pre and Post Assessment Scores
  1767. $schedule_arr[$key]->pre_test = $schedule_arr[$key]->post_test = $schedule_arr[$key]->pre_test_percentage = $schedule_arr[$key]->post_test_percentage = 0;
  1768. $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 ";
  1769. $assessment_arr = $parent->getQueryValue($assessment_str);
  1770. if(count($assessment_arr) > 0) {
  1771. foreach ($assessment_arr as $assessment_key => $assessments) {
  1772. if ($assessments->assessmenttype == 1) {
  1773. $schedule_arr[$key]->pre_test = $assessments->highscore;
  1774. $schedule_arr[$key]->pre_test_percentage = ($schedule_arr[$key]->pre_test * $pre_test_percentage) / 100;
  1775. }
  1776. elseif ($assessments->assessmenttype == 2) {
  1777. $schedule_arr[$key]->post_test = $assessments->highscore;
  1778. $schedule_arr[$key]->post_test_percentage = ($schedule_arr[$key]->post_test * $post_test_percentage) / 100;
  1779. }
  1780. }
  1781. }
  1782. }
  1783. $parent->response(array('response'=>'success', 'data'=>$schedule_arr,'message'=>$this->page_data['success1']),200);
  1784. }
  1785. // DSE FeedBack List
  1786. private function dsefeedbacklist ($parent) {
  1787. globalfunc::checkMethodType($parent,array('GET'));
  1788. globalfunc::checkParamCount($parent,1);
  1789. globalfunc::checkAuthrozation($parent,array('type'=>'user'));
  1790. //USER COND
  1791. // $user_cond_arr=projectfunc::getUserAssessmentCond($parent);
  1792. // $user_cond=" AND ".@implode(' AND ',$user_cond_arr);
  1793. // $status_arr=array();
  1794. // //NEW ROLE CONDITION
  1795. // $user_cond.=($parent->current_user_role>7 && $parent->current_user_role<14)?" AND a.user_type=0 ":" AND a.user_type=1 ";
  1796. // if($parent->current_user_role>7 && $parent->current_user_role<14) {
  1797. // $user_cond.=" AND (a.segment='0' OR a.segment='".$parent->current_user_data->segment."')";
  1798. // }
  1799. //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;
  1800. $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 !='' ";
  1801. //$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;
  1802. $assessment_arr=$parent->getQueryValue($assessment_str);
  1803. if(count($assessment_arr)>0) {
  1804. /* //GET ALL STATUS
  1805. $status_str = "SELECT `statusid`, `status` FROM ".TABLE_STATUS;
  1806. $status_res_arr=$parent->getQueryValue($status_str);
  1807. if(count($status_res_arr)>0) {
  1808. foreach($status_res_arr as $res) {
  1809. $obj_key=$res->statusid;
  1810. $status_arr[$obj_key]=$res->status;
  1811. }
  1812. }
  1813. //S3 OBJECT
  1814. $s3=awsfileserver::connectS3();*/
  1815. //ADD EXTRA FIELDS
  1816. foreach($assessment_arr as $key=>$res_assessment) {
  1817. // Business Segment Name
  1818. if ($res_assessment->business_segment == 2) {
  1819. $res_assessment->segment_name = 'Parents/Guardian';
  1820. }
  1821. else if ($res_assessment->business_segment == 1) {
  1822. $res_assessment->segment_name = 'Instructor';
  1823. }
  1824. else if ($res_assessment->business_segment == 3) {
  1825. $res_assessment->segment_name = 'Student Learner';
  1826. }
  1827. if($res_assessment->training_group_image != '') {
  1828. //CONNECT S3
  1829. $s3 = awsfileserver::connectS3();
  1830. $res_assessment->training_group_image = awsfileserver::getS3FileUrl($s3,S3_BUCKET,S3_TRAINING_URL.$res_assessment->training_group_image);
  1831. }else {
  1832. $res_assessment->training_group_image = USER_NOIMAGE_URL;
  1833. }
  1834. $datediff = strtotime($res_assessment->enddate) - strtotime($res_assessment->startdate);
  1835. $assessment_arr[$key]->training_days = round($datediff / (60 * 60 * 24)) + 1;
  1836. // Participants count
  1837. $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) ";
  1838. $participant_arr = $parent->getQueryValue($participant_str);
  1839. $assessment_arr[$key]->total_participants = $participant_arr[0]->total_participants;
  1840. //SURVEY IMAGE
  1841. /* $assessment_arr[$key]->assessmentimage_url=SURVEYIMAGE_URL;
  1842. if($res_assessment->assessmentimage!='') {
  1843. $assessment_arr[$key]->assessmentimage_url=awsfileserver::getS3FileUrl($s3,S3_BUCKET,S3_ASSESSMENT_URL.$res_assessment->assessmentimage);
  1844. }*/
  1845. $assessment_arr[$key]->is_expired ='0';
  1846. $assessment_arr[$key]->is_completed ='0';
  1847. //CHECK ALREADY ATTENDTED
  1848. $assessment_result_str = "SELECT remarks FROM ".TABLE_ASSESSMENTRESULT." WHERE assessmentid='".$res_assessment->assessmentid."' AND userid='".$parent->current_user_id."' ORDER BY arid DESC";
  1849. $assessment_result_arr=$parent->getQueryValue($assessment_result_str);
  1850. if(count($assessment_result_arr)>0) {
  1851. $assessment_arr[$key]->is_completed ='1';
  1852. // 3-Completed , 4 - In Progress
  1853. // $assessment_arr[$key]->status =($assessment_result_arr[0]->status=='1')?'3':'1';
  1854. // $res_assessment->status = $assessment_arr[$key]->status;
  1855. } else {
  1856. // $assessment_arr[$key]->status ='7';
  1857. // $res_assessment->status = $assessment_arr[$key]->status;
  1858. }
  1859. $res_assessment->remarks = $assessment_result_arr[0]->remarks;
  1860. //EXPIRED
  1861. if(strtotime($res_assessment->enddate)<strtotime(NOW)) {
  1862. $assessment_arr[$key]->is_expired='1';
  1863. $assessment_arr[$key]->status = '8';
  1864. $res_assessment->status = '8';
  1865. }
  1866. //STATUS STRING
  1867. // $assessment_arr[$key]->statusname=(isset($status_arr[$res_assessment->status]))?$status_arr[$res_assessment->status]:"";
  1868. // //ATTEMPT TIME
  1869. // $attempt_time_str = "SELECT * FROM ".TABLE_ASSESSMENTRESULT." WHERE assessmentid='".$res_assessment->assessmentid."' AND userid='".$parent->current_user_id."' ORDER by attempt_time DESC";
  1870. // $attempt_time_arr=$parent->getQueryValue($attempt_time_str);
  1871. // $assessment_arr[$key]->attempt_time=(count($attempt_time_arr)>0)?$attempt_time_arr[0]->attempt_time:0;
  1872. // //IS ATTENDED
  1873. // $assessment_arr[$key]->is_attended='0';
  1874. // $assessment_arr[$key]->result_id='';
  1875. //HIGHSCORE
  1876. // $assessment_arr[$key]->highscore='0';
  1877. // if(count($attempt_time_arr)>0) {
  1878. // $user_assessment_score_arr=array_column($attempt_time_arr,'percentage_score');
  1879. // rsort( $user_assessment_score_arr);
  1880. // $assessment_arr[$key]->highscore=(string)$user_assessment_score_arr[0];
  1881. // $assessment_arr[$key]->is_attended='1';
  1882. // //FOR SURVEY RESULT VIEW
  1883. // $assessment_arr[$key]->result_id=$attempt_time_arr[0]->arid;
  1884. // }
  1885. $assessment_arr[$key]->training_feedback = $assessment_arr[$key]->trainer_feedback = $assessment_arr[$key]->overall_feedback = 0;
  1886. // Survey Training feedback
  1887. $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."' ";
  1888. $survey_feedback_arr=$parent->getQueryValue($survey_feedback_str);
  1889. if (count($survey_feedback_arr) > 0 AND $survey_feedback_arr[0]->question_count > 0) {
  1890. $training_feedback = round($survey_feedback_arr[0]->question_sum / $survey_feedback_arr[0]->question_count, 1);
  1891. $assessment_arr[$key]->training_feedback = $training_feedback . '/' . '5';
  1892. }
  1893. // Survey Trainer feedback
  1894. $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."' ";
  1895. $survey_feedback_arr=$parent->getQueryValue($survey_feedback_str);
  1896. if (count($survey_feedback_arr) > 0 AND $survey_feedback_arr[0]->question_count > 0) {
  1897. $trainer_feedback = round($survey_feedback_arr[0]->question_sum / $survey_feedback_arr[0]->question_count, 1);
  1898. $assessment_arr[$key]->trainer_feedback = $trainer_feedback . '/' . '5';
  1899. }
  1900. // Overrall Feedback
  1901. if (!empty($training_feedback) and !empty($trainer_feedback)) {
  1902. $overall_feedback = round( ($training_feedback + $trainer_feedback) / 2);
  1903. $assessment_arr[$key]->overall_feedback = $overall_feedback . '/' . '5';
  1904. }
  1905. }
  1906. }
  1907. //LOG
  1908. $logstr='SURVEY LIST';
  1909. globalfunc::insertUserLog($parent,$logstr);
  1910. $parent->response(array('response'=>'success', 'data'=>$assessment_arr,'message'=>$this->page_data['success1']),200);
  1911. }
  1912. // Feedback Question
  1913. private function trainingfeedbackquestion ($parent) {
  1914. globalfunc::checkMethodType($parent,array('GET'));
  1915. globalfunc::checkParamCount($parent,2);
  1916. globalfunc::checkAuthrozation($parent,array('type'=>'user'));
  1917. $assessmentid = escape_str($parent->params['1']);
  1918. //VALIDATE ASSESSMENT
  1919. projectfunc::userSurveyValid($parent,$parent->current_user_id,$assessmentid);
  1920. //ASSESSMENT VALIDATION
  1921. /*$assessment_str = "SELECT * FROM ".TABLE_ASSESSMENT." WHERE assessmentid='".$assessmentid."' AND status='1' AND assettypeid='2' LIMIT 1";
  1922. $assessment_arr=$parent->getQueryValue($assessment_str);
  1923. if(count($assessment_arr)!=1) $parent->response(array('response'=>'failed','message'=>$this->page_data["error2"]),406);
  1924. //S3 OBJECT
  1925. $s3=awsfileserver::connectS3();
  1926. if($assessment_arr[0]->randomcond=='1' )
  1927. {
  1928. $econd=" ORDER BY RAND() ";
  1929. }else
  1930. {
  1931. $econd=" ORDER BY aq.aqid ASC";
  1932. }*/
  1933. //GET RATINGS IS COMMON
  1934. $survey_str = "SELECT id, score options FROM ".TABLE_SURVEY_RATING." ORDER BY id ASC";
  1935. $survey_arr=$parent->getQueryValue($survey_str);
  1936. // Training feedback question type ids array
  1937. //$limit_str=" LIMIT 0,".$assessment_arr[0]->total_question." ";
  1938. $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 ";
  1939. $ques_arr=$parent->getQueryValue($ques_str);
  1940. if(count($ques_arr)>0) {
  1941. //CONNECT S3
  1942. $s3=awsfileserver::connectS3();
  1943. $this->rating_rid=1;
  1944. $data->training_feedback_score = $data->trainer_feedback_score = 0;
  1945. $training_question_count = $trainer_question_count = 0;
  1946. foreach($ques_arr as $key=>$res_ques) {
  1947. $res_ques->rating_options=array();
  1948. // Question Answer Result
  1949. $feedback_question_str =" SELECT choiseid FROM ".TABLE_ASSESSMENT_USERRESULT." WHERE assessmentid='".$assessmentid."' AND userid='".$parent->current_user_id."' AND qid = ".$res_ques->qid." ";
  1950. $feedback_question_arr=$parent->getQueryValue($feedback_question_str);
  1951. if (count($feedback_question_arr) > 0 AND $feedback_question_arr[0]->choiseid > 0 ) {
  1952. $res_ques->question_ans = $feedback_question_arr[0]->choiseid;
  1953. if ($res_ques->questiontype == 1) {
  1954. $training_question_count++;
  1955. $data->training_feedback_score += $feedback_question_arr[0]->choiseid;
  1956. }
  1957. else if ($res_ques->questiontype == 2) {
  1958. $trainer_question_count++;
  1959. $data->trainer_feedback_score += $feedback_question_arr[0]->choiseid;
  1960. }
  1961. }
  1962. else {
  1963. $res_ques->rating_options=$survey_arr;
  1964. }
  1965. $question_arr[]=$res_ques;
  1966. }
  1967. //print $data->training_feedback_score .' --' . $training_question_count;
  1968. if($data->training_feedback_score > 0 and $training_question_count > 0) {
  1969. $data->training_feedback_score_avg = round( ($data->training_feedback_score / $training_question_count ), 1);
  1970. }
  1971. if($data->trainer_feedback_score > 0 and $trainer_question_count > 0) {
  1972. $data->trainer_feedback_score_avg = round( ($data->trainer_feedback_score / $trainer_question_count ), 1);
  1973. }
  1974. // Getting Remarks
  1975. $data->remarks = '';
  1976. $get_userresult_str="SELECT remarks FROM ".TABLE_ASSESSMENTRESULT." WHERE assessmentid='".$assessmentid."' AND userid='".$parent->current_user_id."' ORDER BY arid DESC";
  1977. $userresult_arr=$parent->getQueryValue($get_userresult_str);
  1978. if ( count($userresult_arr) > 0) {
  1979. $data->remarks = $userresult_arr[0]->remarks;
  1980. }
  1981. $data->questions = $question_arr;
  1982. }
  1983. //LOG
  1984. $logstr='TRAINING FEEDBACK QUESTION';
  1985. globalfunc::insertUserLog($parent,$logstr,$assessmentid);
  1986. $parent->response(array('response'=>'success', 'data'=>$data,'message'=>$this->page_data['success1']),200);
  1987. }
  1988. // Trainer Feedback List
  1989. private function trainingsfeedbacklist ($parent) {
  1990. globalfunc::checkMethodType($parent,array('GET'));
  1991. globalfunc::checkParamCount($parent,1);
  1992. globalfunc::checkAuthrozation($parent,array('type'=>'user'));
  1993. $current_role = $parent->current_user_data->role;
  1994. switch ($current_role) {
  1995. case "3":
  1996. $filter_cond = "";
  1997. break;
  1998. case "4":
  1999. // Zone Manager
  2000. $dealer_cond = " JOIN " . DMS_DEALER . " d ON u.dealer_code = d.dealer_code ";
  2001. $filter_cond = " AND d.zm_email = '".$parent->current_user_data->emailid."'";
  2002. break;
  2003. case "5":
  2004. $filter_cond = " AND s.trainer_id='".$parent->current_user_id."'";
  2005. break;
  2006. case "6":
  2007. // Reginal Manager
  2008. $dealer_cond = " JOIN " . DMS_DEALER . " d ON u.dealer_code = d.dealer_code ";
  2009. $filter_cond = " AND d.rm_email = '".$parent->current_user_data->emailid."'";
  2010. break;
  2011. case "7":
  2012. // Area Manager
  2013. $dealer_cond = " JOIN " . DMS_DEALER . " d ON u.dealer_code = d.dealer_code ";
  2014. $filter_cond = " AND d.am_email = '".$parent->current_user_data->emailid."'";
  2015. break;
  2016. case "14":
  2017. // Dealer
  2018. $filter_cond = " AND u.dealer_code='".$parent->current_user_data->dealer_code."'";
  2019. break;
  2020. default :
  2021. $filter_cond = " ";
  2022. break;
  2023. }
  2024. //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;
  2025. $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 . " ";
  2026. $assessment_arr=$parent->getQueryValue($assessment_str);
  2027. if(count($assessment_arr)>0) {
  2028. //GET ALL STATUS
  2029. $status_str = "SELECT `statusid`, `status` FROM ".TABLE_STATUS;
  2030. $status_res_arr=$parent->getQueryValue($status_str);
  2031. // ADD EXTRA FIELDS
  2032. foreach($assessment_arr as $key=>$res_assessment) {
  2033. // Business Segment Name
  2034. if ($res_assessment->business_segment == 2) {
  2035. $res_assessment->segment_name = 'Parents/Guardian';
  2036. }
  2037. else if ($res_assessment->business_segment == 1) {
  2038. $res_assessment->segment_name = 'Instructor';
  2039. }
  2040. else if ($res_assessment->business_segment == 3) {
  2041. $res_assessment->segment_name = 'Student Learner';
  2042. }
  2043. if($res_assessment->training_group_image != '') {
  2044. //CONNECT S3
  2045. $s3 = awsfileserver::connectS3();
  2046. $res_assessment->training_group_image = awsfileserver::getS3FileUrl($s3,S3_BUCKET,S3_TRAINING_URL.$res_assessment->training_group_image);
  2047. }else {
  2048. $res_assessment->training_group_image = USER_NOIMAGE_URL;
  2049. }
  2050. $datediff = strtotime($res_assessment->enddate) - strtotime($res_assessment->startdate);
  2051. $assessment_arr[$key]->training_days = round($datediff / (60 * 60 * 24)) + 1;
  2052. // Participants count
  2053. $participant_str = "SELECT count(id) as total_participants FROM ".TABLE_TRAINING_SURVEY." WHERE schedule_id='".$res_assessment->schedule_id."' AND assessmentid ='".$res_assessment->assessmentid."' ";
  2054. $participant_arr = $parent->getQueryValue($participant_str);
  2055. $assessment_arr[$key]->total_participants = $participant_arr[0]->total_participants;
  2056. $assessment_arr[$key]->training_feedback = $assessment_arr[$key]->trainer_feedback = $assessment_arr[$key]->overall_feedback = 0;
  2057. // Survey Training feedback
  2058. $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 ";
  2059. $survey_feedback_arr=$parent->getQueryValue($survey_feedback_str);
  2060. if (count($survey_feedback_arr) > 0 AND $survey_feedback_arr[0]->choiseid > 0) {
  2061. $training_feedback = round($survey_feedback_arr[0]->choiseid, 1);
  2062. $assessment_arr[$key]->training_feedback = $training_feedback . '/' . '5';
  2063. }
  2064. // Survey Trainer feedback
  2065. $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 ";
  2066. $survey_trainer_arr=$parent->getQueryValue($survey_trainer_str);
  2067. if (count($survey_trainer_arr) > 0 AND $survey_trainer_arr[0]->choiseid > 0) {
  2068. $trainer_feedback = round($survey_trainer_arr[0]->choiseid, 1);
  2069. $assessment_arr[$key]->trainer_feedback = $trainer_feedback . '/' . '5';
  2070. }
  2071. /*$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."') ";
  2072. $survey_feedback_arr=$parent->getQueryValue($survey_feedback_str);
  2073. if (count($survey_feedback_arr) > 0 AND $survey_feedback_arr[0]->question_count > 0) {
  2074. $training_feedback = round( ($survey_feedback_arr[0]->question_sum / $survey_feedback_arr[0]->question_count) / $assessment_arr[$key]->total_participants , 1);
  2075. $assessment_arr[$key]->training_feedback = $training_feedback . '/' . '5';
  2076. }
  2077. //Survey Trainer feedback
  2078. $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."') ";
  2079. $survey_feedback_arr=$parent->getQueryValue($survey_feedback_str);
  2080. if (count($survey_feedback_arr) > 0 AND $survey_feedback_arr[0]->question_count > 0) {
  2081. $trainer_feedback = round( ($survey_feedback_arr[0]->question_sum / $survey_feedback_arr[0]->question_count) / $assessment_arr[$key]->total_participants, 1);
  2082. $assessment_arr[$key]->trainer_feedback = $trainer_feedback . '/' . '5';
  2083. }*/
  2084. // Overrall Feedback
  2085. if (!empty($training_feedback) and !empty($trainer_feedback)) {
  2086. $overall_feedback = round( ($training_feedback + $trainer_feedback) / 2);
  2087. $assessment_arr[$key]->overall_feedback = $overall_feedback . '/' . '5';
  2088. }
  2089. }
  2090. }
  2091. //LOG
  2092. $logstr='TRAINER FEEDBACK LIST';
  2093. globalfunc::insertUserLog($parent,$logstr);
  2094. $parent->response(array('response'=>'success', 'data'=>$assessment_arr,'message'=>$this->page_data['success1']),200);
  2095. }
  2096. // Feedback Question
  2097. private function trainingalluserfeedbackquestion ($parent) {
  2098. globalfunc::checkMethodType($parent,array('GET'));
  2099. globalfunc::checkParamCount($parent,2);
  2100. globalfunc::checkAuthrozation($parent,array('type'=>'user'));
  2101. $assessmentid = escape_str($parent->params['1']);
  2102. //GET RATINGS IS COMMON
  2103. $survey_str = "SELECT id, score options FROM ".TABLE_SURVEY_RATING." ORDER BY id ASC";
  2104. $survey_arr=$parent->getQueryValue($survey_str);
  2105. // Training feedback users
  2106. // $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."' ";
  2107. // $userresult_arr=$parent->getQueryValue($get_userresult_str);
  2108. // if ( count($userresult_arr) > 0) {
  2109. $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 ";
  2110. $ques_arr=$parent->getQueryValue($ques_str);
  2111. // foreach ($userresult_arr as $user_assess_key => $userresult) {
  2112. $question_arr = '';
  2113. if(count($ques_arr)>0) {
  2114. $userresult_arr->training_feedback_score = $userresult_arr->trainer_feedback_score = 0;
  2115. $training_question_count = $trainer_question_count = 0;
  2116. foreach($ques_arr as $key=>$res_ques) {
  2117. // Question Answer Result
  2118. //$feedback_question_str =" SELECT choiseid FROM ".TABLE_ASSESSMENT_USERRESULT." WHERE assessmentid='".$assessmentid."' AND userid='".$userresult->userid."' ";
  2119. $feedback_question_str =" SELECT avg(choiseid) as choiseid FROM ".TABLE_ASSESSMENT_USERRESULT." WHERE assessmentid='".$assessmentid."' AND qid = '".$res_ques->qid."' ";
  2120. $feedback_question_arr=$parent->getQueryValue($feedback_question_str);
  2121. if (count($feedback_question_arr) > 0 AND $feedback_question_arr[0]->choiseid > 0 ) {
  2122. $res_ques->question_ans = round($feedback_question_arr[0]->choiseid, 1);
  2123. if ($res_ques->questiontype == 1) {
  2124. $training_question_count++;
  2125. $userresult_arr->training_feedback_score += $feedback_question_arr[0]->choiseid;
  2126. }
  2127. else if ($res_ques->questiontype == 2) {
  2128. $trainer_question_count++;
  2129. $userresult_arr->trainer_feedback_score += $feedback_question_arr[0]->choiseid;
  2130. }
  2131. }
  2132. $question_arr[]=$res_ques;
  2133. }
  2134. $userresult_arr->training_feedback_score_avg = round( ($userresult_arr->training_feedback_score / $training_question_count ), 1);
  2135. $userresult_arr->trainer_feedback_score_avg = round( ($userresult_arr->trainer_feedback_score / $trainer_question_count ), 1);
  2136. $userresult_arr->questions = $question_arr;
  2137. // Getting Remarks
  2138. // $data->remarks = '';
  2139. // $get_userresult_str="SELECT remarks FROM ".TABLE_ASSESSMENTRESULT." WHERE assessmentid='".$assessmentid."' AND userid='".$parent->current_user_id."' ORDER BY arid DESC";
  2140. // $userresult_arr=$parent->getQueryValue($get_userresult_str);
  2141. // if ( count($userresult_arr) > 0) {
  2142. // $data->remarks = $userresult_arr[0]->remarks;
  2143. // }
  2144. }
  2145. // }
  2146. // }
  2147. //LOG
  2148. $logstr='TRAINING FEEDBACK QUESTION';
  2149. globalfunc::insertUserLog($parent,$logstr,$assessmentid);
  2150. $parent->response(array('response'=>'success', 'data'=>$userresult_arr,'message'=>$this->page_data['success1']),200);
  2151. }
  2152. }