avance del registro de negocio con google mapas

This commit is contained in:
Jose Sanchez
2023-08-23 15:35:52 -04:00
parent e75531dbea
commit 5e111b437a
7 changed files with 290 additions and 81 deletions

3
.env
View File

@@ -156,3 +156,6 @@ MAILGUN_SECRET=""
RECAPTCHA_SITE_KEY=6Le0OJsnAAAAALJsc4xJaNot1HfSmHpYgJYDzTYT
RECAPTCHA_SECRET_KEY=6Le0OJsnAAAAAIVMI3KwkxeLsrhI8GF7BjRX9S
GOOGLE_MAPS_API_KEY=AIzaSyClSVgBcIeXFcWA0Rt-6z6OWoJHrJPl-tI

View File

@@ -4,6 +4,7 @@ namespace App\Http\Controllers;
use App\Mail\VerificationEmail;
use App\Models\Category;
use App\Models\CategoryTranslation;
use App\Models\Shop;
use App\Models\User;
use Illuminate\Http\Request;
@@ -25,9 +26,12 @@ class TypeBusinessController extends Controller
public function index()
{
$categories = Category::all();
$categories = CategoryTranslation::all();
return view('frontend.registro-comercio.views.business.index', compact('categories'));
$apiKey = env('GOOGLE_MAPS_API_KEY');
return view('frontend.registro-comercio.views.business.index', compact('categories', 'apiKey'));
}
@@ -47,49 +51,97 @@ class TypeBusinessController extends Controller
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request, User $user)
public function store(Request $request, User $user, Shop $shop)
{
// Validación de los campos de registro
$validator = Validator::make($request->all(), [
// $validator = Validator::make($request->all(), [
// 'name' => ['required'],
// 'address' => ['required'],
// 'categories_id' => ['required'],
// 'email' => ['required', 'string', 'email', 'max:255', 'unique:'.User::class, 'regex:/^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+.(com|do|net|com.do)$/'],
// 'password' => ['required', 'confirmed', Password::defaults()],
// 'terms' => ['required'], // Agrega esta línea para hacer el campo 'terms' requerido
// 'g-recaptcha-response' => ['required', function ($attribute, $value, $fail) {
// $recaptcha = new Recaptcha(env('RECAPTCHA_SECRET_KEY'));
// $recaptcha->verify($value);
// }],
// ]);
$validator = Validator::make($request->all(), [
'name' => ['required'],
'address' => ['required'],
'categories_id' => ['required'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:'.User::class, 'regex:/^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+.(com|do|net|com.do)$/'],
'email' => [
'required',
'string',
'email',
'max:255',
'unique:'.User::class,
//VALIDA EL TIPO DE extencion del dominio permitido
'regex:/^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+.(com|do|net|com.do)$/',
//valida si el correo existe, a traves de los dns
//La función filter_var($value, FILTER_VALIDATE_EMAIL) verifica si la cadena de correo electrónico es una dirección de correo electrónico válida según el filtro FILTER_VALIDATE_EMAIL de PHP.
//La función checkdnsrr($domain, 'MX') verifica si el dominio del correo electrónico tiene registros MX en el sistema de nombres de dominio (DNS). Esto se hace utilizando la función checkdnsrr de PHP con el tipo de registro 'MX'.
//Los tipos de registro DNS válidos son: 'A', 'MX', 'NS', 'SOA', 'PTR', 'CNAME', 'AAAA', 'A6', 'SRV', 'NAPTR', 'TXT', 'ANY'.
function ($attribute, $value, $fail) {
$domain = explode('@', $value)[1];
if (!filter_var($value, FILTER_VALIDATE_EMAIL) || !checkdnsrr($domain, 'MX')) {
$fail('El correo electrónico no existe.');
}
},
],
'password' => ['required', 'confirmed', Password::defaults()],
'terms' => ['required'], // Agrega esta línea para hacer el campo 'terms' requerido
'g-recaptcha-response' => ['required', function ($attribute, $value, $fail) {
$recaptcha = new Recaptcha(env('RECAPTCHA_SECRET_KEY'));
$recaptcha->verify($value);
}],
'terms' => ['required'],
'g-recaptcha-response' => [
'required',
function ($attribute, $value, $fail) {
$recaptcha = new Recaptcha(env('RECAPTCHA_SECRET_KEY'));
$recaptcha->verify($value);
},
],
]);
// if ($validator->fails()) {
// // Si la validación falla, puedes redirigir o devolver una respuesta con los errores
// return redirect()->back()->withErrors($validator)->withInput();
// }
if ($validator->fails()) {
// Si la validación falla, puedes redirigir o devolver una respuesta con los errores
return redirect()->back()->withErrors($validator)->withInput();
}
// $confirmation_code = Str::random(25);
$confirmation_code = Str::random(25);
// $user = new User();
// $user->email = $request->input('email');
// $user->password = Hash::make($request->input('password'));
// $user->user_type = 'seller';
// $user->confirmation_code = $confirmation_code;
// $user->save();
$user = new User();
$user->email = $request->input('email');
$user->password = Hash::make($request->input('password'));
$user->user_type = 'seller';
$user->confirmation_code = $confirmation_code;
$user->category_translation_id = $request->input('categories_id');
$user->save();
// Guardar los campos en el modelo Shop
$shop->user_id = $user->id;
$shop->name = $request->name;
$shop->address = $request->address;
$shop->delivery_pickup_latitude = $request->latitude;
$shop->delivery_pickup_longitude = $request->longitude;
// Aquí puedes guardar otros campos si los tienes
// Guardar el modelo Shop en la base de datos
$shop->save();
// Mail::to($user->email)->send(new VerificationEmail($user));
Mail::to($user->email)->send(new VerificationEmail($user));
// // Intentar iniciar sesión automáticamente
// if (Auth::attempt($request->only('email', 'password'))) {
// if (Auth::user()->email_verified_at) {
// // La cuenta está verificada, redirige a la página deseada
// return redirect()->route('shop.view.signup.complete');
// } else {
// // La cuenta no está verificada, redirige a la página de verificación de correo electrónico
// return redirect()->route('shop.view.email.verification');
// }
// }
// Intentar iniciar sesión automáticamente
if (Auth::attempt($request->only('email', 'password'))) {
if (Auth::user()->email_verified_at) {
// La cuenta está verificada, redirige a la página deseada
return redirect()->route('seller.dashboard');
} else {
// La cuenta no está verificada, redirige a la página de verificación de correo electrónico
return redirect()->route('shop.view.email.verification');
}
}
}
/**
@@ -137,41 +189,41 @@ class TypeBusinessController extends Controller
//
}
public function business_complete_index()
{
$user = auth()->user();
// public function business_complete_index()
// {
// $user = auth()->user();
return view('frontend.registro-comercio.views.business.business_complete', compact('user'));
}
// return view('frontend.registro-comercio.views.business.business_complete', compact('user'));
// }
public function business_complete_store(Request $request, Shop $shop)
{
// Validación de los campos
$validator = Validator::make($request->all(), [
'name' => ['required'],
'address' => ['required'],
]);
// public function business_complete_store(Request $request, Shop $shop)
// {
// // Validación de los campos
// $validator = Validator::make($request->all(), [
// 'name' => ['required'],
// 'address' => ['required'],
// ]);
// Si la validación falla, puedes redirigir de vuelta con los errores
if ($validator->fails()) {
return redirect()->back()->withErrors($validator)->withInput();
}
// // Si la validación falla, puedes redirigir de vuelta con los errores
// if ($validator->fails()) {
// return redirect()->back()->withErrors($validator)->withInput();
// }
// Guardar los campos en el modelo Shop
$shop->user_id = $request->user()->id;
$shop->name = $request->name;
$shop->address = $request->address;
// Aquí puedes guardar otros campos si los tienes
// // Guardar los campos en el modelo Shop
// $shop->user_id = $request->user()->id;
// $shop->name = $request->name;
// $shop->address = $request->address;
// // Aquí puedes guardar otros campos si los tienes
// Guardar el modelo Shop en la base de datos
$shop->save();
// // Guardar el modelo Shop en la base de datos
// $shop->save();
// Marcar el campo "shop_verified_at" como verificado en el modelo User
$request->user()->shop_verified_at = now(); // Puedes usar la función "now()" para establecer la fecha y hora actual
// // Marcar el campo "shop_verified_at" como verificado en el modelo User
// $request->user()->shop_verified_at = now(); // Puedes usar la función "now()" para establecer la fecha y hora actual
// Guardar el modelo User en la base de datos
$request->user()->save();
// // Guardar el modelo User en la base de datos
// $request->user()->save();
return redirect()->route('seller.dashboard');
}
// return redirect()->route('seller.dashboard');
// }
}

View File

@@ -164,6 +164,10 @@
}
</style>
<script src='https://maps.google.com/maps/api/js?libraries=places&region=uk&language=en&sensor=true&key={{ env("GOOGLE_MAPS_API_KEY") }}'></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
</head>
@@ -254,11 +258,12 @@
<div class="form-group mb-4">
<label for="categories_id" id="categoryLabel">Categoría del negocio</label>
<select name="categories_id" class="form-control @error('categories_id') is-invalid @enderror" id="categories_id">
<option value="" {{ old('categories_id') == '' ? 'selected' : '' }}>Seleccione una categoría</option>
<option value="" selected>Seleccione una categoría</option>
@foreach ($categories as $category)
<option value="{{ $category->value }}" {{ old('categories_id', optional($category->value)) == $category->value ? 'selected' : '' }}>{{ $category->name }}</option>
<option value="{{ $category->id }}" {{old('categories_id') == $category->id ? 'selected' : ''}}>{{ $category->name }}</option>
@endforeach
</select>
@error('categories_id')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
@@ -274,14 +279,47 @@
</div>
<div class="form-group mb-4">
{{-- <div class="form-group mb-4">
<label for="address" id="addressLabel">Dirección</label>
<input type="text" name="address" id="address" placeholder="Dirección" class="form-control address @error('address') is-invalid @enderror" value="{{ old('address') }}">
@error('address')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div> --}}
<div class="form-group mb-60">
<label for="address" id="addressLabel">Buscar dirección o selecciona en el Mapa</label>
<input class="form-control" id="searchTextField" type="text" size="50" name="address" value="{{ old('address') }}">
@if ($errors->has('address'))
<p style="font-size: 80%;" class="text-danger">{{ $errors->first('address') }}</p>
@endif
<div class="row">
<div class="col" style="display: none;">
<label for="latitude">Latitude</label>
<input name="latitude" class="form-control MapLat" value="{{ old('latitude') }}" type="text" placeholder="Latitude">
</div>
<div class="col" style="display: none;">
<label for="longitude">Longitude</label>
<input name="longitude" class="form-control MapLon" value="{{ old('longitude') }}" type="text" placeholder="Longitude">
</div>
</div>
<div id="map_canvas" style="height: 350px;width: 500px;margin: 0.6em;"></div>
</div>
<br>
<div class="form-group mb-4">
<div class="form-check">
@@ -291,10 +329,7 @@
</label>
</div>
@if ($errors->has('terms'))
{{ $errors->first('terms') }}
<p style="font-size: 80%;" class="text-danger">{{ $errors->first('terms') }}</p>
<p style="font-size: 80%;" class="text-danger">{{ $errors->first('terms') }}</p>
@endif
</div>
@@ -385,8 +420,8 @@
<!-- Optional JavaScript -->
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
{{-- <script src="{{ static_asset('assets/registrocomercio/registro-form/assets/js/jquery.min.js') }}"></script> --}}
<script src="https://code.jquery.com/jquery-3.7.0.min.js"
integrity="sha256-2Pmvv0kuTBOenSvLm6bvfBSSHrUJ+3A7x6P5Ebd07/g=" crossorigin="anonymous"></script>
{{-- <script src="https://code.jquery.com/jquery-3.7.0.min.js"
integrity="sha256-2Pmvv0kuTBOenSvLm6bvfBSSHrUJ+3A7x6P5Ebd07/g=" crossorigin="anonymous"></script> --}}
<script src="{{ static_asset('assets/registrocomercio/registro-form/assets/js/popper.min.js') }}"></script>
<script src="{{ static_asset('assets/registrocomercio/registro-form/assets/js/bootstrap.min.js') }}"></script>
<script src="{{ static_asset('assets/registrocomercio/registro-form/assets/js/owl.carousel.min.js') }}"></script>
@@ -419,3 +454,90 @@
});
</script>
<script>
$(function () {
var lat = 18.7009047,
lng = -70.1654584,
latlng = new google.maps.LatLng(lat, lng),
image = 'https://www.google.com/intl/en_us/mapfiles/ms/micons/blue-dot.png';
//zoomControl: true,
//zoomControlOptions: google.maps.ZoomControlStyle.LARGE,
var mapOptions = {
center: new google.maps.LatLng(lat, lng),
zoom: 10,
mapTypeId: google.maps.MapTypeId.ROADMAP,
panControl: true,
panControlOptions: {
position: google.maps.ControlPosition.TOP_RIGHT
},
zoomControl: true,
zoomControlOptions: {
style: google.maps.ZoomControlStyle.LARGE,
position: google.maps.ControlPosition.TOP_left
}
},
map = new google.maps.Map(document.getElementById('map_canvas'), mapOptions),
marker = new google.maps.Marker({
position: latlng,
map: map,
icon: image
});
var input = document.getElementById('searchTextField');
var autocomplete = new google.maps.places.Autocomplete(input, {
types: ["geocode"]
});
autocomplete.bindTo('bounds', map);
var infowindow = new google.maps.InfoWindow();
google.maps.event.addListener(autocomplete, 'place_changed', function (event) {
infowindow.close();
var place = autocomplete.getPlace();
if (place.geometry.viewport) {
map.fitBounds(place.geometry.viewport);
} else {
map.setCenter(place.geometry.location);
map.setZoom(17);
}
moveMarker(place.name, place.geometry.location);
$('.MapLat').val(place.geometry.location.lat());
$('.MapLon').val(place.geometry.location.lng());
});
google.maps.event.addListener(map, 'click', function (event) {
$('.MapLat').val(event.latLng.lat());
$('.MapLon').val(event.latLng.lng());
infowindow.close();
var geocoder = new google.maps.Geocoder();
geocoder.geocode({
"latLng":event.latLng
}, function (results, status) {
console.log(results, status);
if (status == google.maps.GeocoderStatus.OK) {
console.log(results);
var lat = results[0].geometry.location.lat(),
lng = results[0].geometry.location.lng(),
placeName = results[0].address_components[0].long_name,
latlng = new google.maps.LatLng(lat, lng);
moveMarker(placeName, latlng);
$("#searchTextField").val(results[0].formatted_address);
$("input[name='address']").val(results[0].formatted_address);
$("input[name='latitude']").val(latlng.lat());
$("input[name='longitude']").val(latlng.lng());
}
});
});
function moveMarker(placeName, latlng) {
marker.setIcon(image);
marker.setPosition(latlng);
infowindow.setContent(placeName);
//infowindow.open(map, marker);
}
});
</script>

View File

@@ -78,7 +78,7 @@
Correo verificado correctamente.
</div>
@if($user->user_type == 'customer')
{{-- @if($user->user_type == 'customer')
<script>
setTimeout(function() {
window.location.href = "{{ route('dashboard') }}";
@@ -87,17 +87,47 @@
@elseif($user->user_type == 'seller')
<script>
setTimeout(function() {
window.location.href = "{{ route('register.business.business_complete_index') }}";
window.location.href = "{{ route('seller.dashboard') }}";
}, 3000); // Cambia el valor 3000 a la cantidad de milisegundos que deseas que se redirija automáticamente
</script>
@elseif($user->user_type == 'repair')
<script>
setTimeout(function() {
window.location.href = "{{ route('register.workshops.workshop_complete_index') }}";
window.location.href = "{{ route('workshop.dashboard') }}";
}, 3000); // Cambia el valor 3000 a la cantidad de milisegundos que deseas que se redirija automáticamente
</script>
@endif --}}
@if(auth()->check()) // Verifica si el usuario está autenticado
@if($user->user_type == 'customer')
<script>
setTimeout(function() {
window.location.href = "{{ route('dashboard') }}";
}, 3000); // Cambia el valor 3000 a la cantidad de milisegundos que deseas que se redirija automáticamente
</script>
@elseif($user->user_type == 'seller')
<script>
setTimeout(function() {
window.location.href = "{{ route('seller.dashboard') }}";
}, 3000); // Cambia el valor 3000 a la cantidad de milisegundos que deseas que se redirija automáticamente
</script>
@elseif($user->user_type == 'repair')
<script>
setTimeout(function() {
window.location.href = "{{ route('workshop.dashboard') }}";
}, 3000); // Cambia el valor 3000 a la cantidad de milisegundos que deseas que se redirija automáticamente
</script>
@endif
@else
<script>
setTimeout(function() {
window.location.href = "{{ route('home') }}";
}, 3000); // Cambia el valor 3000 a la cantidad de milisegundos que deseas que se redirija automáticamente
</script>
@endif
@endif

View File

@@ -96,13 +96,13 @@
@elseif($user->user_type == 'seller')
<script>
setTimeout(function() {
window.location.href = "{{ route('register.business.business_complete_index') }}";
window.location.href = "{{ route('seller.dashboard') }}";
}, 3000);
</script>
@elseif($user->user_type == 'repair')
<script>
setTimeout(function() {
window.location.href = "{{ route('register.workshop.workshop_complete_index') }}";
window.location.href = "{{ route('workshop.dashboard') }}";
}, 3000);
</script>
@endif

View File

@@ -110,8 +110,8 @@ Route::prefix('register')->group(function () {
// Route::put('register/business/{id}', [TypeBusinessController::class, 'update'])->name('register.business.update');
// Route::delete('register/business/{id}', [TypeBusinessController::class, 'destroy'])->name('register.business.destroy');
Route::get('business_complete', [TypeBusinessController::class, 'business_complete_index'])->name('register.business.business_complete_index');
Route::post('business_store', [TypeBusinessController::class, 'business_complete_store'])->name('register.business.business_complete_store');
// Route::get('business_complete', [TypeBusinessController::class, 'business_complete_index'])->name('register.business.business_complete_index');
// Route::post('business_store', [TypeBusinessController::class, 'business_complete_store'])->name('register.business.business_complete_store');
});
//esto es para registrar a los usuario de tipo TALLER

View File

@@ -43,12 +43,14 @@ class EnsureEmailIsVerified
return redirect()->route('shop.view.email.verification');
} elseif ($user && $user->user_type == 'repair' && !$user->email_verified_at) {
return redirect()->route('shop.view.email.verification');
} elseif ($user && $user->user_type == 'seller' && $user->email_verified_at && !$user->shop_verified_at) {
return redirect()->route('register.business.business_complete_index');
} elseif ($user && $user->user_type == 'repair' && $user->email_verified_at && !$user->shop_verified_at) {
return redirect()->route('register.workshop.workshop_complete_index');
}
// elseif ($user && $user->user_type == 'seller' && $user->email_verified_at && !$user->shop_verified_at) {
// return redirect()->route('register.business.business_complete_index');
// } elseif ($user && $user->user_type == 'repair' && $user->email_verified_at && !$user->shop_verified_at) {
// return redirect()->route('register.workshop.workshop_complete_index');
// }
return $next($request);
}
}