Browse Source

Filiação sem validação de data

pull/341/head
Eduardo Edson Batista Cordeiro Alves 9 years ago
committed by Edward Ribeiro
parent
commit
d7126e09b3
  1. 95
      parlamentares/forms.py
  2. 12
      parlamentares/urls.py
  3. 94
      parlamentares/views.py
  4. 30
      templates/parlamentares/parlamentar_filiacao.html
  5. 7
      templates/parlamentares/parlamentar_filiacao_edit.html
  6. 2
      templates/parlamentares/subnav.yaml

95
parlamentares/forms.py

@ -55,36 +55,81 @@ class ParlamentarCreateForm(ParlamentarForm):
class FiliacaoForm(ModelForm):
def validate(data, data_desfiliacao, parlamentar, filiacao):
data_filiacao = data
data_desfiliacao = data_desfiliacao
# Dá erro caso a data de desfiliação seja anterior a de filiação
if data_desfiliacao and data_desfiliacao < data_filiacao:
error_msg = _("A data de filiação não pode anterior \
à data de desfiliação")
raise forms.ValidationError(error_msg)
return False
# Esse bloco garante que não haverá intersecção entre os
# períodos de filiação
id_filiacao_atual = filiacao.pk
todas_filiacoes = parlamentar.filiacao_set.all()
for filiacoes in todas_filiacoes:
if (not filiacoes.data_desfiliacao and
filiacoes.id != id_filiacao_atual):
error_msg = _("O parlamentar não pode se filiar a algum partido \
sem antes se desfiliar do partido anterior")
raise forms.ValidationError(error_msg)
return False
error_msg = None
for filiacoes in todas_filiacoes:
if filiacoes.id != id_filiacao_atual:
data_init = filiacoes.data
data_fim = filiacoes.data_desfiliacao
if data_init <= data_filiacao < data_fim:
error_msg = _("A data de filiação e \
desfiliação não podem estar no intervalo \
de outro período de filiação")
break
if (data_desfiliacao and
data_init < data_desfiliacao < data_fim):
error_msg = _("A data de filiação e \
desfiliação não podem estar no intervalo \
de outro período de filiação")
break
if (data_desfiliacao and
data_filiacao <= data_init and
data_desfiliacao >= data_fim):
error_msg = _("A data de filiação e \
desfiliação não podem estar no intervalo \
de outro período de filiação")
break
if error_msg:
raise forms.ValidationError(error_msg)
return True
class Meta:
model = Filiacao
fields = ['partido',
'data',
'data_desfiliacao']
def __init__(self, *args, **kwargs):
row1 = crispy_layout_mixin.to_row(
[('partido', 4),
('data', 4),
('data_desfiliacao', 4)])
self.helper = FormHelper()
self.helper.layout = Layout(
Fieldset(_('Adicionar Filiação'), row1,
form_actions())
)
super(FiliacaoForm, self).__init__(
*args, **kwargs)
class FiliacaoEditForm(FiliacaoForm):
@transaction.atomic
def save(self, commit=False):
filiacao = super(FiliacaoForm, self).save(commit)
def __init__(self, *args, **kwargs):
super(FiliacaoEditForm, self).__init__(
*args, **kwargs)
if not validate(self.cleaned_data['data'],
self.cleaned_data['data_desfiliacao'],
filiacao.parlamentar,
filiacao):
return self.form_invalid(form)
self.helper.layout[0][-1:] = form_actions(more=[
HTML('&nbsp;'),
Submit('excluir', 'Excluir',
css_class='btn btn-primary')])
filiacao.save()
return filiacao

12
parlamentares/urls.py

