def end_session(self, start_time, date, lab_test, diag, medic, pid): import datetime as dt end_time = dt.datetime.now() if not pid: mb.showwarning("Error", "Patient ID is required") return if not diag: mb.showwarning("Error", "You forgot to add the patient diagnostic") return if not medic: ans = mb.askyesno("Check", "Are you sure no medic is needed?") if ans == 'no': return if not lab_test: ans = mb.askyesno("Check", "Are you sure no lab test is needed?") if ans == 'no': return db().getConn().execute( f"insert into private.session (s_date, start_time, end_time, diag, medicine, lab_test, u_id, p_id) " f"values ('{date}', '{start_time}', '{end_time}', '{diag}', '{medic}', '{lab_test}', {self.employee.id}, {pid});") mb.showinfo("Success", "Session ended successfully") pass
def add_qc(): if 'flash' in request.vars: response.flash= request.vars['flash'] form = SQLFORM(db.episode, fields=['name', 'file', 'video_link', 'is_h', 'is_public', 'allow_qcteam']) if form.process().accepted: try: subs = ssa_parser.importSubsFromSSA(request.vars.file.value) except Exception, e: response.flash = "Errors importing the subs (%s)" % e.message db(db.episode.id == form.vars.id).delete() else: try: subsNb=0 for s in subs: if 'Text' in s and len(s['Text'])>0: actor= None if 'Actor' in s: actor= s['Actor'] db.sub.insert(episode=form.vars.id ,start_time= s['Start'] ,end_time= s['End'] ,style= s['Style'] ,text= s['Text'] ,actor= actor) subsNb+=1 db(db.episode.id == form.vars.id).update(subs_nb=subsNb) except Exception, e: response.flash= "Errors inserting the subs in the database (%s)" % e.message else:
def my_qc_list(): start, limit, orderQuery, filterQuery = ExtJS.getExtPaging(request) # return dict(locals()) # if filter != None: # episodes= db((db.episode.created_by == auth.user.id) & (filterQuery)).select(limitby=(start,limit),orderby=orderQuery) # else: totalCount= db(db.episode.created_by == auth.user.id).count() episodes= db(db.episode.created_by == auth.user.id).select(limitby=(start,limit),orderby=orderQuery) return dict(episodes = episodes, totalCount=totalCount, metaData= {"totalProperty": "totalCount"})
def remove_user(self, email): if not email: mb.showwarning('Warning', "Please enter an email.") return if not re.fullmatch(r'.+@.+\.com', email): mb.showwarning('Warning', 'Email must be in email format (eg. [email protected]).') return db().getConn().execute(f"DELETE FROM private.users " f" WHERE email = '{email}';") mb.showinfo('Warning', "User removed successfully") pass
def update(self): db().getConn().execute(f"UPDATE private.users SET " f"email = '{self.email}', " f"id = {self.id}, " f"name = '{self.name}', " f"gender = '{self.gender}', " f"address = '{self.address}', " f"phone = '{self.phone}', " f"age = {self.age}, " f"password = '******', " f"role = {self.role}, " f"image = '{self.image}' " f"where email = '{self.email}' " f"and role = {self.role};") return True
def public_qc_list(): if 'flash' in request.vars: response.flash= request.vars['flash'] publicEpisodesNb= db(db.episode.is_public == True).count() if not publicEpisodesNb>0: response.flash= "There is no public QC yet... Login and upload one!" return locals()
def qc_list(): if 'flash' in request.vars: response.flash= request.vars['flash'] if not db(db.episode.created_by == auth.user.id).count()>0: message= "You do not have any QC. Upload a QC first ;)" redirect(URL('default','add_qc?flash='+message)) else: return locals()
def subs_list(): id=None key=None subs = None totalCount=0 start, limit, orderQuery, filterQuery = ExtJS.getExtPaging(request, limit=50) if orderQuery is not None: orderQuery = orderQuery.replace("comments_nb","sub.comments_nb") orderQuery = orderQuery.replace("lastcomment_date","sub.lastcomment_date") if len(request.args)>=2: id = request.args[0] key = request.args[1] totalCount= db((db.sub.episode == id) & (db.episode.key==key)).count() subs = db((db.sub.episode == id) & (db.episode.key==key)).select(db.sub.ALL,limitby=(start,limit),orderby=orderQuery) return dict(subs = subs, totalCount=totalCount, metaData= {"totalProperty": "totalCount"})
def __init__(self, id): user_data = tuple(db().getConn().execute( f"select name, age, gender, phone, address from private.patiant " f"where id = {id};")) super().__init__(name=user_data[0][0]) self.id = id self.age = user_data[0][1] self.gender = user_data[0][2] self.phone = user_data[0][3] self.address = user_data[0][4] user_data = list(db().getConn().execute( f"select allergie from private.allergies " f"where p_id = {id};")) self.__allergiesList = ft.reduce(operator.iconcat, user_data, [])
def get_comments(): totalCount= 0 comments= None if len(request.args)>=1: subId= request.args[0] comments= db((db.comment.sub == subId) & (db.auth_user.id == db.comment.user)).select(db.comment.ALL, db.auth_user.username) totalCount= len(comments) return dict(comments = comments, totalCount=totalCount, metaData= {"totalProperty": "totalCount"})
def update(self): db().getConn().execute(f"UPDATE private.patiant SET " f"id = {self.id}, " f"name = '{self.name}', " f"gender = '{self.gender}', " f"address = '{self.address}', " f"phone = '{self.phone}', " f"age = {self.age} " f"where id = {self.id} ") for item in self.__allergiesList: try: db().getConn().execute( f"Insert into private.allergies (p_id, allergie) " f"values ({self.id}, '{item}')") except IntegrityError: pass return True
def add_user(self, lstData): email = lstData[0].get() name = lstData[1].get() password = lstData[2].get() phone = lstData[3].get() address = lstData[4].get() gender = lstData[5].get() age = lstData[6].get() image = lstData[7] if lstData[7] is not None and lstData[7] != '' else '../static/person.jpg' role = lstData[8].current() if not email: mb.showwarning('Warning', 'Email is required.') return if not re.fullmatch(r'.+@.+\.com', email): mb.showwarning('Warning', 'Email must be in email format (eg. [email protected]).') return if not name: mb.showwarning('Warning', "'Name' is required") return if not password: mb.showwarning('Warning', "'Password' is required") return if phone and not re.fullmatch(r'[0-9]+', phone): mb.showwarning('Warning', "'Phone' must be all numbers.") return # answer = sd.askstring("Doctor major", f"What is {name} major?", parent=self.frm_docs) # if answer is None and answer == '': # mb.showwarning("'Major' is required") # return db().getConn().execute( f"insert into private.users (email, name, password, age, role, gender, phone, address, image)" f" values ('{email}', '{name}', '{password}', {age}, {role}, '{gender}', '{phone}', '{address}', '{image}');") mb.showinfo('Warning', "User Added successfully")
def post_comment(): success=False msg="Unknown Error" try: content = request.vars['comment_content'] sub_id = request.vars['sub_id'] episode_id = request.vars['episode_id'] except: success= False msg= "Could not read the content or the IDs" else: # insert the comment man! if content is not None and len(content)>0: db.comment.insert(sub=sub_id, user=auth.user.id, content=content) now = datetime.now() db(db.sub.id==sub_id).update(comments_nb=db.sub.comments_nb+1,lastcomment_date=now) db(db.episode.id==episode_id).update(comments_nb=db.episode.comments_nb+1,lastcomment_date=now) success= True msg= "Comment inserted!" else: msg="Please enter a valid comment" success=False return dict(msg=msg, success=success)
def show_qc(): id=None key=None episode = None #start, limit, orderQuery, filterQuery = ExtJS.getExtPaging(request, limit=50) if len(request.args)>=2: id = request.args[0] key = request.args[1] episode= db((db.episode.id==id)&(db.episode.key==key)).select().first() #subs = db((db.sub.episode == id) & (db.episode.key==key)).select(limitby=(start,limit)) if episode: return locals() else: message= "Invalid QC" redirect(URL('default','qc_list?flash='+message))
def add_state(self, listBox, pid): if not pid.get(): mb.showwarning("Error", "Patient ID is required") return results = list(db().getConn().execute(f"select arrival_time, heart_rate, tempreture " f"from private.user_to_pat " f"where p_id = {pid.get()} and n_date = date(now());")) if not results: mb.showwarning("Error", f"No Data found for patient {pid} in the system") return listBox.insert("", "end", values=(results[0][0], results[0][1], results[0][2])) print(results) pass
def init_frm_doc_report(self): doctors_list = list(db().getConn().execute("Select email from private.users where role = 1;")) doctors_list = ft.reduce(operator.iconcat, doctors_list, []) doctor = ttk.Combobox(self.frm_doc_report, state="readonly", values=["Select Doctor"] + doctors_list) doctor.set('Select Doctor') doctor.place(relx=.075, rely=.1 + 11.5 / 16, anchor='nw', height=30, width=200) tk.Label(self.frm_doc_report, text='Start Date', anchor='w', width=10, relief='groove') \ .place(relx=.325, rely=.1 + 11.5 / 16, height=30) start_date = DateEntry(self.frm_doc_report, width=15, background='darkblue', year=2019, month=6, day=17, foreground='white', borderwidth=2, state='readonly') start_date.place(relx=.415, rely=.1 + 11.5 / 16, height=30) tk.Label(self.frm_doc_report, text='End Date', anchor='w', width=10, relief='groove') \ .place(relx=.325, rely=.1 + 12.5 / 16, height=30) end_date = DateEntry(self.frm_doc_report, width=15, background='darkblue', foreground='white', borderwidth=2, state='readonly') end_date.place(relx=.415, rely=.1 + 12.5 / 16, height=30) cols = ('Email', 'Name', 'Number of Visits', 'Date') listBox = ttk.Treeview(self.frm_doc_report, columns=cols, show='headings', selectmode='browse') # set column headings for col in cols: listBox.heading(col, text=col) listBox.column(col, minwidth=100, width=205, anchor=tk.CENTER) vsb = ttk.Scrollbar(self.frm_doc_report, orient="vertical", command=listBox.yview) vsb.place(relx=.925, rely=.05, height=500) listBox.configure(yscrollcommand=vsb.set) listBox.place(relx=.05, rely=.05, height=500, width=820) tk.Button(self.frm_doc_report, text='Generate', command=lambda: self.generate_doc_report(doctor.get(), start_date.get_date(), end_date.get_date(), listBox)) \ .place(relx=.6, rely=.1 + 11.3 / 16, anchor='nw', width=180, height=40) tk.Button(self.frm_doc_report, text='Clear', command=lambda: self.clear_table(listBox)) \ .place(relx=.6, rely=.1 + 12.3 / 16, anchor='nw', width=180, height=40)
def check_history(self, pid, listBox): if not pid: mb.showwarning("Error", "Patient ID is required") return results = list(db().getConn().execute(f"select s_date, diag, medicine, lab_test from private.session " f"where u_id = {self.employee.id} and p_id = {pid} order by s_date;")) if not results: mb.showwarning("Error", f"No Data found for patient {pid} in the system") return for idx, item in enumerate(results): listBox.insert("", "end", values=(idx, item[0], item[1], item[2], item[3])) pass pass
def __init__(self, email, name, password, role=0, image='../static/img/person.jpg'): super().__init__(name=name) self.__email = email self.__password = password self.__role = role self.__image = image user_data = tuple(db().getConn().execute( f"select gender, age, phone, address, id from private.users " f"where email = '{email}' and role = {self.role};")) self.gender = user_data[0][0] self.age = user_data[0][1] self.phone = user_data[0][2] self.address = user_data[0][3] self.id = user_data[0][4]
def showWaitingTimes(self, listBox, avg_result, date): result = db().getConn().execute( f"select up.p_id, p.name , up.arrival_time, s.start_time, (s.start_time - up.arrival_time) as wait_time " f"from private.user_to_pat as up " f"inner join private.session as s " f"on up.p_id = s.p_id and date(up.arrival_time) = date(s.start_time) " f"inner join private.patiant as p " f"on p.id = up.p_id " f"where date(up.arrival_time) = '{date}';") result = tuple(result) if not result: mb.showwarning('Warning', f"No data found for the specified dates.") return avg_time = result[0][4] for item in result: avg_time += item[4] listBox.insert("", "end", values=(item[0], item[1], item[2].time(), item[3].time(), item[4])) avg_time -= result[0][4] avg_result["text"] = str(avg_time)
def generate_doc_report(self, doctor, start_date, end_date, listBox): if doctor == "Select Doctor": mb.showwarning('Warning', "Please select a valid doctor.") return if start_date > end_date: mb.showwarning('Warning', "'Start Date' must be before or same as 'End Date'") return result = db().getConn().execute(f"select max(u.email), max(u.name), max(u.id), count(s.p_id), s.s_date " f"from private.users as u " f"Inner Join private.session as s " f"on u.id = s.u_id " f"where s.s_date between '{start_date}' and '{end_date}' " f"group by s.s_date order by s.s_date;") result = tuple(result) if not result: mb.showwarning('Warning', f"No data found for {doctor} in the specified dates.") return for item in result: listBox.insert("", "end", values=(item[0], item[1], item[3], item[4])) pass
def item( id ): return db().selectOne( 'automata', { 'id': id }, ( 'id', 'name', 'data' ) )
def create( name, data ): return db().insert( 'automata', { 'name': name, 'data': data } )
def create(name, data): return db().insert('automata', {'name': name, 'data': data})
def item(id): return db().selectOne('automata', {'id': id}, ('id', 'name', 'data'))