Merge branch 'develop' into fix/scr/return
diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py
index 7f5dc02..b1a4ebb 100644
--- a/erpnext/controllers/accounts_controller.py
+++ b/erpnext/controllers/accounts_controller.py
@@ -804,15 +804,12 @@
self.set("advances", [])
advance_allocated = 0
for d in res:
- if d.against_order:
- allocated_amount = flt(d.amount)
+ if self.get("party_account_currency") == self.company_currency:
+ amount = self.get("base_rounded_total") or self.base_grand_total
else:
- if self.get("party_account_currency") == self.company_currency:
- amount = self.get("base_rounded_total") or self.base_grand_total
- else:
- amount = self.get("rounded_total") or self.grand_total
+ amount = self.get("rounded_total") or self.grand_total
- allocated_amount = min(amount - advance_allocated, d.amount)
+ allocated_amount = min(amount - advance_allocated, d.amount)
advance_allocated += flt(allocated_amount)
advance_row = {
diff --git a/erpnext/selling/doctype/sales_order/test_sales_order.py b/erpnext/selling/doctype/sales_order/test_sales_order.py
index dfa341b..e777f52 100644
--- a/erpnext/selling/doctype/sales_order/test_sales_order.py
+++ b/erpnext/selling/doctype/sales_order/test_sales_order.py
@@ -1774,6 +1774,69 @@
sales_order.save()
self.assertEqual(sales_order.taxes[0].tax_amount, 0)
+ def test_sales_order_partial_advance_payment(self):
+ from erpnext.accounts.doctype.payment_entry.test_payment_entry import (
+ create_payment_entry,
+ get_payment_entry,
+ )
+ from erpnext.selling.doctype.customer.test_customer import get_customer_dict
+
+ # Make a customer
+ customer = get_customer_dict("QA Logistics")
+ frappe.get_doc(customer).insert()
+
+ # Make a Sales Order
+ so = make_sales_order(
+ customer="QA Logistics",
+ item_list=[
+ {"item_code": "_Test Item", "qty": 1, "rate": 200},
+ {"item_code": "_Test Item 2", "qty": 1, "rate": 300},
+ ],
+ )
+
+ # Create a advance payment against that Sales Order
+ pe = get_payment_entry("Sales Order", so.name, bank_account="_Test Bank - _TC")
+ pe.reference_no = "1"
+ pe.reference_date = nowdate()
+ pe.paid_from_account_currency = so.currency
+ pe.paid_to_account_currency = so.currency
+ pe.source_exchange_rate = 1
+ pe.target_exchange_rate = 1
+ pe.paid_amount = so.grand_total
+ pe.save(ignore_permissions=True)
+ pe.submit()
+
+ # Make standalone advance payment entry
+ create_payment_entry(
+ payment_type="Receive",
+ party_type="Customer",
+ party="QA Logistics",
+ paid_from="Debtors - _TC",
+ paid_to="_Test Bank - _TC",
+ save=1,
+ submit=1,
+ )
+
+ si = make_sales_invoice(so.name)
+
+ item = si.get("items")[1]
+ si.remove(item)
+
+ si.allocate_advances_automatically = 1
+ si.save()
+
+ self.assertEqual(len(si.get("advances")), 1)
+ self.assertEqual(si.get("advances")[0].allocated_amount, 200)
+ self.assertEqual(si.get("advances")[0].reference_name, pe.name)
+
+ si.submit()
+ pe.load_from_db()
+
+ self.assertEqual(pe.references[0].reference_name, si.name)
+ self.assertEqual(pe.references[0].allocated_amount, 200)
+ self.assertEqual(pe.references[1].reference_name, so.name)
+ self.assertEqual(pe.references[1].allocated_amount, 300)
+
def automatically_fetch_payment_terms(enable=1):
accounts_settings = frappe.get_doc("Accounts Settings")