- Nuevo modulo de historial de cambios (ServicioHistorial) - Observer para tracking automatico de cambios en servicios - Correccion de variables auxiliar en ServiciosController - Actualizacion de configuraciones y migraciones - Endpoint para consultar historial de cambios Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
194 lines
7.2 KiB
PHP
Executable File
194 lines
7.2 KiB
PHP
Executable File
<?php
|
|
|
|
namespace App\Http\Controllers\Operador;
|
|
|
|
use App\Models\CatMotivoEstatus;
|
|
use const App\Http\Controllers\PAGADO;
|
|
use const App\Http\Controllers\PENDIENTE;
|
|
use const App\Http\Controllers\REPROGRAMADO;
|
|
use const App\Http\Controllers\VEHICULO_ASIGNADO;
|
|
use const App\Http\Controllers\VISITA;
|
|
use App\Http\Requests\Operador\FinalizarJornadaRequest;
|
|
use App\Http\Requests\Operador\InicioJornadaRequest;
|
|
use App\Models\BitacoraLaboral;
|
|
use App\Models\Parametro;
|
|
use App\Models\PreguntaDomestico;
|
|
use App\Models\PreguntaEmpresarial;
|
|
use App\Models\RespuestaDomestico;
|
|
use App\Models\RespuestaEmpresarial;
|
|
use App\Models\RespuestaOperadorDet;
|
|
use App\Models\RespuestaOperadorEnc;
|
|
use App\Models\ServicioDet;
|
|
use App\Models\ServicioEnc;
|
|
use App\Models\User;
|
|
use App\Models\UsuarioDesplazamiento;
|
|
use Carbon\Carbon;
|
|
use Illuminate\Http\Request;
|
|
use App\Http\Controllers\Controller;
|
|
use Auth;
|
|
use Log;
|
|
use DB;
|
|
|
|
class JornadaController extends Controller
|
|
{
|
|
public function inicioJornada(InicioJornadaRequest $request)
|
|
{
|
|
|
|
$data = $request->all();
|
|
|
|
$user = Auth::user();
|
|
$fecha = Carbon::now()->toDateTimeString();
|
|
|
|
DB::beginTransaction();
|
|
try {
|
|
|
|
$bitacora = BitacoraLaboral::where('usuario_id', $user->id)
|
|
->whereNull('fecha_hora_fin')
|
|
->first();
|
|
|
|
if($bitacora){
|
|
DB::rollBack();
|
|
return response()->unprocessable('JORNADA_YA_INICIADA', [$bitacora->id]);
|
|
}
|
|
|
|
$campos = $this->camposSolicitudesServiciosOperador();
|
|
|
|
$servicios = ServicioDet::select($campos)
|
|
->joinDetalleServicioDet()
|
|
->joinDetalleServicioDetMovil()
|
|
->leftJoin('servicios_progreso', function($join)
|
|
{
|
|
$join->on('servicios_enc.id', '=', 'servicios_progreso.servicio_enc_id');
|
|
$join->on('servicios_det.id', '=', 'servicios_progreso.servicio_det_id');
|
|
})
|
|
->whereNull('servicios_progreso.id')
|
|
->whereIn('servicios_det.estatus_servicio_id', [PENDIENTE, REPROGRAMADO, VISITA, PAGADO])
|
|
->where('servicios_det.operador_id', $user->id)
|
|
->where('servicios_enc.sucursal_id', $user->sucursal_id)
|
|
->whereDate('servicios_det.fecha_solicitud', Carbon::now()->format('Y-m-d'))
|
|
->orderBy('servicios_det.fecha_solicitud')
|
|
->get();
|
|
|
|
/*$fecha_actual = Carbon::now()->format('Y-m-d');
|
|
|
|
$servicios = [];
|
|
|
|
foreach ($servicios_list as $s){
|
|
|
|
$fecha_asignacion = Carbon::createFromTimeString($s->fecha_agenda)->format('Y-m-d');
|
|
|
|
if($fecha_asignacion == $fecha_actual && $s->aceptado){
|
|
$servicios[] = $s;
|
|
}elseif ($fecha_asignacion != $fecha_actual){
|
|
$servicios[] = $s;
|
|
}
|
|
}*/
|
|
|
|
$encuesta_operador = RespuestaOperadorEnc::select('respuestas_operador_enc.id')
|
|
->join('respuestas_operador_det', 'respuestas_operador_det.respuestas_operador_enc_id', '=', 'respuestas_operador_enc.id')
|
|
->where('respuestas_operador_enc.user_id', $user->id)
|
|
->orderBy('respuestas_operador_enc.created_at','desc')
|
|
->first();
|
|
|
|
$vehiculo_operador = RespuestaOperadorDet::select('cat_vehiculos.id', 'respuestas_operador_det.respuesta_text')
|
|
->join('respuestas_operador_enc', 'respuestas_operador_enc.id', '=', 'respuestas_operador_det.respuestas_operador_enc_id')
|
|
->join('cat_vehiculos','cat_vehiculos.num_economico', '=', 'respuestas_operador_det.respuesta_text')
|
|
->where('respuestas_operador_enc.user_id', $user->id)
|
|
->where('respuestas_operador_det.nombre', '=',VEHICULO_ASIGNADO)
|
|
->where('respuestas_operador_det.respuestas_operador_enc_id', $encuesta_operador->id)
|
|
->first();
|
|
|
|
//$servi = collect($servicios)->first();
|
|
//$data['vehiculo_id'] = ($servi) ? $servi->vehiculo_id : null;
|
|
|
|
$data['vehiculo_id'] = ($vehiculo_operador->id) ? $vehiculo_operador->id : 2;
|
|
|
|
$data['usuario_id'] = $user->id;
|
|
$data['fecha_hora_ini'] = $fecha;
|
|
$jornada = BitacoraLaboral::create($data);
|
|
|
|
$data_desplazamiento = [
|
|
'bitacora_laboral_id' => $jornada->id,
|
|
'usuario_id' => $user->id,
|
|
'fecha' => $fecha,
|
|
'modelo_celular' => $data['modelo_celular'],
|
|
'bateria' => $data['bateria'],
|
|
'lat' => $data['lat_ini'],
|
|
'lng' => $data['lng_ini']
|
|
];
|
|
|
|
UsuarioDesplazamiento::create($data_desplazamiento);
|
|
|
|
User::where('id', $user->id)->first()->update(['token_firebase' => $data['token_firebase']]);
|
|
|
|
$parametros = Parametro::get();
|
|
|
|
$encuesta_domestico = PreguntaDomestico::get();
|
|
|
|
foreach ($encuesta_domestico as $eD){
|
|
$eD->respuestas = RespuestaDomestico::where('pregunta_id', $eD->id)->get();
|
|
}
|
|
|
|
$encuesta_empresarial = PreguntaEmpresarial::get();
|
|
|
|
foreach ($encuesta_empresarial as $eE){
|
|
$eE->respuestas = RespuestaEmpresarial::where('pregunta_id', $eE->id)->get();
|
|
}
|
|
|
|
$motivos_estatus = CatMotivoEstatus::select('id', 'nombre as descripcion')
|
|
->get();
|
|
|
|
DB::commit();
|
|
|
|
return response()->success(compact('servicios', 'parametros', 'jornada', 'encuesta_domestico', 'encuesta_empresarial', 'motivos_estatus'));
|
|
} catch (\Exception $e) {
|
|
DB::rollBack();
|
|
Log::info($e->getMessage());
|
|
return response()->unprocessable('Error', ['Error al guardar el inicio de jornada.']);
|
|
}
|
|
}
|
|
|
|
public function finalizarJornada(FinalizarJornadaRequest $request, $id){
|
|
|
|
$data = $request->all();
|
|
|
|
$user = Auth::user();
|
|
$fecha = Carbon::now()->toDateTimeString();
|
|
|
|
DB::beginTransaction();
|
|
try {
|
|
|
|
$jornada = BitacoraLaboral::where('id',$id)
|
|
->first();
|
|
|
|
if($jornada->fecha_hora_fin){
|
|
DB::rollBack();
|
|
return response()->unprocessable('Error', ['La jornada ya se encuentra finalizada.']);
|
|
}
|
|
|
|
$data['fecha_hora_fin'] = $fecha;
|
|
$jornada->update($data);
|
|
|
|
$data_desplazamiento = [
|
|
'bitacora_laboral_id' => $id,
|
|
'usuario_id' => $user->id,
|
|
'fecha' => $fecha,
|
|
'modelo_celular' => $data['modelo_celular'],
|
|
'bateria' => $data['bateria'],
|
|
'lat' => $data['lat_fin'],
|
|
'lng' => $data['lng_fin']
|
|
];
|
|
|
|
UsuarioDesplazamiento::create($data_desplazamiento);
|
|
|
|
User::where('id', $user->id)->update(['token_firebase' => NULL]);
|
|
DB::commit();
|
|
|
|
return response()->success(['result' => 'ok']);
|
|
} catch (\Exception $e) {
|
|
DB::rollBack();
|
|
return response()->unprocessable('Error', ['Error al guardar el fin de jornada.']);
|
|
}
|
|
}
|
|
}
|