Browse Source

Fix #363 coligacao (#472)

* Permite a adicao de partidos a composicao e a listagem deles

* Permite a adicao de partidos a composicao e a listagem deles

* Modifica o verbose name do partido de ComposicaoColigacao no models

* Ordena as coligacoes

* Impede que adicione um partido já existente na coligacao
pull/473/head
eduardocalil 9 years ago
committed by Edward
parent
commit
36d1829fc4
  1. 10
      base/tests/test_login.py
  2. 23
      parlamentares/forms.py
  3. 4
      parlamentares/layouts.yaml
  4. 21
      parlamentares/migrations/0019_auto_20160518_1136.py
  5. 21
      parlamentares/migrations/0020_auto_20160518_1201.py
  6. 3
      parlamentares/models.py
  7. 8
      parlamentares/urls.py
  8. 46
      parlamentares/views.py
  9. 10
      templates/parlamentares/coligacao_detail.html
  10. 1
      templates/parlamentares/subnav.yaml

10
base/tests/test_login.py

@ -12,15 +12,15 @@ def user():
def test_login_aparece_na_barra_para_usuario_nao_logado(client):
response = client.get('/')
assert '<a href="/login/?next=">Login</a>' in str(response.content)
assert '<a href="/login/">Login</a>' in str(response.content)
def test_username_do_usuario_logado_aparece_na_barra(client, user):
assert client.login(username='jfirmino', password='123')
response = client.get('/')
assert '<a href="/login/?next=">Login</a>' not in str(response.content)
assert '<a href="/login/">Login</a>' not in str(response.content)
assert 'jfirmino' in str(response.content)
assert '<a href="/logout/?next=">Sair</a>' in str(response.content)
assert '<a href="/logout/">Sair</a>' in str(response.content)
def test_nome_completo_do_usuario_logado_aparece_na_barra(client, user):
@ -30,9 +30,9 @@ def test_nome_completo_do_usuario_logado_aparece_na_barra(client, user):
user.save()
assert client.login(username='jfirmino', password='123')
response = client.get('/')
assert '<a href="/login/?next=">Login</a>' not in str(response.content)
assert '<a href="/login/">Login</a>' not in str(response.content)
assert 'Joao Firmino' in str(response.content)
assert '<a href="/logout/?next=">Sair</a>' in str(response.content)
assert '<a href="/logout/">Sair</a>' in str(response.content)
@pytest.mark.urls('base.tests.teststub_urls')

23
parlamentares/forms.py

@ -10,7 +10,8 @@ from floppyforms.widgets import ClearableFileInput
import sapl
from sapl.utils import intervalos_tem_intersecao
from .models import Filiacao, Legislatura, Mandato, Parlamentar
from .models import (ComposicaoColigacao, Filiacao, Legislatura,
Mandato, Parlamentar)
class ImageThumbnailFileInput(ClearableFileInput):
@ -154,3 +155,23 @@ class FiliacaoForm(ModelForm):
raise ValidationError(validacao[1])
return self.cleaned_data
class ComposicaoColigacaoForm(ModelForm):
class Meta:
model = ComposicaoColigacao
fields = ['partido']
def clean(self):
cleaned_data = self.cleaned_data
pk = self.initial['coligacao_id']
if (ComposicaoColigacao.objects.filter(
coligacao_id=pk,
partido=cleaned_data.get('partido')).exists()):
msg = _('Esse partido já foi cadastrado nesta coligação.')
raise ValidationError(msg)
else:
if self.errors:
return self.errors
return self.cleaned_data

4
parlamentares/layouts.yaml

@ -88,3 +88,7 @@ TipoAfastamento:
SituacaoMilitar:
Tipo Situação Militar:
- descricao
ComposicaoColigacao:
'Nome do Partido':
- partido

21
parlamentares/migrations/0019_auto_20160518_1136.py

@ -0,0 +1,21 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.5 on 2016-05-18 14:36
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'),
]
operations = [
migrations.AlterField(
model_name='composicaocoligacao',
name='partido',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='parlamentares.Partido', verbose_name='Partido'),
),
]

21
parlamentares/migrations/0020_auto_20160518_1201.py

@ -0,0 +1,21 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.5 on 2016-05-18 15:01
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('parlamentares', '0019_auto_20160518_1136'),
]
operations = [
migrations.AlterField(
model_name='composicaocoligacao',
name='partido',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='parlamentares.Partido', verbose_name='Partidos da Coligação'),
),
]

3
parlamentares/models.py

@ -95,7 +95,8 @@ class Partido(models.Model):
class ComposicaoColigacao(models.Model):
# TODO M2M
partido = models.ForeignKey(Partido)
partido = models.ForeignKey(Partido,
verbose_name=_('Partidos da Coligação'))
coligacao = models.ForeignKey(Coligacao)
class Meta:

8
parlamentares/urls.py

