Initialize fork and rebrand app to event_manager
CI / Server (push) Has been cancelled
Linters / Frappe Linter (push) Has been cancelled
Linters / Vulnerable Dependency Check (push) Has been cancelled
UI Tests / Playwright E2E Tests (push) Has been cancelled

This commit is contained in:
2026-05-11 09:56:57 +02:00
parent f82bb803ac
commit 786cbc724f
500 changed files with 41152 additions and 2 deletions
@@ -0,0 +1,91 @@
# Copyright (c) 2025, BWH Studios and contributors
# For license information, please see license.txt
import frappe
from frappe import _
def execute(filters: dict | None = None):
"""Return columns and data for the report.
This is the main entry point for the report. It accepts the filters as a
dictionary and should return columns and data. It is called by the framework
every time the report is refreshed or a filter is updated.
"""
columns = get_columns()
data = get_data(filters)
return columns, data
def get_columns() -> list[dict]:
"""Return columns for the report.
One field definition per column, just like a DocType field definition.
"""
return [
{
"label": _("Event"),
"fieldname": "event",
"fieldtype": "Link",
"options": "Pohodex Event Manager Event",
"width": 200,
},
{
"label": _("Number of Tickets Sold"),
"fieldname": "num_tickets_sold",
"fieldtype": "Int",
},
{"label": _("Number of Add-ons Sold"), "fieldname": "num_add_ons_sold", "fieldtype": "Int"},
{"label": _("Ticket Sales"), "fieldname": "sales", "fieldtype": "Currency"},
]
def get_data(filters: dict) -> list[dict]:
"""Return data for the report.
The report data is a list of rows, with each row being a list of cell values.
"""
event = filters.get("event")
if event:
return [get_summary_for_event(event)]
data = []
events = frappe.db.get_all("Pohodex Event Manager Event", pluck="name")
for event in events:
summary = get_summary_for_event(event)
summary["event"] = event
data.append(summary)
return data
def get_summary_for_event(event: str) -> dict:
"""Return summary data for the event.
This function is used to get a summary of the event, such as total tickets sold,
total add-ons sold, and total sales.
"""
event_tickets = frappe.db.get_all("Event Ticket", filters={"event": event, "docstatus": 1}, pluck="name")
num_tickets_sold = len(event_tickets)
sales = frappe.db.get_all(
"Event Booking",
filters={"docstatus": 1, "event": event},
fields=[{"SUM": "total_amount", "as": "sales"}],
pluck="sales",
)[0]
num_add_ons_sold = frappe.db.get_all(
"Ticket Add-on Value",
filters={"parenttype": "Event Ticket", "parentfield": "add_ons", "parent": ["in", event_tickets]},
fields=[{"COUNT": "*", "as": "num_add_ons_sold"}],
pluck="num_add_ons_sold",
)[0]
return {
"event": event,
"num_tickets_sold": num_tickets_sold,
"num_add_ons_sold": num_add_ons_sold,
"sales": sales,
}