Skip to content

Commit

Permalink
fix filters for indicator home
Browse files Browse the repository at this point in the history
  • Loading branch information
Greg Lind committed Dec 2, 2016
1 parent 37496af commit 51fda5f
Show file tree
Hide file tree
Showing 3 changed files with 69 additions and 23 deletions.
2 changes: 1 addition & 1 deletion indicators/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@
#ajax calls
url(r'^service/(?P<service>[-\w]+)/service_json/', 'indicators.views.service_json', name='service_json'),
url(r'^collected_data_table/(?P<indicator>[-\w]+)/(?P<program>[-\w]+)/', 'indicators.views.collected_data_json', name='collected_data_json'),
url(r'^program_indicators/(?P<program>[-\w]+)/', 'indicators.views.program_indicators_json', name='program_indicators_json'),
url(r'^program_indicators/(?P<program>[-\w]+)/(?P<indicator>[-\w]+)/(?P<type>[-\w]+)', 'indicators.views.program_indicators_json', name='program_indicators_json'),
url(r'^report_data/(?P<id>\w+)/(?P<program>\w+)/(?P<type>\w+)/$', IndicatorReportData.as_view(),name='indicator_report_data'),
url(r'^report_data/(?P<id>\w+)/(?P<program>\w+)/(?P<indicator_type>\w+)/export/$', IndicatorExport.as_view(),name='indicator_export'),
url(r'^collecteddata_report_data/(?P<program>\w+)/(?P<indicator>\w+)/(?P<type>\w+)/$', CollectedDataReportData.as_view(), name='collecteddata_report_data'),
Expand Down
76 changes: 61 additions & 15 deletions indicators/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,21 +53,48 @@ class IndicatorList(ListView):
def get(self, request, *args, **kwargs):

countries = getCountry(request.user)
getPrograms = Program.objects.all().filter(country__in=countries, funding_status="Funded").distinct()
getPrograms = Program.objects.all().filter(funding_status="Funded", country__in=countries).distinct()
getIndicators = Indicator.objects.all().filter(program__country__in=countries).exclude(collecteddata__isnull=True)
getIndicatorTypes = IndicatorType.objects.all()
program = self.kwargs['program']
indicator = self.kwargs['indicator']
type = self.kwargs['type']
indicator_name = ""
type_name = ""
program_name = ""

print int(self.kwargs['program'])
q = {'id__isnull': False}
# if we have a program filter active
if int(program) != 0:
q = {
'id': program,
}
# redress the indicator list based on program
getIndicators = Indicator.objects.select_related().filter(program=program)
program_name = Program.objects.get(id=program)
# if we have an indicator type active
if int(type) != 0:
r = {
'indicator__indicator_type__id': type,
}
q.update(r)
# redress the indicator list based on type
getIndicators = Indicator.objects.select_related().filter(indicator_type__id=type)
type_name = IndicatorType.objects.get(id=type).indicator_type
# if we have an indicator id append it to the query filter
if int(indicator) != 0:
s = {
'indicator': indicator,
}
q.update(s)
indicator_name = Indicator.objects.get(id=indicator)

if int(self.kwargs['program']) != 0:
getProgramsIndicator = Program.objects.all().filter(id=self.kwargs['program']).order_by('name').annotate(indicator_count=Count('indicator'))
elif int(self.kwargs['indicator']) != 0:
getProgramsIndicator = Program.objects.all().filter(indicator=self.kwargs['indicator']).order_by('name').annotate(indicator_count=Count('indicator'))
elif int(self.kwargs['type']) != 0:
getProgramsIndicator = Program.objects.all().filter(indicator__indicator_type=self.kwargs['type']).order_by('name').annotate(indicator_count=Count('indicator'))
else:
getProgramsIndicator = Program.objects.all().filter(funding_status="Funded", country__in=countries).order_by('name').annotate(indicator_count=Count('indicator'))
indicators = Program.objects.all().filter(country__in=countries).filter(**q).order_by('name','indicator__number').annotate(indicator_count=Count('indicator'))

