fix: pdf tag sustituido ahora con id del record
This commit is contained in:
parent
c4643c60d4
commit
0ec75bc0ba
@ -95,7 +95,7 @@ public function vehicleInscription(VehicleStoreRequest $request)
|
|||||||
$ownerData = $this->padronEstatalService->extraerDatosPropietario($datosCompletosRaw);
|
$ownerData = $this->padronEstatalService->extraerDatosPropietario($datosCompletosRaw);
|
||||||
|
|
||||||
// Obtener NIV de los datos del vehículo para verificar robo
|
// Obtener NIV de los datos del vehículo para verificar robo
|
||||||
/* $niv = $vehicleData['niv'];
|
$niv = $vehicleData['niv'];
|
||||||
|
|
||||||
// Verificar robo (API Repuve Nacional)
|
// Verificar robo (API Repuve Nacional)
|
||||||
$resultadoRobo = $this->checkIfStolen($niv, $placa);
|
$resultadoRobo = $this->checkIfStolen($niv, $placa);
|
||||||
@ -112,7 +112,7 @@ public function vehicleInscription(VehicleStoreRequest $request)
|
|||||||
'detalle_robo' => $resultadoRobo,
|
'detalle_robo' => $resultadoRobo,
|
||||||
'message' => 'El vehículo reporta robo. No se puede continuar con la inscripción.',
|
'message' => 'El vehículo reporta robo. No se puede continuar con la inscripción.',
|
||||||
]);
|
]);
|
||||||
} */
|
}
|
||||||
|
|
||||||
// Crear propietario
|
// Crear propietario
|
||||||
$owner = Owner::updateOrCreate(
|
$owner = Owner::updateOrCreate(
|
||||||
@ -329,7 +329,10 @@ public function searchRecord(Request $request)
|
|||||||
|
|
||||||
// Log de acciones
|
// Log de acciones
|
||||||
'vehicle.vehicleTagLogs' => function ($q) {
|
'vehicle.vehicleTagLogs' => function ($q) {
|
||||||
$q->orderBy('created_at', 'DESC');
|
$q->with([
|
||||||
|
'tag:id,folio,tag_number,status_id',
|
||||||
|
'tag.status:id,code,name'
|
||||||
|
])->orderBy('created_at', 'DESC');
|
||||||
},
|
},
|
||||||
])->orderBy('id', 'ASC');
|
])->orderBy('id', 'ASC');
|
||||||
|
|
||||||
@ -419,24 +422,6 @@ public function searchRecord(Request $request)
|
|||||||
// Vehículo
|
// Vehículo
|
||||||
'vehicle' => $record->vehicle,
|
'vehicle' => $record->vehicle,
|
||||||
|
|
||||||
// Propietario
|
|
||||||
'owner' => $record->vehicle->owner,
|
|
||||||
|
|
||||||
// Tag y Paquete
|
|
||||||
'tag' => $record->vehicle->tag ? [
|
|
||||||
'id' => $record->vehicle->tag->id,
|
|
||||||
'folio' => $record->vehicle->tag->folio,
|
|
||||||
'tag_number' => $record->vehicle->tag->tag_number,
|
|
||||||
'status' => $record->vehicle->tag->status?->name,
|
|
||||||
|
|
||||||
// Paquete
|
|
||||||
'package' => $record->vehicle->tag->package ? [
|
|
||||||
'id' => $record->vehicle->tag->package->id,
|
|
||||||
'lot' => $record->vehicle->tag->package->lot,
|
|
||||||
'box_number' => $record->vehicle->tag->package->box_number,
|
|
||||||
] : null,
|
|
||||||
] : null,
|
|
||||||
|
|
||||||
// Archivos
|
// Archivos
|
||||||
'files' => $record->files->map(function ($file) {
|
'files' => $record->files->map(function ($file) {
|
||||||
return [
|
return [
|
||||||
|
|||||||
@ -9,7 +9,6 @@
|
|||||||
use App\Models\CatalogTagStatus;
|
use App\Models\CatalogTagStatus;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
use Illuminate\Support\Facades\Auth;
|
use Illuminate\Support\Facades\Auth;
|
||||||
use Illuminate\Support\Facades\Log;
|
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Database\QueryException;
|
use Illuminate\Database\QueryException;
|
||||||
use App\Models\Package;
|
use App\Models\Package;
|
||||||
@ -21,10 +20,6 @@ class PackageController extends Controller
|
|||||||
public function index(Request $request)
|
public function index(Request $request)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
Log::info('PackageController@index - Iniciando consulta de paquetes', [
|
|
||||||
'filters' => $request->all()
|
|
||||||
]);
|
|
||||||
|
|
||||||
// Si NO hay filtro de caja, no cargar las relaciones de tags para optimizar
|
// Si NO hay filtro de caja, no cargar las relaciones de tags para optimizar
|
||||||
$shouldLoadTags = $request->filled('caja') || $request->filled('box_number');
|
$shouldLoadTags = $request->filled('caja') || $request->filled('box_number');
|
||||||
|
|
||||||
@ -54,14 +49,8 @@ public function index(Request $request)
|
|||||||
$packages->where('box_number', 'LIKE', '%' . trim($cajaValue) . '%');
|
$packages->where('box_number', 'LIKE', '%' . trim($cajaValue) . '%');
|
||||||
}
|
}
|
||||||
|
|
||||||
Log::info('PackageController@index - Ejecutando paginación');
|
|
||||||
$paginatedPackages = $packages->paginate(config('app.pagination'));
|
$paginatedPackages = $packages->paginate(config('app.pagination'));
|
||||||
|
|
||||||
Log::info('PackageController@index - Paginación completada', [
|
|
||||||
'total' => $paginatedPackages->total(),
|
|
||||||
'count' => $paginatedPackages->count()
|
|
||||||
]);
|
|
||||||
|
|
||||||
// Validación si no hay resultados
|
// Validación si no hay resultados
|
||||||
if ($paginatedPackages->isEmpty()) {
|
if ($paginatedPackages->isEmpty()) {
|
||||||
return ApiResponse::NOT_FOUND->response([
|
return ApiResponse::NOT_FOUND->response([
|
||||||
@ -123,20 +112,10 @@ public function index(Request $request)
|
|||||||
];
|
];
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
Log::info('PackageController@index - Retornando respuesta exitosa');
|
|
||||||
|
|
||||||
return ApiResponse::OK->response([
|
return ApiResponse::OK->response([
|
||||||
'Paquetes' => $paginatedPackages,
|
'Paquetes' => $paginatedPackages,
|
||||||
]);
|
]);
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
Log::error('PackageController@index - Error capturado', [
|
|
||||||
'message' => $e->getMessage(),
|
|
||||||
'file' => $e->getFile(),
|
|
||||||
'line' => $e->getLine(),
|
|
||||||
'trace' => $e->getTraceAsString()
|
|
||||||
]);
|
|
||||||
|
|
||||||
return ApiResponse::INTERNAL_ERROR->response([
|
return ApiResponse::INTERNAL_ERROR->response([
|
||||||
'message' => 'Error al obtener los paquetes',
|
'message' => 'Error al obtener los paquetes',
|
||||||
'error' => $e->getMessage(),
|
'error' => $e->getMessage(),
|
||||||
|
|||||||
@ -280,26 +280,52 @@ public function pdfCancelledTag(Tag $tag)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function pdfSubstitutedTag(Tag $tag)
|
public function pdfSubstitutedTag($recordId)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
// Validar que el tag tenga una sustitución registrada
|
// Validar que el tag tenga una sustitución registrada
|
||||||
$hasSubstitution = $tag->vehicleTagLogs()
|
$record = Record::with([
|
||||||
|
'vehicle.vehicleTagLogs' => function ($query){
|
||||||
|
$query->where('action_type', 'sustitucion')
|
||||||
|
->whereNotNull('cancellation_at')
|
||||||
|
->latest();
|
||||||
|
}
|
||||||
|
])->findOrFail($recordId);
|
||||||
|
|
||||||
|
$oldTagLog = $record->vehicle->vehicleTagLogs->first();
|
||||||
|
|
||||||
|
if (!$oldTagLog) {
|
||||||
|
return ApiResponse::BAD_REQUEST->response([
|
||||||
|
'message' => 'No se encontró una sustitución registrada para este expediente.',
|
||||||
|
'record' => $recordId,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Obtener datos de sustitución
|
||||||
|
$oldTag = Tag::with([
|
||||||
|
'vehicleTagLogs' => function($query){
|
||||||
|
$query->where('action_type', 'sustitucion')
|
||||||
|
->whereNotNull('cancellation_at')
|
||||||
|
->with(['cancellationReason', 'cancelledBy', 'vehicle'])
|
||||||
|
->latest();
|
||||||
|
}
|
||||||
|
])->findOrFail($oldTagLog->tag_id);
|
||||||
|
|
||||||
|
$hasSubstitution = $oldTag->vehicleTagLogs()
|
||||||
->where('action_type', 'sustitucion')
|
->where('action_type', 'sustitucion')
|
||||||
->whereNotNull('cancellation_at')
|
->whereNotNull('cancellation_at')
|
||||||
->exists();
|
->exists();
|
||||||
|
|
||||||
if(!$hasSubstitution){
|
if(!$hasSubstitution){
|
||||||
return ApiResponse::BAD_REQUEST->response([
|
return ApiResponse::BAD_REQUEST->response([
|
||||||
'message' => 'Solo se puede generar PDF para tags sustituidos.',
|
'message' => 'El tag no tiene sustitución registrada.',
|
||||||
'tag_folio' => $tag->folio,
|
'tag' => $oldTag->folio,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Obtener datos de sustitución
|
$substitutionData = $this->substitutionData($oldTag);
|
||||||
$substitutionData = $this->substitutionData($tag);
|
|
||||||
|
|
||||||
$pdf = Pdf::loadView('pdfs.tag_substituted', [
|
$pdf = Pdf::loadView('pdfs.tag_sustitution', [
|
||||||
'substitution' => $substitutionData,
|
'substitution' => $substitutionData,
|
||||||
])
|
])
|
||||||
->setPaper('a4', 'portrait')
|
->setPaper('a4', 'portrait')
|
||||||
@ -309,10 +335,10 @@ public function pdfSubstitutedTag(Tag $tag)
|
|||||||
'isRemoteEnabled' => true,
|
'isRemoteEnabled' => true,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
return $pdf->stream('constancia_sustituida_' . $tag->folio . '.pdf');
|
return $pdf->stream('constancia_sustituida_' . $oldTag->folio . '.pdf');
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
return ApiResponse::INTERNAL_ERROR->response([
|
return ApiResponse::INTERNAL_ERROR->response([
|
||||||
'message' => 'Error al generar el PDF.',
|
'message' => 'Error al generar el PDF del tag sustituido.',
|
||||||
'error' => $e->getMessage(),
|
'error' => $e->getMessage(),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -232,7 +232,7 @@ public function store(Request $request)
|
|||||||
}
|
}
|
||||||
|
|
||||||
return ApiResponse::CREATED->response($response);
|
return ApiResponse::CREATED->response($response);
|
||||||
} catch (\Illuminate\Validation\ValidationException $e) {
|
} catch (ValidationException $e) {
|
||||||
return ApiResponse::BAD_REQUEST->response([
|
return ApiResponse::BAD_REQUEST->response([
|
||||||
'message' => 'No se pudo crear el tag: Datos de validación incorrectos.',
|
'message' => 'No se pudo crear el tag: Datos de validación incorrectos.',
|
||||||
'error' => 'validation_error',
|
'error' => 'validation_error',
|
||||||
|
|||||||
@ -129,14 +129,14 @@ public function tagSubstitution(Request $request)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Verificar robo del vehículo
|
// Verificar robo del vehículo
|
||||||
/* $isStolen = $this->checkIfStolen($vehicle->niv);
|
$isStolen = $this->checkIfStolen($vehicle->niv);
|
||||||
|
|
||||||
if ($isStolen) {
|
if ($isStolen) {
|
||||||
return ApiResponse::FORBIDDEN->response([
|
return ApiResponse::FORBIDDEN->response([
|
||||||
'message' => 'El vehículo reporta robo. No se puede continuar con la sustitución.',
|
'message' => 'El vehículo reporta robo. No se puede continuar con la sustitución.',
|
||||||
'niv' => $vehicle->niv,
|
'niv' => $vehicle->niv,
|
||||||
]);
|
]);
|
||||||
} */
|
}
|
||||||
|
|
||||||
DB::beginTransaction();
|
DB::beginTransaction();
|
||||||
|
|
||||||
@ -376,7 +376,7 @@ public function vehicleUpdate(Request $request)
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
// REPUVE Nacional
|
// REPUVE Nacional
|
||||||
/* ProcessRepuveResponse::dispatch($record->id, $datosCompletosRaw); */
|
ProcessRepuveResponse::dispatch($record->id, $datosCompletosRaw);
|
||||||
|
|
||||||
DB::commit();
|
DB::commit();
|
||||||
|
|
||||||
@ -473,7 +473,7 @@ public function vehicleUpdate(Request $request)
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* $isStolen = $this->checkIfStolen($vehicle->niv, $placa);
|
$isStolen = $this->checkIfStolen($vehicle->niv, $placa);
|
||||||
|
|
||||||
if ($isStolen) {
|
if ($isStolen) {
|
||||||
return ApiResponse::FORBIDDEN->response([
|
return ApiResponse::FORBIDDEN->response([
|
||||||
@ -482,7 +482,7 @@ public function vehicleUpdate(Request $request)
|
|||||||
'niv' => $vehicle->niv,
|
'niv' => $vehicle->niv,
|
||||||
'stolen' => true,
|
'stolen' => true,
|
||||||
]);
|
]);
|
||||||
} */
|
}
|
||||||
|
|
||||||
$vehicleChangedFields = $this->detectVehicleChanges($vehicle, $vehicleDataEstatal);
|
$vehicleChangedFields = $this->detectVehicleChanges($vehicle, $vehicleDataEstatal);
|
||||||
$ownerChangedFields = $this->detectOwnerChanges($vehicle->owner, $ownerDataEstatal);
|
$ownerChangedFields = $this->detectOwnerChanges($vehicle->owner, $ownerDataEstatal);
|
||||||
|
|||||||
@ -40,7 +40,7 @@ public function handle(RepuveService $repuveService): void
|
|||||||
|
|
||||||
$apiResponse = $repuveService->inscribirVehiculo($this->responseData);
|
$apiResponse = $repuveService->inscribirVehiculo($this->responseData);
|
||||||
|
|
||||||
Log::info('📥 ProcessRepuveResponse: Respuesta recibida de REPUVE', [
|
Log::info('ProcessRepuveResponse: Respuesta recibida de REPUVE', [
|
||||||
'has_error' => $apiResponse['has_error'],
|
'has_error' => $apiResponse['has_error'],
|
||||||
'error_code' => $apiResponse['error_code'] ?? null,
|
'error_code' => $apiResponse['error_code'] ?? null,
|
||||||
'timestamp' => $apiResponse['timestamp'] ?? null,
|
'timestamp' => $apiResponse['timestamp'] ?? null,
|
||||||
@ -61,7 +61,7 @@ public function handle(RepuveService $repuveService): void
|
|||||||
'error_occurred_at' => now(),
|
'error_occurred_at' => now(),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
Log::warning('💾 ProcessRepuveResponse: Record actualizado con error', [
|
Log::warning('ProcessRepuveResponse: Record actualizado con error', [
|
||||||
'record_id' => $record->id,
|
'record_id' => $record->id,
|
||||||
'error_id' => $error?->id,
|
'error_id' => $error?->id,
|
||||||
]);
|
]);
|
||||||
@ -87,7 +87,7 @@ public function failed(\Throwable $exception): void
|
|||||||
|
|
||||||
$record = Record::find($this->recordId);
|
$record = Record::find($this->recordId);
|
||||||
if($record){
|
if($record){
|
||||||
Log::info('🔍 ProcessRepuveResponse: Buscando error genérico código -1');
|
Log::info('ProcessRepuveResponse: Buscando error genérico código -1');
|
||||||
|
|
||||||
$error = Error::where('code', '-1')->first();
|
$error = Error::where('code', '-1')->first();
|
||||||
|
|
||||||
|
|||||||
@ -43,7 +43,7 @@
|
|||||||
Route::get('expediente/{id}/pdfConstancia', [RecordController::class, 'generatePdfConstancia']);
|
Route::get('expediente/{id}/pdfConstancia', [RecordController::class, 'generatePdfConstancia']);
|
||||||
Route::get('expediente/{id}/pdfImagenes', [RecordController::class, 'generatePdfImages']);
|
Route::get('expediente/{id}/pdfImagenes', [RecordController::class, 'generatePdfImages']);
|
||||||
Route::get('tags/{tag}/pdfTag-cancelado', [RecordController::class, 'pdfCancelledTag']);
|
Route::get('tags/{tag}/pdfTag-cancelado', [RecordController::class, 'pdfCancelledTag']);
|
||||||
Route::get('tags/{tag}/pdfTag-sustituido', [RecordController::class, 'pdfSubstitutedTag']);
|
Route::get('tags/{id}/pdfTag-sustituido', [RecordController::class, 'pdfSubstitutedTag']);
|
||||||
Route::get('expediente/{id}/pdfFormulario', [RecordController::class, 'generatePdfForm']);
|
Route::get('expediente/{id}/pdfFormulario', [RecordController::class, 'generatePdfForm']);
|
||||||
Route::get('RecordErrors', [RecordController::class, 'errors']);
|
Route::get('RecordErrors', [RecordController::class, 'errors']);
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user