Esempio n. 1
0
def jqmobile_station_summary(request,clinic_id):
    
     #clinic = get_object_or_404(Clinic,id = clinic_id)
     stations = []
     clinic = Clinic.objects.get(id = clinic_id)
    
     dtStart, dtEnd = get_request_period(request,clinic)
     eshs = EventSetHeader.objects.filter(clinic = clinic).exclude(dateTime__gte=dtEnd).filter(dateTime__gte=dtStart)
     
     response = get_aggr_patients(eshs)
     
     event_map = get_clinic_event_map(clinic_id)
     
     for event in event_map:
         
         e=Event.objects.get(name = event[1])
         
         if response.has_key(event[1]):

             count,avg_time = response.get(event[1])
             stations.append((e.id,event[1],count,avg_time))
             
         else:
             
             stations.append((e.id,event[1],0,0))
     
     datas = {
               'clinic_event_map': event_map
              
              }
     return render_to_response('jqmobile/stationsummary.html',{'stations':stations})
Esempio n. 2
0
def get_current_patient_event(patient_event_log):
    
    '''
        Input: Events of an active patient..
                if event is set, then only patients under that event will be return
                  
        return value: {'event_name':'waiting_time of last event happened'}
    '''
    
    clinic = patient_event_log[0].header.clinic
    event_map = get_clinic_event_map(clinic.id)
    
    #Remove all other events from pevlog which are not part of the event_map of a clinic.
    patient_event_log = [q for q in patient_event_log if [a for a in event_map if a[1] == q.event.name ] ]
        
    
    #List of active event names.
    event_map_names = [event[1] for event in event_map]
    
    total_events = len(patient_event_log)
    current_event = patient_event_log[total_events - 1]
    current_event_name = current_event.event.name
    
        
    #Get the current event order number from the event_map function.
    current_event_num = [event[0] for event in event_map if event[1] == current_event_name][0]
    
    current_event_waiting_time = datetime.datetime.now() - current_event.dateTime
    
    response = {'event_name': current_event_name,
                'waiting_time': current_event_waiting_time,
                'event_num': current_event_num  }
    
    return response
Esempio n. 3
0
def alert_form_edit(request, conf_id):
    '''
        Custom form for the Adidtion and Modification of the Alert configuration.
    '''

    alert_conf = get_object_or_404(AlertConfiguration, id=conf_id)

    clinic_list = Clinic.objects.filter(location=alert_conf.clinic.location)
    location_list = Location.objects.all()

    event_map = get_clinic_event_map(alert_conf.clinic.id)
    alert_events = alert_conf.event_list.split(",")

    event_view = []
    for event in event_map:
        if event[1] in alert_events:
            event_view.append((event[1], 1))
        else:
            event_view.append((event[1], 0))

    response = {
        'alert_conf': alert_conf,
        'clinic_list': clinic_list,
        'location_list': location_list,
        'event_view': event_view,
        'STATIC_URL': settings.STATIC_URL
    }

    return render_to_response('admin/signin/alert_form.html', response,
                              RequestContext(request, {}))
Esempio n. 4
0
def ajax_get_eventmap(request):
    '''
        returns Event map order of given clinic.
    '''
    clinic_id = request.REQUEST.get('clinic_id', None)

    event_map = [list(a)[1] for a in get_clinic_event_map(clinic_id)]

    json_data = simplejson.dumps(event_map)

    return HttpResponse(json_data, mimetype='application/json')
