HomeController.php 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. <?php
  2. namespace App\Http\Controllers;
  3. use DateTime;
  4. use App\Models\Client;
  5. use App\Models\Bill;
  6. use App\Models\Note;
  7. use App\Models\ProTransaction;
  8. use Illuminate\Http\Request;
  9. use Illuminate\Support\Facades\DB;
  10. class HomeController extends Controller
  11. {
  12. public function dashboard(Request $request)
  13. {
  14. //patients where performer is the mcp
  15. $performer = $this->performer();
  16. $performerProID = $performer->pro->id;
  17. $keyNumbers = [];
  18. $totalPatients = Client::where('mcp_pro_id', $performer->pro->id)->count();
  19. $keyNumbers['totalPatients'] = $totalPatients;
  20. $patientNotSeenYet = Client::where('mcp_pro_id', $performer->pro->id)
  21. ->where(function ($query) {
  22. $query->where('has_mcp_done_onboarding_visit', 'UNKNOWN')
  23. ->orWhere('has_mcp_done_onboarding_visit', 'NO');
  24. })->count();
  25. $keyNumbers['patientsNotSeenYet'] = $patientNotSeenYet;
  26. $pendingBillsToSign = Bill::where(function ($query) use ($performerProID) {
  27. $query->where('hcp_pro_id', $performerProID)->where('is_signed_by_hcp', false)->where('is_cancelled', false);
  28. })
  29. ->orWhere(function ($query) use ($performerProID) {
  30. $query->where('cm_pro_id', $performerProID)->where('is_signed_by_cm', false)->where('is_cancelled', false);;
  31. })->orWhere(function ($query) use ($performerProID) {
  32. $query->where('rme_pro_id', $performerProID)->where('is_signed_by_rme', false)->where('is_cancelled', false);;
  33. })->orWhere(function ($query) use ($performerProID) {
  34. $query->where('rmm_pro_id', $performerProID)->where('is_signed_by_rmm', false)->where('is_cancelled', false);;
  35. })->count();
  36. $keyNumbers['pendingBillsToSign'] = $pendingBillsToSign;
  37. $pendingNotesToSign = Note::where(function ($query) use ($performerProID) {
  38. $query->where('hcp_pro_id', $performerProID)->where('is_signed_by_hcp', false)->where('is_cancelled', false);;
  39. })
  40. ->orWhere(function ($query) use ($performerProID) {
  41. $query->where('ally_pro_id', $performerProID)->where('is_signed_by_ally', false)->where('is_cancelled', false);;
  42. })->count();
  43. $keyNumbers['pendingNotesToSign'] = $pendingNotesToSign;
  44. $reimbursement = [];
  45. $reimbursement["currentBalance"] = '$'.$performer->pro->balance;
  46. $reimbursement["nextPaymentDate"] = '--';
  47. $lastPayment = ProTransaction::where('pro_id', $performerProID)->where('plus_or_minus', 'PLUS')->orderBy('created_at', 'DESC')->first();
  48. if ($lastPayment) {
  49. $reimbursement["lastPayment"] = '$'.$lastPayment->amount;
  50. $reimbursement["lastPaymentDate"] = $lastPayment->created_at;
  51. } else {
  52. $reimbursement["lastPayment"] = '--';
  53. $reimbursement["lastPaymentDate"] = '--';
  54. }
  55. //if today is < 15th, next payment is 15th, else nextPayment is
  56. $today = strtotime(date('Y-m-d'));
  57. $todayDate = date('j', $today);
  58. $todayMonth = date('m', $today);
  59. $todayYear = date('Y', $today);
  60. if($todayDate < 15){
  61. $nextPaymentDate = new DateTime();
  62. $nextPaymentDate->setDate($todayYear, $todayMonth, 15);
  63. $reimbursement['nextPaymentDate'] = $nextPaymentDate->format('m/d/Y');
  64. }else{
  65. $nextPaymentDate = new \DateTime();
  66. $lastDayOfMonth = date('t', $today);
  67. $nextPaymentDate->setDate($todayYear, $todayMonth, $lastDayOfMonth);
  68. $reimbursement['nextPaymentDate'] = $nextPaymentDate->format('m/d/Y');
  69. }
  70. //expectedPay
  71. $expectedForHcp = DB::select(DB::raw("SELECT coalesce(SUM(hcp_expected_payment_amount),0) as expected_pay FROM bill WHERE hcp_pro_id = :performerProID AND has_hcp_been_paid = false AND is_cancelled = false"), ['performerProID'=>$performerProID])[0]->expected_pay;
  72. $expectedForCm = DB::select(DB::raw("SELECT coalesce(SUM(cm_expected_payment_amount),0) as expected_pay FROM bill WHERE cm_pro_id = :performerProID AND has_cm_been_paid = false AND is_cancelled = false"), ['performerProID'=>$performerProID])[0]->expected_pay;
  73. $expectedForRme = DB::select(DB::raw("SELECT coalesce(SUM(rme_expected_payment_amount),0) as expected_pay FROM bill WHERE rme_pro_id = :performerProID AND has_rme_been_paid = false AND is_cancelled = false"), ['performerProID'=>$performerProID])[0]->expected_pay;
  74. $expectedForRmm = DB::select(DB::raw("SELECT coalesce(SUM(rmm_expected_payment_amount),0) as expected_pay FROM bill WHERE rmm_pro_id = :performerProID AND has_rmm_been_paid = false AND is_cancelled = false"), ['performerProID'=>$performerProID])[0]->expected_pay;
  75. $expectedForNa = DB::select(DB::raw("SELECT coalesce(SUM(na_expected_payment_amount),0) as expected_pay FROM bill WHERE na_pro_id = :performerProID AND has_na_been_paid = false AND is_cancelled = false"), ['performerProID'=>$performerProID])[0]->expected_pay;
  76. $totalExpectedAmount = $expectedForHcp + $expectedForCm + $expectedForRme + $expectedForRmm + $expectedForNa;
  77. $reimbursement['nextPaymentAmount'] = '$'.$totalExpectedAmount;
  78. $clientsWithAppointments = Client::where("mcp_pro_id", $performerProID)
  79. ->whereNotNull('next_mcp_appointment')->get();
  80. $appointments = [];
  81. foreach ($clientsWithAppointments as $client) {
  82. $appointment = [
  83. 'client_uid' => $client->uid,
  84. 'title' => $client->name_first . ' ' . $client->name_last,
  85. 'start' => $client->next_mcp_appointment
  86. ];
  87. $appointments[] = $appointment;
  88. }
  89. return view('app/dashboard', compact('keyNumbers', 'reimbursement', 'appointments'));
  90. }
  91. public function patients(Request $request, $filter = '')
  92. {
  93. $proID = $this->performer()->pro->id;
  94. $query = Client::where(function ($q) use($proID) {
  95. $q->where('mcp_pro_id', $proID)
  96. ->orWhere('cm_pro_id', $proID)
  97. ->orWhere('rmm_pro_id', $proID)
  98. ->orWhere('rme_pro_id', $proID)
  99. ->orWhereRaw('id IN (SELECT client_id FROM client_pro_access WHERE is_active AND pro_id = ?)', [$proID]);
  100. });
  101. switch ($filter) {
  102. case 'not-yet-seen':
  103. $query = $query->where('has_mcp_done_onboarding_visit', '<>', 'YES');
  104. break;
  105. // more cases can be added as needed
  106. default:
  107. break;
  108. }
  109. $patients = $query->orderBy('name_last', 'asc')->orderBy('name_first', 'asc')->get();
  110. return view('app/patients', compact('patients', 'filter'));
  111. }
  112. public function newPatient(Request $request)
  113. {
  114. return view('app/new-patient');
  115. }
  116. public function mc(Request $request, $fragment = "")
  117. {
  118. $page = "/";
  119. if ($fragment) {
  120. $page = '/' . $fragment;
  121. }
  122. return view('app/mc', compact('page'));
  123. }
  124. public function blank(Request $request) {
  125. return view('app/blank');
  126. }
  127. }