feature/errores-legibles-tabla

This commit is contained in:
2026-04-28 07:24:52 -06:00
committed by Kevin_Ramirez
parent 827afe3ef0
commit 74877b3c3a
4 changed files with 56 additions and 28 deletions

View File

@@ -239,27 +239,42 @@ def calculate_values(
if not result:
return
if not line.financial or not line.quantity:
return
currency, currency_type, exchange_rate = result
if currency_type in ("USD", "ME"):
currency = "foreign"
elif currency_type in ("MXN", "MN"):
currency = "local"
# Evitar None * None / NoneType * Decimal al guardar sin cantidad o sin costo capturado
qty = (
line.quantity.quantity
if line.quantity.quantity is not None
else Decimal("0")
)
capture = (
line.financial.unit_cost_capture
if line.financial.unit_cost_capture is not None
else Decimal("0")
)
if currency == "foreign": # ME
line.financial.unit_cost_usd = line.financial.unit_cost_capture
line.financial.value_usd = line.financial.unit_cost_usd * line.quantity.quantity
line.financial.unit_cost_mxn = line.financial.unit_cost_capture * (exchange_rate or 1)
line.financial.value_mxn = line.financial.unit_cost_mxn * line.quantity.quantity
line.financial.value_mc = line.financial.unit_cost_usd * line.quantity.quantity
line.financial.unit_cost_usd = capture
line.financial.value_usd = capture * qty
line.financial.unit_cost_mxn = capture * (exchange_rate or 1)
line.financial.value_mxn = line.financial.unit_cost_mxn * qty
line.financial.value_mc = capture * qty
elif currency == "local": # MN
line.financial.unit_cost_mxn = line.financial.unit_cost_capture
line.financial.value_mxn = line.financial.unit_cost_mxn * line.quantity.quantity
line.financial.unit_cost_usd = line.financial.unit_cost_capture / (exchange_rate or 1)
line.financial.value_usd = line.financial.unit_cost_usd * line.quantity.quantity
line.financial.value_mc = line.financial.unit_cost_usd * line.quantity.quantity
line.financial.unit_cost_mxn = capture
line.financial.value_mxn = line.financial.unit_cost_mxn * qty
line.financial.unit_cost_usd = capture / (exchange_rate or 1)
line.financial.value_usd = line.financial.unit_cost_usd * qty
line.financial.value_mc = line.financial.unit_cost_usd * qty
elif currency == "manual": # MC
line.financial.unit_cost_usd = line.financial.unit_cost_capture / (exchange_rate or 1)
line.financial.value_usd = line.financial.unit_cost_usd * line.quantity.quantity
line.financial.unit_cost_usd = capture / (exchange_rate or 1)
line.financial.value_usd = line.financial.unit_cost_usd * qty
line.financial.unit_cost_mxn = line.financial.unit_cost_usd * (exchange_rate or 1)
line.financial.value_mxn = line.financial.unit_cost_mxn * line.quantity.quantity
line.financial.value_mc = line.financial.unit_cost_capture * line.quantity.quantity
line.financial.value_mxn = line.financial.unit_cost_mxn * qty
line.financial.value_mc = capture * qty

View File

@@ -98,6 +98,7 @@ def validate_update(
line.financial.unit_cost_mxn = unit_cost_capture
quantity = line.quantity.quantity if line.quantity.quantity is not None else existing_line.quantity.quantity
quantity = quantity if quantity is not None else Decimal("0")
if line.financial.unit_cost_usd is not None:
line.financial.value_usd = line.financial.unit_cost_usd * quantity

View File

@@ -138,21 +138,32 @@ def calculate_values(
currency = "local"
# si currency_type es otro o None, se usa currency tal cual
qty = (
line.quantity.quantity
if line.quantity.quantity is not None
else Decimal("0")
)
capture = (
line.financial.unit_cost_capture
if line.financial.unit_cost_capture is not None
else Decimal("0")
)
if currency == "foreign":
line.financial.unit_cost_usd = line.financial.unit_cost_capture
line.financial.value_usd = line.financial.unit_cost_usd * line.quantity.quantity
line.financial.unit_cost_mxn = line.financial.unit_cost_capture * (exchange_rate or 1)
line.financial.value_mxn = line.financial.unit_cost_mxn * line.quantity.quantity
line.financial.value_mc = line.financial.unit_cost_usd * line.quantity.quantity
line.financial.unit_cost_usd = capture
line.financial.value_usd = capture * qty
line.financial.unit_cost_mxn = capture * (exchange_rate or 1)
line.financial.value_mxn = line.financial.unit_cost_mxn * qty
line.financial.value_mc = capture * qty
elif currency == "local":
line.financial.unit_cost_mxn = line.financial.unit_cost_capture
line.financial.value_mxn = line.financial.unit_cost_mxn * line.quantity.quantity
line.financial.unit_cost_usd = line.financial.unit_cost_capture / (exchange_rate or 1)
line.financial.value_usd = line.financial.unit_cost_usd * line.quantity.quantity
line.financial.value_mc = line.financial.unit_cost_usd * line.quantity.quantity
line.financial.unit_cost_mxn = capture
line.financial.value_mxn = line.financial.unit_cost_mxn * qty
line.financial.unit_cost_usd = capture / (exchange_rate or 1)
line.financial.value_usd = line.financial.unit_cost_usd * qty
line.financial.value_mc = line.financial.unit_cost_usd * qty
elif currency == "manual":
line.financial.unit_cost_usd = line.financial.unit_cost_capture / (exchange_rate or 1)
line.financial.value_usd = line.financial.unit_cost_usd * line.quantity.quantity
line.financial.unit_cost_usd = capture / (exchange_rate or 1)
line.financial.value_usd = line.financial.unit_cost_usd * qty
line.financial.unit_cost_mxn = line.financial.unit_cost_usd * (exchange_rate or 1)
line.financial.value_mxn = line.financial.unit_cost_mxn * line.quantity.quantity
line.financial.value_mc = line.financial.unit_cost_capture * line.quantity.quantity
line.financial.value_mxn = line.financial.unit_cost_mxn * qty
line.financial.value_mc = capture * qty

View File

@@ -95,6 +95,7 @@ def validate_update(
line.financial.unit_cost_mxn = unit_cost_capture
quantity = line.quantity.quantity if line.quantity.quantity is not None else existing_line.quantity.quantity
quantity = quantity if quantity is not None else Decimal("0")
if line.financial.unit_cost_usd is not None:
line.financial.value_usd = line.financial.unit_cost_usd * quantity