Browse Source

Adiciona criação de parlamentar com mandato

Reformulado usando o crud
pull/298/head
Marcio Mazza 9 years ago
parent
commit
2de3cea10e
  1. 20
      crispy_layout_mixin.py
  2. 33
      parlamentares/forms.py
  3. 20
      parlamentares/layouts.yaml
  4. 69
      parlamentares/test_parlamentares.py
  5. 21
      parlamentares/views.py

20
crispy_layout_mixin.py

@ -67,18 +67,28 @@ def get_field_display(obj, fieldname):
class CrispyLayoutFormMixin:
@property
def layout_key(self):
if hasattr(super(CrispyLayoutFormMixin, self), 'layout_key'):
return super(CrispyLayoutFormMixin, self).layout_key
else:
return self.model.__name__
def get_layout(self):
filename = join(
dirname(self.model._meta.app_config.models_module.__file__),
'layouts.yaml')
return read_layout_from_yaml(filename, self.model.__name__)
return read_layout_from_yaml(filename, self.layout_key)
@property
def fields(self):
'''Returns all fields in the layout'''
return [fieldname for legend_rows in self.get_layout()
for row in legend_rows[1:]
for fieldname, span in row]
if hasattr(self, 'form_class') and self.form_class:
return None
else:
'''Returns all fields in the layout'''
return [fieldname for legend_rows in self.get_layout()
for row in legend_rows[1:]
for fieldname, span in row]
def get_form(self, form_class=None):
try:

33
parlamentares/forms.py

@ -1,13 +1,44 @@
from crispy_forms.helper import FormHelper
from crispy_forms.layout import HTML, Fieldset, Layout, Submit
from django import forms
from django.db import transaction
from django.forms import ModelForm
from django.utils.translation import ugettext_lazy as _
import crispy_layout_mixin
from crispy_layout_mixin import form_actions
from .models import Dependente, Filiacao, Legislatura, Mandato
from .models import Dependente, Filiacao, Legislatura, Mandato, Parlamentar
class ParlamentarCreateForm(ModelForm):
legislatura = forms.ModelChoiceField(
label=_('Legislatura'),
required=True,
queryset=Legislatura.objects.all().order_by('-data_inicio'),
empty_label='----------',
)
data_expedicao_diploma = forms.DateField(
label=_('Expedição do Diploma'),
required=True,
)
class Meta:
model = Parlamentar
exclude = []
@transaction.atomic
def save(self, commit=True):
parlamentar = super(ParlamentarCreateForm, self).save(commit)
legislatura = self.cleaned_data['legislatura']
Mandato.objects.create(
parlamentar=parlamentar,
legislatura=legislatura,
data_fim_mandato=legislatura.data_fim,
data_expedicao_diploma=self.cleaned_data['data_expedicao_diploma'])
return parlamentar
class MandatoForm(ModelForm):

20
parlamentares/layouts.yaml

@ -42,6 +42,26 @@ Parlamentar:
- fotografia
- biografia
ParlamentarCreate:
Dados do Mandato:
- legislatura data_expedicao_diploma
Cadastro do Parlamentar:
- nome_parlamentar:8 ativo
- nome_completo
- nivel_instrucao sexo data_nascimento
- cpf rg titulo_eleitor
- situacao_militar profissao
- endereco_web
- email
- numero_gab_parlamentar telefone fax
- endereco_residencia cep_residencia
- municipio_residencia
- telefone_residencia fax_residencia
- locais_atuacao
- fotografia
- biografia
Filiacao:
'Filiações Partidárias ':
- partido data data_desfiliacao

69
parlamentares/test_parlamentares.py

