diff --git a/crispy_layout_mixin.py b/crispy_layout_mixin.py
index ddff0283c..7971466ca 100644
--- a/crispy_layout_mixin.py
+++ b/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:
diff --git a/crud/base.py b/crud/base.py
index 48bcb1e62..c14671a4d 100644
--- a/crud/base.py
+++ b/crud/base.py
@@ -107,6 +107,13 @@ class CrudListView(ListView):
paginate_by = 10
no_entries_msg = _('Nenhum registro encontrado.')
+ def get_rows(self, object_list):
+ return [self._as_row(obj) for obj in object_list]
+
+ def get_headers(self):
+ return [self.model._meta.get_field(fieldname).verbose_name
+ for fieldname in self.list_field_names]
+
def _as_row(self, obj):
return [
(get_field_display(obj, name)[1], obj.pk if i == 0 else None)
@@ -117,18 +124,17 @@ class CrudListView(ListView):
context.setdefault('title', self.verbose_name_plural)
# pagination
- page_obj = context['page_obj']
- paginator = context['paginator']
- context['page_range'] = make_pagination(
- page_obj.number, paginator.num_pages)
+ if self.paginate_by:
+ page_obj = context['page_obj']
+ paginator = context['paginator']
+ context['page_range'] = make_pagination(
+ page_obj.number, paginator.num_pages)
# rows
object_list = context['object_list']
- context['rows'] = [self._as_row(obj) for obj in object_list]
+ context['headers'] = self.get_headers()
+ context['rows'] = self.get_rows(object_list)
- context['headers'] = [
- self.model._meta.get_field(fieldname).verbose_name
- for fieldname in self.list_field_names]
context['NO_ENTRIES_MSG'] = self.no_entries_msg
return context
diff --git a/parlamentares/forms.py b/parlamentares/forms.py
index 43377bbe6..9a3c1ab3c 100644
--- a/parlamentares/forms.py
+++ b/parlamentares/forms.py
@@ -1,165 +1,44 @@
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.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 sapl.settings import MAX_IMAGE_UPLOAD_SIZE
from .models import Dependente, Filiacao, Legislatura, Mandato, Parlamentar
-class ParlamentaresListForm(forms.Form):
- periodo = forms.CharField()
+class ParlamentarCreateForm(ModelForm):
-
-class ParlamentaresForm (ModelForm):
- ativo = forms.TypedChoiceField(
- coerce=lambda x: x == 'True',
- choices=((True, 'Sim'), (False, 'Não')),
+ legislatura = forms.ModelChoiceField(
+ label=_('Legislatura'),
+ required=True,
+ queryset=Legislatura.objects.all().order_by('-data_inicio'),
+ empty_label='----------',
)
- 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
+ data_expedicao_diploma = forms.DateField(
+ label=_('Expedição do Diploma'),
+ required=True,
+ )
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("""
- {% if not form.fotografia.errors %}
- {% if form.fotografia.value %}
-
-
-
- {% endif %}
- {% endif %}
-
""", ),
- 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(' '),
- Submit('excluir', 'Excluir',
- css_class='btn btn-primary')])
+ 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):
diff --git a/parlamentares/layouts.yaml b/parlamentares/layouts.yaml
index 9a224a622..d4d342231 100644
--- a/parlamentares/layouts.yaml
+++ b/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
diff --git a/parlamentares/models.py b/parlamentares/models.py
index 70fe89583..0fb9f54ad 100644
--- a/parlamentares/models.py
+++ b/parlamentares/models.py
@@ -1,10 +1,11 @@
-import datetime
+from datetime import datetime
from django.db import models
from django.utils.translation import ugettext_lazy as _
from model_utils import Choices
-from sapl.utils import UF, YES_NO_CHOICES, restringe_tipos_de_arquivo_img
+from sapl.utils import (UF, YES_NO_CHOICES, intervalos_tem_intersecao,
+ restringe_tipos_de_arquivo_img)
class Legislatura(models.Model):
@@ -18,7 +19,7 @@ class Legislatura(models.Model):
def __str__(self):
# XXX Usar id mesmo? Ou criar campo para nº legislatura?
- current_date = datetime.datetime.now().year
+ current_date = datetime.now().year
if(self.data_inicio.year <= current_date and
self.data_fim.year >= current_date):
current = ' (%s)' % _('Atual')
@@ -356,6 +357,17 @@ class Mandato(models.Model):
'parlamentar': self.parlamentar, 'legislatura': self.legislatura
}
+ def get_partidos(self):
+ filicacoes = Filiacao.objects.filter(
+ parlamentar=self.parlamentar).order_by('data')
+ return [f.partido.sigla
+ for f in filicacoes
+ if intervalos_tem_intersecao(
+ self.legislatura.data_inicio,
+ self.legislatura.data_fim,
+ f.data,
+ f.data_desfiliacao or datetime.max.date())]
+
class CargoMesa(models.Model):
# TODO M2M ????
diff --git a/parlamentares/test_mandato.py b/parlamentares/test_mandato.py
new file mode 100644
index 000000000..ce855450d
--- /dev/null
+++ b/parlamentares/test_mandato.py
@@ -0,0 +1,33 @@
+from datetime import datetime
+
+import pytest
+from model_mommy import mommy
+
+from .models import Filiacao, Legislatura, Mandato
+
+pytestmark = pytest.mark.django_db
+
+
+def data(valor):
+ return datetime.strptime(valor, '%Y-%m-%d').date()
+
+
+def test_filiacoes():
+ legislatura = mommy.make(Legislatura,
+ data_inicio=data('2001-01-01'),
+ data_fim=data('2001-12-31'),
+ )
+ mandato = mommy.make(Mandato, legislatura=legislatura)
+ f1_fora, f2, f3, f4 = [mommy.make(Filiacao,
+ parlamentar=mandato.parlamentar,
+ data=ini,
+ data_desfiliacao=fim)
+ for ini, fim in (
+ (data('2000-01-01'), data('2000-12-31')),
+ (data('2000-01-01'), data('2001-03-01')),
+ (data('2001-03-02'), data('2001-10-01')),
+ (data('2001-10-02'), None),
+ )]
+ assert mandato.get_partidos() == [f2.partido.sigla,
+ f3.partido.sigla,
+ f4.partido.sigla]
diff --git a/parlamentares/test_parlamentares.py b/parlamentares/test_parlamentares.py
index 944985b95..e61aaf958 100644
--- a/parlamentares/test_parlamentares.py
+++ b/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.'])
diff --git a/parlamentares/urls.py b/parlamentares/urls.py
index c7a9f922c..6e0ebb975 100644
--- a/parlamentares/urls.py
+++ b/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\d+)/cadastro$',
- ParlamentaresCadastroView.as_view(), name='parlamentares_cadastro'),
url(r'^parlamentares/(?P\d+)/dependentes$',
ParlamentaresDependentesView.as_view(),
name='parlamentares_dependentes'),
@@ -59,9 +55,6 @@ urlpatterns = [
MandatoEditView.as_view(),
name='parlamentares_mandato_edit'),
- url(r'^parlamentares/(?P\d+)/editar$',
- ParlamentaresEditarView.as_view(), name='parlamentares_editar'),
-
url(r'^mesa-diretora/$',
MesaDiretoraView.as_view(), name='mesa_diretora'),
]
diff --git a/parlamentares/views.py b/parlamentares/views.py
index f0e5ae54e..bdee8d5f7 100644
--- a/parlamentares/views.py
+++ b/parlamentares/views.py
@@ -1,18 +1,17 @@
-import os
-
from django.contrib import messages
from django.core.urlresolvers import reverse, reverse_lazy
from django.http import HttpResponseRedirect
from django.shortcuts import redirect
+from django.utils.datastructures import MultiValueDictKeyError
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,
- ParlamentaresEditForm, ParlamentaresForm,
- ParlamentaresListForm)
+ ParlamentarCreateForm)
from .models import (CargoMesa, Coligacao, ComposicaoMesa, Dependente,
Filiacao, Legislatura, Mandato, NivelInstrucao,
Parlamentar, Partido, SessaoLegislativa, SituacaoMilitar,
@@ -24,7 +23,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')
@@ -33,6 +31,70 @@ TipoAfastamentoCrud = Crud.build(TipoAfastamento, 'tipo_afastamento')
TipoMilitarCrud = Crud.build(SituacaoMilitar, 'tipo_situa_militar')
+class ParlamentarCrud(Crud):
+ model = Parlamentar
+ help_path = ''
+
+ class CreateView(crud.base.CrudCreateView):
+ form_class = ParlamentarCreateForm
+
+ @property
+ def layout_key(self):
+ return 'ParlamentarCreate'
+
+ class ListView(crud.base.CrudListView):
+ template_name = "parlamentares/parlamentares_list.html"
+ paginate_by = None
+
+ def take_legislatura_id(self):
+ legislaturas = Legislatura.objects.all().order_by(
+ '-data_inicio', '-data_fim')
+
+ try:
+ legislatura_id = int(self.request.GET['periodo'])
+ except MultiValueDictKeyError:
+ legislatura_id = legislaturas.first().id
+
+ return legislatura_id
+
+ def get_queryset(self):
+ mandatos = Mandato.objects.filter(
+ legislatura_id=self.take_legislatura_id())
+ return mandatos
+
+ def get_rows(self, object_list):
+ parlamentares = []
+ for m in object_list:
+
+ if m.parlamentar.filiacao_set.last():
+ partido = ', '.join(str(p) for p in m.get_partidos())
+ else:
+ partido = _('Sem Registro')
+
+ parlamentar = [
+ (m.parlamentar.nome_parlamentar, m.parlamentar.id),
+ (partido, None),
+ ('Sim' if m.parlamentar.ativo else 'Não', None)
+ ]
+ parlamentares.append(parlamentar)
+ return parlamentares
+
+ def get_headers(self):
+ return ['Parlamentar', 'Partido', 'Ativo?']
+
+ def get_context_data(self, **kwargs):
+ context = super(ParlamentarCrud.ListView, self
+ ).get_context_data(**kwargs)
+ context.setdefault('title', self.verbose_name_plural)
+
+ # Adiciona legislatura para filtrar parlamentares
+ legislaturas = Legislatura.objects.all().order_by(
+ '-data_inicio', '-data_fim')
+ context['legislaturas'] = legislaturas
+ context['legislatura_id'] = self.take_legislatura_id()
+ return context
+
+
def validate(form, parlamentar, filiacao, request):
data_filiacao = form.cleaned_data['data']
data_desfiliacao = form.cleaned_data['data_desfiliacao']
@@ -95,123 +157,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
diff --git a/sapl/utils.py b/sapl/utils.py
index 6f7004c67..c2a7c5f68 100644
--- a/sapl/utils.py
+++ b/sapl/utils.py
@@ -184,3 +184,9 @@ restringe_tipos_de_arquivo_txt = fabrica_validador_de_tipos_de_arquivo(
TIPOS_TEXTO_PERMITIDOS, 'restringe_tipos_de_arquivo_txt')
restringe_tipos_de_arquivo_img = fabrica_validador_de_tipos_de_arquivo(
TIPOS_IMG_PERMITIDOS, 'restringe_tipos_de_arquivo_img')
+
+
+def intervalos_tem_intersecao(a_inicio, a_fim, b_inicio, b_fim):
+ maior_inicio = max(a_inicio, b_inicio)
+ menor_fim = min(a_fim, b_fim)
+ return maior_inicio <= menor_fim
diff --git a/templates/base.html b/templates/base.html
index 85f491306..27d96c4a7 100644
--- a/templates/base.html
+++ b/templates/base.html
@@ -49,7 +49,7 @@
Mesa Diretora
Comissões
- Parlamentares
+ Parlamentares
diff --git a/templates/crud/list.html b/templates/crud/list.html
index 297be1c3d..0d98cbdd2 100644
--- a/templates/crud/list.html
+++ b/templates/crud/list.html
@@ -10,6 +10,9 @@
{% block more_buttons %}{% endblock more_buttons %}
+
+{% block extra_content %} {% endblock %}
+
{% if not rows %}
{{ NO_ENTRIES_MSG }}
{% else %}
diff --git a/templates/parlamentares/parlamentares_cadastro.html b/templates/parlamentares/parlamentares_cadastro.html
deleted file mode 100644
index 354d3aa46..000000000
--- a/templates/parlamentares/parlamentares_cadastro.html
+++ /dev/null
@@ -1,7 +0,0 @@
-{% extends "parlamentares/parlamentares_detail.html" %}
-{% load i18n %}
-{% load crispy_forms_tags %}
-{% block actions %}{% endblock %}
-{% block detail_content %}
- {% crispy form %}
-{% endblock %}
\ No newline at end of file
diff --git a/templates/parlamentares/parlamentares_detail.html b/templates/parlamentares/parlamentares_detail.html
index 3eed3c3dd..5f2f0a8d1 100644
--- a/templates/parlamentares/parlamentares_detail.html
+++ b/templates/parlamentares/parlamentares_detail.html
@@ -3,7 +3,7 @@
{% block actions %}
{% endblock actions %}
diff --git a/templates/parlamentares/parlamentares_list.html b/templates/parlamentares/parlamentares_list.html
index 3d00cce02..b7329af37 100644
--- a/templates/parlamentares/parlamentares_list.html
+++ b/templates/parlamentares/parlamentares_list.html
@@ -1,11 +1,10 @@
-{% extends "parlamentares/parlamentares_detail.html" %}
+{% extends "crud/list.html" %}
{% load i18n %}
{% load crispy_forms_tags %}
-{% block detail_content %}
+{% block extra_content %}
-
{% endblock %}
diff --git a/templates/parlamentares/subnav.yaml b/templates/parlamentares/subnav.yaml
index bfef5bc0d..efb862f91 100644
--- a/templates/parlamentares/subnav.yaml
+++ b/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