Payment against invoices where party not specified
Conflicts:
erpnext/accounts/doctype/gl_entry/gl_entry.py
diff --git a/erpnext/accounts/doctype/gl_entry/gl_entry.py b/erpnext/accounts/doctype/gl_entry/gl_entry.py
index 43c4213..c459628 100644
--- a/erpnext/accounts/doctype/gl_entry/gl_entry.py
+++ b/erpnext/accounts/doctype/gl_entry/gl_entry.py
@@ -4,7 +4,7 @@
from __future__ import unicode_literals
import frappe
-from frappe.utils import flt, fmt_money, getdate, formatdate, cstr
+from frappe.utils import flt, fmt_money, getdate, formatdate
from frappe import _
from frappe.model.document import Document
@@ -91,7 +91,7 @@
if self.cost_center and _get_cost_center_company() != self.company:
frappe.throw(_("Cost Center {0} does not belong to Company {1}").format(self.cost_center, self.company))
-
+
def validate_party(self):
if self.party_type and self.party:
frozen_accounts_modifier = frappe.db.get_value( 'Accounts Settings', None,'frozen_accounts_modifier')
@@ -124,12 +124,18 @@
frappe.throw(_("You are not authorized to add or update entries before {0}").format(formatdate(acc_frozen_upto)))
def update_outstanding_amt(account, party_type, party, against_voucher_type, against_voucher, on_cancel=False):
+ if party_type and party:
+ party_condition = " and ifnull(party_type, '')='{0}' and ifnull(party, '')='{1}'"\
+ .format(frappe.db.escape(party_type), frappe.db.escape(party))
+ else:
+ party_condition = ""
+
# get final outstanding amt
bal = flt(frappe.db.sql("""select sum(ifnull(debit, 0)) - sum(ifnull(credit, 0))
from `tabGL Entry`
where against_voucher_type=%s and against_voucher=%s
- and account = %s and ifnull(party_type, '')=%s and ifnull(party, '')=%s""",
- (against_voucher_type, against_voucher, account, party_type, party))[0][0] or 0.0)
+ and account = %s {0}""".format(party_condition),
+ (against_voucher_type, against_voucher, account))[0][0] or 0.0)
if against_voucher_type == 'Purchase Invoice':
bal = -bal
@@ -137,9 +143,8 @@
against_voucher_amount = flt(frappe.db.sql("""
select sum(ifnull(debit, 0)) - sum(ifnull(credit, 0))
from `tabGL Entry` where voucher_type = 'Journal Entry' and voucher_no = %s
- and account = %s and ifnull(party_type, '')=%s and ifnull(party, '')=%s
- and ifnull(against_voucher, '') = ''""",
- (against_voucher, account, cstr(party_type), cstr(party)))[0][0])
+ and account = %s and ifnull(against_voucher, '') = '' {0}"""
+ .format(party_condition), (against_voucher, account))[0][0])
if not against_voucher_amount:
frappe.throw(_("Against Journal Entry {0} is already adjusted against some other voucher")
diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.js b/erpnext/accounts/doctype/journal_entry/journal_entry.js
index ff1ace4..1e77422 100644
--- a/erpnext/accounts/doctype/journal_entry/journal_entry.js
+++ b/erpnext/accounts/doctype/journal_entry/journal_entry.js
@@ -59,7 +59,6 @@
// journal entry
if(jvd.reference_type==="Journal Entry") {
frappe.model.validate_missing(jvd, "account");
-
return {
query: "erpnext.accounts.doctype.journal_entry.journal_entry.get_against_jv",
filters: {
@@ -69,23 +68,32 @@
};
}
- // against party
-
- frappe.model.validate_missing(jvd, "party_type");
- frappe.model.validate_missing(jvd, "party");
-
var out = {
filters: [
- [jvd.reference_type, jvd.reference_type.indexOf("Sales")===0 ? "customer" : "supplier", "=", jvd.party],
- [jvd.reference_type, "docstatus", "=", 1],
+ [jvd.reference_type, "docstatus", "=", 1]
]
};
if(in_list(["Sales Invoice", "Purchase Invoice"], jvd.reference_type)) {
out.filters.push([jvd.reference_type, "outstanding_amount", "!=", 0]);
+
+ // account filter
+ frappe.model.validate_missing(jvd, "account");
+
+ party_account_field = jvd.reference_type==="Sales Invoice" ? "debit_to": "credit_to";
+ out.filters.push([jvd.reference_type, party_account_field, "=", jvd.account]);
} else {
+ // party_type and party mandatory
+ frappe.model.validate_missing(jvd, "party_type");
+ frappe.model.validate_missing(jvd, "party");
+
out.filters.push([jvd.reference_type, "per_billed", "<", 100]);
}
+
+ if(jvd.party_type && jvd.party) {
+ out.filters.push([jvd.reference_type,
+ (jvd.reference_type.indexOf("Sales")===0 ? "customer" : "supplier"), "=", jvd.party]);
+ }
return out;
});