Пример #1
0
 def test_first_question_is_loop_first(self):
     self._create_ussd_group_questions()
     # test first question is group first
     self.assertEquals(
         self.interview.respond(),
         self.qset.g_first_question.display_text(
             channel=ODKAccess.choice_name(), context={}))
     # test running again gives same results
     self.assertEquals(
         self.interview.respond(),
         self.qset.g_first_question.display_text(
             channel=ODKAccess.choice_name(), context={}))
Пример #2
0
def _get_or_create_household_member(survey_allocation, survey_tree):
    interviewer, survey = survey_allocation.interviewer, survey_allocation.survey
    house_number = _get_household_house_number(survey_tree)
    survey_listing = SurveyHouseholdListing.get_or_create_survey_listing(
        interviewer, survey)
    house_listing = survey_listing.listing
    try:
        household = Household.objects.get(listing=house_listing,
                                          house_number=house_number)
    except Household.DoesNotExist:
        physical_addr = ''
        try:
            physical_addr = _get_household_physical_addr(survey_tree)
        except IndexError:
            pass
        household = Household.objects.create(
            last_registrar=interviewer,
            listing=house_listing,
            registration_channel=ODKAccess.choice_name(),
            house_number=house_number,
            physical_address=physical_addr)
    #now time for member details
    MALE = '1'
    IS_HEAD = '1'
    mem_attrs = _get_member_attrs(survey_tree)
    kwargs = {}
    kwargs['surname'] = mem_attrs.get('surname')
    kwargs['first_name'] = mem_attrs['firstName']
    kwargs['gender'] = (mem_attrs['sex'] == MALE)
    date_of_birth = current_val = datetime.now() - relativedelta(
        years=int(mem_attrs['age']))
    kwargs['date_of_birth'] = date_of_birth
    #datetime.strptime(mem_attrs['dateOfBirth'], '%Y-%m-%d')
    kwargs['household'] = household
    kwargs['registrar'] = interviewer
    kwargs['registration_channel'] = ODKAccess.choice_name()
    kwargs['survey_listing'] = survey_listing
    if not household.get_head() and mem_attrs['isHead'] == IS_HEAD:
        # kwargs['occupation'] = mem_attrs.get('occupation', '')
        # kwargs['level_of_education'] = mem_attrs.get('levelOfEducation', '')
        # resident_since = datetime.strptime(mem_attrs.get('residentSince', '1900-01-01'), '%Y-%m-%d')
        # kwargs['resident_since']=resident_since
        head = HouseholdHead.objects.create(**kwargs)
        if household.head_desc is not head.surname:
            household.head_desc = head.surname
            household.save()
        return head
    else:
        return HouseholdMember.objects.create(**kwargs)
Пример #3
0
 def setUp(self):
     self.qset = ListingTemplate.objects.create(name="raja")
     self.survey = Survey.objects.create(name="haha",
                                         has_sampling=True,
                                         sample_size=3,
                                         listing_form=self.qset)
     # create the access channel
     self.qset_channels = mommy.make(QuestionSetChannel,
                                     qset=self.qset,
                                     channel=ODKAccess.choice_name())
     self.ea = EnumerationArea.objects.last()
     self.interviewer = mommy.make(Interviewer)
     self.survey_allocation = mommy.make(SurveyAllocation,
                                         survey=self.survey,
                                         allocation_ea=self.ea,
                                         interviewer=self.interviewer)
     self.access_channel = mommy.make(ODKAccess,
                                      interviewer=self.interviewer)
     # create listing questions
     self._create_ussd_non_group_questions()
     self.assertTrue(self.qset.questions.count())
     raj = self.assign_permission_to(
         User.objects.create_user('demo12', '*****@*****.**', 'demo12'),
         'can_view_batches')
     self.client = Client()
     self.client.login(username='******', password='******')
 def setUp(self):
     self.client = Client()
     self.survey = mommy.make(Survey)
     self.batch_data = {
         'name': 'test-batch',
         'access_channels': [
             ODKAccess.choice_name(),
         ],
         'survey': self.survey.id
     }
     self.questions_data = []
     # create a inline flows for this listing
     for answer_class in [
             NumericalAnswer, TextAnswer, DateAnswer, MultiChoiceAnswer
     ]:
         self.questions_data.append({
             'text':
             'text: %s' % answer_class.choice_name(),
             'answer_type':
             answer_class.choice_name(),
             'identifier':
             'id_%s' % answer_class.choice_name().replace(' ', '_')
         })
     self.questions_data[-1]['options'] = ['Yes', 'No']
     raj = self.assign_permission_to(
         User.objects.create_user('demo12', '*****@*****.**', 'demo12'),
         'can_view_batches')
     self.client.login(username='******', password='******')
