from . import LOGGER, Singleton, db, ldapController as ldap, emailController from geruecht.model.user import User from geruecht.exceptions import PermissionDenied from datetime import datetime, timedelta class UserController(metaclass=Singleton): def __init__(self): pass def getWorker(self, date, username=None): if (username): user = self.getUser(username) return [db.getWorker(user, date)] return db.getWorkers(date) def addWorker(self, username, date): user = self.getUser(username) if (not db.getWorker(user, date)): db.setWorker(user, date) def deleteWorker(self, username, date): user = self.getUser(username) db.setWorker(user, date) def lockUser(self, username, locked): user = self.getUser(username) user.updateData({'locked': locked}) db.updateUser(user) return self.getUser(username) def updateConfig(self, username, data): user = self.getUser(username) user.updateData(data) db.updateUser(user) return self.getUser(username) def autoLock(self, user): if user.autoLock: if user.getGeruecht(year=datetime.now().year).getSchulden() <= (-1*user.limit): user.updateData({'locked': True}) emailController.sendMail(user) else: user.updateData({'locked': False}) db.updateUser(user) def addAmount(self, username, amount, year, month, finanzer=False): user = self.getUser(username) if not user.locked or finanzer: user.addAmount(amount, year=year, month=month) creditLists = user.updateGeruecht() for creditList in creditLists: db.updateCreditList(creditList) self.autoLock(user) return user.getGeruecht(year) def addCredit(self, username, credit, year, month): user = self.getUser(username) user.addCredit(credit, year=year, month=month) creditLists = user.updateGeruecht() for creditList in creditLists: db.updateCreditList(creditList) self.autoLock(user) return user.getGeruecht(year) def getAllUsersfromDB(self): users = db.getAllUser() for user in users: self.__updateGeruechte(user) return db.getAllUser() def checkBarUser(self, user): date = datetime.now() startdatetime = date.replace(hour=11, minute=0, microsecond=0) enddatetime = startdatetime + timedelta(days=1) result = False if date >= startdatetime and date < enddatetime: result = db.getWorker(user, startdatetime) return True if result else False def getUser(self, username): user = db.getUser(username) groups = ldap.getGroup(username) user_data = ldap.getUserData(username) user_data['gruppe'] = groups user_data['group'] = groups if user is None: user = User(user_data) db.insertUser(user) else: user.updateData(user_data) db.updateUser(user) user = db.getUser(username) self.__updateGeruechte(user) return user def __updateGeruechte(self, user): user.getGeruecht(datetime.now().year) creditLists = user.updateGeruecht() if user.getGeruecht(datetime.now().year).getSchulden() != 0: for creditList in creditLists: db.updateCreditList(creditList) def sendMail(self, username): if type(username) == User: user = username if type(username) == str: user = db.getUser(username) return emailController.sendMail(user) def sendAllMail(self): retVal = [] users = db.getAllUser() for user in users: retVal.append(self.sendMail(user)) return retVal def loginUser(self, username, password): try: user = self.getUser(username) ldap.login(username, password) return user except PermissionDenied as err: raise err