from datetime import datetime, timezone from app.extensions import db from app.models.charge import Charge from sqlalchemy.orm import relationship from sqlalchemy.sql import func from sqlalchemy.exc import IntegrityError from dateutil.relativedelta import relativedelta import logging from sqlalchemy import and_, or_, not_ from sqlalchemy.sql import func import uuid logger = logging.getLogger(__name__) class CustomTemplates(db.Model): __tablename__ = 'custom_templates' id = db.Column(db.String, primary_key=True) uid = db.Column(db.String, nullable=False) custom_id = db.Column(db.String, nullable=False) provision_name = db.Column(db.String, nullable=False) added = db.Column(db.DateTime(timezone=True), server_default=func.now(), onupdate=func.now()) @classmethod def get_template_by_custom_id(cls, custom_id): templates = cls.query.filter_by(custom_id=str(custom_id)).first() if not templates: return None return templates @classmethod def create_template(cls, custom_id,provision_name): custom_data = cls( uid=str(uuid.uuid4()), custom_id=custom_id, provision_name=provision_name, added=datetime.now(timezone.utc) ) try: logger.info(f" About to Insert Subscription Data {custom_data.custom_id} ") db.session.add(custom_data) db.session.flush() except IntegrityError as err: logger.error(f" Error inserting custom data {err} -- ") raise ValueError(f"Database integrity error: {err}") return custom_data @classmethod def get_custom_template_for_office(cls, filters): templates = cls.query.all() if not templates: raise ValueError(f"Templates not found") return templates def to_dict(self): return { "id": self.id, "uid": self.uid, "custom_id": self.product_id, "provision_name": self.name, "added": self.added.isoformat() if self.added else None } def __repr__(self): return f''