Browse Source

Merge pull request #587 from interlegis/561-bancada

Fix #561 bancada
pull/588/merge
Edward 8 years ago
committed by GitHub
parent
commit
3cc9b0e227
  1. 18
      sapl/parlamentares/forms.py
  2. 30
      sapl/parlamentares/migrations/0025_frente.py
  3. 20
      sapl/parlamentares/migrations/0026_auto_20160916_1034.py
  4. 16
      sapl/parlamentares/migrations/0027_merge.py
  5. 28
      sapl/parlamentares/models.py
  6. 14
      sapl/parlamentares/urls.py
  7. 40
      sapl/parlamentares/views.py
  8. 30
      sapl/sessao/migrations/0024_bloco.py
  9. 22
      sapl/sessao/models.py
  10. 9
      sapl/sessao/urls.py
  11. 23
      sapl/sessao/views.py
  12. 21
      sapl/templates/parlamentares/frentes.html
  13. 7
      sapl/templates/parlamentares/layouts.yaml
  14. 2
      sapl/templates/parlamentares/subnav.yaml
  15. 7
      sapl/templates/sessao/layouts.yaml
  16. 12
      sapl/templates/sistema.html

18
sapl/parlamentares/forms.py

@ -8,8 +8,8 @@ from django.forms import ModelForm
from django.utils.translation import ugettext_lazy as _
from floppyforms.widgets import ClearableFileInput
from .models import (ComposicaoColigacao, Filiacao, Legislatura, Mandato,
Parlamentar)
from .models import (ComposicaoColigacao, Filiacao, Frente, Legislatura,
Mandato, Parlamentar)
class ImageThumbnailFileInput(ClearableFileInput):
@ -175,3 +175,17 @@ class ComposicaoColigacaoForm(ModelForm):
if self.errors:
return self.errors
return self.cleaned_data
class FrenteForm(ModelForm):
def __init__(self, *args, **kwargs):
super(FrenteForm, self).__init__(*args, **kwargs)
self.fields['parlamentares'].queryset = Parlamentar.objects.filter(
ativo=True).order_by('nome_completo')
self.fields['parlamentares'].label = _('Parlamentares \
(Mantenha CTRL pressionado para selecionar vários)')
class Meta:
model = Frente
fields = '__all__'

30
sapl/parlamentares/migrations/0025_frente.py

@ -0,0 +1,30 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-09-16 13:25
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('parlamentares', '0024_merge'),
]
operations = [
migrations.CreateModel(
name='Frente',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('nome', models.CharField(max_length=80, verbose_name='Nome da Frente')),
('data_criacao', models.DateField(verbose_name='Data Criação')),
('data_extincao', models.DateField(blank=True, verbose_name='Data Dissolução')),
('descricao', models.TextField(blank=True, verbose_name='Descrição')),
('parlamentares', models.ManyToManyField(blank=True, to='parlamentares.Parlamentar', verbose_name='Parlamentares')),
],
options={
'verbose_name': 'Frente',
'verbose_name_plural': 'Frentes',
},
),
]

20
sapl/parlamentares/migrations/0026_auto_20160916_1034.py

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-09-16 13:34
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('parlamentares', '0025_frente'),
]
operations = [
migrations.AlterField(
model_name='frente',
name='data_extincao',
field=models.DateField(blank=True, null=True, verbose_name='Data Dissolução'),
),
]

16
sapl/parlamentares/migrations/0027_merge.py

@ -0,0 +1,16 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-09-16 14:44
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('parlamentares', '0026_auto_20160916_1034'),
('parlamentares', '0025_auto_20160916_1030'),
]
operations = [
]

28
sapl/parlamentares/models.py