Esempio n. 5
0
def export_pdf(request):

    pdf_type = request.REQUEST.get("type", None)

    clinic = get_object_or_404(Clinic,
                               id=request.REQUEST.get("clinicID", None))

    dtStart, dtEnd = get_request_period(request, clinic)
    '''
    try:
        date = time.strptime(request.REQUEST.get('date',''),'%Y-%m-%d')
        date = datetime.date.fromtimestamp(time.mktime(date))
    except Exception, e:
        raise
        date = datetime.date.today()
           
    dtStart = datetime.datetime(date.year,date.month,date.day,0,0,0)
    dtEnd = dtStart + datetime.timedelta(days=1)file (6
    '''

    context = {'date': dtStart}

    if pdf_type == "frontdesk":
        # patients = []
        dataset = EventSetHeader.objects.filter(dateTime__gte=dtStart,
                                                dateTime__lt=dtEnd)
        event_map = get_clinic_event_map(clinic.id)
        if request.REQUEST.has_key("clinicID"):
            #clinic = get_object_or_404(Clinic, id=request.REQUEST['clinicID'])
            context['clinic'] = clinic
            dataset = dataset.filter(clinic=clinic)
        '''           
        for h in dataset:
            x = {}
            x['patient'] = h.patient
            x['file (6events'] = {}
            for ev in PatientEventLog.objects.filter(header = h):
                x['events'][ev.event.name] = ev.dateTime

            x['payment'] = Payment.objects.filter(header = h).aggregate(sum=Sum('amount'))['sum']
            # for i in xrange(100):
            patients.append(x)
            '''
        c = len(event_map)
        clinic = get_object_or_404(Clinic.objects,
                                   id=request.REQUEST.get("clinicID", None))
        patients = []
        #patient = {}
        #events = []
        for esh in dataset:
            patient_name = get_patient_full_name(
                esh
            )  #esh.patient.lName + "," +  esh.patient.fName + "," +  str(esh.patient.dob)
            patient_event_logs = PatientEventLog.objects.filter(header=esh)
            events = []
            #for event in event_map:
            #event_time = get_event_time(patient_event_logs,event[1])
            event_time_first = get_event_time(patient_event_logs,
                                              event_map[0][1])
            event_time_last = get_event_time(patient_event_logs,
                                             event_map[c - 1][1])
            events.append(event_time_first)
            events.append(event_time_last)
            payment = Payment.objects.filter(header=esh).aggregate(
                sum=Sum('amount'))['sum']
            patient = {
                "patient_name": patient_name,
                "header": esh.id,
                "events": events
            }
            patients.append(patient)

        #context['events'] = patients
        context['patients'] = patients
        #context['clinic_event_map'] = event_map
        context['clinic_event_map_first'] = event_map[0][1]
        context['clinic_event_map_last'] = event_map[c - 1][1]
        template = "pdf/frontdesk.htm"
        # raise Exception(pat'''ients)

    elif pdf_type == "reports":

        from collections import defaultdict
        clinic = get_object_or_404(Clinic.objects,
                                   id=request.REQUEST.get("clinicID", None))

        def _diff(dict, a_key, b_key):
            dfl = datetime.datetime(year=datetime.MINYEAR, month=1, day=1)
            a = dict.get(a_key, dfl)
            b = dict.get(b_key, dfl)
            # raise Exception(a,b)
            td = (b - a)
            td = (td.microseconds +
                  (td.seconds + td.days * 24 * 3600) * 10**6) / 10**6
            if (td < 0):
                return None
            else:
                return td / 60

        '''
        patients = []
        dataset = EventSetHeader.objects.filter(dateTime__gte=dtStart,dateTime__lt=dtEnd)
        if request.REQUEST.has_key("clinicID"):
            #clinic = get_object_or_404(Clinic, id=request.REQUEST['clinicID'])
            context['clinic'] = clinic
            dataset = dataset.filter(clinic = clinic)
        for h in dataset:
            x = {}
            x['patient'] = h.patient
            x['events'] = {}
            for ev in PatientEventLog.objects.filter(header = h):
                x['events'][ev.event.name] = ev.dateTime
            x['events']=defaultdict(str,x['events'])
            patients.append(x)
        context['events'] = patients
       '''
        if request.REQUEST.has_key("clinicID"):
            clinic = get_object_or_404(Clinic, id=request.REQUEST['clinicID'])
            eshs = EventSetHeader.objects.filter(clinic=clinic).exclude(
                dateTime__gte=dtEnd).filter(dateTime__gte=dtStart)

        event_map = get_clinic_event_map(clinic.id)
        default_clinic_event_map = []
        for i in range(len(event_map)):
            '''
             creating special header names for report templates.
           '''
            if (i + 1) < len(event_map):
                default_clinic_event_map.append(event_map[i][1] + ' To ' +
                                                event_map[i + 1][1])
            else:
                default_clinic_event_map.append(event_map[i][1])

        context['default_clinic_event_map'] = default_clinic_event_map
        dtStart, dtEnd = get_request_period(request, clinic)
        eshs = EventSetHeader.objects.filter(clinic=clinic).exclude(
            dateTime__gte=dtEnd).filter(dateTime__gte=dtStart)
        patients = []
        #patient = {}
        events = []
        pel_temp = {}
        for esh in eshs:
            pels = PatientEventLog.objects.filter(header=esh)
            patient_name = get_patient_full_name(
                esh
            )  #esh.patient.lName + "," +  esh.patient.fName + "," +  str(esh.patient.dob)
            for pel in pels:
                pel_temp[pel.event.name] = pel.dateTime
            for i in range(len(event_map)):
                '''
                Get time interval between events. The order of the event name is passed in "default_clinic_event_map", it hold the ordered events,
                signingTregistration,..etc..
                
                So the events are already ordered, so we take the event_times according to that order in a list. 
                clinic = get_object_or_404(Clinic.objects, id=request.REQUEST.get("clinicID",None))
                '''
                if (i + 1) < len(event_map):
                    if event_map[i][1] in pel_temp and event_map[
                            i + 1][1] in pel_temp:
                        events.append(":".join(
                            str(pel_temp[event_map[i + 1][1]] -
                                pel_temp[event_map[i][1]]).split(":")[:2]))
                    else:
                        events.append(False)
                else:
                    if event_map[i][1] in pel_temp:
                        events.append(":".join(
                            str(datetime.datetime.now() -
                                pel_temp[event_map[i][1]]).split(":")[:2]))
                    else:
                        events.append(False)
            patient = {
                "patient_name": patient_name,
                "header": esh.id,
                "events": events
            }
            if not 'delete' in pel_temp:
                '''
               If "delete" entry were present, we just discard that user from frontdesk.
              '''
                patients.append(patient)
            pel_temp = {}
            events = []
        context['patients'] = patients
        template = "pdf/reports.htm"

    elif pdf_type == 'payments':
        if not request.REQUEST.has_key("clinicID"):
            raise Http404
        clinic_id = request.REQUEST['clinicID']
        #clinic = get_object_or_404(Clinic, id=clinic_id)

        eshs = EventSetHeader.objects.filter(clinic=clinic).exclude(
            dateTime__gte=dtEnd).filter(
                dateTime__gte=dtStart).order_by("dateTime")
        counts = eshs.count()
        total = {}
        total['cash'] = reduce(lambda a, b: a + b.get_cash(), eshs, 0.0)
        total['cc'] = reduce(lambda a, b: a + b.get_cc(), eshs, 0.0)
        total['total'] = total['cash'] + total['cc']
        total['positivetotal'] = reduce(lambda a, b: a + b.get_positivetotal(),
                                        eshs, 0)
        context['total'] = total
        context['clinic'] = clinic
        context['events'] = eshs
        context['counts'] = counts

        negativeevents = []
        for esh in eshs:
            pay = Payment.objects.filter(header=esh)
            for payment in pay:
                if payment.amount < 0:
                    negativeevents.append(esh)
                    break
        context['negativeevents'] = negativeevents
        negativetotal = {}
        negativetotal['cash'] = reduce(lambda a, b: a + b.get_negcash(),
                                       negativeevents, 0)
        negativetotal['cc'] = reduce(lambda a, b: a + b.get_negcc(),
                                     negativeevents, 0)
        negativetotal[
            'negativetotal'] = negativetotal['cash'] + negativetotal['cc']
        context['negativetotal'] = negativetotal
        context['nettotal'] = total['positivetotal'] + negativetotal[
            'negativetotal']
        template = "pdf/payments.htm"
    else:
        raise Http404()

    tpl = loader.get_template(template)
    pdf_source = tpl.render(Context(context))
    response = HttpResponse(pdf_source)
    response.pdf = True
    return response
