Browse Source

Merge pull request #334 from interlegis/333-crud-mestre-detalhe-mandato

Fix #333 crud mestre detalhe mandato
pull/341/head
LeandroRoberto 9 years ago
parent
commit
762411e6d9
  1. 3
      crud/masterdetail.py
  2. 62
      parlamentares/forms.py
  3. 3
      parlamentares/layouts.yaml
  4. 4
      parlamentares/tests/test_parlamentares.py
  5. 11
      parlamentares/urls.py
  6. 76
      parlamentares/views.py
  7. 38
      templates/parlamentares/parlamentar_mandato.html
  8. 7
      templates/parlamentares/parlamentar_mandato_edit.html
  9. 2
      templates/parlamentares/subnav.yaml

3
crud/masterdetail.py

@ -70,10 +70,13 @@ class MasterDetailCrud(Crud):
def get_url_regex(cls):
return r'^%s/(?P<pk>\d+)/delete$' % cls.model._meta.model_name
<<<<<<< c9325f593ff07366e8a4acc20bdfba1f54ce254e
def get_success_url(self):
pk = getattr(self.get_object(), self.crud.parent_field).pk
return self.resolve_url(LIST, args=(pk,))
=======
>>>>>>> Adiciona listagem ao crud mestre detalhe
@classonlymethod
def build(cls, model, parent_field, help_path):
crud = super(MasterDetailCrud, cls).build(model, help_path)

62
parlamentares/forms.py

@ -12,6 +12,10 @@ from crispy_layout_mixin import form_actions
from .models import Filiacao, Legislatura, Mandato, Parlamentar
class ImageThumbnailFileInput(ClearableFileInput):
template_name = 'floppyforms/image_thumbnail.html'
class ParlamentarForm(ModelForm):
class Meta:
@ -48,64 +52,6 @@ class ParlamentarCreateForm(ParlamentarForm):
return parlamentar
class MandatoForm(ModelForm):
legislatura = forms.ModelChoiceField(
label=_('Legislatura'),
required=True,
queryset=Legislatura.objects.all().order_by('-data_inicio'),
empty_label='----------',
)
class Meta:
model = Mandato
fields = ['legislatura',
'coligacao',
'votos_recebidos',
'data_fim_mandato',
'data_expedicao_diploma',
'tipo_afastamento',
'observacao']
def __init__(self, *args, **kwargs):
row1 = crispy_layout_mixin.to_row(
[('legislatura', 4),
('coligacao', 4),
('votos_recebidos', 4)])
row2 = crispy_layout_mixin.to_row(
[('data_fim_mandato', 6),
('data_expedicao_diploma', 6)])
row3 = crispy_layout_mixin.to_row(
[('tipo_afastamento', 12)])
row4 = crispy_layout_mixin.to_row(
[('observacao', 12)])
self.helper = FormHelper()
self.helper.layout = Layout(
Fieldset(_('Adicionar Mandato'), row1, row2, row3, row4,
form_actions())
)
super(MandatoForm, self).__init__(
*args, **kwargs)
class MandatoEditForm(MandatoForm):
def __init__(self, *args, **kwargs):
super(MandatoEditForm, self).__init__(
*args, **kwargs)
self.helper.layout[0][-1:] = form_actions(more=[
HTML('&nbsp;'),
Submit('excluir', 'Excluir',
css_class='btn btn-primary')])
class FiliacaoForm(ModelForm):
class Meta:

3
parlamentares/layouts.yaml

@ -69,7 +69,8 @@ Filiacao:
Mandato:
Mandato:
- legislatura coligacao votos_recebidos
- ind_titular_FIXME dat_inicio_mandato_FIXME data_fim_mandato data_expedicao_diploma
- data_fim_mandato data_expedicao_diploma
- tipo_afastamento
- observacao
TipoDependente:

4
parlamentares/tests/test_parlamentares.py

