route('Shop.login'); } } public function modalProfile($id = false) { $data = [ 'customer' => Customers::get($id), ]; return view('Shop.Customers.partials.registration', $data); } public function edit() { $data = [ 'customer' => Customers::edit(Customers::getId()), ]; return view('Shop.Customers.edit', $data); } public function storeProfileAjax(Request $request) { $data = $request->all(); if (array_key_exists('default_sale_channel_id', $data)) { $customer = Customers::get(Customers::getId()); $newSaleChannelId = (int) $data['default_sale_channel_id']; $currentSaleChannelId = (int) ($customer->default_sale_channel_id ?? 0); if ($newSaleChannelId && $newSaleChannelId !== $currentSaleChannelId && ShopCart::count() > 0) { $cartItems = ShopCart::getContent(); $unavailable = []; foreach ($cartItems as $item) { $offerId = (int) $item->id; if (! Offers::getPrice($offerId, 1, $newSaleChannelId)) { $offer = Offers::get($offerId, ['article']); $unavailable[] = $offer->article->name ?? $item->name; if (count($unavailable) >= 3) { break; } } } if (! empty($unavailable)) { $list = implode(', ', $unavailable); return response()->json([ 'error' => 1, 'message' => __('Certains articles de votre panier ne sont pas disponibles dans ce canal : :products. Merci de finaliser votre commande ou de retirer ces articles avant de changer de canal.', ['products' => $list]), ], 422); } } } $customerId = $data['id'] ?? Customers::getId(); $requestedDefaultSaleChannelId = $data['default_sale_channel_id'] ?? null; $hasDefaultSaleChannelColumn = Schema::hasColumn('shop_customers', 'default_sale_channel_id'); if (! $hasDefaultSaleChannelColumn) { unset($data['default_sale_channel_id']); } $customer = Customers::store($data); if (! $customer) { return response()->json([ 'error' => 1, 'message' => __('Impossible de mettre à jour votre profil pour le moment.'), ], 422); } if ($hasDefaultSaleChannelColumn && $requestedDefaultSaleChannelId !== null) { Customers::setDefaultSaleChannel($customerId, $requestedDefaultSaleChannelId); } $freshCustomer = Customers::get($customerId, ['sale_channels']); Customers::guard()->setUser($freshCustomer); if ($requestedDefaultSaleChannelId !== null) { session(['shop.default_sale_channel_id' => $requestedDefaultSaleChannelId]); Baskets::refreshPrices((int) $requestedDefaultSaleChannelId); } return response()->json(['error' => 0]); } public function store(Request $request) { $data = $request->all(); $customer = Customers::storeFull($data); return redirect()->route('Shop.Customers.edit'); } public function storeAddress(Request $request) { if (Customers::isNotConnected()) { return response()->json(['message' => __('Authentification requise.')], 403); } $prefix = $request->input('prefix'); $types = ['deliveries' => 1, 'invoices' => 2]; if (! array_key_exists($prefix, $types)) { return response()->json(['message' => __('Type d\'adresse inconnu.')], 422); } $addressData = $request->input($prefix, []); $validator = Validator::make($addressData, [ 'name' => ['nullable', 'string', 'max:150'], 'address' => ['required', 'string', 'max:255'], 'address2' => ['nullable', 'string', 'max:255'], 'zipcode' => ['required', 'string', 'max:30'], 'city' => ['required', 'string', 'max:255'], ], [ 'address.required' => __('Merci de renseigner l\'adresse.'), 'zipcode.required' => __('Merci de renseigner le code postal.'), 'city.required' => __('Merci de renseigner la ville.'), ]); if ($validator->fails()) { return response()->json([ 'message' => __('Merci de vérifier les informations saisies.'), 'errors' => $validator->errors(), ], 422); } $data = $validator->validated(); $customerId = Customers::getId(); $data['customer_id'] = $customerId; $data['type'] = $types[$prefix]; if (empty($data['name'])) { $data['name'] = Customers::getName($customerId); } $address = CustomerAddresses::store($data); CustomerAddresses::setDefault($customerId, $address->id, $types[$prefix]); $html = view('Shop.Customers.partials.address_item', [ 'address' => $address->toArray(), 'prefix' => $prefix, 'with_name' => true, 'selected' => $address->id, ])->render(); return response()->json([ 'success' => true, 'html' => $html, 'message' => __('Adresse enregistrée.'), 'id' => $address->id, ]); } public function delete_address($id) { $address = CustomerAddresses::get($id); if (! $address || (int) $address->customer_id !== (int) Customers::getId()) { abort(404); } $remaining = CustomerAddresses::getModel() ->byCustomer($address->customer_id) ->byType($address->type) ->count(); if ($remaining <= 1) { return redirect()->route('Shop.Customers.edit') ->with('growl', [__('Vous devez conserver au moins une adresse par type.'), 'warning']); } CustomerAddresses::destroy($id); CustomerAddresses::ensureDefault($address->customer_id, $address->type); return redirect()->route('Shop.Customers.edit') ->with('growl', [__('Adresse supprimée.'), 'success']); } }