def edit(request, ea_id):
    ea = get_object_or_404(EnumerationArea, pk=ea_id)
    if request.GET:
        data = request.GET
    else:
        data = dict([(loc.type.name, loc.pk) for loc in ea.parent_locations()])
    locations_filter = LocationsFilterForm(data=data)
    enumeration_area_form = EnumerationAreaForm(
        instance=ea, locations=locations_filter.get_locations())
    if request.method == 'POST':
        enumeration_area_form = EnumerationAreaForm(
            data=request.POST,
            instance=ea,
            locations=locations_filter.get_locations())

        if enumeration_area_form.is_valid():
            enumeration_area_form.save()
            messages.success(request, "Enumeration Area successfully Changed.")
            return HttpResponseRedirect(
                reverse('enumeration_area_home', args=()))
        messages.error(request, "Enumeration area was not Changed.")
    request.breadcrumbs([
        ('Enumeration Areas', reverse('enumeration_area_home')),
    ])
    return render(
        request, 'enumeration_area/new.html', {
            'enumeration_area_form': enumeration_area_form,
            'locations_filter': locations_filter,
            'title': 'New Enumeration Area',
            'button_label': 'Create',
            'action': reverse('edit_enumeration_area_page', args=(ea_id, )),
            'location_filter_types': LocationType.in_between(),
        })
Example #2
0
def new(request):
    locations_filter = LocationsFilterForm(data=request.GET)
    enumeration_area_form = EnumerationAreaForm(
        locations=locations_filter.get_locations())
    if request.method == 'POST':
        enumeration_area_form = EnumerationAreaForm(data=request.POST)
        if enumeration_area_form.is_valid():
            enumeration_area_form.save()
            messages.success(request, "Enumeration Area successfully created.")
            return HttpResponseRedirect(
                reverse('enumeration_area_home', args=()))
        messages.error(request, "Enumeration area was not created.")
    request.breadcrumbs([
        ('Enumeration Areas', reverse('enumeration_area_home')),
    ])
    return render(request,
                  'enumeration_area/new.html',
                  {'enumeration_area_form': enumeration_area_form,
                   'locations_filter': locations_filter,
                   'title': 'New Enumeration Area',
                   'button_label': 'Create',
                   'action': reverse('new_enumeration_area_page',
                                     args=()),
                   'location_filter_types': LocationType.in_between(),
                   'redirect_url': '/enumeration_area'})
def new(request):
    locations_filter = LocationsFilterForm(data=request.GET)
    enumeration_area_form = EnumerationAreaForm(
        locations=locations_filter.get_locations())
    if request.method == 'POST':
        enumeration_area_form = EnumerationAreaForm(data=request.POST)
        if enumeration_area_form.is_valid():
            enumeration_area_form.save()
            messages.success(request, "Enumeration Area successfully created.")
            return HttpResponseRedirect(
                reverse('enumeration_area_home', args=()))
        messages.error(request, "Enumeration area was not created.")
    request.breadcrumbs([
        ('Enumeration Areas', reverse('enumeration_area_home')),
    ])
    return render(
        request, 'enumeration_area/new.html', {
            'enumeration_area_form': enumeration_area_form,
            'locations_filter': locations_filter,
            'title': 'New Enumeration Area',
            'button_label': 'Create',
            'action': reverse('new_enumeration_area_page', args=()),
            'location_filter_types': LocationType.in_between(),
            'redirect_url': '/enumeration_area'
        })
Example #4
0
def _view_qset_data(request,
                    model_class,
                    interviews,
                    title,
                    disabled_fields=[]):
    params = request.GET if request.method == 'GET' else request.POST
    survey_filter = SurveyResultsFilterForm(model_class,
                                            disabled_fields=disabled_fields,
                                            data=params)
    locations_filter = LocationsFilterForm(data=request.GET, include_ea=True)
    selected_qset = None
    survey = None
    items_per_page = int(params.get('max_display_per_page', 50))
    try:
        page_index = int(params.get('page', 1)) - 1
    except BaseException:
        page_index = 0
    if survey_filter.is_valid():
        interviews = survey_filter.get_interviews(interviews=interviews)
        selected_qset = survey_filter.cleaned_data['question_set']
        survey = survey_filter.cleaned_data['survey']
    if locations_filter.is_valid():
        interviews = interviews.filter(
            ea__in=locations_filter.get_enumerations())
    search_fields = [
        'ea__name',
        'survey__name',
        'question_set__name',
        'answer__as_text',
    ]
    if 'q' in request.GET:
        interviews = get_filterset(interviews, request.GET['q'], search_fields)
    context = {
        'survey_filter': survey_filter,
        'interviews': interviews,
        'locations_filter': locations_filter,
        'location_filter_types': LocationType.in_between(),
        'placeholder': 'Response, EA, Survey, %s' % model_class.verbose_name(),
        'selected_qset': selected_qset,
        'model_class': model_class,
        'items_per_page': items_per_page,
        'max_display_per_page': items_per_page,
        'title': title
    }
    if selected_qset and survey:
        # page_start = page_index * items_per_page
        # interviews = interviews[page_start: page_start + items_per_page]()
        download_service = ResultsDownloadService(
            selected_qset,
            survey=survey,
            interviews=interviews,
            page_index=page_index,
            items_per_page=items_per_page)
        df = download_service.get_interview_answers()
        context['report'] = mark_safe(
            df.to_html(classes='table table-striped\
                    dataTable table-bordered table-hover table-sort',
                       max_rows=items_per_page))
    return render(request, 'question_set/view_all_data.html', context)
