From d60c50dced50b4202b27ee07f628f63455ba33c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Rodrigues?= Date: Fri, 20 Mar 2020 13:51:55 -0300 Subject: [PATCH] =?UTF-8?q?Implementa=20c=C3=B3pia=20de=20mat=C3=A9rias?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/sessao/views.py | 177 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 177 insertions(+) diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py index 25cde87d1..71c04cb5c 100755 --- a/sapl/sessao/views.py +++ b/sapl/sessao/views.py @@ -529,6 +529,158 @@ 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') + + def get_context_data(self, **kwargs): + context = super(CopiarMateriasExpediente, 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) + + context["lista_materias_expediente_disponiveis"] = lista_materias_expediente_disponiveis + context["numero_resultados"] = len(context["lista_materias_expediente_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['lista_materias_expediente_disponiveis'] = [] + + return context + + def post(self, request, *args, **kwargs): + marcadas = request.POST.getlist('expediente_id') + + if len(marcadas) == 0: + msg = _('Nenhuma matéria do expediente 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) + + 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() + + msg = _('Matéria(s) do Expediente copiada(s) com sucesso.') + messages.add_message(request, messages.SUCCESS, msg) + + success_url = reverse( + 'sapl.sessao:expedientemateria_list', kwargs={'pk': sessao_plenaria_destino_id} + ) + return HttpResponseRedirect(success_url) + + +class CopiarMateriasOrdemDia(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['lista_materias'] = [] + + 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) + + 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 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) + + success_url = reverse( + 'sapl.sessao:ordemdia_list', kwargs={'pk': sessao_plenaria_destino_id} + ) + return HttpResponseRedirect(success_url) + + class TipoExpedienteCrud(CrudAux): model = TipoExpediente @@ -598,6 +750,18 @@ class MateriaOrdemDiaCrud(MasterDetailCrud): self.paginate_by = None 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 + has_permition = self.request.user.has_module_perms(AppConfig.label) return customize_link_materia(context, self.kwargs['pk'], has_permition, False) @@ -644,6 +808,19 @@ class ExpedienteMateriaCrud(MasterDetailCrud): context = super().get_context_data(**kwargs) + 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')