@ -120,7 +120,7 @@ def test_mandato_submit(client):
mommy.make(Parlamentar, pk=14)
mommy.make(Legislatura, pk=5)
client.post(reverse('parlamentares:parlamentar_mandato',
client.post(reverse('parlamentares:mandato_create',
kwargs={'pk': 14}),
{'legislatura': 5,
'data_fim_mandato': '2016-01-01',
@ -136,7 +136,7 @@ def test_mandato_submit(client):
@pytest.mark.django_db(transaction=False)
def test_form_errors_mandato(client):
mommy.make(Parlamentar, pk=14)
response = client.post(reverse('parlamentares:parlamentar_mandato',
response = client.post(reverse('parlamentares:mandato_create',
kwargs={'pk': 14}),
{'legislatura': '',
'salvar': 'salvar'},

11
parlamentares/urls.py

@ -2,7 +2,7 @@ from django.conf.urls import include, url
from parlamentares.views import (CargoMesaCrud, ColigacaoCrud, DependenteCrud,
FiliacaoEditView, FiliacaoView,
LegislaturaCrud, MandatoEditView, MandatoView,
LegislaturaCrud, MandatoCrud,
MesaDiretoraView, NivelInstrucaoCrud,
ParlamentarCrud, PartidoCrud,
SessaoLegislativaCrud, TipoAfastamentoCrud,
@ -14,7 +14,8 @@ app_name = AppConfig.name
urlpatterns = [
url(r'^parlamentar/', include(
ParlamentarCrud.get_urls() + DependenteCrud.get_urls()
ParlamentarCrud.get_urls() + DependenteCrud.get_urls() +
MandatoCrud.get_urls()
)),
url(r'^sistema/parlamentar/legislatura/',
@ -42,12 +43,6 @@ urlpatterns = [
url(r'^parlamentar/(?P<pk>\d+)/filiacao/(?P<dk>\d+)$',
FiliacaoEditView.as_view(),
name='parlamentar_filiacao_edit'),
url(r'^parlamentar/(?P<pk>\d+)/mandato$',
MandatoView.as_view(),
name='parlamentar_mandato'),
url(r'^parlamentar/(?P<pk>\d+)/mandato/(?P<dk>\d+)$',
MandatoEditView.as_view(),
name='parlamentar_mandato_edit'),
url(r'^mesa-diretora/$',
MesaDiretoraView.as_view(), name='mesa_diretora'),

76
parlamentares/views.py

@ -10,8 +10,8 @@ import crud.base
from crud.base import Crud
from crud.masterdetail import MasterDetailCrud
from .forms import (FiliacaoEditForm, FiliacaoForm, MandatoEditForm,
MandatoForm, ParlamentarCreateForm, ParlamentarForm)
from .forms import (FiliacaoEditForm, FiliacaoForm, ParlamentarCreateForm,
ParlamentarForm)
from .models import (CargoMesa, Coligacao, ComposicaoMesa, Dependente,
Filiacao, Legislatura, Mandato, NivelInstrucao,
Parlamentar, Partido, SessaoLegislativa, SituacaoMilitar,
@ -30,6 +30,7 @@ TipoAfastamentoCrud = Crud.build(TipoAfastamento, 'tipo_afastamento')
TipoMilitarCrud = Crud.build(SituacaoMilitar, 'tipo_situa_militar')
DependenteCrud = MasterDetailCrud.build(Dependente, 'parlamentar', '')
MandatoCrud = MasterDetailCrud.build(Mandato, 'parlamentar', '')
class ParlamentarCrud(Crud):
@ -348,74 +349,3 @@ class FiliacaoEditView(UpdateView):
filiacao.save()
return HttpResponseRedirect(self.get_success_url())
class MandatoView(CreateView):
template_name = "parlamentares/parlamentar_mandato.html"
model = Mandato
form_class = MandatoForm
def get_success_url(self):
pk = self.kwargs['pk']
return reverse('parlamentares:parlamentar_mandato',
kwargs={'pk': pk})
def get_context_data(self, **kwargs):
context = super(MandatoView, self).get_context_data(**kwargs)
pid = self.kwargs['pk']
parlamentar = Parlamentar.objects.get(id=pid)
mandatos = Mandato.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,
'mandatos': mandatos,
'legislatura_id': legislatura_id
}
)
return context
def form_valid(self, form):
pid = self.kwargs['pk']
parlamentar = Parlamentar.objects.get(id=pid)
mandato = form.save(commit=False)
mandato.parlamentar = parlamentar
mandato.save()
return HttpResponseRedirect(self.get_success_url())
class MandatoEditView(UpdateView):
template_name = "parlamentares/parlamentar_mandato_edit.html"
model = Mandato
form_class = MandatoEditForm
pk_url_kwarg = 'dk'
def get_success_url(self):
pk = self.kwargs['pk']
return reverse('parlamentares:parlamentar_mandato',
kwargs={'pk': pk})
def get_context_data(self, **kwargs):
context = super(MandatoEditView, 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):
form = self.get_form()
parlamentar = Parlamentar.objects.get(id=self.kwargs['pk'])
if 'salvar' in self.request.POST:
mandato = form.save(commit=False)
mandato.parlamentar = parlamentar
mandato.save()
elif 'excluir' in self.request.POST:
form.instance.delete()
return HttpResponseRedirect(self.get_success_url())

38
templates/parlamentares/parlamentar_mandato.html

@ -1,38 +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>Mandatos</legend>
<table class="table table-striped table-bordered">
<thead class="thead-default">
<tr>
<th><strong>Legislatura</strong></th>
<th><strong>Coligação</strong></th>
<th><strong>Fim Mandato</strong></th>
<th><strong>Exp. Diploma</strong></th>
<th><strong>Nº Votos</strong></th>
<th><strong>Observação</strong></th>
</tr>
</thead>
{% for m in mandatos %}
<tr>
<td><a href="{% url 'parlamentares:parlamentar_mandato_edit' object.id m.id %}">{{m.legislatura}}</a></td>
<td>{{m.coligacao|default_if_none:""}}</td>
<td>{{m.data_fim_mandato|default_if_none:""}}</td>
<td>{{m.data_expedicao_diploma|default_if_none:""}}</td>
<td>{{m.votos_recebidos|default_if_none:""}}</td>
<td>{{m.observacao|default_if_none:""}}</td>
</tr>
{% endfor %}
</table>
</fieldset>
{% crispy form %}
{% endblock detail_content %}

7
templates/parlamentares/parlamentar_mandato_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

@ -1,7 +1,7 @@
- title: Início
url: parlamentar_detail
- title: Mandatos
url: parlamentar_mandato
url: mandato_list
- title: Filiações Partidárias
url: parlamentar_filiacao
- title: Dependentes

Loading…
Cancel
Save