def location_filter(request):
    locations_filter = LocationsFilterForm(data=request.GET)
    locations = locations_filter.get_locations().values(
        'id',
        'name',
    ).order_by('name')
    json_dump = json.dumps(list(locations), cls=DjangoJSONEncoder)
    return HttpResponse(json_dump, content_type='application/json')
Example #6
0
def _create_or_edit(request, action_text, interviewer=None):
    request.breadcrumbs([
        ('Interviewers', reverse('interviewers_page')),
    ])
    title = 'New Interviewer'
    odk_instance = None
    data = request.GET
    if request.POST and request.POST.get('ea'):
        ea = get_object_or_404(EnumerationArea, pk=request.POST['ea'])
        data = dict([(loc.type.name, loc.pk) for loc in ea.parent_locations()])
    if interviewer:
        extra = 0
        title = 'Edit Interviewer'
        odk_accesses = interviewer.odk_access
        if odk_accesses.exists():
            odk_instance = odk_accesses[0]
        data = data or dict([(loc.type.name, loc.pk) for loc in interviewer.ea.parent_locations()])
    else:
        extra = 1
    locations_filter = LocationsFilterForm(data=data)
    if data:
        eas = locations_filter.get_enumerations()
    else:
        eas = EnumerationArea.objects.none()
    USSDAccessFormSet = inlineformset_factory(Interviewer, USSDAccess, form=USSDAccessForm, extra=extra)
    ussd_access_form = USSDAccessFormSet(prefix='ussd_access', instance=interviewer)
    response = None
    redirect_url = reverse('interviewers_page')
    odk_access_form = ODKAccessForm(instance=odk_instance)
    if request.method == 'POST':
        interviewer_form = InterviewerForm(eas, data=request.POST, instance=interviewer)
        ussd_access_form = USSDAccessFormSet(request.POST, prefix='ussd_access', instance=interviewer)
#         odk_access_form = ODKAccessFormSet(request.POST, prefix='odk_access', instance=interviewer)
        odk_access_form = ODKAccessForm(request.POST, instance=odk_instance)
        if interviewer_form.is_valid() and ussd_access_form.is_valid() and odk_access_form.is_valid():
            interviewer = interviewer_form.save()
            ussd_access_form.instance = interviewer
            ussd_access_form.save()
            odk_access = odk_access_form.save(commit=False) 
            odk_access.interviewer = interviewer
            odk_access.save()
            messages.success(request, "Interviewer successfully %sed." % action_text )
            return HttpResponseRedirect(redirect_url)
    else:
        interviewer_form = InterviewerForm(eas, instance=interviewer)
    loc_types = LocationType.in_between()
    return response or render(request, 'interviewers/interviewer_form.html', {'country_phone_code': COUNTRY_PHONE_CODE,
                                                                  'form': interviewer_form,
                                                                  'ussd_access_form' : ussd_access_form,
                                                                  'odk_access_form' : odk_access_form, 
                                                                  'title': title,
                                                                  'id': "create-interviewer-form",
                                                                  'class': 'interviewer-form',
                                                                  'button_label': "Save",
                                                                  'cancel_url': redirect_url,
                                                                  'locations_filter': locations_filter,
                                                                  'location_filter_types' : loc_types,
                                                                  'loading_text': "Creating..."})
Example #7
0
def save(request, instance=None):
    head = None
    if instance:
        handler = reverse('edit_household_page', args=(instance.pk, ))
        head = instance.get_head()
        heading = 'Edit Household'
        cancel_url = reverse('view_household_page', args=(instance.pk, ))
    else:
        handler = reverse('new_household_page')
        heading = 'New Household'
        cancel_url = reverse('list_household_page')
    locations_filter = LocationsFilterForm(data=request.GET, include_ea=True)
    householdform = HouseholdForm(instance=instance, eas=locations_filter.get_enumerations())
    headform = HouseholdHeadForm(instance=head)
    if request.method == 'POST':
        householdform = HouseholdForm(data=request.POST, instance=instance)
        headform = HouseholdHeadForm(data=request.POST, instance=head)
        if householdform.is_valid():
            household = householdform.save(commit=False)
            interviewer = household.last_registrar
            survey = SurveyAllocation.get_allocation(interviewer)
            if survey:
                survey_listing = SurveyHouseholdListing.get_or_create_survey_listing(interviewer, survey)
                household.listing = survey_listing.listing
                household.save()
                householdform = HouseholdForm()
                # import pdb; pdb.set_trace()
                if headform.is_valid():
                    head = headform.save(commit=False)
                    head.household = household
                    head.registrar = interviewer
                    head.survey_listing = survey_listing
                    head.registration_channel = WebAccess.choice_name()
                    head.save()
                    if household.head_desc is not head.surname:
                        household.head_desc = head.surname
                        household.save()
                    messages.info(request, 'Household %s saved successfully' % household.house_number)
                    return HttpResponseRedirect(reverse('view_household_page', args=(household.pk, )))
                handler = reverse('new_household_page')
            else:
                messages.error(request, 'No open survey for %s' % interviewer.name)
    context = {
               'headform': headform,
               'householdform': householdform,
               'action': handler,
                'cancel_url' : cancel_url,
               'heading':heading,
               'id': "create-household-form",
               'button_label': "Save",
               'loading_text': "Creating...",
               'locations_filter' : locations_filter}
    request.breadcrumbs([
        ('Households', reverse('list_household_page')),
    ])
    return render(request, 'households/new.html', context)
