fix: correción de archivos
This commit is contained in:
parent
dcac63f953
commit
b68d360274
59
app/Helpers/EncryptionHelper.php
Normal file
59
app/Helpers/EncryptionHelper.php
Normal 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;
|
||||
}
|
||||
}
|
||||
@ -56,28 +56,34 @@ 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)
|
||||
]);
|
||||
|
||||
// Ejecutar la petición
|
||||
$response = curl_exec($ch);
|
||||
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
$error = curl_error($ch);
|
||||
curl_close($ch);
|
||||
try {
|
||||
// Ejecutar la petición
|
||||
$response = curl_exec($ch);
|
||||
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
$error = curl_error($ch);
|
||||
|
||||
if ($error) {
|
||||
throw new Exception("Error en la petición al padrón estatal: {$error}");
|
||||
if ($error) {
|
||||
throw new Exception("Error en la petición al padrón estatal: {$error}");
|
||||
}
|
||||
|
||||
if ($httpCode !== 200) {
|
||||
throw new Exception("Error HTTP {$httpCode} al consultar padrón estatal");
|
||||
}
|
||||
|
||||
// Parsear la respuesta
|
||||
return $this->parsearRespuesta($response);
|
||||
} finally {
|
||||
// Liberar recursos del CurlHandle (PHP 8.0+)
|
||||
unset($ch);
|
||||
}
|
||||
|
||||
if ($httpCode !== 200) {
|
||||
throw new Exception("Error HTTP {$httpCode} al consultar padrón estatal");
|
||||
}
|
||||
|
||||
// Parsear la respuesta
|
||||
return $this->parsearRespuesta($response);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -44,27 +44,32 @@ 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),
|
||||
]);
|
||||
|
||||
// Ejecutar la solicitud
|
||||
$response = curl_exec($ch);
|
||||
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
$error = curl_error($ch);
|
||||
curl_close($ch);
|
||||
try {
|
||||
// Ejecutar la solicitud
|
||||
$response = curl_exec($ch);
|
||||
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
$error = curl_error($ch);
|
||||
|
||||
if ($error) {
|
||||
throw new Exception("Error en la petición SOAP: {$error}");
|
||||
if ($error) {
|
||||
throw new Exception("Error en la petición SOAP: {$error}");
|
||||
}
|
||||
|
||||
if ($httpCode !== 200) {
|
||||
throw new Exception("Error al consultar REPUVE: Código HTTP {$httpCode}");
|
||||
}
|
||||
|
||||
return $this->parseVehicleResponse($response, $niv);
|
||||
} finally {
|
||||
unset($ch);
|
||||
}
|
||||
|
||||
if ($httpCode !== 200) {
|
||||
throw new Exception("Error al consultar REPUVE: Código HTTP {$httpCode}");
|
||||
}
|
||||
|
||||
return $this->parseVehicleResponse($response, $niv);
|
||||
}
|
||||
|
||||
|
||||
@ -214,60 +219,65 @@ 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),
|
||||
]);
|
||||
|
||||
$response = curl_exec($ch);
|
||||
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
$error = curl_error($ch);
|
||||
curl_close($ch);
|
||||
try {
|
||||
$response = curl_exec($ch);
|
||||
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
$error = curl_error($ch);
|
||||
|
||||
// Si hay error de conexión, retornar error
|
||||
if ($error) {
|
||||
logger()->error('REPUVE verificarRobo: Error de conexión', [
|
||||
'error' => $error,
|
||||
'niv' => $niv,
|
||||
'placa' => $placa,
|
||||
]);
|
||||
return [
|
||||
'is_robado' => false,
|
||||
'has_error' => true,
|
||||
'error_message' => 'Error de conexión con el servicio REPUVE',
|
||||
];
|
||||
// Si hay error de conexión, retornar error
|
||||
if ($error) {
|
||||
logger()->error('REPUVE verificarRobo: Error de conexión', [
|
||||
'error' => $error,
|
||||
'niv' => $niv,
|
||||
'placa' => $placa,
|
||||
]);
|
||||
return [
|
||||
'is_robado' => false,
|
||||
'has_error' => true,
|
||||
'error_message' => 'Error de conexión con el servicio REPUVE',
|
||||
];
|
||||
}
|
||||
|
||||
// Si hay error HTTP, retornar error
|
||||
if ($httpCode !== 200) {
|
||||
logger()->error('REPUVE verificarRobo: HTTP error', [
|
||||
'http_code' => $httpCode,
|
||||
'niv' => $niv,
|
||||
'placa' => $placa,
|
||||
]);
|
||||
return [
|
||||
'is_robado' => false,
|
||||
'has_error' => true,
|
||||
'error_message' => "Error HTTP {$httpCode} del servicio REPUVE",
|
||||
];
|
||||
}
|
||||
|
||||
// Parsear respuesta
|
||||
$valorBuscado = $niv ?: $placa ?: 'N/A';
|
||||
$resultado = $this->parseRoboResponse($response, $valorBuscado);
|
||||
|
||||
// Si hubo error al parsear, loguear pero retornar el resultado completo
|
||||
if ($resultado['has_error'] ?? false) {
|
||||
logger()->warning('REPUVE verificarRobo: Error al parsear respuesta', [
|
||||
'niv' => $niv,
|
||||
'placa' => $placa,
|
||||
'error' => $resultado['error_message'] ?? 'Desconocido',
|
||||
]);
|
||||
}
|
||||
|
||||
// Retornar el array completo con toda la información
|
||||
return $resultado;
|
||||
} finally {
|
||||
unset($ch);
|
||||
}
|
||||
|
||||
// Si hay error HTTP, retornar error
|
||||
if ($httpCode !== 200) {
|
||||
logger()->error('REPUVE verificarRobo: HTTP error', [
|
||||
'http_code' => $httpCode,
|
||||
'niv' => $niv,
|
||||
'placa' => $placa,
|
||||
]);
|
||||
return [
|
||||
'is_robado' => false,
|
||||
'has_error' => true,
|
||||
'error_message' => "Error HTTP {$httpCode} del servicio REPUVE",
|
||||
];
|
||||
}
|
||||
|
||||
// Parsear respuesta
|
||||
$valorBuscado = $niv ?: $placa ?: 'N/A';
|
||||
$resultado = $this->parseRoboResponse($response, $valorBuscado);
|
||||
|
||||
// Si hubo error al parsear, loguear pero retornar el resultado completo
|
||||
if ($resultado['has_error'] ?? false) {
|
||||
logger()->warning('REPUVE verificarRobo: Error al parsear respuesta', [
|
||||
'niv' => $niv,
|
||||
'placa' => $placa,
|
||||
'error' => $resultado['error_message'] ?? 'Desconocido',
|
||||
]);
|
||||
}
|
||||
|
||||
// Retornar el array completo con toda la información
|
||||
return $resultado;
|
||||
} catch (Exception $e) {
|
||||
logger()->error('REPUVE verificarRobo: Excepción capturada', [
|
||||
'niv' => $niv,
|
||||
@ -311,55 +321,60 @@ 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),
|
||||
]);
|
||||
|
||||
$response = curl_exec($ch);
|
||||
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
$error = curl_error($ch);
|
||||
curl_close($ch);
|
||||
try {
|
||||
$response = curl_exec($ch);
|
||||
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
$error = curl_error($ch);
|
||||
|
||||
if ($error) {
|
||||
logger()->error('REPUVE consultarVehiculo: Error de conexión', [
|
||||
'error' => $error,
|
||||
'niv' => $niv,
|
||||
'placa' => $placa,
|
||||
]);
|
||||
return [
|
||||
'success' => false,
|
||||
'has_error' => true,
|
||||
'error_message' => 'Error de conexión con el servicio REPUVE',
|
||||
];
|
||||
if ($error) {
|
||||
logger()->error('REPUVE consultarVehiculo: Error de conexión', [
|
||||
'error' => $error,
|
||||
'niv' => $niv,
|
||||
'placa' => $placa,
|
||||
]);
|
||||
return [
|
||||
'success' => false,
|
||||
'has_error' => true,
|
||||
'error_message' => 'Error de conexión con el servicio REPUVE',
|
||||
];
|
||||
}
|
||||
|
||||
if ($httpCode !== 200) {
|
||||
logger()->error('REPUVE consultarVehiculo: HTTP error', [
|
||||
'http_code' => $httpCode,
|
||||
'niv' => $niv,
|
||||
'placa' => $placa,
|
||||
]);
|
||||
return [
|
||||
'success' => false,
|
||||
'has_error' => true,
|
||||
'error_message' => "Error HTTP {$httpCode} del servicio REPUVE",
|
||||
];
|
||||
}
|
||||
|
||||
// Parsear respuesta
|
||||
$resultado = $this->parseConsultarVehiculoResponse($response);
|
||||
|
||||
if ($resultado['has_error'] ?? false) {
|
||||
logger()->warning('REPUVE consultarVehiculo: Error al parsear', [
|
||||
'niv' => $niv,
|
||||
'placa' => $placa,
|
||||
'error' => $resultado['error_message'] ?? 'Desconocido',
|
||||
]);
|
||||
}
|
||||
|
||||
return $resultado;
|
||||
} finally {
|
||||
unset($ch);
|
||||
}
|
||||
|
||||
if ($httpCode !== 200) {
|
||||
logger()->error('REPUVE consultarVehiculo: HTTP error', [
|
||||
'http_code' => $httpCode,
|
||||
'niv' => $niv,
|
||||
'placa' => $placa,
|
||||
]);
|
||||
return [
|
||||
'success' => false,
|
||||
'has_error' => true,
|
||||
'error_message' => "Error HTTP {$httpCode} del servicio REPUVE",
|
||||
];
|
||||
}
|
||||
|
||||
// Parsear respuesta
|
||||
$resultado = $this->parseConsultarVehiculoResponse($response);
|
||||
|
||||
if ($resultado['has_error'] ?? false) {
|
||||
logger()->warning('REPUVE consultarVehiculo: Error al parsear', [
|
||||
'niv' => $niv,
|
||||
'placa' => $placa,
|
||||
'error' => $resultado['error_message'] ?? 'Desconocido',
|
||||
]);
|
||||
}
|
||||
|
||||
return $resultado;
|
||||
} catch (Exception $e) {
|
||||
logger()->error('REPUVE consultarVehiculo: Excepción', [
|
||||
'niv' => $niv,
|
||||
@ -438,58 +453,63 @@ 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),
|
||||
]);
|
||||
|
||||
// Ejecutar la petición
|
||||
$response = curl_exec($ch);
|
||||
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
$curlError = curl_error($ch);
|
||||
curl_close($ch);
|
||||
try {
|
||||
// Ejecutar la petición
|
||||
$response = curl_exec($ch);
|
||||
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
$curlError = curl_error($ch);
|
||||
|
||||
// Loguear para debug
|
||||
logger()->info('REPUVE Inscripción Request', [
|
||||
'url' => $url,
|
||||
'soap_body' => $soapBody
|
||||
]);
|
||||
// Loguear para debug
|
||||
logger()->info('REPUVE Inscripción Request', [
|
||||
'url' => $url,
|
||||
'soap_body' => $soapBody
|
||||
]);
|
||||
|
||||
logger()->info('REPUVE Inscripción Response', [
|
||||
'http_code' => $httpCode,
|
||||
'curl_error' => $curlError,
|
||||
'response' => $response
|
||||
]);
|
||||
|
||||
if ($curlError) {
|
||||
$errorFromDb = Error::where('code', '103')->first();
|
||||
return [
|
||||
'has_error' => true,
|
||||
'error_code' => '103',
|
||||
'error_name' => $errorFromDb?->name,
|
||||
'error_message' => $errorFromDb?->description ?? "Error de conexión: {$curlError}",
|
||||
'timestamp' => now()->toDateTimeString(),
|
||||
logger()->info('REPUVE Inscripción Response', [
|
||||
'http_code' => $httpCode,
|
||||
'raw_response' => $response,
|
||||
];
|
||||
}
|
||||
'curl_error' => $curlError,
|
||||
'response' => $response
|
||||
]);
|
||||
|
||||
if ($httpCode !== 200) {
|
||||
$errorFromDb = Error::where('code', '-1')->first();
|
||||
return [
|
||||
'has_error' => true,
|
||||
'error_code' => '-1',
|
||||
'error_name' => $errorFromDb?->name,
|
||||
'error_message' => $errorFromDb?->description ?? "Error interno HTTP {$httpCode}",
|
||||
'timestamp' => now()->toDateTimeString(),
|
||||
'http_code' => $httpCode,
|
||||
'raw_response' => $response,
|
||||
];
|
||||
}
|
||||
if ($curlError) {
|
||||
$errorFromDb = Error::where('code', '103')->first();
|
||||
return [
|
||||
'has_error' => true,
|
||||
'error_code' => '103',
|
||||
'error_name' => $errorFromDb?->name,
|
||||
'error_message' => $errorFromDb?->description ?? "Error de conexión: {$curlError}",
|
||||
'timestamp' => now()->toDateTimeString(),
|
||||
'http_code' => $httpCode,
|
||||
'raw_response' => $response,
|
||||
];
|
||||
}
|
||||
|
||||
// Parsear la respuesta
|
||||
return $this->parsearRespuestaInscripcion($response);
|
||||
if ($httpCode !== 200) {
|
||||
$errorFromDb = Error::where('code', '-1')->first();
|
||||
return [
|
||||
'has_error' => true,
|
||||
'error_code' => '-1',
|
||||
'error_name' => $errorFromDb?->name,
|
||||
'error_message' => $errorFromDb?->description ?? "Error interno HTTP {$httpCode}",
|
||||
'timestamp' => now()->toDateTimeString(),
|
||||
'http_code' => $httpCode,
|
||||
'raw_response' => $response,
|
||||
];
|
||||
}
|
||||
|
||||
// Parsear la respuesta
|
||||
return $this->parsearRespuestaInscripcion($response);
|
||||
} finally {
|
||||
unset($ch);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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">
|
||||
|
||||
@ -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>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user