[fixes] multi-currency via payment request

This commit is contained in:
Saurabh
2016-02-16 16:55:51 +05:30
parent da9e9cdb13
commit 1e800a9ef0
3 changed files with 37 additions and 19 deletions

View File

@@ -551,7 +551,7 @@ def get_default_bank_cash_account(company, voucher_type, mode_of_payment=None, a
} }
@frappe.whitelist() @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) ref_doc = frappe.get_doc(dt, dn)
if flt(ref_doc.per_billed, 2) > 0: 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 = get_party_account(party_type, ref_doc.get(party_type.lower()), ref_doc.company)
party_account_currency = get_account_currency(party_account) 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: if party_account_currency == ref_doc.company_currency:
amount = flt(ref_doc.base_grand_total) - flt(ref_doc.advance_paid) amount = flt(ref_doc.base_grand_total) - flt(ref_doc.advance_paid)
else: 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, "party_account_currency": party_account_currency,
"amount_field_party": amount_field_party, "amount_field_party": amount_field_party,
"amount_field_bank": amount_field_bank, "amount_field_bank": amount_field_bank,
"amount": base_rounded_total or amount, "amount": amount,
"rounded_total": rounded_total, "debit_in_account_currency": debit_in_account_currency,
"remarks": 'Advance Payment received against {0} {1}'.format(dt, dn), "remarks": 'Advance Payment received against {0} {1}'.format(dt, dn),
"is_advance": "Yes", "is_advance": "Yes",
"bank_account": bank_account, "bank_account": bank_account,
@@ -590,7 +590,7 @@ def get_payment_entry_against_order(dt, dn, base_rounded_total=None, rounded_tot
}) })
@frappe.whitelist() @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) ref_doc = frappe.get_doc(dt, dn)
if dt == "Sales Invoice": if dt == "Sales Invoice":
party_type = "Customer" 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, "party_account_currency": ref_doc.party_account_currency,
"amount_field_party": amount_field_party, "amount_field_party": amount_field_party,
"amount_field_bank": amount_field_bank, "amount_field_bank": amount_field_bank,
"amount": base_rounded_total if base_rounded_total else abs(ref_doc.outstanding_amount), "amount": amount if amount else abs(ref_doc.outstanding_amount),
"rounded_total": rounded_total, "debit_in_account_currency": debit_in_account_currency,
"remarks": 'Payment received against {0} {1}. {2}'.format(dt, dn, ref_doc.remarks), "remarks": 'Payment received against {0} {1}. {2}'.format(dt, dn, ref_doc.remarks),
"is_advance": "No", "is_advance": "No",
"bank_account": bank_account, "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") cost_center = frappe.db.get_value("Company", ref_doc.company, "cost_center")
exchange_rate = 1 exchange_rate = 1
if args.get("party_account"): 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"), exchange_rate = get_exchange_rate(args.get("party_account"), args.get("party_account_currency"),
ref_doc.company, ref_doc.doctype, ref_doc.name) 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 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"): if bank_row.account_currency == args.get("party_account_currency"):
bank_row.set(args.get("amount_field_bank"), amount) bank_row.set(args.get("amount_field_bank"), amount)
else: else:

View File

@@ -62,7 +62,7 @@
"bold": 0, "bold": 0,
"collapsible": 0, "collapsible": 0,
"fieldname": "rounded_total", "fieldname": "rounded_total",
"fieldtype": "Data", "fieldtype": "Float",
"hidden": 0, "hidden": 0,
"ignore_user_permissions": 0, "ignore_user_permissions": 0,
"in_filter": 0, "in_filter": 0,
@@ -71,7 +71,7 @@
"length": 0, "length": 0,
"no_copy": 0, "no_copy": 0,
"permlevel": 0, "permlevel": 0,
"precision": "", "precision": "2",
"print_hide": 0, "print_hide": 0,
"print_hide_if_no_value": 0, "print_hide_if_no_value": 0,
"read_only": 0, "read_only": 0,
@@ -603,8 +603,8 @@
"issingle": 0, "issingle": 0,
"istable": 0, "istable": 0,
"max_attachments": 0, "max_attachments": 0,
"modified": "2016-02-09 21:15:55.153924", "modified": "2016-02-16 12:29:45.290729",
"modified_by": "Administrator", "modified_by": "saurabh@erpnext.com",
"module": "Accounts", "module": "Accounts",
"name": "Payment Request", "name": "Payment Request",
"name_case": "", "name_case": "",

View File

@@ -8,7 +8,7 @@ from frappe import _
from frappe.model.document import Document from frappe.model.document import Document
from frappe.utils import flt, nowdate, get_url, cstr from frappe.utils import flt, nowdate, get_url, cstr
from erpnext.accounts.party import get_party_account 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, from erpnext.accounts.doctype.journal_entry.journal_entry import (get_payment_entry_against_invoice,
get_payment_entry_against_order) get_payment_entry_against_order)
@@ -82,16 +82,31 @@ class PaymentRequest(Document):
def create_journal_entry(self): def create_journal_entry(self):
"""create entry""" """create entry"""
frappe.flags.ignore_account_permission = True 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": if self.reference_doctype == "Sales Order":
jv = get_payment_entry_against_order(self.reference_doctype, self.reference_name,\ jv = get_payment_entry_against_order(self.reference_doctype, self.reference_name,
base_rounded_total=self.base_rounded_total, rounded_total= self.rounded_total,\ amount=amount, debit_in_account_currency=debit_in_account_currency , journal_entry=True,
journal_entry=True, bank_account=self.payment_account) bank_account=self.payment_account)
if self.reference_doctype == "Sales Invoice": if self.reference_doctype == "Sales Invoice":
jv = get_payment_entry_against_invoice(self.reference_doctype, self.reference_name,\ jv = get_payment_entry_against_invoice(self.reference_doctype, self.reference_name,
base_rounded_total=self.base_rounded_total, rounded_total= self.rounded_total, \ amount=amount, debit_in_account_currency=debit_in_account_currency, journal_entry=True,
journal_entry=True, bank_account=self.payment_account) bank_account=self.payment_account)
jv.update({ jv.update({
"voucher_type": "Journal Entry", "voucher_type": "Journal Entry",