From 1523ee3be9c7075681d739221e5e59eb755cd48d Mon Sep 17 00:00:00 2001 From: ulyssesBML Date: Wed, 10 Jul 2019 14:13:48 -0300 Subject: [PATCH] Colocando data em html de cargo mesa MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Validando datas Melhorando js do cadastro da mesa diretora Adicionando data de inicio e fim e migrações Adicionando cadastro da data Adicionando validação de data Fix #525 :Arrumando migrações Mudando visual e adaptando codigo. Fix #2912 --- .../migrations/0036_auto_20191003_1550.py | 40 ++++ sapl/parlamentares/models.py | 4 + sapl/parlamentares/views.py | 91 ++++---- .../parlamentares/composicaomesa_form.html | 197 ++++++++++++------ .../public_composicaomesa_form.html | 2 + 5 files changed, 237 insertions(+), 97 deletions(-) create mode 100644 sapl/parlamentares/migrations/0036_auto_20191003_1550.py diff --git a/sapl/parlamentares/migrations/0036_auto_20191003_1550.py b/sapl/parlamentares/migrations/0036_auto_20191003_1550.py new file mode 100644 index 000000000..ae57cdcb9 --- /dev/null +++ b/sapl/parlamentares/migrations/0036_auto_20191003_1550.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-07-22 14:22 +from __future__ import unicode_literals + +from django.db import migrations, models + +def aloca_datas(apps, schema_editor): + ComposicaoMesa = apps.get_model("parlamentares", "ComposicaoMesa") + db_alias = schema_editor.connection.alias + composicao_mesa = ComposicaoMesa.objects.all() + + for c in composicao_mesa: + c.data_inicio = c.sessao_legislativa.data_inicio + c.data_fim = c.sessao_legislativa.data_fim + c.save() + +class Migration(migrations.Migration): + + dependencies = [ + ('parlamentares', '0035_merge_20190802_0954'), + ] + + operations = [ + migrations.AddField( + model_name='composicaomesa', + name='data_fim', + field=models.DateField(blank=True, null=True, verbose_name='Data Fim'), + ), + migrations.AddField( + model_name='composicaomesa', + name='data_inicio', + field=models.DateField(blank=True, null=True, verbose_name='Data Início'), + ), + migrations.RunPython(aloca_datas), + migrations.AlterField( + model_name='composicaomesa', + name='data_inicio', + field=models.DateField(verbose_name='Data Início'), + ), + ] diff --git a/sapl/parlamentares/models.py b/sapl/parlamentares/models.py index dbe012eff..977fafa89 100644 --- a/sapl/parlamentares/models.py +++ b/sapl/parlamentares/models.py @@ -556,6 +556,10 @@ class ComposicaoMesa(models.Model): on_delete=models.PROTECT) cargo = models.ForeignKey(CargoMesa, on_delete=models.PROTECT) + data_inicio = models.DateField(verbose_name=_('Data Início')) + data_fim = models.DateField( + blank=True, null=True, verbose_name=_('Data Fim')) + class Meta: verbose_name = _('Ocupação de cargo na Mesa') verbose_name_plural = _('Ocupações de cargo na Mesa') diff --git a/sapl/parlamentares/views.py b/sapl/parlamentares/views.py index 8c6986418..9b5cbd3d0 100644 --- a/sapl/parlamentares/views.py +++ b/sapl/parlamentares/views.py @@ -31,7 +31,7 @@ from sapl.crud.base import (RP_CHANGE, RP_DETAIL, RP_LIST, Crud, CrudAux, MasterDetailCrud, make_pagination) from sapl.materia.models import Autoria, Proposicao, Relatoria from sapl.parlamentares.apps import AppConfig -from sapl.utils import (parlamentares_ativos, show_results_filter_set) +from sapl.utils import intervalos_tem_intersecao, parlamentares_ativos, show_results_filter_set from .forms import (FiliacaoForm, FrenteForm, LegislaturaForm, MandatoForm, @@ -849,22 +849,13 @@ class MesaDiretoraView(FormView): mesa = sessao_atual.composicaomesa_set.all().order_by( 'cargo_id') if sessao_atual else [] - cargos_ocupados = [m.cargo for m in mesa] - cargos = CargoMesa.objects.all() - cargos_vagos = list(set(cargos) - set(cargos_ocupados)) - - parlamentares = legislatura.mandato_set.all() - parlamentares_ocupados = [m.parlamentar for m in mesa] - parlamentares_vagos = list( - set( - [p.parlamentar for p in parlamentares if p.parlamentar.ativo]) - set( - parlamentares_ocupados)) - parlamentares_vagos.sort(key=lambda x: x.nome_parlamentar) + cargos_vagos = CargoMesa.objects.all() + + parlamentares = [m.parlamentar for m in legislatura.mandato_set.all()] + parlamentares.sort(key=lambda x: x.nome_parlamentar) # Se todos os cargos estiverem ocupados, a listagem de parlamentares # deve ser renderizada vazia - if not cargos_vagos: - parlamentares_vagos = [] - + return self.render_to_response( {'legislaturas': Legislatura.objects.all( ).order_by('-numero'), @@ -872,7 +863,7 @@ class MesaDiretoraView(FormView): 'sessoes': sessoes, 'sessao_selecionada': sessao_atual, 'composicao_mesa': mesa, - 'parlamentares': parlamentares_vagos, + 'parlamentares': parlamentares, 'cargos_vagos': cargos_vagos }) @@ -915,25 +906,16 @@ def altera_field_mesa(request): composicao_mesa = ComposicaoMesa.objects.filter( sessao_legislativa=sessao_selecionada).order_by('cargo_id') - cargos_ocupados = [m.cargo for m in composicao_mesa] cargos = CargoMesa.objects.all() - cargos_vagos = list(set(cargos) - set(cargos_ocupados)) - - parlamentares = Legislatura.objects.get( - id=legislatura).mandato_set.all() - parlamentares_ocupados = [m.parlamentar for m in composicao_mesa] - parlamentares_vagos = list( - set( - [p.parlamentar for p in parlamentares]) - set( - parlamentares_ocupados)) - parlamentares_vagos.sort(key=lambda x: x.nome_parlamentar) - lista_sessoes = [(s.id, s.__str__()) for s in sessoes] + parlamentares = [p.parlamentar for p in Legislatura.objects.get(id=legislatura).mandato_set.all()] + parlamentares.sort(key=lambda x: x.nome_parlamentar) + lista_sessoes = [(s.id, s.__str__(),s.data_inicio.year) for s in sessoes] lista_composicao = [(c.id, c.parlamentar.__str__(), - c.cargo.__str__()) for c in composicao_mesa] + c.cargo.__str__(), c.data_inicio.strftime('%d/%m/%Y'), c.data_fim.strftime('%d/%m/%Y')) for c in composicao_mesa] lista_parlamentares = [( - p.id, p.__str__()) for p in parlamentares_vagos] - lista_cargos = [(c.id, c.__str__()) for c in cargos_vagos] + p.id, p.__str__()) for p in parlamentares] + lista_cargos = [(c.id, c.__str__()) for c in cargos] return JsonResponse( {'lista_sessoes': lista_sessoes, @@ -951,6 +933,7 @@ def insere_parlamentar_composicao(request): """ logger = logging.getLogger(__name__) username = request.user.username + msg = "" if request.user.has_perm( '%s.add_%s' % ( AppConfig.label, ComposicaoMesa._meta.model_name)): @@ -983,22 +966,52 @@ def insere_parlamentar_composicao(request): ". Tentando obter CargoMesa com id={}.".format(request.POST['cargo'])) composicao.cargo = CargoMesa.objects.get( id=int(request.POST['cargo'])) - parlamentar_ja_inserido = ComposicaoMesa.objects.filter( - sessao_legislativa_id=composicao.sessao_legislativa.id, - cargo_id=composicao.cargo.id).exists() - - if parlamentar_ja_inserido: - return JsonResponse({'msg': ('Parlamentar já inserido!', 0)}) + if composicao.cargo.unico: + parlamentares_nesse_cargo = ComposicaoMesa.objects.filter( + sessao_legislativa_id=composicao.sessao_legislativa.id, + cargo_id=composicao.cargo.id) + aux_data_inicio = datetime.strptime(request.POST['data_inicial'],'%d/%m/%Y') + aux_data_fim = datetime.strptime(request.POST['data_fim'],'%d/%m/%Y') + + for cargo_mesa in parlamentares_nesse_cargo: + if intervalos_tem_intersecao(cargo_mesa.data_inicio, + cargo_mesa.data_fim, + aux_data_inicio.date(), + aux_data_fim.date()): + return JsonResponse({'msg': ('Parlamentar já inserido com esse cargo nesse periodo!', 0)}) + + + if aux_data_inicio.date() < composicao.sessao_legislativa.data_inicio or aux_data_fim.date() > composicao.sessao_legislativa.data_fim: + return JsonResponse({'msg': ('Data fora de período da sessão plenária! O periodo é entre '+ + str(composicao.sessao_legislativa.data_inicio.strftime("%d/%m/%Y")) +" até "+ + str(composicao.sessao_legislativa.data_fim.strftime("%d/%m/%Y")), 0)}) + + id_parlamentar = request.POST.get('parlamentar',None) + if id_parlamentar: + composicao_parlamentar = ComposicaoMesa.objects.filter(sessao_legislativa_id=composicao.sessao_legislativa.id, + parlamentar_id=id_parlamentar) + + for aux_comp in composicao_parlamentar: + if intervalos_tem_intersecao(aux_comp.data_inicio, aux_comp.data_fim,aux_data_inicio.date(),aux_data_fim.date()): + return JsonResponse({'msg': ('Esse parlamentar já possui cargo nesse período.', 0)}) + + + composicao.data_inicio = aux_data_inicio + composicao.data_fim = aux_data_fim composicao.save() + msg = {'msg': ('Parlamentar inserido com sucesso!', 1)} except MultiValueDictKeyError: logger.error("user=" + username + ". 'MultiValueDictKeyError', nenhum cargo foi inserido!") - return JsonResponse({'msg': ('Nenhum cargo foi inserido!', 0)}) + msg = {'msg': ('Nenhum cargo foi inserido!', 0)} + + except ValueError: + msg = {'msg': ('Erro ao cadastrar, verifique se suas datas estão no formato correto dd/mm/aaaa.', 0)} logger.info("user=" + username + ". Parlamentar inserido com sucesso!") - return JsonResponse({'msg': ('Parlamentar inserido com sucesso!', 1)}) + return JsonResponse(msg) else: logger.error("user=" + username + diff --git a/sapl/templates/parlamentares/composicaomesa_form.html b/sapl/templates/parlamentares/composicaomesa_form.html index 9a10c0d47..85051d3ca 100644 --- a/sapl/templates/parlamentares/composicaomesa_form.html +++ b/sapl/templates/parlamentares/composicaomesa_form.html @@ -1,5 +1,6 @@ {% extends "crud/detail.html" %} {% load i18n %} +{% load common_tags %} {% block actions %} {% endblock %} {% block detail_content %} @@ -51,54 +52,102 @@
- Escolha da Composição da Mesa Diretora -
-
- - -
+ +
+
+ +
+
-
-

