refactor: item-wise purchase history (query to script report) -- formatter

(cherry picked from commit 003a9608dc)
This commit is contained in:
Nihantra Patel
2024-06-19 14:57:02 +05:30
committed by Mergify
parent 76d32ab07a
commit b4171e4bd9
2 changed files with 65 additions and 83 deletions

View File

@@ -2,68 +2,64 @@
// For license information, please see license.txt // For license information, please see license.txt
frappe.query_reports["Item-wise Purchase History"] = { frappe.query_reports["Item-wise Purchase History"] = {
filters: [ filters: [
{ {
fieldname: "company", fieldname: "company",
label: __("Company"), label: __("Company"),
fieldtype: "Link", fieldtype: "Link",
options: "Company", options: "Company",
default: frappe.defaults.get_user_default("Company"), default: frappe.defaults.get_user_default("Company"),
reqd: 1, reqd: 1,
}, },
{ {
fieldname: "from_date", fieldname: "from_date",
reqd: 1, reqd: 1,
label: __("From Date"), label: __("From Date"),
fieldtype: "Date", fieldtype: "Date",
default: frappe.datetime.add_months( default: frappe.datetime.add_months(
frappe.datetime.get_today(), frappe.datetime.get_today(),
-1, -1,
), ),
}, },
{ {
fieldname: "to_date", fieldname: "to_date",
reqd: 1, reqd: 1,
default: frappe.datetime.get_today(), default: frappe.datetime.get_today(),
label: __("To Date"), label: __("To Date"),
fieldtype: "Date", fieldtype: "Date",
}, },
{ {
fieldname: "item_group", fieldname: "item_group",
label: __("Item Group"), label: __("Item Group"),
fieldtype: "Link", fieldtype: "Link",
options: "Item Group", options: "Item Group",
}, },
{ {
fieldname: "item_code", fieldname: "item_code",
label: __("Item"), label: __("Item"),
fieldtype: "Link", fieldtype: "Link",
options: "Item", options: "Item",
get_query: () => { get_query: () => {
return { return {
query: "erpnext.controllers.queries.item_query", query: "erpnext.controllers.queries.item_query",
}; };
}, },
}, },
{ {
fieldname: "supplier", fieldname: "supplier",
label: __("Supplier"), label: __("Supplier"),
fieldtype: "Link", fieldtype: "Link",
options: "Supplier", options: "Supplier",
}, },
], ],
formatter: function (value, row, column, data, default_formatter) { formatter: function (value, row, column, data, default_formatter) {
value = default_formatter(value, row, column, data); value = default_formatter(value, row, column, data);
let format_fields = ["received_qty", "billed_amt"]; let format_fields = ["received_qty", "billed_amt"];
if ( if (in_list(format_fields, column.fieldname) && data && data[column.fieldname] > 0) {
in_list(format_fields, column.fieldname) && value = "<span style='color:green;'>" + value + "</span>";
data && }
data[column.fieldname] > 0 return value;
) { },
value = "<span style='color:green;'>" + value + "</span>";
}
return value;
},
}; };

View File

@@ -177,25 +177,19 @@ def get_data(filters):
"billed_amt": flt(record.get("billed_amt")), "billed_amt": flt(record.get("billed_amt")),
"company": record.get("company"), "company": record.get("company"),
} }
row["currency"] = frappe.get_cached_value( row["currency"] = frappe.get_cached_value("Company", row["company"], "default_currency")
"Company", row["company"], "default_currency"
)
data.append(row) data.append(row)
return data return data
def get_supplier_details(): def get_supplier_details():
details = frappe.get_all( details = frappe.get_all("Supplier", fields=["name", "supplier_name", "supplier_group"])
"Supplier", fields=["name", "supplier_name", "supplier_group"]
)
supplier_details = {} supplier_details = {}
for d in details: for d in details:
supplier_details.setdefault( supplier_details.setdefault(
d.name, d.name,
frappe._dict( frappe._dict({"supplier_name": d.supplier_name, "supplier_group": d.supplier_group}),
{"supplier_name": d.supplier_name, "supplier_group": d.supplier_group}
),
) )
return supplier_details return supplier_details
@@ -204,9 +198,7 @@ def get_item_details():
details = frappe.db.get_all("Item", fields=["name", "item_name", "item_group"]) details = frappe.db.get_all("Item", fields=["name", "item_name", "item_group"])
item_details = {} item_details = {}
for d in details: for d in details:
item_details.setdefault( item_details.setdefault(d.name, frappe._dict({"item_name": d.item_name, "item_group": d.item_group}))
d.name, frappe._dict({"item_name": d.item_name, "item_group": d.item_group})
)
return item_details return item_details
@@ -265,15 +257,11 @@ def get_chart_data(data):
if item_key not in item_wise_purchase_map: if item_key not in item_wise_purchase_map:
item_wise_purchase_map[item_key] = 0 item_wise_purchase_map[item_key] = 0
item_wise_purchase_map[item_key] = flt(item_wise_purchase_map[item_key]) + flt( item_wise_purchase_map[item_key] = flt(item_wise_purchase_map[item_key]) + flt(row.get("amount"))
row.get("amount")
)
item_wise_purchase_map = { item_wise_purchase_map = {
item: value item: value
for item, value in ( for item, value in (sorted(item_wise_purchase_map.items(), key=lambda i: i[1], reverse=True))
sorted(item_wise_purchase_map.items(), key=lambda i: i[1], reverse=True)
)
} }
for key in item_wise_purchase_map: for key in item_wise_purchase_map:
@@ -283,9 +271,7 @@ def get_chart_data(data):
return { return {
"data": { "data": {
"labels": labels[:30], # show max of 30 items in chart "labels": labels[:30], # show max of 30 items in chart
"datasets": [ "datasets": [{"name": _("Total Purchase Amount"), "values": datapoints[:30]}],
{"name": _("Total Purchase Amount"), "values": datapoints[:30]}
],
}, },
"type": "bar", "type": "bar",
"fieldtype": "Currency", "fieldtype": "Currency",