Modificación registro de asistencias por codigo qr, separar a un corporativo de un colaborador de campus

This commit is contained in:
2026-02-19 17:21:21 -06:00
parent f640ca035e
commit 81539e139b
+43 -112
View File
@@ -4,7 +4,6 @@ namespace App\Livewire;
use Carbon\Carbon; use Carbon\Carbon;
use App\Models\Code; use App\Models\Code;
use App\Models\User;
use Livewire\Component; use Livewire\Component;
use Livewire\Attributes\On; use Livewire\Attributes\On;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
@@ -24,19 +23,13 @@ class CodeScanner extends Component
->where('name', $texto) ->where('name', $texto)
->first(); ->first();
$corporativo = DB::table('area_code')
->where('name','like', '%COR%')
->first();
$user = Auth::user();
if($user->code == $corporativo->id){
if($codigo){ if($codigo){
$user = Auth::user();
$planteles = $user->plantelUsuarios; $planteles = $user->plantelUsuarios;
$match=0; $match=true;
foreach($planteles as $plantel){ foreach($planteles as $plantel){
@@ -46,26 +39,58 @@ class CodeScanner extends Component
$distancia = $this->calcularDistancia($lat,$lng,$latCentro,$lngCentro); $distancia = $this->calcularDistancia($lat,$lng,$latCentro,$lngCentro);
if($distancia > $radioPermitido){ if($distancia <= $radioPermitido){
$match=1; $match = false;
}else{
$match = 0;
break; break;
} }
} }
if($match == 1){
if($match){
$this->dispatch('swal', $this->dispatch('swal',
icon: 'error', icon: 'error',
title: 'Error!', title: 'Error!',
text: 'Fuera del area permitida', text: 'Fuera del area permitida',
confirm: false, confirm: false,
closeModal: true closeModal: true,
reload: true,
timer: 5000
); );
return; return;
} }
$corps = DB::table('area_code')
->where('name', 'LIKE','%COR%')
->get();
$cor=false;
foreach($corps as $corp){
if($corp->id == $user->code){
$cor = true;
break;
}
}
if($cor){
dd("Ec un corpo el que esta checando");
}else{
if($user->code != $codigo->id){
$this->dispatch('swal',
icon: 'error',
title: 'Error!',
text: 'Este código no corresponde a tu area de trabajo',
confirm: false,
closeModal: true,
reload: true,
timer: 5000
);
return;
}
}
$hoy = Carbon::today(); $hoy = Carbon::today();
@@ -118,7 +143,8 @@ class CodeScanner extends Component
text: 'asistencia registrada', text: 'asistencia registrada',
confirm: false, confirm: false,
closeModal: true, closeModal: true,
reload:true reload: true,
timer: 3000
); );
return; return;
@@ -133,101 +159,6 @@ class CodeScanner extends Component
return; 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) private function calcularDistancia($lat1,$lon1,$lat2,$lon2)