Merge branch 'develop'
diff --git a/erpnext/__version__.py b/erpnext/__version__.py
index ca621e3..d886566 100644
--- a/erpnext/__version__.py
+++ b/erpnext/__version__.py
@@ -1,2 +1,2 @@
from __future__ import unicode_literals
-__version__ = '5.0.26'
+__version__ = '5.0.27'
diff --git a/erpnext/accounts/doctype/gl_entry/gl_entry.py b/erpnext/accounts/doctype/gl_entry/gl_entry.py
index 4e7928d..138cf23 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
+from frappe.utils import flt, fmt_money, getdate, formatdate, cstr
from frappe import _
from frappe.model.document import Document
@@ -118,7 +118,7 @@
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 party_type=%s and party=%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)
if against_voucher_type == 'Purchase Invoice':
@@ -127,8 +127,9 @@
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 party_type=%s and party=%s and ifnull(against_voucher, '') = ''""",
- (against_voucher, account, party_type, party))[0][0])
+ 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])
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.py b/erpnext/accounts/doctype/journal_entry/journal_entry.py
index 753fcc3..7bf6c56 100644
--- a/erpnext/accounts/doctype/journal_entry/journal_entry.py
+++ b/erpnext/accounts/doctype/journal_entry/journal_entry.py
@@ -274,30 +274,28 @@
r.append(_('Reference #{0} dated {1}').format(self.cheque_no, formatdate(self.cheque_date)))
else:
msgprint(_("Please enter Reference date"), raise_exception=frappe.MandatoryError)
-
+
+ company_currency = get_company_currency(self.company)
+
for d in self.get('accounts'):
if d.against_invoice and d.credit:
- currency = frappe.db.get_value("Sales Invoice", d.against_invoice, "currency")
-
- r.append(_("{0} against Sales Invoice {1}").format(fmt_money(flt(d.credit), currency = currency), \
+ r.append(_("{0} against Sales Invoice {1}").format(fmt_money(flt(d.credit), currency = company_currency), \
d.against_invoice))
if d.against_sales_order and d.credit:
- currency = frappe.db.get_value("Sales Order", d.against_sales_order, "currency")
- r.append(_("{0} against Sales Order {1}").format(fmt_money(flt(d.credit), currency = currency), \
+ r.append(_("{0} against Sales Order {1}").format(fmt_money(flt(d.credit), currency = company_currency), \
d.against_sales_order))
if d.against_voucher and d.debit:
- bill_no = frappe.db.sql("""select bill_no, bill_date, currency
+ bill_no = frappe.db.sql("""select bill_no, bill_date
from `tabPurchase Invoice` where name=%s""", d.against_voucher)
if bill_no and bill_no[0][0] and bill_no[0][0].lower().strip() \
not in ['na', 'not applicable', 'none']:
- r.append(_('{0} against Bill {1} dated {2}').format(fmt_money(flt(d.debit), currency=bill_no[0][2]), bill_no[0][0],
+ r.append(_('{0} against Bill {1} dated {2}').format(fmt_money(flt(d.debit), currency=company_currency), bill_no[0][0],
bill_no[0][1] and formatdate(bill_no[0][1].strftime('%Y-%m-%d'))))
if d.against_purchase_order and d.debit:
- currency = frappe.db.get_value("Purchase Order", d.against_purchase_order, "currency")
- r.append(_("{0} against Purchase Order {1}").format(fmt_money(flt(d.credit), currency = currency), \
+ r.append(_("{0} against Purchase Order {1}").format(fmt_money(flt(d.credit), currency = company_currency), \
d.against_purchase_order))
if self.user_remark:
diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
index 8820c87..3f34020 100644
--- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
+++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
@@ -88,9 +88,7 @@
throw(_("Conversion rate cannot be 0 or 1"))
def validate_credit_to_acc(self):
- root_type, account_type = frappe.db.get_value("Account", self.credit_to, ["root_type", "account_type"])
- if root_type != "Liability":
- frappe.throw(_("Credit To account must be a liability account"))
+ account_type = frappe.db.get_value("Account", self.credit_to, "account_type")
if account_type != "Payable":
frappe.throw(_("Credit To account must be a Payable account"))
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
index fe5954e..abe58ce 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
@@ -235,9 +235,7 @@
reconcile_against_document(lst)
def validate_debit_to_acc(self):
- root_type, account_type = frappe.db.get_value("Account", self.debit_to, ["root_type", "account_type"])
- if root_type != "Asset":
- frappe.throw(_("Debit To account must be a liability account"))
+ account_type = frappe.db.get_value("Account", self.debit_to, "account_type")
if account_type != "Receivable":
frappe.throw(_("Debit To account must be a Receivable account"))
diff --git a/erpnext/accounts/general_ledger.py b/erpnext/accounts/general_ledger.py
index 8fc785c..17fe922 100644
--- a/erpnext/accounts/general_ledger.py
+++ b/erpnext/accounts/general_ledger.py
@@ -3,7 +3,7 @@
from __future__ import unicode_literals
import frappe
-from frappe.utils import flt, cstr
+from frappe.utils import flt, cstr, cint
from frappe import _
from frappe.model.meta import get_field_precision
from erpnext.accounts.utils import validate_expense_against_budget
@@ -82,14 +82,15 @@
gle.submit()
def validate_account_for_auto_accounting_for_stock(gl_map):
- if gl_map[0].voucher_type=="Journal Entry":
- aii_accounts = [d[0] for d in frappe.db.sql("""select name from tabAccount
- where account_type = 'Warehouse' and ifnull(warehouse, '')!=''""")]
+ if cint(frappe.db.get_single_value("Accounts Settings", "auto_accounting_for_stock")) \
+ and gl_map[0].voucher_type=="Journal Entry":
+ aii_accounts = [d[0] for d in frappe.db.sql("""select name from tabAccount
+ where account_type = 'Warehouse' and ifnull(warehouse, '')!=''""")]
- for entry in gl_map:
- if entry.account in aii_accounts:
- frappe.throw(_("Account: {0} can only be updated via Stock Transactions")
- .format(entry.account), StockAccountInvalidTransaction)
+ for entry in gl_map:
+ if entry.account in aii_accounts:
+ frappe.throw(_("Account: {0} can only be updated via Stock Transactions")
+ .format(entry.account), StockAccountInvalidTransaction)
def round_off_debit_credit(gl_map):
precision = get_field_precision(frappe.get_meta("GL Entry").get_field("debit"),
diff --git a/erpnext/accounts/report/general_ledger/general_ledger.py b/erpnext/accounts/report/general_ledger/general_ledger.py
index 9f1f560..35c839f 100644
--- a/erpnext/accounts/report/general_ledger/general_ledger.py
+++ b/erpnext/accounts/report/general_ledger/general_ledger.py
@@ -66,7 +66,7 @@
gl_entries = frappe.db.sql("""select posting_date, account, party_type, party,
sum(ifnull(debit, 0)) as debit, sum(ifnull(credit, 0)) as credit,
- voucher_type, voucher_no, cost_center, remarks, against
+ voucher_type, voucher_no, cost_center, remarks, against, is_opening
from `tabGL Entry`
where company=%(company)s {conditions}
{group_by_condition}
diff --git a/erpnext/accounts/report/trial_balance/trial_balance.py b/erpnext/accounts/report/trial_balance/trial_balance.py
index 2571751..11af273 100644
--- a/erpnext/accounts/report/trial_balance/trial_balance.py
+++ b/erpnext/accounts/report/trial_balance/trial_balance.py
@@ -4,7 +4,7 @@
from __future__ import unicode_literals
import frappe
from frappe import _
-from frappe.utils import cint, flt, getdate, formatdate
+from frappe.utils import cint, flt, getdate, formatdate, cstr
from erpnext.accounts.report.financial_statements import filter_accounts, get_gl_entries
value_fields = ("opening_debit", "opening_credit", "debit", "credit", "closing_debit", "closing_credit")
@@ -133,10 +133,7 @@
d["opening_credit"] = opening_balances.get(d.name, {}).get("opening_credit", 0)
for entry in gl_entries_by_account.get(d.name, []):
- if entry.is_opening == "Yes" and d.root_type in ("Asset", "Liability", "Equity"):
- d["opening_debit"] += flt(entry.debit)
- d["opening_credit"] += flt(entry.credit)
- else:
+ if cstr(entry.is_opening) != "Yes":
d["debit"] += flt(entry.debit)
d["credit"] += flt(entry.credit)
diff --git a/erpnext/hooks.py b/erpnext/hooks.py
index d36f269..1caf7ca 100644
--- a/erpnext/hooks.py
+++ b/erpnext/hooks.py
@@ -5,7 +5,7 @@
app_description = "Open Source Enterprise Resource Planning for Small and Midsized Organizations"
app_icon = "icon-th"
app_color = "#e74c3c"
-app_version = "5.0.26"
+app_version = "5.0.27"
error_report_email = "support@erpnext.com"
diff --git a/erpnext/hr/doctype/leave_application/leave_application.py b/erpnext/hr/doctype/leave_application/leave_application.py
index c75c2bd..44fb6fd 100755
--- a/erpnext/hr/doctype/leave_application/leave_application.py
+++ b/erpnext/hr/doctype/leave_application/leave_application.py
@@ -339,6 +339,7 @@
events.append({
"doctype": "Leave Block List Date",
"from_date": block_date.block_date,
+ "to_date": block_date.block_date,
"title": _("Leave Blocked") + ": " + block_date.reason,
"name": "_" + str(cnt),
})
@@ -355,6 +356,7 @@
events.append({
"doctype": "Holiday",
"from_date": holiday.holiday_date,
+ "to_date": holiday.holiday_date,
"title": _("Holiday") + ": " + cstr(holiday.description),
"name": holiday.name
})
diff --git a/erpnext/patches/v4_2/party_model.py b/erpnext/patches/v4_2/party_model.py
index b1bd895..8f4fc33 100644
--- a/erpnext/patches/v4_2/party_model.py
+++ b/erpnext/patches/v4_2/party_model.py
@@ -30,8 +30,8 @@
account_id = account.name
- frappe.db.set_value("Company", args["company"], ("default_receivable_account"
- if args["account_type"]=="Receivable" else "default_payable_account"), account_id)
+ frappe.db.set_value("Company", args["company"], ("default_receivable_account"
+ if args["account_type"]=="Receivable" else "default_payable_account"), account_id)
receivable_payable_accounts.setdefault(args["company"], {}).setdefault(args["account_type"], account_id)
diff --git a/erpnext/patches/v5_0/update_frozen_accounts_permission_role.py b/erpnext/patches/v5_0/update_frozen_accounts_permission_role.py
index 2f85513..14426f5 100644
--- a/erpnext/patches/v5_0/update_frozen_accounts_permission_role.py
+++ b/erpnext/patches/v5_0/update_frozen_accounts_permission_role.py
@@ -7,6 +7,6 @@
account_settings = frappe.get_doc("Accounts Settings")
if not account_settings.frozen_accounts_modifier and account_settings.bde_auth_role:
- frappe.db.set_value("Account Settings", None,
+ frappe.db.set_value("Accounts Settings", None,
"frozen_accounts_modifier", account_settings.bde_auth_role)
diff --git a/erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.py b/erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.py
index d911975..69e1321 100644
--- a/erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.py
+++ b/erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.py
@@ -54,7 +54,7 @@
return frappe.db.sql("""select item_code, batch_no, warehouse,
posting_date, actual_qty
from `tabStock Ledger Entry`
- where docstatus < 2 %s order by item_code, warehouse""" %
+ where docstatus < 2 and ifnull(batch_no, '') != '' %s order by item_code, warehouse""" %
conditions, as_dict=1)
def get_item_warehouse_batch_map(filters, float_precision):
diff --git a/setup.py b/setup.py
index 2cba2e8..315b590 100644
--- a/setup.py
+++ b/setup.py
@@ -1,6 +1,6 @@
from setuptools import setup, find_packages
-version = "5.0.26"
+version = "5.0.27"
with open("requirements.txt", "r") as f:
install_requires = f.readlines()