<?php
namespace App\Http\Controllers;
use App\Models\Address;
use App\Models\City;
use App\Models\State;
use Auth;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
class AddressController extends Controller {
public function store(Request $request) {
$validator = Validator::make($request->all(), [
'address' => ['required'],
'phone' => [
'required',
'regex:/^\+1[0-9]{10}$/',
// Rule::unique('users')->ignore(auth()->user()->id),
],// Agregamos la regla unique para verificar que el número de teléfono no exista en la tabla "users
]);
/*if ($validator->fails()) {
// Si la validación falla, puedes redirigir o devolver una respuesta con los errores
flash(translate('Error de validacion, formulario crear direccion.'))->warning();
return redirect()->back()->withErrors($validator)->withInput();
}*/
if ($validator->fails()) {
$error = $validator->errors()->first();
return response()->json([
'state' => 'error',
'msg' => 'Error de validación, '. $error
], 200); // 400 Bad Request
}
$addressCount = Address::where('user_id', auth()->user()->id)->count();
if ($addressCount >= 3) {
return response()->json([
'state' => 'error',
'msg' => 'No puedes tener más de 3 direcciones registradas.'
], 200); // 400 Bad Request
}
$address = new Address();
$address->user_id = auth()->user()->id;
$address->phone = $request->phone;
$address->address = $request->address;
$address->country = $request->country;
$address->state = $request->state;
$address->city = $request->city;
$address->postalCode = $request->postalCode;
$address->latitude = $request->latitude;
$address->longitude = $request->longitude;
// Verificar si existe alguna dirección con set_default en 1
$existingAddress = Address::where('user_id', auth()->user()->id)
->where('set_default', 1)
->first();
if ($existingAddress) {
// Cambiar el set_default de la dirección existente a 0
$existingAddress->set_default = 0;
$existingAddress->save();
}
$address->set_default = 1;
$address->save();
return response()->json([
'state' => 'success',
'msg' => 'Dirección creada correctamente'
], 200); // 200 OK
/*flash(translate('Address info Stored successfully'))->success();
return back();*/
}
public function edit($id) {
$data['address_data'] = Address::findOrFail($id);
$data['states'] = State::where('status', 1)->where('country_id', $data['address_data']->country_id)->get();
$data['cities'] = City::where('status', 1)->where('state_id', $data['address_data']->state_id)->get();
$returnHTML = view('frontend.partials.address_edit_modal', $data)->render();
return response()->json(array('data' => $data, 'html' => $returnHTML));
}
public function update(Request $request, $id) {
$validator = Validator::make($request->all(), [
'address' => ['required'],
'phone' => [
'required',
'regex:/^\+1[0-9]{10}$/',
],
]);
/*if ($validator->fails()) {
return redirect()->back()->withErrors($validator)->withInput();
}*/
if ($validator->fails()) {
$error = $validator->errors()->first();
return response()->json([
'state' => 'error',
'msg' => 'Error de validación, '. $error
], 200); // 400 Bad Request
}
$address = Address::findOrFail($id); // Buscar la dirección actual por su ID
$address->address = $request->address;
$address->phone = $request->phone;
$address->country = $request->country;
$address->state = $request->state;
$address->city = $request->city;
$address->postalCode = $request->postalCode;
$address->latitude = $request->latitude;
$address->longitude = $request->longitude;
$address->save();
/*flash(translate('Address info updated successfully'))->success();
return back();*/
return response()->json([
'state' => 'success',
'msg' => 'Dirección editada correctamente'
], 200); // 200 OK
}
public function destroy($id) {
$address = Address::findOrFail($id);
if (!$address->set_default) {
$address->delete();
return back();
}
flash(translate('Default address cannot be deleted'))->warning();
return back();
}
public function getStates(Request $request) {
$states = State::where('status', 1)->where('country_id', $request->country_id)->get();
$html = '<option value="">' . translate("Select State") . '</option>';
foreach ($states as $state) {
$html .= '<option value="' . $state->id . '">' . $state->name . '</option>';
}
echo json_encode($html);
}
public function getCities(Request $request) {
$cities = City::where('status', 1)->where('state_id', $request->state_id)->get();
$html = '<option value="">' . translate("Select City") . '</option>';
foreach ($cities as $row) {
$html .= '<option value="' . $row->id . '">' . $row->getTranslation('name') . '</option>';
}
echo json_encode($html);
}
public function set_default($id) {
foreach (Auth::user()->addresses as $key => $address) {
$address->set_default = 0;
$address->save();
}
$address = Address::findOrFail($id);
$address->set_default = 1;
$address->save();
return back();
}
}
|