where('tenant_id', tenant('id'))->firstOrFail(); $this->authorize('view', $settingsModel); return view('back::pages.settings.edit', compact('settingsModel')); } /** * Update the specified resource in storage. * * @param \App\Http\Requests\Bo\Settings\UpdateSettingsRequest $request * @return \Illuminate\Http\RedirectResponse */ public function update(UpdateSettingsRequest $request): \Illuminate\Http\RedirectResponse { return DB::transaction(function () use ($request) { $data = $request->validated(); // * Assign parsed Web coupon objects Arr::set($data, 'web_coupons', collect(Arr::get($data, 'web_coupons'))->filter() ->map(fn (array $coupon) => $this->parseWebCoupon($coupon)) ->filter()->all()); $settingsModel = Settings::query()->where('tenant_id', tenant('id'))->firstOrFail(); $settingsModel->fill($data); if ($settingsModel->saveOrFail()) { return redirect() ->route('bo.settings.edition', ['tenant' => \tenant()]) ->with('success', trans( 'crud.messages.has_been_updated', ['model' => Str::singular(__('models.classes.settings'))] )); } return redirect() ->back() ->with('error', trans( 'crud.messages.cannot_be_updated', ['model' => Str::singular(__('models.classes.settings'))] )); }); } /** * Try to parse webCoupon * * @param array $coupon * @return \App\Lib\Discount|null */ private function parseWebCoupon(array $coupon): Discount|null { /** @var \Illuminate\Http\UploadedFile|string */ $picture = Arr::get($coupon, 'picture'); if (is_object($picture) and ($picture instanceof \Illuminate\Http\UploadedFile)) { $picture = FileStorageHelper::storeFile( new Settings(), $picture, true, 'web-coupon.' . $picture->extension() ); } try { return Discount::make( Arr::get($coupon, 'web_coupon_identifiant'), Arr::get($coupon, 'percentage'), Arr::get($coupon, 'face_value'), Arr::get($coupon, 'valid_on'), $picture, ); } catch (\RuntimeException | \TypeError) { return null; } } }