diff --git a/erpnext/accounts/report/accounts_payable/accounts_payable.js b/erpnext/accounts/report/accounts_payable/accounts_payable.js index 9dd552f3b85..9560b2a23d1 100644 --- a/erpnext/accounts/report/accounts_payable/accounts_payable.js +++ b/erpnext/accounts/report/accounts_payable/accounts_payable.js @@ -44,6 +44,13 @@ frappe.query_reports["Accounts Payable"] = { "default": "90", "reqd": 1 }, + { + "fieldname":"range4", + "label": __("Ageing Range 4"), + "fieldtype": "Int", + "default": "120", + "reqd": 1 + }, { "fieldname":"finance_book", "label": __("Finance Book"), diff --git a/erpnext/accounts/report/accounts_payable_summary/accounts_payable_summary.js b/erpnext/accounts/report/accounts_payable_summary/accounts_payable_summary.js index 31c0193f339..06499adeeaf 100644 --- a/erpnext/accounts/report/accounts_payable_summary/accounts_payable_summary.js +++ b/erpnext/accounts/report/accounts_payable_summary/accounts_payable_summary.js @@ -44,6 +44,13 @@ frappe.query_reports["Accounts Payable Summary"] = { "default": "90", "reqd": 1 }, + { + "fieldname":"range4", + "label": __("Ageing Range 4"), + "fieldtype": "Int", + "default": "120", + "reqd": 1 + }, { "fieldname":"finance_book", "label": __("Finance Book"), diff --git a/erpnext/accounts/report/accounts_receivable/accounts_receivable.js b/erpnext/accounts/report/accounts_receivable/accounts_receivable.js index 3d194026903..27c7993f4dd 100644 --- a/erpnext/accounts/report/accounts_receivable/accounts_receivable.js +++ b/erpnext/accounts/report/accounts_receivable/accounts_receivable.js @@ -44,6 +44,13 @@ frappe.query_reports["Accounts Receivable"] = { "default": "90", "reqd": 1 }, + { + "fieldname":"range4", + "label": __("Ageing Range 4"), + "fieldtype": "Int", + "default": "120", + "reqd": 1 + }, { "fieldname":"finance_book", "label": __("Finance Book"), diff --git a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py index eb41ef64598..f277a8b6698 100755 --- a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py +++ b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py @@ -100,11 +100,14 @@ class ReceivablePayableReport(object): self.filters["range2"] = "60" if not "range3" in self.filters: self.filters["range3"] = "90" + if not "range4" in self.filters: + self.filters["range4"] = "120" for label in ("0-{range1}".format(range1=self.filters["range1"]), "{range1}-{range2}".format(range1=cint(self.filters["range1"])+ 1, range2=self.filters["range2"]), "{range2}-{range3}".format(range2=cint(self.filters["range2"])+ 1, range3=self.filters["range3"]), - "{range3}-{above}".format(range3=cint(self.filters["range3"])+ 1, above=_("Above"))): + "{range3}-{range4}".format(range3=cint(self.filters["range3"])+ 1, range4=self.filters["range4"]), + "{range4}-{above}".format(range4=cint(self.filters["range4"])+ 1, above=_("Above"))): columns.append({ "label": label, "fieldname":label, @@ -329,18 +332,17 @@ class ReceivablePayableReport(object): entry_date = gle.posting_date row += get_ageing_data(cint(self.filters.range1), cint(self.filters.range2), - cint(self.filters.range3), self.age_as_on, entry_date, outstanding_amount) - + cint(self.filters.range3), cint(self.filters.range4), self.age_as_on, entry_date, outstanding_amount) # issue 6371-Ageing buckets should not have amounts if due date is not reached if self.filters.ageing_based_on == "Due Date" \ and getdate(due_date) > getdate(self.filters.report_date): - row[-1]=row[-2]=row[-3]=row[-4]=0 + row[-1]=row[-2]=row[-3]=row[-4]=row[-5]=0 if self.filters.ageing_based_on == "Supplier Invoice Date" \ and getdate(bill_date) > getdate(self.filters.report_date): - row[-1]=row[-2]=row[-3]=row[-4]=0 + row[-1]=row[-2]=row[-3]=row[-4]=row[-5]=0 if self.filters.get(scrub(args.get("party_type"))): row.append(gle.account_currency) @@ -586,13 +588,13 @@ class ReceivablePayableReport(object): return payment_term_map def get_chart_data(self, columns, data): - ageing_columns = columns[self.ageing_col_idx_start : self.ageing_col_idx_start+4] + ageing_columns = columns[self.ageing_col_idx_start : self.ageing_col_idx_start+5] rows = [] for d in data: rows.append( { - 'values': d[self.ageing_col_idx_start : self.ageing_col_idx_start+4] + 'values': d[self.ageing_col_idx_start : self.ageing_col_idx_start+5] } ) @@ -611,21 +613,22 @@ def execute(filters=None): } return ReceivablePayableReport(filters).run(args) -def get_ageing_data(first_range, second_range, third_range, age_as_on, entry_date, outstanding_amount): - # [0-30, 30-60, 60-90, 90-above] - outstanding_range = [0.0, 0.0, 0.0, 0.0] +def get_ageing_data(first_range, second_range, third_range, + fourth_range, age_as_on, entry_date, outstanding_amount): + # [0-30, 30-60, 60-90, 90-120, 120-above] + outstanding_range = [0.0, 0.0, 0.0, 0.0, 0.0] if not (age_as_on and entry_date): return [0] + outstanding_range age = (getdate(age_as_on) - getdate(entry_date)).days or 0 index = None - for i, days in enumerate([first_range, second_range, third_range]): + for i, days in enumerate([first_range, second_range, third_range, fourth_range]): if age <= days: index = i break - if index is None: index = 3 + if index is None: index = 4 outstanding_range[index] = outstanding_amount return [age] + outstanding_range diff --git a/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.js b/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.js index 47b087db8b0..f9162adabd0 100644 --- a/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.js +++ b/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.js @@ -44,6 +44,13 @@ frappe.query_reports["Accounts Receivable Summary"] = { "default": "90", "reqd": 1 }, + { + "fieldname":"range4", + "label": __("Ageing Range 4"), + "fieldtype": "Int", + "default": "120", + "reqd": 1 + }, { "fieldname":"finance_book", "label": __("Finance Book"), diff --git a/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.py b/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.py index 244aa8af6a8..ec24aece5f3 100644 --- a/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.py +++ b/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.py @@ -82,8 +82,15 @@ class AccountsReceivableSummary(ReceivablePayableReport): "width": 160 }, { - "label": _(str(self.filters.range3) + _("-Above")), - "fieldname": scrub(str(self.filters.range3) + _("-Above")), + "label": _(str(self.filters.range3) + "-" + str(self.filters.range4)), + "fieldname": scrub(str(self.filters.range3) + "-" + str(self.filters.range4)), + "fieldtype": "Currency", + "options": "currency", + "width": 160 + }, + { + "label": _(str(self.filters.range4) + _("-Above")), + "fieldname": scrub(str(self.filters.range4) + _("-Above")), "fieldtype": "Currency", "options": "currency", "width": 160 @@ -152,7 +159,7 @@ class AccountsReceivableSummary(ReceivablePayableReport): row += [ party_dict.invoiced_amt, paid_amt, party_dict.credit_amt, party_dict.outstanding_amt, - party_dict.range1, party_dict.range2, party_dict.range3, party_dict.range4, + party_dict.range1, party_dict.range2, party_dict.range3, party_dict.range4, party_dict.range5 ] if args.get("party_type") == "Customer": @@ -178,6 +185,7 @@ class AccountsReceivableSummary(ReceivablePayableReport): "range2": 0, "range3": 0, "range4": 0, + "range5": 0, "sales_person": [] }) ) @@ -209,7 +217,7 @@ class AccountsReceivableSummary(ReceivablePayableReport): cols += ["bill_no", "bill_date"] cols += ["invoiced_amt", "paid_amt", "credit_amt", - "outstanding_amt", "age", "range1", "range2", "range3", "range4", "currency", "pdc/lc_date", "pdc/lc_ref", + "outstanding_amt", "age", "range1", "range2", "range3", "range4", "range5", "currency", "pdc/lc_date", "pdc/lc_ref", "pdc/lc_amount"] if args.get("party_type") == "Supplier":