Charge Sale to Collection
How a credit (charge) sale at the pump becomes a customer invoice and, eventually, a collected payment in Odoo. This is the AR side of the CVGo flow — runs in parallel with the daily cycle whenever the station accepts a charge MOP (Shell Fleet Card, corporate accounts, etc.).
AR/billing staff (shell18_customer_invoicing) who issue invoices to fleet/corporate customers, and collection staff (shell18_collection) who register their payments. Read CVGo Daily Cycle first so you understand where these invoices come from.
When this happens
Every day the station accepts a charge MOP. CVGo posts the sale to a generic MOP partner (e.g. "Shell Fleet Card"), but that's not who actually owes you money — the specific fleet operator does. AR's job is to reassign the invoice to the real customer; Collection's job is to register the payment when it arrives.
Process map
Walkthrough
| # | Role | Step | Where | You're done when... | Deep dive |
|---|---|---|---|---|---|
| 1 | (system) | Charge sale lands in CVGo | — | The CVGo POS Data record posts; an Invoice exists with partner = the MOP's generic partner | Posting |
| 2 | AR clerk | Identify the actual customer | Open the SO; check Plate Number field, receipt details, and any fleet-card statement | You know which fleet customer this transaction belongs to | Sale Orders |
| 3 | AR clerk | Set Customer on the SO | SO header > Set Customer button | The SO and all linked invoices now show the real customer as partner | Set Customer |
| 4 | AR clerk | Send the invoice | Invoice > Send & Print | Customer has the invoice (PDF / email) | — |
| 5 | Collection clerk | Customer pays | (external) | Payment received in bank or on hand | — |
| 6 | Collection clerk | Register the payment | Open the CVGo POS Data record > Register Payments, OR open the invoice > Register Payment | Invoice status becomes In Payment or Paid | Register Payment |
| 7 | Collection clerk | Reconcile bank statement | Accounting > Bank > match payments | Bank line is matched to the registered payment | — |
Common variations
Partial payment
Situation: Customer pays less than the invoice total (e.g., paying off a previous balance). Handling: On the Register Payment wizard, override the payment amount. The invoice stays in In Payment with a residual balance until fully paid. Repeat for each partial payment received.
Wrong customer assigned
Symptom: AR clicked Set Customer with the wrong fleet operator.
Recovery: Open the SO again and click Set Customer a second time with the correct customer. The system propagates the change to all linked invoices.
Caveat: If the invoice has already been paid or partially paid, do not reassign — reverse the payment first to avoid orphaned account.payment records on the wrong partner.
Customer disputes a transaction
Situation: Fleet customer claims one of the receipts on their invoice wasn't theirs. Handling: Issue a credit note on the invoice for that line only (Accounting > Credit Notes). Do not delete or reverse the underlying CVGo transaction — it must remain for station-side reconciliation. The credit note is the audit trail.
Bulk batch invoicing for a fleet customer
Situation: A single fleet customer wants one consolidated invoice covering many days of charge sales. Handling: This isn't a single-button flow. Today, each day's CVGo charge sale produces its own invoice. To consolidate, the typical practice is to send a statement of account (Accounting > Customers > Statements) that lists all open invoices, and have the customer pay the lump sum against multiple invoices in one Register Payment action.
Charge MOP was auto-paid by mistake
Symptom: A charge MOP shows as Paid right after posting, but no money has actually been collected.
Root cause: auto_confirm_payment was left on for that MOP account.
Recovery: Reverse the auto-generated payment, then turn off auto_confirm_payment on the MOP — see MOP Accounts → Automation settings. Future charge sales will then correctly land as unpaid.
End-to-end checklist
- Every charge-MOP invoice has been reassigned to a real customer (not the generic MOP partner)
- No invoice is sitting on a
cvgo_mop = Truepartner overnight - All received payments are registered against the correct invoice
- Bank statements are reconciled to registered payments
- Open AR aging matches the sum of unpaid charge invoices
Why the indirection?
CVGo doesn't know which fleet customer made the purchase — it only knows what card was swiped. The card belongs to "Shell Fleet Card" as a system, not to the specific fleet that issued it. The two-step pattern — post-to-MOP-partner, then reassign-to-real-customer — is what bridges this gap without losing the link between Odoo, CVGo, and the bank/card processor.
Related
- Workflow: CVGo Daily Cycle, CVGo Exception Recovery
- Reference: Sale Orders, Payment Registration
- Configuration: MOP Accounts, Partners and Products
- Security: Security Groups —
shell18_customer_invoicing,shell18_collection