コード例 #1
0
ファイル: models.py プロジェクト: kkaczmarczyk/commcare-hq
 def get_payload(self, repeat_record):
     form = self._payload_doc(repeat_record)
     cases = CommCareCase.get_by_xform_id(form.get_id)
     return json.dumps({
         'form_id': form._id,
         'received_on': json_format_datetime(form.received_on),
         'case_ids': [case._id for case in cases]
     })
コード例 #2
0
ファイル: models.py プロジェクト: dimagi/care-sa-reports
def lookup_cbo_id_from_form_id(form_id):
    case = CommCareCase.get_by_xform_id(form_id).first()
    group = Group.by_user(case.user_id).one()

    # if the id doesn't belong to a user, maybe its a group?
    if not group:
        group = Group.get(case.user_id)

    return group.get_id
コード例 #3
0
ファイル: models.py プロジェクト: nikhilvarma22/commcare-hq
 def get_payload(self, repeat_record):
     form = XFormInstance.get(repeat_record.payload_id)
     cases = CommCareCase.get_by_xform_id(form.get_id)
     return json.dumps(
         {
             "form_id": form._id,
             "received_on": json_format_datetime(form.received_on),
             "case_ids": [case._id for case in cases],
         }
     )
コード例 #4
0
    def get_payload(self, repeat_record, form):
        logger.debug('DHIS2: Form domain "%s" XMLNS "%s"', form['domain'], form['xmlns'])
        if form['xmlns'] not in (REGISTER_CHILD_XMLNS, GROWTH_MONITORING_XMLNS, RISK_ASSESSMENT_XMLNS):
            # This is not a form we care about
            raise IgnoreDocument

        from casexml.apps.case.models import CommCareCase

        settings = Dhis2Settings.for_domain(form['domain'])
        dhis2_api = Dhis2Api(settings.dhis2['host'], settings.dhis2['username'], settings.dhis2['password'],
                             settings.dhis2['top_org_unit_name'])
        cases = CommCareCase.get_by_xform_id(form.get_id)
        case = next(c for c in cases.iterator() if c.type == CASE_TYPE)
        event = None

        if form['xmlns'] == REGISTER_CHILD_XMLNS:
            # Create a DHIS2 tracked entity instance from the form's case and
            # enroll in the nutrition assessment programme.
            logger.debug('DHIS2: Processing Register Child form')
            push_case(case, dhis2_api)
            #  We just need to enroll. No event to create
            raise IgnoreDocument

        elif form['xmlns'] == GROWTH_MONITORING_XMLNS:
            logger.debug('DHIS2: Processing Growth Monitoring form')
            if not getattr(case, 'external_id', None):
                logger.info('Register Child form must be processed before Growth Monitoring form')
                return  # Try again later
            self._update_instance(dhis2_api, case)
            # Create a paediatric nutrition assessment event.
            program_id = dhis2_api.get_program_id('Paediatric Nutrition Assessment')
            program_stage_id = dhis2_api.get_program_stage_id('Nutrition Assessment')
            event = dhis2_api.form_to_event(program_id, form, NUTRITION_ASSESSMENT_EVENT_FIELDS, program_stage_id,
                                            case['external_id'])

        elif form['xmlns'] == RISK_ASSESSMENT_XMLNS:
            logger.debug('DHIS2: Processing Risk Assessment form')
            if not getattr(case, 'external_id', None):
                logger.info('Register Child form must be processed before Risk Assessment form')
                return  # Try again later
            self._update_instance(dhis2_api, case)
            # Check whether the case needs to be enrolled in the Risk Assessment Program
            program_id = dhis2_api.get_program_id('Underlying Risk Assessment')
            if not dhis2_api.enrolled_in(case['external_id'], 'Underlying Risk Assessment'):
                today = json_format_date(date.today())
                program_data = {dhis2_attr: case[cchq_attr]
                                for cchq_attr, dhis2_attr in RISK_ASSESSMENT_PROGRAM_FIELDS.iteritems()}
                dhis2_api.enroll_in_id(case['external_id'], program_id, today, program_data)
            # Create a risk assessment event.
            program_stage_id = dhis2_api.get_program_stage_id('Underlying Risk Assessment')
            event = dhis2_api.form_to_event(program_id, form, RISK_ASSESSMENT_EVENT_FIELDS, program_stage_id,
                                            case['external_id'])

        return json.dumps(event, default=json_serializer)
コード例 #5
0
ファイル: models.py プロジェクト: dimagi/care-sa-reports
def lookup_province_id_from_form_id(form_id):
    case = CommCareCase.get_by_xform_id(form_id).first()
    fixture_type = FixtureDataType.by_domain_tag('care-ihapc-live',
                                                 'province').first()

    fixture_item = FixtureDataItem.by_field_value(
        'care-ihapc-live',
        fixture_type,
        'id',
        case.province
    ).first()

    return fixture_item.get_id
