fix: correción de archivos

This commit is contained in:
Juan Felipe Zapata Moreno 2025-12-09 16:53:54 -06:00
parent dcac63f953
commit b68d360274
6 changed files with 324 additions and 182 deletions

View File

@ -0,0 +1,59 @@
<?php
namespace App\Helpers;
use Illuminate\Support\Facades\Crypt;
use Illuminate\Contracts\Encryption\DecryptException;
use Illuminate\Support\Facades\Log;
class EncryptionHelper
{
/**
* Encrypt the given data.
*/
public static function encryptData($data)
{
try{
return Crypt::encryptString(json_encode($data));
}catch(\Exception $e){
throw new \RuntimeException("Error al encriptar los datos: " . $e->getMessage());
}
}
/**
* Decrypt the given data.
*/
public static function decryptData($encryptedData)
{
try{
$decrypted = Crypt::decryptString($encryptedData);
return json_decode($decrypted, true);
}catch(DecryptException $e){
Log::error('Error al desencriptar los datos: ' . $e->getMessage());
return null;
}catch(\Exception $e){
Log::error('Error inesperado al desencriptar los datos: ' . $e->getMessage());
return null;
}
}
public static function encryptFields(array $data, array $fields)
{
foreach ($fields as $field){
if(isset($data[$field])){
$data[$field] = self::encryptData($data[$field]);
}
}
return $data;
}
public static function decryptFields(array $data, array $fields)
{
foreach ($fields as $field){
if(isset($data[$field])){
$data[$field] = self::decryptData($data[$field]);
}
}
return $data;
}
}

View File

@ -56,17 +56,19 @@ private function consultarPadron(string $tipo, string $valor): array
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $soapBody);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: text/xml; charset=utf-8',
'SOAPAction: ""',
'Content-Length: ' . strlen($soapBody)
]);
try {
// Ejecutar la petición
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$error = curl_error($ch);
curl_close($ch);
if ($error) {
throw new Exception("Error en la petición al padrón estatal: {$error}");
@ -78,6 +80,10 @@ private function consultarPadron(string $tipo, string $valor): array
// Parsear la respuesta
return $this->parsearRespuesta($response);
} finally {
// Liberar recursos del CurlHandle (PHP 8.0+)
unset($ch);
}
}
/**

View File

@ -44,17 +44,19 @@ public function consultarPadron(string $niv)
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $soapBody);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: text/xml; charset=utf-8',
'SOAPAction: "doConsPadron"',
'Content-Length: ' . strlen($soapBody),
]);
try {
// Ejecutar la solicitud
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$error = curl_error($ch);
curl_close($ch);
if ($error) {
throw new Exception("Error en la petición SOAP: {$error}");
@ -65,6 +67,9 @@ public function consultarPadron(string $niv)
}
return $this->parseVehicleResponse($response, $niv);
} finally {
unset($ch);
}
}
@ -214,16 +219,18 @@ public function verificarRobo(?string $niv = null, ?string $placa = null): array
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $soapBody);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: text/xml; charset=utf-8',
'SOAPAction: "doConsRepRobo"',
'Content-Length: ' . strlen($soapBody),
]);
try {
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$error = curl_error($ch);
curl_close($ch);
// Si hay error de conexión, retornar error
if ($error) {
@ -268,6 +275,9 @@ public function verificarRobo(?string $niv = null, ?string $placa = null): array
// Retornar el array completo con toda la información
return $resultado;
} finally {
unset($ch);
}
} catch (Exception $e) {
logger()->error('REPUVE verificarRobo: Excepción capturada', [
'niv' => $niv,
@ -311,16 +321,18 @@ public function consultarVehiculo(?string $niv = null, ?string $placa = null)
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $soapBody);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: text/xml; charset=utf-8',
'SOAPAction: "doConsRPV"',
'Content-Length: ' . strlen($soapBody),
]);
try {
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$error = curl_error($ch);
curl_close($ch);
if ($error) {
logger()->error('REPUVE consultarVehiculo: Error de conexión', [
@ -360,6 +372,9 @@ public function consultarVehiculo(?string $niv = null, ?string $placa = null)
}
return $resultado;
} finally {
unset($ch);
}
} catch (Exception $e) {
logger()->error('REPUVE consultarVehiculo: Excepción', [
'niv' => $niv,
@ -438,17 +453,19 @@ public function inscribirVehiculo(array $datos)
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $soapBody);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: text/xml; charset=utf-8',
'SOAPAction: "inscribe"',
'Content-Length: ' . strlen($soapBody),
]);
try {
// Ejecutar la petición
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$curlError = curl_error($ch);
curl_close($ch);
// Loguear para debug
logger()->info('REPUVE Inscripción Request', [
@ -490,6 +507,9 @@ public function inscribirVehiculo(array $datos)
// Parsear la respuesta
return $this->parsearRespuestaInscripcion($response);
} finally {
unset($ch);
}
}
/**

View File

@ -39,13 +39,13 @@
.left-col-marca {
position: absolute;
left: 5mm;
top: 35mm;
top: 33mm;
}
.left-col-linea-modelo {
position: absolute;
left: 5mm;
top: 41mm;
top: 39mm;
width: 75mm;
}
@ -63,20 +63,20 @@
.left-col-propietario {
position: absolute;
left: 5mm;
top: 45mm;
top: 43mm;
}
.left-col-direccion {
position: absolute;
left: 5mm;
top: 50mm;
top: 48mm;
font-size: 8pt;
}
.left-col-municipio {
position: absolute;
left: 5mm;
top: 55mm;
top: 52mm;
}
/* COLUMNA DERECHA */
@ -191,7 +191,7 @@
<!-- PARTICULAR -->
<div class="right-col-particular ">
{{ strtoupper($record->vehicle->tipo_veh) }}
{{ strtoupper($record->vehicle->tipo_servicio) }}
</div>
</div>
</body>

