diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index 893fbc6..0000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,40 +0,0 @@ -# Changelog - -## Version 2.0.0 (2024) - -### Major Changes -- **Breaking Change**: Converted from single deduction fields to multiple deduction lines (One2many) -- Added new model `payment.deduction.line` for storing individual deductions -- `amount_substract` is now a computed field (sum of all deduction lines) -- Removed `substract_account_id` field (replaced by deduction lines) - -### Features -- Support for multiple deductions per payment -- Each deduction can have its own account and description -- Drag-and-drop reordering of deduction lines -- Automatic calculation of total deductions -- Full integration with batch payments - -### Views -- Updated payment form to show editable tree of deduction lines -- Updated batch payment to support deduction lines in form view -- Added total deductions column to batch payment tree view - -### Technical -- Added security rules for `payment.deduction.line` model -- Updated journal entry creation to handle multiple deduction lines -- Maintained backward compatibility for journal entry structure - -### Migration -- See UPGRADE_TO_V2.md for detailed migration instructions -- Existing payments with single deductions need manual migration - -## Version 1.0.0 (Initial Release) - -### Features -- Single deduction amount per payment -- Single deduction account per payment -- Final payment amount calculation -- Journal entry with deduction line -- Integration with batch payments -- Validation for deduction amounts diff --git a/USER_GUIDE.md b/USER_GUIDE.md deleted file mode 100644 index c4a977a..0000000 --- a/USER_GUIDE.md +++ /dev/null @@ -1,238 +0,0 @@ -# User Guide: Payment Deductions - -## ⚠️ IMPORTANT: Expense Account Required - -**When using payment deductions, you MUST set the Expense Account field.** - -This is a requirement to ensure proper journal entry creation. - -## Quick Start Guide - -### Step-by-Step: Creating a Payment with Deductions - -1. **Go to Accounting > Vendors > Payments** - -2. **Create New Payment** - - Payment Type: Send Money (Outbound) - - Partner Type: Vendor - - Partner: Select your vendor (e.g., PT Telkom Indonesia) - -3. **⚠️ CRITICAL: Set Expense Account FIRST** - - Expense Account: Select the expense account (e.g., "611505 Telepon & Internet") - - This field is REQUIRED when using deductions - -4. **Enter Payment Amount** - - Amount: Enter the full amount (e.g., 2,000,000) - -5. **Add Deductions** - - Click "Add a line" in the Deductions section - - For each deduction: - - Deduction Account: Select tax account (e.g., "PPh 21") - - Deduction Amount: Enter amount (e.g., 100,000) - - Description: Optional (e.g., "Withholding Tax") - -6. **Verify Amounts** - - Total Deductions: Should show sum of all deductions - - Final Payment Amount: Should show amount minus deductions - -7. **Post Payment** - - Click "Confirm" to post the payment - -## Example - -### Scenario: Paying PT Telkom with Tax Withholding - -**Payment Details:** -- Vendor: PT Telkom Indonesia -- Expense Account: 611505 Telepon & Internet -- Amount: Rp 2,000,000 - -**Deductions:** -- PPh 21: Rp 100,000 -- PPh 29: Rp 50,000 - -**Result:** -- Total Deductions: Rp 150,000 -- Final Payment Amount: Rp 1,850,000 - -**Journal Entry Created:** -``` -611505 Telepon & Internet Debit: Rp 2,000,000 -217101 PPh 21 Credit: Rp 100,000 -117104 PPh 29 Credit: Rp 50,000 -Bank Account Credit: Rp 1,850,000 -``` - -## Common Mistakes - -### ❌ Mistake 1: Not Setting Expense Account - -**Error:** "Expense Account is required when using payment deductions" - -**Solution:** Set the Expense Account field before adding deductions - -### ❌ Mistake 2: Using Wrong Account for Deductions - -**Problem:** Trying to use Accounts Payable for deductions - -**Solution:** Use tax payable accounts (PPh 21, PPh 23, PPh 29, etc.) - -### ❌ Mistake 3: Deductions Exceed Payment Amount - -**Error:** "Total deductions cannot be greater than the payment amount" - -**Solution:** Reduce deduction amounts or increase payment amount - -## Account Setup - -### Required Accounts - -Before using this feature, ensure you have these accounts set up: - -#### 1. Expense Accounts -``` -611505 - Telepon & Internet (Expense) -612001 - Office Supplies (Expense) -etc. -``` - -#### 2. Tax Payable Accounts -``` -217101 - PPh 21 (Current Liability) -217102 - PPh 23 (Current Liability) -117104 - PPh 29 (Current Liability) -``` - -### Account Types - -| Account Purpose | Account Type | Example | -|----------------|--------------|---------| -| Expense Account | Expense | Telepon & Internet | -| Tax Deductions | Current Liability | PPh 21, PPh 23, PPh 29 | -| Bank | Bank and Cash | Bank BCA | - -## Workflow - -### Standard Payment Flow - -``` -1. Create Payment - ↓ -2. Set Expense Account ⚠️ REQUIRED - ↓ -3. Enter Amount - ↓ -4. Add Deductions - ↓ -5. Verify Totals - ↓ -6. Post Payment - ↓ -7. Journal Entry Created -``` - -### Batch Payment Flow - -``` -1. Create Batch Payment - ↓ -2. Add Payment Lines - ↓ -3. For each line: - - Set Expense Account ⚠️ REQUIRED - - Add Deductions - ↓ -4. Generate Payments - ↓ -5. Payments Created with Deductions -``` - -## Tips & Best Practices - -### ✅ Do This: - -1. **Always set Expense Account first** before adding deductions -2. **Use descriptive names** for deductions (e.g., "PPh 21 - January 2025") -3. **Verify amounts** before posting -4. **Use correct tax accounts** for deductions -5. **Keep deductions organized** with clear descriptions - -### ❌ Don't Do This: - -1. **Don't skip Expense Account** - it's required! -2. **Don't use Accounts Payable** for deductions -3. **Don't exceed payment amount** with deductions -4. **Don't use bank accounts** for deductions -5. **Don't forget to verify** final payment amount - -## Troubleshooting - -### Problem: Can't add deductions - -**Cause:** Expense Account not set - -**Solution:** -1. Set the Expense Account field -2. Then add deductions - -### Problem: Wrong journal entry - -**Cause:** Using wrong account types - -**Solution:** -- Expense Account: Use expense account type -- Deductions: Use tax payable (current liability) accounts - -### Problem: Payment doesn't balance - -**Cause:** Deductions exceed payment amount - -**Solution:** -- Check Total Deductions -- Ensure it's less than Amount -- Adjust deduction amounts if needed - -## FAQ - -### Q: Why is Expense Account required? - -**A:** The Expense Account is required to ensure proper journal entry creation. It specifies which expense account should be debited for the full amount. - -### Q: Can I use Accounts Payable instead of Expense Account? - -**A:** No. When using deductions, you must use an Expense Account. This ensures the correct accounting treatment where: -- Expense is recorded at full amount -- Tax liabilities are created -- Bank is reduced by net amount - -### Q: What accounts can I use for deductions? - -**A:** Use tax payable accounts (Current Liability type) such as: -- PPh 21 (Income Tax Article 21) -- PPh 23 (Income Tax Article 23) -- PPh 29 (Income Tax Article 29) -- Other tax withholding accounts - -### Q: Can I have multiple deductions? - -**A:** Yes! You can add as many deduction lines as needed. Each deduction can have its own account and amount. - -### Q: What if I don't have deductions? - -**A:** If you don't have deductions, you don't need to set the Expense Account. You can use the standard payment flow with Accounts Payable. - -## Support - -For additional help: -1. Check the module documentation -2. Review example payments -3. Contact your system administrator -4. Refer to FINAL_FIX.md for technical details - -## Version - -This guide is for version 2.0.0 of the vendor_payment_diff_amount module. - ---- - -**Remember: Always set the Expense Account before adding deductions!** ⚠️ diff --git a/models/account_batch_payment.py b/models/account_batch_payment.py index 4907261..7608c26 100644 --- a/models/account_batch_payment.py +++ b/models/account_batch_payment.py @@ -13,12 +13,15 @@ class AccountBatchPayment(models.Model): # First, try to use the journal's available payment methods available_payment_methods = self.journal_id._get_available_payment_method_lines(self.batch_type) - payment_method_line = available_payment_methods.filtered(lambda x: x.code == 'direct_batch') + # Fix: Check payment_method_id.code, not just code + payment_method_line = available_payment_methods.filtered(lambda x: x.payment_method_id.code == 'direct_batch') if not payment_method_line: - # If no direct batch payment method found, use the first available payment method + # If no direct batch payment method found, prefer 'manual' method for bank journals if available_payment_methods: - payment_method_line = available_payment_methods[0] + # Try to find 'manual' payment method (most common for bank transfers) + manual_method = available_payment_methods.filtered(lambda x: x.payment_method_id.code == 'manual') + payment_method_line = manual_method[:1] if manual_method else available_payment_methods[0] else: # Fallback: try to find or create a direct batch payment method line payment_method_line = self.env['account.payment.method.line'].search([