fix(email digest): Income/expenses value in case of last period of a fiscal year (#15320)
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
index 619776c..dc201b0 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
@@ -237,7 +237,7 @@
"customer": this.frm.doc.customer
},
callback: function(r) {
- if(r.message) {
+ if(r.message && r.message.length) {
select_loyalty_program(me.frm, r.message);
}
}
diff --git a/erpnext/public/js/utils/party.js b/erpnext/public/js/utils/party.js
index 3a5a062..eab0400 100644
--- a/erpnext/public/js/utils/party.js
+++ b/erpnext/public/js/utils/party.js
@@ -27,7 +27,7 @@
args.posting_date = frm.doc.posting_date || frm.doc.transaction_date;
}
}
- if(!args) return;
+ if(!args || !args.party) return;
if(frappe.meta.get_docfield(frm.doc.doctype, "taxes")) {
if(!erpnext.utils.validate_mandatory(frm, "Posting/Transaction Date",
diff --git a/erpnext/setup/doctype/email_digest/email_digest.py b/erpnext/setup/doctype/email_digest/email_digest.py
index e6027c2..e2189a1 100644
--- a/erpnext/setup/doctype/email_digest/email_digest.py
+++ b/erpnext/setup/doctype/email_digest/email_digest.py
@@ -5,12 +5,12 @@
import frappe
from frappe import _
from frappe.utils import fmt_money, formatdate, format_time, now_datetime, \
- get_url_to_form, get_url_to_list, flt
+ get_url_to_form, get_url_to_list, flt, getdate
from datetime import timedelta
from dateutil.relativedelta import relativedelta
from frappe.core.doctype.user.user import STANDARD_USERS
import frappe.desk.notifications
-from erpnext.accounts.utils import get_balance_on, get_count_on
+from erpnext.accounts.utils import get_balance_on, get_count_on, get_fiscal_year
user_specific_content = ["calendar_events", "todo_list"]
@@ -279,7 +279,7 @@
def get_income(self):
"""Get income for given period"""
- income, past_income, count = self.get_period_amounts(self.get_root_type_accounts("income"),'income')
+ income, past_income, count = self.get_period_amounts(self.get_roots("income"),'income')
return {
"label": self.meta.get_label("income"),
@@ -326,12 +326,12 @@
return self.get_type_balance('invoiced_amount', 'Receivable')
def get_expenses_booked(self):
- expense, past_expense, count = self.get_period_amounts(self.get_root_type_accounts("expense"), 'expenses_booked')
+ expenses, past_expenses, count = self.get_period_amounts(self.get_roots("expense"), 'expenses_booked')
return {
"label": self.meta.get_label("expenses_booked"),
- "value": expense,
- "last_value": past_expense,
+ "value": expenses,
+ "last_value": past_expenses,
"count": count
}
@@ -340,14 +340,9 @@
balance = past_balance = 0.0
count = 0
for account in accounts:
- balance += (get_balance_on(account, date = self.future_to_date)
- - get_balance_on(account, date = self.future_from_date - timedelta(days=1)))
-
- count += (get_count_on(account,fieldname, date = self.future_to_date )
- - get_count_on(account,fieldname, date = self.future_from_date - timedelta(days=1)))
-
- past_balance += (get_balance_on(account, date = self.past_to_date)
- - get_balance_on(account, date = self.past_from_date - timedelta(days=1)))
+ balance += get_incomes_expenses_for_period(account, self.future_from_date, self.future_to_date)
+ past_balance += get_incomes_expenses_for_period(account, self.past_from_date, self.past_to_date)
+ count += get_count_for_period(account, fieldname, self.future_from_date, self.future_to_date)
return balance, past_balance, count
@@ -382,6 +377,10 @@
'count': count
}
+ def get_roots(self, root_type):
+ return [d.name for d in frappe.db.get_all("Account",
+ filters={"root_type": root_type.title(), "company": self.company,
+ "is_group": 1, "parent_account": ["in", ("", None)]})]
def get_root_type_accounts(self, root_type):
if not root_type in self._accounts:
@@ -445,9 +444,9 @@
return {
"label": self.meta.get_label(fieldname),
- "value": value,
+ "value": value,
"last_value": last_value,
- "count": count
+ "count": count
}
def get_summary_of_doc(self, doc_type, fieldname):
@@ -459,8 +458,8 @@
return {
"label": self.meta.get_label(fieldname),
- "value": value,
- "last_value": last_value,
+ "value": value,
+ "last_value": last_value,
"count": count
}
@@ -542,3 +541,39 @@
@frappe.whitelist()
def get_digest_msg(name):
return frappe.get_doc("Email Digest", name).get_msg_html()
+
+def get_incomes_expenses_for_period(account, from_date, to_date):
+ """Get amounts for current and past periods"""
+
+ val = 0.0
+ balance_on_to_date = get_balance_on(account, date = to_date)
+ balance_before_from_date = get_balance_on(account, date = from_date - timedelta(days=1))
+
+ fy_start_date = get_fiscal_year(to_date)[1]
+
+ if from_date == fy_start_date:
+ val = balance_on_to_date
+ elif from_date > fy_start_date:
+ val = balance_on_to_date - balance_before_from_date
+ else:
+ last_year_closing_balance = get_balance_on(account, date=fy_start_date - timedelta(days=1))
+ print(fy_start_date - timedelta(days=1), last_year_closing_balance)
+ val = balance_on_to_date + (last_year_closing_balance - balance_before_from_date)
+
+ return val
+
+def get_count_for_period(account, fieldname, from_date, to_date):
+ count = 0.0
+ count_on_to_date = get_count_on(account, fieldname, to_date)
+ count_before_from_date = get_count_on(account, fieldname, from_date - timedelta(days=1))
+
+ fy_start_date = get_fiscal_year(to_date)[1]
+ if from_date == fy_start_date:
+ count = count_on_to_date
+ elif from_date > fy_start_date:
+ count = count_on_to_date - count_before_from_date
+ else:
+ last_year_closing_count = get_count_on(account, fieldname, fy_start_date - timedelta(days=1))
+ count = count_on_to_date + (last_year_closing_count - count_before_from_date)
+
+ return count
\ No newline at end of file