Example #8
0
def household_filter(request):
    locations_filter = LocationsFilterForm(request.GET, include_ea=True)
    enumeration_areas = locations_filter.get_enumerations()
    all_households = Household.objects.filter(ea__in=enumeration_areas).order_by('household_member__householdhead__surname')
    search_fields = ['house_number', 'listing__ea__name', 'last_registrar__name', 'listing__initial_survey__name', ]
    if request.GET.has_key('q'):
        all_households = get_filterset(all_households, request.GET['q'], search_fields)
    all_households =  all_households.values('id', 'house_number', ).order_by('name')
    json_dump = json.dumps(list(all_households), cls=DjangoJSONEncoder)
    return HttpResponse(json_dump, mimetype='application/json')
Example #9
0
def _view_qset_data(request, model_class, interviews,title, disabled_fields=[]):
    params = request.GET if request.method == 'GET' else request.POST
    survey_filter = SurveyResultsFilterForm(
        model_class, disabled_fields=disabled_fields, data=params)
    locations_filter = LocationsFilterForm(data=request.GET, include_ea=True)
    selected_qset = None
    survey = None
    items_per_page = int(params.get('max_display_per_page', 50))
    try:
        page_index = int(params.get('page', 1)) - 1
    except BaseException:
        page_index = 0
    if survey_filter.is_valid():
        interviews = survey_filter.get_interviews(interviews=interviews)
        selected_qset = survey_filter.cleaned_data['question_set']
        survey = survey_filter.cleaned_data['survey']
    if locations_filter.is_valid():
        interviews = interviews.filter(ea__in=locations_filter.get_enumerations())
    search_fields = [
        'ea__name',
        'survey__name',
        'question_set__name',
        'answer__as_text',
    ]
    if 'q' in request.GET:
        interviews = get_filterset(interviews, request.GET['q'], search_fields)
    context = {
        'survey_filter': survey_filter,
        'interviews': interviews,
        'locations_filter': locations_filter,
        'location_filter_types': LocationType.in_between(),
        'placeholder': 'Response, EA, Survey, %s' % model_class.verbose_name(),
        'selected_qset': selected_qset,
        'model_class': model_class,
        'items_per_page': items_per_page,
        'max_display_per_page': items_per_page,
        'title':title}
    if selected_qset and survey:
        # page_start = page_index * items_per_page
        # interviews = interviews[page_start: page_start + items_per_page]()
        download_service = ResultsDownloadService(
            selected_qset,
            survey=survey,
            interviews=interviews,
            page_index=page_index,
            items_per_page=items_per_page)
        df = download_service.get_interview_answers()
        context['report'] = mark_safe(
            df.to_html(
                classes='table table-striped\
                    dataTable table-bordered table-hover table-sort',
                max_rows=items_per_page))
    return render(request, 'question_set/view_all_data.html', context)
Example #10
0
def index(request):
    locations_filter = LocationsFilterForm(data=request.GET)
    enumeration_areas = locations_filter.get_enumerations()
    search_fields = ['name', 'locations__name', ]
    if request.GET.has_key('q'):
        enumeration_areas = get_filterset(enumeration_areas, request.GET['q'], search_fields)
    loc_types = LocationType.in_between()
    context = {'enumeration_areas': enumeration_areas,
               'locations_filter' : locations_filter,
               'location_filter_types' : loc_types,
               'placeholder': 'name, location name',
               'max_display_per_page': settings.MAX_DISPLAY_PER_PAGE}
    return render(request, "enumeration_area/index.html", context)
Example #11
0
def index(request):
    locations_filter = LocationsFilterForm(data=request.GET)
    enumeration_areas = locations_filter.get_enumerations()
    search_fields = ['name', 'locations__name', ]
    if request.GET.has_key('q'):
        enumeration_areas = get_filterset(enumeration_areas, request.GET['q'], search_fields)
    loc_types = LocationType.in_between()
    context = {'enumeration_areas': enumeration_areas,
               'locations_filter' : locations_filter,
               'location_filter_types' : loc_types,
               'placeholder': 'name, location name',
               'max_display_per_page': settings.MAX_DISPLAY_PER_PAGE}
    return render(request, "enumeration_area/index.html", context)
Example #12
0
def index(request):
    locations_filter = LocationsFilterForm(data=request.GET)
    enumeration_areas = locations_filter.get_enumerations()
    search_fields = ['name', 'locations__name', ]
    if 'q' in request.GET:
        enumeration_areas = get_filterset(
            enumeration_areas, request.GET['q'], search_fields)
    loc_types = LocationType.in_between()
    context = {'enumeration_areas': enumeration_areas,
               'locations_filter': locations_filter,
               'location_filter_types': loc_types,
               'placeholder': 'name, location name'}
    return render(request, "enumeration_area/index.html", context)
Example #13
0
def list_households(request):
    locations_filter = LocationsFilterForm(data=request.GET, include_ea=True)
    enumeration_areas = locations_filter.get_enumerations()
    households = Household.objects.filter(listing__ea__in=enumeration_areas).order_by('house_number')
    search_fields = ['house_number', 'listing__ea__name', 'last_registrar__name', 'listing__initial_survey__name', ]
    if request.GET.has_key('q'):
        households = get_filterset(households, request.GET['q'], search_fields)
    return render(request, 'households/index.html',
                  {'households': households, 
                   'locations_filter' : locations_filter, 
                   'location_filter_types' : LocationType.in_between(),
                   'Largest Unit' : LocationType.largest_unit(),
                   'placeholder': 'house no, ea, survey, interviewer',
                   'request': request})
Example #14
0
def simple_indicator(request, indicator_id):
    hierarchy_limit = 2
    selected_location = None
    params = request.GET or request.POST
    locations_filter = LocationsFilterForm(data=params)
    first_level_location_analyzed = Location.objects.filter(
        type__name__iexact="country")[0]
    indicator = Indicator.objects.get(id=indicator_id)
    formula = indicator.formula.all()
    if not formula:
        messages.error(request, "No formula was found in this indicator")
        return HttpResponseRedirect(reverse("list_indicator_page"))
    request.breadcrumbs([
        ('Indicator List', reverse('list_indicator_page')),
    ])
    if locations_filter.last_location_selected:
        first_level_location_analyzed = locations_filter.last_location_selected
        selected_location = first_level_location_analyzed
    formula = formula[0]
    indicator_service = SimpleIndicatorService(formula,
                                               first_level_location_analyzed)
    data_series, locations = indicator_service.get_location_names_and_data_series(
    )
    context = {
        'request': request,
        'data_series': data_series,
        'tabulated_data': indicator_service.tabulated_data_series(),
        'location_names': locations,
        'indicator': indicator,
        'locations_filter': locations_filter
    }
    return render(request, 'formula/simple_indicator.html', context)
Example #15
0
def list_weights(request):
    location_weights = LocationWeight.objects.all()
    surveys = Survey.objects.all()
    survey = None
    selected_location = None
    params = request.GET or request.POST
    location_filter_form = LocationsFilterForm(data=params)
    if contains_key(params, 'survey'):
        survey = Survey.objects.get(id=params['survey'])
        location_weights = location_weights.filter(survey=survey)
    if location_filter_form.last_location_selected:
        location_weights = location_weights.filter(
            location=location_filter_form.last_location_selected)

    location_types = LocationType.objects.exclude(name__iexact="country")
    context = {
        'location_weights': location_weights,
        'location_types': location_types,
        'locations_filter': location_filter_form,
        'surveys': surveys,
        'selected_survey': survey,
        'action': reverse('list_weights_page'),
        'request': request
    }
    return render(request, 'locations/weights/index.html', context)
Example #16
0
def show_interviewer_completion_summary(request):
    params = request.GET
    selected_location = None
    selected_ea = None
    interviewers = Interviewer.objects.order_by('id')
    search_fields = ['name', 'ea__name']
    if request.GET.has_key('q'):
        interviewers = get_filterset(interviewers, request.GET['q'], search_fields)
    if params.has_key('status'):
        interviewers = interviewers.intervieweraccess.filter(is_active=ast.literal_eval(params['status']))
    locations_filter = LocFilterForm(data=request.GET, include_ea=True)
    if locations_filter.is_valid():
        print 'locations count: ', locations_filter.get_enumerations().count()
        interviewers = interviewers.filter(ea__in=locations_filter.get_enumerations()).order_by('name')
    return render(request, 'aggregates/interviewers_summary.html',
                  {'interviewers': interviewers,
                    'locations_filter' : locations_filter,
                   'request': request})
