fix: update invoice type filtering for repair imports and exports

This commit is contained in:
Galindo97
2026-01-30 18:03:41 -06:00
parent b8e25cd2e1
commit 461f8ececb
4 changed files with 104 additions and 104 deletions

View File

@@ -337,7 +337,7 @@ class ExportRepairService:
# ALL mode: bring all exports without filtering by specific invoice_type
pass
else:
where_conditions.append("ih.invoice_type IN ('EXREP', 'MATEXREP')")
where_conditions.append("ih.invoice_type = 'REPAR'")
# Date range filter
if filters.range_type.value == "FF":

View File

@@ -41,26 +41,17 @@ class TemporaryImportQueries:
'' AS C56,
'' AS C57,
'' AS C58,
COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_usd END), 0) AS total_me,
COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_mxn END), 0) AS total_mn
COALESCE(fin.value_me, 0) AS total_me,
COALESCE(fin.value_mn, 0) AS total_mn
FROM a76.invoice_header ih
LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id
LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id
LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id
LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id
LEFT JOIN a76.pedimentos ped_r1 ON ped_r1.id = cmp.pedimento_r1
LEFT JOIN a76.items i ON i.invoice_id = ih.id
LEFT JOIN a76.item_lines il ON il.item_id = i.id
LEFT JOIN a24.fa_item_lines fil ON fil.id = il.id
LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id
WHERE ih.operation_type = 'imp'
AND ih.invoice_type = 'TEM'
AND {where_str}
GROUP BY ih.id, ih.invoice_number, ped.pedimento_number, ped.pedimento_code, ped.regime,
log.entry_exit_date, log.delivery_date, log.payment_date, cmp.remesa, fin.exchange_rate,
cmp.provider_id, cmp.sold_to_id, cmp.customs_broker_id, cmp.aduana, ped_r1.pedimento_number,
cmp.edocument, cmp.vucem_operation_num, ih.emission_date, ih.capture_user, ih.who_updated,
log.carrier_id, log.transport_num, log.license_plate
ORDER BY ih.invoice_number
"""
@@ -133,9 +124,8 @@ class TemporaryImportQueries:
LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id
LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id
LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id
LEFT JOIN a76.item_lines il ON il.item_id = (
SELECT id FROM a76.items WHERE invoice_id = ih.id LIMIT 1
)
LEFT JOIN a76.items i ON i.invoice_id = ih.id
LEFT JOIN a76.item_lines il ON il.item_id = i.id
LEFT JOIN a76.item_line_descriptions ld ON ld.item_line_id = il.id
LEFT JOIN a76.item_line_quantities lq ON lq.item_line_id = il.id
LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id
@@ -146,6 +136,7 @@ class TemporaryImportQueries:
WHERE ih.operation_type = 'imp'
AND ih.invoice_type = 'TEM'
AND {where_str}
ORDER BY ih.invoice_number, il.line_number
"""
@staticmethod
@@ -219,27 +210,17 @@ class DefinitiveImportQueries:
'' AS C57,
'' AS C58,
'' AS C59,
COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_usd END), 0) AS total_me,
COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_mxn END), 0) AS total_mn
COALESCE(fin.value_me, 0) AS total_me,
COALESCE(fin.value_mn, 0) AS total_mn
FROM a76.invoice_header ih
LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id
LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id
LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id
LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id
LEFT JOIN a76.pedimentos ped_r1 ON ped_r1.id = cmp.pedimento_r1
LEFT JOIN a76.items i ON i.invoice_id = ih.id
LEFT JOIN a76.item_lines il ON il.item_id = i.id
LEFT JOIN a24.fa_item_lines fil ON fil.id = il.id
LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id
WHERE ih.operation_type = 'imp'
AND ih.invoice_type IN ('DEF', 'EXDEF', 'MATDE')
AND {where_clause}
GROUP BY ih.id, ih.invoice_number, ped.pedimento_number, ped.pedimento_code, ped.regime,
log.entry_exit_date, log.delivery_date, log.payment_date, log.payment_receipt_num,
fin.exchange_rate, cmp.provider_id, cmp.sold_to_id, cmp.customs_broker_id,
ih.purchase_order, cmp.aduana, ped_r1.pedimento_number, cmp.edocument,
cmp.vucem_operation_num, ih.emission_date, ih.capture_user, ih.who_updated,
log.transport_id, log.transport_num
ORDER BY ih.invoice_number
"""
@@ -355,7 +336,12 @@ class DefinitiveImportQueries:
class RepairImportQueries:
"""SQL queries for repair imports (PostgreSQL schema)."""
"""SQL queries for repair imports (PostgreSQL schema).
Note: Repair imports are NOT identified by invoice_type, but by having
cross-references (search_invoice field) that link them to export invoices.
These are regular import invoices (TEM, DEF, etc.) that were imported for repair.
"""
@staticmethod
def build_aggregated_query(db_name: str, where_str: str, discharge_clause: str = "") -> str:
@@ -387,27 +373,23 @@ class RepairImportQueries:
COALESCE(log.carrier_id, '') AS C44,
COALESCE(log.transport_num, '') AS C45,
COALESCE(ped.pedimento_code, '') AS C47,
COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_usd END), 0) AS total_me,
COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_mxn END), 0) AS total_mn
COALESCE(fin.value_me, 0) AS total_me,
COALESCE(fin.value_mn, 0) AS total_mn
FROM a76.invoice_header ih
LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id
LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id
LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id
LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id
LEFT JOIN a76.items i ON i.invoice_id = ih.id
LEFT JOIN a76.item_lines il ON il.item_id = i.id
LEFT JOIN a24.fa_item_lines fil ON fil.id = il.id
LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id
WHERE ih.operation_type = 'imp'
AND ih.invoice_type = 'REP'
AND COALESCE(cmp.is_regime_change, false) = false
AND EXISTS (
SELECT 1 FROM a76.item_lines il2
INNER JOIN a24.fa_item_lines fil2 ON fil2.id = il2.id
WHERE il2.item_id = i.id AND fil2.search_invoice IS NOT NULL
)
{"AND " + where_str if where_str else ""}
{discharge_filter}
GROUP BY ih.id, ih.invoice_number, ped.pedimento_number, ped.pedimento_code, ped.regime,
log.payment_date, cmp.remesa, fin.exchange_rate, cmp.provider_id, cmp.sold_to_id,
cmp.customs_broker_id, ih.purchase_order, ped.customs_office, cmp.edocument,
cmp.vucem_operation_num, ih.emission_date, ih.capture_user, ih.who_updated,
log.carrier_id, log.transport_num
ORDER BY ih.invoice_number
"""
@@ -476,11 +458,12 @@ class RepairImportQueries:
LEFT JOIN a76.item_line_quantities lq ON lq.item_line_id = il.id
LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id
LEFT JOIN a76.item_line_customs lc ON lc.item_line_id = il.id
LEFT JOIN a24.fa_item_lines fil ON fil.id = il.id
LEFT JOIN a76.parts prt ON prt.id = il.part_number
LEFT JOIN a76.units_of_measure um ON um.id = il.unit_of_measure
WHERE ih.operation_type = 'imp'
AND ih.invoice_type = 'REP'
AND COALESCE(cmp.is_regime_change, false) = false
AND fil.search_invoice IS NOT NULL
{"AND " + where_str if where_str else ""}
{discharge_filter}
ORDER BY ih.invoice_number, il.line_number
@@ -562,24 +545,14 @@ class ExportQueries:
COALESCE(ih.capture_user, '') AS C50,
COALESCE(ih.who_updated, '') AS C51,
COALESCE(log.transport_id || ' ' || log.transport_num, '') AS C53,
COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_usd END), 0) AS total_me,
COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_mxn END), 0) AS total_mn
COALESCE(fin.value_me, 0) AS total_me,
COALESCE(fin.value_mn, 0) AS total_mn
FROM a76.invoice_header ih
LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id
LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id
LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id
LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id
LEFT JOIN a76.items i ON i.invoice_id = ih.id
LEFT JOIN a76.item_lines il ON il.item_id = i.id
LEFT JOIN a24.fa_item_lines fil ON fil.id = il.id
LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id
WHERE {where_clause}
GROUP BY ih.id, ih.invoice_number, ih.is_updated, ped.pedimento_number, ped.pedimento_code, ped.regime,
log.entry_exit_date, log.delivery_date, log.payment_date, log.payment_receipt_num,
cmp.provider_id, cmp.sold_to_id, cmp.customs_broker_id, ih.purchase_order, cmp.aduana,
ih.invoice_type, cmp.edocument, cmp.vucem_operation_num, fin.exchange_rate,
ih.emission_date, ih.capture_user, ih.who_updated, log.transport_id, log.transport_num,
ih.invoice_date
ORDER BY ih.invoice_number
"""
@@ -736,25 +709,16 @@ class ExportRepairQueries:
COALESCE(ih.who_updated, '') AS C51,
COALESCE(log.carrier_id, '') AS C52,
COALESCE(log.transport_id || ' ' || log.transport_num, '') AS C53,
COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_usd END), 0) AS total_me,
COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_mxn END), 0) AS total_mn
COALESCE(fin.value_me, 0) AS total_me,
COALESCE(fin.value_mn, 0) AS total_mn
FROM a76.invoice_header ih
LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id
LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id
LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id
LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id
LEFT JOIN a76.items i ON i.invoice_id = ih.id
LEFT JOIN a76.item_lines il ON il.item_id = i.id
LEFT JOIN a24.fa_item_lines fil ON fil.id = il.id
LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id
WHERE ih.operation_type = 'exp'
AND ih.invoice_type = 'REP'
AND ih.invoice_type = 'REPAR'
{"AND " + where_str if where_str else ""}
GROUP BY ih.id, ih.invoice_number, ped.pedimento_number, ped.pedimento_code, ped.regime,
log.payment_date, cmp.remesa, fin.exchange_rate, cmp.provider_id, cmp.sold_to_id,
cmp.customs_broker_id, ih.purchase_order, ped.customs_office, ih.document_type,
cmp.edocument, cmp.vucem_operation_num, ih.invoice_date, ih.capture_user,
ih.who_updated, log.carrier_id, log.transport_id, log.transport_num
ORDER BY ih.invoice_number
"""
@@ -837,7 +801,7 @@ class ExportRepairQueries:
LEFT JOIN a76.parts prt ON prt.id = il.part_number
LEFT JOIN a76.units_of_measure um ON um.id = il.unit_of_measure
WHERE UPPER(ih.operation_type) IN ('EXP', 'TRA', 'RET')
AND UPPER(ih.invoice_type) IN ('DEF', 'REP', 'EXDEF', 'MATDE')
AND UPPER(ih.invoice_type) IN ('DEF', 'REPAR', 'EXDEF', 'MATDE')
AND {where_str}
ORDER BY ih.invoice_number, il.line_number
"""

View File

@@ -331,12 +331,8 @@ class RepairImportService:
# STRICT SEPARATION: Only imports for repair
where_conditions.append("ih.operation_type = 'imp'")
# GOLDEN RULE: If coming from /all, only filter by operation_type
if hasattr(filters, 'discharge_filter') and filters.discharge_filter == 'ALL':
# ALL mode: bring all imports without filtering by specific invoice_type
pass
else:
where_conditions.append("ih.invoice_type IN ('REP', 'MATREP')")
# Repair imports are identified by cross-references, not invoice_type
where_conditions.append("COALESCE(cmp.is_regime_change, false) = false")
# Date range filter
if filters.range_type.value == "FF":