diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.py b/erpnext/accounts/doctype/journal_entry/journal_entry.py index 25b05cb1d9..55e846be52 100644 --- a/erpnext/accounts/doctype/journal_entry/journal_entry.py +++ b/erpnext/accounts/doctype/journal_entry/journal_entry.py @@ -209,9 +209,7 @@ class JournalEntry(AccountsController): account = self.reference_accounts[reference_name] if reference_type in ("Sales Order", "Purchase Order"): - order = frappe.db.get_value(reference_type, reference_name, - ["docstatus", "per_billed", "status", "advance_paid", - "base_grand_total", "grand_total", "currency"], as_dict=1) + order = frappe.get_doc(reference_type, reference_name) if order.docstatus != 1: frappe.throw(_("{0} {1} is not submitted").format(reference_type, reference_name)) @@ -225,12 +223,16 @@ class JournalEntry(AccountsController): account_currency = get_account_currency(account) if account_currency == self.company_currency: voucher_total = order.base_grand_total + formatted_voucher_total = fmt_money(voucher_total, order.precision("base_grand_total"), + currency=account_currency) else: voucher_total = order.grand_total + formatted_voucher_total = fmt_money(voucher_total, order.precision("grand_total"), + currency=account_currency) if flt(voucher_total) < (flt(order.advance_paid) + total): frappe.throw(_("Advance paid against {0} {1} cannot be greater \ - than Grand Total {2}").format(reference_type, reference_name, voucher_total)) + than Grand Total {2}").format(reference_type, reference_name, formatted_voucher_total)) def validate_invoices(self): """Validate totals and docstatus for invoices""" @@ -797,7 +799,7 @@ def get_exchange_rate(account, account_currency=None, company=None, company_currency = get_company_currency(company) if account_currency != company_currency: - if reference_type in ("Sales Invoice", "Purchase Invoice") and reference_name: + if reference_type and reference_name and frappe.get_meta(reference_type).get_field("conversion_rate"): exchange_rate = frappe.db.get_value(reference_type, reference_name, "conversion_rate") elif account_details and account_details.account_type == "Bank" and \ diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.json b/erpnext/buying/doctype/purchase_order/purchase_order.json index 69e518539d..2cf67c1641 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.json +++ b/erpnext/buying/doctype/purchase_order/purchase_order.json @@ -1597,30 +1597,6 @@ "set_only_once": 0, "unique": 0 }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "advance_paid", - "fieldtype": "Currency", - "hidden": 0, - "ignore_user_permissions": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Advance Paid", - "length": 0, - "no_copy": 1, - "options": "party_account_currency", - "permlevel": 0, - "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, @@ -1695,6 +1671,30 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "fieldname": "advance_paid", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Advance Paid", + "length": 0, + "no_copy": 1, + "options": "party_account_currency", + "permlevel": 0, + "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, @@ -2534,7 +2534,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2016-01-27 15:15:05.213016", + "modified": "2016-01-29 01:41:08.478575", "modified_by": "Administrator", "module": "Buying", "name": "Purchase Order", diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py index b8acf68ddf..9916613875 100644 --- a/erpnext/controllers/accounts_controller.py +++ b/erpnext/controllers/accounts_controller.py @@ -4,7 +4,7 @@ from __future__ import unicode_literals import frappe from frappe import _, throw -from frappe.utils import today, flt, cint +from frappe.utils import today, flt, cint, fmt_money from erpnext.setup.utils import get_company_currency, get_exchange_rate from erpnext.accounts.utils import get_fiscal_year, validate_fiscal_year, get_account_currency from erpnext.utilities.transaction_base import TransactionBase @@ -402,21 +402,28 @@ class AccountsController(TransactionBase): """.format(dr_or_cr=dr_or_cr), (self.doctype, self.name, party), as_dict=1) 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: + advance = advance[0] + advance_paid = flt(advance.amount, self.precision("advance_paid")) + formatted_advance_paid = fmt_money(advance_paid, precision=self.precision("advance_paid"), + currency=advance.account_currency) + + frappe.db.set_value(self.doctype, self.name, "party_account_currency", + advance.account_currency) + + if advance.account_currency == self.currency: order_total = self.grand_total + formatted_order_total = fmt_money(order_total, precision=self.precision("grand_total"), + currency=advance.account_currency) else: order_total = self.base_grand_total - + formatted_order_total = fmt_money(order_total, precision=self.precision("base_grand_total"), + currency=advance.account_currency) + 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)) + .format(formatted_advance_paid, self.name, formatted_order_total)) @property def company_abbr(self):