Ejemplo n.º 1
0
    def render(self, item_template, output_template=OUTPUT_TEMPLATE):
        if self.results is None:
            self.execute()

        if self.aggregate_by:
            item_template = AGGREGATE_TEMPLATE
            
        # if we can, iterate efficiently over our results
        if hasattr(self.results, 'iterator'):
            results = self.results.iterator()
        else:
            results = self.results

        template_args = {'fobjs': results,
                         'trc': self.trc,
                         'group_by': self.group_by, 
                         'date_group': self.date_group, 
                         'aggregate_by': self.aggregate_by,
                         'limit': self.limit, 
                         'offset': self.offset,
                         'order_by': self.order_by,
                         'status': self.status,
                         'date_range': self.date_range, 
                         'filters': self.query_filters,        
                         'item_template': item_template
                         }
        return render_template(output_template, template_args, type="xml")
Ejemplo n.º 2
0
    def render(self, item_template, output_template=OUTPUT_TEMPLATE):
        if self.results is None:
            self.execute()

        if self.aggregate_by:
            item_template = AGGREGATE_TEMPLATE

        # if we can, iterate efficiently over our results
        if hasattr(self.results, "iterator"):
            results = self.results.iterator()
        else:
            results = self.results

        template_args = {
            "fobjs": results,
            "trc": self.trc,
            "group_by": self.group_by,
            "date_group": self.date_group,
            "aggregate_by": self.aggregate_by,
            "limit": self.limit,
            "offset": self.offset,
            "order_by": self.order_by,
            "status": self.status,
            "date_range": self.date_range,
            "filters": self.query_filters,
            "item_template": item_template,
        }
        return render_template(output_template, template_args, type="xml")
Ejemplo n.º 3
0
def _equipment_list(request,
                    limit,
                    offset,
                    status,
                    order_by='created_at',
                    record=None,
                    carenet=None):
    if carenet:
        record = carenet.record
    if not record:
        return HttpResponseBadRequest()

    processed_order_by = report_orderby_update(order_by)

    equipment = carenet_filter(
        carenet,
        Equipment.objects.select_related().filter(
            record=record,
            document__status=status).order_by(processed_order_by))
    return render_template('reports/equipment', {
        'equipment': equipment[offset:offset + limit],
        'trc': len(equipment),
        'limit': limit,
        'offset': offset,
        'order_by': order_by
    },
                           type="xml")
Ejemplo n.º 4
0
def _videomessage_list(request,
                       limit,
                       offset,
                       status,
                       order_by='created_at',
                       record=None,
                       carenet=None):
    if carenet:
        record = carenet.record
    if not record:
        return HttpResponseBadRequest()

    processed_order_by = report_orderby_update(order_by)

    type_obj = DocumentSchema.objects.get(
        type='http://indivo.org/vocab/xml/documents#VideoMessage')
    videomessages = carenet_filter(
        carenet,
        Document.objects.filter(type=type_obj,
                                replaced_by=None,
                                record=record,
                                status=status).order_by(processed_order_by))
    print "Number of Video Messages: " + str(len(videomessages))

    return render_template(
        'reports/videomessages', {
            'videomessages': videomessages[offset:offset + limit],
            'trc': len(videomessages),
            'limit': limit,
            'offset': offset,
            'order_by': order_by
        },
        type="xml")
Ejemplo n.º 5
0
def _adherenceitem_list(request,
                        limit,
                        offset,
                        status,
                        order_by='created_at',
                        record=None,
                        carenet=None):
    if carenet:
        record = carenet.record
    if not record:
        return HttpResponseBadRequest()

    processed_order_by = report_orderby_update(order_by)

    type_obj = DocumentSchema.objects.get(
        type='http://indivo.org/vocab/xml/documents#AdherenceItem')
    adherenceitems = carenet_filter(
        carenet,
        Document.objects.filter(type=type_obj,
                                replaced_by=None,
                                record=record,
                                status=status).order_by(processed_order_by))

    return render_template(
        'reports/adherenceitems', {
            'adherenceitems': adherenceitems[offset:offset + limit],
            'trc': len(adherenceitems),
            'limit': limit,
            'offset': offset,
            'order_by': order_by
        },
        type="xml")
