From b2206d11554f45dc811b42a7121c91d40a49b5b1 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 27 Jan 2016 15:43:12 +0530 Subject: [PATCH] [fix] Multi currency advance payment against Order --- .../doctype/payment_tool/payment_tool.js | 4 +++ .../doctype/payment_tool/payment_tool.py | 4 ++- .../purchase_order/purchase_order.json | 28 ++++++++++++++- erpnext/controllers/accounts_controller.py | 34 ++++++++++++------- .../doctype/sales_order/sales_order.json | 29 ++++++++++++++-- 5 files changed, 83 insertions(+), 16 deletions(-) diff --git a/erpnext/accounts/doctype/payment_tool/payment_tool.js b/erpnext/accounts/doctype/payment_tool/payment_tool.js index ec15b47eb1..e15694c931 100644 --- a/erpnext/accounts/doctype/payment_tool/payment_tool.js +++ b/erpnext/accounts/doctype/payment_tool/payment_tool.js @@ -42,6 +42,10 @@ frappe.ui.form.on("Payment Tool", "refresh", function(frm) { frappe.ui.form.trigger("Payment Tool", "party_type"); }); +frappe.ui.form.on("Payment Tool", "party_type", function(frm) { + frm.set_value("received_or_paid", frm.doc.party_type=="Customer" ? "Received" : "Paid"); +}); + frappe.ui.form.on("Payment Tool", "party", function(frm) { if(frm.doc.party_type && frm.doc.party) { return frappe.call({ diff --git a/erpnext/accounts/doctype/payment_tool/payment_tool.py b/erpnext/accounts/doctype/payment_tool/payment_tool.py index 19527d3a1d..36483067a1 100644 --- a/erpnext/accounts/doctype/payment_tool/payment_tool.py +++ b/erpnext/accounts/doctype/payment_tool/payment_tool.py @@ -71,7 +71,9 @@ class PaymentTool(Document): d2.account = self.payment_account d2.account_currency = bank_account_currency d2.account_type = bank_account_type - d2.exchange_rate = get_exchange_rate(self.payment_account, self.company) + d2.exchange_rate = get_exchange_rate(self.payment_account, bank_account_currency, self.company, + debit=(abs(total_payment_amount) if total_payment_amount < 0 else 0), + credit=(total_payment_amount if total_payment_amount > 0 else 0)) d2.account_balance = get_balance_on(self.payment_account) amount_field_bank = 'debit_in_account_currency' if total_payment_amount < 0 \ diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.json b/erpnext/buying/doctype/purchase_order/purchase_order.json index 277229a3be..69e518539d 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.json +++ b/erpnext/buying/doctype/purchase_order/purchase_order.json @@ -1610,6 +1610,7 @@ "label": "Advance Paid", "length": 0, "no_copy": 1, + "options": "party_account_currency", "permlevel": 0, "print_hide": 1, "print_hide_if_no_value": 0, @@ -1968,6 +1969,31 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "fieldname": "party_account_currency", + "fieldtype": "Link", + "hidden": 1, + "ignore_user_permissions": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Party Account Currency", + "length": 0, + "no_copy": 1, + "options": "Currency", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_on_submit": 0, "bold": 0, @@ -2508,7 +2534,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2016-01-15 04:13:35.179163", + "modified": "2016-01-27 15:15:05.213016", "modified_by": "Administrator", "module": "Buying", "name": "Purchase Order", diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py index 81e5f9e1da..b8acf68ddf 100644 --- a/erpnext/controllers/accounts_controller.py +++ b/erpnext/controllers/accounts_controller.py @@ -386,27 +386,37 @@ class AccountsController(TransactionBase): def set_total_advance_paid(self): if self.doctype == "Sales Order": dr_or_cr = "credit_in_account_currency" + party = self.customer else: dr_or_cr = "debit_in_account_currency" + party = self.supplier - advance_paid = frappe.db.sql(""" + advance = frappe.db.sql(""" select - sum({dr_or_cr}) + account_currency, sum({dr_or_cr}) as amount from `tabJournal Entry Account` where - reference_type = %s and reference_name = %s + reference_type = %s and reference_name = %s and party=%s and docstatus = 1 and is_advance = "Yes" - """.format(dr_or_cr=dr_or_cr), (self.doctype, self.name)) + """.format(dr_or_cr=dr_or_cr), (self.doctype, self.name, party), as_dict=1) - if advance_paid: - advance_paid = flt(advance_paid[0][0], self.precision("advance_paid")) - if flt(self.base_grand_total) >= advance_paid: - frappe.db.set_value(self.doctype, self.name, "advance_paid", advance_paid) - else: - frappe.throw(_("Total advance ({0}) against Order {1} cannot be greater \ - than the Grand Total ({2})") - .format(advance_paid, self.name, self.base_grand_total)) + if advance: + advance_paid = flt(advance[0].amount, self.precision("advance_paid")) + + frappe.db.set_value(self.doctype, self.name, "party_account_currency", + advance[0].account_currency) + + if advance[0].account_currency == self.currency: + order_total = self.grand_total + else: + order_total = self.base_grand_total + + if order_total >= advance_paid: + frappe.db.set_value(self.doctype, self.name, "advance_paid", advance_paid) + else: + frappe.throw(_("Total advance ({0}) against Order {1} cannot be greater than the Grand Total ({2})") + .format(advance_paid, self.name, order_total)) @property def company_abbr(self): diff --git a/erpnext/selling/doctype/sales_order/sales_order.json b/erpnext/selling/doctype/sales_order/sales_order.json index ee97334ad2..fa21f0eaff 100644 --- a/erpnext/selling/doctype/sales_order/sales_order.json +++ b/erpnext/selling/doctype/sales_order/sales_order.json @@ -1569,7 +1569,7 @@ "label": "Advance Paid", "length": 0, "no_copy": 1, - "options": "Company:company:default_currency", + "options": "party_account_currency", "permlevel": 0, "print_hide": 1, "print_hide_if_no_value": 0, @@ -1959,6 +1959,31 @@ "unique": 0, "width": "150px" }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "fieldname": "party_account_currency", + "fieldtype": "Link", + "hidden": 1, + "ignore_user_permissions": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Party Account Currency", + "length": 0, + "no_copy": 1, + "options": "Currency", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_on_submit": 0, "bold": 0, @@ -2802,7 +2827,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2015-12-29 12:32:45.649349", + "modified": "2016-01-27 15:16:00.560261", "modified_by": "Administrator", "module": "Selling", "name": "Sales Order",