102 lines
3.9 KiB
PHP
102 lines
3.9 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Credit;
|
|
|
|
use App\Enums\Credit\EstimationStatus;
|
|
use App\Enums\TicketStatus;
|
|
use App\Events\NotifyAdmin;
|
|
use App\Events\NotifySubscriptions;
|
|
use App\Events\TicketStatusChanged;
|
|
use App\Http\Controllers\Controller;
|
|
use App\Http\Requests\Credit\AnswerEstimateRequest;
|
|
use App\Http\Requests\Credit\CreateEstimateRequest;
|
|
use App\Models\Credit\Estimation;
|
|
use App\Models\Ticket;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class EstimationController extends Controller
|
|
{
|
|
/**
|
|
* Show estimate Form
|
|
*
|
|
* @param \App\Models\Ticket $ticket
|
|
* @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory
|
|
* @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClass
|
|
*/
|
|
public function estimate(Ticket $ticket)
|
|
{
|
|
$this->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(
|
|
'<b>%s</b> a modifié le statut en <b>%s</b>, 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::takenInAccount();
|
|
$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();
|
|
}
|
|
}
|