|
|
@ -1,3 +1,5 @@ |
|
|
|
|
|
from datetime import datetime |
|
|
|
|
|
|
|
|
import django_filters |
|
|
import django_filters |
|
|
from crispy_forms.bootstrap import InlineRadios |
|
|
from crispy_forms.bootstrap import InlineRadios |
|
|
from crispy_forms.helper import FormHelper |
|
|
from crispy_forms.helper import FormHelper |
|
|
@ -5,7 +7,6 @@ from crispy_forms.layout import HTML, Button, Fieldset, Layout, Submit |
|
|
from django import forms |
|
|
from django import forms |
|
|
from django.core.exceptions import ObjectDoesNotExist, ValidationError |
|
|
from django.core.exceptions import ObjectDoesNotExist, ValidationError |
|
|
from django.db import models |
|
|
from django.db import models |
|
|
from django.db.models import Max |
|
|
|
|
|
from django.forms import ModelForm |
|
|
from django.forms import ModelForm |
|
|
from django.utils.translation import ugettext_lazy as _ |
|
|
from django.utils.translation import ugettext_lazy as _ |
|
|
|
|
|
|
|
|
@ -13,7 +14,7 @@ import crispy_layout_mixin |
|
|
import sapl |
|
|
import sapl |
|
|
from crispy_layout_mixin import form_actions |
|
|
from crispy_layout_mixin import form_actions |
|
|
from materia.forms import RangeWidgetOverride |
|
|
from materia.forms import RangeWidgetOverride |
|
|
from materia.models import Autor |
|
|
from materia.models import Autor, UnidadeTramitacao |
|
|
from sapl.utils import RANGE_ANOS |
|
|
from sapl.utils import RANGE_ANOS |
|
|
|
|
|
|
|
|
from .models import (DocumentoAcessorioAdministrativo, DocumentoAdministrativo, |
|
|
from .models import (DocumentoAcessorioAdministrativo, DocumentoAdministrativo, |
|
|
@ -53,12 +54,14 @@ class ProtocoloFilterSet(django_filters.FilterSet): |
|
|
|
|
|
|
|
|
autor = django_filters.CharFilter(widget=forms.HiddenInput()) |
|
|
autor = django_filters.CharFilter(widget=forms.HiddenInput()) |
|
|
|
|
|
|
|
|
tipo_protocolo = django_filters.ChoiceFilter(required=False, |
|
|
tipo_protocolo = django_filters.ChoiceFilter( |
|
|
|
|
|
required=False, |
|
|
label='Tipo de Protocolo', |
|
|
label='Tipo de Protocolo', |
|
|
choices=TIPOS_PROTOCOLO, |
|
|
choices=TIPOS_PROTOCOLO, |
|
|
widget=forms.Select( |
|
|
widget=forms.Select( |
|
|
attrs={'class': 'selector'})) |
|
|
attrs={'class': 'selector'})) |
|
|
tipo_processo = django_filters.ChoiceFilter(required=False, |
|
|
tipo_processo = django_filters.ChoiceFilter( |
|
|
|
|
|
required=False, |
|
|
label='Natureza do Processo', |
|
|
label='Natureza do Processo', |
|
|
choices=NATUREZA_PROCESSO, |
|
|
choices=NATUREZA_PROCESSO, |
|
|
widget=forms.Select( |
|
|
widget=forms.Select( |
|
|
@ -533,22 +536,18 @@ class TramitacaoAdmForm(ModelForm): |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
def clean(self): |
|
|
def clean(self): |
|
|
|
|
|
data_enc_form = self.cleaned_data['data_encaminhamento'] |
|
|
|
|
|
data_prazo_form = self.cleaned_data['data_fim_prazo'] |
|
|
|
|
|
data_tram_form = self.cleaned_data['data_tramitacao'] |
|
|
|
|
|
|
|
|
if self.errors: |
|
|
if self.errors: |
|
|
return self.errors |
|
|
return self.errors |
|
|
|
|
|
|
|
|
if (not self.cleaned_data['data_tramitacao'] or |
|
|
|
|
|
not self.cleaned_data['status'] or |
|
|
|
|
|
not self.cleaned_data['unidade_tramitacao_local']): |
|
|
|
|
|
msg = _('Você deixou campos obrigatórios em branco!') |
|
|
|
|
|
raise ValidationError(msg) |
|
|
|
|
|
|
|
|
|
|
|
ultima_data_tram = TramitacaoAdministrativo.objects.filter( |
|
|
|
|
|
documento_id=5).aggregate(Max('data_tramitacao')) |
|
|
|
|
|
data = ultima_data_tram.get('data_encaminhamento__max') |
|
|
|
|
|
|
|
|
|
|
|
ultima_tramitacao = TramitacaoAdministrativo.objects.filter( |
|
|
ultima_tramitacao = TramitacaoAdministrativo.objects.filter( |
|
|
documento_id=5, data_encaminhamento=data).order_by( |
|
|
documento_id=self.instance.documento_id).exclude( |
|
|
'data_encaminhamento').first() |
|
|
id=self.instance.id).last() |
|
|
|
|
|
|
|
|
|
|
|
if not self.instance.data_tramitacao: |
|
|
|
|
|
|
|
|
if ultima_tramitacao: |
|
|
if ultima_tramitacao: |
|
|
destino = ultima_tramitacao.unidade_tramitacao_destino |
|
|
destino = ultima_tramitacao.unidade_tramitacao_destino |
|
|
@ -557,9 +556,59 @@ class TramitacaoAdmForm(ModelForm): |
|
|
'destino da última adicionada!') |
|
|
'destino da última adicionada!') |
|
|
raise ValidationError(msg) |
|
|
raise ValidationError(msg) |
|
|
|
|
|
|
|
|
|
|
|
if self.cleaned_data['data_tramitacao'] > datetime.now().date(): |
|
|
|
|
|
msg = _( |
|
|
|
|
|
'A data de tramitação deve ser\ |
|
|
|
|
|
menor ou igual a data de hoje!') |
|
|
|
|
|
raise ValidationError(msg) |
|
|
|
|
|
|
|
|
|
|
|
if (ultima_tramitacao and |
|
|
|
|
|
data_tram_form < ultima_tramitacao.data_tramitacao): |
|
|
|
|
|
msg = _('A data da nova tramitação deve ser\ |
|
|
|
|
|
maior que a data da última tramitação!') |
|
|
|
|
|
raise ValidationError(msg) |
|
|
|
|
|
|
|
|
|
|
|
if data_enc_form < data_tram_form or data_prazo_form < data_tram_form: |
|
|
|
|
|
msg = _('A data fim de prazo e encaminhamento devem ser\ |
|
|
|
|
|
maiores que a data de tramitação!') |
|
|
|
|
|
raise ValidationError(msg) |
|
|
|
|
|
|
|
|
return self.cleaned_data |
|
|
return self.cleaned_data |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TramitacaoAdmEditForm(TramitacaoAdmForm): |
|
|
|
|
|
|
|
|
|
|
|
unidade_tramitacao_local = forms.ModelChoiceField( |
|
|
|
|
|
queryset=UnidadeTramitacao.objects.all(), |
|
|
|
|
|
widget=forms.HiddenInput()) |
|
|
|
|
|
|
|
|
|
|
|
data_tramitacao = forms.DateField(widget=forms.HiddenInput()) |
|
|
|
|
|
|
|
|
|
|
|
class Meta: |
|
|
|
|
|
model = TramitacaoAdministrativo |
|
|
|
|
|
fields = ['data_tramitacao', |
|
|
|
|
|
'unidade_tramitacao_local', |
|
|
|
|
|
'status', |
|
|
|
|
|
'unidade_tramitacao_destino', |
|
|
|
|
|
'data_encaminhamento', |
|
|
|
|
|
'data_fim_prazo', |
|
|
|
|
|
'texto', |
|
|
|
|
|
] |
|
|
|
|
|
|
|
|
|
|
|
widgets = { |
|
|
|
|
|
'data_encaminhamento': forms.DateInput(format='%d/%m/%Y'), |
|
|
|
|
|
'data_fim_prazo': forms.DateInput(format='%d/%m/%Y'), |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
def clean(self): |
|
|
|
|
|
local = self.instance.unidade_tramitacao_local |
|
|
|
|
|
data_tram = self.instance.data_tramitacao |
|
|
|
|
|
|
|
|
|
|
|
self.cleaned_data['data_tramitacao'] = data_tram |
|
|
|
|
|
self.cleaned_data['unidade_tramitacao_local'] = local |
|
|
|
|
|
return super(TramitacaoAdmEditForm, self).clean() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class DocumentoAdministrativoForm(ModelForm): |
|
|
class DocumentoAdministrativoForm(ModelForm): |
|
|
|
|
|
|
|
|
class Meta: |
|
|
class Meta: |
|
|
|