diff --git a/sessao/urls.py b/sessao/urls.py index 5842ed8f0..4fb71fb98 100644 --- a/sessao/urls.py +++ b/sessao/urls.py @@ -1,6 +1,7 @@ from django.conf.urls import include, url -from sessao.views import (ExpedienteView, MateriaOrdemDiaView, MesaView, +from sessao.views import (ExpedienteView, ExplicacaoDelete, ExplicacaoEdit, + ExplicacaoView, MateriaOrdemDiaView, MesaView, OradorExpedienteDelete, OradorExpedienteEdit, OradorExpedienteView, PainelView, PresencaOrdemDiaView, PresencaView, ResumoView, @@ -27,7 +28,13 @@ urlpatterns_sessao = sessao_crud.urlpatterns + [ url(r'^(?P\d+)/materiaordemdia$', MateriaOrdemDiaView.as_view(), name='materiaordemdia'), url(r'^(?P\d+)/resumo$', - ResumoView.as_view(), name='resumo') + ResumoView.as_view(), name='resumo'), + url(r'^(?P\d+)/explicacao$', + ExplicacaoView.as_view(), name='explicacao'), + url(r'^(?P\d+)/explicacao/excluir/(?P\d+)$', + ExplicacaoDelete.as_view(), name='explicacaoexcluir'), + url(r'^(?P\d+)/explicacao/editar/(?P\d+)$', + ExplicacaoEdit.as_view(), name='explicacaoeditar'), ] sessao_urls = urlpatterns_sessao, sessao_crud.namespace, sessao_crud.namespace diff --git a/sessao/views.py b/sessao/views.py index ad5fc84aa..04e607760 100644 --- a/sessao/views.py +++ b/sessao/views.py @@ -13,7 +13,7 @@ from parlamentares.models import Parlamentar from sapl.crud import build_crud from .models import (CargoMesa, ExpedienteMateria, ExpedienteSessao, - IntegranteMesa, OradorExpediente, OrdemDia, + IntegranteMesa, Orador, OradorExpediente, OrdemDia, PresencaOrdemDia, RegistroVotacao, SessaoPlenaria, SessaoPlenariaPresenca, TipoExpediente, TipoResultadoVotacao, TipoSessaoPlenaria) @@ -777,3 +777,139 @@ class ExpedienteView(FormMixin, sessao_crud.CrudDetailView): def get_success_url(self): pk = self.kwargs['pk'] return reverse('sessaoplenaria:expediente', kwargs={'pk': pk}) + + +class ExplicacaoView(FormMixin, sessao_crud.CrudDetailView): + template_name = 'sessao/explicacao.html' + form_class = OradorForm + + def get(self, request, *args, **kwargs): + self.object = self.get_object() + context = self.get_context_data(object=self.object) + return self.render_to_response(context) + + def get_candidatos_orador(self): + self.object = self.get_object() + lista_parlamentares = [] + lista_oradores = [] + + for parlamentar in Parlamentar.objects.all(): + if parlamentar.ativo: + lista_parlamentares.append(parlamentar) + + for orador in Orador.objects.filter( + sessao_plenaria_id=self.object.id): + parlamentar = Parlamentar.objects.get( + id=orador.parlamentar_id) + lista_oradores.append(parlamentar) + + lista = list(set(lista_parlamentares) - set(lista_oradores)) + lista.sort(key=lambda x: x.nome_parlamentar) + return lista + + def get_oradores(self): + self.object = self.get_object() + + for orador in Orador.objects.filter( + sessao_plenaria_id=self.object.id): + numero_ordem = orador.numero_ordem + url_discurso = orador.url_discurso + parlamentar = Parlamentar.objects.get( + id=orador.parlamentar_id) + yield(numero_ordem, url_discurso, parlamentar) + + def post(self, request, *args, **kwargs): + self.object = self.get_object() + form = OradorForm(request.POST) + + if form.is_valid(): + orador = Orador() + orador.sessao_plenaria_id = self.object.id + orador.numero_ordem = request.POST['numero_ordem'] + orador.parlamentar = Parlamentar.objects.get( + id=request.POST['parlamentar']) + orador.url_discurso = request.POST['url_discurso'] + orador.save() + + return self.form_valid(form) + else: + return self.form_invalid(form) + + def get_success_url(self): + pk = self.kwargs['pk'] + return reverse('sessaoplenaria:explicacao', kwargs={'pk': pk}) + + +class ExplicacaoDelete(FormMixin, sessao_crud.CrudDetailView): + template_name = 'sessao/delete_explicacao.html' + form_class = OradorDeleteForm + + def post(self, request, *args, **kwargs): + self.object = self.get_object() + current_url = request.get_full_path() + words = current_url.split('/') + form = OradorDeleteForm(request.POST) + + if form.is_valid(): + orador = Orador.objects.get( + sessao_plenaria_id=self.object.id, + parlamentar_id=words[-1]) + orador.delete() + return self.form_valid(form) + else: + return self.form_invalid(form) + + def get_success_url(self): + pk = self.kwargs['pk'] + return reverse('sessaoplenaria:explicacao', kwargs={'pk': pk}) + + +class ExplicacaoEdit(FormMixin, sessao_crud.CrudDetailView): + template_name = 'sessao/edit_explicacao.html' + form_class = OradorForm + + def get_success_url(self): + pk = self.kwargs['pk'] + return reverse('sessaoplenaria:explicacao', kwargs={'pk': pk}) + + def post(self, request, *args, **kwargs): + self.object = self.get_object() + form = OradorForm(request.POST) + + if form.is_valid(): + current_url = request.get_full_path() + words = current_url.split('/') + + orador = Orador.objects.get( + sessao_plenaria_id=self.object.id, + parlamentar_id=words[-1]) + orador.delete() + + orador = Orador() + orador.sessao_plenaria_id = self.object.id + orador.numero_ordem = request.POST['numero_ordem'] + orador.parlamentar = Parlamentar.objects.get( + id=words[-1]) + orador.url_discurso = request.POST['url_discurso'] + orador.save() + + return self.form_valid(form) + else: + return self.form_invalid(form) + + def get(self, request, *args, **kwargs): + self.object = self.get_object() + context = self.get_context_data(object=self.object) + + current_url = self.request.get_full_path() + words = current_url.split('/') + + parlamentar = Parlamentar.objects.get(id=words[-1]) + orador = Orador.objects.get( + sessao_plenaria=self.object, parlamentar=parlamentar) + + explicacao = {'parlamentar': parlamentar, 'numero_ordem': + orador.numero_ordem, 'url_discurso': orador.url_discurso} + context.update({'explicacao': explicacao}) + + return self.render_to_response(context) diff --git a/templates/sessao/delete_explicacao.html b/templates/sessao/delete_explicacao.html new file mode 100644 index 000000000..f91af9767 --- /dev/null +++ b/templates/sessao/delete_explicacao.html @@ -0,0 +1,21 @@ +{% extends "base.html" %} +{% load i18n %} + +{% block base_content %} +
{% csrf_token %} +
+ +

+ {% blocktrans %} + Tem certeza que deseja apagar o orador? + {% endblocktrans %} +

+ + + +
+
+{% endblock %} diff --git a/templates/sessao/edit_explicacao.html b/templates/sessao/edit_explicacao.html new file mode 100644 index 000000000..051ac375d --- /dev/null +++ b/templates/sessao/edit_explicacao.html @@ -0,0 +1,26 @@ +{% extends "sessao/sessaoplenaria_detail.html" %} +{% load i18n %} +{% load crispy_forms_tags %} + +{% block detail_content %} + +
+ Editar Orador +
+ {% csrf_token %} + +
    +
  • Ordem de pronunciamento
  • +
  • Parlamentar
  • +
  • URL Discurso
  • +
+
    +
  • +
  • +
  • +
+ +
+
+ +{% endblock detail_content %} diff --git a/templates/sessao/explicacao.html b/templates/sessao/explicacao.html new file mode 100644 index 000000000..c1ed521d4 --- /dev/null +++ b/templates/sessao/explicacao.html @@ -0,0 +1,52 @@ +{% extends "sessao/sessaoplenaria_detail.html" %} +{% load i18n %} +{% load crispy_forms_tags %} + +{% block detail_content %} + +
+ Oradores do Expediente +
    +
  • Ordem de pronunciamento
  • +
  • Parlamentar
  • +
  • URL Discurso
  • +
  • Editar/Excluir
  • +
+ {% for numero_ordem, url_discurso, parlamentar in view.get_oradores %} +
    +
  • {{numero_ordem}}
  • +
  • {{parlamentar.nome_parlamentar }}
  • +
  • {% if not url_discurso %}Orador sem discurso cadastrado{% else %}{{url_discurso}}{% endif %}
  • +
  • + Editar + / Excluir +
  • +
+ {% endfor %} +
+ +
+ Adicionar Orador +
+ {% csrf_token %} + +
    +
  • Ordem de pronunciamento
  • +
  • Parlamentar
  • +
  • URL Discurso
  • +
+ +
    +
  • + +
  • +
  • +
+ +
+
+{% endblock detail_content %} diff --git a/templates/sessao/sessaoplenaria_detail.html b/templates/sessao/sessaoplenaria_detail.html index 95925ba50..d48b0e606 100644 --- a/templates/sessao/sessaoplenaria_detail.html +++ b/templates/sessao/sessaoplenaria_detail.html @@ -9,6 +9,7 @@
{% trans 'Presença Ordem do Dia' %}
{% trans 'Oradores do Expediente' %}
{% trans 'Mesa' %}
+
{% trans 'Explicações Pessoais' %}
{% trans 'Matérias' %}
{% trans 'Painel Eletrônico' %}
{% trans 'Resumo' %}