Browse Source

Merge ba2b88b564 into 7814cb0d8e

pull/334/merge
Eduardo Edson Batista Cordeiro Alves 10 years ago
parent
commit
25dbf2d80f
  1. 15
      base/templatetags/menus.py
  2. 2
      comissoes/views.py
  3. 47
      crud/base.py
  4. 81
      crud/masterdetail.py
  5. 5
      crud/tests/stub_app/models.py
  6. 5
      crud/tests/stub_app/urls.py
  7. 8
      crud/tests/stub_app/views.py
  8. 14
      crud/tests/test_masterdetail.py
  9. 2
      materia/views.py
  10. 2
      norma/views.py
  11. 110
      parlamentares/forms.py
  12. 3
      parlamentares/layouts.yaml
  13. 8
      parlamentares/test_parlamentares.py
  14. 25
      parlamentares/urls.py
  15. 149
      parlamentares/views.py
  16. 4
      sessao/views.py
  17. 32
      templates/parlamentares/parlamentar_dependente.html
  18. 7
      templates/parlamentares/parlamentar_dependente_edit.html
  19. 38
      templates/parlamentares/parlamentar_mandato.html
  20. 7
      templates/parlamentares/parlamentar_mandato_edit.html
  21. 4
      templates/parlamentares/subnav.yaml

15
base/templatetags/menus.py

@ -19,15 +19,20 @@ def subnav(context, path=None):
# TODO: 118n !!!!!!!!!!!!!! # TODO: 118n !!!!!!!!!!!!!!
# How to internationalize yaml files???? # How to internationalize yaml files????
menu = None menu = None
if 'object' in context: root_pk = context.get('root_pk', None)
obj = context['object'] if not root_pk:
app = obj.__class__._meta.app_label obj = context.get('object', None)
if obj:
root_pk = obj.pk
if root_pk:
request = context['request']
app = request.resolver_match.app_name
default_path = '%s/subnav.yaml' % app default_path = '%s/subnav.yaml' % app
path = os.path.join(TEMPLATES_DIR, path or default_path) path = os.path.join(TEMPLATES_DIR, path or default_path)
if os.path.exists(path): if os.path.exists(path):
menu = yaml.load(open(path, 'r')) menu = yaml.load(open(path, 'r'))
resolve_urls_inplace(menu, obj.pk, app) resolve_urls_inplace(menu, root_pk, app)
return dict(menu=menu) return {'menu': menu}
def resolve_urls_inplace(menu, pk, app): def resolve_urls_inplace(menu, pk, app):

2
comissoes/views.py

@ -21,7 +21,7 @@ class ComissaoCrud(Crud):
model = Comissao model = Comissao
help_path = 'modulo_comissoes' help_path = 'modulo_comissoes'
class BaseMixin(crud.base.BaseMixin): class BaseMixin(crud.base.CrudBaseMixin):
list_field_names = ['nome', 'sigla', 'tipo', 'data_criacao'] list_field_names = ['nome', 'sigla', 'tipo', 'data_criacao']

47
crud/base.py