return render(request, self.template_name, {'getPrograms': getPrograms, 'getProgramsIndicator': getProgramsIndicator, 'getIndicatorTypes': getIndicatorTypes})
return render(request, self.template_name, {'getPrograms': getPrograms,'getIndicators':getIndicators,
'program_name':program_name, 'indicator_name':indicator_name,
'type_name':type_name, 'program':program, 'indicator': indicator, 'type': type,
'getProgramsIndicator': indicators, 'getIndicatorTypes': getIndicatorTypes})


def import_indicator(service=1,deserialize=True):
Expand Down Expand Up @@ -637,8 +664,6 @@ def get(self, request, *args, **kwargs):
q.update(s)
indicator_name = Indicator.objects.get(id=indicator)

print q

indicators = CollectedData.objects.all().prefetch_related('evidence', 'indicator', 'program',
'indicator__objectives',
'indicator__strategic_objectives').filter(
Expand Down Expand Up @@ -992,7 +1017,7 @@ def collected_data_json(AjaxableResponseMixin, indicator,program):
'indicator_id': indicator, 'program_id': program})


def program_indicators_json(AjaxableResponseMixin,program):
def program_indicators_json(AjaxableResponseMixin,program,indicator,type):
"""
Displayed on the Indicator home page as a table of indicators related to a Program
Called from Program "Indicator" button onClick
Expand All @@ -1001,7 +1026,28 @@ def program_indicators_json(AjaxableResponseMixin,program):
:return: List of Indicators and the Program they are related to
"""
template_name = 'indicators/program_indicators_table.html'
indicators = Indicator.objects.all().filter(program=program).annotate(data_count=Count('collecteddata'))

q = {'program__id__isnull': False}
# if we have a program filter active
if int(program) != 0:
q = {
'program__id': program,
}
# if we have an indicator type active
if int(type) != 0:
r = {
'indicator_type__id': type,
}
q.update(r)
# if we have an indicator id append it to the query filter
if int(indicator) != 0:
s = {
'id': indicator,
}
q.update(s)
print q

indicators = Indicator.objects.all().filter(**q).annotate(data_count=Count('collecteddata'))
return render_to_response(template_name, {'indicators': indicators, 'program_id': program})


Expand Down
14 changes: 7 additions & 7 deletions templates/indicators/indicator_list.html
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,10 @@
/*
* Load the collected data for an indicator on the results page
*/
function loadIndicators(program){
function loadIndicators(program,indicator,type){
var program;
$('.ajaxLoader').show();
$.get('/indicators/program_indicators/' + program + '/', function(data){
$.get('/indicators/program_indicators/' + program + '/' + indicator + '/' + type + '/', function(data){
$('#hidden-' + program).html(data);
});
$('.ajaxLoader').hide();
Expand Down Expand Up @@ -50,7 +50,7 @@ <h4>No Indicators have been entered for this program</h4>
</div>
{% else %}
<div class='panel-body'>
<a onclick="loadIndicators({{ program.id }})" class="btn btn-sm btn-success" data-toggle="collapse" data-target="#hidden-{{ program.id }}">{{ program.indicator_count }} Indicators </a>
<a onclick="loadIndicators({{ program.id }},{{indicator}},{{type}})" class="btn btn-sm btn-success" data-toggle="collapse" data-target="#hidden-{{ program.id }}">{{ program.indicator_count }} Indicators </a>
</div>
<div id="hidden-{{ program.id }}" class="accordian-body collapse">
{% include "indicators/program_indicators_table.html" %}
Expand All @@ -67,12 +67,12 @@ <h4>No Indicators have been entered for this program</h4>
window.location.href = '/indicators/home/'+program_id+'/0/0/';
}

function indicator_filter(indicator) {
window.location.href = '/indicators/home/0/'+indicator+'/0';
function indicator_filter(program,indicator,type) {
window.location.href = '/indicators/home/'+program+'/'+indicator+'/'+type;
}

function indicator_type_filter(type) {
window.location.href = '/indicators/home/0/0/'+type;
function indicator_type_filter(program,indicator,type) {
window.location.href = '/indicators/home/'+program+'/'+indicator+'/'+type;
}
</script>
{% endblock content %}

0 comments on commit 51fda5f

Please sign in to comment.