feat(sync): add delivery cost, discount tracking and import settings

Parse delivery.total and discounts[] from GoMag JSON into new
delivery_cost/discount_total fields. Add app_settings table for
configuring transport/discount CODMAT codes. When configured,
transport and discount are appended as extra articles in the
Oracle import JSON. Reorder Total column in dashboard/logs tables
and show transport/discount breakdown in order detail modals.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Claude Agent
2026-03-16 10:15:17 +00:00
parent 137c4a8b0b
commit 25aa9e544c
10 changed files with 302 additions and 22 deletions

View File

@@ -60,8 +60,9 @@ def format_address_for_oracle(address: str, city: str, region: str) -> str:
return f"JUD:{region_clean};{city_clean};{address_clean}"
def build_articles_json(items) -> str:
"""Build JSON string for Oracle PACK_IMPORT_COMENZI.importa_comanda."""
def build_articles_json(items, order=None, settings=None) -> str:
"""Build JSON string for Oracle PACK_IMPORT_COMENZI.importa_comanda.
Includes transport and discount as extra articles if configured."""
articles = []
for item in items:
articles.append({
@@ -71,10 +72,35 @@ def build_articles_json(items) -> str:
"vat": str(item.vat),
"name": clean_web_text(item.name)
})
if order and settings:
transport_codmat = settings.get("transport_codmat", "")
transport_vat = settings.get("transport_vat", "21")
discount_codmat = settings.get("discount_codmat", "")
# Transport as article with quantity +1
if order.delivery_cost > 0 and transport_codmat:
articles.append({
"sku": transport_codmat,
"quantity": "1",
"price": str(order.delivery_cost),
"vat": transport_vat,
"name": "Transport"
})
# Discount total with quantity -1 (positive price)
if order.discount_total > 0 and discount_codmat:
articles.append({
"sku": discount_codmat,
"quantity": "-1",
"price": str(order.discount_total),
"vat": "21",
"name": "Discount"
})
return json.dumps(articles)
def import_single_order(order, id_pol: int = None, id_sectie: int = None) -> dict:
def import_single_order(order, id_pol: int = None, id_sectie: int = None, app_settings: dict = None) -> dict:
"""Import a single order into Oracle ROA.
Returns dict with:
@@ -203,7 +229,7 @@ def import_single_order(order, id_pol: int = None, id_sectie: int = None) -> dic
result["id_adresa_livrare"] = int(addr_livr_id)
# Step 4: Build articles JSON and import order
articles_json = build_articles_json(order.items)
articles_json = build_articles_json(order.items, order, app_settings)
# Use CLOB for the JSON
clob_var = cur.var(oracledb.DB_TYPE_CLOB)