Files
Sio-Back/app/Mail/SolicitudServicioTerminado.php
SIO Admin de656b70a2 feat: Actualizacion sistema SIO Backend
- 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>
2026-01-17 23:01:55 +00:00

204 lines
7.9 KiB
PHP
Executable File

<?php
namespace App\Mail;
use App\Http\Controllers\AtencionClientes\ServiciosController;
use const App\Http\Controllers\NEGATIVO;
use const App\Http\Controllers\REALIZADO;
use App\Models\ServicioDet;
use App\Models\ServicioEvidencia;
use App\Models\ServicioProgreso;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
use DB;
use Illuminate\Support\Facades\App;
use Log;
class SolicitudServicioTerminado extends Mailable
{
use Queueable, SerializesModels;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct($servicio_enc_id, $servicio_det_id)
{
$this->servicio_enc_id = $servicio_enc_id;
$this->servicio_det_id = $servicio_det_id;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
$pdf = $this->generarPDF($this->servicio_enc_id,$this->servicio_det_id);
$info = [
'contacto' => $pdf['contacto'],
'folio' => $pdf['folio'],
'servicio' => $pdf['servicio']
];
return $this->view('email.emailSolicitudServicioTerminado', compact('info'))->subject('Servicio terminado.')->attachData($pdf['pdf'], $pdf['nombre'], [
'mime' => 'application/pdf',
]);
return $this->view('email.emailSolicitudServicioTerminado')->subject('Servicio terminado.');
}
function generarPDF($servicio_enc_id, $servicio_det_id){
setlocale(LC_MONETARY, 'en_US');
$det = ServicioDet::where('id', $servicio_det_id)->first();
if($det->estatus_servicio_id != REALIZADO && $det->estatus_servicio_id != NEGATIVO){
return response()->unprocessable('Error', ['El servicio no está terminado.']);
}
$campos = [
'servicios_enc.id as folio',
'clientes.denominacion as nombre_cliente',
DB::raw("DATE_FORMAT(`servicios_det`.`fecha_solicitud`, '%d/%m/%Y') as 'fecha_solicitud'"),
'clientes_domicilios.ciudad',
'clientes_domicilios.celular_responsable as telefono',
'clientes_domicilios.nombre_responsable_sucursal as contacto',
'cat_servicios.nombre as servicio',
'servicios_progreso.comentarios as observaciones',
'servicios_det.costo_servicio',
DB::raw("TIME_FORMAT(`servicios_progreso`.`fecha_ini_celular`, '%H:%i:%s') as 'fecha_inicio'"),
'servicios_progreso.duracion',
DB::raw("TIME_FORMAT(`servicios_progreso`.`fecha_fin_celular`, '%H:%i:%s') as 'fecha_final'"),
DB::raw("CONCAT(asesor.nombre,' ',asesor.apellido_paterno,' ',asesor.apellido_materno) as asesor"),
'sucursales.nombre as sucursal',
DB::raw("CONCAT(auxiliar.nombre,' ',auxiliar.apellido_paterno,' ',auxiliar.apellido_materno) as auxiliar"),
'cat_vehiculos.num_economico as vehiculo',
'servicios_progreso.firma',
'estatus_servicio_id',
'clientes_domicilios.calle',
'clientes_domicilios.num_ext',
'clientes_domicilios.num_int',
'clientes_domicilios.colonia',
'clientes_domicilios.cp',
'servicios_progreso.aplica_garantia'
];
$servicios = ServicioDet::select($campos)
->join('servicios_enc', 'servicios_det.servicio_enc_id', '=', 'servicios_enc.id')
->join('clientes', 'servicios_enc.cliente_id', '=', 'clientes.id')
->join('clientes_domicilios', 'servicios_enc.cliente_domicilio_id','=','clientes_domicilios.id')
->join('cat_servicios', 'servicios_det.servicio_id', '=', 'cat_servicios.id')
->leftJoin('servicios_progreso', 'servicios_det.id', '=', 'servicios_progreso.servicio_det_id')
->join('users as asesor', 'servicios_det.operador_id', '=', 'asesor.id')
->leftJoin('users as auxiliar', 'servicios_det.auxiliar_1', '=', 'auxiliar.id')
->join('sucursales', 'servicios_enc.sucursal_id', '=', 'sucursales.id')
->join('cat_vehiculos', 'servicios_det.vehiculo_id', '=', 'cat_vehiculos.id')
->where('servicios_det.id', $servicio_det_id)
->where('servicios_det.servicio_enc_id', $servicio_enc_id)
->firstOrFail();
$num_int = ($servicios->num_int)? ' INT. '.$servicios->num_int :'';
$cp = ($servicios->cp)? ' C.P. '.$servicios->cp : '';
$servicios['domicilio'] = 'CALLE '.$servicios->calle.' '.$servicios->num_ext.$num_int.', COL. '.$servicios->colonia.$cp;
//$servicios['folio'] = str_pad($servicios->folio, 5, "0", STR_PAD_LEFT);
$servicios['telefono'] = $this->phone_number_format($servicios->telefono);
if($servicios->estatus_servicio_id == NEGATIVO){
$costo_negativo = $servicios->costo_servicio;
$costo = 0.00;
}else{
$costo_negativo = 0.00;
$costo = $servicios->costo_servicio;
}
$servicios['costo_servicio'] = money_format('%(#10n', $costo);
$servicios['costo_negativo'] = money_format('%(#10n', $costo_negativo);
if($servicios->duracion){
list($h, $m, $s) = explode(":", $servicios->duracion);
$servicios['duracion'] = (int)$h.'hr '.$m.'m '.$s.'s';
}else{
$servicios['duracion'] = "00hr 00m 00s";
}
$servicio_progreso_id = ServicioProgreso::where('servicio_enc_id', $servicio_enc_id)
->where('servicio_det_id', $servicio_det_id)
->first();
if($servicio_progreso_id){
$evidencias_inicio = ServicioEvidencia::where('servicio_progreso_id', $servicio_progreso_id->id)
->where('etapa', 'Inicio')
->get();
$evidencias_proceso = ServicioEvidencia::where('servicio_progreso_id', $servicio_progreso_id->id)
->where('etapa', 'Proceso')
->get();
$evidencias_terminado = ServicioEvidencia::where('servicio_progreso_id', $servicio_progreso_id->id)
->where('etapa', 'Final')
->get();
$inicio = 0;
$proceso = 0;
$terminado = 0;
foreach ($evidencias_inicio as $e_i){
$inicio ++;
$servicios["evidencia_inicio_$inicio"] = $e_i->imagen;
}
foreach ($evidencias_proceso as $e_p){
$proceso ++;
$servicios["evidencia_proceso_$proceso"] = $e_p->imagen;
}
foreach ($evidencias_terminado as $e_t){
$terminado ++;
$servicios["evidencia_terminado_$terminado"] = $e_t->imagen;
}
}
try {
$pdf = App::make('dompdf.wrapper');
$pdf->loadHTML(view('recibos/servicios', compact('servicios')));
$nombre_pdf = 'solicitud_' . $servicio_enc_id . '_servicio_' . $servicio_det_id . '.pdf';
/*Storage::disk('public')->put('servicios/recibos_pdf/' . $nombre_pdf, $pdf->output());
ServicioProgreso::where('id', $servicio_progreso_id)
->first()
->update(['pdf' => $nombre_pdf]);*/
return ['pdf' => $pdf->stream($nombre_pdf), 'nombre' => $nombre_pdf, 'contacto' => $servicios->contacto, 'folio' => $servicios->folio, 'servicio' => $servicios->servicio];
} catch (\Exception $e) {
Log::info($e);
return response()->unprocessable('Error', ['Error al generar PDF.']);
}
}
function phone_number_format($number) {
// Allow only Digits, remove all other characters.
$number = preg_replace("/[^\d]/","",$number);
// get number length.
$length = strlen($number);
// if number = 10
if($length == 10) {
$number = preg_replace("/^1?(\d{3})(\d{3})(\d{4})$/", "($1) $2 $3", $number);
}
return $number;
}
}