feature/app-selector
This commit is contained in:
@@ -3,11 +3,11 @@ Endpoints API para gestión de clases SCAII y SCAF
|
||||
"""
|
||||
|
||||
from typing import Any, Dict, Optional
|
||||
from fastapi import APIRouter, Depends, Query
|
||||
from fastapi import APIRouter, Depends, HTTPException, Query, Request
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from core.database import get_core_db
|
||||
from core.security import get_current_user
|
||||
from core.security import get_current_user, get_active_system
|
||||
from api.v1.common.tenant_crud_routes import TenantCRUDRoutes, validate_access_to_resource
|
||||
|
||||
from .dto import (
|
||||
@@ -37,6 +37,7 @@ router.include_router(imports_router, prefix="/imports", tags=["a76 / classes /
|
||||
tags=["a76 / classes"],
|
||||
)
|
||||
async def get_classes_with_fa_data(
|
||||
request: Request,
|
||||
company_id: int = Query(..., description="Company ID"),
|
||||
page: int = Query(1, ge=1, description="Page number"),
|
||||
page_size: int = Query(50, ge=1, le=1000, description="Page size"),
|
||||
@@ -54,28 +55,31 @@ async def get_classes_with_fa_data(
|
||||
This endpoint is optimized for the fixed-asset-classes view.
|
||||
"""
|
||||
tenant_id = validate_access_to_resource(db, company_id, current_user, ["goods_classes.view"])
|
||||
|
||||
|
||||
skip = (page - 1) * page_size
|
||||
|
||||
filters: Optional[Dict[str, Any]] = None
|
||||
if any([class_code, description, material_key, fraction]):
|
||||
filters = {}
|
||||
if class_code:
|
||||
filters["class_code"] = class_code
|
||||
if description:
|
||||
filters["description"] = description
|
||||
if material_key:
|
||||
filters["material_key"] = material_key
|
||||
if fraction:
|
||||
filters["fraction"] = fraction
|
||||
|
||||
filters: Dict[str, Any] = {}
|
||||
if class_code:
|
||||
filters["class_code"] = class_code
|
||||
if description:
|
||||
filters["description"] = description
|
||||
if material_key:
|
||||
filters["material_key"] = material_key
|
||||
if fraction:
|
||||
filters["fraction"] = fraction
|
||||
|
||||
# Sistema activo desde header/cookie (TenantMiddleware no setea request.state en /api/)
|
||||
active_system = get_active_system(request)
|
||||
if active_system:
|
||||
filters["system"] = active_system
|
||||
|
||||
classes_with_fa, total = ClassService.get_all_with_fa_data(
|
||||
db=db,
|
||||
tenant_id=tenant_id,
|
||||
company_id=company_id,
|
||||
skip=skip,
|
||||
limit=page_size,
|
||||
filters=filters,
|
||||
filters=filters if filters else None,
|
||||
sort_by=sort_by,
|
||||
sort_order=sort_order,
|
||||
)
|
||||
@@ -96,17 +100,30 @@ async def get_classes_with_fa_data(
|
||||
tags=["a76 / classes"],
|
||||
)
|
||||
async def create_fa_class(
|
||||
request: Request,
|
||||
class_data: ClassCreateDTOFA,
|
||||
company_id: int = Query(..., description="Company ID"),
|
||||
db: Session = Depends(get_core_db),
|
||||
current_user: Dict[str, Any] = Depends(get_current_user),
|
||||
):
|
||||
"""Create a fixed asset class (both base class and FA extension)"""
|
||||
|
||||
active_system = get_active_system(request)
|
||||
if active_system == "inventory":
|
||||
raise HTTPException(
|
||||
status_code=403,
|
||||
detail=(
|
||||
"Solo se pueden crear clases de activo fijo con el módulo de Activo Fijo (SCAF) activo. "
|
||||
"Cambie de aplicación e intente de nuevo."
|
||||
),
|
||||
)
|
||||
|
||||
tenant_id = validate_access_to_resource(db, company_id, current_user, ["goods_classes.create"])
|
||||
|
||||
|
||||
# Siempre persistir como activo fijo; no depender del default del DTO ni del body del cliente
|
||||
class_data = class_data.model_copy(update={"system": "fixed_asset"})
|
||||
|
||||
result = ClassService.create_fa_class(db, class_data, tenant_id, company_id)
|
||||
|
||||
|
||||
return result
|
||||
|
||||
# Now include generic CRUD routes
|
||||
|
||||
Reference in New Issue
Block a user