from .exceptions import MemberNotFoundException import hashlib class Event(): def __init__(self, event_id, rol_id, name, start_time, end_time, description, location, country, cat_id, admidio): self.__c = admidio.db.cursor() self.id = event_id self.rol_id = rol_id self.name = name self.start_time = start_time self.end_time = end_time self.description = description self.location = location self.country = country self.cat_id = cat_id self.admidio = admidio self.participants = list() self.leaders = list() self.number_of_guests = 0 self.event_with_registration = False if self.rol_id: # Admidio only assigns a rol id when you can register for it self.event_with_registration = True sql = f"""SELECT mem_usr_id, mem_leader, mem_count_guests, mem_approved FROM {self.admidio.prefix}_members WHERE mem_rol_id = {self.rol_id} AND mem_end = '9999-12-31'""" self.__c.execute(sql) for row in self.__c.fetchall(): try: self.number_of_guests += row[2] # Distinguish between members that will attend, not # attend, or will maybe attend. if row[1] == 1: self.leaders.append( [row[3], self.admidio.getMemberFromID(row[0])]) else: self.participants.append( [row[3], self.admidio.getMemberFromID(row[0])]) except MemberNotFoundException: print( "Member with id {row[0]} not found, group id:" + f"{self.id}") def __eq__(self, other): if isinstance(other, Event): return self.hash() == other.hash() def hash(self): return hashlib.md5((str(self.rol_id) + self.start_time.strftime("%Y-%m-%d %H:%M:%S") + self.end_time.strftime("%Y-%m-%d %H:%M:%S") + str(self.id) + (''.join(str(y) for x, y in self.participants) or '') + (''.join(str(y) for x, y in self.leaders) or '') + self.name + (self.description or '') + (self.location or '') + str(self.cat_id)).encode('utf-8')).hexdigest() def getAllMembers(self): """Return leaders and members in group, combined""" return self.leaders + self.participants def getAllAttend(self): """Return leaders and members which actually attend""" members = list() for i in (self.leaders + self.participants): if (i[0] == 2): members.append(i) return members def getAllMaybe(self): """Return leaders and members which will maybe attend""" members = list() for i in (self.leaders + self.participants): if (i[0] == 1): members.append(i) return members def getAllNotAttend(self): """Return leaders and members which will not attend""" members = list() for i in (self.leaders + self.participants): if (i[0] == 3): members.append(i) return members def getNumberMembers(self): """Return the total number of members""" return len(self.leaders) + len(self.participants)