فهرست منبع

Calendar v2 [wip - 3]

Vijayakrishnan 4 سال پیش
والد
کامیت
0c249e8889
3فایلهای تغییر یافته به همراه90 افزوده شده و 10 حذف شده
  1. 77 0
      app/Http/Controllers/AppointmentController.php
  2. 10 10
      resources/views/app/patient/appointment-calendar.blade.php
  3. 3 0
      routes/web.php

+ 77 - 0
app/Http/Controllers/AppointmentController.php

@@ -0,0 +1,77 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Models\Appointment;
+use App\Models\BDTDevice;
+use App\Models\CareMonth;
+use App\Models\Client;
+use App\Models\ClientInfoLine;
+use App\Models\Facility;
+use App\Models\NoteTemplate;
+use App\Models\Pro;
+use App\Models\SectionTemplate;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\File;
+
+class AppointmentController extends Controller
+{
+    public function events(Request $request)
+    {
+        $proIds = $request->get('proIds');
+        $start = $request->get('start');
+        $end = $request->get('end');
+        $timeZone = $request->get('timeZone');
+        $appointments = Appointment
+            ::whereIn('pro_id', explode(',', $proIds))
+            ->where('status', '!=', 'COMPLETED')
+            ->where('status', '!=', 'CANCELLED')
+            ->where('start_time', '>=', $start)
+            ->where('start_time', '<=', $end)
+            ->get();
+        $events = [];
+        foreach ($appointments as $appointment) {
+            $events[] = [
+                "title" => '[' . $appointment->pro->initials() . '] ' . $appointment->client->displayName(),
+                "appointmentUid" => $appointment->uid,
+                "clientUid" => $appointment->client->uid,
+                "proUid" => $appointment->pro->uid,
+                "start" => $this->convertToTimezone($appointment->start_time, $timeZone), // TODO: convert to $timeZone
+                "end" => $this->convertToTimezone($appointment->end_time, $timeZone), // TODO: convert to $timeZone
+            ];
+        }
+        return json_encode($events);
+    }
+
+    private function convertToTimezone($_dateTime, $_targetTimezone) {
+        if(!$_dateTime) return $_dateTime;
+        $timezone = 'US/Eastern';
+        switch($_targetTimezone) {
+            case 'ALASKA':
+                $timezone = "US/Alaska";
+                break;
+            case 'CENTRAL':
+                $timezone = "US/Central";
+                break;
+            case 'HAWAII':
+                $timezone = "US/Hawaii";
+                break;
+            case 'MOUNTAIN':
+                $timezone = "US/Mountain";
+                break;
+            case 'PACIFIC':
+                $timezone = "US/Pacific";
+                break;
+            case 'PUERTO_RICO':
+                $timezone = "America/Puerto_Rico";
+                break;
+            default:
+                $timezone = "US/Eastern";
+                break;
+        }
+
+        $date = new \DateTime($_dateTime, new \DateTimeZone("UTC"));
+        $date->setTimezone(new \DateTimeZone($timezone));
+        return $date->format('Y-m-d H:i:s');
+    }
+}

+ 10 - 10
resources/views/app/patient/appointment-calendar.blade.php

@@ -5,8 +5,8 @@
     <?php
     $palette = [
         ["bc" => '#522e92', "fc" => "#fff"],
-        ["bc" => '#111e6c', "fc" => "#fff"],
         ["bc" => '#003152', "fc" => "#fff"],
+        ["bc" => '#111e6c', "fc" => "#fff"],
         ["bc" => '#1034a6', "fc" => "#fff"],
         ["bc" => '#0f52ba', "fc" => "#fff"],
         ["bc" => '#447684', "fc" => "#fff"],
@@ -140,7 +140,7 @@
                 $proMeta = [];
                 ?>
                 @foreach($pros as $iPro)
-                    <option value="{{$iPro->uid}}" {{ $iPro->uid === $pro->uid ? 'selected' : '' }}
+                    <option value="{{$iPro->id}}" {{ $iPro->uid === $pro->uid ? 'selected' : '' }}
                             data-bc="{{$palette[$proIndex]["bc"]}}"
                             data-fc="{{$palette[$proIndex]["fc"]}}"
                             data-initials="{{$iPro->initials()}}">
@@ -221,8 +221,8 @@
                     navLinks: true,
                     dayMaxEvents: false,
                     events: function(info, successCallback, failureCallback) {
-                        let proUid = $('#eventPros').val();
-                        if(!proUid || !proUid.length) {
+                        let proIds = $('#eventPros').val();
+                        if(!proIds || !proIds.length) {
                             successCallback([]); // no events if no pro selected
                             return;
                         }
@@ -231,15 +231,15 @@
                             successCallback([]); // no events if no tz selected
                             return;
                         }
-                        console.log(proUid)
-                        $.get('/api/appointment/getAllAppointmentsForPro' +
-                            '?proUid=' + proUid +
+                        console.log(proIds)
+                        $.get('/appointment/getAllAppointmentsForPros' +
+                            '?proIds=' + proIds +
                             '&start=' + info.startStr.substr(0, 10) +
                             '&end=' + info.endStr.substr(0, 10) +
                             '&timeZone=' + timeZone, function(_data) {
                             // $.get('/api/appointment/getAllAppointmentsForPro?start=1990-01-01&end=2025-01-01&timeZone=CENTRAL', function(_data) {
-                            if(_data && _data.success) {
-                                let events = _data.data;
+                            if(_data && Array.isArray(_data)) {
+                                let events = _data;
                                 for(let e in events) {
                                     if(events.hasOwnProperty(e) && proMeta[events[e].proUid]) {
                                         let ev = events[e], meta = proMeta[ev.proUid];
@@ -253,7 +253,7 @@
                                 successCallback(events);
                             }
                             else {
-                                failureCallback('Unable to fetch appointments!');
+                                failureCallback(_data);
                             }
                         }, 'json');
                     },

+ 3 - 0
routes/web.php

@@ -116,6 +116,9 @@ Route::middleware('pro.auth')->group(function () {
         Route::get('calendar', 'PatientController@calendar')->name('calendar');
     });
 
+    // events for fc
+    Route::get('/appointment/getAllAppointmentsForPros', 'AppointmentController@events')->name('events');
+
     // load template set
     Route::get('/note-template-set/exam/{exam}/{template}', 'HomeController@noteExamTemplateSet');
     Route::get('/note-template-set/{section}/{template}', 'HomeController@noteTemplateSet');