Ejemplo n.º 6
0
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")
Ejemplo n.º 7
0
    def render(self, item_template, output_template=OUTPUT_TEMPLATE):
        if self.results is None:
            self.execute()

        if self.aggregate_by:
            item_template = AGGREGATE_TEMPLATE

        # if we can, iterate efficiently over our results
        if hasattr(self.results, 'iterator'):
            results = self.results.iterator()
        else:
            results = self.results

        template_args = {
            'fobjs': results,
            'trc': self.trc,
            'group_by': self.group_by,
            'date_group': self.date_group,
            'aggregate_by': self.aggregate_by,
            'limit': self.limit,
            'offset': self.offset,
            'order_by': self.order_by,
            'status': self.status,
            'date_range': self.date_range,
            'filters': self.query_filters,
            'item_template': item_template
        }
        return render_template(output_template, template_args, type="xml")
Ejemplo n.º 8
0
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")
Ejemplo n.º 9
0
def _medication_list(request,
                     limit,
                     offset,
                     status,
                     order_by='created_at',
                     record=None,
                     carenet=None):
    if carenet:
        record = carenet.record
    if not record:
        return HttpResponseBadRequest()

    processed_order_by = report_orderby_update(order_by)

    medications = carenet_filter(
        carenet,
        Medication.objects.select_related().filter(
            record=record,
            document__status=status).order_by(processed_order_by))
    """  
  medications = []
  relationship =  DocumentSchema.objects.get(type=DocumentSchema.expand_rel('ScheduledAction'))
  for med in medication_objs:
    rels = Document.objects.filter(record=record, status=status, rels_as_doc_0__document_1__original=med.document.original_id, rels_as_doc_0__relationship=relationship)
    medications += [med, rels]
  """
    return render_template('reports/medications', {
        'medications': medications[offset:offset + limit],
        'trc': len(medications),
        'limit': limit,
        'offset': offset,
        'order_by': order_by
    },
                           type="xml")
Ejemplo n.º 10
0
def _vitals_list(request, limit, offset, status, category=None, order_by='-created_at', record=None, carenet=None):
  if carenet:
    record = carenet.record
  if not record:
    return HttpResponseBadRequest()

  # change underscores to spaces in the category, to make it easier without URL encoding
  if category:
    category = category.replace("_"," ")

  processed_order_by = report_orderby_update(order_by)

  if category:
    vitals = carenet_filter(carenet,
              Vitals.objects.select_related().filter(
                record=record, 
                name=category, 
                document__status=status).order_by(processed_order_by))
  else:
    vitals = carenet_filter(carenet,
                Vitals.objects.select_related().filter(
                  record=record, 
                  document__status=status).order_by(processed_order_by))
  return render_template('reports/vitals', 
                          { 'vitals' : vitals[offset:offset+limit],
                            'trc' : len(vitals),
                            'limit' : limit,
                            'offset' : offset,
                            'order_by' : order_by
                          }, type='xml')
def _medicationscheduleitem_list(request, limit, offset, status, order_by="created_at", record=None, carenet=None):
    if carenet:
        record = carenet.record
    if not record:
        return HttpResponseBadRequest()

    processed_order_by = report_orderby_update(order_by)

    type_obj = DocumentSchema.objects.get(type="http://indivo.org/vocab/xml/documents#MedicationScheduleItem")
    medicationscheduleitems = carenet_filter(
        carenet,
        Document.objects.filter(type=type_obj, replaced_by=None, record=record, status=status).order_by(
            processed_order_by
        ),
    )

    return render_template(
        "reports/medicationscheduleitems",
        {
            "medicationscheduleitems": medicationscheduleitems[offset : offset + limit],
            "trc": len(medicationscheduleitems),
            "limit": limit,
            "offset": offset,
            "order_by": order_by,
        },
        type="xml",
    )
