From 986e7f371d636760f92aa47663193903a75c3a50 Mon Sep 17 00:00:00 2001 From: aniversarioperu Date: Mon, 13 Jul 2015 12:12:00 +0300 Subject: [PATCH 1/6] por bancada en forms --- proyectos_de_ley/search_advanced/forms.py | 25 +++++++++++++------ .../templates/search_advanced/index.html | 11 ++++++++ 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/proyectos_de_ley/search_advanced/forms.py b/proyectos_de_ley/search_advanced/forms.py index 16eed16..f3120c8 100644 --- a/proyectos_de_ley/search_advanced/forms.py +++ b/proyectos_de_ley/search_advanced/forms.py @@ -2,6 +2,7 @@ from django import forms +from pdl.models import Proyecto from pdl.models import Slug @@ -56,6 +57,23 @@ class SearchAdvancedForm(forms.Form): ('Vivienda', 'Vivienda'), ] ) + congresista = forms.ModelChoiceField( + Slug.objects.all().order_by('nombre'), + label='Búsqueda por author de proyecto de ley.', + required=False, + empty_label='--Escoger nombre--', + widget=forms.Select(attrs={'class': 'form-control'}), + ) + grupo_parlamentario = forms.ModelChoiceField( + Proyecto.objects.filter( + grupo_parlamentario__isnull=False).exclude( + grupo_parlamentario='').values_list( + 'grupo_parlamentario', flat=True).order_by('grupo_parlamentario').distinct(), + label='Búsqueda por grupo parlamentario.', + required=False, + empty_label='--Escoger bancada--', + widget=forms.Select(attrs={'class': 'form-control'}), + ) dispensados_2da_votacion = forms.ChoiceField( widget=forms.Select(attrs={'class': 'form-control'}), label='Dispensados 2da votación', @@ -80,10 +98,3 @@ class SearchAdvancedForm(forms.Form): ('Exonerados de dictamen', 'Exonerados de dictamen'), ] ) - congresista = forms.ModelChoiceField( - Slug.objects.all().order_by('nombre'), - label='Búsqueda por author de proyecto de ley.', - required=False, - empty_label='--Escoger nombre--', - widget=forms.Select(attrs={'class': 'form-control'}), - ) diff --git a/proyectos_de_ley/search_advanced/templates/search_advanced/index.html b/proyectos_de_ley/search_advanced/templates/search_advanced/index.html index e1f1ac6..4a38a4d 100644 --- a/proyectos_de_ley/search_advanced/templates/search_advanced/index.html +++ b/proyectos_de_ley/search_advanced/templates/search_advanced/index.html @@ -91,6 +91,17 @@

Por congresista

+
+
+

Por grupo parlamentario

