diff --git a/sapl/sessao/forms.py b/sapl/sessao/forms.py index 7ba3c2b1e..5e5c0a077 100644 --- a/sapl/sessao/forms.py +++ b/sapl/sessao/forms.py @@ -6,12 +6,15 @@ from django import forms from django.contrib.contenttypes.models import ContentType from django.core.exceptions import ObjectDoesNotExist, ValidationError from django.db import transaction +from django.db.models import Q from django.forms import ModelForm +from django.forms.widgets import CheckboxSelectMultiple from django.utils.translation import ugettext_lazy as _ import django_filters +from floppyforms import widgets from sapl.base.models import Autor, TipoAutor -from sapl.crispy_layout_mixin import form_actions, to_row +from sapl.crispy_layout_mixin import form_actions, to_row, SaplFormLayout from sapl.materia.forms import MateriaLegislativaFilterSet from sapl.materia.models import (MateriaLegislativa, StatusTramitacao, TipoMateriaLegislativa) @@ -697,11 +700,15 @@ class JustificativaAusenciaForm(ModelForm): 'upload_anexo', 'tipo_ausencia', 'ausencia', - #'materias_do_expediente', - #'materias_da_ordem_do_dia', + 'materias_do_expediente', + 'materias_da_ordem_do_dia', 'observacao' ] + widgets = { + 'materias_do_expediente': CheckboxSelectMultiple(), + 'materias_da_ordem_do_dia': CheckboxSelectMultiple()} + def __init__(self, *args, **kwargs): row1 = to_row( @@ -715,32 +722,40 @@ class JustificativaAusenciaForm(ModelForm): [('tipo_ausencia', 12)]) row5 = to_row( [('ausencia', 12)]) - # row6 = to_row( - # [('materias_do_expediente', 12)]) - # row7 = to_row( - # [('materias_da_ordem_do_dia', 12)]) + row6 = to_row( + [('materias_do_expediente', 12)]) + row7 = to_row( + [('materias_da_ordem_do_dia', 12)]) row8 = to_row( [('observacao', 12)]) self.helper = FormHelper() - self.helper.layout = Layout( + self.helper.layout = SaplFormLayout( Fieldset(_('Justificativa de Ausência'), row1, row2, row3, row4, row5, - # row6, - # row7, - row8, - form_actions(label='Salvar')) + row6, + row7, + row8) ) + q = Q(sessao_plenaria=kwargs['initial']['sessao_plenaria']) + ordens = OrdemDia.objects.filter(q) + expedientes = ExpedienteMateria.objects.filter(q) super(JustificativaAusenciaForm, self).__init__( *args, **kwargs) presencas = SessaoPlenariaPresenca.objects.filter( - sessao_plenaria_id=kwargs['initial']['sessao_plenaria'] - ).order_by('parlamentar__nome_parlamentar') + q).order_by('parlamentar__nome_parlamentar') + + self.fields['materias_do_expediente'].choices = [ + (e.id, e.materia) for e in expedientes] + + self.fields['materias_da_ordem_do_dia'].choices = [ + (o.id, o.materia) for o in ordens] self.fields['parlamentar'].choices = [ + ("0", "------------")] + [ (p.parlamentar.id, p.parlamentar) for p in presencas] def clean(self): @@ -749,10 +764,19 @@ class JustificativaAusenciaForm(ModelForm): if not self.is_valid(): return self.cleaned_data - sessao_plenaria = cleaned_data['sessao_plenaria'] + sessao_plenaria = self.instance.sessao_plenaria if not sessao_plenaria.finalizada or sessao_plenaria.finalizada is None: raise ValidationError( "A sessão deve está finalizada para registrar uma Ausência") else: return self.cleaned_data + + def save(self, commit=False): + + justificativa = super().save(True) + + if justificativa.ausencia == 2: + justificativa.materias_do_expediente.clear() + justificativa.materias_da_ordem_do_dia.clear() + return justificativa diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py index c5e637c67..edca3e7a9 100644 --- a/sapl/sessao/views.py +++ b/sapl/sessao/views.py @@ -2981,6 +2981,19 @@ class JustificativaAusenciaCrud(MasterDetailCrud): list_field_names = ['parlamentar', 'sessao_plenaria', 'ausencia', 'tipo_ausencia', 'data'] + @property + def layout_display(self): + + layout = super().layout_display + + if self.object.ausencia == 2: + # rm materias_da_ordem_do_dia do detail + layout[0]['rows'].pop(6) + # rm materias_do_expediente do detail + layout[0]['rows'].pop(5) + + return layout + class ListView(MasterDetailCrud.ListView): paginate_by = 10 @@ -3029,5 +3042,16 @@ class JustificativaAusenciaCrud(MasterDetailCrud): form_class = JustificativaAusenciaForm layout_key = None + def get_initial(self): + sessao_plenaria = JustificativaAusencia.objects.get( + id=self.kwargs['pk']).sessao_plenaria + return {'sessao_plenaria': sessao_plenaria} + + class DetailView(MasterDetailCrud.DetailView): + + def get_context_data(self, **kwargs): + context = super().get_context_data() + return context + class DeleteView(MasterDetailCrud.DeleteView): pass diff --git a/sapl/templates/sessao/justificativaausencia_form.html b/sapl/templates/sessao/justificativaausencia_form.html index 6266f5552..f2d01b706 100644 --- a/sapl/templates/sessao/justificativaausencia_form.html +++ b/sapl/templates/sessao/justificativaausencia_form.html @@ -11,12 +11,13 @@ $("#id_ausencia").change(function() { var val = $(this).val(); if(val === "1") { - $("#show_materia").show(); + $("#div_id_materias_do_expediente, #div_id_materias_da_ordem_do_dia").show(); } else if(val === "2") { - $("#show_materia").hide(); + $("#div_id_materias_do_expediente, #div_id_materias_da_ordem_do_dia").hide(); } }); + $("#id_ausencia").change() }); diff --git a/sapl/templates/sessao/layouts.yaml b/sapl/templates/sessao/layouts.yaml index efdca7122..4e9e1118a 100644 --- a/sapl/templates/sessao/layouts.yaml +++ b/sapl/templates/sessao/layouts.yaml @@ -96,5 +96,6 @@ JustificativaAusencia: - upload_anexo - tipo_ausencia - ausencia + - materias_do_expediente + - materias_da_ordem_do_dia - observacao - - sessao_plenaria \ No newline at end of file