Ejemplo n.º 12
0
def _medication_list(request, limit, offset, status, order_by='created_at', record=None, carenet=None):
  if carenet:
    record = carenet.record
  if not record:
    return HttpResponseBadRequest()

  processed_order_by = report_orderby_update(order_by)

  medications = carenet_filter(carenet,
                  Medication.objects.select_related().filter(
                    record=record, 
                    document__status=status).order_by(processed_order_by))
  """  
  medications = []
  relationship =  DocumentSchema.objects.get(type=DocumentSchema.expand_rel('ScheduledAction'))
  for med in medication_objs:
    rels = Document.objects.filter(record=record, status=status, rels_as_doc_0__document_1__original=med.document.original_id, rels_as_doc_0__relationship=relationship)
    medications += [med, rels]
  """
  return render_template('reports/medications', 
                          { 'medications' : medications[offset:offset+limit],
                            'trc' : len(medications),
                            'limit' : limit,
                            'offset' : offset,
                            'order_by' : order_by
                          }, 
                          type="xml")
Ejemplo n.º 13
0
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_filter(
        carenet,
        Medication.objects.select_related().filter(
            record=record, document__status=active_status))
    immunizations = carenet_filter(
        carenet,
        Immunization.objects.select_related().filter(
            record=record, document__status=active_status))

    vitalsigns = carenet_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")
Ejemplo n.º 14
0
def _problem_list(request,
                  limit,
                  offset,
                  status,
                  order_by='created_at',
                  record=None,
                  carenet=None):
    if carenet:
        record = carenet.record
    if not record:
        return HttpResponseBadRequest()

    processed_order_by = report_orderby_update(order_by)

    problems = carenet_filter(
        carenet,
        Problem.objects.select_related().filter(
            record=record,
            document__status=status).order_by(processed_order_by))
    return render_template('reports/problems', {
        'problems': problems[offset:offset + limit],
        'trc': len(problems),
        'limit': limit,
        'offset': offset,
        'order_by': order_by
    },
                           type='xml')
def simple_clinical_notes_list(request,
                               limit,
                               offset,
                               status,
                               order_by='created_at',
                               record=None,
                               carenet=None):
    if carenet:
        record = carenet.record
    if not record:
        return HttpResponseBadRequest()

    processed_order_by = report_orderby_update(order_by)

    simple_clinical_notes = carenet_filter(
        carenet,
        SimpleClinicalNote.objects.select_related().filter(
            record=record,
            document__status=status).order_by(processed_order_by))
    return render_template('reports/simple_clinical_notes', {
        'scns': simple_clinical_notes[offset:offset + limit],
        'trc': len(simple_clinical_notes),
        'limit': limit,
        'offset': offset,
        'order_by': order_by
    },
                           type='xml')
Ejemplo n.º 16
0
def _measurement_list(request,
                      limit,
                      offset,
                      status,
                      order_by,
                      lab_code,
                      record=None,
                      carenet=None):
    """
  Func for listing measurements
  """

    if carenet:
        record = carenet.record
    if not record:
        return HttpResponseBadRequest()

    processed_order_by = report_orderby_update(order_by)

    measurements = carenet_filter(
        carenet,
        Measurement.objects.select_related().filter(
            record=record,
            document__status=status).order_by(processed_order_by))
    return render_template('reports/measurements', {
        'measurements': measurements[offset:offset + limit],
        'record': record,
        'trc': len(measurements),
        'limit': limit,
        'offset': offset,
        'order_by': order_by
    },
                           type="xml")
Ejemplo n.º 17
0
def _render_documents(request, docs, record, pha, tdc, format_type="xml"):
    # tdc: Total Document Count
    if docs:
        for doc in docs:
            if doc.id:
                _set_doc_latest(doc)
                doc.relates_to, doc.is_related_from = _get_doc_relations(doc)

    return utils.render_template(
        "documents", {"docs": docs, "record": record, "pha": pha, "tdc": tdc}, type=format_type
    )
