Explorar o código

fixed stat tree

= %!s(int64=3) %!d(string=hai) anos
pai
achega
c872cedf4e
Modificáronse 2 ficheiros con 86 adicións e 18 borrados
  1. 18 18
      app/Http/Controllers/StatTreeLineController.php
  2. 68 0
      spec/sample_rm_stat_tree.txt

+ 18 - 18
app/Http/Controllers/StatTreeLineController.php

@@ -8,6 +8,7 @@ use App\Models\StatTree;
 use App\Models\StatTreeLine;
 use App\Models\Client;
 use App\Models\Pro;
+use Illuminate\Support\Facades\DB;
 
 class StatTreeLineController extends Controller
 {
@@ -43,7 +44,7 @@ class StatTreeLineController extends Controller
         foreach ($lines as $line) {
             $query = $this->applyStatTreeLineQueryClauses($line);
             if ($query) {
-                $line->last_refresh_count = $query->count();
+                $line->last_refresh_count = $query[0]->count;
                 $line->save();
             }
         }
@@ -58,10 +59,9 @@ class StatTreeLineController extends Controller
 
         $statTreeLine = StatTreeLine::where('id', $statTreeLineID)->first();
         if (!$statTreeLine) return $this->fail('Invalid stat tree line!');
-
-        $query = $this->applyStatTreeLineQueryClauses($statTreeLine);        
+        $query = $this->applyStatTreeLineQueryClauses($statTreeLine);  
         if ($query) {
-            $statTreeLine->last_refresh_count = $query->count();
+            $statTreeLine->last_refresh_count = $query[0]->count;
             $statTreeLine->save();
             return $this->pass($statTreeLine->last_refresh_count);
         }else{
@@ -73,14 +73,17 @@ class StatTreeLineController extends Controller
     {
 
         $model = $statTreeLine->statTree->model;
-        $query = null;
-        if (strcasecmp($model, 'client') == 0) {
-            $query = Client::query();
-        }
-        if (strcasecmp($model, 'pro') == 0) {
-            $query = Pro::query();
-        }
-        if (!$query) return null;
+        // $query = null;
+        // if (strcasecmp($model, 'client') == 0) {
+        //     $query = Client::query();
+        // }
+        // if (strcasecmp($model, 'pro') == 0) {
+        //     $query = Pro::query();
+        // }
+        // if (!$query) return null;
+
+
+
 
         $clauses = [];
         foreach ($statTreeLine->lineClauses as $lineClause) {
@@ -91,12 +94,9 @@ class StatTreeLineController extends Controller
             }
         }
 
-        foreach ($clauses as $clause) {
-            $clauseQuery = $clause;
-            $query = $query->whereRaw($clauseQuery);
-        }
-
-        return $query;
+        $query = 'SELECT COUNT(*) FROM '.$model.' WHERE '. implode(" AND ", $clauses);
+        
+        return DB::select($query);
     }
 
     protected function cleanupClause($clauseText)

+ 68 - 0
spec/sample_rm_stat_tree.txt

@@ -0,0 +1,68 @@
+care_month join client on care_month.client_id = client.id	Start date? 2021-12-01	(care_month.start_date = '2021-12-01')
+care_month join client on care_month.client_id = client.id	Enrolled in RPM?	YES	(client.is_enrolled_in_rm = 'YES')
+care_month join client on care_month.client_id = client.id	Enrolled in RPM?	NO	(client.is_enrolled_in_rm = 'NO')
+care_month join client on care_month.client_id = client.id	Have cellular device?	YES	(SELECT COUNT(client_bdt_device.id) FROM client_bdt_device JOIN bdt_device bd on client_bdt_device.device_id = bd.id WHERE client_bdt_device.client_id = client.id) > 0		
+care_month join client on care_month.client_id = client.id	Have been seen w/in 90 days?	YES	(DATE_PART('day', client.most_recent_completed_mcp_note_date::timestamp - care_month.start_date::timestamp) <= 90)
+care_month join client on care_month.client_id = client.id	Have been seen w/in 90 days?	NO	(DATE_PART('day', client.most_recent_completed_mcp_note_date::timestamp - care_month.start_date::timestamp) > 90)
+care_month join client on care_month.client_id = client.id	Have been spoken to this month?	YES	(care_month.has_anyone_interacted_with_client_about_rm_outside_note = TRUE)
+care_month join client on care_month.client_id = client.id	Have been spoken to this month?	NO	(care_month.has_anyone_interacted_with_client_about_rm_outside_note IS NULL OR care_month.has_anyone_interacted_with_client_about_rm_outside_note = FALSE)
+care_month join client on care_month.client_id = client.id	Have no unstamped meas.?	YES	(care_month.rm_num_measurements_not_stamped_by_mcp = 0)
+care_month join client on care_month.client_id = client.id	Have no unstamped meas.?	NO	(care_month.rm_num_measurements_not_stamped_by_mcp > 0)
+care_month join client on care_month.client_id = client.id	Have 16 or more meas. days?	YES	(care_month.number_of_days_with_remote_measurements >= 16)
+care_month join client on care_month.client_id = client.id	Have 16 or more meas. days?	NO	(care_month.number_of_days_with_remote_measurements < 16)
+care_month join client on care_month.client_id = client.id	Have 20 or more billing mins.?	YES	(care_month.rm_total_time_in_seconds_by_mcp >= 1200)
+care_month join client on care_month.client_id = client.id	Have 20 or more billing mins.?	NO	(care_month.rm_total_time_in_seconds_by_mcp < 1200)
+care_month join client on care_month.client_id = client.id	Have subscribed to SMS?	YES	(client.send_sms_on_bdt_measurement = TRUE)
+care_month join client on care_month.client_id = client.id	Have used the device?	YES	(client.most_recent_cellular_bp_measurement_at IS NOT NULL OR most_recent_cellular_weight_measurement_at IS NOT NULL)
+
+
+
+ Enrolled in RPM? YES
+ Enrolled in RPM? NO
+ Have cellular device? YES
+ Have been seen w/in 90 days? YES
+ Have been seen w/in 90 days? NO
+ Have been spoken to this month? YES
+ Have been spoken to this month? NO
+ Have no unstamped meas.? YES
+ Have no unstamped meas.? NO
+ Have 16 or more meas. days? YES
+ Have 16 or more meas. days? NO
+ Have 20 or more billing mins.? YES
+ Have 20 or more billing mins.? NO
+ Have subscribed to SMS? YES
+ Have used the device? YES
+
+
+Start date? 2021-12-01
+    Enrolled in RPM? YES
+        Have cellular device? YES
+            Have been seen w/in 90 days? NO
+            Have been seen w/in 90 days? YES
+                Have been spoken to this month? YES
+                    Have 16 or more meas. days? YES
+                        Have 20 or more billing mins.? YES
+                        Have 20 or more billing mins.? NO
+                    Have 16 or more meas. days? NO
+            Have been spoken to this month? NO
+            Have no unstamped meas.? YES
+            Have no unstamped meas.? NO
+            Have subscribed to SMS? YES
+    Enrolled in RPM? NO
+
+Enrolled in RPM? YES
+    Have cellular device? YES
+        Have been seen w/in 90 days? NO
+        Have been seen w/in 90 days? YES
+            Have been spoken to this month? YES
+                Have 16 or more meas. days? YES
+                    Have 20 or more billing mins.? YES
+                    Have 20 or more billing mins.? NO
+                Have 16 or more meas. days? NO
+        Have been spoken to this month? NO
+        Have no unstamped meas.? YES
+        Have no unstamped meas.? NO
+        Have subscribed to SMS? YES
+Enrolled in RPM? NO
+
+