Browse Source

Usa crud simples de parlamentar como base

pull/298/head
Marcio Mazza 9 years ago
parent
commit
892babda5f
  1. 154
      parlamentares/forms.py
  2. 19
      parlamentares/urls.py
  3. 123
      parlamentares/views.py
  4. 2
      templates/base.html
  5. 2
      templates/parlamentares/subnav.yaml

154
parlamentares/forms.py

@ -1,165 +1,13 @@
from crispy_forms.helper import FormHelper
from crispy_forms.layout import HTML, Fieldset, Layout, Submit
from django import forms
from django.core.exceptions import ValidationError
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 sapl.settings import MAX_IMAGE_UPLOAD_SIZE
from .models import Dependente, Filiacao, Legislatura, Mandato, Parlamentar
class ParlamentaresListForm(forms.Form):
periodo = forms.CharField()
class ParlamentaresForm (ModelForm):
ativo = forms.TypedChoiceField(
coerce=lambda x: x == 'True',
choices=((True, 'Sim'), (False, 'Não')),
)
def clean_fotografia(self):
fotografia = self.cleaned_data.get('fotografia', False)
if fotografia:
if fotografia.size > MAX_IMAGE_UPLOAD_SIZE:
raise ValidationError('Imagem muito grande. ( > 2mb )')
return fotografia
class Meta:
model = Parlamentar
fields = ['nome_parlamentar',
'ativo',
'nome_completo',
'nivel_instrucao',
'sexo',
'cpf',
'rg',
'titulo_eleitor',
'data_nascimento',
'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']
widgets = {
'cpf': forms.TextInput(attrs={'class': 'cpf'}),
'rg': forms.TextInput(attrs={'class': 'rg'}),
'titulo_eleitor': forms.TextInput(attrs={
'class': 'titulo_eleitor'}),
'telefone': forms.TextInput(attrs={'class': 'telefone'}),
'fax': forms.TextInput(attrs={'class': 'telefone'}),
'cep_residencia': forms.TextInput(attrs={'class': 'cep'}),
'telefone_residencia': forms.TextInput(attrs={
'class': 'telefone'}),
'fax_residencia': forms.TextInput(attrs={'class': 'telefone'}),
'fotografia': forms.FileInput,
'biografia': forms.Textarea(attrs={'id': 'biografia-parlamentar'})
}
def __init__(self, *args, **kwargs):
row1 = crispy_layout_mixin.to_row(
[('nome_parlamentar', 8), ('ativo', 4)])
row2 = crispy_layout_mixin.to_row(
[('nome_completo', 12)])
row3 = crispy_layout_mixin.to_row(
[('nivel_instrucao', 4),
('sexo', 4),
('data_nascimento', 4)])
row4 = crispy_layout_mixin.to_row(
[('cpf', 4),
('rg', 4),
('titulo_eleitor', 4)])
row5 = crispy_layout_mixin.to_row(
[('situacao_militar', 6),
('profissao', 6)])
row6 = crispy_layout_mixin.to_row(
[('endereco_web', 12)])
row7 = crispy_layout_mixin.to_row(
[('email', 12)])
row8 = crispy_layout_mixin.to_row(
[('numero_gab_parlamentar', 4),
('telefone', 4),
('fax', 4)])
row9 = crispy_layout_mixin.to_row(
[('endereco_residencia', 6),
('cep_residencia', 6)])
row10 = crispy_layout_mixin.to_row(
[('municipio_residencia', 12)])
row11 = crispy_layout_mixin.to_row(
[('telefone_residencia', 6),
('fax_residencia', 6)])
row12 = crispy_layout_mixin.to_row(
[('locais_atuacao', 12)])
row13 = crispy_layout_mixin.to_row(
[('fotografia', 12)])
row14 = crispy_layout_mixin.to_row(
[('biografia', 12)])
self.helper = FormHelper()
self.helper.layout = Layout(
Fieldset(_('Cadastro do Parlamentar'),
row1, row2, row3, row4, row5,
row6, row7, row8, row9, row10,
row11, row12, row13,
HTML("""<div class="col-md-12">
{% if not form.fotografia.errors %}
{% if form.fotografia.value %}
<img class="img-responsive" width="225" height="300"
src="{{ MEDIA_URL }}{{ form.fotografia.value }}">
<br /><br />
<input type="submit"
name="remover-foto"
id="remover-foto"
class="btn btn-warning"
value="Remover Foto"/>
{% endif %}
{% endif %}
</div>""", ),
row14,
form_actions())
)
super(ParlamentaresForm, self).__init__(
*args, **kwargs)
class ParlamentaresEditForm(ParlamentaresForm):
def __init__(self, *args, **kwargs):
super(ParlamentaresEditForm, self).__init__(
*args, **kwargs)
self.helper.layout[0][-1:] = form_actions(more=[
HTML('&nbsp;'),
Submit('excluir', 'Excluir',
css_class='btn btn-primary')])
from .models import Dependente, Filiacao, Legislatura, Mandato
class MandatoForm(ModelForm):