@ -56,7 +56,7 @@ def make_pagination(index, num_pages):
return head + [None] + tail return head + [None] + tail
class BaseMixin(CrispyLayoutFormMixin): class CrudBaseMixin(CrispyLayoutFormMixin):
@classmethod @classmethod
def url_name(cls, suffix): def url_name(cls, suffix):
@ -88,7 +88,7 @@ class BaseMixin(CrispyLayoutFormMixin):
return self.resolve_url(DELETE, args=(self.object.id,)) return self.resolve_url(DELETE, args=(self.object.id,))
def get_template_names(self): def get_template_names(self):
names = super(BaseMixin, self).get_template_names() names = super(CrudBaseMixin, self).get_template_names()
names.append("crud/%s.html" % names.append("crud/%s.html" %
self.template_name_suffix.lstrip('_')) self.template_name_suffix.lstrip('_'))
return names return names
@ -104,6 +104,10 @@ class BaseMixin(CrispyLayoutFormMixin):
class CrudListView(ListView): class CrudListView(ListView):
@classmethod
def get_url_regex(cls):
return r'^$'
paginate_by = 10 paginate_by = 10
no_entries_msg = _('Nenhum registro encontrado.') no_entries_msg = _('Nenhum registro encontrado.')
@ -116,7 +120,8 @@ class CrudListView(ListView):
def _as_row(self, obj): def _as_row(self, obj):
return [ return [
(get_field_display(obj, name)[1], obj.pk if i == 0 else None) (get_field_display(obj, name)[1],
self.resolve_url(DETAIL, args=(obj.id,)) if i == 0 else None)
for i, name in enumerate(self.list_field_names)] for i, name in enumerate(self.list_field_names)]
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
@ -142,6 +147,10 @@ class CrudListView(ListView):
class CrudCreateView(FormMessagesMixin, CreateView): class CrudCreateView(FormMessagesMixin, CreateView):
@classmethod
def get_url_regex(cls):
return r'^create$'
form_valid_message, form_invalid_message = FORM_MESSAGES[CREATE] form_valid_message, form_invalid_message = FORM_MESSAGES[CREATE]
@property @property
@ -157,8 +166,19 @@ class CrudCreateView(FormMessagesMixin, CreateView):
return super(CrudCreateView, self).get_context_data(**kwargs) return super(CrudCreateView, self).get_context_data(**kwargs)
class CrudDetailView(DetailView):
@classmethod
def get_url_regex(cls):
return r'^(?P<pk>\d+)$'
class CrudUpdateView(FormMessagesMixin, UpdateView): class CrudUpdateView(FormMessagesMixin, UpdateView):
@classmethod
def get_url_regex(cls):
return r'^(?P<pk>\d+)/edit$'
form_valid_message, form_invalid_message = FORM_MESSAGES[UPDATE] form_valid_message, form_invalid_message = FORM_MESSAGES[UPDATE]
@property @property
@ -171,6 +191,10 @@ class CrudUpdateView(FormMessagesMixin, UpdateView):
class CrudDeleteView(FormMessagesMixin, DeleteView): class CrudDeleteView(FormMessagesMixin, DeleteView):
@classmethod
def get_url_regex(cls):
return r'^(?P<pk>\d+)/delete$'
form_valid_message, form_invalid_message = FORM_MESSAGES[DELETE] form_valid_message, form_invalid_message = FORM_MESSAGES[DELETE]
@property @property
@ -182,10 +206,10 @@ class CrudDeleteView(FormMessagesMixin, DeleteView):
class Crud: class Crud:
BaseMixin = BaseMixin BaseMixin = CrudBaseMixin
ListView = CrudListView ListView = CrudListView
CreateView = CrudCreateView CreateView = CrudCreateView
DetailView = DetailView DetailView = CrudDetailView
UpdateView = CrudUpdateView UpdateView = CrudUpdateView
DeleteView = CrudDeleteView DeleteView = CrudDeleteView
help_path = '' help_path = ''
@ -197,6 +221,7 @@ class Crud:
class CrudViewWithBase(cls.BaseMixin, view): class CrudViewWithBase(cls.BaseMixin, view):
model = cls.model model = cls.model
help_path = cls.help_path help_path = cls.help_path
crud = cls
CrudViewWithBase.__name__ = view.__name__ CrudViewWithBase.__name__ = view.__name__
return CrudViewWithBase return CrudViewWithBase
@ -208,14 +233,16 @@ class Crud:
return [url(regex, view.as_view(), name=view.url_name(suffix)) return [url(regex, view.as_view(), name=view.url_name(suffix))
for regex, view, suffix in [ for regex, view, suffix in [
(r'^$', CrudListView, LIST), (CrudListView.get_url_regex(), CrudListView, LIST),
(r'^create$', CrudCreateView, CREATE), (CrudCreateView.get_url_regex(), CrudCreateView, CREATE),
(r'^(?P<pk>\d+)$', CrudDetailView, DETAIL), (CrudDetailView.get_url_regex(), CrudDetailView, DETAIL),
(r'^(?P<pk>\d+)/edit$', CrudUpdateView, UPDATE), (CrudUpdateView.get_url_regex(), CrudUpdateView, UPDATE),
(r'^(?P<pk>\d+)/delete$', CrudDeleteView, DELETE), ]] (CrudDeleteView.get_url_regex(), CrudDeleteView, DELETE),
]]
@classonlymethod @classonlymethod
def build(cls, _model, _help_path): def build(cls, _model, _help_path):
class ModelCrud(cls): class ModelCrud(cls):
model = _model model = _model
help_path = _help_path help_path = _help_path

