diff --git a/app/Http/Controllers/TicketController.php b/app/Http/Controllers/TicketController.php index 6e96c46..d2b72d8 100644 --- a/app/Http/Controllers/TicketController.php +++ b/app/Http/Controllers/TicketController.php @@ -4,6 +4,8 @@ namespace App\Http\Controllers; use App\Enums\TicketStatus; use App\Enums\TicketType; +use App\Events\NotifySubscriptions; +use App\Events\TicketStatusChanged; use App\Http\Requests\ChangeTicketStatus; use App\Http\Requests\CreateMessage; use App\Http\Requests\SortTickets; @@ -271,4 +273,16 @@ class TicketController extends Controller User::find(Auth::user()->id)->subscriptions()->toggle($ticket->id); return back(); } + + public function reopen(Ticket $ticket) + { + $message = "{$ticket->user->name} à réouvert le ticket n°{$ticket->id}"; + $oldStatus = $ticket->status; + $ticket->status = TicketStatus::inprogress(); + $ticket->saveQuietly(); + event(new TicketStatusChanged($ticket, $oldStatus, null, $message)); + event(new NotifySubscriptions($ticket, $message, collect($ticket->user))); + User::find(Auth::user()->id)->subscriptions()->toggle($ticket->id); + return back()->with('warning', trans('Votre ticket à été réouvert.')); + } } diff --git a/app/Policies/Rules/UserRoleRules.php b/app/Policies/Rules/UserRoleRules.php index d172415..0d4b185 100644 --- a/app/Policies/Rules/UserRoleRules.php +++ b/app/Policies/Rules/UserRoleRules.php @@ -23,6 +23,11 @@ abstract class UserRoleRules extends StaticRules return $user->role->equals(Role::developper()); } + protected static function userIsClient(User $user) + { + return $user->role->equals(Role::client()); + } + protected static function allowEveryOne() { return true; diff --git a/app/Policies/TicketPolicy.php b/app/Policies/TicketPolicy.php index 93b4dbc..6d36d35 100644 --- a/app/Policies/TicketPolicy.php +++ b/app/Policies/TicketPolicy.php @@ -45,7 +45,8 @@ class TicketPolicy extends RootPolicy SSR::make('userSitesHasTicket', $user, $model) ]), 'suscribeToTicket' => TicketStaticRules::make('ticketIsNotArchived', $model), - 'createMessage' => TicketStaticRules::make('ticketIsNotArchived', $model) + 'createMessage' => TicketStaticRules::make('ticketIsNotArchived', $model), + 'reopen' => URR::make('userIsClient', $user) ] ]; } diff --git a/resources/views/ticket/show.blade.php b/resources/views/ticket/show.blade.php index 7d7a7eb..3bd05fa 100644 --- a/resources/views/ticket/show.blade.php +++ b/resources/views/ticket/show.blade.php @@ -31,6 +31,14 @@ @endcan + @if($ticket->status->equals(TicketStatus::archived())) + @can('reopen', $ticket) +
+ @csrf + +
+ @endcan + @endif
diff --git a/routes/web.php b/routes/web.php index 54307d3..205ae0b 100644 --- a/routes/web.php +++ b/routes/web.php @@ -57,6 +57,9 @@ Route::middleware(['auth'])->group(function () { Route::resource('sites.files', FileController::class); Route::prefix('/ticket')->name('ticket.')->group(function () { + Route::post('/{ticket}/reopen', [TicketController::class, 'reopen']) + ->middleware('can:reopen,ticket') + ->name('reopen'); Route::post('/{ticket}/status', [TicketController::class, 'changeStatus']) ->middleware('can:changeStatus,ticket') ->name('changeStatus');