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
Пример #2
0
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:
Пример #3
0
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
Пример #5
0
 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
Пример #6
0
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()
Пример #7
0
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()
Пример #8
0
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"})
Пример #9
0
    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, [])
Пример #10
0
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"})
Пример #11
0
    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")
Пример #13
0
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)
Пример #14
0
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
Пример #18
0
    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
Пример #21
0
def item( id ):
    return db().selectOne( 'automata', { 'id': id }, ( 'id', 'name', 'data' ) )
Пример #22
0
def create( name, data ):
    return db().insert( 'automata', { 'name': name, 'data': data } )
Пример #23
0
def create(name, data):
    return db().insert('automata', {'name': name, 'data': data})
Пример #24
0
def item(id):
    return db().selectOne('automata', {'id': id}, ('id', 'name', 'data'))