81
crud/masterdetail.py

@ -0,0 +1,81 @@
from django.utils.decorators import classonlymethod
from .base import (CREATE, LIST, Crud, CrudBaseMixin, CrudCreateView,
CrudDeleteView, CrudDetailView, CrudListView,
CrudUpdateView)
class MasterDetailCrud(Crud):
class BaseMixin(CrudBaseMixin):
@property
def list_url(self):
return self.resolve_url(LIST, args=(self.kwargs['pk'],))
@property
def create_url(self):
return self.resolve_url(CREATE, args=(self.kwargs['pk'],))
def get_context_data(self, **kwargs):
obj = getattr(self, 'object', None)
if obj:
root_pk = getattr(obj, self.crud.parent_field).pk
else:
root_pk = self.kwargs['pk'] # in list and create
kwargs.setdefault('root_pk', root_pk)
return super(MasterDetailCrud.BaseMixin,
self).get_context_data(**kwargs)
class ListView(CrudListView):
@classmethod
def get_url_regex(cls):
return r'^(?P<pk>\d+)/%s$' % cls.model._meta.model_name
def get_queryset(self):
qs = super(MasterDetailCrud.ListView, self).get_queryset()
kwargs = {self.crud.parent_field: self.kwargs['pk']}
return qs.filter(**kwargs)
class CreateView(CrudCreateView):
@classmethod
def get_url_regex(cls):
return r'^(?P<pk>\d+)/%s/create$' % cls.model._meta.model_name
def get_form(self, form_class=None):
form = super(MasterDetailCrud.CreateView,
self).get_form(form_class)
field = self.model._meta.get_field(self.crud.parent_field)
parent = field.related_model.objects.get(pk=self.kwargs['pk'])
setattr(form.instance, self.crud.parent_field, parent)
return form
class DetailView(CrudDetailView):
@classmethod
def get_url_regex(cls):
return r'^%s/(?P<pk>\d+)$' % cls.model._meta.model_name
class UpdateView(CrudUpdateView):
@classmethod
def get_url_regex(cls):
return r'^%s/(?P<pk>\d+)/edit$' % cls.model._meta.model_name
class DeleteView(CrudDeleteView):
@classmethod
def get_url_regex(cls):
return r'^%s/(?P<pk>\d+)/delete$' % cls.model._meta.model_name
def get_success_url(self):
pk = getattr(self.get_object(), self.crud.parent_field).pk
return self.resolve_url(LIST, args=(pk,))
@classonlymethod
def build(cls, model, parent_field, help_path):
crud = super(MasterDetailCrud, cls).build(model, help_path)
crud.parent_field = parent_field
return crud

5
crud/tests/stub_app/models.py

@ -21,3 +21,8 @@ class Country(models.Model):
def __str__(self): def __str__(self):
return self.name return self.name
class City(models.Model):
name = models.CharField(max_length=50)
country = models.ForeignKey(Country)

5
crud/tests/stub_app/urls.py

@ -1,7 +1,8 @@
from django.conf.urls import include, url from django.conf.urls import include, url
from .views import CountryCrud from .views import CityCrud, CountryCrud
urlpatterns = [ urlpatterns = [
url(r'^country/', include(CountryCrud.get_urls(), 'stub_app')), url(r'^country/', include(
CountryCrud.get_urls() + CityCrud.get_urls(), 'stub_app')),
] ]

8
crud/tests/stub_app/views.py

@ -1,6 +1,7 @@
from crud.base import Crud, CrudListView from crud.base import Crud, CrudListView
from crud.masterdetail import MasterDetailCrud
from .models import Country from .models import City, Country
class CountryCrud(Crud): class CountryCrud(Crud):
@ -9,3 +10,8 @@ class CountryCrud(Crud):
class ListView(CrudListView): class ListView(CrudListView):
paginate_by = 10 paginate_by = 10
class CityCrud(MasterDetailCrud):
model = City
help_path = 'help_path',

