diff --git a/sapl/sessao/urls.py b/sapl/sessao/urls.py index 5c9f29e99..529feb86a 100644 --- a/sapl/sessao/urls.py +++ b/sapl/sessao/urls.py @@ -35,7 +35,7 @@ from sapl.sessao.views import (AdicionarVariasMateriasExpediente, ExpedienteLeituraView, OrdemDiaLeituraView, retirar_leitura, - CopiarMateriasExpediente, CopiarMateriasOrdemDia) + TransferenciaMateriasExpediente, TransferenciaMateriasOrdemDia) from .apps import AppConfig @@ -106,12 +106,12 @@ urlpatterns = [ url(r'^sessao/(?P\d+)/adicionar-varias-materias-ordem-dia/', AdicionarVariasMateriasOrdemDia.as_view(), name='adicionar_varias_materias_ordem_dia'), - url(r'^sessao/(?P\d+)/copiar-materias-expediente/', - CopiarMateriasExpediente.as_view(), - name="copiar_materias_expediente"), - url(r'^sessao/(?P\d+)/copiar-materias-ordemdia/', - CopiarMateriasOrdemDia.as_view(), - name="copiar_materias_ordemdia"), + url(r'^sessao/(?P\d+)/transf-mat-exp/', + TransferenciaMateriasExpediente.as_view(), + name="transf_mat_exp"), + url(r'^sessao/(?P\d+)/transf-mat-ordemdia/', + TransferenciaMateriasOrdemDia.as_view(), + name="transf_mat_ordemdia"), # PAUTA SESSÃO url(r'^sessao/pauta-sessao$', diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py index 05719198f..bea859cfc 100755 --- a/sapl/sessao/views.py +++ b/sapl/sessao/views.py @@ -529,156 +529,194 @@ def get_presencas_generic(model, sessao, legislatura): yield (m.parlamentar, False) -class CopiarMateriasExpediente(PermissionRequiredMixin, ListView): - model = SessaoPlenaria - template_name = 'sessao/copiar_materias_expediente.html' - permission_required = ('sessao.change_expedientemateria') +class TransferenciaMateriasSessaoAbstract(PermissionRequiredMixin, ListView): + logger = logging.getLogger(__name__) + template_name = 'sessao/transf_mat_sessao.html' + + def get(self, *args, **kwargs): + sessao_plenaria_atual = SessaoPlenaria.objects.get(pk=self.kwargs['pk']) + if not sessao_plenaria_atual.finalizada: + msg = _('A sessão plenária deve estar finalizada.') + messages.add_message(self.request, messages.ERROR, msg) + + if self.expediente: + error_url = reverse( + 'sapl.sessao:expedientemateria_list', + kwargs={'pk': sessao_plenaria_atual.id} + ) + elif self.ordem: + error_url = reverse( + 'sapl.sessao:ordemdia_list', + kwargs={'pk': sessao_plenaria_atual.id} + ) + return HttpResponseRedirect(error_url) + + return super().get(*args, **kwargs) def get_context_data(self, **kwargs): - context = super(CopiarMateriasExpediente, self).get_context_data(**kwargs) + context = super( + TransferenciaMateriasSessaoAbstract, self + ).get_context_data(**kwargs) - context["title"] = _("Cópia de Matérias do Expediente") - - try: - sessao_plenaria_atual = SessaoPlenaria.objects.get(pk=self.kwargs['pk']) - - lista_materias_expediente_disponiveis = [] - expedientes = ExpedienteMateria.objects.filter(sessao_plenaria=sessao_plenaria_atual) - for expediente in expedientes: - if expediente.tipo_votacao == 4: - if not RegistroLeitura.objects.filter(expediente=expediente).exists(): - lista_materias_expediente_disponiveis.append(expediente) - else: - if not RegistroVotacao.objects.filter(expediente=expediente).exists(): - lista_materias_expediente_disponiveis.append(expediente) + sessao_plenaria_atual = SessaoPlenaria.objects.get(pk=self.kwargs['pk']) - context["lista_materias_expediente_disponiveis"] = lista_materias_expediente_disponiveis - context["numero_resultados"] = len(context["lista_materias_expediente_disponiveis"]) + ## O CÓDIGO COMENTADO RESTRINGI A CÓPIA DAS MATÉRIAS LIDAS OU VOTADAS + # LEITURA = 4 + # lista_disponiveis = [] - if context['numero_resultados']: - context['sessoes_disponiveis'] = SessaoPlenaria.objects.filter( - data_inicio__gte=sessao_plenaria_atual.data_inicio - ).exclude(pk=sessao_plenaria_atual.pk).order_by("-data_inicio") - except: - context['ERROR'] = True + if self.expediente: + context["title"] = _("Cópia de Matérias do Expediente") + + # for expediente in ExpedienteMateria.objects.filter( + # sessao_plenaria=sessao_plenaria_atual + # ): + # if expediente.tipo_votacao == LEITURA: + # if not RegistroLeitura.objects.filter( + # expediente=expediente + # ).exists(): + # lista_disponiveis.append(expediente) + # else: + # if not RegistroVotacao.objects.filter( + # expediente=expediente + # ).exists(): + # lista_disponiveis.append(expediente) + + context['lista_disponiveis'] = ExpedienteMateria.objects.filter( + sessao_plenaria=sessao_plenaria_atual + ) + + elif self.ordem: + context["title"] = _("Cópia de Matérias da Ordem do Dia") + + # for ordemdia in OrdemDia.objects.filter( + # sessao_plenaria=sessao_plenaria_atual + # ): + # if ordemdia.tipo_votacao == 4: + # if not RegistroLeitura.objects.filter( + # ordem=ordemdia + # ).exists(): + # lista_disponiveis.append(ordemdia) + # else: + # if not RegistroVotacao.objects.filter( + # ordem=ordemdia + # ).exists(): + # lista_disponiveis.append(ordemdia) + + context['lista_disponiveis'] = OrdemDia.objects.filter( + sessao_plenaria=sessao_plenaria_atual + ) + + # context["lista_disponiveis"] = lista_disponiveis + context["numero_resultados"] = len(context["lista_disponiveis"]) + + if context['numero_resultados']: + context['sessoes'] = SessaoPlenaria.objects.filter( + data_inicio__gte=sessao_plenaria_atual.data_inicio + ).exclude(pk=sessao_plenaria_atual.pk).order_by("-data_inicio") return context def post(self, request, *args, **kwargs): - marcadas = request.POST.getlist('expediente_id') + marcadas = request.POST.getlist('opcao_id') if len(marcadas) == 0: - msg = _('Nenhuma matéria do expediente foi selecionada.') + msg = _('Nenhuma matéria foi selecionada.') messages.add_message(request, messages.ERROR, msg) return self.get(request, self.kwargs) sessao_plenaria_destino_id = request.POST['sessao_plenaria'] if not sessao_plenaria_destino_id: + self.logger.error( + "A variável sessao_plenaria da requisição de cópia de " \ + "matérias entre sessões plenárias não existe." + ) + msg = _('Ocorreu um erro inesperado. Tente novamente.') messages.add_message(request, messages.ERROR, msg) - msg_c = _('Se o problema persistir, entre em contato com o suporte do Interlegis.') + msg_c = _( + 'Se o problema persistir, entre em contato com o suporte do ' \ + 'Interlegis.' + ) messages.add_message(request, messages.WARNING, msg_c) return self.get(request, self.kwargs) - for expediente in ExpedienteMateria.objects.filter(id__in=marcadas): - - novo_expediente = ExpedienteMateria() - novo_expediente.sessao_plenaria = SessaoPlenaria.objects.get(id=sessao_plenaria_destino_id) - novo_expediente.materia = expediente.materia - novo_expediente.data_ordem = expediente.data_ordem - novo_expediente.observacao = expediente.observacao - novo_expediente.numero_ordem = expediente.numero_ordem - novo_expediente.resultado = expediente.resultado - novo_expediente.tipo_votacao = expediente.tipo_votacao - novo_expediente.votacao_aberta = expediente.votacao_aberta - novo_expediente.registro_aberto = expediente.registro_aberto - novo_expediente.save() + sessao = SessaoPlenaria.objects.get(id=sessao_plenaria_destino_id) + if self.expediente: + numero_ordem = 0 + lista_expediente = [] + + if ExpedienteMateria.objects.filter(sessao_plenaria=sessao).exists(): + numero_ordem = ExpedienteMateria.objects.filter( + sessao_plenaria=sessao + ).last().numero_ordem + for expediente in ExpedienteMateria.objects.filter(id__in=marcadas): + numero_ordem = numero_ordem + 1 + lista_expediente.append( + ExpedienteMateria( + sessao_plenaria=sessao, materia=expediente.materia, + data_ordem=expediente.data_ordem, + observacao=expediente.observacao, + numero_ordem=numero_ordem, + tipo_votacao=expediente.tipo_votacao, + votacao_aberta=False, registro_aberto=False + ) + ) + ExpedienteMateria.objects.bulk_create(lista_expediente) + + elif self.ordem: + numero_ordem = 0 + lista_ordemdia = [] - msg = _('Matéria(s) do Expediente copiada(s) com sucesso.') + if OrdemDia.objects.filter(sessao_plenaria=sessao).exists(): + numero_ordem = OrdemDia.objects.filter( + sessao_plenaria=sessao + ).last().numero_ordem + for ordemdia in OrdemDia.objects.filter(id__in=marcadas): + numero_ordem = numero_ordem + 1 + lista_ordemdia.append( + OrdemDia( + sessao_plenaria=sessao, materia=ordemdia.materia, + data_ordem=ordemdia.data_ordem, + observacao=ordemdia.observacao, + numero_ordem=numero_ordem, + tipo_votacao=ordemdia.tipo_votacao, + votacao_aberta=False, registro_aberto=False + ) + ) + OrdemDia.objects.bulk_create(lista_ordemdia) + + msg = _('Matéria(s) copiada(s) com sucesso.') messages.add_message(request, messages.SUCCESS, msg) - success_url = reverse( - 'sapl.sessao:expedientemateria_list', kwargs={'pk': sessao_plenaria_destino_id} - ) + if self.expediente: + success_url = reverse( + 'sapl.sessao:expedientemateria_list', + kwargs={'pk': sessao_plenaria_destino_id} + ) + elif self.ordem: + success_url = reverse( + 'sapl.sessao:ordemdia_list', + kwargs={'pk': sessao_plenaria_destino_id} + ) return HttpResponseRedirect(success_url) -class CopiarMateriasOrdemDia(PermissionRequiredMixin, ListView): - model = SessaoPlenaria - template_name = 'sessao/copiar_materias_ordemdia.html' - permission_required = ('sessao.change_ordemdia') - - def get_context_data(self, **kwargs): - context = super(CopiarMateriasOrdemDia, self).get_context_data(**kwargs) - - context["title"] = _("Cópia de Matérias da Ordem do Dia") - - try: - sessao_plenaria_atual = SessaoPlenaria.objects.get(pk=self.kwargs['pk']) - - lista_materias_ordemdia_disponiveis = [] - ordens_dia = OrdemDia.objects.filter(sessao_plenaria=sessao_plenaria_atual) - for ordemdia in ordens_dia: - if ordemdia.tipo_votacao == 4: - if not RegistroLeitura.objects.filter(ordem=ordemdia).exists(): - lista_materias_ordemdia_disponiveis.append(ordemdia) - else: - if not RegistroVotacao.objects.filter(ordem=ordemdia).exists(): - lista_materias_ordemdia_disponiveis.append(ordemdia) - - context["lista_materias_ordemdia_disponiveis"] = lista_materias_ordemdia_disponiveis - context["numero_resultados"] = len(context["lista_materias_ordemdia_disponiveis"]) - - if context['numero_resultados']: - context['sessoes_disponiveis'] = SessaoPlenaria.objects.filter( - data_inicio__gte=sessao_plenaria_atual.data_inicio - ).exclude(pk=sessao_plenaria_atual.pk).order_by("-data_inicio") - except: - context['ERROR'] = True - - return context - - def post(self, request, *args, **kwargs): - marcadas = request.POST.getlist('ordemdia_id') - - if len(marcadas) == 0: - msg = _('Nenhuma matéria da ordem do dia foi selecionada.') - messages.add_message(request, messages.ERROR, msg) - return self.get(request, self.kwargs) - - sessao_plenaria_destino_id = request.POST['sessao_plenaria'] - if not sessao_plenaria_destino_id: - msg = _('Ocorreu um erro inesperado. Tente novamente.') - messages.add_message(request, messages.ERROR, msg) +class TransferenciaMateriasExpediente(TransferenciaMateriasSessaoAbstract): + expediente = True + ordem = False - msg_c = _('Se o problema persistir, entre em contato com o suporte do Interlegis.') - messages.add_message(request, messages.WARNING, msg_c) + model = ExpedienteMateria + permission_required = ('sessao.change_expedientemateria', ) - return self.get(request, self.kwargs) - for ordemdia in OrdemDia.objects.filter(id__in=marcadas): - - nova_ordemdia = OrdemDia() - nova_ordemdia.sessao_plenaria = SessaoPlenaria.objects.get(id=sessao_plenaria_destino_id) - nova_ordemdia.materia = ordemdia.materia - nova_ordemdia.data_ordem = ordemdia.data_ordem - nova_ordemdia.observacao = ordemdia.observacao - nova_ordemdia.numero_ordem = ordemdia.numero_ordem - nova_ordemdia.resultado = ordemdia.resultado - nova_ordemdia.tipo_votacao = ordemdia.tipo_votacao - nova_ordemdia.votacao_aberta = ordemdia.votacao_aberta - nova_ordemdia.registro_aberto = ordemdia.registro_aberto - nova_ordemdia.save() - - msg = _('Matéria(s) da Ordem do Dia copiada(s) com sucesso.') - messages.add_message(request, messages.SUCCESS, msg) +class TransferenciaMateriasOrdemDia(TransferenciaMateriasSessaoAbstract): + expediente = False + ordem = True - success_url = reverse( - 'sapl.sessao:ordemdia_list', kwargs={'pk': sessao_plenaria_destino_id} - ) - return HttpResponseRedirect(success_url) + model = OrdemDia + permission_required = ('sessao.change_ordemdia', ) class TipoExpedienteCrud(CrudAux): @@ -751,16 +789,19 @@ class MateriaOrdemDiaCrud(MasterDetailCrud): context = super().get_context_data(**kwargs) - ordens_dia = OrdemDia.objects.filter(sessao_plenaria_id=self.kwargs['pk']) - for ordem_dia in ordens_dia: - if ordem_dia.tipo_votacao == 4: - if not RegistroLeitura.objects.filter(ordem=ordem_dia).exists(): - context["enable_btn"] = True - break - else: - if not RegistroVotacao.objects.filter(ordem=ordem_dia).exists(): - context['enable_btn'] = True - break + if OrdemDia.objects.filter(sessao_plenaria_id=self.kwargs['pk']).exists(): + context["enable_btn"] = True + + # ordens_dia = OrdemDia.objects.filter(sessao_plenaria_id=self.kwargs['pk']) + # for ordem_dia in ordens_dia: + # if ordem_dia.tipo_votacao == 4: + # if not RegistroLeitura.objects.filter(ordem=ordem_dia).exists(): + # context["enable_btn"] = True + # break + # else: + # if not RegistroVotacao.objects.filter(ordem=ordem_dia).exists(): + # context['enable_btn'] = True + # break has_permition = self.request.user.has_module_perms(AppConfig.label) return customize_link_materia(context, self.kwargs['pk'], has_permition, False) @@ -808,18 +849,27 @@ class ExpedienteMateriaCrud(MasterDetailCrud): context = super().get_context_data(**kwargs) - expedientes = ExpedienteMateria.objects.filter( + if ExpedienteMateria.objects.filter( sessao_plenaria_id=self.kwargs['pk'] - ) - for expediente in expedientes: - if expediente.tipo_votacao == 4: - if not RegistroLeitura.objects.filter(expediente=expediente).exists(): - context["enable_btn"] = True - break - else: - if not RegistroVotacao.objects.filter(expediente=expediente).exists(): - context["enable_btn"] = True - break + ).exists(): + context["enable_btn"] = True + + # expedientes = ExpedienteMateria.objects.filter( + # sessao_plenaria_id=self.kwargs['pk'] + # ) + # for expediente in expedientes: + # if expediente.tipo_votacao == 4: + # if not RegistroLeitura.objects.filter( + # expediente=expediente + # ).exists(): + # context["enable_btn"] = True + # break + # else: + # if not RegistroVotacao.objects.filter( + # expediente=expediente + # ).exists(): + # context["enable_btn"] = True + # break if self.request.GET.get('page'): context['page'] = self.request.GET.get('page') diff --git a/sapl/templates/sessao/copiar_materias_expediente.html b/sapl/templates/sessao/copiar_materias_expediente.html deleted file mode 100644 index 5faa1e9cc..000000000 --- a/sapl/templates/sessao/copiar_materias_expediente.html +++ /dev/null @@ -1,78 +0,0 @@ -{% extends "crud/list.html" %} -{% load i18n %} -{% load common_tags %} - -{% block base_content %} - {% if ERROR %} -
-

Ocorreu um erro inesperado. Tente novamente.
Se o problema persistir, entre em contato com o suporte do Interlegis.

- {% else %} - {% if lista_materias_expediente_disponiveis %} - {% if sessoes_disponiveis %} - {% if numero_resultados == 1 %} -

{% trans 'Existe 1 matéria do expediente disponível para cópia.' %}

- {% else %} -

Existem {{ numero_resultados }} matérias do expediente disponíveis para cópia.

- {% endif %} -
- {% csrf_token %} -
- Sessão Plenária Destino -
-
-
- - -
-
-
-
- Matérias Não Votadas ou Não Lidas - -
-
- -
-
- - - {% for expediente in lista_materias_expediente_disponiveis %} - - - - {% endfor %} - -
Matéria do Expediente
- - {{ expediente.materia.tipo.sigla }} {{ expediente.materia.numero }}/{{ expediente.materia.ano }} - {{ expediente.materia.tipo.descricao }} -
-
- -
- {% else %} -
-

Nenhuma sessão plenária está apta a receber a(s) cópia(s) de matéria do expediente.

- {% endif %} - {% else %} -
-

Nenhuma matéria do expediente dessa sessão plenária está disponível para cópia.

- {% endif %} - {% endif %} -{% endblock base_content %} - -{% block extra_js %} - -{% endblock %} diff --git a/sapl/templates/sessao/copiar_materias_ordemdia.html b/sapl/templates/sessao/copiar_materias_ordemdia.html deleted file mode 100644 index 467703b6c..000000000 --- a/sapl/templates/sessao/copiar_materias_ordemdia.html +++ /dev/null @@ -1,78 +0,0 @@ -{% extends "crud/list.html" %} -{% load i18n %} -{% load common_tags %} - -{% block base_content %} - {% if ERROR %} -
-

Ocorreu um erro inesperado. Tente novamente.
Se o problema persistir, entre em contato com o suporte do Interlegis.

- {% else %} - {% if lista_materias_ordemdia_disponiveis %} - {% if sessoes_disponiveis %} - {% if numero_resultados == 1 %} -

{% trans 'Existe 1 matéria da ordem do dia disponível para cópia.' %}

- {% else %} -

Existem {{ numero_resultados }} matérias da ordem do dia disponíveis para cópia.

- {% endif %} -
- {% csrf_token %} -
- Sessão Plenária Destino -
-
-
- - -
-
-
-
- Matérias Não Votadas ou Não Lidas - -
-
- -
-
- - - {% for ordemdia in lista_materias_ordemdia_disponiveis %} - - - - {% endfor %} - -
Matéria da Ordem do Dia
- - {{ ordemdia.materia.tipo.sigla }} {{ ordemdia.materia.numero }}/{{ ordemdia.materia.ano }} - {{ ordemdia.materia.tipo.descricao }} -
-
- -
- {% else %} -
-

Nenhuma sessão plenária está apta a receber a(s) cópia(s) de matéria do expediente.

- {% endif %} - {% else %} -
-

Nenhuma máteria da ordem do dia dessa sessão plenária está disponível para cópia.

- {% endif %} - {% endif %} -{% endblock base_content %} - -{% block extra_js %} - -{% endblock %} diff --git a/sapl/templates/sessao/expedientemateria_list.html b/sapl/templates/sessao/expedientemateria_list.html index bbcec93b6..dfd81734b 100644 --- a/sapl/templates/sessao/expedientemateria_list.html +++ b/sapl/templates/sessao/expedientemateria_list.html @@ -29,7 +29,7 @@ {% if perms|get_add_perm:view %} {% if enable_btn %} {% endif %} {% endif %} diff --git a/sapl/templates/sessao/ordemdia_list.html b/sapl/templates/sessao/ordemdia_list.html index 79bd3ace1..02270b0b6 100644 --- a/sapl/templates/sessao/ordemdia_list.html +++ b/sapl/templates/sessao/ordemdia_list.html @@ -28,7 +28,7 @@ {% if perms|get_add_perm:view %} {% if enable_btn %} {% endif %} {% endif %} diff --git a/sapl/templates/sessao/transf_mat_sessao.html b/sapl/templates/sessao/transf_mat_sessao.html new file mode 100644 index 000000000..06042e039 --- /dev/null +++ b/sapl/templates/sessao/transf_mat_sessao.html @@ -0,0 +1,73 @@ +{% extends "crud/list.html" %} +{% load i18n %} +{% load common_tags %} + +{% block base_content %} + {% if lista_disponiveis %} + {% if sessoes %} + {% if numero_resultados == 1 %} +

{% trans 'Existe 1 matéria disponível para cópia.' %}

+ {% else %} +

Existem {{ numero_resultados }} matérias disponíveis para cópia.

+ {% endif %} +
+ {% csrf_token %} +
+ Sessão Plenária Destino +
+
+
+ + +
+
+
+
+ Matérias Não Votadas ou Não Lidas + +
+
+ +
+
+ + + {% for opcao in lista_disponiveis %} + + + + {% endfor %} + +
Matéria
+ {{ opcao.materia.tipo.sigla }} {{ opcao.materia.numero }}/{{ opcao.materia.ano }} - {{ opcao.materia.tipo.descricao }} +
+
+ +
+ {% else %} +
+

Nenhuma sessão plenária está apta a receber a(s) cópia(s).

+ {% endif %} + {% else %} +
+

Nenhuma máteria está disponível para cópia.

+ {% endif %} +{% endblock base_content %} + +{% block extra_js %} + +{% endblock %} +