From d16d0efde5f26c7be4f877d7fa3e5ebf8593778b Mon Sep 17 00:00:00 2001 From: Afshan Date: Wed, 8 Jul 2020 19:23:13 +0530 Subject: [PATCH] feat: added range for age in stock ageing --- .../stock/report/stock_ageing/stock_ageing.js | 21 +++++++++ .../stock/report/stock_ageing/stock_ageing.py | 43 +++++++++++++++++-- 2 files changed, 61 insertions(+), 3 deletions(-) diff --git a/erpnext/stock/report/stock_ageing/stock_ageing.js b/erpnext/stock/report/stock_ageing/stock_ageing.js index ccde61a167..8495142ba5 100644 --- a/erpnext/stock/report/stock_ageing/stock_ageing.js +++ b/erpnext/stock/report/stock_ageing/stock_ageing.js @@ -36,6 +36,27 @@ frappe.query_reports["Stock Ageing"] = { "fieldtype": "Link", "options": "Brand" }, + { + "fieldname":"range1", + "label": __("Ageing Range 1"), + "fieldtype": "Int", + "default": "30", + "reqd": 1 + }, + { + "fieldname":"range2", + "label": __("Ageing Range 2"), + "fieldtype": "Int", + "default": "60", + "reqd": 1 + }, + { + "fieldname":"range3", + "label": __("Ageing Range 3"), + "fieldtype": "Int", + "default": "90", + "reqd": 1 + }, { "fieldname":"show_warehouse_wise_stock", "label": __("Show Warehouse-wise Stock"), diff --git a/erpnext/stock/report/stock_ageing/stock_ageing.py b/erpnext/stock/report/stock_ageing/stock_ageing.py index d5878cb662..41b8f12da5 100644 --- a/erpnext/stock/report/stock_ageing/stock_ageing.py +++ b/erpnext/stock/report/stock_ageing/stock_ageing.py @@ -4,12 +4,12 @@ from __future__ import unicode_literals import frappe from frappe import _ -from frappe.utils import date_diff, flt +from frappe.utils import date_diff, flt, cint +# from frappe.utils import getdate, nowdate, flt, cint, formatdate, cstr, now, time_diff_in_seconds from six import iteritems from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos def execute(filters=None): - columns = get_columns(filters) item_details = get_fifo_queue(filters) to_date = filters["to_date"] @@ -25,6 +25,7 @@ def execute(filters=None): average_age = get_average_age(fifo_queue, to_date) earliest_age = date_diff(to_date, fifo_queue[0][1]) latest_age = date_diff(to_date, fifo_queue[-1][1]) + range1, range2, range3, above_range3 = get_range_age(filters, fifo_queue, to_date) row = [details.name, details.item_name, details.description, details.item_group, details.brand] @@ -33,6 +34,7 @@ def execute(filters=None): row.append(details.warehouse) row.extend([item_dict.get("total_qty"), average_age, + range1, range2, range3, above_range3, earliest_age, latest_age, details.stock_uom]) data.append(row) @@ -55,7 +57,25 @@ def get_average_age(fifo_queue, to_date): return flt(age_qty / total_qty, 2) if total_qty else 0.0 +def get_range_age(filters, fifo_queue, to_date): + range1 = range2 = range3 = above_range3 = 0.0 + for item in fifo_queue: + age = date_diff(to_date, item[1]) + + if age <= filters.range1: + range1 = item[0] + elif age <= filters.range2: + range2 = item[0] + elif age <= filters.range3: + range3 = item[0] + else: + above_range3 = item[0] + + return range1, range2, range3, above_range3 + def get_columns(filters): + range_columns = [] + setup_ageing_columns(filters, range_columns) columns = [ { "label": _("Item Code"), @@ -112,7 +132,9 @@ def get_columns(filters): "fieldname": "average_age", "fieldtype": "Float", "width": 100 - }, + }]) + columns.extend(range_columns) + columns.extend([ { "label": _("Earliest"), "fieldname": "earliest", @@ -263,3 +285,18 @@ def get_chart_data(data, filters): }, "type" : "bar" } + +def setup_ageing_columns(filters, range_columns): + for i, label in enumerate(["0-{range1}".format(range1=filters["range1"]), + "{range1}-{range2}".format(range1=cint(filters["range1"])+ 1, range2=filters["range2"]), + "{range2}-{range3}".format(range2=cint(filters["range2"])+ 1, range3=filters["range3"]), + "{range3}-{above}".format(range3=cint(filters["range3"])+ 1, above=_("Above"))]): + add_column(range_columns, label="Age in ("+ label +")", fieldname='range' + str(i+1)) + +def add_column(range_columns, label, fieldname, fieldtype='Float', width=140): + range_columns.append(dict( + label=label, + fieldname=fieldname, + fieldtype=fieldtype, + width=width + )) \ No newline at end of file