View File

@ -24,7 +24,6 @@
.header {
text-align: center;
border-bottom: 2px solid #000;
padding-bottom: 15px;
margin-bottom: 25px;
}
@ -98,14 +97,41 @@
}
.data-row {
margin-bottom: 9px;
margin-bottom: 8px;
position: relative;
font-size: 10pt;
}
.data-label {
font-weight: bold;
position: absolute;
left: 0;
}
.data-label-long {
font-weight: bold;
position: absolute;
left: 0;
font-size: 9pt;
}
.data-value {
margin-left: 80px;
}
.data-value-long {
margin-left: 144px;
}
.extra-field {
font-weight: bold;
margin-left: 40px;
display: inline-block;
min-width: 100px;
}
.extra-value {
display: inline-block;
margin-left: 10px;
}
.address-row {
@ -114,12 +140,12 @@
}
.signatures {
margin-top: 60px;
margin-top: 100px;
}
.footer-registro {
text-align: center;
margin-top: 15px;
margin-top: 120px;
color: red;
font-weight: bold;
font-size: 9pt;
@ -153,6 +179,23 @@
font-size: 10pt;
font-weight: bold;
}
.date-section {
text-align: right;
margin-bottom: 20px;
font-size: 10pt;
}
.date-label {
font-weight: bold;
display: inline-block;
}
.date-value {
display: inline-block;
margin-left: 10px;
text-transform: uppercase;
}
</style>
</head>
@ -199,37 +242,45 @@
<div class="owner-section">
<div class="data-row">
<span class="data-label">RFC:</span>
<span>{{ $record->vehicle->owner->rfc ?? '' }}</span>
<span class="data-value">{{ $record->vehicle->owner->rfc ?? '' }}</span>
</div>
<div class="data-row">
<span class="data-label">NOMBRE:</span>
<span>{{ $record->vehicle->owner->full_name ?? '' }}</span>
<span class="data-value">{{ $record->vehicle->owner->full_name ?? '' }}</span>
</div>
<div class="data-row">
<span class="data-label">CALLE:</span>
<span style="display: inline-block; min-width: 200px;">{{ $record->vehicle->owner->callep ?? '' }}</span>
<span style="display: inline-block; margin-left: 20px;"><strong>No Ext:</strong> {{ $record->vehicle->owner->num_ext ?? '' }}</span>
<span style="display: inline-block; margin-left: 20px;"><strong>No Int:</strong> {{ $record->vehicle->owner->num_int ?? '' }}</span>
<span class="data-value">{{ $record->vehicle->owner->callep ?? '' }}</span>
<span class="extra-field">No Ext:</span>
<span class="extra-value">{{ $record->vehicle->owner->num_ext ?? '' }}</span>
<span class="extra-field">No Int:</span>
<span class="extra-value">{{ $record->vehicle->owner->num_int ?? '' }}</span>
</div>
<div class="data-row">
<span class="data-label">COLONIA:</span>
<span>{{ $record->vehicle->owner->colonia ?? '' }}</span>
<span class="data-value">{{ $record->vehicle->owner->colonia ?? '' }}</span>
</div>
<div class="data-row">
<span class="data-label">MUNICIPIO:</span>
<span>{{ $record->vehicle->owner->munic ?? '' }}</span>
<span class="data-value">{{ $record->vehicle->owner->municipality->name ?? '' }}</span>
</div>
<div class="data-row">
<span class="data-label">NUMERO TELEFONICO:</span>
<span>{{ $record->vehicle->owner->telefono ?? '' }}</span>
<span class="data-label-long">NUMERO TELEFONICO:</span>
<span class="data-value-long">{{ $record->vehicle->owner->telefono ?? '' }}</span>
</div>
</div>
<!-- Fecha -->
<div class="date-section">
<span class="date-value">VILLAHERMOSA, TABASCO A {{ \Carbon\Carbon::parse($record->created_at)->locale('es')->isoFormat('D [DE] MMMM [DE] YYYY') }}</span>
</div>
<!-- Firmas -->
<div class="signatures">
<table class="signature-table">

