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})
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
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, {}))
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')
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
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)
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)
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)
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)
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)
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, {}))