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
frappe.query_reports["Item-wise Purchase History"] = {
filters: [
{
fieldname: "company",
label: __("Company"),
fieldtype: "Link",
options: "Company",
default: frappe.defaults.get_user_default("Company"),
reqd: 1,
},
{
fieldname: "from_date",
reqd: 1,
label: __("From Date"),
fieldtype: "Date",
default: frappe.datetime.add_months(
frappe.datetime.get_today(),
-1,
),
},
{
fieldname: "to_date",
reqd: 1,
default: frappe.datetime.get_today(),
label: __("To Date"),
fieldtype: "Date",
},
{
fieldname: "item_group",
label: __("Item Group"),
fieldtype: "Link",
options: "Item Group",
},
{
fieldname: "item_code",
label: __("Item"),
fieldtype: "Link",
options: "Item",
get_query: () => {
return {
query: "erpnext.controllers.queries.item_query",
};
},
},
{
fieldname: "supplier",
label: __("Supplier"),
fieldtype: "Link",
options: "Supplier",
},
],
filters: [
{
fieldname: "company",
label: __("Company"),
fieldtype: "Link",
options: "Company",
default: frappe.defaults.get_user_default("Company"),
reqd: 1,
},
{
fieldname: "from_date",
reqd: 1,
label: __("From Date"),
fieldtype: "Date",
default: frappe.datetime.add_months(
frappe.datetime.get_today(),
-1,
),
},
{
fieldname: "to_date",
reqd: 1,
default: frappe.datetime.get_today(),
label: __("To Date"),
fieldtype: "Date",
},
{
fieldname: "item_group",
label: __("Item Group"),
fieldtype: "Link",
options: "Item Group",
},
{
fieldname: "item_code",
label: __("Item"),
fieldtype: "Link",
options: "Item",
get_query: () => {
return {
query: "erpnext.controllers.queries.item_query",
};
},
},
{
fieldname: "supplier",
label: __("Supplier"),
fieldtype: "Link",
options: "Supplier",
},
],
formatter: function (value, row, column, data, default_formatter) {
value = default_formatter(value, row, column, data);
let format_fields = ["received_qty", "billed_amt"];
formatter: function (value, row, column, data, default_formatter) {
value = default_formatter(value, row, column, data);
let format_fields = ["received_qty", "billed_amt"];
if (
in_list(format_fields, column.fieldname) &&
data &&
data[column.fieldname] > 0
) {
value = "<span style='color:green;'>" + value + "</span>";
}
return value;
},
if (in_list(format_fields, column.fieldname) && data && data[column.fieldname] > 0) {
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")),
"company": record.get("company"),
}
row["currency"] = frappe.get_cached_value(
"Company", row["company"], "default_currency"
)
row["currency"] = frappe.get_cached_value("Company", row["company"], "default_currency")
data.append(row)
return data
def get_supplier_details():
details = frappe.get_all(
"Supplier", fields=["name", "supplier_name", "supplier_group"]
)
details = frappe.get_all("Supplier", fields=["name", "supplier_name", "supplier_group"])
supplier_details = {}
for d in details:
supplier_details.setdefault(
d.name,
frappe._dict(
{"supplier_name": d.supplier_name, "supplier_group": d.supplier_group}
),
frappe._dict({"supplier_name": d.supplier_name, "supplier_group": d.supplier_group}),
)
return supplier_details
@@ -204,9 +198,7 @@ def get_item_details():
details = frappe.db.get_all("Item", fields=["name", "item_name", "item_group"])
item_details = {}
for d in details:
item_details.setdefault(
d.name, frappe._dict({"item_name": d.item_name, "item_group": d.item_group})
)
item_details.setdefault(d.name, frappe._dict({"item_name": d.item_name, "item_group": d.item_group}))
return item_details
@@ -265,15 +257,11 @@ def get_chart_data(data):
if item_key not in item_wise_purchase_map:
item_wise_purchase_map[item_key] = 0
item_wise_purchase_map[item_key] = flt(item_wise_purchase_map[item_key]) + flt(
row.get("amount")
)
item_wise_purchase_map[item_key] = flt(item_wise_purchase_map[item_key]) + flt(row.get("amount"))
item_wise_purchase_map = {
item: value
for item, value in (
sorted(item_wise_purchase_map.items(), key=lambda i: i[1], reverse=True)
)
for item, value in (sorted(item_wise_purchase_map.items(), key=lambda i: i[1], reverse=True))
}
for key in item_wise_purchase_map:
@@ -283,9 +271,7 @@ def get_chart_data(data):
return {
"data": {
"labels": labels[:30], # show max of 30 items in chart
"datasets": [
{"name": _("Total Purchase Amount"), "values": datapoints[:30]}
],
"datasets": [{"name": _("Total Purchase Amount"), "values": datapoints[:30]}],
},
"type": "bar",
"fieldtype": "Currency",