From 5bc29b3abbd34eaa182b2ead443b40e7a54c3005 Mon Sep 17 00:00:00 2001 From: keerthana Date: Thu, 25 Sep 2025 17:16:21 +0530 Subject: [PATCH] feat : Create Report for Membership Registration --- .../gym_management/report/__init__.py | 0 .../report/membership_report/__init__.py | 0 .../membership_report/membership_report.js | 30 +++++++++ .../membership_report/membership_report.json | 28 ++++++++ .../membership_report/membership_report.py | 65 +++++++++++++++++++ 5 files changed, 123 insertions(+) create mode 100644 gym_management/gym_management/report/__init__.py create mode 100644 gym_management/gym_management/report/membership_report/__init__.py create mode 100644 gym_management/gym_management/report/membership_report/membership_report.js create mode 100644 gym_management/gym_management/report/membership_report/membership_report.json create mode 100644 gym_management/gym_management/report/membership_report/membership_report.py diff --git a/gym_management/gym_management/report/__init__.py b/gym_management/gym_management/report/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/gym_management/gym_management/report/membership_report/__init__.py b/gym_management/gym_management/report/membership_report/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/gym_management/gym_management/report/membership_report/membership_report.js b/gym_management/gym_management/report/membership_report/membership_report.js new file mode 100644 index 0000000..ca98f11 --- /dev/null +++ b/gym_management/gym_management/report/membership_report/membership_report.js @@ -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" + } + ] +}; diff --git a/gym_management/gym_management/report/membership_report/membership_report.json b/gym_management/gym_management/report/membership_report/membership_report.json new file mode 100644 index 0000000..89b3529 --- /dev/null +++ b/gym_management/gym_management/report/membership_report/membership_report.json @@ -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 +} \ No newline at end of file diff --git a/gym_management/gym_management/report/membership_report/membership_report.py b/gym_management/gym_management/report/membership_report/membership_report.py new file mode 100644 index 0000000..9db587d --- /dev/null +++ b/gym_management/gym_management/report/membership_report/membership_report.py @@ -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)