Merge branch '103-priority' into 'develop'
feat: replaced change-order with a new priority system See merge request ldc-web/projets/support-web!116
This commit is contained in:
commit
e67e4b3cef
7 changed files with 154 additions and 8 deletions
|
|
@ -17,6 +17,7 @@ use App\Http\Requests\Bo\UpdateChangeOrderRequest;
|
|||
use App\Http\Requests\Bo\UpdateMessage;
|
||||
use App\Http\Requests\Bo\UpdateTicket;
|
||||
use App\Http\Requests\Bo\LinkTicket;
|
||||
use App\Http\Requests\Bo\UpdateTicketPriorityRequest;
|
||||
use App\Lib\Helpers\FileStorageHelper;
|
||||
use App\Lib\Helpers\ToolboxHelper;
|
||||
use App\Mail\NewTicket;
|
||||
|
|
@ -878,4 +879,34 @@ class TicketController extends Controller
|
|||
return redirect()->back()->with('success', trans('crud.messages.order_changed'));
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Update ticket priority.
|
||||
*
|
||||
* @param UpdateTicketPriorityRequest $request
|
||||
* @param Ticket $ticket
|
||||
* @return void
|
||||
*/
|
||||
public function changePriority(UpdateTicketPriorityRequest $request, Ticket $ticket)
|
||||
{
|
||||
$newPriority = $request->validated('priority');
|
||||
|
||||
return DB::transaction(function () use ($ticket, $newPriority) {
|
||||
// Update all tickets who will be moved with this priority update.
|
||||
$request = Ticket::query()
|
||||
->where('site_id', $ticket->site_id)
|
||||
->whereNot('status', TicketStatusEnum::archived)
|
||||
->whereNot('id', $ticket->id)
|
||||
->whereBetween('order', [min($ticket->order, $newPriority), max($ticket->order, $newPriority)]);
|
||||
$ticket->order < $newPriority ? $request->decrement('order', 1) : $request->increment('order', 1);
|
||||
|
||||
// Update the ticket.
|
||||
$ticket->order = $newPriority;
|
||||
if (!$ticket->saveOrFail()) {
|
||||
return back()->with('error', trans('crud.messages.order_not_changed'));
|
||||
};
|
||||
|
||||
return redirect()->back()->with('success', trans('crud.messages.order_changed'));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
57
app/Http/Requests/Bo/UpdateTicketPriorityRequest.php
Normal file
57
app/Http/Requests/Bo/UpdateTicketPriorityRequest.php
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Requests\Bo;
|
||||
|
||||
use App\Models\Ticket;
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
class UpdateTicketPriorityRequest extends FormRequest
|
||||
{
|
||||
private \App\Models\Ticket $ticket;
|
||||
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public function authorize(): bool
|
||||
{
|
||||
return auth()->check();
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepare the data for validation.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function prepareForValidation(): void
|
||||
{
|
||||
$this->ticket = $this->route('ticket');
|
||||
$max = Ticket::query()->where('site_id', $this->ticket->site_id)->max('order');
|
||||
|
||||
$this->merge([
|
||||
'priority' => min($this->integer('priority'), $max)
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function rules(): array
|
||||
{
|
||||
return [
|
||||
'priority' => [
|
||||
'required',
|
||||
'integer',
|
||||
'min:1',
|
||||
function ($attribute, $value, $fail) {
|
||||
if ($this->ticket && intval($value) === $this->ticket->order) {
|
||||
$fail("La valeur de {$attribute} doit être différente de la valeur actuelle.");
|
||||
}
|
||||
},
|
||||
],
|
||||
];
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
<?php
|
||||
|
||||
use App\Enums\Tickets\TicketStatusEnum;
|
||||
use App\Models\Site;
|
||||
use App\Models\Ticket;
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Site::query()->each(function (Site $site) {
|
||||
$tickets = $site->tickets()->whereNot('status', TicketStatusEnum::archived)->orderBy('order')->get();
|
||||
$order = 1;
|
||||
foreach ($tickets as $ticket) {
|
||||
$ticket->order = $order;
|
||||
$ticket->saveOrFail();
|
||||
$order++;
|
||||
}
|
||||
});
|
||||
Ticket::query()->where('status', TicketStatusEnum::archived)->update([
|
||||
'order' => 0
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
// Nothing to revert.
|
||||
}
|
||||
};
|
||||
|
|
@ -66,7 +66,8 @@ import {
|
|||
faUsers,
|
||||
faWandMagic,
|
||||
faXmark,
|
||||
faLinkSlash
|
||||
faLinkSlash,
|
||||
faChevronDown
|
||||
} from "@fortawesome/free-solid-svg-icons";
|
||||
|
||||
config.autoReplaceSvg = false;
|
||||
|
|
@ -132,6 +133,7 @@ library.add(faLinkSlash);
|
|||
// Front
|
||||
library.add(faChevronLeft);
|
||||
library.add(faChevronRight);
|
||||
library.add(faChevronDown);
|
||||
library.add(faBan);
|
||||
library.add(faDownload);
|
||||
library.add(faUsers);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,23 @@
|
|||
<td class="text-center align-middle">
|
||||
<div class="d-flex justify-content-center align-items-center">
|
||||
<b class="mx-3">{{ $value ?? '' }}</b>
|
||||
|
||||
<div class="dropdown">
|
||||
<button class="btn btn-secondary" type="button" data-bs-toggle="dropdown" aria-expanded="false">
|
||||
<i class="fa-solid fa-chevron-down"></i>
|
||||
</button>
|
||||
<div class="dropdown-menu">
|
||||
<form class="px-4 py-3" action="{{ route('bo.ticket.change-priority', ['ticket' => $model]) }}" method="POST">
|
||||
@csrf
|
||||
@method('PATCH')
|
||||
<div class="mb-3">
|
||||
<label for="priority-{{ $model->id }}" class="form-label">{{ __('Nouvelle priorité') }}</label>
|
||||
<input type="number" class="form-input" id="priority-{{ $model->id }}" placeholder="1" name="priority" min="1">
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary">{{ _('Sauvegarder') }}</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
|
||||
|
|
@ -256,12 +256,9 @@
|
|||
<tr class="position-relative">
|
||||
{{-- order --}}
|
||||
@if (session('tickets.or'))
|
||||
@include('bo.modules.change-model-order', [
|
||||
'routeName' => 'ticket',
|
||||
@include('bo.modules.change-model-order-select', [
|
||||
'model' => $ticket,
|
||||
'models' => $tickets,
|
||||
'value' => $key + 1 + ($tickets->currentPage() - 1) * $tickets->perPage(),
|
||||
'noRightsVisible' => false,
|
||||
])
|
||||
@endif
|
||||
{{-- id --}}
|
||||
|
|
|
|||
|
|
@ -88,10 +88,10 @@ Route::middleware('admin-secure')
|
|||
)
|
||||
->middleware('can:createGitlabIssue,ticket')
|
||||
->name('ticket.create-issue');
|
||||
Route::patch('/tickets/{ticket}/change-order/{direction}', [
|
||||
Route::patch('/tickets/{ticket}/change-priority', [
|
||||
TicketController::class,
|
||||
'changeOrder'
|
||||
])->where('direction', 'up|down')->name('ticket.change-order');
|
||||
'changePriority'
|
||||
])->name('ticket.change-priority');
|
||||
});
|
||||
Route::resource('credit_accounts', AccountController::class)
|
||||
->only(['index'])
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue