DashboardService.php 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. <?php
  2. namespace App\Services;
  3. use App\Enums\UserStatusEnum;
  4. use App\Enums\UserTypeEnum;
  5. use App\Models\PartnerAgreement;
  6. use App\Models\User;
  7. use App\Models\Appointment;
  8. use Illuminate\Support\Facades\Auth;
  9. class DashboardService
  10. {
  11. public function getStats(): array
  12. {
  13. return [
  14. 'total_associados' => User::where('type', UserTypeEnum::ASSOCIADO)->count(),
  15. 'associados_ativos' => User::where('type', UserTypeEnum::ASSOCIADO)->where('status', UserStatusEnum::ACTIVE)->count(),
  16. 'parceiros' => PartnerAgreement::count(),
  17. 'contratos_a_vencer' => PartnerAgreement::whereNotNull('contract_end')
  18. ->whereBetween('contract_end', [now()->toDateString(), now()->addDays(30)->toDateString()])
  19. ->count(),
  20. 'novos_mes' => PartnerAgreement::whereMonth('created_at', now()->month)->whereYear('created_at', now()->year)->count(),
  21. 'associados_pendentes' => User::where('type', UserTypeEnum::ASSOCIADO)->where('status', UserStatusEnum::PENDING)->count(),
  22. ];
  23. }
  24. public function getPartnerStats(): array
  25. {
  26. $partnerAgreementId = PartnerAgreement::where('user_id', Auth::id())->value('id');
  27. return [
  28. 'authorization' => Appointment::where('partner_agreement_id', $partnerAgreementId)
  29. ->where('status', 'pendente')
  30. ->count(),
  31. 'scheduling' => Appointment::query()
  32. ->leftJoin(
  33. 'partner_agreement_services',
  34. 'partner_agreement_services.id',
  35. '=',
  36. 'appointments.partner_agreement_service_id'
  37. )
  38. ->where('appointments.partner_agreement_id', $partnerAgreementId)
  39. ->where('partner_agreement_services.requires_scheduling', true)
  40. ->where('appointments.status', 'pendente')
  41. ->count(),
  42. //aqui e o count total sem status e sem nada
  43. 'completed' => Appointment::where('partner_agreement_id', $partnerAgreementId)
  44. ->count(),
  45. //status recusado
  46. 'not_authorized' => Appointment::where('partner_agreement_id', $partnerAgreementId)
  47. ->where('status', 'recusado')
  48. ->count(),
  49. ];
  50. }
  51. }