fix: correct creation/modified dates from unix timestamps
- 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>
This commit is contained in:
parent
4f74376412
commit
5640063bd0
118
scripts/migration/fix_dates.py
Normal file
118
scripts/migration/fix_dates.py
Normal file
|
|
@ -0,0 +1,118 @@
|
|||
#!/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()
|
||||
Loading…
Reference in New Issue
Block a user