added product settings

This commit is contained in:
CHIEFSOFT\ameye
2025-08-07 11:58:32 -04:00
parent f30a8829b6
commit ba4756d456
8 changed files with 281 additions and 33 deletions
+6 -2
View File
@@ -20,10 +20,14 @@ from .products_details import ProductsDetails
from .provision_actions import ProvisionActions
from .password_reset import PasswordReset
from .member_product_refresh import MembersProductsRefresh
from .members_products_settings import MembersProductsSettings
__all__ = ['Members','Customer', 'Account', 'Products',
'MembersProducts', 'MembersActions', 'MembersPending', 'ProductsDetails', 'ProvisionActions', 'MembersProductsRefresh',
'PasswordReset','Loan', 'Transaction', 'Repayment',
'MembersProducts', 'MembersActions', 'MembersPending', 'ProductsDetails',
'ProvisionActions', 'MembersProductsRefresh','MembersProductsSettings',
'PasswordReset',
'Loan', 'Transaction', 'Repayment',
'LoanCharge', 'Offer', 'Charge', 'RACCheck', 'LoanRepaymentSchedule',
'TransactionOffer', 'RepaymentsData', 'Salary']
+9 -9
View File
@@ -95,15 +95,15 @@ class MembersProducts(db.Model):
return subscription
@classmethod
def save_update_product_settings(cls, member_id,subscription_uid,product_id,settings_key,setting_type,setting_value ):
logger.info(f"settings_key : {settings_key}")
logger.info(f"setting_type : {setting_type}")
logger.info(f"settings_value : {setting_value}")
logger.info(f"subscription_uid: {subscription_uid}")
logger.info(f"product_id : {product_id}")
logger.info(f"member_id : {member_id}")
return 0
# @classmethod
# def save_update_product_settings(cls, member_id,subscription_uid,product_id,settings_key,setting_type,setting_value ):
# logger.info(f"settings_key : {settings_key}")
# logger.info(f"setting_type : {setting_type}")
# logger.info(f"settings_value : {setting_value}")
# logger.info(f"subscription_uid: {subscription_uid}")
# logger.info(f"product_id : {product_id}")
# logger.info(f"member_id : {member_id}")
# return 0
def to_dict(self):
"""
+168
View File
@@ -0,0 +1,168 @@
from datetime import datetime, timezone, timedelta
from itertools import product
from app.extensions import db
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 uuid
logger = logging.getLogger(__name__)
class MembersProductsSettings(db.Model):
__tablename__ = 'members_products_settings'
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)
product_id = db.Column(db.String(25), nullable=False)
subscription_uid = db.Column(db.String(150), nullable=False)
settings_key = db.Column(db.String(100), nullable=False)
setting_type = db.Column(db.String(15), nullable=False)
setting_value = db.Column(db.String(3500), 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())
# name = db.Column(db.String(100), nullable=False)
# description = db.Column(db.String(250), nullable=False)
# products_settings = relationship(
# "Products",
# primaryjoin="MembersProductsSettings.product_id == Products.product_id",
# foreign_keys=[product_id],
# back_populates="members_products_settings",
# )
@classmethod
def get_product_settings_by_subscription_uid(cls, subscription_uid):
myproduct_settings = cls.query.filter_by(subscription_uid=str(subscription_uid)).all()
if not myproduct_settings:
return None
return myproduct_settings
@classmethod
def get_product_settings_by_product_id_and_member_id(cls, product_id, member_id):
myproduct_settings = cls.query.filter_by(product_id=str(product_id) ,member_id=member_id).all()
if not myproduct_settings:
return None
return myproduct_settings
@classmethod
def get_product_settings_by_settings_key_and_subscription_uid(cls, settings_key, subscription_uid):
myproduct_settings = cls.query.filter_by(settings_key=str(settings_key) ,subscription_uid=str(subscription_uid)).first()
if not myproduct_settings:
return None
return myproduct_settings
@classmethod
def create_settings_entry(cls, member_id,subscription_uid,product_id,settings_key,setting_type,setting_value):
logger.info(f" Data for Subscription Data {member_id} ,{product_id} {setting_type}")
product_settings = cls(
uid=str(uuid.uuid4()),
member_id=member_id,
product_id=product_id,
subscription_uid=subscription_uid,
settings_key=settings_key,
setting_type =setting_type,
setting_value=setting_value,
added=datetime.now(timezone.utc),
updated=datetime.now(timezone.utc)
)
try:
logger.info(f" About to Insert Subscription Settngs {settings_key} {member_id} ")
db.session.add(product_settings)
db.session.flush()
except IntegrityError as err:
logger.error(f" Error inserting subscription settings data {err} -- ")
raise ValueError(f"Database integrity error: {err}")
return product_settings
@classmethod
def update_settings_entry(cls, members_products_settings_id, setting_value):
# Retrieve Reset
update_p = cls.query.get(members_products_settings_id)
if not update_p:
raise ValueError(f"Reset with ID {members_products_settings_id} does not exist.")
if update_p.setting_value == setting_value:
return
@classmethod
def save_update_product_settings(cls, member_id,subscription_uid,product_id,settings_key,setting_type,setting_value ):
logger.info(f"settings_key : {settings_key}")
logger.info(f"setting_type : {setting_type}")
logger.info(f"settings_value : {setting_value}")
logger.info(f"subscription_uid: {subscription_uid}")
logger.info(f"product_id : {product_id}")
logger.info(f"member_id : {member_id}")
current_settings = cls.get_product_settings_by_settings_key_and_subscription_uid(settings_key,subscription_uid)
if current_settings:
members_products_settings_id = current_settings.id
logger.info(f"members_products_settings_id : {members_products_settings_id}")
cls.update_settings_entry(members_products_settings_id, setting_value)
else:
cls.create_settings_entry(member_id,subscription_uid,product_id,settings_key,setting_type,setting_value)
return 0
def to_dict(self):
"""
Convert the Loan object to a dictionary format for JSON serialization.
"""
return {
'id': self.id,
'uid': self.uid,
'product_id': self.product_id,
'subscription_uid': self.subscription_uid,
'member_id': self.member_id,
'settings_key': self.settings_key,
'setting_type': self.setting_type,
'setting_value': self.setting_value,
'status': self.status,
'added': self.added,
'updated': self.updated
}
def __repr__(self):
return f'<MembersProductsSettings {self.id}>'
# '''
# id SERIAL,
# uid uuid DEFAULT uuid_generate_v4(),
# member_id INT REFERENCES members(id),
# subscription_uid VARCHAR(150),
# product_id VARCHAR(25) REFERENCES products(product_id),
# settings_key VARCHAR(100) NOT NULL,
# setting_type VARCHAR(15) NOT NULL,
# setting_value TEXT,
# status INT DEFAULT 0,
# added timestamp without time zone DEFAULT now(),
# updated timestamp without time zone DEFAULT now()
# '''
# @classmethod
# def get_dash_recent_subscription(cls, limit):
# member_product = cls.query.order_by(cls.id.desc()).limit(limit).all()
# if not member_product:
# return None
# return member_product
#
# @classmethod
# def get_member_product_by_product_member_id(cls, member_id, product_id):
# member_product = cls.query.filter_by(member_id=str(member_id), product_id=str(product_id)).first()
# if not member_product:
# return None
# return member_product
+7
View File
@@ -40,6 +40,13 @@ class Products(db.Model):
back_populates="products",
)
# products_settings = relationship(
# "MembersProductsSettings",
# primaryjoin="Products.product_id == MembersProductsSettings.product_id",
# foreign_keys="MembersProductsSettings.product_id",
# back_populates="products",
# )
# members_products = relationship(
# "MembersProducts",