- 129,078 Issues: creation = ticket.date_create, modified = ticket.last_update - 115,721 Invoices: creation = invoice.date_orig - 15,059 Customers: creation = account.date_orig, modified = account.date_last All timestamps now show real legacy dates instead of import date. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
119 lines
4.0 KiB
Python
119 lines
4.0 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Fix creation/modified dates on all migrated documents.
|
|
Sets creation = original legacy date (converted from unix timestamp).
|
|
Fixes Issues, Sales Invoices, Customers, Communications.
|
|
"""
|
|
import pymysql
|
|
import psycopg2
|
|
from datetime import datetime, timezone
|
|
|
|
LEGACY = {"host": "10.100.80.100", "user": "facturation", "password": "VD67owoj",
|
|
"database": "gestionclient", "connect_timeout": 30, "read_timeout": 600}
|
|
PG = {"host": "db", "port": 5432, "user": "postgres", "password": "123",
|
|
"dbname": "_eb65bdc0c4b1b2d6"}
|
|
|
|
def ts_to_dt(unix_ts):
|
|
if not unix_ts or unix_ts <= 0:
|
|
return None
|
|
try:
|
|
return datetime.fromtimestamp(int(unix_ts), tz=timezone.utc).strftime("%Y-%m-%d %H:%M:%S")
|
|
except:
|
|
return None
|
|
|
|
def log(msg):
|
|
print(msg, flush=True)
|
|
|
|
def main():
|
|
log("=== Fix Creation/Modified Dates ===")
|
|
|
|
mc = pymysql.connect(**LEGACY)
|
|
cur = mc.cursor(pymysql.cursors.DictCursor)
|
|
|
|
# 1. Tickets → Issues
|
|
log("Loading ticket dates...")
|
|
cur.execute("SELECT id, date_create, last_update, date_closed FROM ticket ORDER BY id")
|
|
ticket_dates = {r["id"]: r for r in cur.fetchall()}
|
|
|
|
# 2. Invoices → Sales Invoices
|
|
log("Loading invoice dates...")
|
|
cur.execute("SELECT id, date_orig FROM invoice WHERE billing_status = 1 ORDER BY id")
|
|
inv_dates = {r["id"]: r["date_orig"] for r in cur.fetchall()}
|
|
|
|
# 3. Accounts → Customers
|
|
log("Loading account dates...")
|
|
cur.execute("SELECT id, date_orig, date_last FROM account ORDER BY id")
|
|
acct_dates = {r["id"]: r for r in cur.fetchall()}
|
|
|
|
mc.close()
|
|
log(" Loaded {} ticket, {} invoice, {} account dates".format(
|
|
len(ticket_dates), len(inv_dates), len(acct_dates)))
|
|
|
|
pg = psycopg2.connect(**PG)
|
|
pgc = pg.cursor()
|
|
|
|
# Fix Issues
|
|
log("")
|
|
log("--- Fixing Issue dates ---")
|
|
pgc.execute('SELECT name, legacy_ticket_id FROM "tabIssue" WHERE legacy_ticket_id > 0')
|
|
issues = pgc.fetchall()
|
|
fixed_issues = 0
|
|
for name, tid in issues:
|
|
t = ticket_dates.get(tid)
|
|
if not t:
|
|
continue
|
|
created = ts_to_dt(t.get("date_create"))
|
|
modified = ts_to_dt(t.get("last_update")) or created
|
|
if created:
|
|
pgc.execute('UPDATE "tabIssue" SET creation = %s, modified = %s WHERE name = %s',
|
|
(created, modified or created, name))
|
|
fixed_issues += 1
|
|
pg.commit()
|
|
log(" {} Issues dates fixed".format(fixed_issues))
|
|
|
|
# Fix Sales Invoices
|
|
log("")
|
|
log("--- Fixing Sales Invoice dates ---")
|
|
pgc.execute('SELECT name, legacy_invoice_id FROM "tabSales Invoice" WHERE legacy_invoice_id > 0')
|
|
sinvs = pgc.fetchall()
|
|
fixed_inv = 0
|
|
for name, inv_id in sinvs:
|
|
date_orig = inv_dates.get(inv_id)
|
|
created = ts_to_dt(date_orig)
|
|
if created:
|
|
pgc.execute('UPDATE "tabSales Invoice" SET creation = %s, modified = %s WHERE name = %s',
|
|
(created, created, name))
|
|
fixed_inv += 1
|
|
pg.commit()
|
|
log(" {} Sales Invoice dates fixed".format(fixed_inv))
|
|
|
|
# Fix Customers
|
|
log("")
|
|
log("--- Fixing Customer dates ---")
|
|
pgc.execute('SELECT name, legacy_account_id FROM "tabCustomer" WHERE legacy_account_id > 0')
|
|
custs = pgc.fetchall()
|
|
fixed_cust = 0
|
|
for name, aid in custs:
|
|
a = acct_dates.get(aid)
|
|
if not a:
|
|
continue
|
|
created = ts_to_dt(a.get("date_orig"))
|
|
modified = ts_to_dt(a.get("date_last")) or created
|
|
if created:
|
|
pgc.execute('UPDATE "tabCustomer" SET creation = %s, modified = %s WHERE name = %s',
|
|
(created, modified or created, name))
|
|
fixed_cust += 1
|
|
pg.commit()
|
|
pg.close()
|
|
log(" {} Customer dates fixed".format(fixed_cust))
|
|
|
|
log("")
|
|
log("=" * 60)
|
|
log("Issues: {} dates fixed".format(fixed_issues))
|
|
log("Invoices: {} dates fixed".format(fixed_inv))
|
|
log("Customers: {} dates fixed".format(fixed_cust))
|
|
log("=" * 60)
|
|
|
|
if __name__ == "__main__":
|
|
main()
|