PartnerAgreementServiceService.php 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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, ?string $type = null, ?string $status = null): Collection
  10. {
  11. return PartnerAgreementService::with(['category', 'media'])
  12. ->where('partner_agreement_id', $partnerAgreementId)
  13. ->when($type, fn($query) => $query->where('type', $type))
  14. ->when($status, fn($query) => $query->where('status', $status))
  15. ->orderBy('name')
  16. ->get();
  17. }
  18. public function findById(int $id): ?PartnerAgreementService
  19. {
  20. return PartnerAgreementService::with(['partnerAgreement', 'category', 'media'])->find($id);
  21. }
  22. public function create(array $data): PartnerAgreementService
  23. {
  24. $data = $this->enforceSchedulingRule($data);
  25. return PartnerAgreementService::create($data);
  26. }
  27. public function update(int $id, array $data): ?PartnerAgreementService
  28. {
  29. $model = PartnerAgreementService::find($id);
  30. if (!$model) {
  31. return null;
  32. }
  33. $data = $this->enforceSchedulingRule($data, $model->partner_agreement_id);
  34. $model->update($data);
  35. return $model->fresh(['category', 'media']);
  36. }
  37. private function enforceSchedulingRule(array $data, ?int $partnerAgreementId = null): array
  38. {
  39. $paId = $partnerAgreementId ?? ($data['partner_agreement_id'] ?? null);
  40. if ($paId) {
  41. $type = PartnerAgreement::where('id', $paId)->value('type');
  42. if ($type === PartnerAgreementTypeEnum::PARTNER->value || $type === 'partner') {
  43. $data['requires_scheduling'] = false;
  44. }
  45. }
  46. return $data;
  47. }
  48. public function delete(int $id): bool
  49. {
  50. $model = PartnerAgreementService::find($id);
  51. if (!$model) {
  52. return false;
  53. }
  54. return $model->delete();
  55. }
  56. }