Example #17
0
def download(request):
    survey_batch_filter_form = SurveyBatchFilterForm(data=request.GET)
    locations_filter = LocationsFilterForm(data=request.GET)
    last_selected_loc = locations_filter.last_location_selected
    if request.GET and request.GET.get('action'):
        survey_batch_filter_form = SurveyBatchFilterForm(data=request.GET)
        if survey_batch_filter_form.is_valid():
            batch = survey_batch_filter_form.cleaned_data['batch']
            survey = survey_batch_filter_form.cleaned_data['survey']
            multi_option = survey_batch_filter_form.cleaned_data[
                'multi_option']
            restricted_to = None
            if last_selected_loc:
                restricted_to = [
                    last_selected_loc,
                ]
            if request.GET.get('action') == 'Email Spreadsheet':
                composer = ResultComposer(
                    request.user,
                    ResultsDownloadService(batch=batch,
                                           survey=survey,
                                           restrict_to=restricted_to,
                                           multi_display=multi_option))
                send_mail.delay(composer)
                messages.warning(
                    request,
                    "Email would be sent to you shortly. This could take a while."
                )
            else:
                download_service = ResultsDownloadService(
                    batch=batch,
                    survey=survey,
                    restrict_to=restricted_to,
                    multi_display=multi_option)
                file_name = '%s%s' % (
                    '%s-%s-' %
                    (last_selected_loc.type.name, last_selected_loc.name)
                    if last_selected_loc else '',
                    batch.name if batch else survey.name)
                generate_result_link.delay(request.user, download_service,
                                           file_name)
                messages.warning(
                    request,
                    "Download is in progress. Download link would be available to you shortly"
                )
    loc_types = LocationType.in_between()
    return render(
        request, 'aggregates/download_excel.html', {
            'survey_batch_filter_form':
            survey_batch_filter_form,
            'locations_filter':
            locations_filter,
            'export_url':
            '%s?%s' % (reverse('excel_report'), request.META['QUERY_STRING']),
            'location_filter_types':
            loc_types
        })
def index(request):
    locations_filter = LocationsFilterForm(data=request.GET)
    enumeration_areas = locations_filter.get_enumerations()
    search_fields = [
        'name',
        'locations__name',
    ]
    if 'q' in request.GET:
        enumeration_areas = get_filterset(enumeration_areas, request.GET['q'],
                                          search_fields)
    loc_types = LocationType.in_between()
    context = {
        'enumeration_areas': enumeration_areas,
        'locations_filter': locations_filter,
        'location_filter_types': loc_types,
        'placeholder': 'name, location name'
    }
    return render(request, "enumeration_area/index.html", context)
Example #19
0
def show_interviewer_completion_summary(request):
    params = request.GET
    selected_location = None
    selected_ea = None
    interviewers = Interviewer.objects.order_by('id')
    search_fields = ['name', 'ea__name']
    if request.GET.has_key('q'):
        interviewers = get_filterset(interviewers, request.GET['q'], search_fields)
    if params.has_key('status'):
        interviewers = interviewers.intervieweraccess.filter(is_active=ast.literal_eval(params['status']))
    locations_filter = LocFilterForm(data=request.GET, include_ea=True)
    if locations_filter.is_valid():
        print 'locations count: ', locations_filter.get_enumerations().count()
        interviewers = interviewers.filter(ea__in=locations_filter.get_enumerations()).order_by('name')
    return render(request, 'aggregates/interviewers_summary.html',
                  {'interviewers': interviewers,
                    'locations_filter' : locations_filter,
                   'request': request})
Example #20
0
def list_interviewers(request):
    params = request.GET
    locations_filter = LocationsFilterForm(data=request.GET, include_ea=True)
    if locations_filter.is_valid():
        interviewers = Interviewer.objects.filter(ea__in=locations_filter.get_enumerations()).order_by('name')
    else:
        interviewers = Interviewer.objects.all()
    search_fields = ['name', 'intervieweraccess__user_identifier']
    if request.GET.has_key('q'):
        interviewers = get_filterset(interviewers, request.GET['q'], search_fields)
    if params.has_key('status'):
        interviewers = interviewers.filter(is_blocked=ast.literal_eval(params['status']))
    loc_types = LocationType.in_between()
    return render(request, 'interviewers/index.html',
                  {'interviewers': interviewers,
                   'locations_filter' : locations_filter,
                   'location_filter_types' : loc_types,
                   'placeholder': 'name, mobile numbers, odk id',
                   'request': request})
Example #21
0
def edit(request, ea_id):
    locations_filter = LocationsFilterForm(data=request.GET)
    ea = get_object_or_404(EnumerationArea, pk=ea_id)
    enumeration_area_form = EnumerationAreaForm(instance=ea, locations=locations_filter.get_locations())
    if request.method == 'POST':
        enumeration_area_form = EnumerationAreaForm(data=request.POST, instance=ea)

        if enumeration_area_form.is_valid():
            enumeration_area_form.save()
            messages.success(request, "Enumeration Area successfully Changed.")
            return HttpResponseRedirect(reverse('enumeration_area_home', args=()))
        messages.error(request, "Enumeration area was not Changed.")
    request.breadcrumbs([
        ('Enumeration Areas', reverse('enumeration_area_home')),
#         (_('%s %s') % (action.title(),model.title()),'/crud/%s/%s' % (model,action)),
    ])
    return render(request, 'enumeration_area/new.html',
                  {'enumeration_area_form': enumeration_area_form, 'locations_filter' : locations_filter, 'title': 'New Enumeration Area', 'button_label': 'Create',
                   'action': reverse('edit_enumeration_area_page', args=(ea_id, )), 
                   'location_filter_types' : LocationType.in_between(),
                   })
Example #22
0
def household_filter(request):
    locations_filter = LocationsFilterForm(request.GET, include_ea=True)
    enumeration_areas = locations_filter.get_enumerations()
    all_households = Household.objects.filter(
        ea__in=enumeration_areas).order_by(
            'household_member__householdhead__surname')
    search_fields = [
        'house_number',
        'listing__ea__name',
        'last_registrar__name',
        'listing__initial_survey__name',
    ]
    if request.GET.has_key('q'):
        all_households = get_filterset(all_households, request.GET['q'],
                                       search_fields)
    all_households = all_households.values(
        'id',
        'house_number',
    ).order_by('name')
    json_dump = json.dumps(list(all_households), cls=DjangoJSONEncoder)
    return HttpResponse(json_dump, content_type='application/json')
Example #23
0
def download_data(request, qset_id):
    qset = QuestionSet.get(pk=qset_id)
    params = request.GET if request.method == 'GET' else request.POST
    survey_filter = QuestionSetResultsFilterForm(qset, data=params)
    locations_filter = LocationsFilterForm(data=request.GET, include_ea=True)
    interviews = survey_filter.get_interviews()
    if locations_filter.is_valid():
        interviews = interviews.filter(
            ea__in=locations_filter.get_enumerations()).order_by('created')
    last_selected_loc = locations_filter.last_location_selected
    download_service = ResultsDownloadService(qset, interviews=interviews)
    file_name = '%s%s' % ('%s-%s-' %
                          (last_selected_loc.type.name, last_selected_loc.name)
                          if last_selected_loc else '', qset.name)
    reports_df = download_service.generate_interview_reports()
    response = HttpResponse(content_type='text/csv')
    response['Content-Disposition'] = 'attachment;\
        filename="%s.csv"' % file_name
    reports_df.to_csv(response,
                      date_format='%Y-%m-%d %H:%M:%S',
                      encoding='utf-8')  # exclude interview id
    return response
Example #24
0
def list_interviewers(request):
    params = request.GET
    locations_filter = LocationsFilterForm(data=request.GET, include_ea=True)
    if locations_filter.is_valid():
        interviewers = Interviewer.objects.filter(
            ea__in=locations_filter.get_enumerations())
    else:
        interviewers = Interviewer.objects.all()
    search_fields = ['name', 'intervieweraccess__user_identifier']
    if 'q' in request.GET:
        interviewers = get_filterset(
            interviewers, request.GET['q'], search_fields)
    if 'status' in params:
        interviewers = interviewers.filter(
            is_blocked=ast.literal_eval(params['status']))
    loc_types = LocationType.in_between()
    return render(request, 'interviewers/index.html',
                  {'interviewers': interviewers.order_by('name'),
                   'locations_filter': locations_filter,
                   'location_filter_types': loc_types,
                   'placeholder': 'name, mobile numbers, odk id',
                   'request': request})
Example #25
0
def list_households(request):
    locations_filter = LocationsFilterForm(data=request.GET, include_ea=True)
    enumeration_areas = locations_filter.get_enumerations()
    households = Household.objects.filter(
        listing__ea__in=enumeration_areas).order_by('house_number')
    search_fields = [
        'house_number',
        'listing__ea__name',
        'last_registrar__name',
        'listing__initial_survey__name',
    ]
    if request.GET.has_key('q'):
        households = get_filterset(households, request.GET['q'], search_fields)
    return render(
        request, 'households/index.html', {
            'households': households,
            'locations_filter': locations_filter,
            'location_filter_types': LocationType.in_between(),
            'Largest Unit': LocationType.largest_unit(),
            'placeholder': 'house no, ea, survey, interviewer',
            'request': request
        })
Example #26
0
def download_data(request, qset_id):
    qset = QuestionSet.get(pk=qset_id)
    params = request.GET if request.method == 'GET' else request.POST
    survey_filter = QuestionSetResultsFilterForm(qset, data=params)
    locations_filter = LocationsFilterForm(data=request.GET, include_ea=True)
    interviews = survey_filter.get_interviews()
    if locations_filter.is_valid():
        interviews = interviews.filter(
            ea__in=locations_filter.get_enumerations()).order_by('created')
    last_selected_loc = locations_filter.last_location_selected
    download_service = ResultsDownloadService(qset, interviews=interviews)
    file_name = '%s%s' % ('%s-%s-' % (
        last_selected_loc.type.name,
        last_selected_loc.name) if last_selected_loc else '',
        qset.name)
    reports_df = download_service.generate_interview_reports()
    response = HttpResponse(content_type='text/csv')
    response['Content-Disposition'] = 'attachment;\
        filename="%s.csv"' % file_name
    reports_df.to_csv(
        response,
        date_format='%Y-%m-%d %H:%M:%S',
        encoding='utf-8')  # exclude interview id
    return response