14
crud/tests/test_masterdetail.py

@ -0,0 +1,14 @@
import pytest
from django.core.urlresolvers import reverse
@pytest.mark.parametrize('path_name', [
'/country/1/city stub_app:city_list',
'/country/1/city/create stub_app:city_create',
'/country/city/1 stub_app:city_detail',
'/country/city/1/edit stub_app:city_update',
'/country/city/1/delete stub_app:city_delete',
])
def test_reverse(path_name):
path, name = path_name.split()
assert path == reverse(name, args=(1,))

2
materia/views.py

@ -62,7 +62,7 @@ class MateriaLegislativaCrud(Crud):
model = MateriaLegislativa model = MateriaLegislativa
help_path = 'materia_legislativa' help_path = 'materia_legislativa'
class BaseMixin(crud.base.BaseMixin): class BaseMixin(crud.base.CrudBaseMixin):
list_field_names = ['tipo', 'numero', 'ano', 'data_apresentacao'] list_field_names = ['tipo', 'numero', 'ano', 'data_apresentacao']

2
norma/views.py

@ -43,7 +43,7 @@ class NormaCrud(Crud):
def layout_key(self): def layout_key(self):
return 'NormaJuridicaCreate' return 'NormaJuridicaCreate'
class BaseMixin(crud.base.BaseMixin): class BaseMixin(crud.base.CrudBaseMixin):
list_field_names = ['tipo', 'numero', 'ano', 'ementa'] list_field_names = ['tipo', 'numero', 'ano', 'ementa']

110
parlamentares/forms.py

