diff --git a/backend/api/v1/modules/a76/invoices/services.py b/backend/api/v1/modules/a76/invoices/services.py index 86db7830..77f4b2fb 100644 --- a/backend/api/v1/modules/a76/invoices/services.py +++ b/backend/api/v1/modules/a76/invoices/services.py @@ -126,7 +126,10 @@ class InvoiceService: # Validar si la factura ya existe invoice_exists(db, invoice_data.invoice_number, tenant_id, company_id, errors) - validate_create_import(db, invoice_data, tenant_id, company_id, errors) + if invoice_data.operation_type == "exp": + validate_create_export(db, invoice_data, tenant_id, company_id, errors) + else: + validate_create_import(db, invoice_data, tenant_id, company_id, errors) # Si hay errores, lanzar excepción ANTES de intentar crear errors.raise_if_errors("Error al crear la factura") diff --git a/backend/api/v1/modules/a76/items/imports/temporary/validators/calculations.py b/backend/api/v1/modules/a76/items/imports/validators/calculations.py similarity index 85% rename from backend/api/v1/modules/a76/items/imports/temporary/validators/calculations.py rename to backend/api/v1/modules/a76/items/imports/validators/calculations.py index 7bc9c5af..565b4ed2 100644 --- a/backend/api/v1/modules/a76/items/imports/temporary/validators/calculations.py +++ b/backend/api/v1/modules/a76/items/imports/validators/calculations.py @@ -2,18 +2,8 @@ from sqlalchemy.orm import Session from api.v1.modules.a76.invoices.models import InvoiceFinancials, InvoiceHeader, InvoiceLogistics from core.exceptions import ErrorCollector -from ....models import LineItem -from ....line_financials.models import LineFinancial -from ....line_financials.schemas import LineFinancialCreate -from ....line_quantities.models import LineQuantity -from ....line_quantities.schemas import LineQuantityCreate -from ....line_customs.models import LineCustom -from ....line_customs.schemas import LineCustomCreate -from ....line_descriptions.models import LineDescription -from ....line_descriptions.schemas import LineDescriptionCreate -from ....line_references.models import LineReference -from api.v1.modules.a24.fa.fa_item_lines.models import FaLineItem -from ....models import LineItem +from ...models import LineItem +from ...models import LineItem from api.v1.modules.a76.classes.models import Class diff --git a/backend/api/v1/modules/a76/items/imports/temporary/validators/common.py b/backend/api/v1/modules/a76/items/imports/validators/common.py similarity index 97% rename from backend/api/v1/modules/a76/items/imports/temporary/validators/common.py rename to backend/api/v1/modules/a76/items/imports/validators/common.py index f1600bff..1958c323 100644 --- a/backend/api/v1/modules/a76/items/imports/temporary/validators/common.py +++ b/backend/api/v1/modules/a76/items/imports/validators/common.py @@ -4,10 +4,10 @@ from api.v1.modules.a76.invoices.common.common_validators import invoice_exists_ from core.exceptions import ErrorCollector from sqlalchemy import func -from ....common.fractions import search_fraction_preference -from ....common.common_validators import item_exists -from ....models import LineItem -from ....line_customs.models import FractionType, LineCustom +from ...common.fractions import search_fraction_preference +from ...common.common_validators import item_exists +from ...models import LineItem +from ...line_customs.models import FractionType, LineCustom from api.v1.modules.a76.items.schemas import LineItemCreate from api.v1.modules.a76.invoices.models import InvoiceHeader from api.v1.modules.a76.classes.models import Class @@ -304,6 +304,10 @@ def validate_common( unit_of_measure = line.unit_of_measure or ( class_.unit_of_measure if class_ else None ) + + #TODO: SSisGen Logic Restringer cantidades decimales para piezas, revisar si es necesario agregar validación similar para otras unidades de medida + #TODO: SSisGen Logic Seguridad + if unit_of_measure == "PZA" and line.quantity.quantity % 1 != 0: errors.add_error( field=f"line[{line_number}].quantity.quantity", diff --git a/backend/api/v1/modules/a76/items/imports/temporary/validators/create.py b/backend/api/v1/modules/a76/items/imports/validators/create.py similarity index 95% rename from backend/api/v1/modules/a76/items/imports/temporary/validators/create.py rename to backend/api/v1/modules/a76/items/imports/validators/create.py index 677df0ed..a925d407 100644 --- a/backend/api/v1/modules/a76/items/imports/temporary/validators/create.py +++ b/backend/api/v1/modules/a76/items/imports/validators/create.py @@ -1,21 +1,12 @@ from decimal import Decimal from sqlalchemy import func, exists from sqlalchemy.orm import Session -from ....common.common_validators import count_items +from ...common.common_validators import count_items from core.exceptions import ErrorCollector -from ....models import LineItem -from ....line_financials.models import LineFinancial -from ....line_financials.schemas import LineFinancialCreate -from ....line_quantities.models import LineQuantity -from ....line_quantities.schemas import LineQuantityCreate -from ....line_customs.models import LineCustom -from ....line_customs.schemas import LineCustomCreate -from ....line_descriptions.models import LineDescription -from ....line_descriptions.schemas import LineDescriptionCreate -from ....line_references.models import LineReference +from ...models import LineItem from api.v1.modules.a24.fa.fa_item_lines.models import FaLineItem -from ....models import LineItem +from ...models import LineItem from api.v1.modules.a76.invoices.models import InvoiceHeader from api.v1.modules.a76.classes.models import Class from api.v1.modules.a76.general_catalogs.packages.models import Package @@ -27,7 +18,7 @@ from .common import validate_common def validate_create( db: Session, - line: LineItem, # LineItemCreate schema (Pydantic) + line: LineItem, tenant_id: int, company_id: int, errors: ErrorCollector, @@ -44,7 +35,7 @@ def validate_create( """ # Access fa_data safely - fa_data = getattr(line, "fa_data", None) + fa_data: FaLineItem = getattr(line, "fa_data", None) # Required field validations if not line.class_id: diff --git a/backend/api/v1/modules/a76/items/imports/temporary/validators/update.py b/backend/api/v1/modules/a76/items/imports/validators/update.py similarity index 98% rename from backend/api/v1/modules/a76/items/imports/temporary/validators/update.py rename to backend/api/v1/modules/a76/items/imports/validators/update.py index 23717f2d..c1343a0d 100644 --- a/backend/api/v1/modules/a76/items/imports/temporary/validators/update.py +++ b/backend/api/v1/modules/a76/items/imports/validators/update.py @@ -1,9 +1,8 @@ from decimal import Decimal from sqlalchemy.orm import Session -from api.v1.modules.a76.invoices.common.common_validators import invoice_exists from core.exceptions import ErrorCollector -from ....models import LineItem +from ...models import LineItem from api.v1.modules.a76.invoices.models import InvoiceHeader from api.v1.modules.a76.general_catalogs.fractions.us_tariff_fractions.models import ( USTariffFraction, diff --git a/backend/api/v1/modules/a76/items/service.py b/backend/api/v1/modules/a76/items/service.py index f75fa1d6..63ca96bb 100644 --- a/backend/api/v1/modules/a76/items/service.py +++ b/backend/api/v1/modules/a76/items/service.py @@ -24,8 +24,8 @@ from api.v1.modules.a76.invoices.common.common_validators import ( invoice_updated, ) from core.exceptions import ErrorCollector -from .imports.temporary.validators.create import validate_create -from .imports.temporary.validators.update import validate_update +from .imports.validators.create import validate_create as validate_create_import +from .imports.validators.update import validate_update as validate_update_import from .schemas import LineItemCreate, LineItemUpdate from .line_financials.models import LineFinancial @@ -329,7 +329,7 @@ class ItemService: item_data.component_part_number_id = resolved_id # Validar el item - validate_create( + validate_create_import( db, item_data, # Schema Pydantic completo tenant_id, @@ -443,7 +443,7 @@ class ItemService: item_data.component_part_number_id = resolved_id # Validar el item que se va a actualizar - validate_update( + validate_update_import( db, item_data, # Schema de update db_item, # LineItem existente en DB