Browse Source

Adiciona migrações de Bancada Parlamentar

Fix #1936
pull/2766/head
Vinícius Cantuária 7 years ago
parent
commit
c93e2ecc5c
  1. 29
      sapl/parlamentares/forms.py
  2. 136
      sapl/parlamentares/migrations/0031_auto_20190520_1326.py
  3. 122
      sapl/parlamentares/models.py
  4. 41
      sapl/parlamentares/tests/test_parlamentares.py
  5. 2
      sapl/rules/map_rules.py
  6. 7
      sapl/templates/parlamentares/layouts.yaml

29
sapl/parlamentares/forms.py

@ -624,8 +624,7 @@ class BancadaForm(ModelForm):
class Meta:
model = Bancada
fields = ['legislatura', 'nome', 'partido', 'data_criacao',
'data_extincao', 'descricao']
fields = ['nome', 'descricao', 'ativo']
def clean(self):
super(BancadaForm, self).clean()
@ -633,32 +632,6 @@ class BancadaForm(ModelForm):
if not self.is_valid():
return self.cleaned_data
data = self.cleaned_data
legislatura = data['legislatura']
data_criacao = data['data_criacao']
if data_criacao:
if (data_criacao < legislatura.data_inicio or
data_criacao > legislatura.data_fim):
raise ValidationError(_("Data de criação da bancada fora do intervalo"
" de legislatura informada"))
data_extincao = data['data_extincao']
if data_extincao:
if (data_extincao < legislatura.data_inicio or
data_extincao > legislatura.data_fim):
raise ValidationError(_("Data fim da bancada fora do intervalo de"
" legislatura informada"))
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
@transaction.atomic
def save(self, commit=True):
bancada = super(BancadaForm, self).save(commit)
content_type = ContentType.objects.get_for_model(Bancada)

136
sapl/parlamentares/migrations/0031_auto_20190520_1326.py

@ -0,0 +1,136 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.20 on 2019-05-20 16:26
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('parlamentares', '0030_auto_20190520_1542'),
]
operations = [
migrations.RenameField(
model_name='cargobancada',
old_name='nome_cargo',
new_name='nome',
),
migrations.CreateModel(
name='CargoMembroBancada',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('data_inicio', models.DateField(verbose_name='Data Início do Membro no Cargo')),
('data_fim', models.DateField(verbose_name='Data Fim do Membro no Cargo')),
],
options={
'verbose_name': 'Cargo Membro Bancada Parlamentar',
'verbose_name_plural': 'Cargos Membros Bancada Parlamentare',
},
),
migrations.CreateModel(
name='MembroBancada',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('data_inicio', models.DateField(verbose_name='Data Início de Membro')),
('data_fim', models.DateField(verbose_name='Data Fim de Membro')),
],
options={
'verbose_name': 'Membro Bancada Parlamentar',
'verbose_name_plural': 'Membros Bancada Parlamentare',
},
),
migrations.AlterModelOptions(
name='cargobancada',
options={'verbose_name': 'Cargo Bancada Parlamentar', 'verbose_name_plural': 'Cargos Bancada Parlamentar'},
),
migrations.RemoveField(
model_name='bancada',
name='data_criacao',
),
migrations.RemoveField(
model_name='bancada',
name='data_extincao',
),
migrations.RemoveField(
model_name='bancada',
name='legislatura',
),
migrations.RemoveField(
model_name='bancada',
name='partido',
),
migrations.RemoveField(
model_name='cargobancada',
name='cargo_unico',
),
migrations.AddField(
model_name='bancada',
name='ativo',
field=models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], db_index=True, default=False,
verbose_name='Bancada Parlamentar ativa?'),
),
migrations.AddField(
model_name='cargobancada',
name='descricao',
field=models.TextField(blank=True, verbose_name='Descrição'),
),
migrations.AlterField(
model_name='bancada',
name='nome',
field=models.CharField(max_length=30, verbose_name='Nome da Bancada Parlamentar'),
),
migrations.AlterField(
model_name='cargobancada',
name='nome',
field=models.CharField(max_length=30, verbose_name='Nome do Cargo'),
),
migrations.AddField(
model_name='membrobancada',
name='bancada',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='parlamentares.Bancada',
verbose_name='Bancada Parlamentar'),
),
migrations.AddField(
model_name='membrobancada',
name='legislatura',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='parlamentares.Legislatura',
verbose_name='Legislatura do Membro'),
),
migrations.AddField(
model_name='membrobancada',
name='parlamentar',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='parlamentares.Parlamentar',
verbose_name='Parlamentar'),
),
migrations.AddField(
model_name='cargomembrobancada',
name='cargo',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='parlamentares.CargoBancada',
verbose_name='Cargo do Membro'),
),
migrations.AddField(
model_name='cargomembrobancada',
name='membro',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='parlamentares.MembroBancada',
verbose_name='Membro no Cargo'),
),
migrations.AlterModelOptions(
name='bancada',
options={'ordering': ('nome',), 'verbose_name': 'Bancada Parlamentar',
'verbose_name_plural': 'Bancadas Parlamentares'},
),
migrations.AlterField(
model_name='bancada',
name='ativo',
field=models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], db_index=True, default=True,
verbose_name='Bancada Parlamentar ativa?'),
),
migrations.AlterModelOptions(
name='cargobancada',
options={'ordering': ('nome',), 'verbose_name': 'Cargo Bancada Parlamentar',
'verbose_name_plural': 'Cargos Bancada Parlamentar'},
),
]

