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 OfficeUsers(db.Model): __tablename__ = 'office_users' id = db.Column( db.Integer, primary_key=True, autoincrement=True, ) uid = db.Column(db.String(150), nullable=True) username = db.Column(db.String(25), nullable=False) password = db.Column(db.String(250), nullable=False) firstname = db.Column(db.String(25), nullable=False) lastname = db.Column(db.String(25), nullable=False) acc_level = db.Column(db.Integer, nullable=True, default=10) status = db.Column(db.Integer, nullable=True, default=0) added = db.Column(db.DateTime(timezone=True), server_default=func.now()) @classmethod def get_office_users_list(cls): users_list = cls.query.all() if not users_list: raise ValueError(f"No available users") return users_list @classmethod def get_office_user_id(cls, user_id): users_list = cls.query.filter_by(id=user_id).first() if not users_list: logger.error(f"users_list with ID {user_id} does not exist.") return None return users_list @classmethod def get_office_user_by_username(cls, username): logger.info(f"users_list looking for {username} .") users_list = cls.query.filter_by(username=username).first() logger.info(f"users_list looking for {username} after.") if not users_list: logger.error(f"users_list with ID {username} does not exist.") return None return users_list @classmethod def set_office_user_password(cls, user_id, username,password_hash): selected_user = cls.query.filter_by(id=int(user_id), username=str(username)).first() if not selected_user: logger.error(f"users_list with ID {user_id} does not exist.") return None logger.info(f"Password Settings Action = > {user_id}, {username}, {password_hash} ") selected_user.password = password_hash return selected_user def to_dict(self): return { 'id': self.id, 'uid': self.uid, 'username': self.username, 'password': self.password, 'firstname': self.firstname, 'lastname': self.lastname, 'acc_level': self.acc_level, 'status': self.status, 'added': self.added } def __repr__(self): return f''