Example #27
0
 def test_locations_filter_form(self):
     ea = EnumerationArea.objects.last()
     location = ea.locations.first()
     ea_locations = location.get_ancestors(include_self=True)
     data = {location.type.name: location.id for location in ea_locations}
     location_filter = LocationsFilterForm(data=data)
     self.assertNotIn('enumeration_area', location_filter.fields)
     eas = location_filter.get_enumerations()
     # eas basically returns all EAs as per the immediate parent to the smallest unit
     self.assertEquals(
         eas.count(),
         EnumerationArea.objects.filter(
             locations__parent__in=ea_locations).distinct().count())
     self.assertEquals(eas.filter(id=ea.id).count(), 1)
     location_filter = LocationsFilterForm(data=data, include_ea=True)
     self.assertEquals(eas.filter(id=ea.id).count(), 1)
     self.assertIn('enumeration_area', location_filter.fields)
     data['enumeration_area'] = ea.id
     location_filter = LocationsFilterForm(data=data, include_ea=True)
     self.assertTrue(location_filter.is_valid())
     eas = location_filter.get_enumerations()
     self.assertEquals(eas.count(), 1)
Example #28
0
def _retrieve_data_frame(request, indicator_id):
    selected_location = Location.objects.get(parent__isnull=True)
    params = request.GET or request.POST
    locations_filter = LocationsFilterForm(data=params)
    first_level_location_analyzed = Location.objects.filter(
        type__name__iexact="country")[0]
    indicator = Indicator.objects.get(id=indicator_id)
    last_selected_loc = locations_filter.last_location_selected
    if last_selected_loc:
        selected_location = last_selected_loc
    report_locations = selected_location.get_children().order_by('name')
    context = {
        'request': request,
        'indicator': indicator,
        'locations_filter': locations_filter,
        'selected_location': selected_location,
        'report_locations': report_locations
    }
    return context, indicator.get_data(selected_location,
                                       report_level=selected_location.level +
                                       1)
Example #29
0
def location_filter(request):
    locations_filter = LocationsFilterForm(data=request.GET)
    locations = locations_filter.get_locations().values(
        'id', 'name', ).order_by('name')
    json_dump = json.dumps(list(locations), cls=DjangoJSONEncoder)
    return HttpResponse(json_dump, content_type='application/json')
Example #30
0
def download(request):
    request_data = request.GET if request.method == 'GET' else request.POST
    survey_batch_filter_form = SurveyBatchFilterForm(data=request_data)
    locations_filter = LocationsFilterForm(data=request_data)
    last_selected_loc = locations_filter.last_location_selected
    if request_data and request_data.get('action'):
        survey_batch_filter_form = SurveyBatchFilterForm(data=request_data)
        if survey_batch_filter_form.is_valid():
            batch = survey_batch_filter_form.cleaned_data['batch']
            survey = survey_batch_filter_form.cleaned_data['survey']
            multi_option = \
                survey_batch_filter_form.cleaned_data['multi_option']
            restricted_to = None
            if last_selected_loc:
                restricted_to = [
                    last_selected_loc,
                ]
            if request_data.get('action') == 'Email Spreadsheet':
                composer = ResultComposer(
                    request.user,
                    ResultsDownloadService(batch,
                                           survey=survey,
                                           restrict_to=restricted_to,
                                           multi_display=multi_option))
                send_mail.delay(composer)
                messages.warning(
                    request, "Email would be sent to\
                        you shortly. This could take a while.")
            else:
                download_service = ResultsDownloadService(
                    batch,
                    survey=survey,
                    restrict_to=restricted_to,
                    multi_display=multi_option)
                file_name = '%s%s' % (
                    '%s-%s-' %
                    (last_selected_loc.type.name, last_selected_loc.name)
                    if last_selected_loc else '',
                    batch.name if batch else survey.name)
                reports_df = download_service.generate_interview_reports()
                response = HttpResponse(content_type='application/zip')
                string_buf = StringIO()
                reports_df.to_csv(string_buf, columns=reports_df.columns[1:])
                string_buf.seek(0)
                file_contents = string_buf.read()
                string_buf.close()
                zip_file = InMemoryZip()
                zip_file = zip_file.append("%s.csv" % file_name, file_contents)
                response['Content-Disposition'] = 'attachment;\
                    filename=%s.zip' % file_name
                response.write(zip_file.read())
                # exclude interview id
                if not request.is_ajax():
                    messages.info(request, "Download successfully downloaded")
                return response
    loc_types = LocationType.in_between()
    return render(
        request, 'aggregates/download_excel.html', {
            'survey_batch_filter_form':
            survey_batch_filter_form,
            'locations_filter':
            locations_filter,
            'export_url':
            '%s?%s' % (reverse('excel_report'), request.META['QUERY_STRING']),
            'location_filter_types':
            loc_types
        })
Example #31
0
def enumeration_area_filter(request):
    locations_filter = LocationsFilterForm(data=request.GET)
    enumeration_areas = locations_filter.get_enumerations()
    eas =  enumeration_areas.values('id', 'name', ).order_by('name')
    json_dump = json.dumps(list(eas), cls=DjangoJSONEncoder)
    return HttpResponse(json_dump, mimetype='application/json')