Esempio n. 6
0
def reports(request):
    ansDict = updateDict(request)
    ansDict['menu'] = 'reports'
    ansDict['left_menu'] = Clinic.objects.all()

    if not request.REQUEST.has_key("clinicID"):
        #ansDict['work_time'] = get_current_worktime()
        ansDict['clinics'] = get_current_clinics()
        return direct_to_template(request, 'reports-base.html', ansDict)

    clinic = get_object_or_404(Clinic.objects,
                               id=request.REQUEST.get("clinicID", None))

    ansDict["clinic"] = clinic

    #Added variables required for the comet session at report page.
    channel_name = 'frontdesk' + str(clinic.id)
    comet = {
        "SESSION_COOKIE_NAME": settings.SESSION_COOKIE_NAME,
        "HOST": settings.INTERFACE,
        "CHANNEL_NAME": channel_name,
        "STOMP_PORT": settings.STOMP_PORT,
        "USER": request.user
    }
    ansDict.update(comet)

    #Get Event map of this clininc. event_map = [(1,signin),(2,registration),...]
    #For User specific mode its better.
    event_map = get_clinic_event_map(clinic.id)
    ansDict['user_clinic_event_map'] = event_map

    #Get user specific event_map, signinTregistration or,,, like that format.

    default_clinic_event_map = []

    for i in range(len(event_map)):
        '''
         creating special header names for report templates.
        '''
        if (i + 1) < len(event_map):
            default_clinic_event_map.append(event_map[i][1] + ' To ' +
                                            event_map[i + 1][1])
        else:
            default_clinic_event_map.append(event_map[i][1])

    ansDict['default_clinic_event_map'] = default_clinic_event_map

    #Featch the initial Report from the serverclinic = get_object_or_404(Clinic.objects, id=request.REQUEST.get("clinicID",None)) itself rather than go for axaj method.
    dtStart, dtEnd = get_request_period(request, clinic)
    eshs = EventSetHeader.objects.filter(clinic=clinic).exclude(
        dateTime__gte=dtEnd).filter(dateTime__gte=dtStart)

    patients = []
    patient = {}
    events = []
    pel_temp = {}

    for esh in eshs:

        pels = PatientEventLog.objects.filter(header=esh)

        patient_name = get_patient_full_name(
            esh
        )  #esh.patient.lName + "," +  esh.patient.fName + "," +  str(esh.patient.dob)

        for pel in pels:
            pel_temp[pel.event.name] = pel.dateTime

        for i in range(len(event_map)):
            '''
                Get time interval between events. The order of the event name is passed in "default_clinic_event_map", it hold the ordered events,
                signingTregistration,..etc..
                
                So the events are already ordered, so we take the event_times according to that order in a list. 
            clinic = get_object_or_404(Clinic.objects, id=request.REQUEST.get("clinicID",None))
            '''
            if (i + 1) < len(event_map):
                if event_map[i][1] in pel_temp and event_map[i +
                                                             1][1] in pel_temp:
                    events.append(":".join(
                        str(pel_temp[event_map[i + 1][1]] -
                            pel_temp[event_map[i][1]]).split(":")[:2]))
                else:
                    events.append(False)
            else:
                if event_map[i][1] in pel_temp:
                    events.append(":".join(
                        str(datetime.datetime.now() -
                            pel_temp[event_map[i][1]]).split(":")[:2]))
                else:
                    events.append(False)
        '''pel_temp = {}
        events = []
        if 'signin' in pel_temp and 'registration' in pel_temp:clinic = get_object_or_404(Clinic.objects, id=request.REQUEST.get("clinicID",None))
            events['signinTregistration'] = ":".join(str(pel_temp['registration'] - pel_temp['signin']).split(":")[:2])
        
        if 'registration' in pel_temp and 'triage' in pel_temp:
            events['registrationTtriage'] = ":".join(str(pel_temp['triage'] - pel_temp['registration']).split(":")[:2])
        
        if 'triage' in pel_temp and 'provider' in pel_temp:
            events['triageTprovider'] = ":".join(str(pel_temp['provider'] - pel_temp['triage']).split(":")[:2])
        
        if 'provider' in pel_temp and 'checkout' in pel_temp:
            events['providerTcheckout'] = ":".join(str(pel_temp['checkout'] - pel_temp['provider']).split(":")[:2])
        
        if 'appointment' in pel_temp:
            events['appointment'] = ":".join(str(datetime.datetime.now() - pel_temp['appointment'] ).split(":")[:2])
        '''

        patient = {
            "patient_name": patient_name,
            "header": esh.id,
            "events": events
        }

        if not 'delete' in pel_temp:
            '''
            If "delete" entry were present, we just discard that user from frontdesk.
            '''
            patients.append(patient)

        #Clear old values.
        pel_temp = {}
        events = []

    patients.reverse()
    ansDict['patients'] = patients

    users = User.objects.all()
    ansDict['users'] = users

    return direct_to_template(request, 'reports.html', ansDict)
