ADD: Se actualizó la lógica de cancelación de constancias y se mejoró la validación de tags en CancellationController e InscriptionController. Se modificó la validación de tag_number en TagsController para permitir valores nulos.

This commit is contained in:
Juan Felipe Zapata Moreno 2025-12-04 15:00:42 -06:00
parent 8e2db75ad2
commit b5779e5bdb
3 changed files with 64 additions and 10 deletions

View File

@ -45,9 +45,6 @@ public function cancelarConstancia(CancelConstanciaRequest $request)
]);
}
// Avisar que tiene error
$hadPreviousError = $record->error_id !== null;
// Guardar información del tag anterior ANTES de cancelarlo
$oldTagNumber = $tag->tag_number;
$oldFolio = $tag->folio;
@ -69,10 +66,10 @@ public function cancelarConstancia(CancelConstanciaRequest $request)
$newTag = null;
$substitutionLog = null;
$isSubstitution = $request->filled('new_tag_number');
$isSubstitution = $request->filled('new_folio') && $request->filled('new_tag_number');
if ($isSubstitution) {
$newTag = Tag::where('tag_number', $request->new_tag_number)->first();
$newTag = Tag::where('folio', $request->new_folio)->first();
if(!$newTag){
DB::rollBack();
@ -91,6 +88,31 @@ public function cancelarConstancia(CancelConstanciaRequest $request)
]);
}
if(!$newTag->tag_number){
$existingTag = Tag::where('tag_number', $request->new_tag_number)->first();
if($existingTag && $existingTag->id !== $newTag->id){
DB::rollBack();
return ApiResponse::BAD_REQUEST->response([
'message' => 'El nuevo tag_number ya está asignado a otro folio.',
'new_tag_number' => $request->new_tag_number,
'folio_existente' => $existingTag->folio,
]);
}
$newTag->tag_number = $request->new_tag_number;
$newTag->save();
}elseif($newTag->tag_number !== $request->new_tag_number){
DB::rollBack();
return ApiResponse::BAD_REQUEST->response([
'message' => 'El nuevo tag ya tiene un tag_number diferente asignado.',
'assigned_tag_number' => $newTag->tag_number,
'provided_tag_number' => $request->new_tag_number,
]);
}
// Usar el folio del request
$newTag->markAsAssigned($vehicle->id, $request->folio);
@ -160,14 +182,22 @@ public function cancelarTagNoAsignado(Request $request)
{
try {
$request->validate([
'tag_number' => 'required|string|exists:tags,tag_number',
'folio' => 'required|string|exists:tags,folio',
'cancellation_reason_id' => 'required|exists:catalog_cancellation_reasons,id',
'cancellation_observations' => 'nullable|string',
]);
DB::beginTransaction();
$tag = Tag::where('tag_number', $request->tag_number)->first();
$tag = Tag::where('folio', $request->folio)->first();
if (!$tag) {
DB::rollBack();
return ApiResponse::NOT_FOUND->response([
'message' => 'No se encontró el tag con el folio proporcionado.',
'folio' => $request->folio,
]);
}
// Validar que el tag NO esté asignado
if ($tag->isAssigned()) {

View File

@ -45,7 +45,7 @@ public function vehicleInscription(VehicleStoreRequest $request)
$telefono = $request->input('telefono');
// Buscar Tag y validar que NO tenga vehículo asignado
$tag = Tag::where('folio', $folio)->where('tag_number', $tagNumber)->first();
$tag = Tag::where('folio', $folio)->first();
if (!$tag) {
return ApiResponse::NOT_FOUND->response([
@ -65,6 +65,30 @@ public function vehicleInscription(VehicleStoreRequest $request)
// Iniciar transacción
DB::beginTransaction();
if (!$tag->tag_number) {
$existingTag = Tag::where('tag_number', $tagNumber)->first();
if ($existingTag && $existingTag->id !== $tag->id) {
DB::rollBack();
return ApiResponse::BAD_REQUEST->response([
'message' => 'El tag_number ya está asignado a otro folio.',
'tag_number' => $tagNumber,
'folio_existente' => $existingTag->folio,
]);
}
// Guardar tag_number
$tag->tag_number = $tagNumber;
$tag->save();
} elseif ($tag->tag_number !== $tagNumber) {
// Si el tag ya tiene un tag_number diferente, validar
DB::rollBack();
return ApiResponse::BAD_REQUEST->response([
'message' => 'El folio ya tiene un tag_number diferente asignado.',
'folio' => $folio,
'tag_number_actual' => $tag->tag_number,
'tag_number_enviado' => $tagNumber,
]);
}
$datosCompletosRaw = $this->padronEstatalService->getVehiculoByPlaca($placa);
// Obtener datos de API Estatal por placa

View File

@ -106,7 +106,7 @@ public function tagStore(Request $request)
'box_id' => 'required|integer|exists:boxes,id',
'tags' => 'required|array',
'tags.*.folio' => 'required|string|max:8',
'tags.*.tag_number' => 'required|string|max:32',
'tags.*.tag_number' => 'nullable|string|max:32',
]);
DB::beginTransaction();
@ -126,7 +126,7 @@ public function tagStore(Request $request)
try {
$tag = Tag::create([
'folio' => $tagData['folio'],
'tag_number' => $tagData['tag_number'],
'tag_number' => $tagData['tag_number'] ?? null,
'box_id' => $request->box_id,
'status_id' => $statusAvailable->id,
'vehicle_id' => null,