175 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			175 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Python
		
	
	
	
| 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):
 | |
|         """ 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
 | |
|         """
 | |
|         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):
 | |
|         """ 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
 | |
|         """
 | |
|         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):
 | |
|         """ 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)
 | |
|         """
 | |
|         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):
 | |
|         """ 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)
 | |
|         """
 | |
|         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
 | |
| 
 | |
|             This function iterate through the geruechte, which sorted by year and update the last_schulden of the geruecht.
 | |
|         """
 | |
|         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):
 | |
|         """ 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
 | |
| 
 | |
|     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
 |