@ -9,7 +9,7 @@ import crispy_layout_mixin
import sapl import sapl
from crispy_layout_mixin import form_actions from crispy_layout_mixin import form_actions
from .models import Dependente, Filiacao, Legislatura, Mandato, Parlamentar from .models import Filiacao, Legislatura, Mandato, Parlamentar
class ParlamentarForm(ModelForm): class ParlamentarForm(ModelForm):
@ -48,114 +48,6 @@ class ParlamentarCreateForm(ParlamentarForm):
return parlamentar 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 DependenteForm(ModelForm):
class Meta:
model = Dependente
fields = ['nome',
'data_nascimento',
'tipo',
'sexo',
'cpf',
'rg',
'titulo_eleitor']
def __init__(self, *args, **kwargs):
row1 = crispy_layout_mixin.to_row(
[('nome', 12)])
row2 = crispy_layout_mixin.to_row(
[('tipo', 4),
('sexo', 4),
('data_nascimento', 4)])
row3 = crispy_layout_mixin.to_row(
[('cpf', 4),
('rg', 4),
('titulo_eleitor', 4)])
self.helper = FormHelper()
self.helper.layout = Layout(
Fieldset(_('Cadastro de Dependentes'),
row1, row2, row3,
form_actions())
)
super(DependenteForm, self).__init__(
*args, **kwargs)
class DependenteEditForm(DependenteForm):
def __init__(self, *args, **kwargs):
super(DependenteEditForm, 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 FiliacaoForm(ModelForm):
class Meta: class Meta:

3
parlamentares/layouts.yaml

@ -69,7 +69,8 @@ Filiacao:
Mandato: Mandato:
Mandato: Mandato:
- legislatura coligacao votos_recebidos - 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 - observacao
TipoDependente: TipoDependente:

8
parlamentares/test_parlamentares.py

@ -70,7 +70,7 @@ def test_dependente_submit(client):
mommy.make(Partido, pk=32) mommy.make(Partido, pk=32)
mommy.make(TipoDependente, pk=3) mommy.make(TipoDependente, pk=3)
client.post(reverse('parlamentares:parlamentar_dependente', client.post(reverse('parlamentares:dependente_create',
kwargs={'pk': 14}), kwargs={'pk': 14}),
{'nome': 'Eduardo', {'nome': 'Eduardo',
'tipo': 3, 'tipo': 3,
@ -86,7 +86,7 @@ def test_dependente_submit(client):
@pytest.mark.django_db(transaction=False) @pytest.mark.django_db(transaction=False)
def test_form_errors_dependente(client): def test_form_errors_dependente(client):
mommy.make(Parlamentar, pk=14) mommy.make(Parlamentar, pk=14)
response = client.post(reverse('parlamentares:parlamentar_dependente', response = client.post(reverse('parlamentares:dependente_create',
kwargs={'pk': 14}), kwargs={'pk': 14}),
{'salvar': 'salvar'}, {'salvar': 'salvar'},
follow=True) follow=True)
@ -120,7 +120,7 @@ def test_mandato_submit(client):
mommy.make(Parlamentar, pk=14) mommy.make(Parlamentar, pk=14)
mommy.make(Legislatura, pk=5) mommy.make(Legislatura, pk=5)
client.post(reverse('parlamentares:parlamentar_mandato', client.post(reverse('parlamentares:mandato_create',
kwargs={'pk': 14}), kwargs={'pk': 14}),
{'legislatura': 5, {'legislatura': 5,
'data_fim_mandato': '2016-01-01', 'data_fim_mandato': '2016-01-01',
@ -136,7 +136,7 @@ def test_mandato_submit(client):
@pytest.mark.django_db(transaction=False) @pytest.mark.django_db(transaction=False)
def test_form_errors_mandato(client): def test_form_errors_mandato(client):
mommy.make(Parlamentar, pk=14) mommy.make(Parlamentar, pk=14)
response = client.post(reverse('parlamentares:parlamentar_mandato', response = client.post(reverse('parlamentares:mandato_create',
kwargs={'pk': 14}), kwargs={'pk': 14}),
{'legislatura': '', {'legislatura': '',
'salvar': 'salvar'}, 'salvar': 'salvar'},

25
parlamentares/urls.py

@ -1,12 +1,10 @@
from django.conf.urls import include, url from django.conf.urls import include, url
from parlamentares.views import (CargoMesaCrud, ColigacaoCrud, from parlamentares.views import (CargoMesaCrud, ColigacaoCrud, DependenteCrud,
FiliacaoEditView, FiliacaoView, FiliacaoEditView, FiliacaoView,
LegislaturaCrud, MandatoEditView, MandatoView, LegislaturaCrud, MandatoCrud,
MesaDiretoraView, NivelInstrucaoCrud, MesaDiretoraView, NivelInstrucaoCrud,
ParlamentarCrud, ParlamentarCrud, PartidoCrud,
ParlamentaresDependentesEditView,
ParlamentaresDependentesView, PartidoCrud,
SessaoLegislativaCrud, TipoAfastamentoCrud, SessaoLegislativaCrud, TipoAfastamentoCrud,
TipoDependenteCrud, TipoMilitarCrud) TipoDependenteCrud, TipoMilitarCrud)
@ -15,7 +13,10 @@ from .apps import AppConfig
app_name = AppConfig.name app_name = AppConfig.name
urlpatterns = [ urlpatterns = [
url(r'^parlamentar/', include(ParlamentarCrud.get_urls())), url(r'^parlamentar/', include(
ParlamentarCrud.get_urls() + DependenteCrud.get_urls() +
MandatoCrud.get_urls()
)),
url(r'^sistema/parlamentar/legislatura/', url(r'^sistema/parlamentar/legislatura/',
include(LegislaturaCrud.get_urls())), include(LegislaturaCrud.get_urls())),
@ -36,24 +37,12 @@ urlpatterns = [
url(r'^sistema/mesa-diretora/cargo-mesa/', url(r'^sistema/mesa-diretora/cargo-mesa/',
include(CargoMesaCrud.get_urls())), include(CargoMesaCrud.get_urls())),
url(r'^parlamentar/(?P<pk>\d+)/dependente$',
ParlamentaresDependentesView.as_view(),
name='parlamentar_dependente'),
url(r'^parlamentar/(?P<pk>\d+)/dependente/(?P<dk>\d+)$',
ParlamentaresDependentesEditView.as_view(),
name='parlamentar_dependente_edit'),
url(r'^parlamentar/(?P<pk>\d+)/filiacao$', url(r'^parlamentar/(?P<pk>\d+)/filiacao$',
FiliacaoView.as_view(), FiliacaoView.as_view(),
name='parlamentar_filiacao'), name='parlamentar_filiacao'),
url(r'^parlamentar/(?P<pk>\d+)/filiacao/(?P<dk>\d+)$', url(r'^parlamentar/(?P<pk>\d+)/filiacao/(?P<dk>\d+)$',
FiliacaoEditView.as_view(), FiliacaoEditView.as_view(),
name='parlamentar_filiacao_edit'), 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/$', url(r'^mesa-diretora/$',
MesaDiretoraView.as_view(), name='mesa_diretora'), MesaDiretoraView.as_view(), name='mesa_diretora'),

149
parlamentares/views.py

@ -8,10 +8,10 @@ from django.views.generic import CreateView, FormView, UpdateView
import crud.base import crud.base
from crud.base import Crud from crud.base import Crud
from crud.masterdetail import MasterDetailCrud
from .forms import (DependenteEditForm, DependenteForm, FiliacaoEditForm, from .forms import (FiliacaoEditForm, FiliacaoForm, ParlamentarCreateForm,
FiliacaoForm, MandatoEditForm, MandatoForm, ParlamentarForm)
ParlamentarCreateForm, ParlamentarForm)
from .models import (CargoMesa, Coligacao, ComposicaoMesa, Dependente, from .models import (CargoMesa, Coligacao, ComposicaoMesa, Dependente,
Filiacao, Legislatura, Mandato, NivelInstrucao, Filiacao, Legislatura, Mandato, NivelInstrucao,
Parlamentar, Partido, SessaoLegislativa, SituacaoMilitar, Parlamentar, Partido, SessaoLegislativa, SituacaoMilitar,
@ -21,7 +21,6 @@ CargoMesaCrud = Crud.build(CargoMesa, 'cargo_mesa')
LegislaturaCrud = Crud.build(Legislatura, 'tabelas_auxiliares#legislatura') LegislaturaCrud = Crud.build(Legislatura, 'tabelas_auxiliares#legislatura')
ColigacaoCrud = Crud.build(Coligacao, 'coligacao') ColigacaoCrud = Crud.build(Coligacao, 'coligacao')
PartidoCrud = Crud.build(Partido, 'partidos') PartidoCrud = Crud.build(Partido, 'partidos')
DependenteCrud = Crud.build(Dependente, '')
SessaoLegislativaCrud = Crud.build(SessaoLegislativa, 'sessao_legislativa') SessaoLegislativaCrud = Crud.build(SessaoLegislativa, 'sessao_legislativa')
FiliacaoCrud = Crud.build(Filiacao, '') FiliacaoCrud = Crud.build(Filiacao, '')
MandatoCrud = Crud.build(Mandato, '') MandatoCrud = Crud.build(Mandato, '')
@ -30,6 +29,9 @@ NivelInstrucaoCrud = Crud.build(NivelInstrucao, 'nivel_instrucao')
TipoAfastamentoCrud = Crud.build(TipoAfastamento, 'tipo_afastamento') TipoAfastamentoCrud = Crud.build(TipoAfastamento, 'tipo_afastamento')
TipoMilitarCrud = Crud.build(SituacaoMilitar, 'tipo_situa_militar') TipoMilitarCrud = Crud.build(SituacaoMilitar, 'tipo_situa_militar')
DependenteCrud = MasterDetailCrud.build(Dependente, 'parlamentar', '')
MandatoCrud = MasterDetailCrud.build(Mandato, 'parlamentar', '')
class ParlamentarCrud(Crud): class ParlamentarCrud(Crud):
model = Parlamentar model = Parlamentar
@ -160,74 +162,6 @@ def validate(form, parlamentar, filiacao, request):
return True return True
class ParlamentaresDependentesView(CreateView):
template_name = "parlamentares/parlamentar_dependente.html"
form_class = DependenteForm
model = Dependente
def get_success_url(self):
pk = self.kwargs['pk']
return reverse('parlamentares:parlamentar_dependente',
kwargs={'pk': pk})
def get_context_data(self, **kwargs):
context = super(ParlamentaresDependentesView, self).\
get_context_data(**kwargs)
pk = self.kwargs['pk']
parlamentar = Parlamentar.objects.get(pk=pk)
dependentes = Dependente.objects.filter(
parlamentar=parlamentar).order_by('nome', 'tipo')
if len(parlamentar.mandato_set.all()) == 0:
legislatura_id = 0
else:
legislatura_id = parlamentar.mandato_set.last().legislatura.id
context.update({'object': parlamentar,
'dependentes': dependentes,
# precisa de legislatura_id???
'legislatura_id': legislatura_id})
return context
def form_valid(self, form):
parlamentar_id = self.kwargs['pk']
dependente = form.save(commit=False)
parlamentar = Parlamentar.objects.get(id=parlamentar_id)
dependente.parlamentar = parlamentar
dependente.save()
return HttpResponseRedirect(self.get_success_url())
class ParlamentaresDependentesEditView(UpdateView):
template_name = "parlamentares/parlamentar_dependente_edit.html"
form_class = DependenteEditForm
model = Dependente
pk_url_kwarg = 'dk'
def get_success_url(self):
pk = self.kwargs['pk']
return reverse('parlamentares:parlamentar_dependente',
kwargs={'pk': pk})
def get_context_data(self, **kwargs):
context = super(ParlamentaresDependentesEditView, 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):
if 'salvar' in self.request.POST:
form.save()
elif 'excluir' in self.request.POST:
dependente = form.instance
dependente.delete()
return HttpResponseRedirect(self.get_success_url())
class MesaDiretoraView(FormView): class MesaDiretoraView(FormView):
template_name = "mesa_diretora/mesa_diretora.html" template_name = "mesa_diretora/mesa_diretora.html"
success_url = reverse_lazy('parlamentares:mesa_diretora') success_url = reverse_lazy('parlamentares:mesa_diretora')
@ -415,74 +349,3 @@ class FiliacaoEditView(UpdateView):
filiacao.save() filiacao.save()
return HttpResponseRedirect(self.get_success_url()) 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())

4
sessao/views.py

@ -42,13 +42,13 @@ class SessaoCrud(Crud):
model = SessaoPlenaria model = SessaoPlenaria
help_path = 'sessao_plenaria' help_path = 'sessao_plenaria'
class BaseMixin(crud.base.BaseMixin): class BaseMixin(crud.base.CrudBaseMixin):
list_field_names = ['numero', 'tipo', 'legislatura', list_field_names = ['numero', 'tipo', 'legislatura',
'sessao_legislativa', 'data_inicio', 'hora_inicio'] 'sessao_legislativa', 'data_inicio', 'hora_inicio']
# FIXME!!!! corrigir referencias no codigo e remover isso!!!!! # FIXME!!!! corrigir referencias no codigo e remover isso!!!!!
# fazer com #230 # fazer com #230
class CrudDetailView(crud.base.BaseMixin, crud.base.DetailView): class CrudDetailView(crud.base.CrudDetailView):
model = SessaoPlenaria model = SessaoPlenaria
help_path = 'sessao_plenaria' help_path = 'sessao_plenaria'

32
templates/parlamentares/parlamentar_dependente.html

@ -1,32 +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>Dependentes</legend>
<table class="table table-striped table-bordered">
<thead class="thead-default">
<tr>
<th><strong>Nome Dependente</strong></th>
<th><strong>Tipo</strong></th>
<th><strong>Data de Nascimento</strong></th>
</tr>
</thead>
{% for d in dependentes %}
<tr>
<td><a href="{% url 'parlamentares:parlamentar_dependente_edit' object.id d.id %}">{{d.nome}}</a></td>
<td>{{d.tipo }}</td>
<td>{{d.data_nascimento|default_if_none:""}}</td>
</tr>
{% endfor %}
</table>
</fieldset>
{% crispy form %}
{% endblock detail_content %}

7
templates/parlamentares/parlamentar_dependente_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 %}

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 %}

4
templates/parlamentares/subnav.yaml

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

Loading…
Cancel
Save