From d4dd28c4026bc216b622e09793220fdbb7dd79d0 Mon Sep 17 00:00:00 2001 From: git_admin Date: Thu, 30 Apr 2026 19:03:47 +0000 Subject: [PATCH] Tower: upload at_master_order 18.0.10.0 (via marketplace) --- .../CUSTOMER_SUPPLIER_TRACKING_IMPLEMENTED.md | 243 ++++++++++++++++++ 1 file changed, 243 insertions(+) create mode 100644 addons/at_master_order/CUSTOMER_SUPPLIER_TRACKING_IMPLEMENTED.md diff --git a/addons/at_master_order/CUSTOMER_SUPPLIER_TRACKING_IMPLEMENTED.md b/addons/at_master_order/CUSTOMER_SUPPLIER_TRACKING_IMPLEMENTED.md new file mode 100644 index 0000000..a06a0bb --- /dev/null +++ b/addons/at_master_order/CUSTOMER_SUPPLIER_TRACKING_IMPLEMENTED.md @@ -0,0 +1,243 @@ +# Complete Customer & Supplier Tracking - Implementation Summary + +## ✅ What Has Been Implemented + +### Phase 1: Bill-to-Customer Linking ✅ + +**Problem**: Bills may not always have `master_order_customer_id` set correctly. + +**Solution Implemented**: + +1. **Auto-set customer in `create()` method** (`account_move.py`): + - When a bill is created with `master_order_id`, automatically sets `master_order_customer_id` + - Ensures customer is always set when bill is created + +2. **Auto-update customer in `write()` method** (`account_move.py`): + - When `master_order_id` changes, automatically updates `master_order_customer_id` + - When `master_order_id` is removed, clears `master_order_customer_id` + +3. **Enhanced `_link_master_order()` method** (`account_move.py`): + - Now always sets customer when linking to MO + - Ensures customer is never missing when MO is linked + +4. **Validation constraint** (`account_move.py`): + - `_check_customer_consistency()` ensures customer matches MO customer + - Prevents data inconsistencies + +5. **Auto-create supplier debt** (`account_move.py`): + - `_create_supplier_debt_record()` creates supplier debt when bill is posted + - Ensures supplier debts are tracked per customer automatically + +### Phase 2: Supplier Payment Tracking ✅ + +**Problem**: Supplier payments may not be properly linked to customers. + +**Solution Implemented**: + +1. **Enhanced payment-to-customer linking** (`document_links.py`): + - Method 1: From Master Order (existing) + - Method 2: From `master_order_customer_id` on bills (NEW) + - Method 3: From reconciled bills directly (NEW) + - Ensures customer is always found when payment is made + +2. **Supplier payment transaction creation** (`document_links.py`): + - Creates `paid_out` transaction for supplier payments + - Links transaction to customer cash flow + - Sets `counterparty_id` to supplier + +3. **Auto-update supplier debt** (`document_links.py`): + - Calls `cashflow._update_supplier_debt()` when payment is made + - Refreshes supplier debt totals automatically + +### Phase 3: Supplier Debt Tracking ✅ + +**Problem**: Supplier debts may not reflect all bills correctly. + +**Solution Implemented**: + +1. **Auto-create supplier debt on bill post** (`account_move.py`): + - `_create_supplier_debt_record()` called when bill is posted + - Creates `vera.client.supplier` record if doesn't exist + - Links supplier debt to customer cash flow + +2. **Update supplier debt method** (`vera_client_cashflow.py`): + - `_update_supplier_debt()` refreshes supplier debt totals + - Called when payments are made + - Ensures supplier debts are always up-to-date + +3. **Supplier debt computation** (`vera_client_supplier.py`): + - Uses `master_order_customer_id` to find bills (more reliable) + - Computes totals from bills and payments correctly + - Shows accurate outstanding amounts per customer + +### Phase 4: Migration & Repair Tools ✅ + +**Implementation**: + +1. **Migration script** (`account_move_migration.py`): + - `repair_all_bill_customers()` - Fixes all bills with missing customer links + - `sync_all_payments_to_cashflow()` - Syncs existing payments to cash flow + +2. **Repair wizard** (`repair_customer_links_wizard.py`): + - UI for running repair operations + - Options to repair bills, create supplier debts, sync payments + - Shows summary of fixes + +## Data Flow Diagram + +``` +┌─────────────────┐ +│ Master Order │ +│ (at.master.order)│ +└────────┬────────┘ + │ + ├─── client_id → Customer + │ + ├─── vendor_bill_ids → Bills + │ ├─── master_order_id → MO ✅ + │ ├─── master_order_customer_id → Customer ✅ (AUTO-SET) + │ └─── partner_id → Supplier + │ │ + │ └─── When Posted: + │ ├─── Create vera.client.supplier ✅ + │ └─── Update customer cash flow ✅ + │ + └─── customer_invoice_ids → Invoices + ├─── master_order_id → MO ✅ + └─── partner_id → Customer ✅ + +When Payment Made: +┌─────────────────┐ +│ Payment │ +│ (account.payment)│ +└────────┬────────┘ + │ + ├─── Find Customer: + │ ├─── From master_order_id ✅ + │ ├─── From bill.master_order_customer_id ✅ (NEW) + │ └─── From reconciled bills ✅ (NEW) + │ + ├─── Create Transaction ✅ + │ ├─── transaction_type: 'paid_out' (supplier) + │ └─── counterparty_id: Supplier + │ + └─── Update Supplier Debt ✅ + └─── vera.client.supplier.total_paid +``` + +## Key Features + +### ✅ Automatic Customer Linking +- Bills automatically get customer from MO +- No manual linking required +- Customer always set when MO is linked + +### ✅ Automatic Supplier Debt Tracking +- Supplier debts created automatically when bills are posted +- Updated automatically when payments are made +- Per-customer supplier tracking + +### ✅ Complete Payment Tracking +- All payments linked to customers +- Transactions created automatically +- Supplier payments tracked per customer + +### ✅ Data Integrity +- Validation ensures customer matches MO customer +- Repair tools fix existing data +- Migration scripts sync historical data + +## Usage + +### Automatic (No Action Required) +- ✅ Bills created from MO → Customer auto-set +- ✅ Bills linked to MO → Customer auto-set +- ✅ Bills posted → Supplier debt auto-created +- ✅ Payments made → Transactions auto-created +- ✅ Payments made → Supplier debt auto-updated + +### Manual Repair (If Needed) +1. Go to **Master Orders > Configuration** +2. Click **"Repair Customer Links"** button +3. Select options: + - ✅ Repair Bill Customer Links + - ✅ Create Supplier Debt Records + - ✅ Sync Payments to Cash Flow +4. Click **"Repair"** + +### View Customer Tracking +- **Client Cash Flow** → Shows all transactions per customer +- **Supplier Debts** → Shows supplier debts per customer +- **Bill Tracking** → Filter by customer +- **Advanced Supplier** → Company-wide supplier tracking + +## Files Modified + +### Core Models: +- ✅ `models/account_move.py` - Auto-set customer, create supplier debt +- ✅ `models/document_links.py` - Enhanced payment-to-customer linking +- ✅ `models/vera_client_cashflow.py` - Supplier debt update method +- ✅ `models/vera_client_supplier.py` - Uses master_order_customer_id + +### Migration & Repair: +- ✅ `models/account_move_migration.py` - Repair scripts +- ✅ `wizard/repair_customer_links_wizard.py` - Repair wizard +- ✅ `wizard/repair_customer_links_wizard_views.xml` - Wizard views + +### Documentation: +- ✅ `plans/CUSTOMER_SUPPLIER_TRACKING_PLAN.md` - Full plan +- ✅ `CUSTOMER_SUPPLIER_TRACKING_IMPLEMENTED.md` - This summary + +## Testing Checklist + +- [ ] Create bill from MO → Customer auto-set ✅ +- [ ] Link bill to MO → Customer auto-set ✅ +- [ ] Post bill → Supplier debt created ✅ +- [ ] Pay vendor bill → Transaction created ✅ +- [ ] Pay vendor bill → Supplier debt updated ✅ +- [ ] Unlink bill from MO → Customer cleared ✅ +- [ ] Run repair wizard → Fixes existing data ✅ + +## Benefits + +1. **✅ Complete Traceability** - Every bill/payment linked to customer +2. **✅ Accurate Supplier Debts** - Per-customer supplier tracking +3. **✅ Automatic Sync** - No manual linking required +4. **✅ Data Integrity** - Validation ensures correctness +5. **✅ Easy Repair** - Wizard fixes existing data issues + +## Next Steps + +1. **Deploy to server** and upgrade module +2. **Run repair wizard** to fix existing bills +3. **Test** automatic customer linking +4. **Verify** supplier debts are created correctly +5. **Monitor** payment transactions are created + +## Example Scenarios + +### Scenario 1: Create Bill from MO +``` +1. User clicks "Sync Bills" in Master Order +2. System creates vendor bills for each supplier +3. ✅ master_order_customer_id automatically set from MO.client_id +4. ✅ Bill posted → Supplier debt record created +5. ✅ Customer can see supplier debt in Cash Flow page +``` + +### Scenario 2: Pay Vendor Bill +``` +1. User pays vendor bill from Bill Tracking page +2. System finds customer from bill.master_order_customer_id +3. ✅ Creates paid_out transaction in customer cash flow +4. ✅ Updates supplier debt total_paid +5. ✅ Customer can see payment in transactions +``` + +### Scenario 3: Link Existing Bill to MO +``` +1. User links existing bill to Master Order +2. ✅ master_order_customer_id automatically set +3. ✅ Supplier debt record created if bill is posted +4. ✅ Bill now appears in customer's supplier debts +```