diff --git a/app/Http/Controllers/Bo/ClaimSubjectController.php b/app/Http/Controllers/Bo/ClaimSubjectController.php new file mode 100644 index 0000000..59419c8 --- /dev/null +++ b/app/Http/Controllers/Bo/ClaimSubjectController.php @@ -0,0 +1,172 @@ +authorizeResource(ClaimSubject::class); + } + + /** + * Display a listing of the resource. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Contracts\View\View + */ + public function index(Request $request): \Illuminate\Contracts\View\View + { + /** @var \Illuminate\Database\Eloquent\Builder $query */ + $query = ClaimSubject::query()->when( + $request->filled('brand'), + fn($q) => $q->whereHas('brand', fn($q) => $q->where('id', $request->brand)) + ); + + if ($request->search) { + $this->searchQuery( + $query, + $request->search, + null, + 'label', + ); + } + + $this->sortQuery($query); + $searchFields = trans('validation.custom.label'); + + $claimSubjectModels = $this->paginate($query); + + return view('bo.pages.claim_subjects.index', compact('claimSubjectModels', 'searchFields')); + } + + /** + * Show the specified resource. + * + * @param \App\Models\ClaimSubject $claim_subject + * @return \Illuminate\Contracts\View\View + */ + public function show(ClaimSubject $claim_subject): \Illuminate\Contracts\View\View + { + return view('bo.pages.claim_subjects.show', [ + 'claimSubjectModel' => $claim_subject + ]); + } + + /** + * Show the form for creating a new resource. + * + * @param \App\Models\ClaimSubject $claim_subject + * @return \Illuminate\Contracts\View\View + */ + public function create(ClaimSubject $claim_subject): \Illuminate\Contracts\View\View + { + $brandModels = Brand::query()->orderBy('name', 'ASC')->paginate($this->jsonItemPerPagination); + return view('bo.pages.claim_subjects.create', [ + 'claimSubjectModel' => $claim_subject, + 'brandModels' => $brandModels, + ]); + } + + /** + * Store a newly created resource in storage. + * + * @param \App\Http\Requests\Bo\ClaimSubjects\ClaimSubjectRequest $request + * @return \Illuminate\Http\RedirectResponse + */ + public function store(ClaimSubjectRequest $request): \Illuminate\Http\RedirectResponse + { + return DB::transaction(function () use ($request) { + $claimSubjectModel = new ClaimSubject(); + $claimSubjectModel->fill($request->validated()); + if ($claimSubjectModel->saveOrFail()) { + return redirect() + ->route('bo.claim_subjects.edit', $claimSubjectModel) + ->with('success', trans( + ':model a été créé.', + ['model' => Str::singular(trans('models.classes.claimsubjects'))] + )); + } + return redirect() + ->back() + ->with('error', trans( + ':model n\'a pas été créé.', + ['model' => Str::singular(trans('models.classes.claimsubjects'))] + )); + }); + } + + /** + * Show the form for editing the specified resource. + * + * @param \App\Models\ClaimSubject $claim_subject + * @return \Illuminate\Contracts\View\View + */ + public function edit(ClaimSubject $claim_subject): \Illuminate\Contracts\View\View + { + $brandModels = Brand::query()->orderBy('name', 'ASC')->paginate($this->jsonItemPerPagination); + return view('bo.pages.claim_subjects.edit', [ + 'claimSubjectModel' => $claim_subject, + 'brandModels' => $brandModels, + ]); + } + + /** + * Update a spacific resource in storage. + * + * @param \App\Http\Requests\Bo\ClaimSubjects\ClaimSubjectRequest $request + * @param \App\Models\ClaimSubject $claim_subject + * @return \Illuminate\Http\RedirectResponse + */ + public function update(ClaimSubjectRequest $request, ClaimSubject $claim_subject): \Illuminate\Http\RedirectResponse + { + return DB::transaction(function () use ($request, $claim_subject) { + $claim_subject->fill($request->validated()); + if ($claim_subject->saveOrFail()) { + return redirect() + ->route('bo.claim_subjects.edit', $claim_subject) + ->with('success', trans( + ':model a été mis à jour.', + ['model' => Str::singular(trans('models.classes.claimsubjects'))] + )); + } + return redirect() + ->back() + ->with('error', trans( + ':model n\'a pas été mis à jour.', + ['model' => Str::singular(trans('models.classes.claimsubjects'))] + )); + }); + } + + /** + * Remove the specified resource from storage. + * + * @param \App\Models\ClaimSubject $claim_subject + * @return \Illuminate\Http\RedirectResponse + */ + public function destroy(ClaimSubject $claim_subject): \Illuminate\Http\RedirectResponse + { + if ($claim_subject->deleteOrFail()) { + return redirect()->route('bo.claim_subjects.index') + ->with('success', __('crud.messages.has_been_deleted', [ + 'model' => Str::of(__('models.classes.claimsubjects'))->singular() + ])); + } + return redirect()->back() + ->with('error', __('crud.messages.cannot_be_deleted', [ + 'model' => Str::of(__('models.classes.claimsubjects'))->singular() + ])); + } +} diff --git a/app/Http/Requests/Bo/ClaimSubjects/ClaimSubjectRequest.php b/app/Http/Requests/Bo/ClaimSubjects/ClaimSubjectRequest.php new file mode 100644 index 0000000..0f7cde8 --- /dev/null +++ b/app/Http/Requests/Bo/ClaimSubjects/ClaimSubjectRequest.php @@ -0,0 +1,44 @@ +check(); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules(): array + { + return [ + 'brand_id' => 'required|exists:brands,id', + 'label' => 'required|string|min:3|max:255', + ]; + } + + /** + * Get custom attributes for validator errors. + * + * @return array + */ + public function attributes(): array + { + return [ + 'brand_id' => trans('models.classes.brands'), + 'label' => trans('validation.attributes.label'), + ]; + } +} diff --git a/app/Http/Requests/Bo/Claims/UpdateClaimRequest.php b/app/Http/Requests/Bo/Claims/UpdateClaimRequest.php index 4214450..81d1969 100644 --- a/app/Http/Requests/Bo/Claims/UpdateClaimRequest.php +++ b/app/Http/Requests/Bo/Claims/UpdateClaimRequest.php @@ -45,7 +45,7 @@ class UpdateClaimRequest extends FormRequest { return [ 'brand_id' => trans('models.classes.brands'), - 'subject_id' => trans('models.classes.claim_subjects'), + 'subject_id' => trans('models.classes.claimsubjects'), 'type' => trans('validation.custom.type'), 'status' => trans('validation.custom.status'), 'response_type' => trans('validation.custom.response_type'), diff --git a/app/Models/Claim.php b/app/Models/Claim.php index 219fd70..5b23fcb 100644 --- a/app/Models/Claim.php +++ b/app/Models/Claim.php @@ -97,7 +97,7 @@ class Claim extends Model event(new ClaimModelChanged( $model->load('claimSubject'), 'claimSubject', - trans('models.classes.claim_subjects'), + trans('models.classes.claimsubjects'), $user, )); } diff --git a/app/Policies/ClaimSubjectPolicy.php b/app/Policies/ClaimSubjectPolicy.php new file mode 100644 index 0000000..5a25c72 --- /dev/null +++ b/app/Policies/ClaimSubjectPolicy.php @@ -0,0 +1,87 @@ + [ - 'user' => 'user', - 'activity_log' => 'activity log|activity logs', - 'services' => 'Services', - 'brands' => 'Brands', - 'customers' => 'Customers', - 'questions' => 'Questions', - 'answers' => 'Answers', - 'singleoptins' => 'Single Opt-ins', - 'claims' => 'Claims', - 'claim_subjects' => 'Subjects', - 'claim_mail_templates' => 'Templates', + 'user' => 'user', + 'activity_log' => 'activity log|activity logs', + 'services' => 'Services', + 'brands' => 'Brands', + 'customers' => 'Customers', + 'questions' => 'Questions', + 'answers' => 'Answers', + 'singleoptins' => 'Single Opt-ins', + 'claims' => 'Claims', + 'claimsubjects' => 'Subjects', + 'claimmailtemplates' => 'Templates', ], 'common' => [ 'title' => 'Title', diff --git a/resources/lang/en/validation.php b/resources/lang/en/validation.php index 93b5672..d9ca963 100644 --- a/resources/lang/en/validation.php +++ b/resources/lang/en/validation.php @@ -232,5 +232,6 @@ return [ 'reference' => 'reference', 'type' => 'type', 'status' => 'status', + 'label' => 'label', ], ]; diff --git a/resources/lang/fr/models.php b/resources/lang/fr/models.php index 2ae3fd2..15fe3f0 100644 --- a/resources/lang/fr/models.php +++ b/resources/lang/fr/models.php @@ -2,17 +2,17 @@ return [ 'classes' => [ - 'user' => 'utilisateur', - 'activity_log' => 'journal d\'activité|journaux d\'activité', - 'services' => 'Services', - 'brands' => 'Marques', - 'questions' => 'Questions', - 'answers' => 'Réponses', - 'customers' => 'Clients', - 'singleoptins' => 'Opt-ins uniques', - 'claims' => 'Réclamations', - 'claim_subjects' => 'Sujets', - 'claim_mail_templates' => 'Modèles', + 'user' => 'utilisateur', + 'activity_log' => 'journal d\'activité|journaux d\'activité', + 'services' => 'Services', + 'brands' => 'Marques', + 'questions' => 'Questions', + 'answers' => 'Réponses', + 'customers' => 'Clients', + 'singleoptins' => 'Opt-ins uniques', + 'claims' => 'Réclamations', + 'claimsubjects' => 'Sujets', + 'claimmailtemplates' => 'Modèles', ], 'common' => [ 'title' => 'Titre', diff --git a/resources/lang/fr/validation.php b/resources/lang/fr/validation.php index e2c8940..5f9da36 100644 --- a/resources/lang/fr/validation.php +++ b/resources/lang/fr/validation.php @@ -232,5 +232,6 @@ return [ 'reference' => 'référence', 'type' => 'type', 'status' => 'status', + 'label' => 'label', ], ]; diff --git a/resources/ts/bo/components/ClaimActionsComponent.vue b/resources/ts/bo/components/ClaimActionsComponent.vue index 231a841..2f732c1 100644 --- a/resources/ts/bo/components/ClaimActionsComponent.vue +++ b/resources/ts/bo/components/ClaimActionsComponent.vue @@ -60,12 +60,12 @@ for="brand" class="col-form-label" > - {{ trans.methods.__('Modifier la :model', { model: trans.methods.__("models.classes.claim_subjects") }) }} * + {{ trans.methods.__('Modifier la :model', { model: trans.methods.__("models.classes.claimsubjects") }) }} * @@ -85,7 +85,7 @@