Skip to content

Commit

Permalink
Tramitacao customizada ordemdia expediente (#3584)
Browse files Browse the repository at this point in the history
* Campo tramitação para expediente e ordem do dia das pautas de sessoes plenarias

* Migration para tramitacao customizada de ordem dia e expediente da pauta de sessao

* ajuste automático feito pela IDE para pep8

* Ajuste de usabilidade

- encaminha além da descrição do status, também a data de tramitação, unidade local e unidade de destino de cada tramitação
- recebe os dados acima na interface, monta options com data, e status.
- qualquer alteração no select, monta um alert, assim como para matéria selecionada, com os dados cima da tramitação

Co-authored-by: joao <[email protected]>
Co-authored-by: LeandroJatai <[email protected]>
  • Loading branch information
3 people authored Aug 4, 2022
1 parent 73de9ee commit e1a3654
Show file tree
Hide file tree
Showing 7 changed files with 197 additions and 38 deletions.
58 changes: 45 additions & 13 deletions sapl/sessao/forms.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
from datetime import datetime
import re

from crispy_forms.layout import Button, Fieldset, HTML, Layout
from datetime import datetime

from django import forms
from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import ObjectDoesNotExist, ValidationError
Expand All @@ -12,6 +13,7 @@
from django.utils.translation import ugettext_lazy as _
import django_filters

import sapl.utils
from sapl.base.models import Autor, TipoAutor
from sapl.crispy_layout_mixin import (form_actions, to_row,
SaplFormHelper, SaplFormLayout)
Expand All @@ -33,13 +35,16 @@
ORDENACAO_RESUMO, PresencaOrdemDia,
RegistroLeitura, ResumoOrdenacao, RetiradaPauta,
SessaoPlenaria, SessaoPlenariaPresenca,
TipoResultadoVotacao, TipoRetiradaPauta)

TipoResultadoVotacao, TipoRetiradaPauta, Tramitacao)

MES_CHOICES = RANGE_MESES
DIA_CHOICES = RANGE_DIAS_MES


def tramitacao_select_validation():
return True


class SessaoPlenariaForm(FileFieldCheckMixin, ModelForm):

class Meta:
Expand Down Expand Up @@ -109,20 +114,20 @@ def clean(self):

if upload_pauta:
validar_arquivo(upload_pauta, "Pauta da Sessão")

if upload_ata:
validar_arquivo(upload_ata, "Ata da Sessão")

if upload_anexo:
validar_arquivo(upload_anexo, "Anexo da Sessão")

hora_inicio = self.cleaned_data['hora_inicio']
if not re.match(TIME_PATTERN, hora_inicio):
if not re.match(sapl.utils.TIME_PATTERN, hora_inicio):
raise ValidationError(f'Formato ou valores de horário de '
f'abertura errados: {hora_inicio}')

hora_fim = self.cleaned_data['hora_fim']
if hora_fim and not re.match(TIME_PATTERN, hora_fim):
if hora_fim and not re.match(sapl.utils.TIME_PATTERN, hora_fim):
raise ValidationError(f'Formato ou valores de horário de '
f'encerramento errados: {hora_fim}.')

Expand Down Expand Up @@ -294,6 +299,12 @@ def save(self, commit=False):
return bancada


class DependentChoiceField(forms.ChoiceField):

def validate(self, value):
return True


class ExpedienteMateriaForm(ModelForm):

_model = ExpedienteMateria
Expand All @@ -306,6 +317,10 @@ class ExpedienteMateriaForm(ModelForm):
empty_label='Selecione',
widget=forms.Select(attrs={'autocomplete': 'off'}))

tramitacao_select = DependentChoiceField(
label=_('Situação Atual'),
widget=forms.Select())

numero_materia = forms.CharField(
label='Número Matéria', required=True,
widget=forms.TextInput(attrs={'autocomplete': 'off'}))
Expand All @@ -326,7 +341,7 @@ class ExpedienteMateriaForm(ModelForm):
class Meta:
model = ExpedienteMateria
fields = ['data_ordem', 'numero_ordem', 'tipo_materia', 'observacao',
'numero_materia', 'ano_materia', 'tipo_votacao']
'numero_materia', 'ano_materia', 'tramitacao_select', 'tipo_votacao']

def clean_numero_ordem(self):
sessao = self.instance.sessao_plenaria
Expand Down Expand Up @@ -363,11 +378,28 @@ def clean(self):
else:
cleaned_data['materia'] = materia

try:
id_t = self.cleaned_data['tramitacao_select'] if self.cleaned_data['tramitacao_select'] != '' else -1
tramitacao = materia.tramitacao_set.get(pk=self.cleaned_data['tramitacao_select'] if self.cleaned_data['tramitacao_select'] != '' else -1)
except ObjectDoesNotExist:
if self.cleaned_data['tramitacao_select'] != '':
raise ValidationError(
_('Tramitação selecionada não existe para a Matéria: %(value)s'),
code='invalid',
params={'value': self.cleaned_data['tramitacao_select']},
)
else:
cleaned_data['tramitacao'] = False
else:
cleaned_data['tramitacao'] = tramitacao

return cleaned_data

def save(self, commit=False):
expediente = super(ExpedienteMateriaForm, self).save(commit)
expediente.materia = self.cleaned_data['materia']
if self.cleaned_data['tramitacao'] is not False:
expediente.tramitacao = self.cleaned_data['tramitacao']
expediente.save()
return expediente

Expand Down Expand Up @@ -996,7 +1028,7 @@ class Meta:
'ordem',
'expediente',
'observacao',
'user',
'user',
'ip']
widgets = {'materia': forms.HiddenInput(),
'ordem': forms.HiddenInput(),
Expand All @@ -1008,14 +1040,14 @@ class Meta:
def __init__(self, *args, **kwargs):

super().__init__(*args, **kwargs)

instance = self.initial['instance']
if instance:
self.instance = instance.first()
self.fields['observacao'].initial = self.instance.observacao

row1 = to_row(
[('observacao', 12)])
[('observacao', 12)])

actions = [HTML('<a href="{{ view.cancel_url }}"'
' class="btn btn-warning">Cancelar Leitura</a>')]
Expand All @@ -1024,11 +1056,11 @@ def __init__(self, *args, **kwargs):
self.helper.form_method = 'POST'
self.helper.layout = Layout(
Fieldset(_('Leitura de Matéria'),
HTML('''
HTML('''
<b>Matéria:</b> {{materia}}<br>
<b>Ementa:</b> {{materia.ementa}} <br>
'''),
row1,
form_actions(more=actions),
)
)
)
)
25 changes: 25 additions & 0 deletions sapl/sessao/migrations/0064_auto_20220713_2335.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Generated by Django 2.2.28 on 2022-07-14 02:35

from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

dependencies = [
('materia', '0081_auto_20220321_0934'),
('sessao', '0063_merge_20220609_0838'),
]

operations = [
migrations.AddField(
model_name='expedientemateria',
name='tramitacao',
field=models.ForeignKey(blank=True, default='', null=True, on_delete=django.db.models.deletion.PROTECT, to='materia.Tramitacao', verbose_name='Situação Atual'),
),
migrations.AddField(
model_name='ordemdia',
name='tramitacao',
field=models.ForeignKey(blank=True, default='', null=True, on_delete=django.db.models.deletion.PROTECT, to='materia.Tramitacao', verbose_name='Situação Atual'),
),
]
7 changes: 7 additions & 0 deletions sapl/sessao/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@

from sapl.base.models import Autor
from sapl.materia.models import MateriaLegislativa
from sapl.materia.models import Tramitacao
from sapl.parlamentares.models import (CargoMesa, Legislatura, Parlamentar,
Partido, SessaoLegislativa)
from sapl.utils import (YES_NO_CHOICES, SaplGenericRelation,
Expand Down Expand Up @@ -360,6 +361,12 @@ class AbstractOrdemDia(models.Model):
materia = models.ForeignKey(MateriaLegislativa,
on_delete=models.PROTECT,
verbose_name=_('Matéria'))
tramitacao = models.ForeignKey(Tramitacao,
on_delete=models.PROTECT,
verbose_name=_('Situação Atual'),
blank=True,
default='',
null=True)
data_ordem = models.DateField(verbose_name=_('Data da Sessão'))
observacao = models.TextField(
blank=True, verbose_name=_('Observação'))
Expand Down
4 changes: 3 additions & 1 deletion sapl/sessao/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,8 @@
OrdemDiaLeituraView,
retirar_leitura,
TransferenciaMateriasExpediente, TransferenciaMateriasOrdemDia,
filtra_materias_copia_sessao_ajax, verifica_materia_sessao_plenaria_ajax)
filtra_materias_copia_sessao_ajax, verifica_materia_sessao_plenaria_ajax,
recuperar_tramitacao)


from .apps import AppConfig
Expand Down Expand Up @@ -68,6 +69,7 @@
name='remove_parlamentar_composicao'),

url(r'^sessao/recuperar-materia/', recuperar_materia),
url(r'^sessao/recuperar-tramitacao/', recuperar_tramitacao),
url(r'^sessao/recuperar-numero-sessao/',
recuperar_numero_sessao_view,
name='recuperar_numero_sessao_view'
Expand Down
Loading

0 comments on commit e1a3654

Please sign in to comment.