diff --git a/docker/busy-wait.sh b/docker/busy-wait.sh
old mode 100755
new mode 100644
diff --git a/sapl/sessao/forms.py b/sapl/sessao/forms.py
index ba10e5b2a..f3b7363bd 100644
--- a/sapl/sessao/forms.py
+++ b/sapl/sessao/forms.py
@@ -283,8 +283,14 @@ class BancadaForm(ModelForm):
class ExpedienteMateriaForm(ModelForm):
_model = ExpedienteMateria
+
data_atual = timezone.now()
+ data_ordem = forms.CharField(
+ label='Data Sessão',
+ initial=datetime.strftime(timezone.now(), '%d/%m/%Y'),
+ widget=forms.TextInput(attrs={'readonly': 'readonly'}))
+
tipo_materia = forms.ModelChoiceField(
label=_('Tipo Matéria'),
required=True,
@@ -302,28 +308,40 @@ class ExpedienteMateriaForm(ModelForm):
required=True,
widget=forms.TextInput(attrs={'autocomplete': 'off'}))
- data_ordem = forms.CharField(
- label='Data Sessão',
- initial=datetime.strftime(timezone.now(), '%d/%m/%Y'),
- widget=forms.TextInput(attrs={'readonly': 'readonly'}))
-
apenas_leitura = forms.BooleanField(label='Apenas Leitura', required=False)
class Meta:
model = ExpedienteMateria
- fields = ['data_ordem', 'numero_ordem', 'tipo_materia', 'observacao',
- 'numero_materia', 'ano_materia', 'tipo_votacao']
-
- def clean_numero_ordem(self):
- sessao = self.instance.sessao_plenaria
+ fields = [
+ 'data_ordem',
+ 'numero_ordem',
+ 'tipo_materia',
+ 'numero_materia',
+ 'ano_materia',
+ 'tipo_votacao',
+ 'situacao_pauta',
+ 'observacao'
+ ]
- numero_ordem_exists = ExpedienteMateria.objects.filter(
- sessao_plenaria=sessao,
- numero_ordem=self.cleaned_data['numero_ordem']).exists()
+ def __init__(self, *args, **kwargs):
+ super().__init__(*args, **kwargs)
+ self.new_object = True if not self.instance.pk else False
+
+ if not self.new_object:
+ situacoes = self.instance.materia.tramitacao_set.order_by('-data_tramitacao')
+ if situacoes:
+ self.fields['situacao_pauta'].choices = [(s.pk, s) for s in situacoes]
+ self.fields['situacao_pauta'].initial = (self.instance.situacao_pauta.pk, self.instance.situacao_pauta)
+ else:
+ self.fields['situacao_pauta'].choices = [('', '---------')]
+ else:
+ self.fields['situacao_pauta'].widget = forms.HiddenInput()
+ def clean_numero_ordem(self):
+ numero_ordem_exists = ExpedienteMateria.objects.filter(sessao_plenaria=self.instance.sessao_plenaria,
+ numero_ordem=self.cleaned_data['numero_ordem']).exists()
if numero_ordem_exists and not self.instance.pk:
- msg = _('Esse número de ordem já existe.')
- raise ValidationError(msg)
+ raise ValidationError(_('Esse número de ordem já existe.'))
return self.cleaned_data['numero_ordem']
@@ -331,30 +349,29 @@ class ExpedienteMateriaForm(ModelForm):
return self.instance.sessao_plenaria.data_inicio
def clean(self):
- cleaned_data = super(ExpedienteMateriaForm, self).clean()
+ cleaned_data = super().clean()
if not self.is_valid():
return cleaned_data
- sessao = self.instance.sessao_plenaria
-
try:
- materia = MateriaLegislativa.objects.get(
- numero=self.cleaned_data['numero_materia'],
- ano=self.cleaned_data['ano_materia'],
- tipo=self.cleaned_data['tipo_materia'])
+ materia = MateriaLegislativa.objects.get(numero=self.cleaned_data['numero_materia'],
+ ano=self.cleaned_data['ano_materia'],
+ tipo=self.cleaned_data['tipo_materia'])
except ObjectDoesNotExist:
- msg = _('A matéria a ser inclusa não existe no cadastro'
- ' de matérias legislativas.')
- raise ValidationError(msg)
+ raise ValidationError(_('A matéria a ser inclusa não existe no cadastro de matérias legislativas.'))
else:
cleaned_data['materia'] = materia
return cleaned_data
def save(self, commit=False):
- expediente = super(ExpedienteMateriaForm, self).save(commit)
- expediente.materia = self.cleaned_data['materia']
+ expediente = super().save(commit)
+ materia = self.cleaned_data['materia']
+ expediente.materia = materia
+ if self.new_object:
+ expediente.situacao_pauta = materia.tramitacao_set.order_by('-data_tramitacao').first()
expediente.save()
+
return expediente
@@ -364,37 +381,25 @@ class OrdemDiaForm(ExpedienteMateriaForm):
class Meta:
model = OrdemDia
- fields = ['data_ordem', 'numero_ordem', 'tipo_materia', 'observacao',
- 'numero_materia', 'ano_materia', 'tipo_votacao']
-
- def clean_data_ordem(self):
- return self.instance.sessao_plenaria.data_inicio
+ fields = [
+ 'data_ordem',
+ 'numero_ordem',
+ 'tipo_materia',
+ 'numero_materia',
+ 'ano_materia',
+ 'tipo_votacao',
+ 'situacao_pauta',
+ 'observacao'
+ ]
def clean_numero_ordem(self):
- sessao = self.instance.sessao_plenaria
-
- numero_ordem_exists = OrdemDia.objects.filter(
- sessao_plenaria=sessao,
- numero_ordem=self.cleaned_data['numero_ordem']).exists()
-
+ numero_ordem_exists = OrdemDia.objects.filter(sessao_plenaria=self.instance.sessao_plenaria,
+ numero_ordem=self.cleaned_data['numero_ordem']).exists()
if numero_ordem_exists and not self.instance.pk:
- msg = _('Esse número de ordem já existe.')
- raise ValidationError(msg)
+ raise ValidationError(_('Esse número de ordem já existe.'))
return self.cleaned_data['numero_ordem']
- def clean(self):
- cleaned_data = super(OrdemDiaForm, self).clean()
- if not self.is_valid():
- return cleaned_data
- return self.cleaned_data
-
- def save(self, commit=False):
- ordem = super(OrdemDiaForm, self).save(commit)
- ordem.materia = self.cleaned_data['materia']
- ordem.save()
- return ordem
-
class PresencaForm(forms.Form):
presenca = forms.CharField(required=False, initial=False)
diff --git a/sapl/sessao/migrations/0054_auto_20200828_1236.py b/sapl/sessao/migrations/0054_auto_20200828_1236.py
new file mode 100644
index 000000000..5b6b7eeb5
--- /dev/null
+++ b/sapl/sessao/migrations/0054_auto_20200828_1236.py
@@ -0,0 +1,25 @@
+# Generated by Django 2.2.13 on 2020-08-28 15:36
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('materia', '0071_auto_20200609_1503'),
+ ('sessao', '0053_auto_20200609_1501'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='expedientemateria',
+ name='situacao_pauta',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='materia.Tramitacao', verbose_name='Situação Pauta'),
+ ),
+ migrations.AddField(
+ model_name='ordemdia',
+ name='situacao_pauta',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='materia.Tramitacao', verbose_name='Situação Pauta'),
+ ),
+ ]
diff --git a/sapl/sessao/models.py b/sapl/sessao/models.py
index 8585be2ad..55b2e5536 100644
--- a/sapl/sessao/models.py
+++ b/sapl/sessao/models.py
@@ -9,7 +9,7 @@ from model_utils import Choices
import reversion
from sapl.base.models import Autor
-from sapl.materia.models import MateriaLegislativa
+from sapl.materia.models import MateriaLegislativa, Tramitacao
from sapl.parlamentares.models import (CargoMesa, Legislatura, Parlamentar,
Partido, SessaoLegislativa)
from sapl.utils import (YES_NO_CHOICES, SaplGenericRelation,
@@ -350,6 +350,13 @@ class AbstractOrdemDia(models.Model):
choices=YES_NO_CHOICES,
verbose_name=_('Registro de Votação Iniciado?')
)
+ situacao_pauta = models.ForeignKey(
+ Tramitacao,
+ null=True,
+ blank=True,
+ on_delete=models.PROTECT,
+ verbose_name=_('Situação Pauta')
+ )
class Meta:
abstract = True
diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py
index 7f67e82e8..39540aedf 100755
--- a/sapl/sessao/views.py
+++ b/sapl/sessao/views.py
@@ -731,9 +731,12 @@ class MateriaOrdemDiaCrud(MasterDetailCrud):
public = [RP_LIST, RP_DETAIL]
class BaseMixin(MasterDetailCrud.BaseMixin):
- list_field_names = ['numero_ordem', 'materia',
- ('materia__ementa', '', 'observacao'),
- 'resultado']
+ list_field_names = [
+ 'numero_ordem',
+ 'materia',
+ ('materia__ementa', '', 'observacao'),
+ 'resultado'
+ ]
class CreateView(MasterDetailCrud.CreateView):
form_class = OrdemDiaForm
@@ -744,18 +747,15 @@ class MateriaOrdemDiaCrud(MasterDetailCrud):
return context
def get_initial(self):
- self.initial['data_ordem'] = SessaoPlenaria.objects.get(
- pk=self.kwargs['pk']).data_inicio.strftime('%d/%m/%Y')
- max_numero_ordem = OrdemDia.objects.filter(
- sessao_plenaria=self.kwargs['pk']).aggregate(
- Max('numero_ordem'))['numero_ordem__max']
- self.initial['numero_ordem'] = (
- max_numero_ordem if max_numero_ordem else 0) + 1
+ self.initial['data_ordem'] = SessaoPlenaria.objects.get(pk=self.kwargs['pk'])\
+ .data_inicio.strftime('%d/%m/%Y')
+ max_numero_ordem = OrdemDia.objects.filter(sessao_plenaria=self.kwargs['pk'])\
+ .aggregate(Max('numero_ordem'))['numero_ordem__max']
+ self.initial['numero_ordem'] = (max_numero_ordem if max_numero_ordem else 0) + 1
return self.initial
def get_success_url(self):
- return reverse('sapl.sessao:ordemdia_list',
- kwargs={'pk': self.kwargs['pk']})
+ return reverse('sapl.sessao:ordemdia_list', kwargs={'pk': self.kwargs['pk']})
class UpdateView(MasterDetailCrud.UpdateView):
form_class = OrdemDiaForm
@@ -3576,7 +3576,7 @@ class PautaSessaoDetailView(DetailView):
materias_expediente = []
for m in ExpedienteMateria.objects \
.prefetch_related('registrovotacao_set') \
- .select_related("materia", "materia__tipo") \
+ .select_related("materia", "materia__tipo", "situacao_pauta", "situacao_pauta__status") \
.filter(sessao_plenaria_id=self.object.id):
rv = m.registrovotacao_set.first()
if rv:
@@ -3586,7 +3586,6 @@ class PautaSessaoDetailView(DetailView):
resultado = _('Matéria não votada')
resultado_observacao = _(' ')
- ultima_tramitacao = m.materia.tramitacao_set.order_by('-data_tramitacao', '-id').first()
numeracao = m.materia.numeracao_set.first()
materias_expediente.append({
@@ -3597,7 +3596,7 @@ class PautaSessaoDetailView(DetailView):
'numero': m.numero_ordem,
'resultado': resultado,
'resultado_observacao': resultado_observacao,
- 'situacao': ultima_tramitacao.status if ultima_tramitacao else _("Não informada"),
+ 'situacao_pauta': m.situacao_pauta.status if m.situacao_pauta else _('Não informada'),
'processo': f'{str(numeracao.numero_materia)}/{str(numeracao.ano_materia)}' if numeracao else '-',
'autor': [str(x.autor) for x in m.materia.autoria_set.select_related('autor').all()]
})
@@ -3625,7 +3624,7 @@ class PautaSessaoDetailView(DetailView):
materias_ordem = []
for o in OrdemDia.objects \
.prefetch_related('registrovotacao_set') \
- .select_related("materia", "materia__tipo") \
+ .select_related("materia", "materia__tipo", "situacao_pauta", "situacao_pauta__status") \
.filter(sessao_plenaria_id=self.object.id):
# Verificar resultado
rv = o.registrovotacao_set.first()
@@ -3636,7 +3635,6 @@ class PautaSessaoDetailView(DetailView):
resultado = _('Matéria não votada')
resultado_observacao = _(' ')
- ultima_tramitacao = o.materia.tramitacao_set.order_by('-data_tramitacao', '-id').first()
numeracao = o.materia.numeracao_set.first()
materias_ordem.append({
@@ -3647,7 +3645,7 @@ class PautaSessaoDetailView(DetailView):
'numero': o.numero_ordem,
'resultado': resultado,
'resultado_observacao': resultado_observacao,
- 'situacao': ultima_tramitacao.status if ultima_tramitacao else _("Não informada"),
+ 'situacao_pauta': o.situacao_pauta.status if o.situacao_pauta else _('Não informada'),
'processo': f'{str(numeracao.numero_materia)}/{str(numeracao.ano_materia)}' if numeracao else '-',
'autor': [str(x.autor) for x in Autoria.objects.select_related("autor").filter(materia_id=o.materia_id)]
})
diff --git a/sapl/templates/sessao/layouts.yaml b/sapl/templates/sessao/layouts.yaml
index 67abdf16d..5a2ed0b88 100644
--- a/sapl/templates/sessao/layouts.yaml
+++ b/sapl/templates/sessao/layouts.yaml
@@ -58,7 +58,7 @@ ExpedienteMateria:
{% trans 'Matéria do Expediente' %}:
- data_ordem numero_ordem
- tipo_materia numero_materia ano_materia
- - tipo_votacao
+ - tipo_votacao:4 situacao_pauta
- apenas_leitura
- observacao
@@ -66,7 +66,7 @@ OrdemDia:
{% trans 'Matéria da Ordem do Dia' %}:
- data_ordem numero_ordem
- tipo_materia numero_materia ano_materia
- - tipo_votacao
+ - tipo_votacao:4 situacao_pauta
- apenas_leitura
- observacao
@@ -74,14 +74,14 @@ ExpedienteMateriaDetail:
{% trans 'Matérias do Expediente' %}:
- materia
- ementa
- - tipo_votacao
+ - tipo_votacao:4 situacao_pauta
- observacao
OrdemDiaDetail:
{% trans 'Matérias da Ordem do Dia' %}:
- materia
- ementa
- - tipo_votacao
+ - tipo_votacao:4 situacao_pauta
- observacao
Bancada:
diff --git a/sapl/templates/sessao/pauta_sessao_detail.html b/sapl/templates/sessao/pauta_sessao_detail.html
index bf58a3cea..56038f116 100644
--- a/sapl/templates/sessao/pauta_sessao_detail.html
+++ b/sapl/templates/sessao/pauta_sessao_detail.html
@@ -45,7 +45,8 @@
{{m.numero}} -
{{m.titulo}}
Processo: {{ m.processo }}
- Autor{{ m.autor|length|pluralize:"es" }}: {{ m.autor|join:', ' }}
+ Autor{{ m.autor|length|pluralize:"es" }}: {{ m.autor|join:', ' }}
+ Situação: {{ m.situacao_pauta }}
Matéria | Ementa | Situação |
---|---|---|
- {{m.numero}} -
- {{m.titulo}} - Processo: {{ m.processo }} - Autor{{ m.autor|length|pluralize:"es" }}: {{ m.autor|join:', ' }} - |
-
- {{m.ementa|safe}}
- {% if m.observacao %} Obs.: {{m.observacao}} {% endif %} - |
- {{m.situacao|linebreaksbr|safe}} | -
+ {{m.numero}} -
+ {{m.titulo}} + Processo: {{ m.processo }} + Autor{{ m.autor|length|pluralize:"es" }}: {{ m.autor|join:', ' }} + Situação: {{ m.situacao_pauta }} + |
+ {{m.ementa|safe}} {{m.observacao|linebreaksbr|safe}} |
+ {{m.situacao|linebreaksbr|safe}} | +