Esempio n. 1
0
    def generate(self, no_of_households, survey):
        if not self.selected_households:
            self.no_of_households = no_of_households
            self.generate_new_list(survey)

        all_selected_households = RandomHouseHoldSelection.objects.filter(
            mobile_number=self.mobile_number,
            survey=survey)[0].selected_households
        all_random_households = all_selected_households.split(',')

        investigator = Investigator.objects.get(
            mobile_number=self.mobile_number)

        for random_household in all_random_households:
            uid = Household.next_uid(survey)
            household_code_value = LocationCode.get_household_code(
                investigator) + str(uid)
            Household.objects.create(investigator=investigator,
                                     ea=investigator.ea,
                                     uid=uid,
                                     random_sample_number=random_household,
                                     survey=survey,
                                     household_code=household_code_value)

        if survey.has_sampling:
            self.send_message()
    def test_creates_households_for_an_investigator_when_saving_random_sample(self):
        backend = Backend.objects.create(name="Backend")
        location_type = LocationType.objects.create(name="District", slug="district")
        mobile_number = "123456789"
        open_survey = Survey.objects.create(name="open survey", description="open survey", has_sampling=True)
        kampala = Location.objects.create(name="Kampala", type=location_type)
        ea = EnumerationArea.objects.create(name="EA2", survey=open_survey)
        ea.locations.add(kampala)

        investigator = Investigator.objects.create(mobile_number=mobile_number, ea=ea, backend=backend)

        random_households = [1, 3, 4, 7, 9, 13, 20, 28, 39, 70]

        with patch.object(random, "sample", return_value=random_households):
            random_selection_object = RandomHouseHoldSelection(mobile_number=mobile_number, survey=open_survey)
            random_selection_object.send_message = mock.MagicMock()
            random_selection_object.generate(100, open_survey)

        self.assertEqual(len(random_households), len(investigator.households.all()))
        for random_household in random_households:
            household = Household.objects.get(random_sample_number=random_household)
            self.assertIn(household, investigator.households.all())
            self.assertEqual(
                household.household_code, (LocationCode.get_household_code(investigator) + str(household.uid))
            )
Esempio n. 3
0
    def test_creates_households_for_an_investigator_when_saving_random_sample(
            self):
        backend = Backend.objects.create(name="Backend")
        location_type = LocationType.objects.create(name="District",
                                                    slug="district")
        mobile_number = "123456789"
        open_survey = Survey.objects.create(name="open survey",
                                            description="open survey",
                                            has_sampling=True)
        kampala = Location.objects.create(name="Kampala", type=location_type)
        ea = EnumerationArea.objects.create(name="EA2", survey=open_survey)
        ea.locations.add(kampala)

        investigator = Investigator.objects.create(mobile_number=mobile_number,
                                                   ea=ea,
                                                   backend=backend)

        random_households = [1, 3, 4, 7, 9, 13, 20, 28, 39, 70]

        with patch.object(random, 'sample', return_value=random_households):
            random_selection_object = RandomHouseHoldSelection(
                mobile_number=mobile_number, survey=open_survey)
            random_selection_object.send_message = mock.MagicMock()
            random_selection_object.generate(100, open_survey)

        self.assertEqual(len(random_households),
                         len(investigator.households.all()))
        for random_household in random_households:
            household = Household.objects.get(
                random_sample_number=random_household)
            self.assertIn(household, investigator.households.all())
            self.assertEqual(household.household_code,
                             (LocationCode.get_household_code(investigator) +
                              str(household.uid)))