- {% if perms.parlamentares.add_cargomesa %} - - {% endif %} -
-
- {% if perms.parlamentares.add_composicaomesa %} - - {% endif %} -
-
- - -
- -
+ + Escolha da Composição da Mesa Diretora + + + + + + + + + + + + {% for p in composicao_mesa %} + + + + + + + + + {% endfor %} + +
ParlamentarCargoData de InicioData FimApagar
{{p.parlamentar}}{{p.cargo}}{{p.data_inicio|date:"d/m/Y"}}{{p.data_fim|date:"d/m/Y"}}
+
-
+ + + {% endif %} {% endblock detail_content %} {% block extra_js %} - + + + + diff --git a/sapl/templates/parlamentares/public_composicaomesa_form.html b/sapl/templates/parlamentares/public_composicaomesa_form.html index 5981adffc..dc38b8d67 100644 --- a/sapl/templates/parlamentares/public_composicaomesa_form.html +++ b/sapl/templates/parlamentares/public_composicaomesa_form.html @@ -40,6 +40,7 @@ Nome do Parlamentar Partido Cargo + Período (Inicio - Fim) @@ -56,6 +57,7 @@ {{p.parlamentar.nome_parlamentar}} {{p.parlamentar.filiacao_atual}} {{p.cargo}} + {{p.data_inicio|date:"d/m/Y"}} - {{p.data_fim|date:"d/m/Y"}} {% endfor %}