From beb43dcd12855a076cf405e401e433f86081517e Mon Sep 17 00:00:00 2001 From: Rick Date: Sat, 12 Jan 2019 22:18:26 +0100 Subject: [PATCH] Adding events to the API --- admidio.py | 37 +++++++++++++++++++++++++++++++++---- event.py | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+), 4 deletions(-) create mode 100644 event.py diff --git a/admidio.py b/admidio.py index efc5dd9..f01b994 100644 --- a/admidio.py +++ b/admidio.py @@ -1,7 +1,10 @@ import MySQLdb import member import group +import event from exceptions import MemberNotFoundException +from datetime import datetime +from dateutil.relativedelta import relativedelta class Admidio: @@ -14,15 +17,22 @@ class Admidio: self.members = dict() self.groups = dict() self.events = dict() + self.event_confirmation_id = None sql = "SELECT usf_id,usf_name_intern FROM `adm_user_fields`" self.cursor.execute(sql) self.userfields = dict(self.cursor.fetchall()) - sql = """SELECT usr_id, usr_login_name, usr_password - FROM adm_users WHERE usr_valid = 1""" + # Get the id for event confirmation role. + # So it can exclude them from Groups + sql = """SELECT cat_id + FROM adm_categories + WHERE cat_name_intern = 'CONFIRMATION_OF_PARTICIPATION'""" self.cursor.execute(sql) + self.event_confirmation_id = self.cursor.fetchone()[0] + self.initMembers() self.initGroups() + self.initEvents() def __del__(self): self.db.close() @@ -42,14 +52,33 @@ class Admidio: def initGroups(self): """Initialises all groups in the Admidio installation""" - sql = """SELECT rol_id, rol_name, rol_description + sql = f"""SELECT rol_id, rol_name, rol_description FROM adm_roles - WHERE rol_visible=1 AND rol_valid=1""" + WHERE rol_valid = 1 + AND rol_cat_id != {self.event_confirmation_id}""" self.cursor.execute(sql) for row in self.cursor.fetchall(): self.groups[row[0]] = group.Group(self.db, row[0], row[1], self) + def initEvents(self): + """Initialises all comming events and passed events <3 months""" + + datestring = datetime.now() + relativedelta(months=-6) + datestring = datestring.strftime("%Y-%m-%d %H:%M:%S") + + sql = f"""SELECT dat_id, dat_cat_id, dat_begin, dat_end, + dat_headline, dat_description, + dat_location, dat_country, dat_rol_id + FROM adm_dates + WHERE dat_begin >'{datestring}'""" + self.cursor.execute(sql) + + for row in self.cursor.fetchall(): + self.events[row[0]] = event.Event( + self.db, row[0], row[8], row[4], row[2], row[3], row[5], + row[6], row[7], self) + def getMemberFromID(self, user_id): """ Returns Member object if user_id exists diff --git a/event.py b/event.py new file mode 100644 index 0000000..a424db5 --- /dev/null +++ b/event.py @@ -0,0 +1,40 @@ +from exceptions import MemberNotFoundException + + +class Event(): + def __init__(self, db, event_id, rol_id, name, start_time, end_time, + description, location, country, admidio): + self.__c = 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.admidio = admidio + self.participants = list() + self.leaders = list() + self.number_of_guests = 0 + + sql = ("""SELECT mem_usr_id, mem_leader, mem_count_guests + FROM adm_members""" + f""" WHERE mem_rol_id = {self.rol_id}""") + self.__c.execute(sql) + + for row in self.__c.fetchall(): + try: + self.number_of_guests += row[2] + if row[1] == 1: + self.leaders.append(self.admidio.getMemberFromID(row[0])) + else: + self.participants.append( + self.admidio.getMemberFromID(row[0])) + except MemberNotFoundException: + print( + f"Member with id {row[0]} not found, group id: {self.id}") + + def getAllMembers(self): + """Return leaders and members in group, combined""" + return self.leaders.append(self.members)