@ -6,26 +6,46 @@ from .models import (Dependente, Filiacao, Legislatura, Mandato, Parlamentar,
Partido, TipoDependente)
# vamos refazer a funcionalidade adicionando os campos ogrigatórios de mandato
@pytest.mark.django_db(transaction=False)
def TODO_DESLIGADO_RELIGAR_test_cadastro_parlamentar(client):
mommy.make(Legislatura, pk=5)
def test_cadastro_parlamentar(client):
legislatura = mommy.make(Legislatura)
response = client.get(reverse('parlamentares:parlamentares_cadastro',
kwargs={'pk': 5}))
url = reverse('parlamentares:parlamentar_create')
response = client.get(url)
assert response.status_code == 200
response = client.post(reverse('parlamentares:parlamentares_cadastro',
kwargs={'pk': 5}),
{'nome_completo': 'Teresa Barbosa',
'nome_parlamentar': 'Terezinha',
'sexo': 'F',
'ativo': 'True'}, follow=True)
response = client.post(url, {'nome_completo': 'Teresa Barbosa',
'nome_parlamentar': 'Terezinha',
'sexo': 'F',
'ativo': 'True',
'legislatura': legislatura.id,
'data_expedicao_diploma': '2001-01-01'},
follow=True)
[parlamentar] = Parlamentar.objects.all()
assert parlamentar.nome_parlamentar == 'Terezinha'
assert parlamentar.sexo == 'F'
assert parlamentar.ativo is True
# o primeiro mandato é criado
[mandato] = Mandato.objects.all()
assert mandato.parlamentar == parlamentar
assert str(mandato.data_expedicao_diploma) == '2001-01-01'
assert mandato.legislatura == legislatura
assert mandato.data_fim_mandato == legislatura.data_fim
parlamentar = Parlamentar.objects.first()
assert "Terezinha" == parlamentar.nome_parlamentar
if not parlamentar.ativo:
pytest.fail("Parlamentar deve estar ativo")
@pytest.mark.django_db(transaction=False)
def test_incluir_parlamentar_errors(client):
url = reverse('parlamentares:parlamentar_create')
response = client.post(url)
erros_esperados = {campo: ['Este campo é obrigatório.']
for campo in ['legislatura',
'data_expedicao_diploma',
'nome_parlamentar',
'nome_completo',
'sexo',
]}
assert response.context_data['form'].errors == erros_esperados
@pytest.mark.django_db(transaction=False)
@ -128,22 +148,3 @@ def test_form_errors_mandato(client):
['Este campo é obrigatório.'])
assert (response.context_data['form'].errors['data_expedicao_diploma'] ==
['Este campo é obrigatório.'])
@pytest.mark.django_db(transaction=False)
def test_incluir_parlamentar_errors(client):
mommy.make(Legislatura, pk=5)
response = client.post(reverse('parlamentares:parlamentares_cadastro',
kwargs={'pk': 5}),
{'salvar': 'salvar'},
follow=True)
assert (response.context_data['form'].errors['nome_parlamentar'] ==
['Este campo é obrigatório.'])
assert (response.context_data['form'].errors['nome_completo'] ==
['Este campo é obrigatório.'])
assert (response.context_data['form'].errors['sexo'] ==
['Este campo é obrigatório.'])
assert (response.context_data['form'].errors['ativo'] ==
['Este campo é obrigatório.'])

21
parlamentares/views.py

@ -5,10 +5,12 @@ from django.shortcuts import redirect
from django.utils.translation import ugettext_lazy as _
from django.views.generic import CreateView, FormView, UpdateView
import crud.base
from crud.base import Crud
from .forms import (DependenteEditForm, DependenteForm, FiliacaoEditForm,
FiliacaoForm, MandatoEditForm, MandatoForm)
FiliacaoForm, MandatoEditForm, MandatoForm,
ParlamentarCreateForm)
from .models import (CargoMesa, Coligacao, ComposicaoMesa, Dependente,
Filiacao, Legislatura, Mandato, NivelInstrucao,
Parlamentar, Partido, SessaoLegislativa, SituacaoMilitar,
@ -20,7 +22,6 @@ ColigacaoCrud = Crud.build(Coligacao, 'coligacao')
PartidoCrud = Crud.build(Partido, 'partidos')
DependenteCrud = Crud.build(Dependente, '')
SessaoLegislativaCrud = Crud.build(SessaoLegislativa, 'sessao_legislativa')
ParlamentarCrud = Crud.build(Parlamentar, '')
FiliacaoCrud = Crud.build(Filiacao, '')
MandatoCrud = Crud.build(Mandato, '')
TipoDependenteCrud = Crud.build(TipoDependente, 'tipo_dependente')
@ -29,6 +30,22 @@ TipoAfastamentoCrud = Crud.build(TipoAfastamento, 'tipo_afastamento')
TipoMilitarCrud = Crud.build(SituacaoMilitar, 'tipo_situa_militar')
class ParlamentarCrud(Crud):
model = Parlamentar
help_path = ''
class BaseMixin(crud.base.BaseMixin):
# TODO: partido...
list_field_names = ['nome_parlamentar', 'ativo']
class CreateView(crud.base.CrudCreateView):
form_class = ParlamentarCreateForm
@property
def layout_key(self):
return 'ParlamentarCreate'
def validate(form, parlamentar, filiacao, request):
data_filiacao = form.cleaned_data['data']
data_desfiliacao = form.cleaned_data['data_desfiliacao']

Loading…
Cancel
Save