Browse Source

Add crud bancada, parlamentarbancada

pull/3043/head
João Rodrigues 6 years ago
parent
commit
c8f2ca52f8
  1. 174
      sapl/parlamentares/views.py

174
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 BaseMixin(Crud.PublicMixin, MasterDetailCrud.BaseMixin):
list_field_names = ['nome', 'data_criacao', 'data_extincao']
class ParlamentarBancadaCrud(MasterDetailCrud):
model = ParlamentarBancada
parent_field = 'bancada'
help_topic = 'parlamentar_bancada'
public = [RP_LIST, RP_DETAIL]
@classmethod
def url_name(cls, suffix):
return '%s_parlamentar_%s' % (cls.model._meta.model_name, suffix)
class CreateView(MasterDetailCrud.CreateView):
form_class = ParlamentarBancadaForm
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'

Loading…
Cancel
Save