has('active')) { $warehouse->where('is_active', $request->boolean('active')); } if ($request->has('q') && $request->q) { $warehouse->where(function($query) use ($request) { $query->where('name', 'like', "%{$request->q}%") ->orWhere('code', 'like', "%{$request->q}%"); }); } $warehouse->orderBy('id', 'ASC'); $warehouses = $request->boolean('all') ? $warehouse->get() : $warehouse->paginate(config('app.pagination')); return ApiResponse::OK->response([ 'warehouses' => $warehouses, ]); } /** * Ver detalle de un almacén con su inventario */ public function show(int $id) { $warehouse = Warehouse::find($id); if (!$warehouse) { return ApiResponse::NOT_FOUND->response([ 'message' => 'Almacén no encontrado' ]); } $inventories = $warehouse->inventories() ->wherePivot('stock', '>', 0) ->paginate(config('app.pagination')); return ApiResponse::OK->response([ 'warehouse' => $warehouse, 'inventories' => $inventories, ]); } /** * Crear almacén */ public function store(WarehouseStoreRequest $request) { $warehouse = Warehouse::create($request->validated()); return ApiResponse::CREATED->response([ 'message' => 'Almacén creado correctamente', 'warehouse' => $warehouse, ]); } /** * Actualizar almacén */ public function update(WarehouseUpdateRequest $request, int $id) { $warehouse = Warehouse::find($id); if (!$warehouse) { return ApiResponse::NOT_FOUND->response([ 'message' => 'Almacén no encontrado' ]); } $warehouse->update($request->validated()); return ApiResponse::OK->response([ 'message' => 'Almacén actualizado correctamente', 'warehouse' => $warehouse, ]); } /** * Eliminar almacén */ public function destroy(int $id) { $warehouse = Warehouse::find($id); if (!$warehouse) { return ApiResponse::NOT_FOUND->response([ 'message' => 'Almacén no encontrado' ]); } // Verificar si tiene stock $hasStock = $warehouse->inventories()->wherePivot('stock', '>', 0)->exists(); if ($hasStock) { return ApiResponse::BAD_REQUEST->response([ 'message' => 'No se puede eliminar un almacén con stock' ]); } $warehouse->delete(); return ApiResponse::OK->response([ 'message' => 'Almacén eliminado correctamente' ]); } }