Пример #5
0
def _get_or_create_household_member(interviewer, survey, survey_tree):
    house_number = _get_household_house_number(survey_tree)
    survey_listing = SurveyHouseholdListing.get_or_create_survey_listing(interviewer, survey)
    house_listing = survey_listing.listing
    try:
        household = Household.objects.get(listing=house_listing, house_number=house_number)
    except Household.DoesNotExist:
        physical_addr = ""
        try:
            physical_addr = _get_household_physical_addr(survey_tree)
        except IndexError:
            pass
        household = Household.objects.create(
            last_registrar=interviewer,
            listing=house_listing,
            registration_channel=ODKAccess.choice_name(),
            house_number=house_number,
            physical_address=physical_addr,
        )
    # now time for member details
    MALE = "1"
    IS_HEAD = "1"
    mem_attrs = _get_member_attrs(survey_tree)
    kwargs = {}
    kwargs["surname"] = mem_attrs.get("surname")
    kwargs["first_name"] = mem_attrs["firstName"]
    kwargs["gender"] = mem_attrs["sex"] == MALE
    date_of_birth = current_val = datetime.now() - relativedelta(years=int(mem_attrs["age"]))
    kwargs["date_of_birth"] = date_of_birth
    # datetime.strptime(mem_attrs['dateOfBirth'], '%Y-%m-%d')
    kwargs["household"] = household
    kwargs["registrar"] = interviewer
    kwargs["registration_channel"] = ODKAccess.choice_name()
    kwargs["survey_listing"] = survey_listing
    if not household.get_head() and mem_attrs["isHead"] == IS_HEAD:
        # kwargs['occupation'] = mem_attrs.get('occupation', '')
        # kwargs['level_of_education'] = mem_attrs.get('levelOfEducation', '')
        # resident_since = datetime.strptime(mem_attrs.get('residentSince', '1900-01-01'), '%Y-%m-%d')
        # kwargs['resident_since']=resident_since
        head = HouseholdHead.objects.create(**kwargs)
        if household.head_desc is not head.surname:
            household.head_desc = head.surname
            household.save()
        return head
    else:
        return HouseholdMember.objects.create(**kwargs)
 def setUp(self):
     self.client = Client()
     self.listing_data = {'name': 'test-listing', 'access_channels': [ODKAccess.choice_name(), ], }
     self.questions_data = []
     # create a inline flows for this listing
     for answer_class in [NumericalAnswer, TextAnswer, DateAnswer, MultiChoiceAnswer]:
         self.questions_data.append({'text': 'text: %s' % answer_class.choice_name(),
                                     'answer_type': answer_class.choice_name(),
                                     'identifier': 'id_%s' % answer_class.choice_name().replace(' ', '_')})
     self.questions_data[-1]['options'] = ['Yes', 'No']
     raj = self.assign_permission_to(User.objects.create_user('demo12', '*****@*****.**', 'demo12'),
                                     'can_view_batches')
     self.client.login(username='******', password='******')
 def test_reload_answer_access(self):
     AnswerAccessDefinition.objects.all().delete()
     self.assertEquals(AnswerAccessDefinition.objects.count(), 0)
     AnswerAccessDefinition.reload_answer_categories()
     self.assertTrue(AnswerAccessDefinition.objects.count() > 0)
     # chech for each access type has an entry
     channels = [USSDAccess.choice_name(), ODKAccess.choice_name(), WebAccess.choice_name()]
     allowed_channels = AnswerAccessDefinition.objects.values_list('channel', flat=True)
     for channel in channels:
         self.assertIn(channel, allowed_channels)
         self.assertTrue(len(AnswerAccessDefinition.answer_types(channel)) > 0)
     answer_types = Answer.answer_types()
     for answer_type in [VideoAnswer, AudioAnswer, ImageAnswer]:
         self.assertNotIn(answer_type.choice_name(), AnswerAccessDefinition.answer_types(USSDAccess.choice_name()))