+
+ +
+ {{ form.grupo_parlamentario }}  +
+
+ +
From 413790d072a93cd130295c3e7b9fe815ec2d1056 Mon Sep 17 00:00:00 2001 From: aniversarioperu Date: Mon, 13 Jul 2015 14:11:12 +0300 Subject: [PATCH 2/6] fixed view --- proyectos_de_ley/search_advanced/forms.py | 17 +++++++++------ proyectos_de_ley/search_advanced/views.py | 25 +++++++++++++++++++++++ 2 files changed, 36 insertions(+), 6 deletions(-) diff --git a/proyectos_de_ley/search_advanced/forms.py b/proyectos_de_ley/search_advanced/forms.py index f3120c8..0118696 100644 --- a/proyectos_de_ley/search_advanced/forms.py +++ b/proyectos_de_ley/search_advanced/forms.py @@ -64,16 +64,21 @@ class SearchAdvancedForm(forms.Form): empty_label='--Escoger nombre--', widget=forms.Select(attrs={'class': 'form-control'}), ) - grupo_parlamentario = forms.ModelChoiceField( - Proyecto.objects.filter( - grupo_parlamentario__isnull=False).exclude( - grupo_parlamentario='').values_list( - 'grupo_parlamentario', flat=True).order_by('grupo_parlamentario').distinct(), + + tmp = Proyecto.objects.filter( + grupo_parlamentario__isnull=False).exclude( + grupo_parlamentario='').values_list( + 'grupo_parlamentario', flat=True).order_by('grupo_parlamentario').distinct() + choices = [('--Escoger bancada--', '--Escoger bancada--',)] + for i in tmp: + choices.append((i, i,)) + grupo_parlamentario = forms.ChoiceField( + choices=choices, label='Búsqueda por grupo parlamentario.', required=False, - empty_label='--Escoger bancada--', widget=forms.Select(attrs={'class': 'form-control'}), ) + dispensados_2da_votacion = forms.ChoiceField( widget=forms.Select(attrs={'class': 'form-control'}), label='Dispensados 2da votación', diff --git a/proyectos_de_ley/search_advanced/views.py b/proyectos_de_ley/search_advanced/views.py index fb18e1f..63b21ed 100644 --- a/proyectos_de_ley/search_advanced/views.py +++ b/proyectos_de_ley/search_advanced/views.py @@ -24,6 +24,11 @@ def index(request): name = form.cleaned_data['congresista'] return search_by_congresista(form, request, name) + if form.cleaned_data['grupo_parlamentario'].strip() != '' \ + and form.cleaned_data['grupo_parlamentario'] is not None: + name = form.cleaned_data['grupo_parlamentario'] + return search_by_grupo_parlamentario(form, request, name) + # requests from stats view if form.cleaned_data['dictamen'] == 'NÚMERO TOTAL DE LEYES': return search_total_leyes(form, request) @@ -50,6 +55,7 @@ def index(request): "form": form, }) else: + print(form.errors) return render(request, "search_advanced/index.html", { "form": form, }) @@ -268,3 +274,22 @@ def search_by_congresista(form, request, name): "form": form, "comision": obj['comision'], }) + + +def search_by_grupo_parlamentario(form, request, name): + projects = Proyecto.objects.filter(grupo_parlamentario=name).order_by('-codigo') + + obj = do_pagination(request, projects, search=True, advanced_search=True) + return render(request, "search_advanced/index.html", { + "result_count": len(projects), + "extra_result_msg": "Proyectos de la bancada {}".format(name), + "items": obj['items'], + "pretty_items": obj['pretty_items'], + "first_half": obj['first_half'], + "second_half": obj['second_half'], + "first_page": obj['first_page'], + "last_page": obj['last_page'], + "current": obj['current'], + "form": form, + "comision": obj['comision'], + }) From d0b025dac50668800a37ff959c1902f9dd1bfe03 Mon Sep 17 00:00:00 2001 From: aniversarioperu Date: Mon, 13 Jul 2015 15:34:21 +0300 Subject: [PATCH 3/6] busqueda por congresista y bancada, fixes #23 --- a.html | 314 ++++++++++++++++++++++ proyectos_de_ley/search_advanced/views.py | 1 - 2 files changed, 314 insertions(+), 1 deletion(-) create mode 100644 a.html diff --git a/a.html b/a.html new file mode 100644 index 0000000..ac5d1be --- /dev/null +++ b/a.html @@ -0,0 +1,314 @@ + + + + + + + + + + + + Proyecto de ley | Búsqueda avanzada + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+ +
+
+

Búsqueda avanzada

+
+
+ + +
+
+
+

Por fecha de presentación

+
+
+ + + +
+ + + + + + +
+ + + +
+ + + + + + +
+ +
+
+ + +
+
+

Por comisiones

+
+ +
+   +
+
+ + +
+
+

Por congresista

+
+ +
+   +
+
+ + +
+
+

Por grupo parlamentario

+
+ +
+   +
+
+ + +
+
+
+
+ +
+
+
+ + + +
+ + + +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + diff --git a/proyectos_de_ley/search_advanced/views.py b/proyectos_de_ley/search_advanced/views.py index 63b21ed..365cc8d 100644 --- a/proyectos_de_ley/search_advanced/views.py +++ b/proyectos_de_ley/search_advanced/views.py @@ -13,7 +13,6 @@ def index(request): if request.method == 'GET': form = forms.SearchAdvancedForm(request.GET) if form.is_valid(): - print(form.cleaned_data) if form.cleaned_data['date_from'] is not None: return search_by_date(form, request) From 7fe6b6e7c36c538870210d39d306b52f940d4d5b Mon Sep 17 00:00:00 2001 From: aniversarioperu Date: Mon, 13 Jul 2015 16:17:40 +0300 Subject: [PATCH 4/6] usar busqueda combinada --- proyectos_de_ley/search_advanced/views.py | 73 ++++++++++++++++++----- 1 file changed, 59 insertions(+), 14 deletions(-) diff --git a/proyectos_de_ley/search_advanced/views.py b/proyectos_de_ley/search_advanced/views.py index 365cc8d..7a29986 100644 --- a/proyectos_de_ley/search_advanced/views.py +++ b/proyectos_de_ley/search_advanced/views.py @@ -13,20 +13,9 @@ def index(request): if request.method == 'GET': form = forms.SearchAdvancedForm(request.GET) if form.is_valid(): - if form.cleaned_data['date_from'] is not None: - return search_by_date(form, request) - - if form.cleaned_data['comision'].strip() != '' and form.cleaned_data['comision'] != '---': - return search_by_comission(form, request) - - if form.cleaned_data['congresista'] is not None: - name = form.cleaned_data['congresista'] - return search_by_congresista(form, request, name) - - if form.cleaned_data['grupo_parlamentario'].strip() != '' \ - and form.cleaned_data['grupo_parlamentario'] is not None: - name = form.cleaned_data['grupo_parlamentario'] - return search_by_grupo_parlamentario(form, request, name) + keywords = clean_keywords_for_combined_search(form.cleaned_data) + if len(keywords) > 0: + return combined_search(keywords, form, request) # requests from stats view if form.cleaned_data['dictamen'] == 'NÚMERO TOTAL DE LEYES': @@ -60,6 +49,62 @@ def index(request): }) +def clean_keywords_for_combined_search(cleaned_data): + keywords = {} + for k, v in cleaned_data.items(): + if v != '' and v is not None: + if v in ['---', '--Escoger bancada--']: + continue + if k in ['dispensados_2da_votacion', 'dictamen']: + continue + keywords[k] = v + return keywords + + +def combined_search(keywords, form, request): + print(keywords) + queryset = Proyecto.objects.all().order_by('-codigo') + if 'date_to' and 'date_from' in keywords: + queryset = queryset.filter(fecha_presentacion__range=(keywords['date_from'], keywords['date_to'])) + if 'congresista' in keywords: + queryset = queryset.filter(congresistas__icontains=keywords['congresista']) + if 'grupo_parlamentario' in keywords: + queryset = queryset.filter(grupo_parlamentario=keywords['grupo_parlamentario']) + if 'comision' in keywords: + queryset = filter_by_comision(keywords, queryset) + + obj = do_pagination(request, queryset, search=True, advanced_search=True) + return render(request, "search_advanced/index.html", { + "items": obj['items'], + "pretty_items": obj['pretty_items'], + "first_half": obj['first_half'], + "second_half": obj['second_half'], + "first_page": obj['first_page'], + "last_page": obj['last_page'], + "current": obj['current'], + "form": form, + }) + + +def filter_by_comision(keywords, queryset): + comision = keywords['comision'] + if comision.lower() == 'ciencia': + comision = 'Ciencia' + seguimientos_queryset = Seguimientos.objects.order_by('-proyecto_id') + proyectos = queryset.order_by('-codigo') + proyects_found = [] + this_proyecto_id = '' + for i in seguimientos_queryset: + if i.proyecto_id != this_proyecto_id: + if comision in i.evento: + for proyecto in proyectos: + if i.proyecto_id == proyecto.id: + proyects_found.append(proyecto) + continue + this_proyecto_id = i.proyecto_id + return proyects_found + + def search_by_date(form, request): date_from = form.cleaned_data['date_from'] date_to = form.cleaned_data['date_to'] From 1a30405c9100f14a0ffab5864cb71a9ae1f153fe Mon Sep 17 00:00:00 2001 From: aniversarioperu Date: Mon, 13 Jul 2015 16:23:45 +0300 Subject: [PATCH 5/6] reportar numero de proyectos encontrados y mensaje --- proyectos_de_ley/search_advanced/views.py | 98 +++-------------------- 1 file changed, 9 insertions(+), 89 deletions(-) diff --git a/proyectos_de_ley/search_advanced/views.py b/proyectos_de_ley/search_advanced/views.py index 7a29986..2f5a1cd 100644 --- a/proyectos_de_ley/search_advanced/views.py +++ b/proyectos_de_ley/search_advanced/views.py @@ -65,16 +65,25 @@ def combined_search(keywords, form, request): print(keywords) queryset = Proyecto.objects.all().order_by('-codigo') if 'date_to' and 'date_from' in keywords: + msg = "Número de proyectos entre fecha indicada" queryset = queryset.filter(fecha_presentacion__range=(keywords['date_from'], keywords['date_to'])) if 'congresista' in keywords: + msg = "Número de proyectos de congresista {}".format(keywords['congresista']) queryset = queryset.filter(congresistas__icontains=keywords['congresista']) if 'grupo_parlamentario' in keywords: + msg = "Número de proyectos de bancada {}".format(keywords['grupo_parlamentario']) queryset = queryset.filter(grupo_parlamentario=keywords['grupo_parlamentario']) if 'comision' in keywords: + msg = "Número de proyectos de comisión {}".format(keywords['comision']) queryset = filter_by_comision(keywords, queryset) + if len(keywords) > 1: + msg = "Número de proyectos encontrados" + obj = do_pagination(request, queryset, search=True, advanced_search=True) return render(request, "search_advanced/index.html", { + "result_count": len(queryset), + "extra_result_msg": msg, "items": obj['items'], "pretty_items": obj['pretty_items'], "first_half": obj['first_half'], @@ -105,57 +114,6 @@ def filter_by_comision(keywords, queryset): return proyects_found -def search_by_date(form, request): - date_from = form.cleaned_data['date_from'] - date_to = form.cleaned_data['date_to'] - queryset = Proyecto.objects.filter( - fecha_presentacion__range=(date_from, date_to)).order_by('-codigo') - obj = do_pagination(request, queryset, search=True, advanced_search=True) - return render(request, "search_advanced/index.html", { - "items": obj['items'], - "pretty_items": obj['pretty_items'], - "first_half": obj['first_half'], - "second_half": obj['second_half'], - "first_page": obj['first_page'], - "last_page": obj['last_page'], - "current": obj['current'], - "form": form, - "date_from": convert_date_to_string(date_from), - "date_to": convert_date_to_string(date_to), - }) - - -def search_by_comission(form, request): - comision = form.cleaned_data['comision'] - if comision.lower() == 'ciencia': - comision = 'Ciencia' - queryset = Seguimientos.objects.order_by('-proyecto_id') - proyectos = Proyecto.objects.order_by('-codigo') - proyects_found = [] - this_proyecto_id = '' - for i in queryset: - if i.proyecto_id != this_proyecto_id: - if comision in i.evento: - for proyecto in proyectos: - if i.proyecto_id == proyecto.id: - proyects_found.append(proyecto) - continue - this_proyecto_id = i.proyecto_id - obj = do_pagination(request, proyects_found, search=True, - advanced_search=True) - return render(request, "search_advanced/index.html", { - "items": obj['items'], - "pretty_items": obj['pretty_items'], - "first_half": obj['first_half'], - "second_half": obj['second_half'], - "first_page": obj['first_page'], - "last_page": obj['last_page'], - "current": obj['current'], - "form": form, - "comision": obj['comision'], - }) - - def search_dispensados_todos(form, request): total_dispensed = [i.proyecto for i in Seguimientos.objects.select_related('proyecto').filter( evento__icontains='dispensado 2da')] @@ -299,41 +257,3 @@ def search_dispensados_otros(form, request): "form": form, "comision": obj['comision'], }) - - -def search_by_congresista(form, request, name): - projects = Proyecto.objects.filter(congresistas__icontains=name).order_by('-codigo') - - obj = do_pagination(request, projects, search=True, advanced_search=True) - return render(request, "search_advanced/index.html", { - "result_count": len(projects), - "extra_result_msg": "Proyectos de congresista {}".format(name), - "items": obj['items'], - "pretty_items": obj['pretty_items'], - "first_half": obj['first_half'], - "second_half": obj['second_half'], - "first_page": obj['first_page'], - "last_page": obj['last_page'], - "current": obj['current'], - "form": form, - "comision": obj['comision'], - }) - - -def search_by_grupo_parlamentario(form, request, name): - projects = Proyecto.objects.filter(grupo_parlamentario=name).order_by('-codigo') - - obj = do_pagination(request, projects, search=True, advanced_search=True) - return render(request, "search_advanced/index.html", { - "result_count": len(projects), - "extra_result_msg": "Proyectos de la bancada {}".format(name), - "items": obj['items'], - "pretty_items": obj['pretty_items'], - "first_half": obj['first_half'], - "second_half": obj['second_half'], - "first_page": obj['first_page'], - "last_page": obj['last_page'], - "current": obj['current'], - "form": form, - "comision": obj['comision'], - }) From 8b5b09c86af56172ca8fa0c1b9964674fc20c824 Mon Sep 17 00:00:00 2001 From: aniversarioperu Date: Mon, 13 Jul 2015 16:52:05 +0300 Subject: [PATCH 6/6] fixed view to accomdate error when no results found --- .../templates/search_advanced/index.html | 13 +++++++- proyectos_de_ley/search_advanced/views.py | 33 +++++++++++-------- 2 files changed, 32 insertions(+), 14 deletions(-) diff --git a/proyectos_de_ley/search_advanced/templates/search_advanced/index.html b/proyectos_de_ley/search_advanced/templates/search_advanced/index.html index 4a38a4d..c29ee76 100644 --- a/proyectos_de_ley/search_advanced/templates/search_advanced/index.html +++ b/proyectos_de_ley/search_advanced/templates/search_advanced/index.html @@ -29,11 +29,22 @@

Búsqueda avanzada

+ + {% if info_msg %} +
+
+

{{ info_msg }}

+
+
+ {% endif %} + +

Por fecha de presentación

-
+ +
{{ form.non_field_errors }} {% if form.date_from.errors %} diff --git a/proyectos_de_ley/search_advanced/views.py b/proyectos_de_ley/search_advanced/views.py index 2f5a1cd..489b32b 100644 --- a/proyectos_de_ley/search_advanced/views.py +++ b/proyectos_de_ley/search_advanced/views.py @@ -63,6 +63,7 @@ def clean_keywords_for_combined_search(cleaned_data): def combined_search(keywords, form, request): print(keywords) + msg = '' queryset = Proyecto.objects.all().order_by('-codigo') if 'date_to' and 'date_from' in keywords: msg = "Número de proyectos entre fecha indicada" @@ -80,19 +81,25 @@ def combined_search(keywords, form, request): if len(keywords) > 1: msg = "Número de proyectos encontrados" - obj = do_pagination(request, queryset, search=True, advanced_search=True) - return render(request, "search_advanced/index.html", { - "result_count": len(queryset), - "extra_result_msg": msg, - "items": obj['items'], - "pretty_items": obj['pretty_items'], - "first_half": obj['first_half'], - "second_half": obj['second_half'], - "first_page": obj['first_page'], - "last_page": obj['last_page'], - "current": obj['current'], - "form": form, - }) + if len(queryset) > 0: + obj = do_pagination(request, queryset, search=True, advanced_search=True) + return render(request, "search_advanced/index.html", { + "result_count": len(queryset), + "extra_result_msg": msg, + "items": obj['items'], + "pretty_items": obj['pretty_items'], + "first_half": obj['first_half'], + "second_half": obj['second_half'], + "first_page": obj['first_page'], + "last_page": obj['last_page'], + "current": obj['current'], + "form": form, + }) + else: + return render(request, "search_advanced/index.html", { + "form": form, + "info_msg": 'No se encontraron resultados para esa combinación de términos de búsqueda', + }) def filter_by_comision(keywords, queryset):