fix(import): 3 production bugs — items cache, CUI lookup, ANAF name
Some checks failed
Tests / fast-tests (push) Has been cancelled
Tests / full-tests (push) Has been cancelled

1. SQLite order_items overwrite on re-import (VELA CAFE #484669620):
   add_order_items, save_orders_batch, mark_order_deleted_in_roa now use
   DELETE + INSERT so GoMag quantity changes propagate to dashboard.

2. PL/SQL strict CUI lookup tolerates whitespace (FG COFFE #485065210):
   cauta_partener_dupa_cod_fiscal regex ^RO\d → ^RO\s*\d; IN-set uses
   canonical v_ro_cui. Platitor/neplatitor business rule preserved.
   Python defensive: re.sub whitespace collapse in determine_partner_data.

3. New PJ partners use ANAF official denumire (denumire_override) instead
   of GoMag company_name. Existing partners (found by CUI) untouched.

Tests: 18 new (5 SQLite unit, 8 Python unit, 5 Oracle PL/SQL). All green
locally: 228 unit + 26 oracle + 33 e2e.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Claude Agent
2026-04-16 14:32:59 +00:00
parent 5397bec35d
commit 3bcb26b0bd
8 changed files with 685 additions and 13 deletions

View File

@@ -1,6 +1,7 @@
import html
import json
import logging
import re
import oracledb
from datetime import datetime, timedelta
from .. import database
@@ -65,7 +66,9 @@ def determine_partner_data(order) -> dict:
denumire = clean_web_text(
f"{order.billing.lastname} {order.billing.firstname}"
).upper()
cod_fiscal = clean_web_text(order.billing.company_code) or None
raw_cf = clean_web_text(order.billing.company_code) or None
# Collapse internal whitespace: "RO 34963277" → "RO34963277"
cod_fiscal = re.sub(r'\s+', '', raw_cf) if raw_cf else None
registru = clean_web_text(order.billing.company_reg) or None
is_pj = 1
else:
@@ -242,7 +245,7 @@ def build_articles_json(items, order=None, settings=None) -> str:
return json.dumps(articles)
def import_single_order(order, id_pol: int = None, id_sectie: int = None, app_settings: dict = None, id_gestiuni: list[int] = None, cod_fiscal_override: str = None, anaf_strict: int = None) -> dict:
def import_single_order(order, id_pol: int = None, id_sectie: int = None, app_settings: dict = None, id_gestiuni: list[int] = None, cod_fiscal_override: str = None, anaf_strict: int = None, denumire_override: str = None) -> dict:
"""Import a single order into Oracle ROA.
Returns dict with:
@@ -279,7 +282,11 @@ def import_single_order(order, id_pol: int = None, id_sectie: int = None, app_se
id_partener = cur.var(oracledb.DB_TYPE_NUMBER)
_pdata = determine_partner_data(order)
denumire = _pdata["denumire"]
# PJ: prefer ANAF official name (denumire_override) over GoMag company_name
# (for new partner creation; existing partner lookup is CUI-based)
denumire = (denumire_override
if (_pdata["is_pj"] and denumire_override)
else _pdata["denumire"])
cod_fiscal = (cod_fiscal_override or _pdata["cod_fiscal"]) if _pdata["is_pj"] else None
registru = _pdata["registru"]
is_pj = _pdata["is_pj"]