Пример #8
0
def save_household_list(interviewer, survey, survey_tree, survey_listing):
    house_nodes = _get_nodes(HOUSEHOLD_PATH, tree=survey_tree)
    if len(house_nodes) < survey.sample_size:
        raise NotEnoughHouseholds("Not enough households")
    house_number = 1
    households = []
    try:
        for node in house_nodes:
            household, _ = Household.objects.get_or_create(
                house_number=house_number,
                listing=survey_listing.listing,
                last_registrar=interviewer,
                registration_channel=ODKAccess.choice_name(),
                physical_address=_get_nodes("./physicalAddress", tree=node)[0].text,
                head_desc=_get_nodes("./headDesc", tree=node)[0].text,
                head_sex=_get_nodes("./headSex", tree=node)[0].text,
            )
            house_number = house_number + 1
            households.append(household)
    except IntegrityError:
        raise HouseholdNumberAlreadyExists("Household number already exists")
    return households
Пример #9
0
 def test_reload_answer_access(self):
     AnswerAccessDefinition.objects.all().delete()
     self.assertEquals(AnswerAccessDefinition.objects.count(), 0)
     AnswerAccessDefinition.reload_answer_categories()
     self.assertTrue(AnswerAccessDefinition.objects.count() > 0)
     # chech for each access type has an entry
     channels = [
         USSDAccess.choice_name(),
         ODKAccess.choice_name(),
         WebAccess.choice_name()
     ]
     allowed_channels = AnswerAccessDefinition.objects.values_list(
         'channel', flat=True)
     for channel in channels:
         self.assertIn(channel, allowed_channels)
         self.assertTrue(
             len(AnswerAccessDefinition.answer_types(channel)) > 0)
     answer_types = Answer.answer_types()
     for answer_type in [VideoAnswer, AudioAnswer, ImageAnswer]:
         self.assertNotIn(
             answer_type.choice_name(),
             AnswerAccessDefinition.answer_types(USSDAccess.choice_name()))
Пример #10
0
def save_household_list(interviewer, survey, survey_tree, survey_listing):
    house_nodes = _get_nodes(HOUSEHOLD_PATH, tree=survey_tree)
    if len(house_nodes) < survey.sample_size:
        raise NotEnoughHouseholds('Not enough households')
    house_number = 1
    households = []
    try:
        for node in house_nodes:
            household, _ = Household.objects.get_or_create(
                house_number=house_number,
                listing=survey_listing.listing,
                last_registrar=interviewer,
                registration_channel=ODKAccess.choice_name(),
                physical_address=_get_nodes('./physicalAddress',
                                            tree=node)[0].text,
                head_desc=_get_nodes('./headDesc', tree=node)[0].text,
                head_sex=_get_nodes('./headSex', tree=node)[0].text,
            )
            house_number = house_number + 1
            households.append(household)
    except IntegrityError:
        raise HouseholdNumberAlreadyExists('Household number already exists')
    return households
Пример #11
0
 def __init__(self, request, qset, access_type=ODKAccess.choice_name()):
     self.id = 'test: %s, %s' % (request.user.username, qset.id)
     self.question_set = QuestionSet.get(id=qset.id)
     self.user_identifier = self.id
     self.access_type = access_type