コード例 #6
0
ファイル: models.py プロジェクト: dimagi/care-sa-reports
def lookup_age_group_from_form_id(form_id):
    case = CommCareCase.get_by_xform_id(form_id).first()

    #TODO property handle invalid age data
    try:
        age = int(case.patient_age)
    except Exception:
        age = 0

    if age < 15:
        return 0
    elif age < 25:
        return 1
    else:
        return 2
コード例 #7
0
    def get_payload(self, repeat_record, form):
        if not Dhis2Settings.is_enabled_for_domain(form['domain']):
            return

        from casexml.apps.case.models import CommCareCase  # avoid circular import
        settings = Dhis2Settings.for_domain(form['domain'])
        dhis2_api = Dhis2Api(settings.dhis2.host, settings.dhis2.username, settings.dhis2.password,
                             settings.dhis2.top_org_unit_name)
        if form['xmlns'] == 'http://openrosa.org/formdesigner/b6a45e8c03a6167acefcdb225ee671cbeb332a40':
            # This is a growth monitoring form. It needs to be converted into
            # a paediatric nutrition assessment event.
            nutrition_id = dhis2_api.get_program_id('Paediatric Nutrition Assessment')
            event = dhis2_api.form_to_event(nutrition_id, form, NUTRITION_ASSESSMENT_EVENT_FIELDS)
            # If the form is not to be forwarded, the event will be None
            return json.dumps(event, default=json_serializer) if event else None

        elif form['xmlns'] == 'http://openrosa.org/formdesigner/39F09AD4-B770-491E-9255-C97B34BDD7FC':
            # This is a risk assessment form. It needs to be converted into a
            # risk assessment event.
            risk_id = dhis2_api.get_program_id('Underlying Risk Assessment')
            # Check whether the case needs to be enrolled in the Risk Assessment Program
            cases = CommCareCase.get_by_xform_id(form.get_id)
            if len(cases) != 1:
                # TODO: Fail permanently
                return None
            case = cases[0]
            if not case.get('external_id'):
                # This case has not yet been pushed to DHIS2.
                # TODO: Try again later
                return None
            # TODO: Test one-line alternative below with risk assessment forms
            # Either ...
            if not dhis2_api.enrolled_in(case['external_id'], 'Underlying Risk Assessment'):
                today = date.today().strftime('%Y-%m-%d')
                program_data = {dhis2_attr: case[cchq_attr]
                                for cchq_attr, dhis2_attr in RISK_ASSESSMENT_PROGRAM_FIELDS.iteritems()}
                dhis2_api.enroll_in_id(case['external_id'], risk_id, today, program_data)
            event = dhis2_api.form_to_event(risk_id, form, RISK_ASSESSMENT_EVENT_FIELDS)
            # ... or just ...
            # event = dhis2_api.form_to_event(risk_id, form, RISK_ASSESSMENT_EVENT_FIELDS, case['external_id'])
            # ...?
            return json.dumps(event, default=json_serializer) if event else None

        else:
            # This is not a form we care about
            return None
コード例 #8
0
ファイル: models.py プロジェクト: dszafranek/commcare-hq
 def get_payload(self, repeat_record):
     form = self._payload_doc(repeat_record)
     cases = CommCareCase.get_by_xform_id(form.get_id)
     return json.dumps({'form_id': form._id,
                        'received_on': json_format_datetime(form.received_on),
                        'case_ids': [case._id for case in cases]})
コード例 #9
0
ファイル: models.py プロジェクト: amonkeykong81/commcare-hq
 def care_case(self):
     return CommCareCase.get_by_xform_id(self._id).first()
コード例 #10
0
 def care_case(self):
     return CommCareCase.get_by_xform_id(self._id).first()
コード例 #11
0
from couchforms.models import XFormInstance
import fluff
from corehq.fluff.calculators import xform as xcalculators
from casexml.apps.case.models import CommCareCase
from corehq.apps.fixtures.models import FixtureDataType, FixtureDataItem
from corehq.apps.groups.models import Group


def lookup_province_id_from_form_id(form_id):
    case = CommCareCase.get_by_xform_id(form_id).first()
    fixture_type = FixtureDataType.by_domain_tag('care-ihapc-live',
                                                 'province').first()

    fixture_item = FixtureDataItem.by_field_value('care-ihapc-live',
                                                  fixture_type, 'id',
                                                  case.province).first()

    return fixture_item.get_id


def lookup_cbo_id_from_form_id(form_id):
    case = CommCareCase.get_by_xform_id(form_id).first()
    group = Group.by_user(case.user_id).one()

    # if the id doesn't belong to a user, maybe its a group?
    if not group:
        group = Group.get(case.user_id)

    return group.get_id

コード例 #12
0
ファイル: models.py プロジェクト: dimagi/care-sa-reports
def lookup_gender_from_form_id(form_id):
    case = CommCareCase.get_by_xform_id(form_id).first()
    return case.gender