ManagementStatsController.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Http\Request;
  4. use Illuminate\Support\Facades\DB;
  5. use Illuminate\Support\Facades\Http;
  6. class ManagementStatsController extends Controller
  7. {
  8. public function index(Request $request)
  9. {
  10. $filters = $request->all();
  11. if(!isset($filters['start_date'])) $filters['start_date'] = '2022-01-01';
  12. if(!isset($filters['end_date'])) $filters['end_date'] = '2022-04-01';
  13. $startDate = $filters['start_date'];
  14. $endDate = $filters['end_date'];
  15. $resultMap = [
  16. "AcquiredClients" => $this->getAcquiredClients($startDate, $endDate),
  17. "AcquiredClientsCount" => $this->getAcquiredClientsCount($startDate, $endDate),
  18. "NoteCountByMonth" => $this->getNoteCountByMonth($startDate, $endDate),
  19. "ActiveClientsByMonth" => $this->getActiveClientsByMonth($startDate, $endDate),
  20. "ActiveProsByMonth" => $this->getActiveProsByMonth($startDate, $endDate),
  21. "CptCodesBilled" => $this->getCptCodesBilled($startDate, $endDate),
  22. "CptCodesBilledByMonth" => $this->getCptCodesBilledByMonth($startDate, $endDate),
  23. "TotalBilledAmount" => $this->getTotalBilledAmount($startDate, $endDate)
  24. ];
  25. return view('app.admin.management-stats.index', compact('resultMap','filters'));
  26. }
  27. private function getAcquiredClients($startDate, $endDate){
  28. $query = "SELECT id FROM client WHERE created_at::DATE >= ? AND created_at::DATE < ? AND client_engagement_status_category != 'DUMMY'";
  29. return DB::select( DB::raw($query), array($startDate,$endDate));
  30. }
  31. private function getAcquiredClientsCount($startDate, $endDate){
  32. $query = "SELECT COUNT(*) FROM client WHERE id IN (SELECT id FROM client WHERE created_at::DATE >= ? AND created_at::DATE < ?) AND client_engagement_status_category != 'DUMMY'";
  33. return DB::select( DB::raw($query), array($startDate,$endDate));
  34. }
  35. private function getNoteCountByMonth($startDate, $endDate){
  36. $query= "
  37. SELECT COUNT(*), DATE_TRUNC('month', created_at)
  38. FROM note
  39. WHERE (is_signed_by_hcp IS NOT FALSE AND is_bill_closed IS NOT FALSE AND is_claim_closed IS NOT FALSE AND is_cancelled IS NOT TRUE)
  40. AND client_id IN (SELECT id FROM client WHERE created_at::DATE >= ? AND created_at::DATE < ? AND client_engagement_status_category != 'DUMMY')
  41. GROUP BY 2
  42. ORDER BY 2 ASC;
  43. ";
  44. return DB::select( DB::raw($query), array($startDate,$endDate));
  45. }
  46. private function getActiveClientsByMonth($startDate, $endDate){
  47. $query= "
  48. SELECT COUNT(DISTINCT(client_id)), DATE_TRUNC('month', created_at)
  49. FROM note
  50. WHERE (is_signed_by_hcp IS NOT FALSE AND is_bill_closed IS NOT FALSE AND is_claim_closed IS NOT FALSE AND is_cancelled IS NOT TRUE)
  51. AND client_id IN (SELECT id FROM client WHERE created_at::DATE >= ? AND created_at::DATE < ? AND client_engagement_status_category != 'DUMMY')
  52. GROUP BY 2
  53. ORDER BY 2 ASC;
  54. ";
  55. return DB::select( DB::raw($query), array($startDate,$endDate));
  56. }
  57. private function getActiveProsByMonth($startDate, $endDate){
  58. $query= "
  59. SELECT COUNT(DISTINCT(hcp_pro_id)), DATE_TRUNC('month', created_at)
  60. FROM note
  61. WHERE (is_signed_by_hcp IS NOT FALSE AND is_bill_closed IS NOT FALSE AND is_claim_closed IS NOT FALSE AND is_cancelled IS NOT TRUE)
  62. AND client_id IN (SELECT id FROM client WHERE created_at::DATE >= ? AND created_at::DATE < ? AND client_engagement_status_category != 'DUMMY')
  63. GROUP BY 2
  64. ORDER BY 2 ASC;
  65. ";
  66. return DB::select( DB::raw($query), array($startDate,$endDate));
  67. }
  68. private function getCptCodesBilled($startDate, $endDate){
  69. $query= "
  70. SELECT COUNT(*), cpt
  71. FROM claim_line
  72. JOIN claim ON claim_line.claim_id = claim.id
  73. JOIN note ON claim.note_id = note.id
  74. JOIN client ON note.client_id = client.id
  75. WHERE client.id IN (SELECT id FROM client WHERE created_at::DATE >= ? AND created_at::DATE < ? AND client_engagement_status_category != 'DUMMY')
  76. GROUP BY cpt ORDER BY cpt ASC;
  77. ";
  78. return DB::select( DB::raw($query), array($startDate,$endDate));
  79. }
  80. private function getCptCodesBilledByMonth($startDate, $endDate){
  81. $query= "
  82. SELECT COUNT(*), cpt, DATE_TRUNC('month', note.effective_dateest)
  83. FROM claim_line
  84. JOIN claim ON claim_line.claim_id = claim.id
  85. JOIN note ON claim.note_id = note.id
  86. JOIN client ON note.client_id = client.id
  87. WHERE client.id IN (SELECT id FROM client WHERE created_at::DATE >= ? AND created_at::DATE < ? AND client_engagement_status_category != 'DUMMY')
  88. GROUP BY 3, 2;
  89. " ;
  90. return DB::select( DB::raw($query), array($startDate,$endDate));
  91. }
  92. private function getTotalBilledAmount($startDate, $endDate){
  93. $query= "
  94. SELECT SUM(bill.total_paid)
  95. FROM bill
  96. JOIN note ON bill.note_id = note.id
  97. JOIN client ON bill.client_id = client.id
  98. WHERE client.id IN (SELECT id FROM client WHERE created_at::DATE >= ? AND created_at::DATE < ? AND client_engagement_status_category != 'DUMMY');
  99. ";
  100. return DB::select( DB::raw($query), array($startDate,$endDate));
  101. }
  102. }