Esempio n. 7
0
def frontdesk(request):
    '''
        List the Patients under a Clinic.
    '''
    ansDict = updateDict(request)

    ansDict['menu'] = 'frontdesk'
    ansDict['left_menu'] = Clinic.objects.all()
    #if request.REQUEST.has_key("date"):
    #dt = datetime.datetime.strptime(request.REQUEST['date'],"%Y-%m-%d")

    if not request.REQUEST.has_key("clinicID"):
        #ansDict['work_time'] = get_current_worktime()
        ansDict['clinics'] = get_current_clinics()
        return direct_to_template(request, 'frontDesk-base.html', ansDict)

    clinic = get_object_or_404(Clinic.objects,
                               id=request.REQUEST.get("clinicID", None))

    #Get all clinics under this clinic location.
    all_clinics = Clinic.objects.filter(location=clinic.location.id)

    ansDict["all_clinics"] = all_clinics

    ansDict["clinic"] = clinic

    ansDict["location"] = clinic.location

    ansDict['interrupts'] = Interrupt.objects.all()

    #Get Clinic Event Mapdefault_clinic_event_map = []

    event_map = get_clinic_event_map(clinic.id)
    #if not event_map:
    #    '''
    #        No map information in the table. Take default map format.
    #    '''
    #    event_map = [(1,'signin'),(2,'registration'),(3,'triage'),(4,'provider'),(5,'checkout'),(6,'appointment')]

    ansDict['clinic_event_map'] = event_map

    #Get Details to Presents Patients details.
    clinicID = request.REQUEST["clinicID"]
    dtStart, dtEnd = get_request_period(request, clinic)
    eshs = EventSetHeader.objects.filter(clinic=clinic).exclude(
        dateTime__gte=dtEnd).filter(dateTime__gte=dtStart)

    patients = []
    patient = {}
    events = []

    #Get this delete event objects to check whether this patient have delete event.
    delete = Event.objects.get(name='delete')

    #Get details of each patients with their current status in specified clinic.
    for esh in eshs:

        patient_name = get_patient_full_name(
            esh
        )  #esh.patient.lName + "," +  esh.patient.fName + "," +  str(esh.patient.dob)

        patient_event_logs = PatientEventLog.objects.filter(header=esh)

        #Will have value when this use is been deleted : BUG Fixed(6-May-2010)
        delete_event = patient_event_logs.filter(event=delete)

        #for pevlog in patient_event_logs:
        #    events[pevlog.event.name] = pevlog.dateTime.strftime("%H:%M") #str(pevlog.dateTime.hour) + ":" + str(pevlog.dateTime.minute)

        #Here we creating events in the Array format with index gives the order, to match the order and genearlized event management.
        '''
         events = [('22:22','event_name'),...]
         
         Due to the clinic generalization, we may have different event order.So we taking genearl methods to 
         get correct event order for a clinic.
        '''
        events = []

        #To check deleted users.
        delete_flag = False

        for event in event_map:
            event_time = get_event_time(patient_event_logs, event[1])
            events.append((event_time, event[1]))
            if delete_event:
                delete_flag = True

        patient = {
            "patient_name": patient_name,
            "header": esh.id,
            "events": events
        }

        #Add This patient to the patient List if the event include "delete" then just discard it.
        if not delete_flag:
            patients.append(patient)
    #patients.append(patient)
    #if not events.has_key("delete"):
    #    '''
    #    If "delete" entry were present, we just discard that user from frontdesk.
    #    '''
    #    patients.append(patient)

    patients.reverse()
    ansDict['patients'] = patients

    #Come Variables

    #Channel name is specific for each Clinics. At frontdesk we list the patients of one clinic at a time.
    channel_name = 'frontdesk' + clinicID

    comet = {
        "SESSION_COOKIE_NAME": settings.SESSION_COOKIE_NAME,
        "HOST": settings.INTERFACE,
        "CHANNEL_NAME": channel_name,
        "STOMP_PORT": settings.STOMP_PORT,
        "USER": request.user
    }

    provider_list = Provider.objects.filter(
        loc=clinic.location.id
    )  #select the provider info corresponding to a location
    ansDict['provider_list'] = provider_list

    ansDict.update(comet)

    return direct_to_template(request, 'frontDesk.html', ansDict)