Ejemplo n.º 18
0
def _render_documents(docs, record, pha, tdc, format_type='xml'):
  # tdc: Total Document Count
  if docs:
    for doc in docs:
      if doc.id:
        _set_doc_latest(doc)
        doc.relates_to, doc.is_related_from = _get_doc_relations(doc)

  return utils.render_template('documents', {  'docs'    : docs, 
                                               'record'  : record, 
                                               'pha'     : pha, 
                                               'tdc'     : tdc}, 
                                                type=format_type)
Ejemplo n.º 19
0
def _render_documents(docs, record, pha, tdc, format_type='xml'):
    # tdc: Total Document Count
    if docs:
        for doc in docs:
            if doc.id:
                _set_doc_latest(doc)
                doc.relates_to, doc.is_related_from = _get_doc_relations(doc)

    return utils.render_template('documents', {
        'docs': docs,
        'record': record,
        'pha': pha,
        'tdc': tdc
    },
                                 type=format_type)
Ejemplo n.º 20
0
def _render_documents(docs, record, pha, tdc, format_type='xml'):
    """ Lowlevel document rendering to response data.

    **Arguments:**
    
    * *docs*: An iterable of 
        :py:class:`~indivo.models.records_and_documents.Document`
        objects to be rendered.

    * *record*: The 
        :py:class:`~indivo.models.records_and_documents.Record`
        that every document in *docs* belongs to.

    * *pha*: The
        :py:class:`~indivo.models.apps.PHA` that *docs* are 
        scoped to.

    * *tdc*: The total document count of objects to render (i.e., ``len(docs)``).
        This can be passed in to avoid recomputing the size of docs if that might
        be expensive (i.e., a QuerySet which would require an extra DB call).

    * *format_type*: The format to render into. Options are ``xml``.

    **Returns:** 

    * an HTTPResponse whose body is an XML string containing the rendered list of 
        documents (which might be empty).

    """

    if docs:
        for doc in docs:
            if doc.id:
                _set_doc_latest(doc)
                doc.relates_to, doc.is_related_from = _get_doc_relations(doc)

    return utils.render_template('documents', {
        'docs': docs,
        'record': record,
        'pha': pha,
        'tdc': tdc
    },
                                 type=format_type)
Ejemplo n.º 21
0
def problem_list(request, limit, offset, status, order_by='created_at', record=None, carenet=None):
  if carenet:
    record = carenet.record
  if not record:
    return HttpResponseBadRequest()

  processed_order_by = report_orderby_update(order_by)

  problems = carenet_filter(carenet,
              Problem.objects.select_related().filter(
                record=record, 
                document__status=status).order_by(processed_order_by))
  return render_template('reports/problems', 
                         { 'problems' : problems[offset:offset+limit], 
                           'trc' : len(problems),
                           'limit' : limit,
                           'offset' : offset,
                           'order_by' : order_by}, 
                         type='xml')
Ejemplo n.º 22
0
def _schedulegroup_list(request, limit, offset, status, order_by='created_at', record=None, carenet=None):
  if carenet:
    record = carenet.record
  if not record:
    return HttpResponseBadRequest()

  processed_order_by = report_orderby_update(order_by)

  type_obj = DocumentSchema.objects.get(type='http://indivo.org/vocab/xml/documents#ScheduleGroup')
  schedulegroups = carenet_filter(carenet, Document.objects.filter(type=type_obj, replaced_by=None, record=record, status=status).order_by(processed_order_by)) 

  return render_template('reports/schedulegroups', 
                          { 'schedulegroups' : schedulegroups[offset:offset+limit],
                            'trc' : len(schedulegroups),
                            'limit' : limit,
                            'offset' : offset,
                            'order_by' : order_by
                          }, 
                          type="xml")
