diff --git a/protocoloadm/forms.py b/protocoloadm/forms.py index 81ac2dfb8..e9571e2c2 100644 --- a/protocoloadm/forms.py +++ b/protocoloadm/forms.py @@ -17,6 +17,7 @@ from sapl.utils import RANGE_ANOS from .models import (DocumentoAcessorioAdministrativo, DocumentoAdministrativo, Protocolo, TipoDocumentoAdministrativo, TramitacaoAdministrativo) +from materia.models import Autor TIPOS_PROTOCOLO = [('0', 'Enviado'), ('1', 'Recebido')] @@ -286,7 +287,7 @@ class ProtocoloDocumentForm(ModelForm): *args, **kwargs) -class ProtocoloMateriaForm(forms.Form): +class ProtocoloMateriaForm(ModelForm): NUMERACAO_CHOICES = [('1', 'Sequencial por Ano'), ('2', 'Sequencial Único')] @@ -303,22 +304,26 @@ class ProtocoloMateriaForm(forms.Form): widget=forms.RadioSelect( renderer=HorizontalRadioRenderer)) - tipo_materia = forms.ModelChoiceField( - label='Tipo de Matéria', - required=False, - queryset=TipoMateriaLegislativa.objects.all(), - empty_label='Selecione', - ) - - num_paginas = forms.CharField(label='Núm. Páginas', required=True) - ementa = forms.CharField( - widget=forms.Textarea, label='Ementa', required=True) + autor = forms.IntegerField(widget=forms.HiddenInput(), required=False) - autor = forms.CharField(widget=forms.HiddenInput(), required=False) + def clean_autor(self): + data_autor = self.cleaned_data['autor'] + try: + autor = Autor.objects.get(id=data_autor) + except ObjectDoesNotExist: + data_autor = None + else: + data_autor = autor + return data_autor - observacao = forms.CharField(required=True, - widget=forms.Textarea, - label='Observação') + class Meta: + model = Protocolo + fields = ['numeracao', + 'tipo_protocolo', + 'tipo_materia', + 'numero_paginas', + 'autor', + 'observacao'] def __init__(self, *args, **kwargs): @@ -327,7 +332,7 @@ class ProtocoloMateriaForm(forms.Form): row2 = crispy_layout_mixin.to_row( [('tipo_materia', 4), ('tipo_protocolo', 4), - ('num_paginas', 4)]) + ('numero_paginas', 4)]) row3 = crispy_layout_mixin.to_row( [('autor', 0), (Button('pesquisar', @@ -335,11 +340,9 @@ class ProtocoloMateriaForm(forms.Form): css_class='btn btn-primary btn-sm'), 2), (Button('limpar', 'limpar Autor', - css_class='btn btn-primary btn-sm'), 2)]) + css_class='btn btn-primary btn-sm'), 10)]) row4 = crispy_layout_mixin.to_row( [('observacao', 12)]) - row5 = crispy_layout_mixin.to_row( - [('ementa', 12)]) self.helper = FormHelper() self.helper.layout = Layout( @@ -350,7 +353,6 @@ class ProtocoloMateriaForm(forms.Form): HTML(sapl.utils.autor_modal), row3, row4, - row5, form_actions(save_label='Protocolar Matéria') ) ) diff --git a/protocoloadm/views.py b/protocoloadm/views.py index 5cded887b..4e8e560b4 100644 --- a/protocoloadm/views.py +++ b/protocoloadm/views.py @@ -249,7 +249,7 @@ class ComprovanteProtocoloView(TemplateView): return context -class ProtocoloMateriaView(FormView): +class ProtocoloMateriaView(CreateView): template_name = "protocoloadm/protocolar_materia.html" form_class = ProtocoloMateriaForm @@ -258,40 +258,34 @@ class ProtocoloMateriaView(FormView): def get_success_url(self): return reverse('protocolo') - def post(self, request, *args, **kwargs): + def form_valid(self, form): + if self.request.POST['numeracao'] == '1': + numeracao = Protocolo.objects.filter( + ano=date.today().year).aggregate(Max('numero')) + else: + numeracao = Protocolo.objects.all().aggregate(Max('numero')) - form = ProtocoloMateriaForm(request.POST) + if numeracao is None: + numeracao['numero__max'] = 0 - if form.is_valid(): - if request.POST['numeracao'] == '1': - numeracao = Protocolo.objects.filter( - ano=date.today().year).aggregate(Max('numero')) - else: - numeracao = Protocolo.objects.all().aggregate(Max('numero')) - - if numeracao is None: - numeracao['numero__max'] = 0 - - protocolo = Protocolo() - - protocolo.numero = numeracao['numero__max'] + 1 - protocolo.ano = datetime.now().year - protocolo.data = datetime.now().strftime("%Y-%m-%d") - protocolo.hora = datetime.now().strftime("%H:%M") - protocolo.timestamp = datetime.now().strftime("%Y-%m-%d %H:%M") - protocolo.tipo_protocolo = request.POST['tipo_protocolo'] - protocolo.tipo_processo = '0' # TODO validar o significado - protocolo.autor = Autor.objects.get(id=request.POST['autor']) - protocolo.anulado = False - protocolo.tipo_materia = TipoMateriaLegislativa.objects.get( - id=request.POST['tipo_materia']) - protocolo.numero_paginas = request.POST['num_paginas'] - protocolo.observacao = sub( - ' ', ' ', strip_tags(request.POST['observacao'])) - protocolo.save() - return self.form_valid(form) - else: - return self.form_invalid(form) + protocolo = Protocolo() + + protocolo.numero = numeracao['numero__max'] + 1 + protocolo.ano = datetime.now().year + protocolo.data = datetime.now().strftime("%Y-%m-%d") + protocolo.hora = datetime.now().strftime("%H:%M") + protocolo.timestamp = datetime.now().strftime("%Y-%m-%d %H:%M") + protocolo.tipo_protocolo = self.request.POST['tipo_protocolo'] + protocolo.tipo_processo = '0' # TODO validar o significado + if form.cleaned_data['autor']: + protocolo.autor = form.cleaned_data['autor'] + protocolo.anulado = False + protocolo.tipo_materia = TipoMateriaLegislativa.objects.get( + id=self.request.POST['tipo_materia']) + protocolo.numero_paginas = self.request.POST['numero_paginas'] + protocolo.observacao = self.request.POST['observacao'] + protocolo.save() + return redirect(self.get_success_url()) # TODO: move to Proposicao app