Esempio n. 8
0
def jqmobile_patient_station(request,header_id,event_order):
    '''
        Display the information of a particular event of a patient,
        with all of its attributes and interrupts.
        
        input:
            header_id
            event_order - Number corresponds to a event name from clininc_event_map.
            
    '''     
    
    event_order = int(event_order)
    
    #By default we make the patient event is not updatable.
    read_only = False
    
    header = EventSetHeader.objects.get(id = header_id)
    
    pevlog = PatientEventLog.objects.filter(header = header)
    
    event_map  = get_clinic_event_map(header.clinic.id)
          
    event_name = [ ev[1] for ev in event_map if ev[0] == event_order ][0]
    
    event_time = get_event_time(pevlog,event_name)
    #current_event = get_current_patient_event(pevlog)
    
    if event_time:
        'Event already occured, so we disable the event start button.'
        read_only = True
        
    if event_order == len(event_map):
        next_event_order = False
    else:
        next_event_order = event_order + 1
    
    if event_order == 1:
        prev_event_order = False
    else:
        prev_event_order = event_order - 1
    
    station_url = '/jqmobile/patient/' + header_id + '/'
    
    #Attribute and Interrupt operations.
    
    event = Event.objects.filter(name = event_name)
    if event:
        event = event[0]        
        event_attributes = get_event_attributes(header.clinic,event,header)
        
    
    '''
      to check whether the interrupt of a particular patient is completed(start and stop) or not we take the entries from Interrupt table
      and PatientInterruptLog table.If any interrupt has 2 entries in PatientInterruptLog table it means that, that event is completed.If any 
      interrupt has 1 entry in PatientInterruptLog ,it means that , that interrupt is not completed  
    '''    
    interrupts = []
    
    patient_interrupt = []
    
    result = []
    
    inter = Interrupt.objects.all()
        
    for i in inter:
        interrupts.append((i.name,i.id))    
    
    pat_inter  = PatientInterruptLog.objects.filter(header = header_id)
    
    if pat_inter:

        for i in pat_inter:
            patient_interrupt.append((i.interrupt.name,i.interrupt.id))  
        
    
        for i in interrupts:
            c = 0
            for j in patient_interrupt:
                if i[0] == j[0]:
                    c = c+1
            if c == 2:
                result.append((i[0],"complete",i[1]))
            if c == 1:
                result.append((i[0],"stop",i[1]))                      
                   
                                 
    template_data = {'read_only':read_only,
                     'header':header,
                     'event': event,
                     'next_event_order': next_event_order,
                     'prev_event_order': prev_event_order,
                     'station_url': station_url,
                     'patient_name': get_patient_full_name(header),
                     'event_attributes': event_attributes,
                     'patient_header':header.id
                     
                     }
    if result:
        template_data.update({'result':result})
    
    return render_to_response('jqmobile/eventattribute.html',template_data)
