Advertisement
Guest User

Untitled

a guest
May 20th, 2019
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 6.73 KB | None | 0 0
  1.   public function  get_appointment_info_by_day_v2() {
  2.         header('Content-type: application/json');
  3.        
  4.         //Testing purposes
  5.         // $_POST['doctor_id']  = '16166';
  6.         // $_POST['date']  = '2019-02-25';
  7.         // $_POST['selected_center_id']  = '468';
  8.         // $_POST['selected_center_type']  = '2';
  9.        
  10.         $date = $_POST['date'];
  11.         $selected_center_id = $_POST['selected_center_id'];
  12.         $selected_center_type = $_POST['selected_center_type'];
  13.         // $date = '2018-06-12';
  14.         $day = date('w', strtotime($date));
  15.         $doc_appointments = $this->webservice_model->get_all_appointments_by_doc_for_time_v2(
  16.             $_POST['doctor_id'], $date, false, $selected_center_id, $selected_center_type);
  17.         // $doc_appointments = $this->webservice_model->get_all_appointments_by_doc_for_time($_POST['doctor_id'], $date);
  18.         ;
  19.  
  20.          
  21.        
  22.        
  23.         $dc = $this->Doctor_Model->get_singledoctor_center($_POST['doctor_id'], $selected_center_id, $selected_center_type);
  24.         $doc_working_time = json_decode($dc->working_hours);
  25.         $doc_break_time = json_decode($dc->break_hours);
  26.         $doc_vacation_time = json_decode($dc->vacation_days);
  27.         $doc_paused_time = json_decode($dc->paused_time);
  28.         // $doc_working_time = json_decode($this->webservice_model->get_singledoctor($_POST['doctor_id'])->working_time);
  29.         $min_app_hours = !!$dc->min_app_hours ? $dc->min_app_hours: 0;
  30.         $start_min_date = date("Y-m-d h:i A");
  31.         $datek = strtotime($start_min_date ) + ($min_app_hours * 60 * 60) ;
  32.         $end_min_date = date('Y-m-d h:i A', $datek);
  33.  
  34.        
  35.          
  36.  
  37.      
  38.         // print_r($doc_appointments);die();
  39.         // print_r([$start_min_date ,$end_min_date]);die();
  40.         $avgTime = $dc->appointment_avg_time*60;
  41.         $getDay = function ($num) {
  42.             return $num == 0 ?  "sun" :($num == 1 ?  "mon" :( $num == 2 ?  "tue" :( $num == 3 ?  "wed" :( $num == 4 ?  "thu" :( $num == 5 ?  "fri" :( $num == 6 ?  "sat" :( $num ))))))) ;
  43.         };
  44.  
  45.        
  46.         $range = $doc_working_time->{$getDay($day)};
  47.         $range_break = $doc_break_time->{$getDay($day)};
  48.         $unavaliable_hours = [];
  49.        
  50.         // print_r($range_break);die();
  51.  
  52.         foreach( $doc_appointments as $key => $value ) {
  53.             $unavaliable_hours[$day][] = [
  54.                 'start'=> date("h:i A", strtotime($value->appointment_time )),
  55.                 // 'start'=> preg_replace('/\s+/', '', strtolower($value->appointment_time)),
  56.                 'end'=> date("h:i A", strtotime($value->end_time ))
  57.                 // 'end'=> preg_replace('/\s+/', '', strtolower($value->end_time))
  58.             ];
  59.         }
  60.             //   print_r($unavaliable_hours);die();
  61.         $st = $date . ' ' . $range->start;
  62.         $en = $date . ' ' . $range->end;
  63.        
  64.         // print_r($en);die();
  65.         $period = new DatePeriod(
  66.             new DateTime($st),
  67.             new DateInterval('PT'.$avgTime.'S'),
  68.             new DateTime($en)
  69.         );
  70.        
  71.         $isBetween = function ($a, $b, $date) {
  72.             $date = new DateTime($date);
  73.  
  74.             // $begin_date = explode(" ", $a);
  75.             // $end_date = explode(" ", $b);
  76.  
  77.             $t11 = strtotime($begin_date[1]);
  78.             $begin_date[1] =  date("h:i A", $t11);
  79.             $t12 = strtotime($end_date[1]);
  80.             $end_date[1] =  date("h:i A", $t12);
  81.           try   {
  82.             $begin = new DateTime($a);
  83.             // $begin = new DateTime(trim($begin_date[0]) . " " .  preg_replace('/[^A-Za-z0-9\:\s]/', '', trim($begin_date[1])));
  84.             $end = new DateTime($b);
  85.             // $end = new DateTime(trim($end_date[0]) . " " .  preg_replace('/[^A-Za-z0-9\:\s]/', '', trim($end_date[1])));
  86.           } catch(\Exception $e) {
  87.               return false;
  88.             // return true;
  89.           }
  90.             return ($date->getTimestamp() >= $begin->getTimestamp() && $date->getTimestamp() <= ($end->getTimestamp() - 1));
  91.         };
  92.        
  93.      
  94.         $onVac = false;
  95.        
  96.         foreach ($doc_vacation_time->startdate as $k => $v ) {
  97.             if ($isBetween($v , $doc_vacation_time->enddate[$k], $date)) {
  98.                 $onVac = true;
  99.                 break;
  100.             }
  101.         }
  102.         $p = [];
  103.         $p2 = [];
  104.         if (!$onVac) { // if is not in vacation
  105.             $hasUnavaliableHours = array_key_exists($day, $unavaliable_hours);
  106.             foreach ($period as $key1 => $vvv) {
  107.                 $actual =   $date . ' ' . $vvv->format('h:i A');
  108.                 $actual2 =   $date . ' ' . $vvv->format('h:i A');
  109.                 $isUnavaliable = false;
  110.                 if ($hasUnavaliableHours) {
  111.                     foreach($unavaliable_hours[$day] as $key => $hours) {
  112.                         // print_r([$date . ' ' . $hours['start'], $date . ' ' . $hours['end'], $actual]);
  113.                         if ($isBetween($date . ' ' . $hours['start'], $date . ' ' . $hours['end'], $actual) ) {
  114.                             $isUnavaliable = true;
  115.                             break;
  116.                         }
  117.                     }
  118.                 }
  119.                 if($isBetween(date("Y-m-d h:ia", strtotime($date . ' ' . $range_break->start)), date("Y-m-d h:ia", strtotime($date . ' ' . $range_break->end)), $actual2)) {
  120.                     $isUnavaliable = true;
  121.                 }
  122.  
  123.                 // print_r([$start_min_date, $end_min_date, $vvv->format('Y-m-d h:i A')]);
  124.                 // print_r($isBetween($start_min_date, $end_min_date, $vvv->format('Y-m-d h:i A')));
  125.  
  126.                 // SIX HOUR RULE
  127.                 if ($isBetween($start_min_date, $end_min_date, $vvv->format('Y-m-d h:i A'))) {
  128.                     $isUnavaliable = true;
  129.                 }
  130.                 // // DONT PERMIT TIME BEFORE NOW
  131.                 if (strtotime($start_min_date) > strtotime($vvv->format('Y-m-d h:i A'))) {
  132.                     $isUnavaliable = true;
  133.                 }
  134.  
  135.                 // PAUSED TIME
  136.                 foreach($doc_paused_time->startdate as $key__ => $hours__) {
  137.                     if ($isBetween($hours__, $doc_paused_time->enddate[$key__], $actual2) ) {
  138.                         $isUnavaliable = true;
  139.                         break;
  140.                     }
  141.                 }
  142.  
  143.                 if (! $isUnavaliable) {
  144.                     $p[] = $vvv->format('h:ia');
  145.                     $p2[] = $vvv->format('h:i A');
  146.                 }
  147.             }
  148.  
  149.         }
  150.         // die();
  151.         echo json_encode([  
  152.             'avaliable_hours_formathi_a' => $p2,
  153.             'avaliable_hours' => $p,
  154.             'onVacation' => $onVac,
  155.             'avaliable_today' => (empty($p) ? false: true)
  156.         ]);
  157.  
  158.         exit(0);
  159.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement