flaschengeist/geruecht/model/user.py

185 lines
6.1 KiB
Python
Raw Normal View History

from geruecht import db, bcrypt, getLogger
2019-04-23 22:08:25 +00:00
from geruecht.model.creditList import CreditList
from datetime import datetime
2019-04-11 21:56:55 +00:00
LOGGER = getLogger(__name__)
2019-04-11 21:56:55 +00:00
class User(db.Model):
2019-04-17 12:46:46 +00:00
""" Database Object for User
2019-04-17 12:46:46 +00:00
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.
"""
2019-04-11 21:56:55 +00:00
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):
2019-05-02 16:50:59 +00:00
""" Create Geruecht
This function create a geruecht for the user for an year.
By default is amount zero and year the actual year.
Args:
amount: is the last_schulden of the geruecht
year: is the year of the geruecht
Returns:
the created geruecht
"""
LOGGER.debug("Create Geruecht for user {} in year {}".format(self, year))
credit = CreditList(user_id=self.id, last_schulden=amount, year=year)
2019-04-23 22:08:25 +00:00
db.session.add(credit)
db.session.commit()
credit = CreditList.query.filter_by(year=year, user_id=self.id).first()
LOGGER.debug("Created Geruecht {}".format(credit))
2019-04-23 22:08:25 +00:00
return credit
def getGeruecht(self, year=datetime.now().year):
2019-05-02 16:50:59 +00:00
""" Get Geruecht
This function returns the geruecht of an year.
By default is the year the actual year.
Args:
year: the year of the geruecht
Returns:
the geruecht of the year
"""
LOGGER.debug("Iterate through Geruechte of User {}".format(self))
for geruecht in self.geruechte:
LOGGER.debug("Check if Geruecht {} has year {}".format(geruecht, year))
if geruecht.year == year:
LOGGER.debug("Find Geruecht {} for User {}".format(geruecht, self))
return geruecht
LOGGER.debug("No Geruecht found for User {}. Will create one".format(self))
geruecht = self.createGeruecht(year=year)
self.updateGeruecht()
return geruecht
def addAmount(self, amount, year=datetime.now().year, month=datetime.now().month):
2019-05-02 16:50:59 +00:00
""" Add Amount
This function add an amount to a geruecht with an spezified year and month to the user.
By default the year is the actual year.
By default the month is the actual month.
Args:
year: year of the geruecht
month: month for the amount
Returns:
double (credit, amount)
"""
LOGGER.debug("Add amount to User {} in year {} and month {}".format(self, year, 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):
2019-05-02 16:50:59 +00:00
""" Add Credit
This function add an credit to a geruecht with an spezified year and month to the user.
By default the year is the actual year.
By default the month is the actual month.
Args:
year: year of the geruecht
month: month for the amount
Returns:
double (credit, amount)
"""
LOGGER.debug("Add credit to User {} in year {} and month {}".format(self, year, 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
2019-05-02 16:50:59 +00:00
This function iterate through the geruechte, which sorted by year and update the last_schulden of the geruecht.
"""
LOGGER.debug("Update all 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):
2019-05-02 16:50:59 +00:00
""" Sort Year
This function is only an helperfunction to sort the list of geruechte by years.
It only returns the year of the geruecht.
Args:
geruecht: geruecht which year you want
Returns:
int year of the geruecht
"""
return geruecht.year
2019-04-11 21:56:55 +00:00
def toJSON(self):
2019-04-17 12:46:46 +00:00
""" Create Dic to dump in JSON
2019-04-17 12:46:46 +00:00
Returns:
A Dic with static Attributes.
"""
2019-04-11 21:56:55 +00:00
dic = {
"userId": self.userID,
2019-04-11 21:56:55 +00:00
"username": self.username,
"firstname": self.firstname,
"lastname": self.lastname,
"group": self.group,
}
return dic
def login(self, password):
2019-04-17 12:46:46 +00:00
""" Login for the User
Only check the given Password:
Returns:
A Bool. True if the password is correct and False if it isn't.
"""
LOGGER.debug("Login User {}".format(self))
2019-04-11 21:56:55 +00:00
return True if bcrypt.check_password_hash(self.password, password) else False
def __repr__(self):
return "User({}, {}, {})".format(self.userID, self.username, self.group)