示例#1
0
def config_dhis2_repeater(request, domain, repeater_id):
    repeater = Dhis2Repeater.get(repeater_id)
    assert repeater.domain == domain, f'"{repeater.domain}" != "{domain}"'

    if request.method == 'POST':
        form = Dhis2ConfigForm(data=request.POST)
        if form.is_valid():
            data = form.cleaned_data
            repeater.dhis2_config.form_configs = list(
                map(Dhis2FormConfig.wrap, data['form_configs']))
            repeater.save()

    else:
        form_configs = json.dumps([
            form_config.to_json()
            for form_config in repeater.dhis2_config.form_configs
        ])
        form = Dhis2ConfigForm(data={
            'form_configs': form_configs,
        })
    return render(request, 'dhis2/edit_config.html', {
        'domain': domain,
        'repeater_id': repeater_id,
        'form': form
    })
示例#2
0
def dhis2_edit_config(request, domain, repeater_id):
    helper = Dhis2ModelListViewHelper(request, domain, repeater_id)
    repeater = helper.repeater

    if request.method == 'POST':
        form = Dhis2ConfigForm(data=request.POST)
        if form.is_valid():
            data = form.cleaned_data
            repeater.dhis2_config.form_configs = list(
                map(Dhis2FormConfig.wrap, data['form_configs']))
            repeater.save()

    else:
        form = Dhis2ConfigForm(
            data={
                'form_configs':
                json.dumps([
                    form_config.to_json()
                    for form_config in repeater.dhis2_config.form_configs
                ]),
            })
    return render(request, 'dhis2/edit_config.html', {
        'domain': domain,
        'repeater_id': repeater_id,
        'form': form
    })
    def test_config_empty_datavalue_map(self):
        config = {
            'form_configs':
            json.dumps([{
                'xmlns': 'test_xmlns',
                'program_id': 'test program',
                'event_date': {
                    'doc_type': 'FormQuestion',
                    'form_question': '/data/event_date'
                },
                'event_status': 'COMPLETED',
                'org_unit_id': {
                    'doc_type': 'ConstantString',
                    'value': 'dhis2_location_id'
                },
                'datavalue_maps': [{}]
            }])
        }
        form = Dhis2ConfigForm(data=config)
        self.assertTrue(form.is_valid())

        repeater = Dhis2Repeater()
        repeater.dhis2_config = Dhis2Config.wrap(form.cleaned_data)
        with self.assertRaises(BadValueError) as e:
            repeater.save()
        self.assertEqual(str(e.exception),
                         "Property data_element_id is required.")
    def test_org_unit_id_migration(self):
        config = {
            'form_configs':
            json.dumps([{
                'xmlns':
                'test_xmlns',
                'program_id':
                'test program',
                'org_unit_id':
                'dhis2_location_id',
                'event_date': {
                    'doc_type': 'FormQuestion',
                    'form_question': '/data/event_date'
                },
                'datavalue_maps': [{
                    'data_element_id': 'dhis2_element_id',
                    'value': {
                        'doc_type': 'FormQuestion',
                        'form_question': '/data/example_question'
                    }
                }]
            }])
        }
        form = Dhis2ConfigForm(data=config)
        self.assertTrue(form.is_valid())

        repeater = Dhis2Repeater()
        repeater.dhis2_config = Dhis2Config.wrap(form.cleaned_data)
        repeater.save()
        org_unit_value_source = dict(
            repeater.dhis2_config.form_configs[0].org_unit_id)
        self.assertDictEqual(org_unit_value_source,
                             {'value': 'dhis2_location_id'})
    def test_full_config(self):
        config = {
            'form_configs':
            json.dumps([{
                'xmlns':
                'test_xmlns',
                'program_id':
                'test program',
                'event_date': {
                    'doc_type': 'FormQuestion',
                    'form_question': '/data/event_date'
                },
                'event_status':
                'COMPLETED',
                'org_unit_id': {
                    'doc_type': 'ConstantString',
                    'value': 'dhis2_location_id'
                },
                'datavalue_maps': [{
                    'data_element_id': 'dhis2_element_id',
                    'value': {
                        'doc_type': 'FormQuestion',
                        'form_question': '/data/example_question'
                    }
                }]
            }])
        }
        form = Dhis2ConfigForm(data=config)
        self.assertTrue(form.is_valid())

        repeater = Dhis2Repeater()
        repeater.dhis2_config = Dhis2Config.wrap(form.cleaned_data)
        repeater.save()