@ -1,6 +1,7 @@
from django.conf.urls import include, url
from parlamentares.views import (CargoMesaCrud, ColigacaoCrud, DependenteCrud,
from parlamentares.views import (CargoMesaCrud, ColigacaoCrud,
ComposicaoColigacaoCrud, DependenteCrud,
FiliacaoCrud, LegislaturaCrud, MandatoCrud,
MesaDiretoraView, NivelInstrucaoCrud,
ParlamentarCrud, PartidoCrud,
@ -16,6 +17,9 @@ urlpatterns = [
ParlamentarCrud.get_urls() + DependenteCrud.get_urls() +
FiliacaoCrud.get_urls() + MandatoCrud.get_urls()
)),
url(r'^coligacao/',
include(ColigacaoCrud.get_urls() +
ComposicaoColigacaoCrud.get_urls())),
url(r'^sistema/parlamentar/legislatura/',
include(LegislaturaCrud.get_urls())),
@ -23,8 +27,6 @@ urlpatterns = [
include(TipoDependenteCrud.get_urls())),
url(r'^sistema/parlamentar/nivel-instrucao/',
include(NivelInstrucaoCrud.get_urls())),
url(r'^sistema/parlamentar/coligacao/',
include(ColigacaoCrud.get_urls())),
url(r'^sistema/parlamentar/tipo-afastamento/',
include(TipoAfastamentoCrud.get_urls())),
url(r'^sistema/parlamentar/tipo-militar/',

46
parlamentares/views.py

@ -10,16 +10,15 @@ import crud.masterdetail
from crud.base import Crud
from crud.masterdetail import MasterDetailCrud
from .forms import (FiliacaoForm, LegislaturaForm, ParlamentarCreateForm,
ParlamentarForm)
from .models import (CargoMesa, Coligacao, ComposicaoMesa, Dependente,
Filiacao, Legislatura, Mandato, NivelInstrucao,
Parlamentar, Partido, SessaoLegislativa, SituacaoMilitar,
TipoAfastamento, TipoDependente)
from .forms import (ComposicaoColigacaoForm, FiliacaoForm, LegislaturaForm,
ParlamentarCreateForm, ParlamentarForm)
from .models import (CargoMesa, Coligacao, ComposicaoColigacao, ComposicaoMesa,
Dependente, Filiacao, Legislatura, Mandato,
NivelInstrucao, Parlamentar, Partido, SessaoLegislativa,
SituacaoMilitar, TipoAfastamento, TipoDependente)
CargoMesaCrud = Crud.build(CargoMesa, 'cargo_mesa')
# LegislaturaCrud = Crud.build(Legislatura, 'tabelas_auxiliares#legislatura')
ColigacaoCrud = Crud.build(Coligacao, 'coligacao')
PartidoCrud = Crud.build(Partido, 'partidos')
SessaoLegislativaCrud = Crud.build(SessaoLegislativa, 'sessao_legislativa')
TipoDependenteCrud = Crud.build(TipoDependente, 'tipo_dependente')
@ -39,6 +38,37 @@ class MandatoCrud(MasterDetailCrud):
ordering = ('-legislatura__data_inicio')
class ColigacaoCrud(Crud):
model = Coligacao
help_path = 'tabelas_auxiliares#coligacao'
class ListView(crud.base.CrudListView):
ordering = ('-legislatura__data_inicio', 'nome')
class ComposicaoColigacaoCrud(MasterDetailCrud):
model = ComposicaoColigacao
parent_field = 'coligacao'
help_path = ''
class CreateView(MasterDetailCrud.CreateView):
form_class = ComposicaoColigacaoForm
def get_initial(self):
id = self.kwargs['pk']
return {'coligacao_id': id}
class UpdateView(MasterDetailCrud.UpdateView):
form_class = ComposicaoColigacaoForm
def get_initial(self):
id = self.kwargs['pk']
return {'coligacao_id': id}
class ListView(MasterDetailCrud.ListView):
ordering = '-partido__sigla'
class LegislaturaCrud(Crud):
model = Legislatura
help_path = 'tabelas_auxiliares#legislatura'

10
templates/parlamentares/coligacao_detail.html

@ -0,0 +1,10 @@
{% extends "crud/detail.html" %}
{% load i18n %}
{% block actions %}
<div class="actions btn-group pull-right" role="group">
<a href="{% url 'parlamentares:composicaocoligacao_list' object.pk %}" class="btn btn-default">{% trans 'Ver Composição' %}</a>
<a href="{{ view.update_url }}" class="btn btn-default">{% trans 'Editar' %}</a>
<a href="{{ view.delete_url }}" class="btn btn-default">{% trans 'Excluir' %}</a>
</div>
{% endblock actions %}

1
templates/parlamentares/subnav.yaml

@ -6,3 +6,4 @@
url: filiacao_list
- title: Dependentes
url: dependente_list

Loading…
Cancel
Save