From b1b64501c485b650f9d3d3d31cd31a11828b228a Mon Sep 17 00:00:00 2001 From: Shawn Date: Tue, 28 Jul 2026 23:18:23 -0400 Subject: [PATCH] Add parent company, billing account, and linked companies to customer account card --- server.py | 51 ++++++++++++++++++++++++++++++----------------- static/index.html | 3 +++ 2 files changed, 36 insertions(+), 18 deletions(-) diff --git a/server.py b/server.py index 4751d87..8fabfcf 100644 --- a/server.py +++ b/server.py @@ -1365,31 +1365,46 @@ def get_asset(asset_id: int): if asset_company: # Try exact match first, then LIKE cur_ext.execute(""" - SELECT name, address1_line1, address1_city, address1_stateorprovince, - address1_postalcode, address1_country, telephone1, emailaddress1, - websiteurl, fax, address1_latitude, address1_longitude, - "hsl_managementcompany!name" AS management_company, - "hsl_csm!name" AS csm - FROM account - WHERE name = ? - """, (asset_company,)) - acct = cur_ext.fetchone() - if not acct: - # Try fuzzy match cur_ext.execute(""" SELECT name, address1_line1, address1_city, address1_stateorprovince, address1_postalcode, address1_country, telephone1, emailaddress1, websiteurl, fax, address1_latitude, address1_longitude, "hsl_managementcompany!name" AS management_company, - "hsl_csm!name" AS csm + "hsl_csm!name" AS csm, + "parentaccountid!name" AS parent_company, + "msdyn_billingaccount!name" AS billing_account FROM account - WHERE name LIKE ? LIMIT 1 - """, (f"%{asset_company[:30]}%",)) + WHERE name = ? + """, (asset_company,)) acct = cur_ext.fetchone() - if acct: - ca = dict(acct) - # Clean None values - result["customer_account"] = {k: v for k, v in ca.items() if v is not None} + if not acct: + cur_ext.execute(""" + SELECT name, address1_line1, address1_city, address1_stateorprovince, + address1_postalcode, address1_country, telephone1, emailaddress1, + websiteurl, fax, address1_latitude, address1_longitude, + "hsl_managementcompany!name" AS management_company, + "hsl_csm!name" AS csm, + "parentaccountid!name" AS parent_company, + "msdyn_billingaccount!name" AS billing_account + FROM account + WHERE name LIKE ? LIMIT 1 + """, (f"%{asset_company[:30]}%",)) + acct = cur_ext.fetchone() + if acct: + ca = dict(acct) + # Get linked companies (sibling accounts under same parent) + parent_name = ca.get("parent_company") + if parent_name: + cur_ext.execute(""" + SELECT name FROM account + WHERE "parentaccountid!name" = ? AND name != ? + ORDER BY name LIMIT 20 + """, (parent_name, ca.get("name", ""))) + siblings = [r["name"] for r in cur_ext.fetchall()] + if siblings: + ca["linked_companies"] = siblings + # Clean None values + result["customer_account"] = {k: v for k, v in ca.items() if v is not None} ext.close() except Exception: pass diff --git a/static/index.html b/static/index.html index 61c6c93..0258751 100644 --- a/static/index.html +++ b/static/index.html @@ -5517,14 +5517,17 @@ if (ac.address1_postalcode) addrParts.push(esc(ac.address1_postalcode)); acctFields.innerHTML = [ df('Name', esc(ac.name)), + (ac.parent_company ? df('Parent Company', esc(ac.parent_company)) : ''), df('Address', addrParts.join(', ')), (ac.telephone1 ? df('Phone', esc(ac.telephone1)) : ''), (ac.emailaddress1 ? df('Email', esc(ac.emailaddress1)) : ''), (ac.websiteurl ? df('Website', esc(ac.websiteurl)) : ''), (ac.management_company ? df('Management Co.', esc(ac.management_company)) : ''), + (ac.billing_account ? df('Billing Account', esc(ac.billing_account)) : ''), (ac.csm ? df('Account Manager', esc(ac.csm)) : ''), (ac.fax ? df('Fax', esc(ac.fax)) : ''), (ac.address1_country ? df('Country', esc(ac.address1_country)) : ''), + (ac.linked_companies ? df('Linked Companies', esc(ac.linked_companies.join(', '))) : ''), ].filter(Boolean).join(''); } else { acctCard.style.display = 'none';