authorize('estimate', $ticket); return view('estimations.create', \compact('ticket')); } /** * Create Ticket estimation * * @param \App\Http\Requests\Bo\Credit\CreateEstimateRequest $request * @param \App\Models\Ticket $ticket * @return \Illuminate\Http\RedirectResponse */ public function estimateSubmit(CreateEstimateRequest $request, Ticket $ticket) { return DB::transaction(function () use ($request, $ticket) { /** @var \App\Models\User */ $user = auth()->user(); $estimate = new Estimation($request->validated()); $estimate->ticket()->associate($ticket); $estimate->estimator()->associate($user); $ticket->status = TicketStatusEnum::waitingValidation; $ticket->saveQuietly(); if ($estimate->saveOrFail()) { $message = sprintf( '%s a modifié le statut en %s, Une estimation de %s jours à été ajoutée', $user->name, $ticket->status->label(), \number_format(\floatval($request->amount), 1, ',', '') ); event(new TicketStatusChanged($ticket, $ticket->status, $user)); event(new NotifySubscriptions($ticket, $message)); event(new NotifyAdmin($ticket, $message)); return response()->redirectToRoute('bo.ticket.show', $ticket) ->with('info', trans('L\'estimation à bien été ajouté')); } return \back(); }); } /** * Answer ticket estimation * * @param \App\Http\Requests\Bo\Credit\AnswerEstimateRequest $request * @param \App\Models\Ticket $ticket * @return \Illuminate\Http\RedirectResponse */ public function estimatePendingSubmit(AnswerEstimateRequest $request, Ticket $ticket) { /** @var \App\Models\User */ $user = auth()->user(); /** @var \App\Models\Credit\Estimation */ $estimation = $ticket->estimation; if ($request->answer) { $ticket->status = TicketStatusEnum::takenInAccount; $estimation->status = EstimationStatusEnum::accepted; } else { $ticket->status = TicketStatusEnum::archived; $estimation->status = EstimationStatusEnum::refused; } $estimation->validator()->associate($user); if ($estimation->saveOrFail() and $ticket->saveOrFail()) { $message = sprintf( 'Une réponse à été fourni par %s pour l\'estimation du ticket n°%d : %s', $user->name, $ticket->id, $estimation->status->label() ); event(new NotifySubscriptions($ticket, $message)); event(new NotifyAdmin($ticket, $message)); return response()->redirectToRoute('bo.ticket.show', $ticket) ->with('info', trans('Votre réponse à été enregistrée')); } return \back(); } /** * Handle submit and cancel an estimate on ticket * * @param \App\Models\Ticket $ticket * @return \Illuminate\Http\RedirectResponse */ public function estimateCancelSubmit(Ticket $ticket) { $this->authorize('cancelEstimate', $ticket); /** @var \App\Models\Credit\Estimation */ $estimation = $ticket->estimation; $ticket->status = TicketStatusEnum::estimateTodo; if ($estimation->deleteOrFail() and $ticket->saveOrFail()) { return response()->redirectToRoute('bo.ticket.show', $ticket) ->with('info', trans('L\'estimation a été supprimée.')); } return \back(); } }