Actualización de lector con código qr
This commit is contained in:
@@ -2,10 +2,11 @@
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Routing\Controller;
|
||||
use App\Models\Plantel;
|
||||
use App\Models\User;
|
||||
use App\Models\Plantel;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Spatie\Permission\Models\Role;
|
||||
|
||||
class UserController extends Controller
|
||||
@@ -29,11 +30,11 @@ class UserController extends Controller
|
||||
public function create()
|
||||
{
|
||||
$plantels = Plantel::where('status','=','1')->get();
|
||||
$codigos = DB::table('area_code')->get();
|
||||
$roles= Role::all();
|
||||
return view('user.create',compact('roles','plantels'));
|
||||
return view('user.create',compact('roles','plantels','codigos'));
|
||||
}
|
||||
|
||||
|
||||
public function store(Request $request,User $user)
|
||||
{
|
||||
$user= User::create($request->except(['plantels']));
|
||||
@@ -44,18 +45,17 @@ class UserController extends Controller
|
||||
return redirect()->route('user.edit',compact('user'))->with('info','Se creó el usuario correctamente');
|
||||
}
|
||||
|
||||
|
||||
public function show(User $user)
|
||||
{
|
||||
return view('user.show',compact('user'));
|
||||
}
|
||||
|
||||
|
||||
public function edit(User $user)
|
||||
{
|
||||
$plantels=Plantel::all();
|
||||
$codigos = DB::table('area_code')->get();
|
||||
$roles= Role::all();
|
||||
return view('user.edit',compact('user','roles','plantels'));
|
||||
return view('user.edit',compact('user','roles','plantels','codigos'));
|
||||
}
|
||||
|
||||
public function update(Request $request, User $user)
|
||||
|
||||
@@ -2,8 +2,13 @@
|
||||
|
||||
namespace App\Livewire;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use App\Models\Code;
|
||||
use App\Models\User;
|
||||
use Livewire\Component;
|
||||
use Livewire\Attributes\On;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class CodeScanner extends Component
|
||||
{
|
||||
@@ -12,15 +17,233 @@ class CodeScanner extends Component
|
||||
public function qrLeido($texto, $lat, $lng)
|
||||
{
|
||||
|
||||
$dia = now()->translatedFormat('l');
|
||||
dd($dia);
|
||||
|
||||
$this->dispatch('swal',
|
||||
icon: 'success',
|
||||
title: 'Asistencia registrada!',
|
||||
text: $lat,
|
||||
timer: 2000,
|
||||
confirm: false,
|
||||
closeModal: true
|
||||
);
|
||||
$codigo = DB::table('area_code')
|
||||
->where('name', $texto)
|
||||
->first();
|
||||
|
||||
$corporativo = DB::table('area_code')
|
||||
->where('name','like', '%COR%')
|
||||
->first();
|
||||
|
||||
$user = Auth::user();
|
||||
|
||||
if($user->code == $corporativo->id){
|
||||
|
||||
if($codigo){
|
||||
|
||||
$planteles = $user->plantelUsuarios;
|
||||
|
||||
$match=0;
|
||||
|
||||
foreach($planteles as $plantel){
|
||||
|
||||
$latCentro = $plantel->latitud;
|
||||
$lngCentro = $plantel->longitud;
|
||||
$radioPermitido = 100; // metros
|
||||
|
||||
$distancia = $this->calcularDistancia($lat,$lng,$latCentro,$lngCentro);
|
||||
|
||||
if($distancia > $radioPermitido){
|
||||
$match=1;
|
||||
}else{
|
||||
$match = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if($match == 1){
|
||||
$this->dispatch('swal',
|
||||
icon: 'error',
|
||||
title: 'Error!',
|
||||
text: 'Fuera del area permitida',
|
||||
confirm: false,
|
||||
closeModal: true
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
$hoy = Carbon::today();
|
||||
|
||||
$asistenciasHoy = Code::where('user_id',$user->id)
|
||||
->whereDate('registro',$hoy)
|
||||
->orderBy('registro','desc')
|
||||
->get();
|
||||
|
||||
if($asistenciasHoy->count() >= 4){
|
||||
$this->dispatch('swal',
|
||||
icon: 'warning',
|
||||
title: 'Chequeos completos!',
|
||||
text: 'Límite de registros alcanzados',
|
||||
confirm: false,
|
||||
closeModal: true,
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if($asistenciasHoy->count() > 0){
|
||||
$ultima = Code::where('user_id',$user->id)
|
||||
->whereDate('registro', today())
|
||||
->latest('registro')
|
||||
->first();
|
||||
|
||||
if($ultima->registro->diffInMinutes(now()) < 40){
|
||||
$this->dispatch('swal',
|
||||
icon: 'warning',
|
||||
title: 'Espera!',
|
||||
text: 'podrás checar 40 minutos despues de tu ultimo registro',
|
||||
confirm: false,
|
||||
closeModal: true,
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Code::create([
|
||||
'user_id' => $user->id,
|
||||
'codigo' => $texto,
|
||||
'registro' => Carbon::now('America/Mexico_City')->format('d-m-Y H:i:s'),
|
||||
'latitud' => $lat,
|
||||
'longitud' => $lng,
|
||||
]);
|
||||
|
||||
$this->dispatch('swal',
|
||||
icon: 'success',
|
||||
title: 'Excelente!',
|
||||
text: 'asistencia registrada',
|
||||
confirm: false,
|
||||
closeModal: true,
|
||||
reload:true
|
||||
);
|
||||
|
||||
}else{
|
||||
$this->dispatch('swal',
|
||||
icon: 'error',
|
||||
title: 'Código inexistente',
|
||||
text: 'Este codigo no es institucional',
|
||||
confirm: false,
|
||||
closeModal: true
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
}else{
|
||||
|
||||
if($codigo->id != $user->code){
|
||||
$this->dispatch('swal',
|
||||
icon: 'error',
|
||||
title: 'Error!',
|
||||
text: 'Este codigo no corresponde a tu area',
|
||||
confirm: false,
|
||||
closeModal: true
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
$planteles = $user->plantelUsuarios;
|
||||
|
||||
$match=0;
|
||||
|
||||
foreach($planteles as $plantel){
|
||||
|
||||
$latCentro = $plantel->latitud;
|
||||
$lngCentro = $plantel->longitud;
|
||||
$radioPermitido = 100; // metros
|
||||
|
||||
$distancia = $this->calcularDistancia($lat,$lng,$latCentro,$lngCentro);
|
||||
|
||||
if($distancia > $radioPermitido){
|
||||
$match=1;
|
||||
}else{
|
||||
$match = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if($match == 1){
|
||||
$this->dispatch('swal',
|
||||
icon: 'error',
|
||||
title: 'Error!',
|
||||
text: 'Fuera del area permitida',
|
||||
confirm: false,
|
||||
closeModal: true
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
$hoy = Carbon::today();
|
||||
|
||||
$asistenciasHoy = Code::where('user_id',$user->id)
|
||||
->whereDate('registro',$hoy)
|
||||
->orderBy('registro','desc')
|
||||
->get();
|
||||
|
||||
if($asistenciasHoy->count() >= 4){
|
||||
$this->dispatch('swal',
|
||||
icon: 'warning',
|
||||
title: 'Chequeos completos!',
|
||||
text: 'Límite de registros alcanzados',
|
||||
confirm: false,
|
||||
closeModal: true,
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
if($asistenciasHoy->count() > 0){
|
||||
$ultima = $asistenciasHoy->first();
|
||||
|
||||
if($ultima->registro->diffInMinutes(now()) < 40){
|
||||
$this->dispatch('swal',
|
||||
icon:'info',
|
||||
title:'Aún no pasan 40 minutos'
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Code::create([
|
||||
'user_id' => $user->id,
|
||||
'codigo' => $texto,
|
||||
'registro' => Carbon::now('America/Mexico_City')->format('d-m-Y H:i:s'),
|
||||
'latitud' => $lat,
|
||||
'longitud' => $lng,
|
||||
]);
|
||||
|
||||
$this->dispatch('swal',
|
||||
icon: 'success',
|
||||
title: 'Excelente!',
|
||||
text: 'asistencia registrada',
|
||||
confirm: false,
|
||||
closeModal: true,
|
||||
reload:true
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private function calcularDistancia($lat1,$lon1,$lat2,$lon2)
|
||||
{
|
||||
$radioTierra = 6371000;
|
||||
|
||||
$dLat = deg2rad($lat2 - $lat1);
|
||||
$dLon = deg2rad($lon2 - $lon1);
|
||||
|
||||
$a = sin($dLat/2) * sin($dLat/2) +
|
||||
cos(deg2rad($lat1)) *
|
||||
cos(deg2rad($lat2)) *
|
||||
sin($dLon/2) * sin($dLon/2);
|
||||
|
||||
$c = 2 * atan2(sqrt($a), sqrt(1-$a));
|
||||
|
||||
return $radioTierra * $c;
|
||||
}
|
||||
|
||||
public function render()
|
||||
|
||||
@@ -11,7 +11,6 @@ use Laravel\Fortify\TwoFactorAuthenticatable;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
|
||||
use Illuminate\Database\Eloquent\Relations\HasMany;
|
||||
use Illuminate\Database\Eloquent\Relations\HasOne;
|
||||
use Illuminate\Foundation\Auth\User as Authenticatable;
|
||||
|
||||
class User extends Authenticatable
|
||||
@@ -25,11 +24,6 @@ class User extends Authenticatable
|
||||
use TwoFactorAuthenticatable;
|
||||
use HasRoles;
|
||||
|
||||
/**
|
||||
* The attributes that are mass assignable.
|
||||
*
|
||||
* @var array<int, string>
|
||||
*/
|
||||
protected $fillable = [
|
||||
'name',
|
||||
'email',
|
||||
@@ -50,16 +44,10 @@ class User extends Authenticatable
|
||||
'status',
|
||||
];
|
||||
|
||||
|
||||
protected $appends = [
|
||||
'profile_photo_url',
|
||||
];
|
||||
|
||||
/**
|
||||
* Get the attributes that should be cast.
|
||||
*
|
||||
* @return array<string, string>
|
||||
*/
|
||||
protected function casts(): array
|
||||
{
|
||||
return [
|
||||
|
||||
Reference in New Issue
Block a user