CustomScheduleController.php 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Http\Requests\CustomScheduleAvailableRequest;
  4. use App\Http\Requests\CustomScheduleProposeRequest;
  5. use App\Http\Requests\CustomScheduleRefuseOpportunityRequest;
  6. use App\Http\Requests\CustomScheduleRequest;
  7. use App\Http\Requests\CustomScheduleVerifyCodeRequest;
  8. use App\Http\Resources\CustomScheduleResource;
  9. use App\Http\Resources\ServicePackageResource;
  10. use App\Services\CustomScheduleService;
  11. use Illuminate\Http\JsonResponse;
  12. class CustomScheduleController extends Controller
  13. {
  14. protected $customScheduleService;
  15. public function __construct(CustomScheduleService $customScheduleService)
  16. {
  17. $this->customScheduleService = $customScheduleService;
  18. }
  19. public function index(): JsonResponse
  20. {
  21. $customSchedules = $this->customScheduleService->getAll();
  22. return $this->successResponse(
  23. CustomScheduleResource::collection($customSchedules),
  24. );
  25. }
  26. public function store(CustomScheduleRequest $request): JsonResponse
  27. {
  28. try {
  29. $validated = $request->validated();
  30. $customSchedules = $this->customScheduleService->create($validated);
  31. $count = count($customSchedules);
  32. $message = trans_choice('messages.opportunities_created', $count, ['count' => $count]);
  33. return $this->successResponse(
  34. payload: CustomScheduleResource::collection($customSchedules),
  35. message: $message,
  36. code: 201,
  37. );
  38. } catch (\Exception $e) {
  39. return $this->errorResponse($e->getMessage(), 422);
  40. }
  41. }
  42. public function show(string $id): JsonResponse
  43. {
  44. $customSchedule = $this->customScheduleService->getById($id);
  45. return $this->successResponse(
  46. new CustomScheduleResource($customSchedule),
  47. );
  48. }
  49. public function update(CustomScheduleRequest $request, string $id): JsonResponse
  50. {
  51. try {
  52. $customSchedule = $this->customScheduleService->update($id, $request->validated());
  53. return $this->successResponse(
  54. payload: new CustomScheduleResource($customSchedule),
  55. message: __('messages.updated'),
  56. );
  57. } catch (\Exception $e) {
  58. return $this->errorResponse($e->getMessage(), 422);
  59. }
  60. }
  61. public function destroy(string $id): JsonResponse
  62. {
  63. try {
  64. $this->customScheduleService->delete($id);
  65. return $this->successResponse(
  66. message: __('messages.deleted'),
  67. );
  68. } catch (\Exception $e) {
  69. return $this->errorResponse($e->getMessage(), 422);
  70. }
  71. }
  72. //
  73. public function available(CustomScheduleAvailableRequest $request)
  74. {
  75. try {
  76. $providerId = $request->query('provider_id');
  77. if (! $providerId) {
  78. return $this->errorResponse(__('messages.provider_id_required'), 400);
  79. }
  80. $opportunities = $this->customScheduleService->getAvailableOpportunities($providerId);
  81. return $this->successResponse($opportunities);
  82. } catch (\Exception $e) {
  83. return $this->errorResponse(message: __('messages.error_fetching_data'), code: 500, exception: $e);
  84. }
  85. }
  86. public function getProvidersProposalsAndOpportunities($providerId)
  87. {
  88. try {
  89. $data = $this->customScheduleService->getProvidersProposalsAndOpportunities($providerId);
  90. return $this->successResponse($data);
  91. } catch (\Exception $e) {
  92. return $this->errorResponse(message: __('messages.error_fetching_data'), code: 500, exception: $e);
  93. }
  94. }
  95. public function groupedByClientCustom(): JsonResponse
  96. {
  97. $grouped = $this->customScheduleService->getSchedulesCustomGroupedByClient();
  98. return $this->successResponse($grouped);
  99. }
  100. public function opportunityProposals($scheduleId)
  101. {
  102. try {
  103. $proposals = $this->customScheduleService->getOpportunityProposals($scheduleId);
  104. return $this->successResponse($proposals);
  105. } catch (\Exception $e) {
  106. return $this->errorResponse(message: __('messages.error_fetching_data'), code: 500, exception: $e);
  107. }
  108. }
  109. public function providerProposals(CustomScheduleRequest $request)
  110. {
  111. try {
  112. $providerId = $request->query('provider_id');
  113. if (! $providerId) {
  114. return $this->errorResponse(__('messages.provider_id_required'), 400);
  115. }
  116. $proposals = $this->customScheduleService->getProviderProposals($providerId);
  117. return $this->successResponse($proposals);
  118. } catch (\Exception $e) {
  119. return $this->errorResponse(message: __('messages.error_fetching_data'), code: 500, exception: $e);
  120. }
  121. }
  122. //
  123. public function propose(CustomScheduleProposeRequest $request, $scheduleId)
  124. {
  125. try {
  126. $providerId = $request->input('provider_id');
  127. if (! $providerId) {
  128. return $this->errorResponse(__('messages.provider_id_required'), 400);
  129. }
  130. $proposal = $this->customScheduleService->proposeOpportunity($scheduleId, $providerId);
  131. return $this->successResponse($proposal, __('messages.proposal_sent'), 201);
  132. } catch (\Exception $e) {
  133. return $this->errorResponse($e->getMessage(), 400);
  134. }
  135. }
  136. public function acceptProposal($proposalId)
  137. {
  138. try {
  139. $servicePackage = $this->customScheduleService->acceptProposal($proposalId);
  140. return $this->successResponse(new ServicePackageResource($servicePackage), __('messages.provider_accepted'));
  141. } catch (\Exception $e) {
  142. return $this->errorResponse($e->getMessage(), 400);
  143. }
  144. }
  145. public function refuseProposal($proposalId)
  146. {
  147. try {
  148. $this->customScheduleService->refuseProposal($proposalId);
  149. return $this->successResponse(null, __('messages.provider_refused'));
  150. } catch (\Exception $e) {
  151. return $this->errorResponse($e->getMessage(), 400);
  152. }
  153. }
  154. //
  155. public function refuseOpportunity($scheduleId, CustomScheduleRefuseOpportunityRequest $request)
  156. {
  157. try {
  158. $this->customScheduleService->refuseOpportunity($scheduleId, $request->input('provider_id'));
  159. return $this->successResponse(null, __('messages.opportunity_refused'));
  160. } catch (\Exception $e) {
  161. return $this->errorResponse($e->getMessage(), 400);
  162. }
  163. }
  164. //
  165. public function verifyCode($scheduleId, CustomScheduleVerifyCodeRequest $request)
  166. {
  167. try {
  168. $result = $this->customScheduleService->verifyScheduleCode($scheduleId, $request->input('code'));
  169. return $this->successResponse($result, __('messages.code_verified'));
  170. } catch (\Exception $e) {
  171. return $this->errorResponse(message: __('messages.error_fetching_data'), code: 500, exception: $e);
  172. }
  173. }
  174. }