diff --git a/migration/transform_transactions.py b/migration/transform_transactions.py index 12f2e67..4eb262b 100644 --- a/migration/transform_transactions.py +++ b/migration/transform_transactions.py @@ -149,10 +149,11 @@ def main(): skip_cust = skip_date = skip_dupe = 0 def add(cid, domain, tdate, amount, currency, *, period=None, reference=None, - typeid=None, check=None, message=None, src_db=None, src_tbl=None, legacy=None): + typeid=None, check=None, message=None, src_db=None, src_tbl=None, legacy=None, + outstanding=0): tx.append((str(uuid.uuid4()), cid, domain, typeid, tdate, period, reference, amount if amount is not None else Decimal(0), currency, None, check, - message, 0, src_db, src_tbl, legacy)) + message, outstanding, src_db, src_tbl, legacy)) # Business key of a real cash payment. `folio` is deliberately excluded: it # is a per-table sequential number that collides between EFECTIVO and @@ -230,6 +231,16 @@ def main(): src_db="UTILITIES", src_tbl=legacy_tbl, legacy=str(int(r["_row_num"]))) def billing(name, legacy_tbl): + """Load a DATOS2-shaped billing ledger. + + NOPAGO is the legacy "still owed" flag. The website reads it directly — + `account.statement.php` splits the statement on `NOPAGO = 0` vs + `NOPAGO = 1` and renders the latter as the "Outstanding Bills Requiring + Attention" table — so dropping it does not merely lose a column, it + silently empties that whole section for anyone served off the platform. + Only these three tables carry it (76 rows set in DATOS2 today); the + EFECTIVO/FM3 cash streams have no such column and stay 0. + """ nonlocal skip_cust, skip_date df = load("stg_utilities", name) for _, r in df.iterrows(): @@ -243,7 +254,8 @@ def main(): add(cid, "UTILITY", td, dec(r["chargecredit"], Decimal(0)), "MXN", period=s(r["period"]), reference=s(r["refer"]), typeid=tid, check=s(r["cheque"]), src_db="UTILITIES", src_tbl=legacy_tbl, - legacy=str(int(r["_row_num"]))) + legacy=str(int(r["_row_num"])), + outstanding=1 if s(r["nopago"]) == "1" else 0) def iva(): nonlocal skip_cust @@ -297,7 +309,7 @@ def main(): if new_types: c.executemany("INSERT INTO type_transactions (id,nameEn,nameEs,isService) VALUES (%s,%s,%s,%s)", new_types) tx = [(t[0], t[1], t[2], (db_types.get(fresh_name.get(t[3])) if t[3] else None), *t[4:]) for t in tx] - c.executemany("INSERT INTO transactions (id,customerId,domain,typeId,transactionDate,period,reference,amount,currency,exchangeRate,checkNumber,message,outstanding,legacySourceDb,legacySourceTable,legacyId) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s) ON DUPLICATE KEY UPDATE customerId=VALUES(customerId),domain=VALUES(domain),typeId=VALUES(typeId),transactionDate=VALUES(transactionDate),period=VALUES(period),reference=VALUES(reference),amount=VALUES(amount),currency=VALUES(currency),checkNumber=VALUES(checkNumber),message=VALUES(message),voidedAt=NULL", tx) + c.executemany("INSERT INTO transactions (id,customerId,domain,typeId,transactionDate,period,reference,amount,currency,exchangeRate,checkNumber,message,outstanding,legacySourceDb,legacySourceTable,legacyId) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s) ON DUPLICATE KEY UPDATE customerId=VALUES(customerId),domain=VALUES(domain),typeId=VALUES(typeId),transactionDate=VALUES(transactionDate),period=VALUES(period),reference=VALUES(reference),amount=VALUES(amount),currency=VALUES(currency),checkNumber=VALUES(checkNumber),message=VALUES(message),outstanding=VALUES(outstanding),voidedAt=NULL", tx) else: c.execute("SET FOREIGN_KEY_CHECKS=0") for t in ("transactions", "type_transactions", "exchange_rates"):