diff --git a/app/Http/Controllers/Repuve/TagsController.php b/app/Http/Controllers/Repuve/TagsController.php index 303e4e2..7d4c236 100644 --- a/app/Http/Controllers/Repuve/TagsController.php +++ b/app/Http/Controllers/Repuve/TagsController.php @@ -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]); diff --git a/routes/api.php b/routes/api.php index f2df9f8..3add0a1 100644 --- a/routes/api.php +++ b/routes/api.php @@ -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);