def report_ccr(request, record=None, carenet=None): """ Export patient data as a Continuity of Care Record (CCR) document. Will return :http:statuscode:`200` with a CCR on success, :http:statuscode:`400` if neither a record or carenet was passed. """ if carenet: record = carenet.record if not record: return HttpResponseBadRequest() # FIXME: fix these carenet filters to be smarter active_status = StatusName.objects.get(name='active') medications = carenet_facts_filter(carenet, Medication.objects.select_related().filter(record=record, document__status=active_status)) immunizations = carenet_facts_filter(carenet, Immunization.objects.select_related().filter(record=record, document__status=active_status)) vitalsigns = carenet_facts_filter(carenet, VitalSigns.objects.select_related().filter(record=record, document__status=active_status)) return render_template('reports/ccr', {'record': record, 'now': datetime.datetime.utcnow(), 'medications': medications, 'immunizations' : immunizations, 'vitalsigns' : vitalsigns}, type="xml")
def report_ccr(request, record=None, carenet=None): if carenet: record = carenet.record if not record: return HttpResponseBadRequest() # FIXME: fix these carenet filters to be smarter active_status = StatusName.objects.get(name='active') medications = carenet_facts_filter(carenet, Medication.objects.select_related().filter(record=record, document__status=active_status)) immunizations = carenet_facts_filter(carenet, Immunization.objects.select_related().filter(record=record, document__status=active_status)) vitalsigns = carenet_facts_filter(carenet, Vitals.objects.select_related().filter(record=record, document__status=active_status)) return render_template('reports/ccr', {'record': record, 'now': datetime.datetime.utcnow(), 'medications': medications, 'immunizations' : immunizations, 'vitalsigns' : vitalsigns}, type="xml")
def _apply_filters(self, results): # Carenet filters. # DH 04-07-2011: Moved up front and changed to not evaluate the queryset # Need to allow queries with no record or carenet, i.e., Audit, which isn't constrained to a single record if self.record: results = results.filter(record=self.record) results = carenet_facts_filter(self.carenet, results) filter_args = {} for field, val in self.query_filters.iteritems(): if self.valid_filters.has_key(field): field_type = self.valid_filters[field][1] try: parsed_val = EXPOSED_TYPES[field_type](val) filter_args[self.valid_filters[field][0]] = parsed_val except: raise ValueError( 'Invalid argument type for field %s: expected %s, got %s' % (field, field_type, val)) else: raise ValueError('Invalid filter for fact type %s: %s' % (self.model.__name__, field)) if self.date_range: if self.valid_filters.has_key(self.date_range['field']): field_type = self.valid_filters[self.date_range['field']][1] if field_type != DATE: raise ValueError( 'Date Ranges may only be calculated over fields of type "date": got %s(%s)' % (self.date_range['field'], field_type)) if self.date_range['start_date']: filter_args['%s__gte' % (self.valid_filters[self.date_range['field']] [0])] = self.date_range['start_date'] if self.date_range['end_date']: filter_args['%s__lte' % (self.valid_filters[self.date_range['field']] [0])] = self.date_range['end_date'] else: raise ValueError( 'Invalid date range filter for fact type %s: %s' % (self.model.__name__, date_range['field'])) if self.status: filter_args['document__status'] = self.status if filter_args: results = results.filter(**filter_args) # Results look like: # [obj1, obj2, ...] For every Fact object we haven't filtered out return results
def _apply_filters(self, results): # Carenet filters. # DH 04-07-2011: Moved up front and changed to not evaluate the queryset # Need to allow queries with no record or carenet, i.e., Audit, which isn't constrained to a single record if self.record: results = results.filter(record=self.record) results = carenet_facts_filter(self.carenet, results) filter_args = {} for field, val in self.query_filters.iteritems(): if self.valid_filters.has_key(field): field_type = self.valid_filters[field][1] try: parsed_val = EXPOSED_TYPES[field_type](val) filter_args[self.valid_filters[field][0]] = parsed_val except: raise ValueError( "Invalid argument type for field %s: expected %s, got %s" % (field, field_type, val) ) else: raise ValueError("Invalid filter for fact type %s: %s" % (self.model.__name__, field)) if self.date_range: if self.valid_filters.has_key(self.date_range["field"]): field_type = self.valid_filters[self.date_range["field"]][1] if field_type != DATE: raise ValueError( 'Date Ranges may only be calculated over fields of type "date": got %s(%s)' % (self.date_range["field"], field_type) ) if self.date_range["start_date"]: filter_args["%s__gte" % (self.valid_filters[self.date_range["field"]][0])] = self.date_range[ "start_date" ] if self.date_range["end_date"]: filter_args["%s__lte" % (self.valid_filters[self.date_range["field"]][0])] = self.date_range[ "end_date" ] else: raise ValueError( "Invalid date range filter for fact type %s: %s" % (self.model.__name__, date_range["field"]) ) if self.status: filter_args["document__status"] = self.status if filter_args: results = results.filter(**filter_args) # Results look like: # [obj1, obj2, ...] For every Fact object we haven't filtered out return results