======================================== Vendor Payment Diff Amount - Version 2.0 ======================================== Overview ======== This module extends Odoo's vendor payment functionality to support **multiple payment deductions** such as withholding tax, payment fees, and other charges. Version 2.0 Changes =================== Major Update: One2Many Deduction Lines -------------------------------------- Version 2.0 introduces a significant architectural change: **Before (v1.x):** * Single deduction amount field (`amount_substract`) * Single deduction account field (`substract_account_id`) * One payment could have only one deduction **After (v2.0):** * Multiple deduction lines (`deduction_line_ids`) * Each deduction line has its own amount and account * One payment can have multiple deductions with different accounts * Total deductions computed automatically Migration Notes --------------- **Important:** This is a breaking change. Existing payments with deductions will need to be migrated. If you have existing payments with `amount_substract` and `substract_account_id` values, you should: 1. Backup your database before upgrading 2. After upgrade, existing single deductions will need to be manually converted to deduction lines 3. The old fields (`amount_substract`, `substract_account_id`) are now computed/removed New Features ------------ 1. **Multiple Deduction Lines**: Add as many deduction lines as needed to a single payment 2. **Individual Descriptions**: Each deduction can have its own description 3. **Flexible Sequencing**: Reorder deduction lines using drag-and-drop 4. **Automatic Totals**: Total deductions calculated automatically 5. **Batch Payment Support**: Deduction lines work seamlessly with batch payments Usage ===== ⚠️ IMPORTANT: Expense Account Required -------------------------------------- **When using payment deductions, you MUST set the Expense Account field first.** Creating a Payment with Deductions ---------------------------------- 1. Go to Accounting > Vendors > Payments 2. Create a new outbound payment 3. **⚠️ CRITICAL: Set the Expense Account field** (e.g., "Telepon & Internet") 4. Enter the payment amount 5. In the "Deductions" section, add one or more deduction lines: * Select the deduction account (e.g., PPh 21 - Withholding Tax) * Enter the deduction amount * Optionally add a description 6. The "Total Deductions" and "Final Payment Amount" are calculated automatically 7. Post the payment **Note:** If you try to add deductions without setting the Expense Account, you will get a validation error. Journal Entry Structure ----------------------- For a payment of 2000 with two deductions (100 for tax, 50 for fees): :: Expense/Payable Account Debit: 2000 (original amount) Tax Account (PPh 21) Credit: 100 (first deduction) Fee Account (PPh 29) Credit: 50 (second deduction) Bank Account Credit: 1850 (final payment amount) --- Total: Debit 2000 = Credit 2000 (balanced) Batch Payments -------------- When using with `vendor_batch_payment_merge`: 1. Create a batch payment 2. Add payment lines 3. For each line, add deduction lines in the form view 4. Generate payments - deductions are automatically transferred Technical Details ================= New Models ---------- * `payment.deduction.line`: Stores individual deduction lines Modified Models --------------- * `account.payment`: Added `deduction_line_ids` (One2many) * `account.batch.payment.line`: Added `deduction_line_ids` (One2many) Fields ------ **Payment Deduction Line:** * `sequence`: Order of deduction lines * `substract_account_id`: Account for this deduction (required) * `amount_substract`: Deduction amount (required) * `name`: Optional description * `payment_id`: Link to payment * `batch_payment_line_id`: Link to batch payment line **Account Payment:** * `deduction_line_ids`: One2many to deduction lines * `amount_substract`: Computed total of all deductions * `final_payment_amount`: Computed (amount - total deductions) Requirements ============ * Odoo 17.0+ * `account` module * `vendor_batch_payment_merge` module License ======= LGPL-3 Author ====== Suherdy Yacob