CustomScheduleController.php 6.9 KB

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