diff --git a/app/Http/Controllers/Bo/InvoiceController.php b/app/Http/Controllers/Bo/InvoiceController.php index fee33fa..716a754 100644 --- a/app/Http/Controllers/Bo/InvoiceController.php +++ b/app/Http/Controllers/Bo/InvoiceController.php @@ -79,7 +79,7 @@ class InvoiceController extends Controller */ public function create(Invoice $invoice): \Illuminate\Contracts\View\View { - $packageModels = Package::get(); + $packageModels = Package::where('published', true)->get(); $taskRowModel = Invoice::getTaskStructure(); $siteModels = Site::orderBy('name', 'ASC')->get(); $companyModels = Company::get(); diff --git a/app/Http/Controllers/Bo/PackageController.php b/app/Http/Controllers/Bo/PackageController.php index dd197cd..df6956e 100644 --- a/app/Http/Controllers/Bo/PackageController.php +++ b/app/Http/Controllers/Bo/PackageController.php @@ -23,6 +23,15 @@ class PackageController extends Controller /** @var \Illuminate\Database\Eloquent\Builder $packageModels */ $packageModels = Package::query(); + $status = $request->status; + if ($status === null) { + $packageModels->where('published', true); + } elseif ($status === '0') { + $packageModels->where('published', false); + } elseif ($status === '1') { + $packageModels->where('published', true); + } + /** @var string $search Search field */ $search = $request->search; if ($search) { @@ -42,7 +51,7 @@ class PackageController extends Controller /** Custom pagination */ $packageModels = $this->customPaginate($packageModels, $request->pagination); - return view('bo.pages.packages.index', compact('packageModels', 'search', 'searchFields')); + return view('bo.pages.packages.index', compact('packageModels', 'search', 'searchFields', 'status')); } /** @@ -153,4 +162,16 @@ class PackageController extends Controller )); }); } + + /** + * Change model published. + * + * @param \App\Models\Package $package + * @return \Illuminate\Http\RedirectResponse + */ + public function changePublished(Package $package) + { + $package->update(['published' => !$package->getOriginal('published')]); + return redirect()->back()->with('success', trans(__('crud.messages.publish_status_saved'))); + } } diff --git a/app/Http/Requests/Bo/Packages/StorePackageRequest.php b/app/Http/Requests/Bo/Packages/StorePackageRequest.php index 179cf88..7445846 100644 --- a/app/Http/Requests/Bo/Packages/StorePackageRequest.php +++ b/app/Http/Requests/Bo/Packages/StorePackageRequest.php @@ -17,6 +17,18 @@ class StorePackageRequest extends FormRequest return Gate::allows('isAdmin'); } + /** + * Prepare the data for validation. + * + * @return void + */ + protected function prepareForValidation(): void + { + $this->merge([ + 'published' => $this->boolean('published'), + ]); + } + /** * Get the validation rules that apply to the request. * @@ -27,6 +39,7 @@ class StorePackageRequest extends FormRequest return [ 'name' => 'required|string|min:3|max:255', 'amount' => 'required|numeric|min:0|regex:/^\d+(\.\d{1,2})?$/', + 'published' => 'required|boolean', ]; } @@ -40,6 +53,7 @@ class StorePackageRequest extends FormRequest return [ 'name' => trans('Nom'), 'amount' => trans('Montant (par jour)'), + 'published' => trans('Publication') ]; } } diff --git a/app/Models/Package.php b/app/Models/Package.php index 947e30b..33c3de3 100644 --- a/app/Models/Package.php +++ b/app/Models/Package.php @@ -28,5 +28,16 @@ class Package extends Model protected $fillable = [ 'name', 'amount', + 'published' ]; + + /** + * The attributes that should be cast. + * + * @var array + */ + protected $casts = [ + 'published' => 'boolean', + ]; + } diff --git a/database/migrations/2026_02_25_171152_alter_packages_table.php b/database/migrations/2026_02_25_171152_alter_packages_table.php new file mode 100644 index 0000000..9d534fd --- /dev/null +++ b/database/migrations/2026_02_25_171152_alter_packages_table.php @@ -0,0 +1,28 @@ +boolean('published')->after('amount'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('packages', function (Blueprint $table) { + $table->dropColumn('published'); + }); + } +}; diff --git a/resources/lang/en/validation.php b/resources/lang/en/validation.php index add290c..a06cab5 100644 --- a/resources/lang/en/validation.php +++ b/resources/lang/en/validation.php @@ -221,6 +221,8 @@ return [ 'order' => 'order', 'priority' => 'priority', 'default' => 'default', - 'date_mep' => 'Desired Launch' + 'date_mep' => 'Desired Launch', + 'published' => 'Publication', + 'all' => 'All' ] ]; diff --git a/resources/lang/fr/validation.php b/resources/lang/fr/validation.php index 571fd1f..25eb798 100644 --- a/resources/lang/fr/validation.php +++ b/resources/lang/fr/validation.php @@ -257,6 +257,8 @@ return [ 'order' => 'ordre', 'priority' => 'priorité', 'default' => 'défaut', - 'date_mep' => 'MEP souhaitée' + 'date_mep' => 'MEP souhaitée', + 'published' => 'publication', + 'all' => 'Tout' ] ]; diff --git a/resources/views/bo/modules/change-published-status.blade.php b/resources/views/bo/modules/change-published-status.blade.php new file mode 100644 index 0000000..faa661d --- /dev/null +++ b/resources/views/bo/modules/change-published-status.blade.php @@ -0,0 +1,14 @@ + +
+ @csrf + @method('PATCH') + +
+ diff --git a/resources/views/bo/pages/packages/form-inputs.blade.php b/resources/views/bo/pages/packages/form-inputs.blade.php index b41edb1..bc31bc1 100644 --- a/resources/views/bo/pages/packages/form-inputs.blade.php +++ b/resources/views/bo/pages/packages/form-inputs.blade.php @@ -61,6 +61,28 @@ + {{-- PUBLISHED --}} +
+
+ {{ Str::ucfirst(__('validation.custom.published')) }} +
+
+ @include('bo.partials.inputs.tinyint-boolean', [ + 'id' => 'packagePublished', + 'label' => __(':field du :model', [ + 'field' => str(__('validation.custom.published'))->ucFirst(), + 'model' => __('models.classes.packages'), + ]), + 'name' => 'published', + 'model' => $packageModel ?? null, + 'helper' => __('validation.boolean', [ + 'attribute' => str(__('validation.custom.published'))->ucFirst() + ]), + ]) +
+
+
+
@push('scripts') diff --git a/resources/views/bo/pages/packages/index.blade.php b/resources/views/bo/pages/packages/index.blade.php index 7628674..a96d67d 100644 --- a/resources/views/bo/pages/packages/index.blade.php +++ b/resources/views/bo/pages/packages/index.blade.php @@ -6,10 +6,32 @@ @section('content')
@include('breadcrumbs.breadcrumb-body') - - - +
+
+ + @push('scripts') + + @endpush + + + +
+
@include('bo.modules.search-bar') @@ -19,6 +41,7 @@ 'cols' => [ 'name' => Str::ucfirst(__('validation.attributes.name')), 'amount' => Str::ucfirst(__('validation.attributes.day')), + 'published' => Str::ucfirst(__('validation.custom.published')), ], ]) @@ -27,6 +50,10 @@ + @include('bo.modules.change-published-status', [ + 'routeName' => 'packages', + 'model' => $packageModel, + ])
{{ $packageModel->name }} {{ $packageModel->amount }}
diff --git a/routes/web-bo.php b/routes/web-bo.php index 39db39c..c303d5e 100644 --- a/routes/web-bo.php +++ b/routes/web-bo.php @@ -58,6 +58,8 @@ Route::middleware('admin-secure') ->middleware('htmlsanitize:template') ->parameters(['ticket_types' => 'ticket_type']); Route::resource('packages', PackageController::class)->except('show'); + Route::patch('/packages/{package}/change-published', [PackageController::class, 'changePublished']) + ->name('packages.change-published'); Route::resource('invoices', InvoiceController::class) ->withoutMiddleware('htmlsanitize') ->middleware(['htmlsanitize:comment']);