Browse Source

Fix #415 modulo bancada (#465)

* Criação da tela de Bancada

* Criação da tela de Cargo de  Bancada

* Fix qa

* Ordena listagem por legislatura

* Ordena legislatura no model

* Impede que data de extinção seja menor que a de criação
pull/480/head
Eduardo Edson Batista Cordeiro Alves 9 years ago
committed by Edward
parent
commit
b7c3aaf8df
  1. 19
      parlamentares/migrations/0019_auto_20160518_1204.py
  2. 1
      parlamentares/models.py
  3. 2
      protocoloadm/views.py
  4. 18
      sessao/forms.py
  5. 11
      sessao/layouts.yaml
  6. 33
      sessao/migrations/0017_bancada.py
  7. 31
      sessao/migrations/0018_auto_20160517_1435.py
  8. 27
      sessao/migrations/0019_cargobancada.py
  9. 20
      sessao/migrations/0020_auto_20160517_1450.py
  10. 40
      sessao/models.py
  11. 7
      sessao/urls.py
  12. 32
      sessao/views.py
  13. 4
      templates/sistema.html

19
parlamentares/migrations/0019_auto_20160518_1204.py

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.5 on 2016-05-18 15:04
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('parlamentares', '0018_auto_20160510_0943'),
]
operations = [
migrations.AlterModelOptions(
name='legislatura',
options={'ordering': ['-data_inicio'], 'verbose_name': 'Legislatura', 'verbose_name_plural': 'Legislaturas'},
),
]

1
parlamentares/models.py

@ -14,6 +14,7 @@ class Legislatura(models.Model):
data_eleicao = models.DateField(verbose_name=_('Data Eleição')) data_eleicao = models.DateField(verbose_name=_('Data Eleição'))
class Meta: class Meta:
ordering = ['-data_inicio']
verbose_name = _('Legislatura') verbose_name = _('Legislatura')
verbose_name_plural = _('Legislaturas') verbose_name_plural = _('Legislaturas')

2
protocoloadm/views.py

@ -4,7 +4,7 @@ from datetime import date, datetime
from braces.views import FormValidMessageMixin from braces.views import FormValidMessageMixin
from django.core.exceptions import ObjectDoesNotExist from django.core.exceptions import ObjectDoesNotExist
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.db.models import Max, Q from django.db.models import Q, Max
from django.http import HttpResponse, HttpResponseRedirect from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import redirect from django.shortcuts import redirect
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _

18
sessao/forms.py

@ -13,7 +13,7 @@ from crispy_layout_mixin import form_actions
from materia.models import MateriaLegislativa, TipoMateriaLegislativa from materia.models import MateriaLegislativa, TipoMateriaLegislativa
from sapl.utils import RANGE_DIAS_MES, RANGE_MESES from sapl.utils import RANGE_DIAS_MES, RANGE_MESES
from .models import ExpedienteMateria, SessaoPlenaria from .models import Bancada, ExpedienteMateria, SessaoPlenaria
def pega_anos(): def pega_anos():
@ -29,6 +29,22 @@ MES_CHOICES = [('', '---------')] + RANGE_MESES
DIA_CHOICES = [('', '---------')] + RANGE_DIAS_MES DIA_CHOICES = [('', '---------')] + RANGE_DIAS_MES
class BancadaForm(ModelForm):
class Meta:
model = Bancada
fields = ['legislatura', 'nome', 'partido', 'data_criacao',
'data_extincao', 'descricao']
def clean(self):
if self.cleaned_data['data_extincao']:
if (self.cleaned_data['data_extincao'] <
self.cleaned_data['data_criacao']):
msg = _('Data de extinção não pode ser menor que a de criação')
raise ValidationError(msg)
return self.cleaned_data
class ExpedienteMateriaForm(ModelForm): class ExpedienteMateriaForm(ModelForm):
tipo_materia = forms.ModelChoiceField( tipo_materia = forms.ModelChoiceField(

11
sessao/layouts.yaml

@ -60,3 +60,14 @@ ExpedienteMateriaDetail:
- materia - materia
- tipo_votacao - tipo_votacao
- observacao - observacao
Bancada:
Bancada:
- legislatura
- nome partido
- data_criacao data_extincao
- descricao
CargoBancada:
Cargo de Bancada:
- nome_cargo:8 cargo_unico

33
sessao/migrations/0017_bancada.py

@ -0,0 +1,33 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.5 on 2016-05-17 17:26
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('parlamentares', '0018_auto_20160510_0943'),
('sessao', '0016_auto_20160404_1409'),
]
operations = [
migrations.CreateModel(
name='Bancada',
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 Bancada, Bloco, Frente ou Grupo')),
('data_criacao', models.DateField(blank=True, verbose_name='Data Criação')),
('data_extincao', models.DateField(blank=True, verbose_name='Data Extinção')),
('descricao', models.TextField(blank=True, verbose_name='Descrição')),
('legislatura', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='parlamentares.Legislatura', verbose_name='Legislatura')),
('partido', models.ForeignKey(blank=True, on_delete=django.db.models.deletion.CASCADE, to='parlamentares.Partido', verbose_name='Partido')),
],
options={
'verbose_name_plural': 'Bancadas',
'verbose_name': 'Bancada',
},
),
]