Esempio n. 9
0
def jqmobile_patient_stations(request,header_id):
    '''
        List events of a particular patient, with current status of each event.
        
        output to template format.
        
        [('event_name','current_status','waiting_time','event_order_num'),....]
        
    '''
    
        
    header = EventSetHeader.objects.get(id = header_id)
    pevlog = PatientEventLog.objects.filter(header = header_id)
    
    active_events = [(p.event.name,p.dateTime) for p in pevlog]
           
    event_map = get_clinic_event_map(header.clinic.id)
    
    event_list = []
    #Remove Un importand events like 'appointment'.
    for ev in event_map:
        
        match = [ event for event in active_events if ev[1] == event[0] ]
        if match:
            event_list += match
    
    patient_events = []
    
    current_event = get_current_patient_event(pevlog)
    
    event_map_len = len(event_map)
    
    for i in range(event_map_len):
        
        ev_name = event_map[i][1]
        ev_time = get_event_time(pevlog, ev_name)
        
        if ev_time:
            
            if ev_name == current_event.get('event_name'):
                if (i+1) == event_map_len:
                    #Edge event case at the right end.
                    ev_waiting_time =  "NA"
                else:
                    ev_time = "In Progress"
                        
            #Get Time of two successive events to get waiting time of first event.
            if i < (event_map_len - 1):
                'To prevent list overflow, when appointment or other edge events happens'
                t1 = [ev[1] for ev in event_list if ev[0] == event_map[i + 1][1] ]
                t2 = [ev[1] for ev in event_list if ev[0] == ev_name ]
                
                if t1 and  t2:
                    ev_waiting_time = format_time(t1[0] - t2[0])
                else:
                    ev_waiting_time =  "NA"
            
            elif (i+1) != event_map_len:
                ev_waiting_time =  "NA"
                ev_time = "In Queue"
        
        else:
            ev_time = "In Queue"
            ev_waiting_time =  "NA"
        
        
        patient_events.append((ev_name,ev_time,ev_waiting_time,event_map[i][0]))
        
        #print patient_events
    
    
    
    template_render = { 'patient_name': get_patient_full_name(header),
                       'header_id': header.id,
                       'stations': patient_events
                       }
        
    return render_to_response("jqmobile/patientstations.html",template_render)
