diff --git a/app/Enums/TicketType.php b/app/Enums/TicketTypeEnum.php similarity index 97% rename from app/Enums/TicketType.php rename to app/Enums/TicketTypeEnum.php index f0e4e67..b5f0bac 100644 --- a/app/Enums/TicketType.php +++ b/app/Enums/TicketTypeEnum.php @@ -12,7 +12,7 @@ use Kwaadpepper\Enum\BaseEnumRoutable; * @method static self qrcode() * @method static self advice() */ -class TicketType extends BaseEnumRoutable +class TicketTypeEnum extends BaseEnumRoutable { /** * Enum values diff --git a/app/Http/Controllers/TicketController.php b/app/Http/Controllers/TicketController.php index 746f15f..4310cb1 100644 --- a/app/Http/Controllers/TicketController.php +++ b/app/Http/Controllers/TicketController.php @@ -3,7 +3,7 @@ namespace App\Http\Controllers; use App\Enums\TicketStatus; -use App\Enums\TicketType; +use App\Enums\TicketTypeEnum; use App\Events\NotifySubscriptions; use App\Events\TicketStatusChanged; use App\Http\Requests\AssignTicketToUserRequest; @@ -578,9 +578,9 @@ class TicketController extends Controller })->map(function (TicketStatus $ticket) { return $ticket->value; }); - $t = collect(TicketType::toArray())->filter(function (TicketType $s) use ($word) { + $t = collect(TicketTypeEnum::toArray())->filter(function (TicketTypeEnum $s) use ($word) { return Str::slug($s->label) === Str::slug($word); - })->map(function (TicketType $ticket) { + })->map(function (TicketTypeEnum $ticket) { return $ticket->value; }); $q->orWhere('id', $word) diff --git a/app/Http/Controllers/TicketTypeController.php b/app/Http/Controllers/TicketTypeController.php new file mode 100644 index 0000000..cce8e03 --- /dev/null +++ b/app/Http/Controllers/TicketTypeController.php @@ -0,0 +1,37 @@ +getData())); + } +} diff --git a/app/Http/Requests/StoreTicket.php b/app/Http/Requests/StoreTicket.php index a82969f..f28f595 100644 --- a/app/Http/Requests/StoreTicket.php +++ b/app/Http/Requests/StoreTicket.php @@ -3,7 +3,7 @@ namespace App\Http\Requests; use App\Enums\TicketStatus; -use App\Enums\TicketType; +use App\Enums\TicketTypeEnum; use App\Models\Ticket; use Illuminate\Foundation\Http\FormRequest; @@ -78,9 +78,9 @@ class StoreTicket extends FormRequest 'required', // @phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClassBeforeLastUsed function ($attribute, $value, $fail) { - if (!in_array($value, TicketType::toValues())) { + if (!in_array($value, TicketTypeEnum::toValues())) { $fail(__('Veuillez choisir entre :values', [ - 'value' => implode(',', TicketType::toLabels()) + 'value' => implode(',', TicketTypeEnum::toLabels()) ])); } } diff --git a/app/Models/Ticket.php b/app/Models/Ticket.php index db8b24b..2d3ae33 100644 --- a/app/Models/Ticket.php +++ b/app/Models/Ticket.php @@ -4,7 +4,7 @@ namespace App\Models; use App\Enums\Role; use App\Enums\TicketStatus; -use App\Enums\TicketType; +use App\Enums\TicketTypeEnum; use App\Events\NotifyAdmin; use App\Events\NotifySubscriptions; use App\Events\TicketStatusChanged; @@ -12,6 +12,7 @@ use App\Jobs\SendTicketMentionMail; use App\Mail\TicketMention; use App\Models\Credit\Account; use App\Models\Credit\Estimation; +use App\Models\Ticket\TicketType; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\ModelNotFoundException; @@ -29,7 +30,7 @@ class Ticket extends Model * @var array */ protected $enumCasts = [ - 'type' => TicketType::class, + 'type' => TicketTypeEnum::class, 'status' => TicketStatus::class ]; @@ -64,7 +65,7 @@ class Ticket extends Model { static::creating(function (Ticket $ticket) { // If bug force the ticket status on new. All the others are estimateTodo. - if ($ticket->type->equals(TicketType::bug())) { + if ($ticket->type->equals(TicketTypeEnum::bug())) { $ticket->status = TicketStatus::new(); } else { $ticket->status = TicketStatus::estimateTodo(); @@ -168,6 +169,16 @@ class Ticket extends Model return $this->belongsToMany(Label::class, 'label_ticket'); } + /** + * BelongsTo ticket_type + * + * @return \Illuminate\Database\Eloquent\Relations\BelongsTo + */ + public function ticketType() + { + return $this->belongsTo(TicketType::class, 'type', 'type'); + } + // * METHODS /** diff --git a/app/Models/Ticket/TicketType.php b/app/Models/Ticket/TicketType.php new file mode 100644 index 0000000..7c1c4fd --- /dev/null +++ b/app/Models/Ticket/TicketType.php @@ -0,0 +1,109 @@ + TicketTypeEnum::class, + ]; + + /** + * The attributes that are mass assignable. + * + * @var array + */ + protected $fillable = [ + 'type', + 'template' + ]; + + /** + * TicketType + * + * @param array $attributes + */ + public function __construct(array $attributes = []) + { + self::$editableProperties = [ + 'type' => [ + 'label' => trans('Type'), + 'type' => CrudType::enum(), + 'enum' => TicketTypeEnum::class, + 'required' => true, + 'readonly' => true, + 'nullable' => false, + 'actions' => [ + CrudAction::viewAny(), + CrudAction::update() + ] + ], + 'template' => [ + 'label' => trans('Template'), + 'type' => CrudType::text(), + 'required' => true, + 'readonly' => false, + 'nullable' => false, + 'actions' => [ + CrudAction::view(), + CrudAction::update() + ] + ], + ]; + parent::__construct($attributes); + } + + /** + * Perform any actions required after the model boots. + * + * @return void + */ + protected static function booted() + { + static::creating(function () { + throw new \Error('Denied'); + }); + } + + /** + * BelongsToMany tickets + * + * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany + */ + public function tickets() + { + return $this->hasMany(Ticket::class, 'type', 'type'); + } +} diff --git a/app/Policies/TicketTypePolicy.php b/app/Policies/TicketTypePolicy.php new file mode 100644 index 0000000..c2c9f5b --- /dev/null +++ b/app/Policies/TicketTypePolicy.php @@ -0,0 +1,32 @@ +policies = [ + 'tickettype' => [ + 'viewAny' => URR::make('userIsAdmin', $user), + 'update' => URR::make('userIsAdmin', $user) + ] + ]; + } +} diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php index 93c881b..b8b5e0c 100644 --- a/app/Providers/RouteServiceProvider.php +++ b/app/Providers/RouteServiceProvider.php @@ -17,6 +17,7 @@ use App\Models\Package; use App\Models\Project; use App\Models\Site; use App\Models\Ticket; +use App\Models\Ticket\TicketType; use App\Models\User; use Illuminate\Cache\RateLimiting\Limit; use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider; @@ -102,6 +103,7 @@ class RouteServiceProvider extends ServiceProvider Route::model('user', User::class); Route::model('site', Site::class); Route::model('project', Project::class); + Route::model('ticket_type', TicketType::class); Route::bind('ticket', function ($value) { return Ticket::where('id', $value)->has('site')->firstOrFail(); }); diff --git a/config/app.php b/config/app.php index 72f41ed..f39a33e 100644 --- a/config/app.php +++ b/config/app.php @@ -231,7 +231,7 @@ return [ 'Carbon' => 'Carbon\Carbon', // * Application custom - 'TicketType' => App\Enums\TicketType::class, + 'TicketTypeEnum' => App\Enums\TicketTypeEnum::class, 'TicketStatus' => App\Enums\TicketStatus::class, 'ToolboxHelper' => App\Lib\ToolboxHelper::class, 'CrudAction' => App\Enums\CrudAction::class, diff --git a/database/migrations/2023_04_19_160127_create_ticket_types_table.php b/database/migrations/2023_04_19_160127_create_ticket_types_table.php new file mode 100644 index 0000000..a9248e6 --- /dev/null +++ b/database/migrations/2023_04_19_160127_create_ticket_types_table.php @@ -0,0 +1,44 @@ +id(); + + $table->unsignedTinyInteger('type')->unique()->comment('TicketType Enum'); + $table->text('template')->comment('Le template du type de ticket'); + + $table->timestamps(); + }); + + collect(TicketTypeEnum::toArray())->each(function (TicketTypeEnum $ticketTypeEnum) { + (new TicketType([ + 'type' => $ticketTypeEnum, + 'template' => "Problème recontré :\n\nUrl pertinents :\n\nCi-joint une capture d'écran.\nCordialement.", + ]))->saveQuietly(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('ticket_types'); + } +} diff --git a/resources/views/ticket/form-inputs.blade.php b/resources/views/ticket/form-inputs.blade.php index d3c67c0..2131130 100644 --- a/resources/views/ticket/form-inputs.blade.php +++ b/resources/views/ticket/form-inputs.blade.php @@ -17,7 +17,7 @@ $userPr = Auth::user()->sites ?? collect([]);