Esempio n. 4
0
def create_household(householdform, investigator, valid, uid):
    is_valid_household = householdform['household'].is_valid()

    if investigator and is_valid_household:
        household = householdform['household'].save(commit=False)
        household.investigator = investigator
        household.ea = investigator.ea
        open_survey = Survey.currently_open_survey(investigator.location)
        household.household_code = LocationCode.get_household_code(investigator) + str(Household.next_uid(open_survey))
        if uid:
            household.uid = uid
            household.household_code = LocationCode.get_household_code(investigator) + str(uid)

        household.survey = open_survey
        household.save()
        valid['household'] = True
    return valid
    def test_create_households(self):
        country = LocationType.objects.create(name='country', slug='country')
        uganda = Location.objects.create(name="Uganda", type=country)
        burundi = Location.objects.create(name="Burundi", type=country)
        ea = EnumerationArea.objects.create(name="EA2")
        ea.locations.add(uganda)

        investigator = Interviewer.objects.create(name="inv", mobile_number='987654321', ea=ea,
                                                   backend=Backend.objects.create(name='something'))
        form_data = {
            'ea': investigator.ea.id,
            'investigator': investigator.id,
            'surname': 'Rajini',
            'first_name': 'Kant',
            'male': 'False',
            'date_of_birth': date(1980, 9, 01),
            'occupation': 'Student',
            'level_of_education': 'Nursery',
            'resident_since_year': '2013',
            'resident_since_month': '5',
            'time_measure': 'Years',
            'uid': '2',
        }

        household_code = LocationCode.get_household_code(investigator) + str(Household.next_uid())

        hHead = HouseholdHead.objects.filter(surname=form_data['surname'])
        household = Household.objects.filter(uid=form_data['uid'])
        self.failIf(hHead)
        self.failIf(household)
        response = self.client.post('/households/new/', data=form_data)
        self.failUnlessEqual(response.status_code, 302) # ensure redirection to list investigator page

        hHead = HouseholdHead.objects.get(surname=form_data['surname'])
        household = Household.objects.get(uid=form_data['uid'])
        self.failUnless(hHead.id)
        self.failUnless(household.id)
        for key in ['surname', 'first_name', 'date_of_birth', 'occupation',
                    'level_of_education', 'resident_since_year', 'resident_since_month']:
            value = getattr(hHead, key)
            self.assertEqual(str(form_data[key]), str(value))

        self.assertEqual(hHead.male, False)
        self.assertEqual(household.investigator, investigator)
        self.assertEqual(household.location, investigator.location)
        self.assertEqual(household.household_code, household_code)
        self.assertEqual(hHead.household, household)

        investigator.ea = ea
        investigator.save()
        self.assertEqual(household.location, uganda)
Esempio n. 6
0
    def generate(self, no_of_households, survey):
        if not self.selected_households:
            self.no_of_households = no_of_households
            self.generate_new_list(survey)

        all_selected_households = RandomHouseHoldSelection.objects.filter(mobile_number=self.mobile_number, survey=survey)[0].selected_households
        all_random_households = all_selected_households.split(',')

        investigator = Investigator.objects.get(mobile_number=self.mobile_number)

        for random_household in all_random_households:
            uid = Household.next_uid(survey)
            household_code_value = LocationCode.get_household_code(investigator) + str(uid)
            Household.objects.create(investigator=investigator, ea=investigator.ea,
                                     uid=uid, random_sample_number=random_household,
                                     survey=survey, household_code=household_code_value)

        if survey.has_sampling:
            self.send_message()
Esempio n. 7
0
        form_data = {
            'ea': investigator.ea.id,
            'investigator': investigator.id,
            'surname': 'Rajini',
            'first_name': 'Kant',
            'male': 'False',
            'date_of_birth': date(1980, 9, 01),
            'occupation': 'Student',
            'level_of_education': 'Nursery',
            'resident_since_year': '2013',
            'resident_since_month': '5',
            'time_measure': 'Years',
            'uid': '2',
        }

        household_code = LocationCode.get_household_code(investigator) + str(
            Household.next_uid())

        hHead = HouseholdHead.objects.filter(surname=form_data['surname'])
        household = Household.objects.filter(uid=form_data['uid'])
        self.failIf(hHead)
        self.failIf(household)
        response = self.client.post('/households/new/', data=form_data)
        self.failUnlessEqual(
            response.status_code,
            302)  # ensure redirection to list investigator page

        hHead = HouseholdHead.objects.get(surname=form_data['surname'])
        household = Household.objects.get(uid=form_data['uid'])
        self.failUnless(hHead.id)
        self.failUnless(household.id)