Esempio n. 10
0
def jqmtab_frontdesk(request):
    '''
        Index page of the Jquery Mobile Web application.
    '''

    locations = Location.objects.all()
    clinics = Clinic.objects.all()
    '''
        Currently taking first location's first clinic as default clinic to be displyed at frontdesk.
    '''

    clinic = get_object_or_404(Clinic.objects,
                               id=request.REQUEST.get("clinicID", None))

    event_map = get_clinic_event_map(clinic.id)

    dtStart, dtEnd = get_request_period(request, clinic)
    eshs = EventSetHeader.objects.filter(clinic=clinic).exclude(
        dateTime__gte=dtEnd).filter(dateTime__gte=dtStart)

    patients = []
    patient = {}
    events = []

    #Get this delete event objects to check whether this patient have delete event.
    delete = Event.objects.get(name='delete')

    #Get details of each patients with their current status in specified clinic.
    for esh in eshs:

        patient_name = get_patient_full_name(
            esh
        )  #esh.patient.lName + "," +  esh.patient.fName + "," +  str(esh.patient.dob)

        patient_event_logs = PatientEventLog.objects.filter(header=esh)

        #Will have value when this use is been deleted : BUG Fixed(6-May-2010)
        delete_event = patient_event_logs.filter(event=delete)

        #for pevlog in patient_event_logs:
        #    events[pevlog.event.name] = pevlog.dateTime.strftime("%H:%M") #str(pevlog.dateTime.hour) + ":" + str(pevlog.dateTime.minute)

        #Here we creating events in the Array format with index gives the order, to match the order and genearlized event management.
        '''
         events = [('22:22','event_name'),...]
         
         Due to the clinic generalization, we may have different event order.So we taking genearl methods to 
         get correct event order for a clinic.
        '''
        events = []

        #To check deleted users.
        delete_flag = False

        for event in event_map:
            event_time = get_event_time(patient_event_logs, event[1])
            events.append((event_time, event[1]))
            if delete_event:
                delete_flag = True

        patient = {
            "patient_name": patient_name,
            "header": esh.id,
            "events": events
        }

        #Add This patient to the patient List if the event include "delete" then just discard it.
        if not delete_flag:
            patients.append(patient)
        #patients.append(patient)
        #if not events.has_key("delete"):
        #    '''
        #    If "delete" entry were present, we just discard that user from frontdesk.
        #    '''
        #    patients.append(patient)

    patients.reverse()

    #Channel name is specific for each Clinics. At frontdesk we list the patients of one clinic at a time.
    channel_name = 'frontdesk' + str(clinic.id)

    comet = {
        "SESSION_COOKIE_NAME": settings.SESSION_COOKIE_NAME,
        "HOST": settings.INTERFACE,
        "CHANNEL_NAME": channel_name,
        "STOMP_PORT": settings.STOMP_PORT,
        "USER": request.user
    }

    provider_list = Provider.objects.filter(
        loc=clinic.location.id
    )  #select the provider info corresponding to a location

    #For hidden header layout fixing, we taking one row of patient data.
    patient_hidden = ''

    dynamic_datas = {
        'STATIC_URL': settings.STATIC_URL,
        'locations': locations,
        'clinic': clinic,
        'clinics': clinics,
        'clinic_event_map': event_map,
        'patients': patients,
        'patient_hidden': patient_hidden,
        'provider_list': provider_list,
    }
    dynamic_datas.update(comet)

    return render_to_response('jqmtab/jqmtab_frontdesk.html', dynamic_datas)
