chore: rescate y restauracion de modulos base, a76 y digitalizacion tras conflictos

This commit is contained in:
2026-04-28 17:23:14 -05:00
parent bc433c7202
commit 8535fdf5cc
49 changed files with 4725 additions and 4040 deletions

View File

@@ -16,7 +16,6 @@ router = APIRouter(prefix="/code-pedimento-regimens")
def list_code_pedimento_regimens(
page: int = Query(1, ge=1, description="Número de página"),
page_size: int = Query(50, ge=1, le=1000, description="Tamaño de página"),
company_id: int = Query(..., description="ID de la empresa"),
code: str = Query(None, description="Filter by code"),
regime: str = Query(None, description="Filter by regime"),
type: str = Query(None, description="Filter by type"),
@@ -24,8 +23,6 @@ def list_code_pedimento_regimens(
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
):
from core.security import validate_access_to_resource
validate_access_to_resource(db, company_id, current_user, ["ref_pedimento_regimens.view"])
skip = (page - 1) * page_size
query = db.query(CodePedimentoRegimen)

View File

@@ -1,7 +1,7 @@
from typing import Any, Dict
from core.database import get_core_db
from core.security import get_current_user, validate_access_to_resource
from core.security import get_current_user, has_role
from fastapi import APIRouter, Depends, HTTPException, Query
from sqlalchemy.orm import Session
from sqlalchemy import or_
@@ -16,14 +16,10 @@ router = APIRouter(prefix="/containers")
async def list_containers(
page: int = Query(1, ge=1, description="Número de página"),
page_size: int = Query(50, ge=1, le=100, description="Tamaño de página"),
company_id: int = Query(..., description="ID de la empresa"),
search: str = Query(None, description="Término de búsqueda"),
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
):
# 🛡️ Permiso de Lectura (Listado)
validate_access_to_resource(db, company_id, current_user, required_permissions=["ref_containers.view"])
skip = (page - 1) * page_size
query = db.query(Container)
@@ -48,13 +44,9 @@ async def list_containers(
@router.get("/{key}", response_model=ContainerDTO)
async def get_container(
key: str,
company_id: int = Query(..., description="ID de la empresa"),
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
):
# 🛡️ Permiso de Lectura (Individual)
validate_access_to_resource(db, company_id, current_user, required_permissions=["ref_containers.view"])
obj = db.query(Container).filter(Container.key == key).first()
if not obj:
raise HTTPException(status_code=404, detail="Not found")
@@ -64,13 +56,9 @@ async def get_container(
@router.post("/", response_model=ContainerDTO, status_code=201)
async def create_container(
data: ContainerDTO,
company_id: int = Query(..., description="ID de la empresa"),
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
current_user: dict = Depends(has_role("admin")),
):
# 🛡️ Permiso de Creación
validate_access_to_resource(db, company_id, current_user, required_permissions=["ref_containers.create"])
obj = Container(**data.dict())
db.add(obj)
db.commit()
@@ -82,13 +70,9 @@ async def create_container(
async def update_container(
key: str,
data: ContainerDTO,
company_id: int = Query(..., description="ID de la empresa"),
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
current_user: dict = Depends(has_role("admin")),
):
# 🛡️ Permiso de Edición
validate_access_to_resource(db, company_id, current_user, required_permissions=["ref_containers.edit"])
obj = db.query(Container).filter(Container.key == key).first()
if not obj:
raise HTTPException(status_code=404, detail="Not found")
@@ -102,16 +86,12 @@ async def update_container(
@router.delete("/{key}", status_code=204)
async def delete_container(
key: str,
company_id: int = Query(..., description="ID de la empresa"),
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
current_user: dict = Depends(has_role("admin")),
):
# 🛡️ Permiso de Borrado
validate_access_to_resource(db, company_id, current_user, required_permissions=["ref_containers.delete"])
obj = db.query(Container).filter(Container.key == key).first()
if not obj:
raise HTTPException(status_code=404, detail="Not found")
db.delete(obj)
db.commit()
return None
return None

View File

@@ -1,7 +1,7 @@
from typing import Any, Dict
from core.database import get_core_db
from core.security import get_current_user
from core.security import get_current_user, has_role
from fastapi import APIRouter, Depends, HTTPException, Query
from sqlalchemy.orm import Session
@@ -15,14 +15,10 @@ router = APIRouter(prefix="/countries")
async def list_countries(
page: int = Query(1, ge=1, description="Número de página"),
page_size: int = Query(50, ge=1, le=100, description="Tamaño de página"),
company_id: int = Query(..., description="ID de la empresa"),
search: str = Query(None, description="Término de búsqueda"),
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
):
from core.security import validate_access_to_resource
validate_access_to_resource(db, company_id, current_user, ["ref_countries.view", "cat_countries.view"], require_all=False)
"""Endpoint público para obtener lista de países - no requiere autenticación"""
skip = (page - 1) * page_size
query = db.query(Country)
@@ -53,8 +49,6 @@ async def get_country(
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
):
from core.security import validate_access_to_resource as validate_perm
validate_perm(current_user, "cat_countries", "view")
obj = db.query(Country).filter(Country.m3_key == m3_key).first()
if not obj:
raise HTTPException(status_code=404, detail="Not found")
@@ -65,10 +59,8 @@ async def get_country(
async def create_country(
data: CountryDTO,
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
current_user: dict = Depends(has_role("admin")),
):
from core.security import validate_access_to_resource as validate_perm
validate_perm(current_user, "cat_countries", "create")
obj = Country(**data.dict())
db.add(obj)
db.commit()
@@ -81,10 +73,8 @@ async def update_country(
m3_key: str,
data: CountryDTO,
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
current_user: dict = Depends(has_role("admin")),
):
from core.security import validate_access_to_resource as validate_perm
validate_perm(current_user, "cat_countries", "edit")
obj = db.query(Country).filter(Country.m3_key == m3_key).first()
if not obj:
raise HTTPException(status_code=404, detail="Not found")
@@ -99,10 +89,8 @@ async def update_country(
async def delete_country(
m3_key: str,
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
current_user: dict = Depends(has_role("admin")),
):
from core.security import validate_access_to_resource as validate_perm
validate_perm(current_user, "cat_countries", "delete")
obj = db.query(Country).filter(Country.m3_key == m3_key).first()
if not obj:
raise HTTPException(status_code=404, detail="Not found")

View File

@@ -1,7 +1,7 @@
from typing import Any, Dict
from core.database import get_core_db
from core.security import get_current_user
from core.security import get_current_user, has_role
from fastapi import APIRouter, Depends, HTTPException, Query
from sqlalchemy.orm import Session
from sqlalchemy import or_
@@ -16,13 +16,10 @@ router = APIRouter(prefix="/currency-types")
async def list_currency_types(
page: int = Query(1, ge=1, description="Número de página"),
page_size: int = Query(50, ge=1, le=100, description="Tamaño de página"),
company_id: int = Query(..., description="ID de la empresa"),
search: str = Query(None, description="Término de búsqueda"),
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
):
from core.security import validate_access_to_resource
validate_access_to_resource(db, company_id, current_user, ["ref_currency_types.view", "cat_currency.view"], require_all=False)
skip = (page - 1) * page_size
query = db.query(CurrencyType)
@@ -51,8 +48,6 @@ async def get_currency_type(
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
):
from core.security import validate_access_to_resource as validate_perm
validate_perm(current_user, "cat_currency_types", "view")
obj = db.query(CurrencyType).filter(CurrencyType.code == code).first()
if not obj:
raise HTTPException(status_code=404, detail="Not found")
@@ -63,10 +58,8 @@ async def get_currency_type(
async def create_currency_type(
data: CurrencyTypeDTO,
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
current_user: dict = Depends(has_role("admin")),
):
from core.security import validate_access_to_resource as validate_perm
validate_perm(current_user, "cat_currency_types", "create")
obj = CurrencyType(**data.dict())
db.add(obj)
db.commit()
@@ -79,10 +72,8 @@ async def update_currency_type(
code: str,
data: CurrencyTypeDTO,
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
current_user: dict = Depends(has_role("admin")),
):
from core.security import validate_access_to_resource as validate_perm
validate_perm(current_user, "cat_currency_types", "edit")
obj = db.query(CurrencyType).filter(CurrencyType.code == code).first()
if not obj:
raise HTTPException(status_code=404, detail="Not found")
@@ -97,10 +88,8 @@ async def update_currency_type(
async def delete_currency_type(
code: str,
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
current_user: dict = Depends(has_role("admin")),
):
from core.security import validate_access_to_resource as validate_perm
validate_perm(current_user, "cat_currency_types", "delete")
obj = db.query(CurrencyType).filter(CurrencyType.code == code).first()
if not obj:
raise HTTPException(status_code=404, detail="Not found")

View File

@@ -16,13 +16,10 @@ router = APIRouter(prefix="/customs-sections")
def list_customs_sections(
page: int = Query(1, ge=1, description="Número de página"),
page_size: int = Query(50, ge=1, le=100, description="Tamaño de página"),
company_id: int = Query(..., description="ID de la empresa"),
search: str = Query(None, description="Término de búsqueda"),
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
):
from core.security import validate_access_to_resource
validate_access_to_resource(db, company_id, current_user, ["ref_customs_sections.view"])
skip = (page - 1) * page_size
query = db.query(CustomsSection)
@@ -47,12 +44,9 @@ def list_customs_sections(
@router.get("/{customs_code}", response_model=CustomsSectionDTO)
def get_customs_section(
customs_code: str,
company_id: int = Query(..., description="ID de la empresa"),
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
):
from core.security import validate_access_to_resource
validate_access_to_resource(db, company_id, current_user, ["ref_customs_sections.view"])
obj = (
db.query(CustomsSection)
.filter(CustomsSection.customs_code == customs_code)
@@ -66,12 +60,9 @@ def get_customs_section(
@router.post("/", response_model=CustomsSectionDTO, status_code=201)
def create_customs_section(
data: CustomsSectionDTO,
company_id: int = Query(..., description="ID de la empresa"),
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
current_user: dict = Depends(has_role("admin")),
):
from core.security import validate_access_to_resource
validate_access_to_resource(db, company_id, current_user, ["ref_customs_sections.edit"])
obj = CustomsSection(**data.dict())
db.add(obj)
db.commit()
@@ -83,12 +74,9 @@ def create_customs_section(
def update_customs_section(
customs_code: str,
data: CustomsSectionDTO,
company_id: int = Query(..., description="ID de la empresa"),
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
current_user: dict = Depends(has_role("admin")),
):
from core.security import validate_access_to_resource
validate_access_to_resource(db, company_id, current_user, ["ref_customs_sections.edit"])
obj = (
db.query(CustomsSection)
.filter(CustomsSection.customs_code == customs_code)
@@ -106,12 +94,9 @@ def update_customs_section(
@router.delete("/{customs_code}", status_code=204)
def delete_customs_section(
customs_code: str,
company_id: int = Query(..., description="ID de la empresa"),
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
current_user: dict = Depends(has_role("admin")),
):
from core.security import validate_access_to_resource
validate_access_to_resource(db, company_id, current_user, ["ref_customs_sections.edit"])
obj = (
db.query(CustomsSection)
.filter(CustomsSection.customs_code == customs_code)

View File

@@ -16,13 +16,10 @@ router = APIRouter(prefix="/customs-warehouses")
def list_customs_warehouses(
page: int = Query(1, ge=1, description="Número de página"),
page_size: int = Query(50, ge=1, le=100, description="Tamaño de página"),
company_id: int = Query(..., description="ID de la empresa"),
search: str = Query(None, description="Término de búsqueda"),
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
):
from core.security import validate_access_to_resource
validate_access_to_resource(db, company_id, current_user, ["ref_customs_warehouses.view", "cat_warehouses.view"], require_all=False)
skip = (page - 1) * page_size
query = db.query(CustomsWarehouse)

View File

@@ -1,7 +1,7 @@
from typing import Any, Dict
from core.database import get_core_db
from core.security import get_current_user
from core.security import get_current_user, has_role
from fastapi import APIRouter, Depends, HTTPException, Query
from sqlalchemy import or_
from sqlalchemy.orm import Session
@@ -22,8 +22,6 @@ async def list_identifiers(
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
):
from core.security import validate_access_to_resource as validate_perm
validate_perm(current_user, "cat_identifiers", "view")
skip = (page - 1) * page_size
query = db.query(IdentifierCatalog)
@@ -67,8 +65,6 @@ async def get_identifier(
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
):
from core.security import validate_access_to_resource as validate_perm
validate_perm(current_user, "cat_identifiers", "view")
obj = db.query(IdentifierCatalog).filter(IdentifierCatalog.key == key).first()
if not obj:
raise HTTPException(status_code=404, detail="Not found")
@@ -79,10 +75,8 @@ async def get_identifier(
async def create_identifier(
data: IdentifierDTO,
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
current_user: dict = Depends(has_role("admin")),
):
from core.security import validate_access_to_resource as validate_perm
validate_perm(current_user, "cat_identifiers", "create")
# Check if already exists
existing = db.query(IdentifierCatalog).filter(IdentifierCatalog.key == data.key).first()
if existing:
@@ -100,10 +94,8 @@ async def update_identifier(
key: str,
data: IdentifierDTO,
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
current_user: dict = Depends(has_role("admin")),
):
from core.security import validate_access_to_resource as validate_perm
validate_perm(current_user, "cat_identifiers", "edit")
obj = db.query(IdentifierCatalog).filter(IdentifierCatalog.key == key).first()
if not obj:
raise HTTPException(status_code=404, detail="Not found")
@@ -118,10 +110,8 @@ async def update_identifier(
async def delete_identifier(
key: str,
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
current_user: dict = Depends(has_role("admin")),
):
from core.security import validate_access_to_resource as validate_perm
validate_perm(current_user, "cat_identifiers", "delete")
obj = db.query(IdentifierCatalog).filter(IdentifierCatalog.key == key).first()
if not obj:
raise HTTPException(status_code=404, detail="Not found")

View File

@@ -16,15 +16,12 @@ router = APIRouter(prefix="/incoterms")
async def list_incoterms(
page: int = Query(1, ge=1, description="Número de página"),
page_size: int = Query(50, ge=1, le=100, description="Tamaño de página"),
company_id: int = Query(..., description="ID de la empresa"),
code: str = Query(None, description="Filtrar por clave"),
description: str = Query(None, description="Filtrar por descripción"),
search: str = Query(None, description="Término de búsqueda"),
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
):
from core.security import validate_access_to_resource
validate_access_to_resource(db, company_id, current_user, ["ref_incoterms.view", "cat_incoterms.view"], require_all=False)
skip = (page - 1) * page_size
query = db.query(Incoterm)

View File

@@ -16,15 +16,11 @@ router = APIRouter(prefix="/invoice-types")
def list_invoice_types(
page: int = Query(1, ge=1),
page_size: int = Query(50, ge=1, le=100),
company_id: int = Query(..., description="ID de la empresa"),
type: Optional[str] = Query(None, description="Filter by type"),
operation: Optional[str] = Query(None, description="Filter by operation type (imp, exp, both)"),
search: str = Query(None, description="Término de búsqueda"),
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
):
from core.security import validate_access_to_resource
validate_access_to_resource(db, company_id, current_user, ["ref_invoice_types.view", "cat_inv_types.view"], require_all=False)
query = db.query(InvoiceType)
if search:

View File

@@ -16,14 +16,11 @@ router = APIRouter(prefix="/material-types")
async def list_material_types(
page: int = Query(1, ge=1, description="Número de página"),
page_size: int = Query(50, ge=1, le=1000, description="Tamaño de página"),
company_id: int = Query(..., description="ID de la empresa"),
type: str = Query(None, description="Filtrar por tipo (ACTIVO FIJO, MATERIALES, PRODUCTOS)"),
search: str = Query(None, description="Término de búsqueda"),
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
):
from core.security import validate_access_to_resource
validate_access_to_resource(db, company_id, current_user, ["ref_material_types.view", "cat_material_types.view"], require_all=False)
skip = (page - 1) * page_size
query = db.query(MaterialType)

View File

@@ -16,13 +16,10 @@ router = APIRouter(prefix="/payment-methods")
def list_payment_methods(
page: int = Query(1, ge=1, description="Número de página"),
page_size: int = Query(50, ge=1, le=100, description="Tamaño de página"),
company_id: int = Query(..., description="ID de la empresa"),
search: str = Query(None, description="Término de búsqueda"),
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
):
from core.security import validate_access_to_resource
validate_access_to_resource(db, company_id, current_user, ["pedimentos_payments.view"])
skip = (page - 1) * page_size
query = db.query(PaymentMethod)
@@ -47,12 +44,9 @@ def list_payment_methods(
@router.get("/{key}", response_model=PaymentMethodDTO)
def get_payment_method(
key: str,
company_id: int = Query(..., description="ID de la empresa"),
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
):
from core.security import validate_access_to_resource
validate_access_to_resource(db, company_id, current_user, ["pedimentos_payments.view"])
obj = db.query(PaymentMethod).filter(PaymentMethod.key == key).first()
if not obj:
raise HTTPException(status_code=404, detail="Not found")

View File

@@ -16,13 +16,10 @@ router = APIRouter(prefix="/pedimento-codes")
def list_pedimento_codes(
page: int = Query(1, ge=1, description="Número de página"),
page_size: int = Query(50, ge=1, le=1000, description="Tamaño de página"),
company_id: int = Query(..., description="ID de la empresa"),
search: str = Query(None, description="Término de búsqueda"),
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
):
from core.security import validate_access_to_resource
validate_access_to_resource(db, company_id, current_user, ["ref_pedimento_codes.view"])
skip = (page - 1) * page_size
query = db.query(PedimentoCode)
@@ -47,12 +44,9 @@ def list_pedimento_codes(
@router.get("/{code}", response_model=PedimentoCodeDTO)
def get_pedimento_code(
code: str,
company_id: int = Query(..., description="ID de la empresa"),
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
):
from core.security import validate_access_to_resource
validate_access_to_resource(db, company_id, current_user, ["ref_pedimento_codes .view"])
obj = db.query(PedimentoCode).filter(PedimentoCode.code == code).first()
if not obj:
raise HTTPException(status_code=404, detail="Not found")

View File

@@ -1,7 +1,7 @@
from typing import Any, Dict
from core.database import get_core_db
from core.security import get_current_user
from core.security import get_current_user, has_role
from fastapi import APIRouter, Depends, HTTPException, Query
from sqlalchemy.orm import Session
from sqlalchemy import or_
@@ -16,13 +16,10 @@ router = APIRouter(prefix="/pedimento-regimens")
def list_pedimento_regimens(
page: int = Query(1, ge=1, description="Número de página"),
page_size: int = Query(50, ge=1, le=100, description="Tamaño de página"),
company_id: int = Query(..., description="ID de la empresa"),
search: str = Query(None, description="Término de búsqueda"),
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
):
from core.security import validate_access_to_resource
validate_access_to_resource(db, company_id, current_user, ["ref_pedimento_regimens.view"])
skip = (page - 1) * page_size
query = db.query(RegimenPedimento)
@@ -47,12 +44,9 @@ def list_pedimento_regimens(
@router.get("/{key}", response_model=RegimenPedimentoDTO)
def get_pedimento_regimen(
key: str,
company_id: int = Query(..., description="ID de la empresa"),
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
):
from core.security import validate_access_to_resource
validate_access_to_resource(db, company_id, current_user, ["ref_pedimento_regimens.view"])
obj = db.query(RegimenPedimento).filter(RegimenPedimento.code == key).first()
if not obj:
raise HTTPException(status_code=404, detail="Not found")
@@ -62,13 +56,9 @@ def get_pedimento_regimen(
@router.post("/", response_model=RegimenPedimentoDTO, status_code=201)
def create_pedimento_regimen(
data: RegimenPedimentoDTO,
company_id: int = Query(..., description="ID de la empresa"),
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
current_user: dict = Depends(has_role("admin")),
):
from core.security import validate_access_to_resource
# Mutation for reference data usually restricted to admin role or specific perm
validate_access_to_resource(db, company_id, current_user, ["ref_pedimento_regimens.edit"])
obj = RegimenPedimento(**data.model_dump())
db.add(obj)
db.commit()
@@ -80,12 +70,9 @@ def create_pedimento_regimen(
def update_pedimento_regimen(
key: str,
data: RegimenPedimentoDTO,
company_id: int = Query(..., description="ID de la empresa"),
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
current_user: dict = Depends(has_role("admin")),
):
from core.security import validate_access_to_resource
validate_access_to_resource(db, company_id, current_user, ["ref_pedimento_regimens.edit"])
obj = db.query(RegimenPedimento).filter(RegimenPedimento.code == key).first()
if not obj:
raise HTTPException(status_code=404, detail="Not found")
@@ -99,12 +86,9 @@ def update_pedimento_regimen(
@router.delete("/{key}", status_code=204)
def delete_pedimento_regimen(
key: str,
company_id: int = Query(..., description="ID de la empresa"),
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
current_user: dict = Depends(has_role("admin")),
):
from core.security import validate_access_to_resource
validate_access_to_resource(db, company_id, current_user, ["ref_pedimento_regimens.edit"])
obj = db.query(RegimenPedimento).filter(RegimenPedimento.code == key).first()
if not obj:
raise HTTPException(status_code=404, detail="Not found")

View File

@@ -14,15 +14,11 @@ router = APIRouter(prefix="/pedimento-transport-catalog")
@router.get("/", response_model=Dict[str, Any])
async def list_pedimento_transport_catalog(
company_id: int = Query(..., description="ID de la empresa"),
page: int = Query(1, ge=1, description="Numero de pagina"),
page_size: int = Query(100, ge=1, le=200, description="Tamano de pagina"),
search: str = Query(None, description="Término de búsqueda"),
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
):
from core.security import validate_access_to_resource
validate_access_to_resource(db, company_id, current_user, ["pedimentos_anexo22.view"])
skip = (page - 1) * page_size
query = db.query(PedimentoTransportCatalog)
@@ -47,14 +43,7 @@ async def list_pedimento_transport_catalog(
@router.get("/{code}", response_model=PedimentoTransportCatalogDTO)
async def get_pedimento_transport_catalog(
code: str,
company_id: int = Query(..., description="ID de la empresa"),
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
):
from core.security import validate_access_to_resource
validate_access_to_resource(db, company_id, current_user, ["pedimentos_anexo22.view"])
async def get_pedimento_transport_catalog(code: str, db: Session = Depends(get_core_db)):
obj = (
db.query(PedimentoTransportCatalog)
.filter(PedimentoTransportCatalog.code == code)
@@ -68,12 +57,9 @@ async def get_pedimento_transport_catalog(
@router.post("/", response_model=PedimentoTransportCatalogDTO, status_code=201)
async def create_pedimento_transport_catalog(
data: PedimentoTransportCatalogDTO,
company_id: int = Query(..., description="ID de la empresa"),
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
user=Depends(get_current_user),
):
from core.security import validate_access_to_resource
validate_access_to_resource(db, company_id, current_user, ["pedimentos_anexo22.view"])
obj = PedimentoTransportCatalog(**data.model_dump())
db.add(obj)
db.commit()
@@ -85,12 +71,9 @@ async def create_pedimento_transport_catalog(
async def update_pedimento_transport_catalog(
code: str,
data: PedimentoTransportCatalogDTO,
company_id: int = Query(..., description="ID de la empresa"),
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
user=Depends(get_current_user),
):
from core.security import validate_access_to_resource
validate_access_to_resource(db, company_id, current_user, ["pedimentos_anexo22.view"])
obj = (
db.query(PedimentoTransportCatalog)
.filter(PedimentoTransportCatalog.code == code)
@@ -108,12 +91,9 @@ async def update_pedimento_transport_catalog(
@router.delete("/{code}", status_code=204)
async def delete_pedimento_transport_catalog(
code: str,
company_id: int = Query(..., description="ID de la empresa"),
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
user=Depends(get_current_user),
):
from core.security import validate_access_to_resource
validate_access_to_resource(db, company_id, current_user, ["pedimentos_anexo22.view"])
obj = (
db.query(PedimentoTransportCatalog)
.filter(PedimentoTransportCatalog.code == code)

View File

@@ -16,13 +16,10 @@ router = APIRouter(prefix="/states")
async def list_states(
page: int = Query(1, ge=1, description="Número de página"),
page_size: int = Query(50, ge=1, le=100, description="Tamaño de página"),
company_id: int = Query(..., description="ID de la empresa"),
search: str = Query(None, description="Término de búsqueda"),
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
):
from core.security import validate_access_to_resource
validate_access_to_resource(db, company_id, current_user, ["ref_states.view"])
skip = (page - 1) * page_size
query = db.query(State)

View File

@@ -1,7 +1,7 @@
from typing import Any, Dict
from core.database import get_core_db
from core.security import get_current_user, validate_access_to_resource
from core.security import get_current_user
from fastapi import APIRouter, Depends, HTTPException, Query
from sqlalchemy.orm import Session
from sqlalchemy import or_
@@ -16,14 +16,9 @@ router = APIRouter(prefix="/transport-modes")
async def list_transport_modes(
page: int = Query(1, ge=1, description="Número de página"),
page_size: int = Query(50, ge=1, le=100, description="Tamaño de página"),
company_id: int = Query(..., description="ID de la empresa"),
search: str = Query(None, description="Término de búsqueda"),
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
):
# 🛡️ Permiso de Lectura (Listado)
validate_access_to_resource(db, company_id, current_user, required_permissions=["ref_transport_modes.view"])
skip = (page - 1) * page_size
query = db.query(TransportMode)
@@ -46,15 +41,7 @@ async def list_transport_modes(
@router.get("/{key}", response_model=TransportModeDTO)
async def get_transport_mode(
key: str,
company_id: int = Query(..., description="ID de la empresa"),
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
):
# 🛡️ Permiso de Lectura (Individual)
validate_access_to_resource(db, company_id, current_user, required_permissions=["ref_transport_modes.view"])
async def get_transport_mode(key: str, db: Session = Depends(get_core_db)):
obj = db.query(TransportMode).filter(TransportMode.key == key).first()
if not obj:
raise HTTPException(status_code=404, detail="Not found")
@@ -64,13 +51,9 @@ async def get_transport_mode(
@router.post("/", response_model=TransportModeDTO, status_code=201)
async def create_transport_mode(
data: TransportModeDTO,
company_id: int = Query(..., description="ID de la empresa"),
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
user=Depends(get_current_user),
):
# 🛡️ Permiso de Creación
validate_access_to_resource(db, company_id, current_user, required_permissions=["ref_transport_modes.create"])
obj = TransportMode(**data.dict())
db.add(obj)
db.commit()
@@ -82,13 +65,9 @@ async def create_transport_mode(
async def update_transport_mode(
key: str,
data: TransportModeDTO,
company_id: int = Query(..., description="ID de la empresa"),
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
user=Depends(get_current_user),
):
# 🛡️ Permiso de Edición
validate_access_to_resource(db, company_id, current_user, required_permissions=["ref_transport_modes.edit"])
obj = db.query(TransportMode).filter(TransportMode.key == key).first()
if not obj:
raise HTTPException(status_code=404, detail="Not found")
@@ -101,17 +80,11 @@ async def update_transport_mode(
@router.delete("/{key}", status_code=204)
async def delete_transport_mode(
key: str,
company_id: int = Query(..., description="ID de la empresa"),
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
key: str, db: Session = Depends(get_core_db), user=Depends(get_current_user)
):
# 🛡️ Permiso de Borrado
validate_access_to_resource(db, company_id, current_user, required_permissions=["ref_transport_modes.delete"])
obj = db.query(TransportMode).filter(TransportMode.key == key).first()
if not obj:
raise HTTPException(status_code=404, detail="Not found")
db.delete(obj)
db.commit()
return None
return None

View File

@@ -16,13 +16,9 @@ router = APIRouter(prefix="/transport-types")
def list_transport_types(
page: int = Query(1, ge=1, description="Número de página"),
page_size: int = Query(50, ge=1, le=100, description="Tamaño de página"),
company_id: int = Query(..., description="ID de la empresa"),
search: str = Query(None, description="Término de búsqueda"),
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
):
from core.security import validate_access_to_resource
validate_access_to_resource(db, company_id, current_user, ["ref_transport_types.view"])
skip = (page - 1) * page_size
query = db.query(TransportType)

View File

@@ -16,13 +16,10 @@ router = APIRouter(prefix="/valuation-methods")
async def list_valuation_methods(
page: int = Query(1, ge=1, description="Número de página"),
page_size: int = Query(50, ge=1, le=100, description="Tamaño de página"),
company_id: int = Query(..., description="ID de la empresa"),
search: str = Query(None, description="Término de búsqueda"),
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
):
from core.security import validate_access_to_resource
validate_access_to_resource(db, company_id, current_user, ["ref_valuation_methods.view", "cat_valuation.view"], require_all=False)
skip = (page - 1) * page_size
query = db.query(ValuationMethod)