Tower: upload at_master_order 18.0.10.0 (via marketplace)

This commit is contained in:
2026-04-30 19:03:47 +00:00
parent 45eaa252bd
commit d4dd28c402

View 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
```