Previously, orders deleted from Oracle (sters=1) remained as IMPORTED in SQLite, and deleted invoices kept stale cache data. Now the refresh button and sync cycle re-verify all imported orders against Oracle: - Deleted orders → marked DELETED_IN_ROA with cleared id_comanda - Deleted invoices → invoice cache fields cleared - New status badge for DELETED_IN_ROA in dashboard and logs Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
76 lines
2.8 KiB
Python
76 lines
2.8 KiB
Python
import logging
|
|
from .. import database
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def check_invoices_for_orders(id_comanda_list: list) -> dict:
|
|
"""Check which orders have been invoiced in Oracle (vanzari table).
|
|
Returns {id_comanda: {facturat, numar_act, serie_act, total_fara_tva, total_tva, total_cu_tva}}
|
|
"""
|
|
if not id_comanda_list or database.pool is None:
|
|
return {}
|
|
|
|
result = {}
|
|
conn = database.get_oracle_connection()
|
|
try:
|
|
with conn.cursor() as cur:
|
|
for i in range(0, len(id_comanda_list), 500):
|
|
batch = id_comanda_list[i:i+500]
|
|
placeholders = ",".join([f":c{j}" for j in range(len(batch))])
|
|
params = {f"c{j}": cid for j, cid in enumerate(batch)}
|
|
|
|
cur.execute(f"""
|
|
SELECT id_comanda, numar_act, serie_act,
|
|
total_fara_tva, total_tva, total_cu_tva,
|
|
TO_CHAR(data_act, 'YYYY-MM-DD') AS data_act
|
|
FROM vanzari
|
|
WHERE id_comanda IN ({placeholders}) AND sters = 0
|
|
""", params)
|
|
for row in cur:
|
|
result[row[0]] = {
|
|
"facturat": True,
|
|
"numar_act": row[1],
|
|
"serie_act": row[2],
|
|
"total_fara_tva": float(row[3]) if row[3] else 0,
|
|
"total_tva": float(row[4]) if row[4] else 0,
|
|
"total_cu_tva": float(row[5]) if row[5] else 0,
|
|
"data_act": row[6],
|
|
}
|
|
except Exception as e:
|
|
logger.warning(f"Invoice check failed (table may not exist): {e}")
|
|
finally:
|
|
database.pool.release(conn)
|
|
|
|
return result
|
|
|
|
|
|
def check_orders_exist(id_comanda_list: list) -> set:
|
|
"""Check which id_comanda values still exist in Oracle COMENZI (sters=0).
|
|
Returns set of id_comanda that exist.
|
|
"""
|
|
if not id_comanda_list or database.pool is None:
|
|
return set()
|
|
|
|
existing = set()
|
|
conn = database.get_oracle_connection()
|
|
try:
|
|
with conn.cursor() as cur:
|
|
for i in range(0, len(id_comanda_list), 500):
|
|
batch = id_comanda_list[i:i+500]
|
|
placeholders = ",".join([f":c{j}" for j in range(len(batch))])
|
|
params = {f"c{j}": cid for j, cid in enumerate(batch)}
|
|
|
|
cur.execute(f"""
|
|
SELECT id_comanda FROM COMENZI
|
|
WHERE id_comanda IN ({placeholders}) AND sters = 0
|
|
""", params)
|
|
for row in cur:
|
|
existing.add(row[0])
|
|
except Exception as e:
|
|
logger.warning(f"Order existence check failed: {e}")
|
|
finally:
|
|
database.pool.release(conn)
|
|
|
|
return existing
|