refactor: don't use pandas for basic reports (#30597)
This commit is contained in:
parent
bb875fe217
commit
ba42c87687
@ -1,9 +1,9 @@
|
|||||||
# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors
|
# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors
|
||||||
# For license information, please see license.txt
|
# For license information, please see license.txt
|
||||||
import json
|
import json
|
||||||
|
from itertools import groupby
|
||||||
|
|
||||||
import frappe
|
import frappe
|
||||||
import pandas
|
|
||||||
from frappe import _
|
from frappe import _
|
||||||
from frappe.utils import flt
|
from frappe.utils import flt
|
||||||
|
|
||||||
@ -101,18 +101,19 @@ class OpportunitySummaryBySalesStage(object):
|
|||||||
|
|
||||||
self.convert_to_base_currency()
|
self.convert_to_base_currency()
|
||||||
|
|
||||||
dataframe = pandas.DataFrame.from_records(self.query_result)
|
for row in self.query_result:
|
||||||
dataframe.replace(to_replace=[None], value="Not Assigned", inplace=True)
|
if not row.get(based_on):
|
||||||
result = dataframe.groupby(["sales_stage", based_on], as_index=False)["amount"].sum()
|
row[based_on] = "Not Assigned"
|
||||||
|
|
||||||
self.grouped_data = []
|
self.grouped_data = []
|
||||||
|
|
||||||
for i in range(len(result["amount"])):
|
grouping_key = lambda o: (o["sales_stage"], o[based_on]) # noqa
|
||||||
|
for (sales_stage, _based_on), rows in groupby(self.query_result, grouping_key):
|
||||||
self.grouped_data.append(
|
self.grouped_data.append(
|
||||||
{
|
{
|
||||||
"sales_stage": result["sales_stage"][i],
|
"sales_stage": sales_stage,
|
||||||
based_on: result[based_on][i],
|
based_on: _based_on,
|
||||||
"amount": result["amount"][i],
|
"amount": sum(flt(r["amount"]) for r in rows),
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -3,9 +3,9 @@
|
|||||||
|
|
||||||
import json
|
import json
|
||||||
from datetime import date
|
from datetime import date
|
||||||
|
from itertools import groupby
|
||||||
|
|
||||||
import frappe
|
import frappe
|
||||||
import pandas
|
|
||||||
from dateutil.relativedelta import relativedelta
|
from dateutil.relativedelta import relativedelta
|
||||||
from frappe import _
|
from frappe import _
|
||||||
from frappe.utils import cint, flt
|
from frappe.utils import cint, flt
|
||||||
@ -109,18 +109,15 @@ class SalesPipelineAnalytics(object):
|
|||||||
|
|
||||||
self.convert_to_base_currency()
|
self.convert_to_base_currency()
|
||||||
|
|
||||||
dataframe = pandas.DataFrame.from_records(self.query_result)
|
|
||||||
dataframe.replace(to_replace=[None], value="Not Assigned", inplace=True)
|
|
||||||
result = dataframe.groupby([self.pipeline_by, self.period_by], as_index=False)["amount"].sum()
|
|
||||||
|
|
||||||
self.grouped_data = []
|
self.grouped_data = []
|
||||||
|
|
||||||
for i in range(len(result["amount"])):
|
grouping_key = lambda o: (o.get(self.pipeline_by) or "Not Assigned", o[self.period_by]) # noqa
|
||||||
|
for (pipeline_by, period_by), rows in groupby(self.query_result, grouping_key):
|
||||||
self.grouped_data.append(
|
self.grouped_data.append(
|
||||||
{
|
{
|
||||||
self.pipeline_by: result[self.pipeline_by][i],
|
self.pipeline_by: pipeline_by,
|
||||||
self.period_by: result[self.period_by][i],
|
self.period_by: period_by,
|
||||||
"amount": result["amount"][i],
|
"amount": sum(flt(r["amount"]) for r in rows),
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
|
# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
|
||||||
# License: GNU General Public License v3. See license.txt
|
# License: GNU General Public License v3. See license.txt
|
||||||
|
|
||||||
|
from itertools import groupby
|
||||||
|
|
||||||
import frappe
|
import frappe
|
||||||
import pandas as pd
|
|
||||||
from frappe import _
|
from frappe import _
|
||||||
|
from frappe.utils import flt
|
||||||
|
|
||||||
from erpnext.accounts.report.utils import convert
|
from erpnext.accounts.report.utils import convert
|
||||||
|
|
||||||
@ -89,28 +90,21 @@ def get_opp_by_lead_source(from_date, to_date, company):
|
|||||||
for x in opportunities
|
for x in opportunities
|
||||||
]
|
]
|
||||||
|
|
||||||
df = (
|
summary = {}
|
||||||
pd.DataFrame(cp_opportunities)
|
sales_stages = set()
|
||||||
.groupby(["source", "sales_stage"], as_index=False)
|
group_key = lambda o: (o["source"], o["sales_stage"]) # noqa
|
||||||
.agg({"compound_amount": "sum"})
|
for (source, sales_stage), rows in groupby(cp_opportunities, group_key):
|
||||||
)
|
summary.setdefault(source, {})[sales_stage] = sum(r["compound_amount"] for r in rows)
|
||||||
|
sales_stages.add(sales_stage)
|
||||||
|
|
||||||
result = {}
|
pivot_table = []
|
||||||
result["labels"] = list(set(df.source.values))
|
for sales_stage in sales_stages:
|
||||||
result["datasets"] = []
|
row = []
|
||||||
|
for source, sales_stage_values in summary.items():
|
||||||
for s in set(df.sales_stage.values):
|
row.append(flt(sales_stage_values.get(sales_stage)))
|
||||||
result["datasets"].append(
|
pivot_table.append({"chartType": "bar", "name": sales_stage, "values": row})
|
||||||
{"name": s, "values": [0] * len(result["labels"]), "chartType": "bar"}
|
|
||||||
)
|
|
||||||
|
|
||||||
for row in df.itertuples():
|
|
||||||
source_index = result["labels"].index(row.source)
|
|
||||||
|
|
||||||
for dataset in result["datasets"]:
|
|
||||||
if dataset["name"] == row.sales_stage:
|
|
||||||
dataset["values"][source_index] = row.compound_amount
|
|
||||||
|
|
||||||
|
result = {"datasets": pivot_table, "labels": list(summary.keys())}
|
||||||
return result
|
return result
|
||||||
|
|
||||||
else:
|
else:
|
||||||
@ -148,20 +142,14 @@ def get_pipeline_data(from_date, to_date, company):
|
|||||||
for x in opportunities
|
for x in opportunities
|
||||||
]
|
]
|
||||||
|
|
||||||
df = (
|
summary = {}
|
||||||
pd.DataFrame(cp_opportunities)
|
for sales_stage, rows in groupby(cp_opportunities, lambda o: o["sales_stage"]):
|
||||||
.groupby(["sales_stage"], as_index=True)
|
summary[sales_stage] = sum(flt(r["compound_amount"]) for r in rows)
|
||||||
.agg({"compound_amount": "sum"})
|
|
||||||
.to_dict()
|
|
||||||
)
|
|
||||||
|
|
||||||
result = {}
|
|
||||||
result["labels"] = df["compound_amount"].keys()
|
|
||||||
result["datasets"] = []
|
|
||||||
result["datasets"].append(
|
|
||||||
{"name": _("Total Amount"), "values": df["compound_amount"].values(), "chartType": "bar"}
|
|
||||||
)
|
|
||||||
|
|
||||||
|
result = {
|
||||||
|
"labels": list(summary.keys()),
|
||||||
|
"datasets": [{"name": _("Total Amount"), "values": list(summary.values()), "chartType": "bar"}],
|
||||||
|
}
|
||||||
return result
|
return result
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user