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(), })
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' })
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')
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..."})
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)
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')
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 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)
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)
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})
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)
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)
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})
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)
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})
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(), })
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')
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
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})
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 })
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
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)
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)
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 })
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')
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 })
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)