31
sessao/migrations/0018_auto_20160517_1435.py

@ -0,0 +1,31 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.5 on 2016-05-17 17:35
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('sessao', '0017_bancada'),
]
operations = [
migrations.AlterField(
model_name='bancada',
name='data_criacao',
field=models.DateField(blank=True, null=True, verbose_name='Data Criação'),
),
migrations.AlterField(
model_name='bancada',
name='data_extincao',
field=models.DateField(blank=True, null=True, verbose_name='Data Extinção'),
),
migrations.AlterField(
model_name='bancada',
name='partido',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='parlamentares.Partido', verbose_name='Partido'),
),
]

27
sessao/migrations/0019_cargobancada.py

@ -0,0 +1,27 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.5 on 2016-05-17 17:42
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('sessao', '0018_auto_20160517_1435'),
]
operations = [
migrations.CreateModel(
name='CargoBancada',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('nome_cargo', models.CharField(max_length=80, verbose_name='Cargo de Bancada')),
('cargo_unico', models.NullBooleanField(choices=[(True, 'Sim'), (False, 'Não')], verbose_name='Cargo Único')),
],
options={
'verbose_name_plural': 'Cargos de Bancada',
'verbose_name': 'Cargo de Bancada',
},
),
]

20
sessao/migrations/0020_auto_20160517_1450.py

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.5 on 2016-05-17 17:50
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('sessao', '0019_cargobancada'),
]
operations = [
migrations.AlterField(
model_name='cargobancada',
name='cargo_unico',
field=models.CharField(choices=[(True, 'Sim'), (False, 'Não')], default=False, max_length=10, verbose_name='Cargo Único'),
),
]

40
sessao/models.py

