Browse Source

WIP

Co-authored-by: João Pedro Sconetto <sconetto.joao@gmail.com>
pull/2260/head
Mariana Mendes 7 years ago
parent
commit
c578d563ad
  1. 12
      sapl/sessao/forms.py
  2. 10
      sapl/sessao/models.py
  3. 8
      sapl/sessao/urls.py
  4. 60
      sapl/sessao/views.py
  5. 2
      sapl/templates/sessao/subnav.yaml

12
sapl/sessao/forms.py

@ -20,8 +20,8 @@ from sapl.utils import (RANGE_DIAS_MES, RANGE_MESES,
MateriaPesquisaOrderingFilter, autor_label, MateriaPesquisaOrderingFilter, autor_label,
autor_modal, timezone) autor_modal, timezone)
from .models import (Bancada, Bloco, ExpedienteMateria, Orador, from .models import (Bancada, Bloco, ExpedienteMateria, JustificativaAusencia,
OradorExpediente, OrdemDia, SessaoPlenaria, Orador,OradorExpediente, OrdemDia, SessaoPlenaria,
SessaoPlenariaPresenca, TipoResultadoVotacao) SessaoPlenariaPresenca, TipoResultadoVotacao)
@ -676,3 +676,11 @@ class ResumoOrdenacaoForm(forms.Form):
raise ValidationError(_( raise ValidationError(_(
'Não é possível ter campos repetidos')) 'Não é possível ter campos repetidos'))
return self.cleaned_data return self.cleaned_data
class JustificativaAusenciaForm(forms.Form):
def clean(self):
cleaned_data = super(JustificativaAusenciaForm, self).clean()
if not self.is_valid():
return cleaned_data

10
sapl/sessao/models.py

@ -582,6 +582,10 @@ class TipoJustificativa(models.Model):
@reversion.register() @reversion.register()
class JustificativaAusencia(models.Model): class JustificativaAusencia(models.Model):
TIPO_AUSENCIA_CHOICES = Choices(
(1, 'sessao', 'Sessão'),
(2, 'materia', 'Matéria'),
)
parlamentar = models.ForeignKey(Parlamentar, on_delete=models.PROTECT) parlamentar = models.ForeignKey(Parlamentar, on_delete=models.PROTECT)
sessao_plenaria = models.ForeignKey(SessaoPlenaria, sessao_plenaria = models.ForeignKey(SessaoPlenaria,
on_delete=models.CASCADE) on_delete=models.CASCADE)
@ -591,4 +595,8 @@ class JustificativaAusencia(models.Model):
hora = models.CharField( hora = models.CharField(
max_length=5, verbose_name=_('Horário (hh:mm)')) max_length=5, verbose_name=_('Horário (hh:mm)'))
observacao = models.CharField( observacao = models.CharField(
max_length=150, blank=True, verbose_name=_('Observação')) max_length=150, blank=True, verbose_name=_('Observação'))
ausencia = models.PositiveIntegerField(
verbose_name=_('Ausente em'), choices=TIPO_AUSENCIA_CHOICES, default=1)

8
sapl/sessao/urls.py

@ -4,8 +4,8 @@ from sapl.sessao.views import (AdicionarVariasMateriasExpediente,
AdicionarVariasMateriasOrdemDia, BancadaCrud, AdicionarVariasMateriasOrdemDia, BancadaCrud,
BlocoCrud, CargoBancadaCrud, BlocoCrud, CargoBancadaCrud,
ExpedienteMateriaCrud, ExpedienteView, ExpedienteMateriaCrud, ExpedienteView,
MateriaOrdemDiaCrud, MesaView, OradorCrud, JustificativaAusenciaCrud, MateriaOrdemDiaCrud, MesaView,
OradorExpedienteCrud, PainelView, OradorCrud, OradorExpedienteCrud, PainelView,
PautaSessaoDetailView, PautaSessaoView, PautaSessaoDetailView, PautaSessaoView,
PesquisarPautaSessaoView, PesquisarPautaSessaoView,
PesquisarSessaoPlenariaView, PesquisarSessaoPlenariaView,
@ -152,8 +152,10 @@ urlpatterns = [
url(r'^sessao/(?P<pk>\d+)/votacao-simbolica-transparencia/(?P<oid>\d+)/(?P<mid>\d+)$', url(r'^sessao/(?P<pk>\d+)/votacao-simbolica-transparencia/(?P<oid>\d+)/(?P<mid>\d+)$',
VotacaoSimbolicaTransparenciaDetailView.as_view(), VotacaoSimbolicaTransparenciaDetailView.as_view(),
name='votacao_simbolica_transparencia'), name='votacao_simbolica_transparencia'),
url(r'^sessao/mudar-ordem-materia-sessao/', url(r'^sessao/mudar-ordem-materia-sessao/',
mudar_ordem_materia_sessao, mudar_ordem_materia_sessao,
name='mudar_ordem_materia_sessao'), name='mudar_ordem_materia_sessao'),
# Justificativa Ausencia
url(r'^sessao/(?P<pk>\d+)/justificativa/',
include(JustificativaAusenciaCrud.get_urls())),
] ]

