added product settings
This commit is contained in:
@@ -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']
|
||||
@@ -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):
|
||||
"""
|
||||
|
||||
@@ -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
|
||||
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user