feature/reportes
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
from decimal import Decimal
|
||||
from sqlalchemy.orm import Session
|
||||
from api.v1.modules.a76.general_catalogs.unit_conversions.models import UnitConversion
|
||||
from api.v1.modules.a76.general_catalogs.equivalencies.models import EquivalencyItem
|
||||
|
||||
def _get_unit_equivalence(
|
||||
db: Session,
|
||||
@@ -13,11 +14,15 @@ def _get_unit_equivalence(
|
||||
Busca una conversión entre dos unidades de medida.
|
||||
Paridad: REVEQUIVALENCIA (Clarion SCAII).
|
||||
|
||||
Busca primero en el catálogo de Conversiones (unit_conversions) y,
|
||||
si no encuentra, en el catálogo de Equivalencias (equivalency_items).
|
||||
|
||||
Retorna (multi_divide, factor_conv):
|
||||
- ('M', factor) → multiplicar cantidad por factor
|
||||
- ('D', factor) → dividir cantidad por factor
|
||||
- ('', 0) → no existe equivalencia
|
||||
"""
|
||||
# ── 1. Catálogo de Conversiones ──────────────────────────────────────────
|
||||
conv = (
|
||||
db.query(UnitConversion)
|
||||
.filter(
|
||||
@@ -44,4 +49,33 @@ def _get_unit_equivalence(
|
||||
if conv_inv and conv_inv.conversion_factor:
|
||||
return "D", conv_inv.conversion_factor
|
||||
|
||||
# ── 2. Catálogo de Equivalencias (fallback) ──────────────────────────────
|
||||
eq = (
|
||||
db.query(EquivalencyItem)
|
||||
.filter(
|
||||
EquivalencyItem.tenant_id == tenant_id,
|
||||
EquivalencyItem.company_id == company_id,
|
||||
EquivalencyItem.original_field == from_unit,
|
||||
EquivalencyItem.external_field == to_unit,
|
||||
)
|
||||
.first()
|
||||
)
|
||||
if eq:
|
||||
factor = eq.conversion_factor if eq.conversion_factor else Decimal(1)
|
||||
return "M", factor
|
||||
|
||||
eq_inv = (
|
||||
db.query(EquivalencyItem)
|
||||
.filter(
|
||||
EquivalencyItem.tenant_id == tenant_id,
|
||||
EquivalencyItem.company_id == company_id,
|
||||
EquivalencyItem.original_field == to_unit,
|
||||
EquivalencyItem.external_field == from_unit,
|
||||
)
|
||||
.first()
|
||||
)
|
||||
if eq_inv:
|
||||
factor = eq_inv.conversion_factor if eq_inv.conversion_factor else Decimal(1)
|
||||
return "D", factor
|
||||
|
||||
return "", Decimal(0)
|
||||
|
||||
Reference in New Issue
Block a user