@ -409,3 +409,31 @@ class ComposicaoMesa(models.Model):
return _('%(parlamentar)s - %(cargo)s') % {
'parlamentar': self.parlamentar, 'cargo': self.cargo
}
class Frente(models.Model):
'''
* Uma frente agrupa vários parlamentares
* Cada parlamentar pode fazer parte de uma ou mais frentes
* Uma frente pode existir por mais de uma legislatura?
'''
nome = models.CharField(
max_length=80,
verbose_name=_('Nome da Frente'))
parlamentares = models.ManyToManyField(Parlamentar,
blank=True,
verbose_name=_('Parlamentares'))
data_criacao = models.DateField(verbose_name=_('Data Criação'))
data_extincao = models.DateField(
blank=True, null=True, verbose_name=_('Data Dissolução'))
descricao = models.TextField(blank=True, verbose_name=_('Descrição'))
class Meta:
verbose_name = _('Frente')
verbose_name_plural = _('Frentes')
def get_parlamentares(self):
return Parlamentar.objects.filter(ativo=True)
def __str__(self):
return self.nome

14
sapl/parlamentares/urls.py

@ -2,9 +2,10 @@ from django.conf.urls import include, url
from sapl.parlamentares.views import (CargoMesaCrud, ColigacaoCrud,
ComposicaoColigacaoCrud, DependenteCrud,
FiliacaoCrud, LegislaturaCrud,
MandatoCrud, MesaDiretoraView,
NivelInstrucaoCrud, ParlamentarCrud,
FiliacaoCrud, FrenteCrud, FrenteList,
LegislaturaCrud, MandatoCrud,
MesaDiretoraView, NivelInstrucaoCrud,
ParlamentarCrud,
ParticipacaoParlamentarCrud, PartidoCrud,
ProposicaoParlamentarCrud,
RelatoriaParlamentarCrud,
@ -24,10 +25,15 @@ urlpatterns = [
ProposicaoParlamentarCrud.get_urls() +
RelatoriaParlamentarCrud.get_urls()
)),
url(r'^parlamentar/(?P<pk>\d+)/frente$',
FrenteList.as_view(), name="frent_list"),
url(r'^sistema/coligacao/',
include(ColigacaoCrud.get_urls() +
ComposicaoColigacaoCrud.get_urls())),
url(r'^sistema/frente/',
include(FrenteCrud.get_urls())),
url(r'^sistema/parlamentar/legislatura/',
include(LegislaturaCrud.get_urls())),
url(r'^sistema/parlamentar/tipo-dependente/',

40
sapl/parlamentares/views.py

@ -7,7 +7,7 @@ from django.core.urlresolvers import reverse, reverse_lazy
from django.shortcuts import redirect
from django.utils.datastructures import MultiValueDictKeyError
from django.utils.translation import ugettext_lazy as _
from django.views.generic import FormView
from django.views.generic import FormView, ListView
from sapl.comissoes.models import Participacao
from sapl.crud.base import (Crud, CrudBaseMixin, CrudCreateView,
@ -17,14 +17,46 @@ from sapl.crud.masterdetail import MasterDetailCrud
from sapl.materia.models import Proposicao, Relatoria
from sapl.utils import permissao_tb_aux, permissoes_parlamentares
from .forms import (ComposicaoColigacaoForm, FiliacaoForm, LegislaturaForm,
ParlamentarCreateForm, ParlamentarForm)
from .forms import (ComposicaoColigacaoForm, FiliacaoForm, FrenteForm,
LegislaturaForm, ParlamentarCreateForm, ParlamentarForm)
from .models import (CargoMesa, Coligacao, ComposicaoColigacao, ComposicaoMesa,
Dependente, Filiacao, Legislatura, Mandato,
Dependente, Filiacao, Frente, Legislatura, Mandato,
NivelInstrucao, Parlamentar, Partido, SessaoLegislativa,
SituacaoMilitar, TipoAfastamento, TipoDependente)
class FrenteList(ListView):
model = Frente
paginate_by = 10
template_name = 'parlamentares/frentes.html'
def get_queryset(self):
return Frente.objects.filter(parlamentares__in=[self.kwargs['pk']])
def get_context_data(self, **kwargs):
context = super(FrenteList, self).get_context_data(**kwargs)
context['root_pk'] = self.kwargs['pk']
context['object_list'] = self.get_queryset()
return context
class FrenteCrud(Crud):
model = Frente
help_path = ''
class BaseMixin(CrudBaseMixin):
list_field_names = ['nome', 'data_criacao', 'parlamentares']
def has_permission(self):
return permissao_tb_aux(self)
class CreateView(PermissionRequiredMixin, CrudCreateView):
form_class = FrenteForm
class UpdateView(PermissionRequiredMixin, CrudUpdateView):
form_class = FrenteForm
class RelatoriaParlamentarCrud(MasterDetailCrud):
model = Relatoria
parent_field = 'parlamentar'

30
sapl/sessao/migrations/0024_bloco.py

@ -0,0 +1,30 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-09-19 12:03
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('sessao', '0023_auto_20160915_1405'),
]
operations = [
migrations.CreateModel(
name='Bloco',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('nome', models.CharField(max_length=80, verbose_name='Nome do Bloco')),
('data_criacao', models.DateField(blank=True, null=True, verbose_name='Data Criação')),
('data_extincao', models.DateField(blank=True, null=True, verbose_name='Data Dissolução')),
('descricao', models.TextField(blank=True, verbose_name='Descrição')),
('bancadas', models.ManyToManyField(blank=True, to='sessao.Bancada', verbose_name='Bancadas')),
],
options={
'verbose_name_plural': 'Blocos',
'verbose_name': 'Bloco',
},
),
]

