From d9f9e7d6b7470716add119ff94f0da5400eb4a9c Mon Sep 17 00:00:00 2001 From: "CHIEFSOFT\\ameye" Date: Thu, 16 Oct 2025 11:52:33 -0400 Subject: [PATCH] dash data --- app/api/routes/routes.py | 2 +- app/api/services/office_dashboard.py | 82 ++++++++++++++++++++++++++++ app/models/members.py | 14 ++++- 3 files changed, 96 insertions(+), 2 deletions(-) diff --git a/app/api/routes/routes.py b/app/api/routes/routes.py index 8d32977..a3c666c 100644 --- a/app/api/routes/routes.py +++ b/app/api/routes/routes.py @@ -501,7 +501,7 @@ def get_recent_signup_office(): def get_office_sidebar(): # Call the dashboard service filters = {} - result = OfficeDashboardService.get_payments_data(filters) + result = OfficeDashboardService.get_office_sidebar(filters) return jsonify(result) @api.route('/office/users', methods=['GET']) diff --git a/app/api/services/office_dashboard.py b/app/api/services/office_dashboard.py index c85411c..5e6ca0b 100644 --- a/app/api/services/office_dashboard.py +++ b/app/api/services/office_dashboard.py @@ -419,3 +419,85 @@ class OfficeDashboardService(BaseService): except Exception as e: logger.error(f"An error occurred while getting dashboard data: {str(e)}", exc_info=True) return jsonify({"message": "Internal Server Error"}), 500 + + + @staticmethod + def get_office_sidebar(filters): + try: + if filters is None: + filters = {} + + # Extract filters + option_name = filters.get('option_name') + # member_id = filters.get('member_id') + + # Extract pagination parameters + page = int(filters.get('page', 1)) + limit = int(filters.get('limit', 20)) + + # Ensure page and limit are valid + if page < 1: + page = 1 + if limit < 1 or limit > 100: + limit = 20 + + membersPayList, total_count = Payments.get_all_payments(option_name, None, page, limit) + # Convert loans to dictionary format + member_sub_data = [] + for subs in membersPayList: + member_sub_data.append({ + 'id': subs.id, + 'member_id': subs.member_id, + 'option_name': subs.option_name, + 'option_type': subs.option_type, + 'payment_uid': subs.payment_uid, + 'amount': subs.amount * 0.01, + 'status': subs.status, + 'sub_start': subs.sub_start, + 'sub_stop': subs.sub_stop, + "added": subs.added, + }) + + recentLogin = Members.get_recent_member_login(10) + if recentLogin: + recent_login_data = [] + for subs in recentLogin: + recent_login_data.append({ + 'id': subs.id, + 'firstname' : subs.firstname, + 'lastname' : subs.lastname, + 'username' : subs.username, + "added": subs.added, + }) + + + + # Calculate total pages + total_pages = (total_count + limit - 1) // limit + + recent_payment_summary = { + "approved": 0, + "verified": 0, + "failed": 0, + "total": 0 + } + + recent_deployment_summary = { + "pending": 0, + "started": 0, + "stuck": 0, + "completed": 0 + } + + response_data = { + 'recent_payment_summary': recent_payment_summary, + 'recent_deployment_summary': recent_deployment_summary, + 'recent_login': recent_login_data, + 'recent_deployment_error': [], + } + + return response_data + + except Exception as e: + logger.error(f"An error occurred while getting dashboard data: {str(e)}", exc_info=True) + return jsonify({"message": "Internal Server Error"}), 500 \ No newline at end of file diff --git a/app/models/members.py b/app/models/members.py index a417c8c..186f64d 100644 --- a/app/models/members.py +++ b/app/models/members.py @@ -180,4 +180,16 @@ class Members(db.Model): offset = (page - 1) * limit query = query.limit(limit).offset(offset) - return query.all(), total_count \ No newline at end of file + return query.all(), total_count + + @classmethod + def get_recent_member_login(cls, limit=10): + + query = cls.query + logger.info(f"Get Recent Member Login") + + # Order by created_at descending (newest first) + query = query.order_by(cls.added.desc()) + query = query.limit(limit).offset(0) + + return query.all() \ No newline at end of file