Files
opensem/app/Http/Controllers/Shop/CustomerController.php
2025-10-04 11:59:57 +02:00

143 lines
4.1 KiB
PHP

<?php
namespace App\Http\Controllers\Shop;
use App\Repositories\Shop\CustomerAddresses;
use App\Repositories\Shop\Customers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
class CustomerController extends Controller
{
public function profile()
{
$data = Customers::editProfile(Customers::getId());
return view('Shop.Customers.profile', $data);
}
public static function checkAuth()
{
if (Customers::isNotConnected()) {
return redirect()->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();
$customer = Customers::store($data);
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);
$html = view('Shop.Customers.partials.address_item', [
'address' => $address->toArray(),
'prefix' => $prefix,
'with_name' => true,
])->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);
return redirect()->route('Shop.Customers.edit')
->with('growl', [__('Adresse supprimée.'), 'success']);
}
}