From 1e800a9ef0e1c734ebd4670e5a0a8b05ed859bd5 Mon Sep 17 00:00:00 2001 From: Saurabh Date: Tue, 16 Feb 2016 16:55:51 +0530 Subject: [PATCH] [fixes] multi-currency via payment request --- .../doctype/journal_entry/journal_entry.py | 19 +++++++----- .../payment_request/payment_request.json | 8 ++--- .../payment_request/payment_request.py | 29 ++++++++++++++----- 3 files changed, 37 insertions(+), 19 deletions(-) diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.py b/erpnext/accounts/doctype/journal_entry/journal_entry.py index e910f541610..f11a16c640e 100644 --- a/erpnext/accounts/doctype/journal_entry/journal_entry.py +++ b/erpnext/accounts/doctype/journal_entry/journal_entry.py @@ -551,7 +551,7 @@ def get_default_bank_cash_account(company, voucher_type, mode_of_payment=None, a } @frappe.whitelist() -def get_payment_entry_against_order(dt, dn, base_rounded_total=None, rounded_total=None, journal_entry=False, bank_account=None): +def get_payment_entry_against_order(dt, dn, amount=None, debit_in_account_currency=None, journal_entry=False, bank_account=None): ref_doc = frappe.get_doc(dt, dn) if flt(ref_doc.per_billed, 2) > 0: @@ -569,7 +569,7 @@ def get_payment_entry_against_order(dt, dn, base_rounded_total=None, rounded_tot party_account = get_party_account(party_type, ref_doc.get(party_type.lower()), ref_doc.company) party_account_currency = get_account_currency(party_account) - if not base_rounded_total or not rounded_total: + if not amount: if party_account_currency == ref_doc.company_currency: amount = flt(ref_doc.base_grand_total) - flt(ref_doc.advance_paid) else: @@ -581,8 +581,8 @@ def get_payment_entry_against_order(dt, dn, base_rounded_total=None, rounded_tot "party_account_currency": party_account_currency, "amount_field_party": amount_field_party, "amount_field_bank": amount_field_bank, - "amount": base_rounded_total or amount, - "rounded_total": rounded_total, + "amount": amount, + "debit_in_account_currency": debit_in_account_currency, "remarks": 'Advance Payment received against {0} {1}'.format(dt, dn), "is_advance": "Yes", "bank_account": bank_account, @@ -590,7 +590,7 @@ def get_payment_entry_against_order(dt, dn, base_rounded_total=None, rounded_tot }) @frappe.whitelist() -def get_payment_entry_against_invoice(dt, dn, base_rounded_total=None, rounded_total=None, journal_entry=False, bank_account=None): +def get_payment_entry_against_invoice(dt, dn, amount=None, debit_in_account_currency=None, journal_entry=False, bank_account=None): ref_doc = frappe.get_doc(dt, dn) if dt == "Sales Invoice": party_type = "Customer" @@ -614,8 +614,8 @@ def get_payment_entry_against_invoice(dt, dn, base_rounded_total=None, rounded_t "party_account_currency": ref_doc.party_account_currency, "amount_field_party": amount_field_party, "amount_field_bank": amount_field_bank, - "amount": base_rounded_total if base_rounded_total else abs(ref_doc.outstanding_amount), - "rounded_total": rounded_total, + "amount": amount if amount else abs(ref_doc.outstanding_amount), + "debit_in_account_currency": debit_in_account_currency, "remarks": 'Payment received against {0} {1}. {2}'.format(dt, dn, ref_doc.remarks), "is_advance": "No", "bank_account": bank_account, @@ -626,6 +626,8 @@ def get_payment_entry(ref_doc, args): cost_center = frappe.db.get_value("Company", ref_doc.company, "cost_center") exchange_rate = 1 if args.get("party_account"): + print "here..." + print args.get("party_account"), args.get("party_account_currency") exchange_rate = get_exchange_rate(args.get("party_account"), args.get("party_account_currency"), ref_doc.company, ref_doc.doctype, ref_doc.name) @@ -664,7 +666,8 @@ def get_payment_entry(ref_doc, args): bank_row.cost_center = cost_center - amount = args.get("rounded_total") or args.get("amount") + amount = args.get("debit_in_account_currency") or args.get("amount") + if bank_row.account_currency == args.get("party_account_currency"): bank_row.set(args.get("amount_field_bank"), amount) else: diff --git a/erpnext/accounts/doctype/payment_request/payment_request.json b/erpnext/accounts/doctype/payment_request/payment_request.json index 55c6524cf85..39330a59e7a 100644 --- a/erpnext/accounts/doctype/payment_request/payment_request.json +++ b/erpnext/accounts/doctype/payment_request/payment_request.json @@ -62,7 +62,7 @@ "bold": 0, "collapsible": 0, "fieldname": "rounded_total", - "fieldtype": "Data", + "fieldtype": "Float", "hidden": 0, "ignore_user_permissions": 0, "in_filter": 0, @@ -71,7 +71,7 @@ "length": 0, "no_copy": 0, "permlevel": 0, - "precision": "", + "precision": "2", "print_hide": 0, "print_hide_if_no_value": 0, "read_only": 0, @@ -603,8 +603,8 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2016-02-09 21:15:55.153924", - "modified_by": "Administrator", + "modified": "2016-02-16 12:29:45.290729", + "modified_by": "saurabh@erpnext.com", "module": "Accounts", "name": "Payment Request", "name_case": "", diff --git a/erpnext/accounts/doctype/payment_request/payment_request.py b/erpnext/accounts/doctype/payment_request/payment_request.py index 2faa586f88d..0115072a98f 100644 --- a/erpnext/accounts/doctype/payment_request/payment_request.py +++ b/erpnext/accounts/doctype/payment_request/payment_request.py @@ -8,7 +8,7 @@ from frappe import _ from frappe.model.document import Document from frappe.utils import flt, nowdate, get_url, cstr from erpnext.accounts.party import get_party_account -from erpnext.accounts.utils import get_balance_on +from erpnext.accounts.utils import get_account_currency from erpnext.accounts.doctype.journal_entry.journal_entry import (get_payment_entry_against_invoice, get_payment_entry_against_order) @@ -82,16 +82,31 @@ class PaymentRequest(Document): def create_journal_entry(self): """create entry""" frappe.flags.ignore_account_permission = True + + ref_doc = frappe.get_doc(self.reference_doctype, self.reference_name) + + party_account = get_party_account("Customer", ref_doc.get("customer"), ref_doc.company) + party_account_currency = get_account_currency(party_account) + + debit_in_account_currency = 0.0 + + if party_account_currency == ref_doc.company_currency: + amount = self.base_rounded_total + if self.currency != ref_doc.company_currency: + debit_in_account_currency = self.rounded_total + + else: + amount = self.rounded_total if self.reference_doctype == "Sales Order": - jv = get_payment_entry_against_order(self.reference_doctype, self.reference_name,\ - base_rounded_total=self.base_rounded_total, rounded_total= self.rounded_total,\ - journal_entry=True, bank_account=self.payment_account) + jv = get_payment_entry_against_order(self.reference_doctype, self.reference_name, + amount=amount, debit_in_account_currency=debit_in_account_currency , journal_entry=True, + bank_account=self.payment_account) if self.reference_doctype == "Sales Invoice": - jv = get_payment_entry_against_invoice(self.reference_doctype, self.reference_name,\ - base_rounded_total=self.base_rounded_total, rounded_total= self.rounded_total, \ - journal_entry=True, bank_account=self.payment_account) + jv = get_payment_entry_against_invoice(self.reference_doctype, self.reference_name, + amount=amount, debit_in_account_currency=debit_in_account_currency, journal_entry=True, + bank_account=self.payment_account) jv.update({ "voucher_type": "Journal Entry",