122
sapl/parlamentares/models.py

@ -604,53 +604,113 @@ class Bloco(models.Model):
return self.nome
@reversion.register()
class Bancada(models.Model):
legislatura = models.ForeignKey(Legislatura,
on_delete=models.PROTECT,
verbose_name=_('Legislatura'))
nome = models.CharField(
max_length=80,
verbose_name=_('Nome da Bancada'))
partido = models.ForeignKey(Partido,
blank=True,
null=True,
on_delete=models.PROTECT,
verbose_name=_('Partido'))
data_criacao = models.DateField(blank=False, 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'))
max_length=30,
verbose_name=_('Nome da Bancada Parlamentar')
)
descricao = models.TextField(
blank=True,
verbose_name=_('Descrição')
)
ativo = models.BooleanField(
db_index=True,
default=True,
choices=YES_NO_CHOICES,
verbose_name=_('Bancada Parlamentar ativa?')
)
# campo conceitual de reversão genérica para o model Autor que dá a
# o meio possível de localização de tipos de autores.
autor = SaplGenericRelation(Autor, related_query_name='bancada_set',
fields_search=(
('nome', '__icontains'),
('descricao', '__icontains'),
('partido__sigla', '__icontains'),
('partido__nome', '__icontains'),
))
autor = SaplGenericRelation(
Autor,
related_query_name='bancada_set',
fields_search=(
('nome', '__icontains'),
('descricao', '__icontains'),
('partido__sigla', '__icontains'),
('partido__nome', '__icontains'),
)
)
class Meta:
db_table = 'parlamentares_bancada'
verbose_name = _('Bancada Parlamentar')
verbose_name_plural = _('Bancadas Parlamentares')
ordering = ('-legislatura__numero', )
ordering = ('nome', )
def __str__(self):
return self.nome
@reversion.register()
class MembroBancada(models.Model):
parlamentar = models.ForeignKey(
Parlamentar,
on_delete=models.CASCADE,
verbose_name=_('Parlamentar')
)
bancada = models.ForeignKey(
Bancada,
on_delete=models.CASCADE,
verbose_name=_('Bancada Parlamentar')
)
data_inicio = models.DateField(
verbose_name=_('Data Início de Membro')
)
data_fim = models.DateField(
verbose_name=_('Data Fim de Membro')
)
legislatura = models.ForeignKey(
Legislatura,
on_delete=models.CASCADE,
verbose_name=_('Legislatura do Membro')
)
class Meta:
verbose_name = _('Membro Bancada Parlamentar')
verbose_name_plural = _('Membros Bancada Parlamentare')
def __str__(self):
return '{} - {}'.format(self.parlamentar, self.bancada)
class CargoBancada(models.Model):
nome_cargo = models.CharField(max_length=80,
verbose_name=_('Cargo de Bancada'))
nome = models.CharField(
max_length=30,
verbose_name=_('Nome do Cargo')
)
descricao = models.TextField(
blank=True,
verbose_name=_('Descrição')
)
class Meta:
verbose_name = _('Cargo Bancada Parlamentar')
verbose_name_plural = _('Cargos Bancada Parlamentar')
ordering = ('nome', )
def __str__(self):
return self.nome
cargo_unico = models.BooleanField(default=False,
choices=YES_NO_CHOICES,
verbose_name=_('Cargo Único ?'))
class CargoMembroBancada(models.Model):
cargo = models.ForeignKey(
CargoBancada,
on_delete=models.CASCADE,
verbose_name=_('Cargo do Membro')
)
membro = models.ForeignKey(
MembroBancada,
on_delete=models.CASCADE,
verbose_name=_('Membro no Cargo')
)
data_inicio = models.DateField(
verbose_name=_('Data Início do Membro no Cargo')
)
data_fim = models.DateField(
verbose_name=_('Data Fim do Membro no Cargo')
)
class Meta:
db_table = 'parlamentares_cargobancada'
@ -658,4 +718,4 @@ class CargoBancada(models.Model):
verbose_name_plural = _('Cargos de Bancada')
def __str__(self):
return self.nome_cargo
return '{} - {}'.format(self.cargo, self.membro)

