authorize('estimate', $ticket); return view('estimations.create', \compact('ticket')); } /** * Create Ticket estimation * * @param \App\Http\Requests\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 = TicketStatus::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('ticket.show', $ticket) ->with('info', trans('L\'estimation à bien été ajouté')); } return \back(); }); } /** * Answer ticket estimation * * @param \App\Http\Requests\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 = TicketStatus::toPlan(); $estimation->status = EstimationStatus::accepted(); } else { $ticket->status = TicketStatus::archived(); $estimation->status = EstimationStatus::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 TicketStatusChanged($ticket, $ticket->status, $user)); event(new NotifySubscriptions($ticket, $message)); event(new NotifyAdmin($ticket, $message)); return response()->redirectToRoute('ticket.show', $ticket) ->with('info', trans('Votre réponse à été enregistrée')); } return \back(); } }