- 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>
212 lines
7.5 KiB
PHP
Executable File
212 lines
7.5 KiB
PHP
Executable File
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\Sucursal;
|
|
use Carbon\Carbon;
|
|
use Illuminate\Foundation\Bus\DispatchesJobs;
|
|
use Illuminate\Routing\Controller as BaseController;
|
|
use Illuminate\Foundation\Validation\ValidatesRequests;
|
|
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Log;
|
|
|
|
const PASSWORD = 'SECRET123123';
|
|
|
|
//Estatus de Servicios
|
|
const REALIZADO = 1;
|
|
const REPROGRAMADO = 2;
|
|
const CANCELADO = 3;
|
|
const PENDIENTE = 4;
|
|
const NEGATIVO = 5;
|
|
const PAGADO = 6;
|
|
const VISITA = 7;
|
|
|
|
//Tipos De Empleados
|
|
const GENERAL = 1;
|
|
const ASESOR_OPERACIONES = 2;
|
|
const AUXILIAR_TECNICO_1 = 3;
|
|
const AUXILIAR_TECNICO_2 = 4;
|
|
const ATENCION_CLIENTES = 5;
|
|
|
|
//Definio
|
|
const DEFINIO_CLIENTE = 1;
|
|
const DEFINIO_ATENCION_CLIENTE = 2;
|
|
|
|
//Tipos de servicio
|
|
const DOMESTICO = 1;
|
|
const EMPRESARIAL = 2;
|
|
|
|
//Correos
|
|
const CORREOS_DEV = ['luis@ie-soluciones.com', 'omar@ie-soluciones.com', 'soporte@ie-soluciones.com'];
|
|
const CORREOS_PROD = ['guillermo@drenax.com.mx', 'bladimir@drenax.com.mx', 'antonio@drenax.com.mx', 'laura@drenax.com.mx'];
|
|
|
|
//Nombre checklist
|
|
const VEHICULO_ASIGNADO = "VEHÍCULO ASIGNADO";
|
|
|
|
//Costo de servicio negativo
|
|
const COSTO_SERVICIO_NEGATIVO = 350;
|
|
|
|
//Parametros
|
|
const LLAVE_ANCLAJE_SERVICIO_HORAS = 'ANCLAJE_SERVICIO_HORAS';
|
|
const LLAVE_VERSION_APLICACION = 'CURRENT_VERSION_APPLICATION';
|
|
const ANCLAJE_SERVICIO_HORAS = 3;
|
|
|
|
//ZIP
|
|
const DEFAULT_PATH_ZIP_EVIDENCES = "app/public/temp/";
|
|
|
|
ini_set('memory_limit', '-1');
|
|
set_time_limit(0);
|
|
|
|
class Controller extends BaseController
|
|
{
|
|
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
|
|
|
|
|
|
public function sumarTiempos($array_tiempos){
|
|
|
|
if(count($array_tiempos) > 0){
|
|
$total_segundos = 0;
|
|
for ($i = 0; $i < count($array_tiempos); $i ++){
|
|
|
|
if($array_tiempos[$i]){
|
|
list($h,$m,$s) = explode(":", $array_tiempos[$i]);
|
|
$seg_h = ((int)$h * 3600);
|
|
$seg_m = ((int)$m * 60);
|
|
$seg_s = (int)$s;
|
|
|
|
$total_segundos += ($seg_h + $seg_m + $seg_s);
|
|
}
|
|
}
|
|
|
|
$horas = floor($total_segundos / 3600);
|
|
$minutos = floor(($total_segundos - ($horas * 3600)) / 60);
|
|
$segundos = $total_segundos - ($horas * 3600) - ($minutos * 60);
|
|
|
|
$horas = str_pad($horas, 2, 0, STR_PAD_LEFT);
|
|
$minutos = str_pad($minutos, 2, 0, STR_PAD_LEFT);
|
|
$segundos = str_pad($segundos, 2, 0, STR_PAD_LEFT);
|
|
|
|
return $horas . ':' . $minutos . ":" . $segundos;
|
|
}else{
|
|
return "00:00:00";
|
|
}
|
|
}
|
|
|
|
public function diferenciaFechas($t1, $t2){
|
|
|
|
$tiempo_atencion = Carbon::parse($t1)->diffInMinutes(Carbon::parse($t2));
|
|
$d = intval($tiempo_atencion / 1440);
|
|
$h = intval(($tiempo_atencion - ($d * 1440)) / 60);
|
|
$m = intval(($tiempo_atencion - ($d * 1440) - ($h * 60)) % 60);
|
|
|
|
return $d.' días, '.$h.' horas y '.$m.' minutos';
|
|
}
|
|
|
|
public function formatearFechaHora($fecha_hora){
|
|
|
|
list($fecha, $hora) = explode(" ", $fecha_hora);
|
|
list($y, $m, $d) = explode("-", $fecha);
|
|
list($hr, $min) = explode(":", $hora);
|
|
|
|
return $d.'/'.$m.'/'.$y.' '.$hr.':'.$min;
|
|
}
|
|
|
|
public function base64ToImage($base64, $mime = 'image/jpeg'){
|
|
$image_decode = base64_decode($base64);
|
|
$resource = imagecreatefromstring($image_decode);
|
|
|
|
ob_start();
|
|
|
|
if($mime === 'image/jpeg'){
|
|
imagejpeg($resource);
|
|
}else{
|
|
imagepng($resource);
|
|
}
|
|
|
|
return ob_get_clean();
|
|
}
|
|
|
|
public function camposSolicitudesServiciosOperador(){
|
|
|
|
$user = Auth::user();
|
|
$costo_servicio_negativo = Sucursal::select('costo_negativo')->where('sucursales.id', $user->sucursal_id)->first();
|
|
|
|
return [
|
|
'servicios_enc.id as solicitud_servicio_id',
|
|
'servicios_enc.forma_pago_id',
|
|
'cat_formas_pagos.nombre as forma_pago_nombre',
|
|
'fecha_agenda',
|
|
'usuario_agenda_id',
|
|
'users.nombre as usuario_agenda_nombre',
|
|
'users.apellido_paterno as usuario_agenda_apellido_paterno',
|
|
'users.apellido_materno as usuario_agenda_apellido_materno',
|
|
'servicios_enc.cliente_id',
|
|
'clientes.denominacion',
|
|
'servicios_enc.cliente_domicilio_id',
|
|
'clientes_domicilios.nombre_responsable_sucursal as clientes_nombre_responsable_sucursal',
|
|
'clientes_domicilios.celular_responsable as clientes_celular_responsable',
|
|
'clientes_domicilios.calle as clientes_calle',
|
|
'clientes_domicilios.num_ext as clientes_num_ext',
|
|
'clientes_domicilios.num_int as clientes_num_int',
|
|
'clientes_domicilios.colonia as clientes_colonia',
|
|
'clientes_domicilios.cp as clientes_cp',
|
|
'clientes_domicilios.ciudad as clientes_ciudad',
|
|
'clientes_domicilios.telefono as clientes_telefono',
|
|
'clientes_domicilios.lat as clientes_lat',
|
|
'clientes_domicilios.lng as clientes_lng',
|
|
'clientes_domicilios.nombre_croquis as nombre_croquis',
|
|
'clientes_domicilios.nombre_sucursal as nombre_sucursal',
|
|
'servicios_enc.deleted_at',
|
|
'servicios_det.id',
|
|
'servicios_det.servicio_id',
|
|
'cat_servicios.nombre as servicio_nombre',
|
|
'servicios_det.estatus_servicio_id',
|
|
'cat_estatus_servicios.nombre as estatus_servicio_nombre',
|
|
'servicios_det.tipo_servicio_id',
|
|
'cat_tipos_servicios.nombre as tipo_servicio_nombre',
|
|
'cat_estatus_servicios.color_1 as estatus_servicio_color_1',
|
|
'cat_estatus_servicios.color_2 as estatus_servicio_color_2',
|
|
'fecha_solicitud',
|
|
'servicios_det.duracion',
|
|
'definido_cliente',
|
|
'servicios_det.operador_id',
|
|
'operador.nombre as operador_nombre',
|
|
'operador.apellido_paterno as operador_apellido_paterno',
|
|
'operador.apellido_materno as operador_apellido_materno',
|
|
'servicios_det.vehiculo_id',
|
|
'cat_vehiculos.num_economico as vehiculo_num_economico',
|
|
'servicios_det.fecha_solicitud',
|
|
'sucursales.nombre as vehiculo_sucursal',
|
|
'sucursales.id as vehiculo_sucursal_id',
|
|
'sucursal_operador.nombre as operador_sucursal',
|
|
'sucursal_operador.id as operador_sucursal_id',
|
|
'servicios_det.auxiliar_1 as auxiliar_1_id',
|
|
'servicios_det.auxiliar_2 as auxiliar_2_id',
|
|
'auxiliares_1.nombre as auxiliar_1',
|
|
'auxiliares_1.apellido_paterno as auxiliar_1_apellido_paterno',
|
|
'auxiliares_1.apellido_materno as auxiliar_1_apellido_materno',
|
|
'auxiliares_2.nombre as auxiliar_2',
|
|
'sucursal_auxiliares_1.nombre as sucursal_auxiliar_1',
|
|
'sucursal_auxiliares_2.nombre as sucursal_auxiliar_2',
|
|
'servicios_det.costo_servicio',
|
|
'servicios_det.aceptado',
|
|
'servicios_det.observacion_atencion_cliente',
|
|
'servicios_det.requiere_encuesta',
|
|
DB::raw("$costo_servicio_negativo->costo_negativo as 'costo_servicio_negativo'")
|
|
];
|
|
}
|
|
|
|
public function getMicroSeconds(){
|
|
$micro = explode(" ", microtime());
|
|
return $micro[1];
|
|
}
|
|
|
|
public function decodeZip($base64, $path){
|
|
$zip = base64_decode($base64);
|
|
file_put_contents($path, $zip);
|
|
return $path;
|
|
}
|
|
}
|