Example #32
0
def _create_or_edit(
        request,
        action_text,
        interviewer_id=None,
        interviewer=None):
    extra = 1
    request.breadcrumbs([
        ('Interviewers', reverse('interviewers_page')),
    ])
    extra = 1
    title = 'New Interviewer'
    odk_instance = None
    # loc_data = request.GET if request.method == 'GET' else request.POST
    data = request.GET if request.method == 'GET' else request.POST
    if request.POST and request.POST.get('ea'):
        ea = get_object_or_404(EnumerationArea, pk=request.POST['ea'])
        data = dict([(loc.type.name, loc.pk) for loc in ea.parent_locations()])
    if interviewer:
        title = 'Edit Interviewer'
        odk_accesses = interviewer.odk_access
        if odk_accesses.exists():
            odk_instance = odk_accesses[0]
        data = data or dict([(loc.type.name, loc.pk)
                             for loc in interviewer.ea.parent_locations()])
        if interviewer.ussd_access.exists():
            extra = 0
    locations_filter = LocationsFilterForm(data=data)
    eas = EnumerationArea.objects.none()
    USSDAccessFormSet = inlineformset_factory(Interviewer, USSDAccess, form=USSDAccessForm, extra=extra)
    ussd_access_form = USSDAccessFormSet(prefix='ussd_access', instance=interviewer)
    response = None
    redirect_url = reverse('interviewers_page')
    odk_access_form = ODKAccessForm(instance=odk_instance)
    if request.method == 'POST':
        interviewer_form = InterviewerForm(eas, data=request.POST, instance=interviewer)
        ussd_access_form = USSDAccessFormSet(
            request.POST,
            prefix='ussd_access',
            instance=interviewer)
        odk_access_form = ODKAccessForm(request.POST, instance=odk_instance)
        if interviewer_form.is_valid() and odk_access_form.is_valid():
            interviewer = interviewer_form.save()
            ussd_access_form.instance = interviewer
            if ussd_access_form.is_valid():
                ussd_access_form.save()
                odk_access = odk_access_form.save(commit=False)
                odk_access.interviewer = interviewer
                odk_access.save()
                messages.success(
                    request, "Interviewer successfully %sed." % action_text)
            return HttpResponseRedirect(redirect_url)
    else:
        interviewer_form = InterviewerForm(eas, instance=interviewer)
    loc_types = LocationType.in_between()
    return response or render(request, 'interviewers/interviewer_form.html', {
        'form': interviewer_form,
        'ussd_access_form': ussd_access_form,
        'odk_access_form': odk_access_form,
        'title': title,
        'id': "create-interviewer-form",
        'class': 'interviewer-form',
        'button_label': "Save",
        'cancel_url': redirect_url,
        'locations_filter': locations_filter,
        'location_filter_types': loc_types,
        'loading_text': "Creating...",
        'mode': action_text,
        'interviewer_id': interviewer_id
    })
Example #33
0
def save(request, instance=None):
    head = None
    if instance:
        handler = reverse('edit_household_page', args=(instance.pk, ))
        head = instance.get_head()
        heading = 'Edit Household'
        cancel_url = reverse('view_household_page', args=(instance.pk, ))
    else:
        handler = reverse('new_household_page')
        heading = 'New Household'
        cancel_url = reverse('list_household_page')
    locations_filter = LocationsFilterForm(data=request.GET, include_ea=True)
    householdform = HouseholdForm(instance=instance,
                                  eas=locations_filter.get_enumerations())
    headform = HouseholdHeadForm(instance=head)
    if request.method == 'POST':
        householdform = HouseholdForm(data=request.POST, instance=instance)
        headform = HouseholdHeadForm(data=request.POST, instance=head)
        if householdform.is_valid():
            household = householdform.save(commit=False)
            interviewer = household.last_registrar
            survey = SurveyAllocation.get_allocation(interviewer)
            if survey:
                survey_listing = SurveyHouseholdListing.get_or_create_survey_listing(
                    interviewer, survey)
                household.listing = survey_listing.listing
                household.save()
                householdform = HouseholdForm()
                # import pdb; pdb.set_trace()
                if headform.is_valid():
                    head = headform.save(commit=False)
                    head.household = household
                    head.registrar = interviewer
                    head.survey_listing = survey_listing
                    head.registration_channel = WebAccess.choice_name()
                    head.save()
                    if household.head_desc is not head.surname:
                        household.head_desc = head.surname
                        household.save()
                    messages.info(
                        request, 'Household %s saved successfully' %
                        household.house_number)
                    return HttpResponseRedirect(
                        reverse('view_household_page', args=(household.pk, )))
                handler = reverse('new_household_page')
            else:
                messages.error(request,
                               'No open survey for %s' % interviewer.name)
    context = {
        'headform': headform,
        'householdform': householdform,
        'action': handler,
        'cancel_url': cancel_url,
        'heading': heading,
        'id': "create-household-form",
        'button_label': "Save",
        'loading_text': "Creating...",
        'locations_filter': locations_filter
    }
    request.breadcrumbs([
        ('Households', reverse('list_household_page')),
    ])
    return render(request, 'households/new.html', context)