60
sapl/sessao/views.py

@ -37,14 +37,14 @@ from sapl.sessao.forms import ExpedienteMateriaForm, OrdemDiaForm
from sapl.utils import show_results_filter_set, remover_acentos from sapl.utils import show_results_filter_set, remover_acentos
from .forms import (AdicionarVariasMateriasFilterSet, BancadaForm, BlocoForm, from .forms import (AdicionarVariasMateriasFilterSet, BancadaForm, BlocoForm,
ExpedienteForm, ListMateriaForm, MesaForm, JustificativaAusenciaForm, ExpedienteForm, ListMateriaForm, MesaForm,
OradorExpedienteForm, OradorForm, PautaSessaoFilterSet, OradorExpedienteForm, OradorForm, PautaSessaoFilterSet,
PresencaForm, ResumoOrdenacaoForm, SessaoPlenariaFilterSet, PresencaForm, ResumoOrdenacaoForm, SessaoPlenariaFilterSet,
SessaoPlenariaForm, VotacaoEditForm, VotacaoForm, SessaoPlenariaForm, VotacaoEditForm, VotacaoForm,
VotacaoNominalForm) VotacaoNominalForm)
from .models import (Bancada, Bloco, CargoBancada, CargoMesa, from .models import (Bancada, Bloco, CargoBancada, CargoMesa,
ExpedienteMateria, ExpedienteSessao, IntegranteMesa, ExpedienteMateria, ExpedienteSessao, JustificativaAusencia,
MateriaLegislativa, Orador, OradorExpediente, OrdemDia, IntegranteMesa, MateriaLegislativa, Orador, OradorExpediente, OrdemDia,
PresencaOrdemDia, RegistroVotacao, ResumoOrdenacao, PresencaOrdemDia, RegistroVotacao, ResumoOrdenacao,
SessaoPlenaria, SessaoPlenariaPresenca, TipoExpediente, SessaoPlenaria, SessaoPlenariaPresenca, TipoExpediente,
TipoJustificativa, TipoResultadoVotacao, TipoSessaoPlenaria, TipoJustificativa, TipoResultadoVotacao, TipoSessaoPlenaria,
@ -141,7 +141,7 @@ def abrir_votacao(request, pk, spk):
presenca_model = SessaoPlenariaPresenca presenca_model = SessaoPlenariaPresenca
redirect_url = 'expedientemateria_list' redirect_url = 'expedientemateria_list'
if not model: if not model:
raise Http404 raise Http404()
if (verifica_presenca(request, presenca_model, spk) and if (verifica_presenca(request, presenca_model, spk) and
verifica_votacoes_abertas(request) and verifica_votacoes_abertas(request) and
@ -2898,3 +2898,55 @@ def mudar_ordem_materia_sessao(request):
materia_1.save() materia_1.save()
return return
class JustificativaAusenciaCrud(Crud):
model = JustificativaAusencia
public = [RP_LIST, RP_DETAIL, ]
class BaseMixin(Crud.BaseMixin):
list_field_names = ['sessao_plenaria', 'tipo_ausencia', 'hora',
'data']
ordering = 'sessao_plenaria', 'tipo_ausencia', 'data'
class ListView(Crud.ListView):
paginate_by = 10
class CreateView(Crud.CreateView):
form_class = JustificativaAusenciaForm
def get_success_url(self):
pk = self.sessao_plenaria.id
return reverse('sapl.sessao:justificativaausencia_list', kwargs={'pk': pk})
def get_initial(self):
if self.sessao_plenaria.finalizada is None or \
not self.sessao_plenaria.finalizada:
msg = _('A Sessão deve estar finalizada para registrar as ausências.')
messages.add_message(self.request, messages.ERROR, msg)
else:
return {}
def form_valid(self, form):
return super(Crud.CreateView, self).form_valid(form)
class UpdateView(Crud.UpdateView):
form_class = JustificativaAusenciaForm
def get_initial(self):
if self.sessao_plenaria.finalizada is None or \
not self.sessao_plenaria.finalizada:
msg = _('A Sessão deve estar finalizada para editar as ausências.')
messages.add_message(self.request, messages.ERROR, msg)
else:
return {'sessao_plenaria': self.sessao_plenaria}
class DeleteView(Crud.DeleteView):
pass
class DetailView(Crud.DetailView):
layout_key = 'JustificativaAusenciaDetail'
def get(self, request, *args, **kwargs):
return super().get(request, *args, **kwargs)

2
sapl/templates/sessao/subnav.yaml

@ -8,6 +8,8 @@
url: mesa url: mesa
- title: {% trans 'Presença' %} - title: {% trans 'Presença' %}
url: presenca url: presenca
- title: {% trans 'Ausência' %}
url: justificativaausencia_list
- title: {% trans 'Explicações Pessoais' %} - title: {% trans 'Explicações Pessoais' %}
url: orador_list url: orador_list

Loading…
Cancel
Save