204 lines
7.9 KiB
PHP
204 lines
7.9 KiB
PHP
<?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;
|
|
|
|
}
|
|
}
|