19
parlamentares/urls.py

@ -4,19 +4,19 @@ from parlamentares.views import (CargoMesaCrud, ColigacaoCrud,
FiliacaoEditView, FiliacaoView,
LegislaturaCrud, MandatoEditView, MandatoView,
MesaDiretoraView, NivelInstrucaoCrud,
ParlamentaresCadastroView,
ParlamentarCrud,
ParlamentaresDependentesEditView,
ParlamentaresDependentesView,
ParlamentaresEditarView, ParlamentaresView,
PartidoCrud, SessaoLegislativaCrud,
TipoAfastamentoCrud, TipoDependenteCrud,
TipoMilitarCrud)
ParlamentaresDependentesView, PartidoCrud,
SessaoLegislativaCrud, TipoAfastamentoCrud,
TipoDependenteCrud, TipoMilitarCrud)
from .apps import AppConfig
app_name = AppConfig.name
urlpatterns = [
url(r'^parlamentares/', include(ParlamentarCrud.get_urls())),
url(r'^sistema/parlamentares/legislatura/',
include(LegislaturaCrud.get_urls())),
url(r'^sistema/parlamentares/tipo-dependente/',
@ -36,10 +36,6 @@ urlpatterns = [
url(r'^sistema/mesa-diretora/cargo-mesa/',
include(CargoMesaCrud.get_urls())),
url(r'^parlamentares/$',
ParlamentaresView.as_view(), name='parlamentares'),
url(r'^parlamentares/(?P<pk>\d+)/cadastro$',
ParlamentaresCadastroView.as_view(), name='parlamentares_cadastro'),
url(r'^parlamentares/(?P<pk>\d+)/dependentes$',
ParlamentaresDependentesView.as_view(),
name='parlamentares_dependentes'),
@ -59,9 +55,6 @@ urlpatterns = [
MandatoEditView.as_view(),
name='parlamentares_mandato_edit'),
url(r'^parlamentares/(?P<pk>\d+)/editar$',
ParlamentaresEditarView.as_view(), name='parlamentares_editar'),
url(r'^mesa-diretora/$',
MesaDiretoraView.as_view(), name='mesa_diretora'),
]

123
parlamentares/views.py

@ -1,5 +1,3 @@
import os
from django.contrib import messages
from django.core.urlresolvers import reverse, reverse_lazy
from django.http import HttpResponseRedirect
@ -10,9 +8,7 @@ from django.views.generic import CreateView, FormView, UpdateView
from crud.base import Crud
from .forms import (DependenteEditForm, DependenteForm, FiliacaoEditForm,
FiliacaoForm, MandatoEditForm, MandatoForm,
ParlamentaresEditForm, ParlamentaresForm,
ParlamentaresListForm)
FiliacaoForm, MandatoEditForm, MandatoForm)
from .models import (CargoMesa, Coligacao, ComposicaoMesa, Dependente,
Filiacao, Legislatura, Mandato, NivelInstrucao,
Parlamentar, Partido, SessaoLegislativa, SituacaoMilitar,
@ -95,123 +91,6 @@ def validate(form, parlamentar, filiacao, request):
return True
class ParlamentaresView(FormView):
template_name = "parlamentares/parlamentares_list.html"
def get(self, request, *args, **kwargs):
form = ParlamentaresListForm()
if not Legislatura.objects.all():
mensagem = _('Cadastre alguma Legislatura antes'
' de cadastrar algum Parlamentar')
messages.add_message(request, messages.INFO, mensagem)
return self.render_to_response(
{'legislaturas': [],
'legislatura_id': 0,
'form': form,
})
legislaturas = Legislatura.objects.all().order_by(
'-data_inicio', '-data_fim')
mandatos = Mandato.objects.filter(
legislatura_id=legislaturas.first().id)
parlamentares = []
dict_parlamentar = {}
for m in mandatos:
if m.parlamentar.filiacao_set.last():
partido = m.parlamentar.filiacao_set.last().partido.sigla
else:
partido = _('Sem Registro')
dict_parlamentar = {
'id': m.parlamentar.id,
'nome': m.parlamentar.nome_parlamentar,
'partido': partido,
'ativo': m.parlamentar.ativo}
parlamentares.append(dict_parlamentar)
return self.render_to_response(
{'legislaturas': legislaturas,
'legislatura_id': legislaturas.first().id,
'form': form,
'parlamentares': parlamentares})
def post(self, request, *args, **kwargs):
form = ParlamentaresListForm(request.POST)
mandatos = Mandato.objects.filter(
legislatura_id=int(form.data['periodo']))
parlamentares = []
dict_parlamentar = {}
for m in mandatos:
if m.parlamentar.filiacao_set.last():
partido = m.parlamentar.filiacao_set.last().partido.sigla
else:
partido = _('Sem Registro')
dict_parlamentar = {
'id': m.parlamentar.id,
'nome': m.parlamentar.nome_parlamentar,
'partido': partido,
'ativo': m.parlamentar.ativo}
parlamentares.append(dict_parlamentar)
return self.render_to_response(
{'legislaturas': Legislatura.objects.all().order_by(
'-data_inicio', '-data_fim'),
'legislatura_id': int(form.data['periodo']),
'form': form,
'parlamentares': parlamentares})
class ParlamentaresCadastroView(CreateView):
template_name = "parlamentares/parlamentares_cadastro.html"
form_class = ParlamentaresForm
model = Parlamentar
def get_success_url(self):
return reverse('parlamentares:parlamentares')
def get_context_data(self, **kwargs):
context = super(ParlamentaresCadastroView, self).get_context_data(
**kwargs)
legislatura_id = self.kwargs['pk']
context.update({'legislatura_id': legislatura_id})
return context
def form_valid(self, form):
form.save()
return redirect(self.get_success_url())
class ParlamentaresEditarView(UpdateView):
template_name = "parlamentares/parlamentares_cadastro.html"
form_class = ParlamentaresEditForm
model = Parlamentar
success_url = reverse_lazy('parlamentares:parlamentares')
def form_valid(self, form):
parlamentar = form.instance
if 'salvar' in self.request.POST:
form.save()
elif 'excluir' in self.request.POST:
Mandato.objects.get(parlamentar=parlamentar).delete()
parlamentar.delete()
elif "remover-foto" in self.request.POST:
try:
os.unlink(parlamentar.fotografia.path)
except OSError:
pass # Should log this error!!!!!
parlamentar.fotografia = None
parlamentar.save()
return HttpResponseRedirect(self.get_success_url())
class ParlamentaresDependentesView(CreateView):
template_name = "parlamentares/parlamentares_dependentes.html"
form_class = DependenteForm

2
templates/base.html

@ -49,7 +49,7 @@
<li class="nav__sub-item"><a class="nav__sub-link" href="{% url 'parlamentares:mesa_diretora' %}">Mesa Diretora</a></li>
<li class="nav__sub-item"><a class="nav__sub-link" href="{% url 'comissoes:comissao_list' %}">Comissões</a></li>
<!-- <li class="nav__sub-item"><a class="nav__sub-link" href="#">Bancadas</a></li> -->
<li class="nav__sub-item"><a class="nav__sub-link" href="{% url 'parlamentares:parlamentares' %}">Parlamentares</a></li>
<li class="nav__sub-item"><a class="nav__sub-link" href="{% url 'parlamentares:parlamentar_list' %}">Parlamentares</a></li>
</ul>
</li>

2
templates/parlamentares/subnav.yaml

@ -1,5 +1,5 @@
- title: Início
url: parlamentares_editar
url: parlamentar_detail
- title: Mandatos
url: parlamentares_mandato
- title: Filiações Partidárias

Loading…
Cancel
Save