View File

@ -29,7 +29,7 @@
}
.header h1 {
font-size: 11pt;
font-size: 20pt;
font-weight: bold;
margin: 0;
padding: 2px 0;
@ -60,21 +60,21 @@
table {
width: 100%;
border-collapse: collapse;
margin-top: 86px;
margin-top: 150px;
}
table th {
background-color: #c00040;
color: white;
font-weight: bold;
padding: 8px 5px;
padding: 4.5px 5px;
text-align: center;
border: 1px solid #000;
}
table td {
background-color: #f5deb3;
padding: 6px 5px;
padding: 4px 5px;
border: 1px solid #000;
font-size: 8pt;
}
@ -105,6 +105,10 @@
.obs-column {
min-width: 150px;
}
.correct-column{
width: 120px;
}
</style>
</head>
@ -112,7 +116,7 @@
<div class="container">
<!-- Header -->
<div class="header">
<h1>HOJA DE VERIFICACION VEHICULAR</h1>
<h1>HOJA DE VERIFICACIÓN </h1>
</div>
<!-- Firma del operador -->
<div class="signature-section">
@ -126,14 +130,16 @@
<thead>
<tr>
<th colspan="2">ORIGINAL</th>
<th>CORRECTO</th>
<th class="correct-column">CORRECTO</th>
<th>NUEVO</th>
</tr>
</thead>
<tbody>
<tr class="section-original">
<td class="id-column">COLOR</td>
<td colspan="3">{{ strtoupper($record->vehicle->color) }}</td>
<td>{{ strtoupper($record->vehicle->color) }}</td>
<td class="white-bg"></td>
<td class="gray-bg"></td>
</tr>
<tr class="section-original">
<td class="id-column">PLACA</td>