from geruecht import db from geruecht import bcrypt from geruecht.model.creditList import CreditList from datetime import datetime class User(db.Model): """ Database Object for User Table for all safed User Attributes: id: Id in Database as Primary Key. userID: ID for the User maybe to Link? username: Username of the User to Login firstname: Firstname of the User Lastname: Lastname of the User group: Which group is the User? moneymaster, gastro, user or bar? password: salted hashed password for the User. """ id = db.Column(db.Integer, primary_key=True) userID = db.Column(db.String, nullable=False, unique=True) username = db.Column(db.String, nullable=False, unique=True) firstname = db.Column(db.String, nullable=False) lastname = db.Column(db.String, nullable=False) group = db.Column(db.String, nullable=False) password = db.Column(db.String, nullable=False) geruechte = db.relationship('CreditList', backref='user', lazy=True) def createGeruecht(self, amount=0, year=datetime.now().year): print('create geruecht for user {} in year {}'.format(self.userID, year)) credit = CreditList(user_id=self.id, last_schulden=amount, year=year) db.session.add(credit) db.session.commit() credit = CreditList.query.filter_by(year=year, user_id=self.id).first() print('reated geruecht {}'.format(credit)) return credit def getGeruecht(self, year=datetime.now().year): for geruecht in self.geruechte: if geruecht.year == year: print("find geruecht {} for user {}".format(geruecht, self.id)) return geruecht print("no geruecht found for user {}. Will create one".format(self.id)) geruecht = self.createGeruecht(year=year) self.updateGeruecht() return geruecht def addAmount(self, amount, year=datetime.now().year, month=datetime.now().month): geruecht = self.getGeruecht(year=year) retVal = geruecht.addAmount(amount, month=month) db.session.add(geruecht) db.session.commit() self.updateGeruecht() return retVal def addCredit(self, credit, year=datetime.now().year, month=datetime.now().month): geruecht = self.getGeruecht(year=year) retVal = geruecht.addCredit(credit, month=month) db.session.add(geruecht) db.session.commit() self.updateGeruecht() return retVal def updateGeruecht(self): """ Update list of geruechte """ self.geruechte.sort(key=self.sortYear) for index, geruecht in enumerate(self.geruechte): if index == 0 or index == len(self.geruechte) - 1: geruecht.last_schulden = 0 if index != 0: geruecht.last_schulden = (self.geruechte[index - 1].getSchulden() * -1) db.session.commit() def sortYear(self, geruecht): return geruecht.year def toJSON(self): """ Create Dic to dump in JSON Returns: A Dic with static Attributes. """ dic = { "userId": self.userID, "username": self.username, "firstname": self.firstname, "lastname": self.lastname, "group": self.group, } return dic def login(self, password): """ Login for the User Only check the given Password: Returns: A Bool. True if the password is correct and False if it isn't. """ return True if bcrypt.check_password_hash(self.password, password) else False