Tower: upload at_master_order 18.0.10.0 (via marketplace)
This commit is contained in:
243
addons/at_master_order/CUSTOMER_SUPPLIER_TRACKING_IMPLEMENTED.md
Normal file
243
addons/at_master_order/CUSTOMER_SUPPLIER_TRACKING_IMPLEMENTED.md
Normal file
@@ -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
|
||||
```
|
||||
Reference in New Issue
Block a user