Ejemplo n.º 23
0
def _immunization_list(request, limit, offset, status, order_by='created_at', record=None, carenet=None):
  if carenet:
    record = carenet.record
  if not record:
    return HttpResponseBadRequest()

  processed_order_by = report_orderby_update(order_by)

  immunizations = carenet_filter(carenet, 
                    Immunization.objects.select_related().filter(
                      record=record, 
                      document__status=status).order_by(processed_order_by))
  return render_template('reports/immunizations', 
                          { 'immunizations' : immunizations[offset:offset+limit], 
                            'trc' : len(immunizations),
                            'limit' : limit,
                            'offset' : offset,
                            'order_by' : order_by}, 
                            type="xml")
Ejemplo n.º 24
0
    def render(self, item_template, output_template=OUTPUT_TEMPLATE):
        if self.results is None:
            self.execute()

        if self.aggregate_by:
            item_template = AGGREGATE_TEMPLATE
        template_args = {'fobjs': self.results,
                         'trc': self.trc,
                         'group_by': self.group_by, 
                         'date_group': self.date_group, 
                         'aggregate_by': self.aggregate_by,
                         'limit': self.limit, 
                         'offset': self.offset,
                         'order_by': self.order_by,
                         'status': self.status,
                         'date_range': self.date_range, 
                         'filters': self.query_filters,        
                         'item_template': item_template
                         }
        return render_template(output_template, template_args, type="xml")
Ejemplo n.º 25
0
def _videomessage_list(request, limit, offset, status, order_by='created_at', record=None, carenet=None):
  if carenet:
    record = carenet.record
  if not record:
    return HttpResponseBadRequest()

  processed_order_by = report_orderby_update(order_by)

  type_obj = DocumentSchema.objects.get(type='http://indivo.org/vocab/xml/documents#VideoMessage')
  videomessages = carenet_filter(carenet, Document.objects.filter(type=type_obj, replaced_by=None, record=record, status=status).order_by(processed_order_by))
  print "Number of Video Messages: " + str(len(videomessages))

  return render_template('reports/videomessages', 
                          { 'videomessages' : videomessages[offset:offset+limit],
                            'trc' : len(videomessages),
                            'limit' : limit,
                            'offset' : offset,
                            'order_by' : order_by
                          }, 
                          type="xml")
def simple_clinical_notes_list(request, limit, offset, status, order_by='created_at', record=None, carenet=None):
  if carenet:
    record = carenet.record
  if not record:
    return HttpResponseBadRequest()

  processed_order_by = report_orderby_update(order_by)

  simple_clinical_notes = carenet_filter(carenet,
                SimpleClinicalNote.objects.select_related().filter(
                  record=record, 
                  document__status=status).order_by(processed_order_by))
  return render_template('reports/simple_clinical_notes', 
                          { 'scns' : simple_clinical_notes[offset:offset+limit],
                            'trc' : len(simple_clinical_notes),
                            'limit' : limit,
                            'offset' : offset,
                            'order_by' : order_by
                          }, 
                          type='xml')
Ejemplo n.º 27
0
def _render_documents(docs, record, pha, tdc, format_type='xml'):
    """ Lowlevel document rendering to response data.

    **Arguments:**
    
    * *docs*: An iterable of 
        :py:class:`~indivo.models.records_and_documents.Document`
        objects to be rendered.

    * *record*: The 
        :py:class:`~indivo.models.records_and_documents.Record`
        that every document in *docs* belongs to.

    * *pha*: The
        :py:class:`~indivo.models.apps.PHA` that *docs* are 
        scoped to.

    * *tdc*: The total document count of objects to render (i.e., ``len(docs)``).
        This can be passed in to avoid recomputing the size of docs if that might
        be expensive (i.e., a QuerySet which would require an extra DB call).

    * *format_type*: The format to render into. Options are ``xml``.

    **Returns:** 

    * an HTTPResponse whose body is an XML string containing the rendered list of 
        documents (which might be empty).

    """

    if docs:
        for doc in docs:
            if doc.id:
                _set_doc_latest(doc)
                doc.relates_to, doc.is_related_from = _get_doc_relations(doc)

    return utils.render_template('documents', {  'docs'      : docs, 
                                                                                             'record'    : record, 
                                                                                             'pha'       : pha, 
                                                                                             'tdc'       : tdc}, 
                                                                                                type=format_type)
