search) { $this->searchQuery( $discounts, $request->search, // * Search in ranges function (Builder $q) use ($request) { $types = \collect(DiscountType::toArray())->filter(function (DiscountType $type) use ($request) { $test = Str::contains( Str::lower($type->label), \explode(' ', Str::lower(\trim($request->search))) ); return Str::contains( Str::lower($type->label), \explode(' ', Str::lower(\trim($request->search))) ); }); $q->orWhereIn('type', $types); }, 'discount_value' ); } //end if $this->sortQuery($discounts); $searchFields = trans('Type'); $discounts->orderBy('updated_at', 'DESC'); $discounts = $discounts->paginate(); return view('back.discounts.index', compact('discounts', 'searchFields')); } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { $existingProds = Product::all(); return view('back.discounts.create', \compact( 'existingProds' )); } /** * Store a newly created resource in storage. * * @param \App\Http\Requests\Bo\Discounts\StoreDiscountRequest $request * @return \Illuminate\Http\Response */ public function store(StoreDiscountRequest $request) { return DB::transaction(function () use ($request) { $discount = new Discount(); $discount->fill($request->validated()); if ($discount->saveOrFail()) { $discount->products()->sync($request->prods); $discount->saveOrFail(); return redirect() ->route('bo.discounts.edit', $discount) ->with('success', trans( ':model a été créé', ['model' => Str::singular(trans('models.classes.discounts'))] )); } return back(); }); } /** * Show the form for editing the specified resource. * * @param \App\Models\Discount $discount * @return \Illuminate\Http\Response */ public function edit(Discount $discount) { /** @var \Illuminate\Database\Eloquent\Collection */ $selectedProds = $discount->products; /** @var \Illuminate\Database\Eloquent\Collection */ $existingProds = Product::query()->whereNotIn('id', $selectedProds->pluck('id'))->get(); return view('back.discounts.edit', [ 'discountModel' => $discount, 'existingProds' => $existingProds, 'selectedProds' => $selectedProds ]); } /** * Update the specified resource in storage. * * @param \App\Http\Requests\Bo\Discounts\UpdateDiscountRequest $request * @param \App\Models\Discount $discount * @return \Illuminate\Http\Response */ public function update(UpdateDiscountRequest $request, Discount $discount) { return DB::transaction(function () use ($request, $discount) { // * Minicrud fill $discount->fill($request->validated()); $discount->products()->sync($request->prods); if ($discount->saveOrFail()) { return redirect() ->route('bo.discounts.edit', $discount) ->with('success', trans( ':model a été mis à jour', ['model' => Str::singular(trans('models.classes.discounts'))] )); } //end if return back(); }); } /** * Remove the specified resource from storage. * * @param \App\Models\Discount $discount * @return \Illuminate\Http\Response */ public function destroy(Discount $discount) { if ($discount->deleteOrFail()) { return redirect() ->route('bo.discounts.index') ->with('warning', trans( ':model a bien été supprimé', ['model' => Str::singular(trans('models.classes.discounts'))] )); } return back(); } }