Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Empty file.
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
// Copyright (c) 2025, Keerthana and contributors
// For license information, please see license.txt

frappe.query_reports["Membership Report"] = {
filters: [
{
fieldname: "from_date",
label: __("From Date"),
fieldtype: "Date",
default: frappe.datetime.get_today(),
reqd: 1,
width: "100px"
},
{
fieldname: "to_date",
label: __("To Date"),
fieldtype: "Date",
default: frappe.datetime.get_today(),
reqd: 1,
width: "100px"
},
{
fieldname: "status",
label: __("Status"),
fieldtype: "Select",
options: "\nActive\nExpired\nPending\nSuspend\nCancelled",
width: "120px"
}
]
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
{
"add_total_row": 1,
"add_translate_data": 0,
"columns": [],
"creation": "2025-09-25 16:36:44.125736",
"disabled": 0,
"docstatus": 0,
"doctype": "Report",
"filters": [],
"idx": 0,
"is_standard": "Yes",
"letterhead": null,
"modified": "2025-09-25 17:15:05.181584",
"modified_by": "Administrator",
"module": "Gym Management",
"name": "Membership Report",
"owner": "Administrator",
"prepared_report": 0,
"ref_doctype": "Membership Register",
"report_name": "Membership Report",
"report_type": "Script Report",
"roles": [
{
"role": "System Manager"
}
],
"timeout": 0
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# Copyright (c) 2025, Keerthana and contributors
# For license information, please see license.txt
import frappe

def execute(filters=None):
columns = get_columns()
data = get_data(filters)
return columns, data


def get_columns():
return [
{"label": "ID", "fieldname": "name", "fieldtype": "Link", "options": "Membership Register", "width": 150},
{"label": "Member", "fieldname": "member", "fieldtype": "Link", "options": "Member", "width": 150},
{"label": "Phone Number", "fieldname": "phone_number", "fieldtype": "Data", "width": 150},
{"label": "Trainer", "fieldname": "trainer", "fieldtype": "Link", "options": "Trainer", "width": 150},
{"label": "Membership Plan", "fieldname": "membership_plan", "fieldtype": "Link", "options": "Membership Plan", "width": 150},
{"label": "Plan", "fieldname": "plan", "fieldtype": "Data", "width": 150},
{"label": "Membership Status", "fieldname": "membership_status", "fieldtype": "Data", "width": 150},
{"label": "Start Date", "fieldname": "start_date", "fieldtype": "Date", "width": 120},
{"label": "End Date", "fieldname": "end_date", "fieldtype": "Date", "width": 120},
{"label": "Duration Days", "fieldname": "durationdays", "fieldtype": "Int", "width": 120},
{"label": "Total Amount", "fieldname": "total_amount", "fieldtype": "Currency", "width": 150},
]


def get_data(filters):
conditions = []
values = {}

if filters.get("from_date"):
conditions.append("start_date >= %(from_date)s")
values["from_date"] = filters["from_date"]

if filters.get("to_date"):
conditions.append("end_date <= %(to_date)s")
values["to_date"] = filters["to_date"]

if filters.get("status"):
conditions.append("membership_status = %(status)s")
values["status"] = filters["status"]

condition_sql = " AND ".join(conditions)
if condition_sql:
condition_sql = "WHERE " + condition_sql

query = f"""
SELECT
name,
member,
phone_number,
trainer,
membership_plan,
plan,
membership_status,
start_date,
end_date,
durationdays,
total_amount
FROM `tabMembership Register`
{condition_sql}
ORDER BY start_date DESC
"""

return frappe.db.sql(query, values, as_dict=True)
Loading