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)) )
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)))
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)
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()
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)