Esempio n. 11
0
def attribute_admin(request, clinic_id):
    '''
        Main view to List and updating the attributes assigned to each events under a clinic.
    '''

    clinic = get_object_or_404(Clinic, id=clinic_id)

    if request.is_ajax():
        'Attribute modification request, via ajax...'

        #Variable which hold the total number of attributes in the current request.
        length = int(request.POST['length'])
        event = Event.objects.filter(name=request.POST['event_selected'])[0]

        #remove all attribute map for this event and clinic pair., if there is no attribute while saving we delete every thing.
        EventAttributeMap.objects.filter(event=event, clinic=clinic).delete()

        if length > 0:
            'Only update the rows if some attributes are there, other wise we delete it all.'
            for index in range(length):
                'Iterate via all post variables and insert the attribute and required starts ...'

                attr = get_object_or_404(Attribute,
                                         id=request.POST.get('attr' +
                                                             str(index)))

                required = request.POST.get('attr_required' + str(index),
                                            False)
                #Make it boolean True
                if required:
                    required = True

                hidden = request.POST.get('attr_hidden' + str(index), False)
                #Make hidden to Boolean format.
                if hidden:
                    hidden = True

                EventAttributeMap(event=event,
                                  clinic=clinic,
                                  attribute=attr,
                                  required=required,
                                  hidden=hidden).save()

        msg = simplejson.dumps({'status': 'OK'})
        return HttpResponse(msg, mimetype='application/json')

    else:
        'List the existing Attributes of each events under a clinic'

        respons = {}

        #Get event map from the common function, return value format is tupple , [(signin,1),(),...etc]
        events = get_clinic_event_map(clinic.id)
        '''
        ClinicEventMap.objects.filter(clinic = clinic)
        if not events:
            'No custom events, so take default one.'
            events = [(1,'signin'),(2,'registration'),(3,'triage'),(4,'provider'),(5,'checkout'),(6,'appointment')]
        '''

        #Attributes of the first Event from the eventmap table.
        first_event = Event.objects.filter(name=events[0][1])

        attributes = Attribute.objects.all()

        event_attr_list = EventAttributeMap.objects.filter(clinic=clinic,
                                                           event=first_event)

        #event_attr_list = {'1':1,'2':2}

        response = {
            'clinic': clinic,
            'events': events,
            'attributes': attributes,
            'event_attr_list': event_attr_list
        }
        return render_to_response('admin/signin/assign_attributes.html',
                                  response, RequestContext(request, {}))