@ -1,8 +1,7 @@
from django.conf.urls import include, url
from parlamentares.views import (CargoMesaCrud, ColigacaoCrud, DependenteCrud,
FiliacaoEditView, FiliacaoView,
LegislaturaCrud, MandatoCrud,
FiliacaoCrud, LegislaturaCrud, MandatoCrud,
MesaDiretoraView, NivelInstrucaoCrud,
ParlamentarCrud, PartidoCrud,
SessaoLegislativaCrud, TipoAfastamentoCrud,
@ -15,7 +14,7 @@ app_name = AppConfig.name
urlpatterns = [
url(r'^parlamentar/', include(
ParlamentarCrud.get_urls() + DependenteCrud.get_urls() +
MandatoCrud.get_urls()
FiliacaoCrud.get_urls() + MandatoCrud.get_urls()
)),
url(r'^sistema/parlamentar/legislatura/',
@ -37,13 +36,6 @@ urlpatterns = [
url(r'^sistema/mesa-diretora/cargo-mesa/',
include(CargoMesaCrud.get_urls())),
url(r'^parlamentar/(?P<pk>\d+)/filiacao$',
FiliacaoView.as_view(),
name='parlamentar_filiacao'),
url(r'^parlamentar/(?P<pk>\d+)/filiacao/(?P<dk>\d+)$',
FiliacaoEditView.as_view(),
name='parlamentar_filiacao_edit'),
url(r'^mesa-diretora/$',
MesaDiretoraView.as_view(), name='mesa_diretora'),
]

94
parlamentares/views.py

@ -7,11 +7,11 @@ from django.utils.translation import ugettext_lazy as _
from django.views.generic import CreateView, FormView, UpdateView
import crud.base
import crud.masterdetail
from crud.base import Crud
from crud.masterdetail import MasterDetailCrud
from .forms import (FiliacaoEditForm, FiliacaoForm, ParlamentarCreateForm,
ParlamentarForm)
from .forms import FiliacaoForm, ParlamentarCreateForm, ParlamentarForm
from .models import (CargoMesa, Coligacao, ComposicaoMesa, Dependente,
Filiacao, Legislatura, Mandato, NivelInstrucao,
Parlamentar, Partido, SessaoLegislativa, SituacaoMilitar,
@ -22,8 +22,6 @@ LegislaturaCrud = Crud.build(Legislatura, 'tabelas_auxiliares#legislatura')
ColigacaoCrud = Crud.build(Coligacao, 'coligacao')
PartidoCrud = Crud.build(Partido, 'partidos')
SessaoLegislativaCrud = Crud.build(SessaoLegislativa, 'sessao_legislativa')
FiliacaoCrud = Crud.build(Filiacao, '')
MandatoCrud = Crud.build(Mandato, '')
TipoDependenteCrud = Crud.build(TipoDependente, 'tipo_dependente')
NivelInstrucaoCrud = Crud.build(NivelInstrucao, 'nivel_instrucao')
TipoAfastamentoCrud = Crud.build(TipoAfastamento, 'tipo_afastamento')
@ -31,6 +29,19 @@ TipoMilitarCrud = Crud.build(SituacaoMilitar, 'tipo_situa_militar')
DependenteCrud = MasterDetailCrud.build(Dependente, 'parlamentar', '')
MandatoCrud = MasterDetailCrud.build(Mandato, 'parlamentar', '')
FiliacaoCrud = MasterDetailCrud.build(Filiacao, 'parlamentar', '')
# class FiliacaoCrud(MasterDetailCrud):
# model = Filiacao
# parent_field = 'parlamentar'
# help_path = ''
#
# class CreateView(crud.masterdetail.CrudCreateView):
# form_class = FiliacaoForm
#
# class UpdateView(crud.masterdetail.CrudUpdateView):
# form_class = FiliacaoForm
class ParlamentarCrud(Crud):
@ -274,78 +285,3 @@ class MesaDiretoraView(FormView):
'parlamentares': parlamentares_vagos,
'cargos_vagos': cargos_vagos
})
class FiliacaoView(CreateView):
template_name = "parlamentares/parlamentar_filiacao.html"
form_class = FiliacaoForm
model = Filiacao
def get_success_url(self):
pk = self.kwargs['pk']
return reverse('parlamentares:parlamentar_filiacao',
kwargs={'pk': pk})
def get_context_data(self, **kwargs):
context = super(FiliacaoView, self).get_context_data(**kwargs)
pid = self.kwargs['pk']
parlamentar = Parlamentar.objects.get(id=pid)
filiacoes = Filiacao.objects.filter(parlamentar=parlamentar)
if len(parlamentar.mandato_set.all()) == 0:
legislatura_id = 0
else:
legislatura_id = parlamentar.mandato_set.last().legislatura.id
context.update(
{'object': parlamentar,
'filiacoes': filiacoes,
'legislatura_id': legislatura_id})
return context
def form_valid(self, form):
if 'salvar' in self.request.POST:
filiacao = form.save(commit=False)
parlamentar = Parlamentar.objects.get(id=self.kwargs['pk'])
filiacao.parlamentar = parlamentar
if not validate(form, parlamentar, filiacao, self.request):
return self.form_invalid(form)
filiacao.save()
return HttpResponseRedirect(self.get_success_url())
class FiliacaoEditView(UpdateView):
template_name = "parlamentares/parlamentar_filiacao_edit.html"
form_class = FiliacaoEditForm
model = Filiacao
pk_url_kwarg = 'dk'
def get_success_url(self):
pk = self.kwargs['pk']
return reverse('parlamentares:parlamentar_filiacao',
kwargs={'pk': pk})
def get_context_data(self, **kwargs):
context = super(FiliacaoEditView, self).get_context_data(**kwargs)
parlamentar = Parlamentar.objects.get(id=self.kwargs['pk'])
context.update(
{'object': parlamentar,
'legislatura_id': parlamentar.mandato_set.last(
).legislatura_id})
return context
def form_valid(self, form):
filiacao = form.save(commit=False)
if 'excluir' in self.request.POST:
filiacao.delete()
elif 'salvar' in self.request.POST:
parlamentar = Parlamentar.objects.get(id=self.kwargs['pk'])
filiacao.parlamentar = parlamentar
if not validate(form, parlamentar, filiacao, self.request):
return self.form_invalid(form)
filiacao.save()
return HttpResponseRedirect(self.get_success_url())

30
templates/parlamentares/parlamentar_filiacao.html

@ -1,30 +0,0 @@
{% extends "crud/detail.html" %}
{% load i18n %}
{% load crispy_forms_tags %}
{% block actions %}{% endblock %}
{% block detail_content %}
<h2><strong>Parlamentar: </strong>{{ object.nome_parlamentar }}</h2>
<fieldset>
<legend>Filiações</legend>
<table class="table table-striped table-bordered">
<thead class="thead-default">
<tr>
<th><strong>Partido</strong></th>
<th><strong>Data Filiação</strong></th>
<th><strong>Data Desfiliação</strong></th>
</tr>
</thead>
{% for f in filiacoes %}
<tr>
<td><a href="{% url 'parlamentares:parlamentar_filiacao_edit' object.id f.id %}">{{f.partido.sigla}}</a></td>
<td>{{f.data}}</td>
<td>{{f.data_desfiliacao|default_if_none:""}}</td>
</tr>
{% endfor %}
</table>
</fieldset>
{% crispy form %}
{% endblock detail_content %}

7
templates/parlamentares/parlamentar_filiacao_edit.html

@ -1,7 +0,0 @@
{% extends "crud/detail.html" %}
{% load i18n %}
{% load crispy_forms_tags %}
{% block actions %}{% endblock %}
{% block detail_content %}
{% crispy form %}
{% endblock detail_content %}

2
templates/parlamentares/subnav.yaml

@ -3,6 +3,6 @@
- title: Mandatos
url: mandato_list
- title: Filiações Partidárias
url: parlamentar_filiacao
url: filiacao_list
- title: Dependentes
url: dependente_list

Loading…
Cancel
Save