- 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>
475 lines
18 KiB
PHP
Executable File
475 lines
18 KiB
PHP
Executable File
<?php
|
|
|
|
namespace App\Http\Controllers\Operador;
|
|
|
|
use const App\Http\Controllers\COSTO_SERVICIO_NEGATIVO;
|
|
use const App\Http\Controllers\NEGATIVO;
|
|
use const App\Http\Controllers\REALIZADO;
|
|
use App\Http\Requests\Operador\FinalizarServicioRequest;
|
|
use App\Http\Requests\Operador\GuardarEvidenciaRequest;
|
|
use App\Http\Requests\Operador\GuardarFirmaRequest;
|
|
use App\Http\Requests\Operador\IniciarServicioRequest;
|
|
use App\Mail\SolicitudServicioTerminado;
|
|
use App\Models\Cliente;
|
|
use App\Models\ClienteDomicilio;
|
|
use App\Models\ServicioDet;
|
|
use App\Models\ServicioEnc;
|
|
use App\Models\ServicioEvidencia;
|
|
use App\Models\ServicioProgreso;
|
|
use Carbon\Carbon;
|
|
use Illuminate\Http\Request;
|
|
use App\Http\Controllers\Controller;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Mail;
|
|
use Log;
|
|
use Excel;
|
|
|
|
class ServiciosProgresoController extends Controller
|
|
{
|
|
/**
|
|
* Iniciar Servicio.
|
|
*
|
|
* @param \Illuminate\Http\Request $request
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function iniciarServicio(IniciarServicioRequest $request)
|
|
{
|
|
$data = $request->all();
|
|
$now = Carbon::now()->format('Y-m-d');
|
|
$servicio = ServicioProgreso::where('servicio_enc_id', $data['servicio_enc_id'])
|
|
->where('servicio_det_id', $data['servicio_det_id'])
|
|
->first();
|
|
|
|
$servicio_det = ServicioDet::where('servicio_enc_id', $data['servicio_enc_id'])
|
|
->where('id', $data['servicio_det_id'])
|
|
->first();
|
|
|
|
list($fecha) = explode(" ", $servicio_det->fecha_solicitud);
|
|
|
|
//Validar fecha de solicitud
|
|
if($now != $fecha){
|
|
//return response()->unprocessable('Parametros inválidos',['El servicio no se puede iniciar ya que corresponde a otra fecha.']);
|
|
}
|
|
|
|
//Validar que el servicio no este iniciado
|
|
if($servicio){
|
|
return response()->unprocessable('Parametros inválidos',['El servicio ya está iniciado.']);
|
|
}
|
|
$data['fecha_ini_servidor'] = Carbon::now()->toDateTimeString();
|
|
|
|
//Se agrego por detalle de Geolocalizacion
|
|
$servicio_enc = ServicioEnc::select('clientes_domicilios.lat','clientes_domicilios.lng')
|
|
->join('clientes_domicilios','servicios_enc.cliente_domicilio_id', '=','clientes_domicilios.id')
|
|
->where('servicios_enc.id', $servicio_det->servicio_enc_id)
|
|
->first();
|
|
|
|
$data['lat_ini'] = $servicio_enc->lat;
|
|
$data['lng_ini'] = $servicio_enc->lng;
|
|
//
|
|
|
|
ServicioProgreso::create($data);
|
|
|
|
return response()->success(['result' => 'ok']);
|
|
}
|
|
|
|
/**
|
|
* Finalizar Servicio.
|
|
*
|
|
* @param \Illuminate\Http\Request $request
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function finalizarServicio(FinalizarServicioRequest $request)
|
|
{
|
|
$data = $request->only(['fecha_fin_celular', 'duracion', 'lat_fin', 'lng_fin', 'comentarios', 'aplica_garantia','litraje']);
|
|
$cat_motivos_estatus_id = $request->input('cat_motivos_estatus_id',0);
|
|
$now = Carbon::now();
|
|
|
|
$servicio_enc_id = $request->input('servicio_enc_id');
|
|
$servicio_det_id = $request->input('servicio_det_id');
|
|
$litraje = $request->litraje;
|
|
|
|
$servicio_progreso = ServicioProgreso::where('servicio_enc_id', $servicio_enc_id)
|
|
->where('servicio_det_id', $servicio_det_id)
|
|
->first();
|
|
|
|
$servicio_det = ServicioDet::where('servicio_enc_id', $servicio_enc_id)
|
|
->where('id', $servicio_det_id)
|
|
->first();
|
|
$servicio = ServicioEnc::where('id', $servicio_enc_id)->first();
|
|
|
|
$correos = [];
|
|
$correo_cliente = Cliente::select('email')->where('id', $servicio->cliente_id)->first();
|
|
$correo_cliente_domicilio = ClienteDomicilio::select('email')->where('id', $servicio->cliente_domicilio_id)->first();
|
|
|
|
if($correo_cliente && $correo_cliente->email){
|
|
array_push($correos, $correo_cliente->email);
|
|
}
|
|
if($correo_cliente_domicilio && $correo_cliente_domicilio->email){
|
|
array_push($correos, $correo_cliente_domicilio->email);
|
|
}
|
|
|
|
//Validar fecha de solicitud
|
|
/*
|
|
list($fecha) = explode(" ", $servicio_det->fecha_solicitud);
|
|
|
|
if($now->format('Y-m-d') != $fecha){
|
|
return response()->unprocessable('Parametros inválidos',['No se puede finalizar el servicio ya que corresponde a otra fecha.']);
|
|
}*/
|
|
|
|
//Validar que el servicio no este terminado
|
|
if($servicio_det->estatus_servicio_id == REALIZADO){
|
|
return response()->unprocessable('Parametros inválidos',['El servicio ya está terminado']);
|
|
}
|
|
|
|
//Validar que el servicio esté iniciado
|
|
if(!$servicio_progreso){
|
|
return response()->unprocessable('Parametros inválidos',['El servicio no está iniciado.']);
|
|
}
|
|
|
|
DB::beginTransaction();
|
|
try {
|
|
$data['fecha_fin_servidor'] = $now->toDateTimeString();
|
|
|
|
//Se agrego por detalle de Geolocalizacion
|
|
$servicio_enc = ServicioEnc::select('clientes_domicilios.lat','clientes_domicilios.lng')
|
|
->join('clientes_domicilios','servicios_enc.cliente_domicilio_id', '=','clientes_domicilios.id')
|
|
->where('servicios_enc.id', $servicio_det->servicio_enc_id)
|
|
->first();
|
|
$data['lat_fin'] = $servicio_enc->lat;
|
|
$data['lng_fin'] = $servicio_enc->lng;
|
|
if($litraje == 0){
|
|
$data['litraje'] = null;
|
|
}else{
|
|
$data['litraje'] = $litraje;
|
|
}
|
|
|
|
$servicio_progreso->update($data);
|
|
if ($cat_motivos_estatus_id != 0){
|
|
$servicio_det->update(
|
|
[
|
|
'estatus_servicio_id' => NEGATIVO,
|
|
'cat_motivos_estatus_id' => $cat_motivos_estatus_id,
|
|
'costo_servicio' => COSTO_SERVICIO_NEGATIVO,
|
|
]
|
|
);
|
|
} else{
|
|
$servicio_det->update(['estatus_servicio_id' => REALIZADO]);
|
|
}
|
|
|
|
DB::commit();
|
|
|
|
try {
|
|
if(count($correos) > 0){
|
|
Mail::to($correos)->send(new SolicitudServicioTerminado($servicio_enc_id,$servicio_det_id));
|
|
}
|
|
}catch (\Exception $e){
|
|
return response()->success(['result' => 'ok']);
|
|
}
|
|
|
|
return response()->success(['result' => 'ok']);
|
|
|
|
} catch (\Exception $e) {
|
|
DB::rollBack();
|
|
Log::info($e);
|
|
return response()->unprocessable('Error', ['Error al finalizar servicio.']);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Guardar Evidencia.
|
|
*
|
|
* @param \Illuminate\Http\Request $request
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function guardarEvidencia(GuardarEvidenciaRequest $request)
|
|
{
|
|
$data = $request->only(['etapa', 'lat', 'lng', 'servicio_enc_id', 'servicio_det_id']);
|
|
|
|
$servicio_progreso = ServicioProgreso::where('servicio_enc_id', $data['servicio_enc_id'])
|
|
->where('servicio_det_id', $data['servicio_det_id'])
|
|
->first();
|
|
|
|
$servicio_det = ServicioDet::where('servicio_enc_id', $data['servicio_enc_id'])
|
|
->where('id', $data['servicio_det_id'])
|
|
->first();
|
|
|
|
//Validar que el servicio no este terminado
|
|
if($servicio_det->estatus_servicio_id == REALIZADO){
|
|
return response()->success(['result' => 'ok']);
|
|
}
|
|
|
|
//Validar que el servicio esté iniciado
|
|
if(!$servicio_progreso){
|
|
return response()->success(['result' => 'ok']);
|
|
}
|
|
|
|
//Validar imagen
|
|
if (!$request->hasFile('imagen') || !$request->file('imagen')->isValid()){
|
|
return response()->success(['result' => 'ok']);
|
|
}
|
|
|
|
//Validar etapa
|
|
if($data['etapa'] != 'Inicio' && $data['etapa'] != 'Proceso' && $data['etapa'] != 'Final'){
|
|
return response()->success(['result' => 'ok']);
|
|
}
|
|
|
|
$imagen = $request->imagen;
|
|
|
|
$uuid = $imagen->hash('sha256');
|
|
|
|
//Validar que la imagen no haya sido capturada
|
|
if(ServicioEvidencia::where('uuid', $uuid)->first()){
|
|
return response()->success(['result' => 'ok']);
|
|
}
|
|
|
|
DB::beginTransaction();
|
|
try {
|
|
|
|
$data['uuid'] = $uuid;
|
|
$data['servicio_progreso_id'] = $servicio_progreso->id;
|
|
|
|
//Se agrego por detalle de Geolocalizacion
|
|
$servicio_enc = ServicioEnc::select('clientes_domicilios.lat','clientes_domicilios.lng')
|
|
->join('clientes_domicilios','servicios_enc.cliente_domicilio_id', '=','clientes_domicilios.id')
|
|
->where('servicios_enc.id', $servicio_det->servicio_enc_id)
|
|
->first();
|
|
$data['lat'] = $servicio_enc->lat;
|
|
$data['lng'] = $servicio_enc->lng;
|
|
//
|
|
|
|
$evidencia = ServicioEvidencia::create($data);
|
|
|
|
/*
|
|
* IMAGEN
|
|
*/
|
|
|
|
$nombre_img = 'solicitud_'.$data['servicio_enc_id'].'_servicio_'.$data['servicio_det_id'].'_evidencia_'.$evidencia->id.'.'.$imagen->extension();
|
|
$imagen->storeAs('public/servicios/evidencias', $nombre_img);
|
|
|
|
$evidencia->update(['imagen' => $nombre_img]);
|
|
|
|
DB::commit();
|
|
|
|
return response()->success(['result' => 'ok']);
|
|
} catch (\Exception $e) {
|
|
DB::rollBack();
|
|
Log::info($e);
|
|
return response()->success(['result' => 'ok']);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Guardar Evidencia.
|
|
*
|
|
* @param \Illuminate\Http\Request $request
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function guardarFirmas(GuardarFirmaRequest $request)
|
|
{
|
|
|
|
$data = $request->only(['servicio_enc_id', 'servicio_det_id']);
|
|
|
|
$servicio_progreso = ServicioProgreso::where('servicio_enc_id', $data['servicio_enc_id'])
|
|
->where('servicio_det_id', $data['servicio_det_id'])
|
|
->first();
|
|
|
|
/*
|
|
* Validar imagen
|
|
* Se comenta por el cambio de guardado
|
|
*/
|
|
if (!$request->hasFile('imagen') || !$request->file('imagen')->isValid()){
|
|
return response()->success(['result' => 'ok']);
|
|
}
|
|
|
|
$imagen = $request->imagen;
|
|
|
|
try {
|
|
|
|
/*
|
|
* IMAGEN
|
|
*/
|
|
|
|
$nombre_img = 'firma_'.'solicitud_'.$data['servicio_enc_id'].'_servicio_'.$data['servicio_det_id'].'.'.$imagen->extension();
|
|
$imagen->storeAs('public/servicios/firmas', $nombre_img);
|
|
|
|
$servicio_progreso->update(['firma' => $nombre_img]);
|
|
|
|
return response()->success(['result' => 'ok']);
|
|
} catch (\Exception $e) {
|
|
Log::info($e);
|
|
return response()->success(['result' => 'ok']);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Guardar Evidencia.
|
|
*
|
|
* @param \Illuminate\Http\Request $request
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
/*public function guardarEvidencia(GuardarEvidenciaRequest $request)
|
|
{
|
|
$data = $request->only(['etapa', 'lat', 'lng', 'servicio_enc_id', 'servicio_det_id']);
|
|
$imagen = $request->input('imagen');
|
|
$now = Carbon::now()->format('Y-m-d');
|
|
|
|
$servicio_progreso = ServicioProgreso::where('servicio_enc_id', $data['servicio_enc_id'])
|
|
->where('servicio_det_id', $data['servicio_det_id'])
|
|
->first();
|
|
|
|
$servicio_det = ServicioDet::where('servicio_enc_id', $data['servicio_enc_id'])
|
|
->where('id', $data['servicio_det_id'])
|
|
->first();
|
|
|
|
list($fecha) = explode(" ", $servicio_det->fecha_solicitud);
|
|
|
|
//Validar fecha de solicitud
|
|
if($now != $fecha){
|
|
//return response()->unprocessable('Parametros inválidos',['No se pueden guardar evidencias ya que el servicio corresponde a otra fecha.']);
|
|
}
|
|
|
|
//Validar que el servicio no este terminado
|
|
if($servicio_det->estatus_servicio_id == REALIZADO){
|
|
//return response()->unprocessable('Parametros inválidos',['El servicio ya está terminado']);
|
|
|
|
//Se agrega para que regrese la petición pero no se guarda información
|
|
return response()->success(['result' => 'ok']);
|
|
}
|
|
|
|
//Validar que el servicio esté iniciado
|
|
if(!$servicio_progreso){
|
|
//return response()->unprocessable('Parametros inválidos',['El servicio no está iniciado.']);
|
|
|
|
//Se agrega para que regrese la petición pero no se guarda información
|
|
return response()->success(['result' => 'ok']);
|
|
}
|
|
|
|
//Validar imagen
|
|
//if (!$request->hasFile('imagen') || !$request->file('imagen')->isValid()){
|
|
// return response()->unprocessable('Parametros inválidos',['Imagen invalida']);
|
|
//}
|
|
|
|
//Validar etapa
|
|
if($data['etapa'] != 'Inicio' && $data['etapa'] != 'Proceso' && $data['etapa'] != 'Final'){
|
|
//return response()->unprocessable('Parametros inválidos',['El valor etapa no es valido']);
|
|
|
|
//Se agrega para que regrese la petición pero no se guarda información
|
|
return response()->success(['result' => 'ok']);
|
|
}
|
|
|
|
//$imagen = $request->imagen;
|
|
|
|
//$uuid = hash_file('sha256', $imagen);
|
|
|
|
//Validar que la imagen no haya sido capturada
|
|
//if(ServicioEvidencia::where('uuid', $uuid)->first()){
|
|
return response()->unprocessable('Parametros inválidos',['La imagen ya fue capturada']);
|
|
//}
|
|
|
|
DB::beginTransaction();
|
|
try {
|
|
|
|
$data['uuid'] = hash('sha256', $imagen);
|
|
$data['servicio_progreso_id'] = $servicio_progreso->id;
|
|
|
|
//Se agrego por detalle de Geolocalizacion
|
|
$servicio_enc = ServicioEnc::select('clientes_domicilios.lat','clientes_domicilios.lng')
|
|
->join('clientes_domicilios','servicios_enc.cliente_domicilio_id', '=','clientes_domicilios.id')
|
|
->where('servicios_enc.id', $servicio_det->servicio_enc_id)
|
|
->first();
|
|
$data['lat'] = $servicio_enc->lat;
|
|
$data['lng'] = $servicio_enc->lng;
|
|
//
|
|
|
|
$evidencia = ServicioEvidencia::create($data);
|
|
|
|
//$nombre_img = 'solicitud_'.$data['servicio_enc_id'].'_servicio_'.$data['servicio_det_id'].'_evidencia_'.$evidencia->id.'.'.$imagen->extension();
|
|
//$imagen->storeAs('public/servicios/evidencias', $nombre_img);
|
|
|
|
$nombre_img = 'solicitud_'.$data['servicio_enc_id'].'_servicio_'.$data['servicio_det_id'].'_evidencia_'.$evidencia->id.'.jpeg';
|
|
Storage::disk('public')->put('servicios/evidencias/' . $nombre_img, $this->base64ToImage($imagen), 'public');
|
|
|
|
$evidencia->update(['imagen' => $nombre_img]);
|
|
|
|
DB::commit();
|
|
|
|
return response()->success(['result' => 'ok']);
|
|
} catch (\Exception $e) {
|
|
DB::rollBack();
|
|
Log::info($e);
|
|
return response()->unprocessable('Error', ['Error al guardar la evidencia.']);
|
|
}
|
|
}
|
|
|
|
public function guardarFirmas(GuardarFirmaRequest $request)
|
|
{
|
|
|
|
$data = $request->only(['servicio_enc_id', 'servicio_det_id']);
|
|
|
|
$servicio_progreso = ServicioProgreso::where('servicio_enc_id', $data['servicio_enc_id'])
|
|
->where('servicio_det_id', $data['servicio_det_id'])
|
|
->first();
|
|
|
|
// $now = Carbon::now()->format('Y-m-d');
|
|
//
|
|
// $servicio_det = ServicioDet::where('servicio_enc_id', $data['servicio_enc_id'])
|
|
// ->where('id', $data['servicio_det_id'])
|
|
// ->first();
|
|
//
|
|
// list($fecha) = explode(" ", $servicio_det->fecha_solicitud);
|
|
//
|
|
// //Validar fecha de solicitud
|
|
// if($now != $fecha){
|
|
// return response()->unprocessable('Parametros inválidos',['No se pueden guardar evidencias ya que el servicio corresponde a otra fecha.']);
|
|
// }
|
|
//
|
|
// //Validar que el servicio no este terminado
|
|
// if($servicio_det->estatus_servicio_id == REALIZADO){
|
|
// return response()->unprocessable('Parametros inválidos',['El servicio ya está terminado']);
|
|
// }
|
|
//
|
|
// //Validar que el servicio esté iniciado
|
|
// if(!$servicio_progreso){
|
|
// return response()->unprocessable('Parametros inválidos',['El servicio no está iniciado.']);
|
|
// }
|
|
|
|
// if (!$request->hasFile('imagen') || !$request->file('imagen')->isValid()){
|
|
// return response()->unprocessable('Parametros inválidos',['Imagen invalida']);
|
|
// }
|
|
|
|
$imagen = $request->input('imagen');
|
|
|
|
try {
|
|
|
|
// $nombre_img = 'firma_'.'solicitud_'.$data['servicio_enc_id'].'_servicio_'.$data['servicio_det_id'].'.'.$imagen->extension();
|
|
// $imagen->storeAs('public/servicios/firmas', $nombre_img);
|
|
|
|
$nombre_img = 'firma_'.'solicitud_'.$data['servicio_enc_id'].'_servicio_'.$data['servicio_det_id'].'.jpeg';
|
|
Storage::disk('public')->put('servicios/firmas/' . $nombre_img, $this->base64ToImage($imagen), 'public');
|
|
|
|
$servicio_progreso->update(['firma' => $nombre_img]);
|
|
|
|
return response()->success(['result' => 'ok']);
|
|
} catch (\Exception $e) {
|
|
Log::info($e);
|
|
return response()->unprocessable('Error', ['Error al guardar la firma.']);
|
|
}
|
|
}*/
|
|
|
|
public function verificarServicio(Request $request){
|
|
|
|
$servicios_id = $request->all();
|
|
|
|
$servicios = array();
|
|
foreach ($servicios_id as $s){
|
|
$servicio_det = ServicioDet::find($s);
|
|
|
|
if($servicio_det && $servicio_det->estatus_servicio_id == REALIZADO){
|
|
array_push($servicios,['servicio_id' => $s]);
|
|
}
|
|
}
|
|
|
|
return response()->success($servicios);
|
|
}
|
|
}
|