22
sapl/sessao/models.py

@ -321,3 +321,25 @@ class SessaoPlenariaPresenca(models.Model):
verbose_name = _('Presença em Sessão Plenária')
verbose_name_plural = _('Presenças em Sessões Plenárias')
ordering = ['parlamentar__nome_parlamentar']
class Bloco(models.Model):
'''
* blocos podem existir por mais de uma legislatura
'''
nome = models.CharField(
max_length=80, verbose_name=_('Nome do Bloco'))
bancadas = models.ManyToManyField(
Bancada, blank=True, verbose_name=_('Bancadas'))
data_criacao = models.DateField(
blank=True, null=True, verbose_name=_('Data Criação'))
data_extincao = models.DateField(
blank=True, null=True, verbose_name=_('Data Dissolução'))
descricao = models.TextField(blank=True, verbose_name=_('Descrição'))
class Meta:
verbose_name = _('Bloco')
verbose_name_plural = _('Blocos')
def __str__(self):
return self.nome

9
sapl/sessao/urls.py

@ -2,9 +2,10 @@ from django.conf.urls import include, url
from sapl.sessao.views import (AdicionarVariasMateriasExpediente,
AdicionarVariasMateriasOrdemDia, BancadaCrud,
CargoBancadaCrud, ExpedienteMateriaCrud,
ExpedienteView, MateriaOrdemDiaCrud, MesaView,
OradorCrud, OradorExpedienteCrud, PainelView,
BlocoCrud, CargoBancadaCrud,
ExpedienteMateriaCrud, ExpedienteView,
MateriaOrdemDiaCrud, MesaView, OradorCrud,
OradorExpedienteCrud, PainelView,
PautaExpedienteDetail, PautaOrdemDetail,
PautaSessaoDetailView, PautaSessaoListView,
PesquisarSessaoPlenariaView,
@ -55,6 +56,8 @@ urlpatterns = [
include(TipoExpedienteCrud.get_urls())),
url(r'^sistema/bancada/',
include(BancadaCrud.get_urls())),
url(r'^sistema/bloco/',
include(BlocoCrud.get_urls())),
url(r'^sistema/cargo-bancada/',
include(CargoBancadaCrud.get_urls())),
url(r'^sessao/(?P<pk>\d+)/adicionar-varias-materias-expediente/',

23
sapl/sessao/views.py

@ -32,12 +32,12 @@ from .forms import (AdicionarVariasMateriasFilterSet, BancadaForm,
MesaForm, OrdemDiaForm, PresencaForm,
SessaoPlenariaFilterSet, VotacaoEditForm, VotacaoForm,
VotacaoNominalForm)
from .models import (Bancada, CargoBancada, CargoMesa, ExpedienteMateria,
ExpedienteSessao, IntegranteMesa, MateriaLegislativa,
Orador, OradorExpediente, OrdemDia, PresencaOrdemDia,
RegistroVotacao, SessaoPlenaria, SessaoPlenariaPresenca,
TipoExpediente, TipoResultadoVotacao, TipoSessaoPlenaria,
VotoParlamentar)
from .models import (Bancada, Bloco, CargoBancada, CargoMesa,
ExpedienteMateria, ExpedienteSessao, IntegranteMesa,
MateriaLegislativa, Orador, OradorExpediente, OrdemDia,
PresencaOrdemDia, RegistroVotacao, SessaoPlenaria,
SessaoPlenariaPresenca, TipoExpediente,
TipoResultadoVotacao, TipoSessaoPlenaria, VotoParlamentar)
OrdemDiaCrud = Crud.build(OrdemDia, '')
RegistroVotacaoCrud = Crud.build(RegistroVotacao, '')
@ -69,6 +69,17 @@ def reordernar_materias_ordem(request, pk):
reverse('sapl.sessao:ordemdia_list', kwargs={'pk': pk}))
class BlocoCrud(Crud):
model = Bloco
help_path = ''
class BaseMixin(PermissionRequiredMixin, CrudBaseMixin):
list_field_names = ['nome', 'data_criacao', 'bancadas']
def has_permission(self):
return permissao_tb_aux(self)
class BancadaCrud(Crud):
model = Bancada
help_path = ''

21
sapl/templates/parlamentares/frentes.html

@ -0,0 +1,21 @@
{% extends "crud/list.html" %}
{% load i18n %}
{% load crispy_forms_tags %}
{% block base_content %}
{% if object_list|length == 0 %}
<p>Nenhuma frente encontrada.</p>
{% else %}
<table class="table table-striped table-hover">
<thead>
<tr><th>Frentes</th></tr>
</thead>
<tbody>
{% for frente in object_list %}
<tr><td><a href="{% url 'sapl.parlamentares:frente_detail' frente.pk %}">{{ frente.nome }}</a></td></tr>
{% endfor %}
</tbody>
</table>
{% endif %}
{% include "paginacao.html" %}
{% endblock %}

7
sapl/templates/parlamentares/layouts.yaml

@ -91,3 +91,10 @@ SituacaoMilitar:
ComposicaoColigacao:
{% trans 'Nome do Partido' %}:
- partido
Frente:
{% trans 'Frente' %}:
- nome
- data_criacao data_extincao
- parlamentares
- descricao

2
sapl/templates/parlamentares/subnav.yaml

@ -13,3 +13,5 @@
url: proposicao_list
- title: {% trans 'Relatorias' %}
url: relatoria_list
- title: {% trans 'Frentes' %}
url: frent_list

7
sapl/templates/sessao/layouts.yaml

@ -70,3 +70,10 @@ Bancada:
CargoBancada:
{% trans 'Cargo de Bancada' %}:
- nome_cargo:8 cargo_unico
Bloco:
{% trans 'Bloco' %}:
- nome
- data_criacao data_extincao
- bancadas
- descricao

12
sapl/templates/sistema.html

@ -7,6 +7,7 @@
<div class="row">
<div class="col-md-6"><a href="{% url 'sapl.base:casalegislativa_list' %}" class="btn btn-link">Casa Legislativa</a></div>
</div>
<hr />
<h2>Módulo Parlamentares</h2>
<div class="row">
@ -18,12 +19,14 @@
<div class="col-md-6"><a href="{% url 'sapl.parlamentares:partido_list' %}" class="btn btn-link">Partido</a></div>
<div class="col-md-6"><a href="{% url 'sapl.parlamentares:coligacao_list' %}" class="btn btn-link">Coligação</a></div>
</div>
<hr />
<h2>Módulo Mesa Diretora</h2>
<div class="row">
<div class="col-md-6"><a href="{% url 'sapl.parlamentares:sessaolegislativa_list' %}" class="btn btn-link">Sessão Legislativa</a></div>
<div class="col-md-6"><a href="{% url 'sapl.parlamentares:cargomesa_list' %}" class="btn btn-link">Cargo da Mesa</a></div>
</div>
<hr />
<h2>Módulo Comissões</h2>
<div class="row">
@ -31,18 +34,23 @@
<div class="col-md-6"><a href="{% url 'sapl.comissoes:periodo_list' %}" class="btn btn-link">Período de Composição</a></div>
<div class="col-md-6"><a href="{% url 'sapl.comissoes:tipocomissao_list' %}" class="btn btn-link">Tipo de Comissão</a></div>
</div>
<hr />
<h2>Módulo Bancadas</h2>
<div class="row">
<div class="col-md-6"><a href="{% url 'sapl.sessao:bancada_list' %}" class="btn btn-link">Bancadas</a></div>
<div class="col-md-6"><a href="{% url 'sapl.sessao:cargobancada_list' %}" class="btn btn-link">Cargo de Bancada</a></div>
<div class="col-md-6"><a href="{% url 'sapl.parlamentares:frente_list' %}" class="btn btn-link">Frente</a></div>
<div class="col-md-6"><a href="{% url 'sapl.sessao:bloco_list' %}" class="btn btn-link">Bloco</a></div>
</div>
<hr />
<h2>Módulo Proposições</h2>
<div class="row">
<div class="col-md-6"><a href="{% url 'sapl.materia:tipoproposicao_list' %}" class="btn btn-link">Tipo de Proposição</a></div>
<div class="col-md-6"><a href="{% url 'sapl.materia:autor_list' %}" class="btn btn-link">Autor</a></div>
</div>
<hr />
<h2>Módulo Matéria Legislativa</h2>
<div class="row">
@ -57,12 +65,14 @@
<div class="col-md-6"><a href="{% url 'sapl.materia:statustramitacao_list' %}" class="btn btn-link">Status da Tramitação</a></div>
<div class="col-md-6"><a href="{% url 'sapl.materia:orgao_list' %}" class="btn btn-link">Órgão</a></div>
</div>
<hr />
<h2>Módulo Normas Jurídicas</h2>
<div class="row">
<div class="col-md-6"><a href="" class="btn btn-link">Tipo de Norma Jurídica</a></div>
<div class="col-md-6"><a href="" class="btn btn-link">Assunto de Norma Jurídica</a></div>
</div>
<hr />
<h2>Módulo Sessão Plenária</h2>
<div class="row">
@ -72,12 +82,14 @@
<div class="col-md-6"><a href="{% url 'sapl.sessao:tipoexpediente_list' %}" class="btn btn-link">Tipo de Expediente</a></div>
<div class="col-md-6"><a href="#" class="btn btn-link">Propriedades do Painel Eletrônico</a></div>
</div>
<hr />
<h2>Módulo LexML</h2>
<div class="row">
<div class="col-md-6"><a href="{% url 'sapl.lexml:lexmlprovedor_list' %}" class="btn btn-link">Provedor</a></div>
<div class="col-md-6"><a href="{% url 'sapl.lexml:lexmlpublicador_list' %}" class="btn btn-link">Publicador</a></div>
</div>
<hr />
<h2>Módulo Administrativo</h2>
<div class="row">

Loading…
Cancel
Save