fix: Mejorar la validación y asignación de tags en el controlador de Tags

This commit is contained in:
Juan Felipe Zapata Moreno 2025-11-29 10:54:44 -06:00
parent 75889becaf
commit 36865e7cef
2 changed files with 14 additions and 33 deletions

View File

@ -107,14 +107,7 @@ public function tagStore(Request $request)
if (!$statusAvailable) {
return ApiResponse::NOT_FOUND->response([
'message' => 'El tag no tiene estado disponible.',
]);
}
if ($tag->module_id === null) {
return ApiResponse::BAD_REQUEST->response([
'message' => 'El tag no está asignado a ningún módulo. Debe asignarse primero a un módulo antes de poder usarse.',
'tag_number' => $tagNumber,
'message' => 'El estado "disponible" no existe en el catálogo de estados.',
]);
}
@ -173,44 +166,33 @@ public function assignToModule(Request $request)
try {
$request->validate([
'module_id' => 'required|exists:modules,id',
'tag_ids' => 'required_without_all:package_id,from_tag_number,to_tag_number|array|min:1',
'tag_ids.*' => 'exists:tags,id',
'package_id' => 'required_with:from_tag_number,to_tag_number|exists:packages,id',
'from_tag_number' => 'required_with:package_id|string',
'to_tag_number' => 'required_with:package_id|string',
'cantidad' => 'required|integer|min:1',
]);
DB::beginTransaction();
// Determinar qué tags asignar
if ($request->has('tag_ids')) {
// Asignación por IDs específicos
$tags = Tag::with('status')->whereIn('id', $request->tag_ids)->get();
} else {
// Asignación por rango
$tags = Tag::where('package_id', $request->package_id)
->where('tag_number', '>=', $request->from_tag_number)
->where('tag_number', '<=', $request->to_tag_number)
->get();
}
// Buscar tags disponibles (sin módulo asignado y sin vehículo)
$tags = Tag::whereNull('module_id')
->whereNull('vehicle_id')
->orderBy('id', 'ASC')
->limit($request->cantidad)
->get();
if ($tags->isEmpty()) {
return ApiResponse::NOT_FOUND->response([
'message' => 'No se encontraron tags con los criterios especificados.',
'message' => 'No se encontraron tags disponibles.',
]);
}
// Validar que no estén asignados a vehículos
$unavailableTags = $tags->filter(fn($tag) => $tag->vehicle_id !== null);
if ($unavailableTags->isNotEmpty()) {
if ($tags->count() < $request->cantidad) {
return ApiResponse::BAD_REQUEST->response([
'message' => 'Algunos tags ya están asignados a vehículos.',
'unavailable_tags' => $unavailableTags->pluck('tag_number')->toArray(),
'message' => "Solo hay {$tags->count()} tags disponibles, pero solicitaste {$request->cantidad}.",
'disponibles' => $tags->count(),
'solicitados' => $request->cantidad,
]);
}
// Asignar módulo
// Asignar módulo a los tags
$tagIds = $tags->pluck('id')->toArray();
Tag::whereIn('id', $tagIds)->update(['module_id' => $request->module_id]);

View File

@ -72,7 +72,6 @@
Route::resource('tags', TagsController::class);
Route::post('tags/import', [TagsController::class, 'tagStore']);
Route::post('tags/assign-to-module', [TagsController::class, 'assignToModule']);
Route::get('tags/pdf-vale-entrega', [TagsController::class, 'generateValeEntregaPdf']);
//Rutas de nombres de archivos en catálogo
Route::resource('catalog-name-imgs', CatalogNameImgController::class);