PartnerAgreementServiceService.php 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. <?php
  2. namespace App\Services;
  3. use App\Enums\PartnerAgreementTypeEnum;
  4. use App\Models\PartnerAgreement;
  5. use App\Models\PartnerAgreementService;
  6. use Illuminate\Database\Eloquent\Collection;
  7. class PartnerAgreementServiceService
  8. {
  9. public function getAllByPartner(int $partnerAgreementId): Collection
  10. {
  11. return PartnerAgreementService::with(['category', 'media'])
  12. ->where('partner_agreement_id', $partnerAgreementId)
  13. ->orderBy('name')
  14. ->get();
  15. }
  16. public function findById(int $id): ?PartnerAgreementService
  17. {
  18. return PartnerAgreementService::with(['partnerAgreement', 'category', 'media'])->find($id);
  19. }
  20. public function create(array $data): PartnerAgreementService
  21. {
  22. $data = $this->enforceSchedulingRule($data);
  23. return PartnerAgreementService::create($data);
  24. }
  25. public function update(int $id, array $data): ?PartnerAgreementService
  26. {
  27. $model = PartnerAgreementService::find($id);
  28. if (!$model) {
  29. return null;
  30. }
  31. $data = $this->enforceSchedulingRule($data, $model->partner_agreement_id);
  32. $model->update($data);
  33. return $model->fresh(['category', 'media']);
  34. }
  35. private function enforceSchedulingRule(array $data, ?int $partnerAgreementId = null): array
  36. {
  37. $paId = $partnerAgreementId ?? ($data['partner_agreement_id'] ?? null);
  38. if ($paId) {
  39. $type = PartnerAgreement::where('id', $paId)->value('type');
  40. if ($type === PartnerAgreementTypeEnum::PARTNER->value || $type === 'partner') {
  41. $data['requires_scheduling'] = false;
  42. }
  43. }
  44. return $data;
  45. }
  46. public function delete(int $id): bool
  47. {
  48. $model = PartnerAgreementService::find($id);
  49. if (!$model) {
  50. return false;
  51. }
  52. return $model->delete();
  53. }
  54. }