from datetime import datetime, timezone, timedelta from itertools import product from app.extensions import db from app.models.customer import Customer from app.models.account import Account from sqlalchemy.exc import IntegrityError from sqlalchemy.orm import relationship from dateutil.relativedelta import relativedelta from datetime import timedelta import logging from sqlalchemy import and_, or_, not_ from sqlalchemy.sql import func import json logger = logging.getLogger(__name__) class MembersActions(db.Model): __tablename__ = 'members_actions' id = db.Column( db.Integer, primary_key=True, autoincrement=True, ) uid = db.Column(db.String(150), nullable=False) member_id = db.Column(db.Integer, nullable=False) member_uid = db.Column(db.String(150), nullable=False) action_label = db.Column(db.String(35), nullable=False) action_name = db.Column(db.String(100), nullable=False) status_description = db.Column(db.String(25), nullable=False) status = db.Column(db.Integer, nullable=True, default=0) added = db.Column(db.DateTime(timezone=True), server_default=func.now()) updated = db.Column(db.DateTime(timezone=True), server_default=func.now(), onupdate=func.now()) @classmethod def get_recent_member_actions(cls, member_id): # member_actions = cls.query.limit(4).all() member_actions = cls.query.filter_by(member_id=member_id).order_by(cls.id.desc()).limit(4).all() if not member_actions: return None return member_actions @classmethod def get_recent_member_calendar_actions_member_id(cls, member_id, limit): # member_actions = cls.query.limit(4).all() member_actions = cls.query.filter_by(member_id=member_id).order_by(cls.id.desc()).limit(limit).all() if not member_actions: return None return member_actions # ''' # merms_panel=# select * from members_actions limit 2; # id | uid | member_id | member_uid | action_label | action_name | status_description | status | adde # d | updated # ----+--------------------------------------+-----------+--------------------------------------+------------------------+----------------------+--------------------+--------+--------------- # -------------+---------------------------- # 1 | 91f112f3-c8ad-4533-bfa7-117f8e8781b4 | 2 | f995061e-a36c-4648-a3fc-d18e3d93e353 | Systems Status Checks | system_status_checks | processing | 0 | 2025-07-20 18: # 52:08.011359 | 2025-07-20 18:52:08.011359 # 2 | 7fa90e2d-d4d2-40fd-bbad-c18be69f8967 | 1 | 2493007e-ab59-428a-8d34-ce66c8dea5ac | Systems Status Checks | system_status_checks | processing | 0 | 2025-07-20 18: # 52:08.093698 | 2025-07-20 18:52:08.093698 # (2 rows) # ''' def to_dict(self): """ Convert the Loan object to a dictionary format for JSON serialization. """ return { 'id': self.id, 'uid': self.uid, 'member_id': self.member_id, 'member_uid': self.member_uid, 'action_label' : self.action_label, 'action_name': self.action_name, 'status_description': self.status_description, 'status': self.status, 'added': self.added, 'updated': self.updated } def __repr__(self): return f''