|
@@ -35,8 +35,96 @@ class DnaController extends Controller
|
|
|
|
|
|
public function patients(Request $request)
|
|
|
{
|
|
|
- $data = [];
|
|
|
- return view('app.dna.patients', $data);
|
|
|
+ $filters = $request->all();
|
|
|
+ $patients = Client::whereNull('shadow_pro_id')->where('default_na_pro_id', $this->performer->pro->id);
|
|
|
+
|
|
|
+ // filters
|
|
|
+ /*
|
|
|
+ array:18 [▼
|
|
|
+ "age_category" => "LESS_THAN"
|
|
|
+ "age_value_1" => "34"
|
|
|
+ "age_value_2" => null
|
|
|
+ "sex" => "M"
|
|
|
+ "bmi_category" => "BETWEEN"
|
|
|
+ "bmi_value_1" => "20"
|
|
|
+ "bmi_value_2" => "25"
|
|
|
+ "last_visit_category" => "LESS_THAN"
|
|
|
+ "last_visit_value_1" => "2021-10-14"
|
|
|
+ "last_visit_value_2" => null
|
|
|
+ "next_appointment_category" => "LESS_THAN"
|
|
|
+ "next_appointment_value_1" => "2021-10-15"
|
|
|
+ "status" => "ACTIVE"
|
|
|
+ "last_weighed_in_category" => "EXACTLY"
|
|
|
+ "last_weighed_in_value_1" => "2021-10-07"
|
|
|
+ "last_bp_category" => "BETWEEN"
|
|
|
+ "last_bp_value_1" => "2021-10-01"
|
|
|
+ "last_bp_value_2" => "2021-10-31"
|
|
|
+ ]
|
|
|
+ */
|
|
|
+
|
|
|
+ $this->filterMultiQuery($request, $patients, 'age_in_years', 'age_category', 'age_value_1', 'age_value_2');
|
|
|
+ $this->filterSimpleQuery($request, $patients, 'sex', 'sex');
|
|
|
+ $this->filterMultiQuery($request, $patients, 'usual_bmi', 'bmi_category', 'bmi_value_1', 'bmi_value_2');
|
|
|
+ $this->filterMultiQuery($request, $patients, 'most_recent_weight_at', 'last_weighed_in_category', 'last_weighed_in_value_1', 'last_weighed_in_value_2');
|
|
|
+ $this->filterMultiQuery($request, $patients, 'most_recent_bp_at', 'last_bp_category', 'last_bp_value_1', 'last_bp_value_2');
|
|
|
+
|
|
|
+ switch($request->input('status')) {
|
|
|
+ case 'ACTIVE':
|
|
|
+ $patients->where('is_active', true)->where('has_mcp_done_onboarding_visit', true);
|
|
|
+ break;
|
|
|
+ case 'AWAITING_VISIT':
|
|
|
+ $patients->where('is_active', true)->where('has_mcp_done_onboarding_visit', false);
|
|
|
+ break;
|
|
|
+ case 'INACTIVE':
|
|
|
+ $patients->where('is_active', '<>', true);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ $patients = $patients->orderBy('created_at', 'DESC')->paginate(20);
|
|
|
+ return view('app.dna.patients', compact('patients', 'filters'));
|
|
|
+ }
|
|
|
+
|
|
|
+ private function filterSimpleQuery(Request $request, $query, $columnName, $valueName) {
|
|
|
+ if($request->input($valueName)) {
|
|
|
+ $query->where($columnName, $request->input($valueName));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ private function filterMultiQuery(Request $request, $query, $columnName, $keyName, $valueName1, $valueName2) {
|
|
|
+ switch($request->input($keyName)) {
|
|
|
+ case 'EXACTLY':
|
|
|
+ if($request->input($valueName1)) {
|
|
|
+ $query->where($columnName, $request->input($valueName1));
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 'LESS_THAN':
|
|
|
+ if($request->input($valueName1)) {
|
|
|
+ $query->where($columnName, '<', $request->input($valueName1));
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 'GREATER_THAN':
|
|
|
+ if($request->input($valueName1)) {
|
|
|
+ $query->where($columnName, '>', $request->input($valueName1));
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 'BETWEEN':
|
|
|
+ if($request->input($valueName1) && $request->input($valueName2)) {
|
|
|
+ $query
|
|
|
+ ->where($columnName, '>=', $request->input($valueName1))
|
|
|
+ ->where($columnName, '<=', $request->input($valueName2));
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 'NOT_BETWEEN':
|
|
|
+ if($request->input($valueName1) && $request->input($valueName2)) {
|
|
|
+ $query
|
|
|
+ ->where(function ($q) use ($request, $columnName, $valueName1, $valueName2) {
|
|
|
+ $q->where($columnName, '<', $request->input($valueName1))
|
|
|
+ ->orWhere($columnName, '>', $request->input($valueName2));
|
|
|
+ });
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
public function notes(Request $request)
|