fix(billing): name ledger partners by company, not the NexaCloud user's full_name

One operator (e.g. "Gurpreet Singh") manages several distinct customer
businesses; naming partners from full_name mislabeled Mobility Specialties
Inc and Apex Vita Corporation as "Gurpreet Singh". Read the company field,
name the partner by company (mark is_company), and rewrite existing partners
so prior full_name-based names are corrected on re-ingest. 75 tests green.
This commit is contained in:
gsinghpal
2026-05-27 17:24:48 -04:00
parent 9ad09c32b0
commit 7a66d7849d
2 changed files with 23 additions and 4 deletions

View File

@@ -79,6 +79,7 @@ class FusionBillingInvoiceLedgerWizard(models.TransientModel):
cur.execute(
"SELECT i.id, i.stripe_invoice_id, i.invoice_number, "
"i.user_id AS user_external_id, u.full_name AS partner_name, "
"u.company AS partner_company, "
"COALESCE(u.billing_email, u.email) AS partner_email, "
"i.created_at AS invoice_date, i.currency, i.status, i.subtotal, i.tax, "
"i.amount_paid, i.paid_at "
@@ -125,13 +126,16 @@ class FusionBillingInvoiceLedgerWizard(models.TransientModel):
if existing and existing.state != "draft":
summary["skipped"].append({"id": nc_id, "reason": "already posted"})
continue
partner = self._fc_partner_for(inv)
if existing:
existing.invoice_line_ids.unlink() # draft: replace lines
if existing.partner_id != partner:
existing.partner_id = partner.id
move = existing
else:
move = Move.create({
"move_type": "out_invoice",
"partner_id": self._fc_partner_for(inv).id,
"partner_id": partner.id,
"invoice_date": inv.get("invoice_date"),
"ref": inv.get("invoice_number"),
"currency_id": cad.id,
@@ -245,10 +249,17 @@ class FusionBillingInvoiceLedgerWizard(models.TransientModel):
if not service:
service = self.env["fusion.billing.service"].create(
{"name": "NexaCloud", "code": "nexacloud"})
company = (inv.get("partner_company") or "").strip()
name = company or inv.get("partner_name") or str(inv.get("user_external_id"))
link = self.env["fusion.billing.account.link"]._resolve_or_create_partner(
service, str(inv.get("user_external_id")),
name=inv.get("partner_name"), email=inv.get("partner_email"))
return link.partner_id
service, str(inv.get("user_external_id")), name=name, email=inv.get("partner_email"))
partner = link.partner_id
# Name the partner for the BUSINESS (company), not the NexaCloud user's full_name —
# one person (e.g. "Gurpreet Singh") can manage several distinct customer businesses.
# Rewrite an existing partner so earlier full_name-based names get corrected.
if company and (partner.name != company or not partner.is_company):
partner.write({"name": company, "is_company": True})
return partner
@api.model
def _fc_stripe_journal(self):