Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Opportunity Summary by Sales Stage Report Error #45576

Open
Paulsudhan-craft opened this issue Jan 29, 2025 · 4 comments
Open

Opportunity Summary by Sales Stage Report Error #45576

Paulsudhan-craft opened this issue Jan 29, 2025 · 4 comments
Labels

Comments

@Paulsudhan-craft
Copy link

Information about bug

Image

Module

CRM

Version

version 15

Installation method

None

Relevant log output / Stack trace / Full Error Message.

@Paulsudhan-craft
Copy link
Author

remainder

@ljain112
Copy link
Collaborator

Can you share the full traceback ?
Use Copy error to clipboard.

@Paulsudhan-craft
Copy link
Author

App Versions

{
	"ain_alshams": "0.0.1",
	"erpnext": "15.47.1",
	"frappe": "15.51.0",
	"hrms": "15.36.1",
	"sc_project": "0.0.1",
	"xitefitness": "0.0.1"
}

Route

query-report/Opportunity Summary by Sales Stage

Traceback

Traceback (most recent call last):
  File "apps/frappe/frappe/app.py", line 114, in application
    response = frappe.api.handle(request)
  File "apps/frappe/frappe/api/__init__.py", line 49, in handle
    data = endpoint(**arguments)
  File "apps/frappe/frappe/api/v1.py", line 36, in handle_rpc_call
    return frappe.handler.handle()
  File "apps/frappe/frappe/handler.py", line 50, in handle
    data = execute_cmd(cmd)
  File "apps/frappe/frappe/handler.py", line 86, in execute_cmd
    return frappe.call(method, **frappe.form_dict)
  File "apps/frappe/frappe/__init__.py", line 1726, in call
    return fn(*args, **newargs)
  File "apps/frappe/frappe/utils/typing_validations.py", line 31, in wrapper
    return func(*args, **kwargs)
  File "apps/frappe/frappe/__init__.py", line 879, in wrapper_fn
    retval = fn(*args, **get_newargs(fn, kwargs))
  File "apps/frappe/frappe/desk/query_report.py", line 224, in run
    result = generate_report_result(report, filters, user, custom_columns, is_tree, parent_field)
  File "apps/frappe/frappe/__init__.py", line 879, in wrapper_fn
    retval = fn(*args, **get_newargs(fn, kwargs))
  File "apps/frappe/frappe/desk/query_report.py", line 84, in generate_report_result
    res = get_report_result(report, filters) or []
  File "apps/frappe/frappe/desk/query_report.py", line 65, in get_report_result
    res = report.execute_script_report(filters)
  File "apps/frappe/frappe/core/doctype/report/report.py", line 163, in execute_script_report
    res = self.execute_module(filters)
  File "apps/frappe/frappe/core/doctype/report/report.py", line 180, in execute_module
    return frappe.get_attr(method_name)(frappe._dict(filters))
  File "apps/erpnext/erpnext/crm/report/opportunity_summary_by_sales_stage/opportunity_summary_by_sales_stage.py", line 14, in execute
    return OpportunitySummaryBySalesStage(filters).run()
  File "apps/erpnext/erpnext/crm/report/opportunity_summary_by_sales_stage/opportunity_summary_by_sales_stage.py", line 23, in run
    self.get_data()
  File "apps/erpnext/erpnext/crm/report/opportunity_summary_by_sales_stage/opportunity_summary_by_sales_stage.py", line 83, in get_data
    self.get_rows()
  File "apps/erpnext/erpnext/crm/report/opportunity_summary_by_sales_stage/opportunity_summary_by_sales_stage.py", line 126, in get_rows
    self.get_formatted_data()
  File "apps/erpnext/erpnext/crm/report/opportunity_summary_by_sales_stage/opportunity_summary_by_sales_stage.py", line 159, in get_formatted_data
    assignments = json.loads(d.get(based_on))
  File "/usr/lib/python3.10/json/__init__.py", line 346, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python3.10/json/decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python3.10/json/decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

Request Data

{
	"type": "GET",
	"args": {
		"report_name": "Opportunity Summary by Sales Stage",
		"filters": "{\"based_on\":\"Opportunity Owner\",\"data_based_on\":\"Number\",\"status\":[],\"company\":\"XITE FITNESS TRADING LLC\"}",
		"ignore_prepared_report": false,
		"are_default_filters": true
	},
	"headers": {},
	"error_handlers": {},
	"url": "/api/method/frappe.desk.query_report.run",
	"request_id": null
}

Response Data

{
	"exception": "json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)",
	"exc_type": "JSONDecodeError",
	"_exc_source": "erpnext (app)"
}

@Paulsudhan-craft
Copy link
Author

def get_formatted_data(self):
	self.formatted_data = frappe._dict()

	for d in self.query_result:
		data_based_on = {"Number": "count", "Amount": "amount"}[self.filters.get("data_based_on")]

		based_on = {
			"Opportunity Owner": "_assign",
			"Source": "source",
			"Opportunity Type": "opportunity_type",
		}[self.filters.get("based_on")]

		if self.filters.get("based_on") == "Opportunity Owner":
			value = d.get(based_on)
			if not value or value in ["[]", "null", "Not Assigned"]:
				assignments = ["Not Assigned"]
			else:
				try:
					assignments = json.loads(value)
				except json.JSONDecodeError:
					assignments = ["Not Assigned"]

			sales_stage = d.get("sales_stage")
			count = d.get(data_based_on)

			if assignments:
				for assigned_to in assignments:
					self.set_formatted_data_based_on_sales_stage(assigned_to, sales_stage, count)
		else:
			value = d.get(based_on)
			sales_stage = d.get("sales_stage")
			count = d.get(data_based_on)
			self.set_formatted_data_based_on_sales_stage(value, sales_stage, count)

my updated function solved the issue

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants