Browse Source

Adiciona situação da pauta no formulário de expediente e ordem dia

pull/3257/head
Vinícius Cantuária 4 years ago
parent
commit
b50454c672
  1. 0
      docker/busy-wait.sh
  2. 109
      sapl/sessao/forms.py
  3. 25
      sapl/sessao/migrations/0054_auto_20200828_1236.py
  4. 9
      sapl/sessao/models.py
  5. 34
      sapl/sessao/views.py
  6. 8
      sapl/templates/sessao/layouts.yaml
  7. 27
      sapl/templates/sessao/pauta_sessao_detail.html

0
docker/busy-wait.sh

109
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)

25
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'),
),
]

9
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

34
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)]
})

8
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:

27
sapl/templates/sessao/pauta_sessao_detail.html

@ -45,7 +45,8 @@
{{m.numero}} -
<a href="{% url 'sapl.materia:materialegislativa_detail' m.id %}">{{m.titulo}}</a><br/>
<b>Processo</b>: {{ m.processo }}<br/>
<b>Autor{{ m.autor|length|pluralize:"es" }}</b>: {{ m.autor|join:', ' }}
<b>Autor{{ m.autor|length|pluralize:"es" }}</b>: {{ m.autor|join:', ' }}<br/>
<b>Situação</b>: {{ m.situacao_pauta }}
</td>
<td style="width:60%;">
{{m.ementa|safe}}
@ -65,19 +66,17 @@
<table class="table table-striped">
<thead><tr><th>Matéria</th><th>Ementa</th> <th>Situação</th> </tr></thead>
{% for m in materias_ordem %}
<tr>
<td style="width:20%;">
{{m.numero}} -
<a href="{% url 'sapl.materia:materialegislativa_detail' m.id %}">{{m.titulo}}</a><br/>
<b>Processo</b>: {{ m.processo }}<br/>
<b>Autor{{ m.autor|length|pluralize:"es" }}</b>: {{ m.autor|join:', ' }}
</td>
<td style="width:60%;">
{{m.ementa|safe}}
{% if m.observacao %}<br><br>Obs.: {{m.observacao}} {% endif %}
</td>
<td style="width:20%;">{{m.situacao|linebreaksbr|safe}}</td>
</tr>
<tr>
<td style="width:20%;">
{{m.numero}} -
<a href="{% url 'sapl.materia:materialegislativa_detail' m.id %}">{{m.titulo}}</a><br/>
<b>Processo</b>: {{ m.processo }}<br/>
<b>Autor{{ m.autor|length|pluralize:"es" }}</b>: {{ m.autor|join:', ' }}<br/>
<b>Situação</b>: {{ m.situacao_pauta }}
</td>
<td style="width:60%;">{{m.ementa|safe}}<br>{{m.observacao|linebreaksbr|safe}}</td>
<td style="width:20%;">{{m.situacao|linebreaksbr|safe}}</td>
</tr>
{% endfor %}
</table>
{% else %}

Loading…
Cancel
Save