Ejemplo n.º 28
0
def _measurement_list(request, limit, offset, status, order_by, lab_code, record=None, carenet=None):
  """
  Func for listing measurements
  """

  if carenet:
    record = carenet.record
  if not record:
    return HttpResponseBadRequest()

  processed_order_by = report_orderby_update(order_by)

  measurements = carenet_filter(carenet,
                  Measurement.objects.select_related().filter(
                    record=record, 
                    document__status=status).order_by(processed_order_by))
  return render_template('reports/measurements', 
                          { 'measurements': measurements[offset:offset+limit],
                            'record': record,
                            'trc' : len(measurements),
                            'limit' : limit,
                            'offset' : offset,
                            'order_by' : order_by}, 
                          type="xml")
Ejemplo n.º 29
0
    try:
        doc = _document_create(
            record=record,
            creator=request.principal,
            pha=pha,
            content=request.raw_post_data,
            external_id=external_id,
            replaces_document=existing_doc,
            mime_type=utils.get_content_type(request),
        )
    except ValueError, e:
        return HttpResponseBadRequest("the document submitted is malformed:" + str(e))

    _set_doc_latest(doc)
    return utils.render_template("document", {"record": doc.record, "doc": doc, "pha": pha})


@commit_on_200
def document_create(request, record):
    """ Create a record-specific Indivo Document.

    Calls into 
    :py:meth:`~indivo.views.documents.document.__local_document_create`.

    """

    return __local_document_create(request, record, pha=None, external_id=None, existing_doc=None)


@commit_on_200
Ejemplo n.º 30
0
def vitals_list(request, limit, offset, status, category=None, order_by='-created_at', record=None, carenet=None):
  if carenet:
    record = carenet.record
  if not record:
    return HttpResponseBadRequest()

  occurred_min = request.GET.get('occurred-min', None)
  occurred_max = request.GET.get('occurred-max', None)
  aggregation  = request.GET.get('aggregation', None)
  segmentation = request.GET.get('segmentation', None)

  processed_order_by = report_orderby_update(order_by)

  vitals = Vitals.objects.select_related().filter(record=record, document__status=status)
  
  #Apply all the different filters
  if category:
    # change underscores to spaces in the category, to make it easier without URL encoding
    category = category.replace("_"," ")
    vitals = vitals.filter(name=category)
  
  if occurred_min:
    occurred_min = datetime.datetime.strptime(occurred_min, "%Y-%m-%dT%H:%M:%SZ")
    vitals = vitals.filter(date_measured__gte = occurred_min)
  
  if occurred_max:
    occurred_max = datetime.datetime.strptime(occurred_max, "%Y-%m-%dT%H:%M:%SZ")
    #If there is no date_measured_end then it should be date_measured (start)
    vitals = vitals.filter(date_measured_end__lte = occurred_max)

  #Create the segments
  
  #These functions are methods in the class of vitals
  segmentation_functions = {
    "weekday"    : lambda v: v.weekday(),
    "hourofday"  : lambda v: v.hour_of_day(),
    "hour"       : lambda v: v.hour(),
    "day"        : lambda v: v.day(),
    "week"       : lambda v: v.week(),
    "weekofyear" : lambda v: v.week_of_year(),
    "month"      : lambda v: v.month(),
    "year"       : lambda v: v.year()
  }

  if segmentation:
    if segmentation in segmentation_functions.keys():
      temp = {}
      for key, group in groupby(vitals, segmentation_functions[segmentation]):
        temp[key] = [vital for vital in group]
    vitals = temp 
    # at this point we have a dictionary where Keys are the 
    #segment identifiers and the values are lists of vitals

  #Aggregation functions
 
  sum_vitals = lambda l: reduce(lambda x,y: x + y.value, l, 0)
    
  aggregation_functions = {
    "sum" : lambda l: sum_vitals(l),
    "avg" : lambda l: sum_vitals(l) / float(len(l)),
    "min" : lambda l: min(l, key=lambda x: x.value).value,
    "max" : lambda l: max(l, key=lambda x: x.value).value
  }
  
  #Apply the aggregation functions
  if aggregation:
    #Apply the aggregation if we know how to do
    if aggregation in aggregation_functions.keys():
      temp = []
      for key in vitals.keys():
        #res.append(vitals[k].aggregate(functions[aggregation]('value')))
        #value = reduce(lambda x,y: x + y.value, vitals[k], 0)
        value = aggregation_functions[aggregation](vitals[key])
        vital = Vitals(value = value, 
                       name = "Step Count", 
                       unit = "steps")
        vital.index = key
        temp.append(vital)
    vitals = temp
 
  #Apply carenet_filter and order the results
  #vitals = carenet_filter(carenet, vitals.order_by(processed_order_by))
  vitals = carenet_filter(carenet, vitals)
  #FIX: The ordering data does not work on a normal list. Only in querysets
 
  #Select the template depending if is aggregated vitals or not
  if aggregation:
    template = "reports/vitals_aggregation"
  else:
    template = "reports/vitals" 

  return render_template(template, 
                          { 'vitals' : vitals[offset:offset+limit],
                            'trc' : len(vitals),
                            'limit' : limit,
                            'offset' : offset,
                            'order_by' : order_by
                          }, type='xml')
