Resolved bug: if account of type 'Bank or Cash' does not exists, then it shows error in the email digest email but does not raise exception
diff --git a/erpnext/setup/doctype/email_digest/email_digest.py b/erpnext/setup/doctype/email_digest/email_digest.py
index 53304cf..4e5a27b 100644
--- a/erpnext/setup/doctype/email_digest/email_digest.py
+++ b/erpnext/setup/doctype/email_digest/email_digest.py
@@ -110,19 +110,19 @@
for query in query_dict.keys():
if self.doc.fields[query]:
- #webnotes.msgprint(query)
- res = webnotes.conn.sql(query_dict[query], as_dict=1)
- if query == 'income':
- for r in res:
- r['value'] = float(r['credit'] - r['debit'])
- elif query in ['expenses_booked', 'bank_balance']:
- for r in res:
- r['value'] = float(r['debit'] - r['credit'])
- #webnotes.msgprint(query)
- #webnotes.msgprint(res)
- result[query] = (res and len(res)==1) and res[0] or (res and res or None)
+ if query_dict[query]:
+ #webnotes.msgprint(query)
+ res = webnotes.conn.sql(query_dict[query], as_dict=1)
+ if query == 'income':
+ for r in res:
+ r['value'] = float(r['credit'] - r['debit'])
+ elif query in ['expenses_booked', 'bank_balance']:
+ for r in res:
+ r['value'] = float(r['debit'] - r['credit'])
+ #webnotes.msgprint(query)
+ #webnotes.msgprint(res)
+ result[query] = (res and len(res)==1) and res[0] or (res and res or None)
- #webnotes.msgprint(result)
return result
@@ -149,18 +149,19 @@
elif args['type'] in ['collections', 'payments']:
args['bc_accounts_regex'] = self.get_bc_accounts_regex()
- query = """
- SELECT
- IFNULL(SUM(IFNULL(gle.%(field)s, 0)), 0) AS '%(field)s',
- %(common_select)s
- FROM
- %(common_from)s
- WHERE
- %(common_where)s AND
- ac.master_type = '%(master_type)s' AND
- gle.against REGEXP '%(bc_accounts_regex)s' AND
- %(start_date_condition)s AND
- %(end_date_condition)s""" % args
+ if args['bc_accounts_regex']:
+ query = """
+ SELECT
+ IFNULL(SUM(IFNULL(gle.%(field)s, 0)), 0) AS '%(field)s',
+ %(common_select)s
+ FROM
+ %(common_from)s
+ WHERE
+ %(common_where)s AND
+ ac.master_type = '%(master_type)s' AND
+ gle.against REGEXP '%(bc_accounts_regex)s' AND
+ %(start_date_condition)s AND
+ %(end_date_condition)s""" % args
elif args['type'] in ['income', 'expenses_booked']:
query = """
@@ -307,7 +308,8 @@
FROM `tabAccount`
WHERE account_type = 'Bank or Cash'""", as_list=1)
- return '(' + '|'.join([ac[0] for ac in bc_account_list]) + ')'
+ if bc_account_list:
+ return '(' + '|'.join([ac[0] for ac in bc_account_list]) + ')'
def get(self):
@@ -653,13 +655,17 @@
# Sort these keys depending on idx value
bd_keys = sorted(body_dict, key=lambda x: body_dict[x]['idx'])
-
for k in bd_keys:
if self.doc.fields[k]:
- table_list.append(body_dict[k]['table'])
+ if k in result:
+ table_list.append(body_dict[k]['table'])
+ elif k in ['collections', 'payments']:
+ table_list.append(\
+ "<div style='font-size: 16px; color: grey'>[" + \
+ k.capitalize() + \
+ "]<br />Missing: Ledger of type 'Bank or Cash'\
+ </div>")
- result = []
-
i = 0
result = []
op_len = len(table_list)