Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public function get_appointment_info_by_day_v2() {
- header('Content-type: application/json');
- //Testing purposes
- // $_POST['doctor_id'] = '16166';
- // $_POST['date'] = '2019-02-25';
- // $_POST['selected_center_id'] = '468';
- // $_POST['selected_center_type'] = '2';
- $date = $_POST['date'];
- $selected_center_id = $_POST['selected_center_id'];
- $selected_center_type = $_POST['selected_center_type'];
- // $date = '2018-06-12';
- $day = date('w', strtotime($date));
- $doc_appointments = $this->webservice_model->get_all_appointments_by_doc_for_time_v2(
- $_POST['doctor_id'], $date, false, $selected_center_id, $selected_center_type);
- // $doc_appointments = $this->webservice_model->get_all_appointments_by_doc_for_time($_POST['doctor_id'], $date);
- ;
- $dc = $this->Doctor_Model->get_singledoctor_center($_POST['doctor_id'], $selected_center_id, $selected_center_type);
- $doc_working_time = json_decode($dc->working_hours);
- $doc_break_time = json_decode($dc->break_hours);
- $doc_vacation_time = json_decode($dc->vacation_days);
- $doc_paused_time = json_decode($dc->paused_time);
- // $doc_working_time = json_decode($this->webservice_model->get_singledoctor($_POST['doctor_id'])->working_time);
- $min_app_hours = !!$dc->min_app_hours ? $dc->min_app_hours: 0;
- $start_min_date = date("Y-m-d h:i A");
- $datek = strtotime($start_min_date ) + ($min_app_hours * 60 * 60) ;
- $end_min_date = date('Y-m-d h:i A', $datek);
- // print_r($doc_appointments);die();
- // print_r([$start_min_date ,$end_min_date]);die();
- $avgTime = $dc->appointment_avg_time*60;
- $getDay = function ($num) {
- return $num == 0 ? "sun" :($num == 1 ? "mon" :( $num == 2 ? "tue" :( $num == 3 ? "wed" :( $num == 4 ? "thu" :( $num == 5 ? "fri" :( $num == 6 ? "sat" :( $num ))))))) ;
- };
- $range = $doc_working_time->{$getDay($day)};
- $range_break = $doc_break_time->{$getDay($day)};
- $unavaliable_hours = [];
- // print_r($range_break);die();
- foreach( $doc_appointments as $key => $value ) {
- $unavaliable_hours[$day][] = [
- 'start'=> date("h:i A", strtotime($value->appointment_time )),
- // 'start'=> preg_replace('/\s+/', '', strtolower($value->appointment_time)),
- 'end'=> date("h:i A", strtotime($value->end_time ))
- // 'end'=> preg_replace('/\s+/', '', strtolower($value->end_time))
- ];
- }
- // print_r($unavaliable_hours);die();
- $st = $date . ' ' . $range->start;
- $en = $date . ' ' . $range->end;
- // print_r($en);die();
- $period = new DatePeriod(
- new DateTime($st),
- new DateInterval('PT'.$avgTime.'S'),
- new DateTime($en)
- );
- $isBetween = function ($a, $b, $date) {
- $date = new DateTime($date);
- // $begin_date = explode(" ", $a);
- // $end_date = explode(" ", $b);
- $t11 = strtotime($begin_date[1]);
- $begin_date[1] = date("h:i A", $t11);
- $t12 = strtotime($end_date[1]);
- $end_date[1] = date("h:i A", $t12);
- try {
- $begin = new DateTime($a);
- // $begin = new DateTime(trim($begin_date[0]) . " " . preg_replace('/[^A-Za-z0-9\:\s]/', '', trim($begin_date[1])));
- $end = new DateTime($b);
- // $end = new DateTime(trim($end_date[0]) . " " . preg_replace('/[^A-Za-z0-9\:\s]/', '', trim($end_date[1])));
- } catch(\Exception $e) {
- return false;
- // return true;
- }
- return ($date->getTimestamp() >= $begin->getTimestamp() && $date->getTimestamp() <= ($end->getTimestamp() - 1));
- };
- $onVac = false;
- foreach ($doc_vacation_time->startdate as $k => $v ) {
- if ($isBetween($v , $doc_vacation_time->enddate[$k], $date)) {
- $onVac = true;
- break;
- }
- }
- $p = [];
- $p2 = [];
- if (!$onVac) { // if is not in vacation
- $hasUnavaliableHours = array_key_exists($day, $unavaliable_hours);
- foreach ($period as $key1 => $vvv) {
- $actual = $date . ' ' . $vvv->format('h:i A');
- $actual2 = $date . ' ' . $vvv->format('h:i A');
- $isUnavaliable = false;
- if ($hasUnavaliableHours) {
- foreach($unavaliable_hours[$day] as $key => $hours) {
- // print_r([$date . ' ' . $hours['start'], $date . ' ' . $hours['end'], $actual]);
- if ($isBetween($date . ' ' . $hours['start'], $date . ' ' . $hours['end'], $actual) ) {
- $isUnavaliable = true;
- break;
- }
- }
- }
- 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)) {
- $isUnavaliable = true;
- }
- // print_r([$start_min_date, $end_min_date, $vvv->format('Y-m-d h:i A')]);
- // print_r($isBetween($start_min_date, $end_min_date, $vvv->format('Y-m-d h:i A')));
- // SIX HOUR RULE
- if ($isBetween($start_min_date, $end_min_date, $vvv->format('Y-m-d h:i A'))) {
- $isUnavaliable = true;
- }
- // // DONT PERMIT TIME BEFORE NOW
- if (strtotime($start_min_date) > strtotime($vvv->format('Y-m-d h:i A'))) {
- $isUnavaliable = true;
- }
- // PAUSED TIME
- foreach($doc_paused_time->startdate as $key__ => $hours__) {
- if ($isBetween($hours__, $doc_paused_time->enddate[$key__], $actual2) ) {
- $isUnavaliable = true;
- break;
- }
- }
- if (! $isUnavaliable) {
- $p[] = $vvv->format('h:ia');
- $p2[] = $vvv->format('h:i A');
- }
- }
- }
- // die();
- echo json_encode([
- 'avaliable_hours_formathi_a' => $p2,
- 'avaliable_hours' => $p,
- 'onVacation' => $onVac,
- 'avaliable_today' => (empty($p) ? false: true)
- ]);
- exit(0);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement