diff --git a/app/Http/Controllers/Repuve/CancellationController.php b/app/Http/Controllers/Repuve/CancellationController.php index 557ea40..8dfa66e 100644 --- a/app/Http/Controllers/Repuve/CancellationController.php +++ b/app/Http/Controllers/Repuve/CancellationController.php @@ -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()) { diff --git a/app/Http/Controllers/Repuve/InscriptionController.php b/app/Http/Controllers/Repuve/InscriptionController.php index c1f67c3..52fc120 100644 --- a/app/Http/Controllers/Repuve/InscriptionController.php +++ b/app/Http/Controllers/Repuve/InscriptionController.php @@ -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 diff --git a/app/Http/Controllers/Repuve/TagsController.php b/app/Http/Controllers/Repuve/TagsController.php index caa46b9..ea6bc00 100644 --- a/app/Http/Controllers/Repuve/TagsController.php +++ b/app/Http/Controllers/Repuve/TagsController.php @@ -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,