41
sapl/parlamentares/tests/test_parlamentares.py

@ -360,49 +360,16 @@ def test_valida_campos_obrigatorios_bancada_form():
errors = form.errors
assert errors['legislatura'] == [_('Este campo é obrigatório.')]
assert errors['nome'] == [_('Este campo é obrigatório.')]
assert errors['data_criacao'] == [_('Este campo é obrigatório.')]
assert len(errors) == 3
def data(valor):
return datetime.strptime(valor, '%Y-%m-%d').date()
assert len(errors) == 1
@pytest.mark.django_db(transaction=False)
def test_bancada_form_valido():
legislatura = mommy.make(Legislatura,
data_inicio=data('2017-11-10'),
data_fim=data('2017-12-31'),
)
partido = mommy.make(Partido)
form = forms.BancadaForm(data={'legislatura': str(legislatura.pk),
'nome': 'Nome da Bancada',
'partido': str(partido.pk),
'data_criacao': '10/11/2017',
'data_extincao': '10/12/2017',
'descricao': 'teste'
form = forms.BancadaForm(data={'nome': 'Nome da Bancada',
'descricao': 'teste',
'ativo': True
})
assert form.is_valid()
@pytest.mark.django_db(transaction=False)
def test_bancada_form_datas_invalidas():
legislatura = mommy.make(Legislatura,
data_inicio=data('2017-11-10'),
data_fim=data('2017-12-31'),
)
partido = mommy.make(Partido)
form = forms.BancadaForm(data={'legislatura': str(legislatura.pk),
'nome': 'Nome da Bancada',
'partido': str(partido.pk),
'data_criacao': '2016-11-01',
'data_extincao': '2016-10-01',
'descricao': 'teste'
})
assert not form.is_valid()

2
sapl/rules/map_rules.py

@ -280,7 +280,9 @@ rules_group_geral = {
(parlamentares.Frente, __base__, __perms_publicas__),
(parlamentares.Votante, __base__, __perms_publicas__),
(parlamentares.Bancada, __base__, __perms_publicas__),
(parlamentares.MembroBancada, __base__, __perms_publicas__),
(parlamentares.CargoBancada, __base__, __perms_publicas__),
(parlamentares.CargoMembroBancada, __base__, __perms_publicas__),
(parlamentares.Bloco, __base__, __perms_publicas__),
(sessao.TipoSessaoPlenaria, __base__, __perms_publicas__),

7
sapl/templates/parlamentares/layouts.yaml

@ -118,14 +118,13 @@ ComposicaoColigacao:
Bancada:
{% trans 'Bancada' %}:
- legislatura
- nome partido
- data_criacao data_extincao
- nome:9 ativo
- descricao
CargoBancada:
{% trans 'Cargo de Bancada' %}:
- nome_cargo:8 cargo_unico
- nome
- descricao
Frente:
{% trans 'Frente' %}:

Loading…
Cancel
Save