@ -3,11 +3,49 @@ from django.utils.translation import ugettext_lazy as _
from model_utils import Choices from model_utils import Choices
from materia.models import MateriaLegislativa from materia.models import MateriaLegislativa
from parlamentares.models import (CargoMesa, Legislatura, Parlamentar, from parlamentares.models import (CargoMesa, Legislatura, Parlamentar, Partido,
SessaoLegislativa) SessaoLegislativa)
from sapl.utils import YES_NO_CHOICES, restringe_tipos_de_arquivo_txt from sapl.utils import YES_NO_CHOICES, restringe_tipos_de_arquivo_txt
class CargoBancada(models.Model):
nome_cargo = models.CharField(max_length=80,
verbose_name=_('Cargo de Bancada'))
cargo_unico = models.CharField(
max_length=10,
verbose_name=_('Cargo Único'),
choices=YES_NO_CHOICES,
default=False)
class Meta:
verbose_name = _('Cargo de Bancada')
verbose_name_plural = _('Cargos de Bancada')
def __str__(self):
return self.nome_cargo
class Bancada(models.Model):
legislatura = models.ForeignKey(Legislatura, verbose_name=_('Legislatura'))
nome = models.CharField(
max_length=80,
verbose_name=_('Nome da Bancada, Bloco, Frente ou Grupo'))
partido = models.ForeignKey(Partido, blank=True, null=True,
verbose_name=_('Partido'))
data_criacao = models.DateField(blank=True, null=True,
verbose_name=_('Data Criação'))
data_extincao = models.DateField(blank=True, null=True,
verbose_name=_('Data Extinção'))
descricao = models.TextField(blank=True, verbose_name=_('Descrição'))
class Meta:
verbose_name = _('Bancada')
verbose_name_plural = _('Bancadas')
def __str__(self):
return self.nome
class TipoSessaoPlenaria(models.Model): class TipoSessaoPlenaria(models.Model):
nome = models.CharField(max_length=30, verbose_name=_('Tipo')) nome = models.CharField(max_length=30, verbose_name=_('Tipo'))
quorum_minimo = models.PositiveIntegerField( quorum_minimo = models.PositiveIntegerField(

7
sessao/urls.py

@ -2,7 +2,8 @@ from django.conf.urls import include, url
from django.views.static import serve from django.views.static import serve
from sapl import settings from sapl import settings
from sessao.views import (EditMateriaOrdemDiaView, ExpedienteMateriaCrud, from sessao.views import (BancadaCrud, CargoBancadaCrud,
EditMateriaOrdemDiaView, ExpedienteMateriaCrud,
ExpedienteView, ListMateriaOrdemDiaView, ExpedienteView, ListMateriaOrdemDiaView,
MateriaOrdemDiaView, MesaView, OradorCrud, MateriaOrdemDiaView, MesaView, OradorCrud,
OradorExpedienteCrud, PainelView, OradorExpedienteCrud, PainelView,
@ -45,6 +46,10 @@ urlpatterns = [
include(TipoResultadoVotacaoCrud.get_urls())), include(TipoResultadoVotacaoCrud.get_urls())),
url(r'^sistema/sessao-plenaria/tipo-expediente/', url(r'^sistema/sessao-plenaria/tipo-expediente/',
include(TipoExpedienteCrud.get_urls())), include(TipoExpedienteCrud.get_urls())),
url(r'^sistema/bancada/',
include(BancadaCrud.get_urls())),
url(r'^sistema/cargo-bancada/',
include(CargoBancadaCrud.get_urls())),
# PAUTA SESSÃO # PAUTA SESSÃO
url(r'^pauta-sessao$', url(r'^pauta-sessao$',

32
sessao/views.py

@ -23,13 +23,13 @@ from norma.models import NormaJuridica
from parlamentares.models import Parlamentar from parlamentares.models import Parlamentar
from sessao.serializers import SessaoPlenariaSerializer from sessao.serializers import SessaoPlenariaSerializer
from .forms import (ExpedienteForm, ExpedienteMateriaForm, ListMateriaForm, from .forms import (BancadaForm, ExpedienteForm, ExpedienteMateriaForm,
MateriaOrdemDiaForm, MesaForm, PresencaForm, ListMateriaForm, MateriaOrdemDiaForm, MesaForm,
SessaoPlenariaFilterSet, VotacaoEditForm, VotacaoForm, PresencaForm, SessaoPlenariaFilterSet, VotacaoEditForm,
VotacaoNominalForm) VotacaoForm, VotacaoNominalForm)
from .models import (CargoMesa, ExpedienteMateria, ExpedienteSessao, from .models import (Bancada, CargoBancada, CargoMesa, ExpedienteMateria,
IntegranteMesa, MateriaLegislativa, Orador, ExpedienteSessao, IntegranteMesa, MateriaLegislativa,
OradorExpediente, OrdemDia, PresencaOrdemDia, Orador, OradorExpediente, OrdemDia, PresencaOrdemDia,
RegistroVotacao, SessaoPlenaria, SessaoPlenariaPresenca, RegistroVotacao, SessaoPlenaria, SessaoPlenariaPresenca,
TipoExpediente, TipoResultadoVotacao, TipoSessaoPlenaria, TipoExpediente, TipoResultadoVotacao, TipoSessaoPlenaria,
VotoParlamentar) VotoParlamentar)
@ -40,6 +40,7 @@ TipoResultadoVotacaoCrud = Crud.build(
TipoResultadoVotacao, 'tipo_resultado_votacao') TipoResultadoVotacao, 'tipo_resultado_votacao')
TipoExpedienteCrud = Crud.build(TipoExpediente, 'tipo_expediente') TipoExpedienteCrud = Crud.build(TipoExpediente, 'tipo_expediente')
RegistroVotacaoCrud = Crud.build(RegistroVotacao, '') RegistroVotacaoCrud = Crud.build(RegistroVotacao, '')
CargoBancadaCrud = Crud.build(CargoBancada, '')
def reordernar_materias_expediente(request, pk): def reordernar_materias_expediente(request, pk):
@ -55,6 +56,23 @@ def reordernar_materias_expediente(request, pk):
reverse('sessao:expedientemateria_list', kwargs={'pk': pk})) reverse('sessao:expedientemateria_list', kwargs={'pk': pk}))
class BancadaCrud(Crud):
model = Bancada
help_path = ''
class BaseMixin(crud.base.CrudBaseMixin):
list_field_names = ['nome', 'legislatura']
class ListView(crud.base.CrudListView):
ordering = 'legislatura'
class CreateView(crud.base.CrudCreateView):
form_class = BancadaForm
class UpdateView(crud.base.CrudUpdateView):
form_class = BancadaForm
def abrir_votacao_view(request, pk, spk): def abrir_votacao_view(request, pk, spk):
existe_votacao_aberta = ExpedienteMateria.objects.filter( existe_votacao_aberta = ExpedienteMateria.objects.filter(
sessao_plenaria_id=spk, votacao_aberta=True sessao_plenaria_id=spk, votacao_aberta=True

4
templates/sistema.html

@ -34,8 +34,8 @@
<h2>Módulo Bancadas</h2> <h2>Módulo Bancadas</h2>
<div class="row"> <div class="row">
<div class="col-md-6"><a href="#" class="btn btn-link">Bancadas</a></div> <div class="col-md-6"><a href="{% url 'sessao:bancada_list' %}" class="btn btn-link">Bancadas</a></div>
<div class="col-md-6"><a href="#" class="btn btn-link">Cargo de Bancada</a></div> <div class="col-md-6"><a href="{% url 'sessao:cargobancada_list' %}" class="btn btn-link">Cargo de Bancada</a></div>
</div> </div>
<h2>Módulo Proposições</h2> <h2>Módulo Proposições</h2>

Loading…
Cancel
Save