示例#6
0
    def test_minimal_config(self):
        config = {
            'form_configs':
            json.dumps([{
                'program_id':
                'test program',
                'event_date': {
                    'doc_type': 'FormQuestion',
                    'form_question': '/data/event_date'
                },
                'datavalue_maps': [{
                    'data_element_id': 'dhis2_element_id',
                    'value': {
                        'doc_type': 'FormQuestion',
                        'form_question': '/data/example_question'
                    }
                }]
            }])
        }
        form = Dhis2ConfigForm(data=config)
        self.assertTrue(form.is_valid())

        repeater = Dhis2Repeater()
        repeater.dhis2_config = Dhis2Config.wrap(form.cleaned_data)
        repeater.save()
 def test_form_validation(self):
     config = {'form_configs': [{}]}
     form = Dhis2ConfigForm(data=config)
     self.assertFalse(form.is_valid())
     self.assertDictEqual(
         form.errors, {
             'form_configs': [
                 'The "xmlns" property is required. Please specify the XMLNS of the form.',
                 'The "program_id" property is required. Please specify the DHIS2 Program of the event.',
                 'The "datavalue_maps" property is required. Please map CommCare values to DHIS2 data elements.',
             ]
         })
示例#8
0
 def test_form_validation(self):
     config = {'form_configs': [{}]}
     form = Dhis2ConfigForm(data=config)
     self.assertFalse(form.is_valid())
     self.assertDictEqual(
         form.errors, {
             'form_configs': [
                 'The "program_id" property is required. Please specify the DHIS2 Program of the event.',
                 'The "event_date" property is required. Please provide a FormQuestion, FormQuestionMap or '
                 'ConstantString to determine the date of the event.',
                 'The "datavalue_maps" property is required. Please map CommCare values to OpenMRS data elements.'
             ]
         })
示例#9
0
    def test_get_programs_by_id(self):
        program_id = 'test program'

        form = {
            "domain": DOMAIN,
            "form": {
                "@xmlns": "test_xmlns",
                "event_date": "2017-05-25T21:06:27.012000",
                "completed_date": "2017-05-25T21:06:27.012000",
                "event_location": "-33.6543213 19.12344312 abcdefg",
                "name": "test event",
                "meta": {
                    "location": 'test location',
                    "timeEnd": "2017-05-25T21:06:27.012000",
                    "timeStart": "2017-05-25T21:06:17.739000",
                    "userID": self.user.user_id,
                    "username": self.user.username
                }
            },
            "received_on": "2017-05-26T09:17:23.692083Z",
        }
        config = {
            'form_configs': json.dumps([{
                'xmlns': 'test_xmlns',
                'program_id': program_id,
                'event_status': 'COMPLETED',
                'event_location': {
                    'form_question': '/data/event_location'
                },
                'completed_date': {
                    'doc_type': 'FormQuestion',
                    'form_question': '/data/completed_date',
                    'external_data_type': DHIS2_DATA_TYPE_DATE
                },
                'org_unit_id': {
                    'doc_type': 'FormUserAncestorLocationField',
                    'form_user_ancestor_location_field': LOCATION_DHIS_ID
                },
                'datavalue_maps': [
                    {
                        'data_element_id': 'dhis2_element_id',
                        'value': {
                            'doc_type': 'FormQuestion',
                            'form_question': '/data/name'
                        }
                    }
                ]
            }])
        }
        config_form = Dhis2ConfigForm(data=config)
        self.assertTrue(config_form.is_valid())
        data = config_form.cleaned_data
        repeater = Dhis2Repeater(domain=DOMAIN)
        conn = ConnectionSettings(domain=DOMAIN, url="http://dummy.com")
        conn.save()
        repeater.dhis2_config.form_configs = [Dhis2FormConfig.wrap(fc) for fc in data['form_configs']]
        repeater.connection_settings_id = conn.id
        repeater.save()

        info = CaseTriggerInfo(
            domain=DOMAIN,
            case_id=None,
            owner_id='test_location',
            form_question_values=get_form_question_values(form),
        )

        programs = get_programs_by_id(info, repeater.dhis2_config)

        self.assertDictEqual(
            programs[program_id]['geometry'],
            {'type': 'Point', 'coordinates': [-33.6543, 19.1234]}
        )
示例#10
0
 def test_form_processing(self):
     form = {
         "domain": DOMAIN,
         "form": {
             "@xmlns": "test_xmlns",
             "event_date": "2017-05-25T21:06:27.012000",
             "completed_date": "2017-05-25T21:06:27.012000",
             "name": "test event",
             "meta": {
                 "location": self.location.location_id,
                 "timeEnd": "2017-05-25T21:06:27.012000",
                 "timeStart": "2017-05-25T21:06:17.739000",
                 "userID": self.user.user_id,
                 "username": self.user.username
             }
         },
         "received_on": "2017-05-26T09:17:23.692083Z",
     }
     config = {
         'form_configs': json.dumps([{
             'xmlns': 'test_xmlns',
             'program_id': 'test program',
             'event_status': 'COMPLETED',
             'completed_date': {
                 'doc_type': 'FormQuestion',
                 'form_question': '/data/completed_date',
                 'external_data_type': DHIS2_DATA_TYPE_DATE
             },
             'org_unit_id': {
                 'doc_type': 'FormUserAncestorLocationField',
                 'form_user_ancestor_location_field': LOCATION_DHIS_ID
             },
             'datavalue_maps': [
                 {
                     'data_element_id': 'dhis2_element_id',
                     'value': {
                         'doc_type': 'FormQuestion',
                         'form_question': '/data/name'
                     }
                 }
             ]
         }])
     }
     config_form = Dhis2ConfigForm(data=config)
     self.assertTrue(config_form.is_valid())
     data = config_form.cleaned_data
     repeater = Dhis2Repeater()
     repeater.dhis2_config.form_configs = [Dhis2FormConfig.wrap(fc) for fc in data['form_configs']]
     repeater.save()
     event = get_event(DOMAIN, repeater.dhis2_config.form_configs[0], form)
     self.assertDictEqual(
         {
             'dataValues': [
                 {
                     'dataElement': 'dhis2_element_id',
                     'value': 'test event'
                 }
             ],
             'status': 'COMPLETED',
             'completedDate': '2017-05-25',
             'program': 'test program',
             'eventDate': '2017-05-26',
             'orgUnit': 'dhis2_location_id'
         },
         event
     )