Пример #12
0
    def handle(self, *args, **kwargs):
        self.stdout.write('Creating permissions....')
        content_type = ContentType.objects.get_for_model(User)
        Permission.objects.get_or_create(codename='can_enter_data', name='Can enter data', content_type=content_type)
        Permission.objects.get_or_create(codename='can_view_batches', name='Can view Batches', content_type=content_type)
        Permission.objects.get_or_create(codename='can_view_interviewers', name='Can view Interviewers', content_type=content_type)
        Permission.objects.get_or_create(codename='can_view_aggregates', name='Can view Aggregates', content_type=content_type)
        Permission.objects.get_or_create(codename='view_completed_survey', name='Can view Completed Surveys', content_type=content_type)
        Permission.objects.get_or_create(codename='can_view_households', name='Can view Households', content_type=content_type)
        Permission.objects.get_or_create(codename='can_view_locations', name='Can view Locations', content_type=content_type)
        Permission.objects.get_or_create(codename='can_view_users', name='Can view Users', content_type=content_type)
        Permission.objects.get_or_create(codename='can_view_household_groups', name='Can view Household Groups', content_type=content_type)

        self.stdout.write('Permissions.')
        self.stdout.write('Creating answer definition... ')
        #ussd definition
        AnswerAccessDefinition.objects.get_or_create(channel=USSDAccess.choice_name(),
                                                     answer_type=NumericalAnswer.choice_name())
        AnswerAccessDefinition.objects.get_or_create(channel=USSDAccess.choice_name(),
                                                     answer_type=TextAnswer.choice_name())
        AnswerAccessDefinition.objects.get_or_create(channel=USSDAccess.choice_name(),
                                                     answer_type=MultiChoiceAnswer.choice_name())

        #ODK definition
        AnswerAccessDefinition.objects.get_or_create(channel=ODKAccess.choice_name(),
                                                     answer_type=NumericalAnswer.choice_name())
        AnswerAccessDefinition.objects.get_or_create(channel=ODKAccess.choice_name(),
                                                     answer_type=TextAnswer.choice_name())
        AnswerAccessDefinition.objects.get_or_create(channel=ODKAccess.choice_name(),
                                                     answer_type=MultiChoiceAnswer.choice_name())
        AnswerAccessDefinition.objects.get_or_create(channel=ODKAccess.choice_name(),
                                                     answer_type=MultiSelectAnswer.choice_name())
        AnswerAccessDefinition.objects.get_or_create(channel=ODKAccess.choice_name(),
                                                     answer_type=ImageAnswer.choice_name())
        AnswerAccessDefinition.objects.get_or_create(channel=ODKAccess.choice_name(),
                                                     answer_type=GeopointAnswer.choice_name())
        AnswerAccessDefinition.objects.get_or_create(channel=ODKAccess.choice_name(),
                                                     answer_type=DateAnswer.choice_name())
        AnswerAccessDefinition.objects.get_or_create(channel=ODKAccess.choice_name(),
                                                     answer_type=AudioAnswer.choice_name())
        AnswerAccessDefinition.objects.get_or_create(channel=ODKAccess.choice_name(),
                                                     answer_type=VideoAnswer.choice_name())

        #web form definition
        AnswerAccessDefinition.objects.get_or_create(channel=WebAccess.choice_name(),
                                                     answer_type=NumericalAnswer.choice_name())
        AnswerAccessDefinition.objects.get_or_create(channel=WebAccess.choice_name(),
                                                     answer_type=TextAnswer.choice_name())
        AnswerAccessDefinition.objects.get_or_create(channel=WebAccess.choice_name(),
                                                     answer_type=MultiChoiceAnswer.choice_name())
        AnswerAccessDefinition.objects.get_or_create(channel=WebAccess.choice_name(),
                                                     answer_type=MultiSelectAnswer.choice_name())
        AnswerAccessDefinition.objects.get_or_create(channel=WebAccess.choice_name(),
                                                     answer_type=ImageAnswer.choice_name())
        AnswerAccessDefinition.objects.get_or_create(channel=WebAccess.choice_name(),
                                                     answer_type=GeopointAnswer.choice_name())
        AnswerAccessDefinition.objects.get_or_create(channel=WebAccess.choice_name(),
                                                     answer_type=DateAnswer.choice_name())
        AnswerAccessDefinition.objects.get_or_create(channel=WebAccess.choice_name(),
                                                     answer_type=AudioAnswer.choice_name())
        AnswerAccessDefinition.objects.get_or_create(channel=WebAccess.choice_name(),
                                                     answer_type=VideoAnswer.choice_name())
        self.stdout.write('Successfully imported!')
Пример #13
0
 def test_respond_start_question_interview(self):
     self._create_ussd_group_questions()
     self.assertEquals(
         self.interview.respond(),
         self.qset.g_first_question.display_text(
             channel=ODKAccess.choice_name()))
Пример #14
0
 def test_fields(self):
     odk_access = ODKAccess()
     fields = [str(item.attname) for item in odk_access._meta.fields]
     self.assertEqual(10, len(fields))
     for field in ['intervieweraccess_ptr_id', 'odk_token']:
         self.assertIn(field, fields)
Пример #15
0
 def __init__(self, request, qset, access_type=ODKAccess.choice_name()):
     self.id = 'test: %s, %s' % (request.user.username, qset.id)
     self.question_set = QuestionSet.get(id=qset.id)
     self.user_identifier = self.id
     self.access_type = access_type