From c8f2ca52f8d3321fcf6cd191d456aa0806042dae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Rodrigues?= Date: Tue, 26 Nov 2019 18:24:49 -0300 Subject: [PATCH] Add crud bancada, parlamentarbancada --- sapl/parlamentares/views.py | 174 +++++++++++++++++++----------------- 1 file changed, 93 insertions(+), 81 deletions(-) diff --git a/sapl/parlamentares/views.py b/sapl/parlamentares/views.py index 7117b3a3e..0058af3dc 100644 --- a/sapl/parlamentares/views.py +++ b/sapl/parlamentares/views.py @@ -1,11 +1,15 @@ -from datetime import datetime import json import logging +from datetime import datetime +from django_filters.views import FilterView +from image_cropping.utils import get_backend + from django.contrib import messages from django.contrib.auth.mixins import PermissionRequiredMixin from django.contrib.contenttypes.models import ContentType -from django.core.exceptions import MultipleObjectsReturned, ObjectDoesNotExist +from django.core.exceptions import (ObjectDoesNotExist, + MultipleObjectsReturned) from django.core.urlresolvers import reverse, reverse_lazy from django.db.models import F, Q from django.db.models.aggregates import Count @@ -19,33 +23,37 @@ from django.utils.translation import ugettext_lazy as _ from django.views.decorators.clickjacking import xframe_options_exempt from django.views.generic import FormView from django.views.generic.edit import UpdateView -from django_filters.views import FilterView -from image_cropping.utils import get_backend - -from sapl.base.forms import SessaoLegislativaForm, PartidoForm, PartidoUpdateForm +from sapl.base.forms import (PartidoForm, PartidoUpdateForm, + SessaoLegislativaForm) from sapl.base.models import Autor from sapl.comissoes.models import Participacao -from sapl.crud.base import (RP_CHANGE, RP_DETAIL, RP_LIST, Crud, CrudAux, +from sapl.crud.base import (Crud, CrudAux, CrudBaseForListAndDetailExternalAppView, - MasterDetailCrud, make_pagination) + make_pagination, MasterDetailCrud, + RP_CHANGE, RP_DETAIL, RP_LIST) from sapl.materia.models import Autoria, Proposicao, Relatoria from sapl.parlamentares.apps import AppConfig -from sapl.utils import (parlamentares_ativos, show_results_filter_set) +from sapl.utils import parlamentares_ativos, show_results_filter_set -from .forms import (FiliacaoForm, FrenteForm, LegislaturaForm, MandatoForm, - ParlamentarCreateForm, ParlamentarForm, VotanteForm, - ParlamentarFilterSet, VincularParlamentarForm, - BlocoForm, CargoBlocoForm, CargoBlocoPartidoForm, - BancadaForm, AfastamentoParlamentarForm, ParlamentarFrenteForm) +from .forms import (AfastamentoParlamentarForm, BancadaForm, BlocoForm, + CargoBlocoForm, CargoBlocoPartidoForm, FiliacaoForm, + FrenteForm, LegislaturaForm, MandatoForm, + ParlamentarBancadaForm, ParlamentarCreateForm, + ParlamentarFilterSet, ParlamentarForm, + ParlamentarFrenteForm, VincularParlamentarForm, + VotanteForm) -from .models import (Bancada, CargoBancada, CargoMesa, Coligacao, ComposicaoColigacao, ComposicaoMesa, - Dependente, Filiacao, Frente, Legislatura, Mandato, - NivelInstrucao, Parlamentar, Partido, SessaoLegislativa, - SituacaoMilitar, TipoAfastamento, TipoDependente, Votante, - Bloco, CargoBlocoPartido, HistoricoPartido, CargoBloco, - ParlamentarFrente, AfastamentoParlamentar, CargoFrente) +from .models import (AfastamentoParlamentar, Bancada, Bloco, + CargoBancada, CargoBloco, CargoBlocoPartido, + CargoFrente, CargoMesa, Coligacao, + ComposicaoColigacao, ComposicaoMesa, Dependente, + Filiacao, Frente, HistoricoPartido, Legislatura, + Mandato, NivelInstrucao, Parlamentar, + ParlamentarBancada, ParlamentarFrente, Partido, + SessaoLegislativa, SituacaoMilitar, + TipoAfastamento, TipoDependente, Votante) CargoBancadaCrud = CrudAux.build(CargoBancada, '') @@ -114,28 +122,79 @@ class VotanteView(MasterDetailCrud): kwargs={'pk': obj.parlamentar.pk})) -class BancadaCrud(CrudAux): +class BancadaCrud(Crud): model = Bancada + public = [RP_DETAIL, RP_LIST] + list_field_names = ['legislatura','nome', 'partido', 'data_criacao', 'data_extincao'] - class CreateView(CrudAux.CreateView): + class BaseMixin(Crud.BaseMixin): + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context['subnav_template_name'] = '' + return context + + class CreateView(Crud.CreateView): form_class = BancadaForm - def get_success_url(self): - return reverse('sapl.parlamentares:bancada_list') + def form_valid(self, form): + return super(Crud.CreateView, self).form_valid(form) + + class UpdateView(Crud.UpdateView): + form_class = BancadaForm -class FrenteList(MasterDetailCrud): - model = Frente - is_m2m = True - parent_field = 'parlamentares' - CreateView, UpdateView, DeleteView = None, None, None +class ParlamentarBancadaCrud(MasterDetailCrud): + model = ParlamentarBancada + parent_field = 'bancada' + help_topic = 'parlamentar_bancada' + public = [RP_LIST, RP_DETAIL] - class BaseMixin(Crud.PublicMixin, MasterDetailCrud.BaseMixin): - list_field_names = ['nome', 'data_criacao', 'data_extincao'] + class CreateView(MasterDetailCrud.CreateView): + form_class = ParlamentarBancadaForm - @classmethod - def url_name(cls, suffix): - return '%s_parlamentar_%s' % (cls.model._meta.model_name, suffix) + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context['subnav_template_name'] = '' + return context + + def get_initial(self): + self.initial['bancada'] = Bancada.objects.get(pk=self.kwargs['pk']) + return self.initial + + class UpdateView(MasterDetailCrud.UpdateView): + form_class = ParlamentarBancadaForm + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context['subnav_template_name'] = '' + return context + + class DetailView(MasterDetailCrud.DetailView): + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context['subnav_template_name'] = '' + return context + + class ListView(MasterDetailCrud.ListView): + layout_key = 'ParlamentarBancadaList' + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + + context['subnav_template_name'] = '' + + new_rows = [] + rows = context['rows'] + for row in rows: + parlamentar = Parlamentar.objects.get(nome_parlamentar=row[1][0]) + new_row = row + new_row[1] = (row[1][0], '/parlamentar/'+str(parlamentar.id)) + new_rows.append(new_row) + + context['rows'] = new_rows + return context class RelatoriaParlamentarCrud(CrudBaseForListAndDetailExternalAppView): @@ -344,53 +403,6 @@ def json_date_convert(date): return datetime.strptime(date, "%d/%m/%Y").date() -def frente_atualiza_lista_parlamentares(request): - """ - :param request: recebe os parâmetros do GET da chamada Ajax - :return: retorna a lista atualizada dos parlamentares - """ - ativos = json.loads(request.GET['ativos']) - - parlamentares = Parlamentar.objects.all() - - if ativos: - if 'data_criacao' in request.GET and request.GET['data_criacao']: - data_criacao = json_date_convert(request.GET['data_criacao']) - - if 'data_extincao' in request.GET and request.GET['data_extincao']: - data_extincao = json_date_convert(request.GET['data_extincao']) - parlamentares = parlamentares_ativos(data_criacao, - data_extincao) - else: - parlamentares = parlamentares_ativos(data_criacao) - - parlamentares_list = [(p.id, p.__str__()) for p in parlamentares] - - return JsonResponse({'parlamentares_list': parlamentares_list}) - - -def parlamentares_frente_selected(request): - """ - :return: Lista com o id dos parlamentares em uma frente - """ - logger = logging.getLogger(__name__) - username = request.user.username - try: - logger.info("user=" + username + - ". Tentando objet objeto Frente com id={}.".format(request.GET['frente_id'])) - frente = Frente.objects.get(id=int(request.GET['frente_id'])) - except ObjectDoesNotExist: - logger.error("user=" + username + - ". Frente buscada (id={}) não existe. Retornada lista vazia.".format(request.GET['frente_id'])) - lista_parlamentar_id = [] - else: - logger.info("user=" + username + - ". Frente (id={}) encontrada com sucesso.".format(request.GET['frente_id'])) - lista_parlamentar_id = frente.parlamentares.all().values_list( - 'id', flat=True) - return JsonResponse({'id_list': list(lista_parlamentar_id)}) - - class FrenteCrud(Crud): model = Frente help_topic = 'tipo_situa_militar'