示例#11
0
 def test_form_processing(self):
     form = {
         "domain": "dhis2",
         "form": {
             "@xmlns": "test_xmlns",
             "event_date": "2017-05-25T21:06:27.012000",
             "name": "test event",
             "meta": {
                 "location": self.location.location_id,
                 "timeEnd": "2017-05-25T21:06:27.012000",
                 "timeStart": "2017-05-25T21:06:17.739000",
                 "userID": self.user.user_id,
                 "username": self.user.username
             }
         },
         "received_on": "2017-05-25T21:06:27.275256Z",
     }
     config = {
         'form_configs': json.dumps([{
             'xmlns': 'test_xmlns',
             'program_id': 'test program',
             'event_date': {
                 'doc_type': 'FormQuestion',
                 'form_question': '/data/event_date'
             },
             'event_status': 'COMPLETED',
             'org_unit_id': {
                 'doc_type': 'ConstantString',
                 'value': 'dhis2_location_id'
             },
             'datavalue_maps': [
                 {
                     'data_element_id': 'dhis2_element_id',
                     'value': {
                         'doc_type': 'FormQuestion',
                         'form_question': '/data/name'
                     }
                 }
             ]
         }])
     }
     config_form = Dhis2ConfigForm(data=config)
     self.assertTrue(config_form.is_valid())
     data = config_form.cleaned_data
     repeater = Dhis2Repeater()
     repeater.dhis2_config.form_configs = list(map(Dhis2FormConfig.wrap, data['form_configs']))
     repeater.save()
     dhis_format = _to_dhis_format(repeater.dhis2_config.form_configs[0], form)
     self.assertDictEqual(
         {
             'dataValues': [
                 {
                     'dataElement': 'dhis2_element_id',
                     'value': 'test event'
                 }
             ],
             'status': 'COMPLETED',
             'program': 'test program',
             'eventDate': '2017-05-25',
             'orgUnit': 'dhis2_location_id'
         },
         dhis_format
     )
示例#12
0
 def setUp(self):
     self.db = Dhis2Repeater.get_db()
     self.fakedb = FakeCouchDb()
     Dhis2Repeater.set_db(self.fakedb)
     self.form = {
         "domain": DOMAIN,
         "form": {
             "@xmlns": "test_xmlns",
             "event_date": "2017-05-25T21:06:27.012000",
             "completed_date": "2017-05-25T21:06:27.012000",
             "event_location": "-33.6543213 19.12344312 abcdefg",
             "name": "test event",
             "meta": {
                 "location": '',
                 "timeEnd": "2017-05-25T21:06:27.012000",
                 "timeStart": "2017-05-25T21:06:17.739000",
                 "userID": self.user.user_id,
                 "username": self.user.username
             }
         },
         "received_on": "2017-05-26T09:17:23.692083Z",
     }
     self.config = {
         'form_configs':
         json.dumps([{
             'xmlns':
             'test_xmlns',
             'program_id':
             'test program',
             'event_status':
             'COMPLETED',
             'completed_date': {
                 'doc_type': 'FormQuestion',
                 'form_question': '/data/completed_date',
                 'external_data_type': DHIS2_DATA_TYPE_DATE
             },
             'org_unit_id': {
                 'doc_type': 'FormUserAncestorLocationField',
                 'form_user_ancestor_location_field': LOCATION_DHIS_ID
             },
             'event_location': {
                 'form_question': '/data/event_location'
             },
             'datavalue_maps': [{
                 'data_element_id': 'dhis2_element_id',
                 'value': {
                     'doc_type': 'FormQuestion',
                     'form_question': '/data/name'
                 }
             }]
         }])
     }
     config_form = Dhis2ConfigForm(data=self.config)
     self.assertTrue(config_form.is_valid())
     data = config_form.cleaned_data
     conn = ConnectionSettings.objects.create(url="http://dummy.com",
                                              domain=DOMAIN)
     self.repeater = Dhis2Repeater(domain=DOMAIN,
                                   connection_settings_id=conn.id)
     self.repeater.dhis2_config.form_configs = [
         Dhis2FormConfig.wrap(fc) for fc in data['form_configs']
     ]
     self.repeater.save()