Ejemplo n.º 31
0
    """

    try:
        doc = _document_create(record             = record, 
                               creator           = request.principal,
                               pha               = pha, 
                               content           = request.raw_post_data, 
                               external_id       = external_id,
                               replaces_document = existing_doc,
                               mime_type         = utils.get_content_type(request))
    except ValueError, e:
        return HttpResponseBadRequest("the document submitted is malformed:" + str(e))

    _set_doc_latest(doc)
    return utils.render_template('document', {'record': doc.record, 
                                            'doc'     : doc, 
                                            'pha'     : pha }) 


@commit_on_200
def document_create(request, record):
    """ Create a record-specific Indivo Document.

    Calls into 
    :py:meth:`~indivo.views.documents.document.__local_document_create`.

    """

    return __local_document_create(request, record, pha=None,
                                   external_id = None, existing_doc=None)
Ejemplo n.º 32
0
    try:
        doc = _document_create(record=record,
                               creator=request.principal,
                               pha=pha,
                               content=request.raw_post_data,
                               external_id=external_id,
                               replaces_document=existing_doc,
                               mime_type=utils.get_content_type(request))
    except ValueError, e:
        return HttpResponseBadRequest("the document submitted is malformed:" +
                                      str(e))

    _set_doc_latest(doc)
    return utils.render_template('document', {
        'record': doc.record,
        'doc': doc,
        'pha': pha
    })


@commit_on_200
def document_create(request, record):
    """ Create a record-specific Indivo Document.

    Calls into 
    :py:meth:`~indivo.views.documents.document.__local_document_create`.

    """

    return __local_document_create(request,
                                   record,
Ejemplo n.º 33
0
"""
Indivo Views -- Base
"""

from django.http import HttpResponse, HttpResponseRedirect, Http404, HttpResponseBadRequest
from django.contrib.auth.models import User

from django.core.exceptions import *
from django.core import serializers
from django.db import transaction

from indivo.models import *
from indivo.accesscontrol.security import *
from indivo.lib.view_decorators import marsloader, commit_on_200

import logging, datetime

# SZ: standardize
from indivo.lib import utils
from indivo.lib.utils import render_template, render_template_raw

DONE = render_template('ok', {}, type="xml")