Browse Source

Finaliza as regras de tramitacao para Documentos Administrativos

pull/481/head
Eduardo Calil 10 years ago
parent
commit
1e9a027132
  1. 1
      base/forms.py
  2. 3
      compilacao/views.py
  3. 16
      norma/migrations/0014_merge.py
  4. 127
      protocoloadm/forms.py
  5. 16
      protocoloadm/migrations/0014_merge.py
  6. 6
      protocoloadm/models.py
  7. 3
      protocoloadm/urls.py
  8. 7
      protocoloadm/views.py

1
base/forms.py

@ -2,6 +2,7 @@ from django import forms
from django.contrib.auth.forms import AuthenticationForm from django.contrib.auth.forms import AuthenticationForm
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.forms import ModelForm from django.forms import ModelForm
import sapl import sapl
from sapl.settings import MAX_IMAGE_UPLOAD_SIZE from sapl.settings import MAX_IMAGE_UPLOAD_SIZE

3
compilacao/views.py

@ -1,6 +1,6 @@
import sys
from collections import OrderedDict from collections import OrderedDict
from datetime import datetime, timedelta from datetime import datetime, timedelta
import sys
from braces.views import FormMessagesMixin from braces.views import FormMessagesMixin
from django import forms from django import forms
@ -37,7 +37,6 @@ from compilacao.models import (Dispositivo, Nota,
from compilacao.utils import DISPOSITIVO_SELECT_RELATED from compilacao.utils import DISPOSITIVO_SELECT_RELATED
from crud.base import Crud, CrudListView, make_pagination from crud.base import Crud, CrudListView, make_pagination
TipoNotaCrud = Crud.build(TipoNota, 'tipo_nota') TipoNotaCrud = Crud.build(TipoNota, 'tipo_nota')
TipoVideCrud = Crud.build(TipoVide, 'tipo_vide') TipoVideCrud = Crud.build(TipoVide, 'tipo_vide')
TipoPublicacaoCrud = Crud.build(TipoPublicacao, 'tipo_publicacao') TipoPublicacaoCrud = Crud.build(TipoPublicacao, 'tipo_publicacao')

16
norma/migrations/0014_merge.py

@ -0,0 +1,16 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.5 on 2016-05-30 12:00
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('norma', '0013_auto_20160503_0926'),
('norma', '0013_auto_20160510_1404'),
]
operations = [
]

127
protocoloadm/forms.py

@ -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,16 +54,18 @@ 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(
label='Tipo de Protocolo', required=False,
choices=TIPOS_PROTOCOLO, label='Tipo de Protocolo',
widget=forms.Select( choices=TIPOS_PROTOCOLO,
attrs={'class': 'selector'})) widget=forms.Select(
tipo_processo = django_filters.ChoiceFilter(required=False, attrs={'class': 'selector'}))
label='Natureza do Processo', tipo_processo = django_filters.ChoiceFilter(
choices=NATUREZA_PROCESSO, required=False,
widget=forms.Select( label='Natureza do Processo',
attrs={'class': 'selector'})) choices=NATUREZA_PROCESSO,
widget=forms.Select(
attrs={'class': 'selector'}))
class Meta: class Meta:
model = Protocolo model = Protocolo
@ -112,13 +115,13 @@ class ProtocoloFilterSet(django_filters.FilterSet):
('assunto_ementa', 6)]) ('assunto_ementa', 6)])
row4 = crispy_layout_mixin.to_row( row4 = crispy_layout_mixin.to_row(
[('autor', 0), [('autor', 0),
(Button('pesquisar', (Button('pesquisar',
'Pesquisar Autor', 'Pesquisar Autor',
css_class='btn btn-primary btn-sm'), 2), css_class='btn btn-primary btn-sm'), 2),
(Button('limpar', (Button('limpar',
'Limpar Autor', 'Limpar Autor',
css_class='btn btn-primary btn-sm'), 10)]) css_class='btn btn-primary btn-sm'), 10)])
row5 = crispy_layout_mixin.to_row( row5 = crispy_layout_mixin.to_row(
[('tipo_processo', 12)]) [('tipo_processo', 12)])
row6 = crispy_layout_mixin.to_row( row6 = crispy_layout_mixin.to_row(
@ -134,7 +137,7 @@ class ProtocoloFilterSet(django_filters.FilterSet):
HTML(sapl.utils.autor_modal), HTML(sapl.utils.autor_modal),
row4, row5, row6, row4, row5, row6,
form_actions(save_label='Pesquisar')) form_actions(save_label='Pesquisar'))
) )
class DocumentoAdministrativoFilterSet(django_filters.FilterSet): class DocumentoAdministrativoFilterSet(django_filters.FilterSet):
@ -222,7 +225,7 @@ class DocumentoAdministrativoFilterSet(django_filters.FilterSet):
row1, row2, row1, row2,
row3, row4, row5, row3, row4, row5,
form_actions(save_label='Pesquisar')) form_actions(save_label='Pesquisar'))
) )
class AnularProcoloAdmForm(ModelForm): class AnularProcoloAdmForm(ModelForm):
@ -533,33 +536,79 @@ 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 ultima_tramitacao: if not self.instance.data_tramitacao:
destino = ultima_tramitacao.unidade_tramitacao_destino
if (destino != self.cleaned_data['unidade_tramitacao_local']): if ultima_tramitacao:
msg = _('A origem da nova tramitação deve ser igual ao ' destino = ultima_tramitacao.unidade_tramitacao_destino
'destino da última adicionada!') if (destino != self.cleaned_data['unidade_tramitacao_local']):
msg = _('A origem da nova tramitação deve ser igual ao '
'destino da última adicionada!')
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) 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:

16
protocoloadm/migrations/0014_merge.py

@ -0,0 +1,16 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.5 on 2016-05-30 12:01
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('protocoloadm', '0013_remove_tramitacaoadministrativo_ultima'),
('protocoloadm', '0013_merge'),
]
operations = [
]

6
protocoloadm/models.py

@ -166,16 +166,12 @@ class StatusTramitacaoAdministrativo(models.Model):
class TramitacaoAdministrativo(models.Model): class TramitacaoAdministrativo(models.Model):
status = models.ForeignKey( status = models.ForeignKey(
StatusTramitacaoAdministrativo, StatusTramitacaoAdministrativo,
blank=True,
null=True,
verbose_name=_('Status')) verbose_name=_('Status'))
documento = models.ForeignKey(DocumentoAdministrativo) documento = models.ForeignKey(DocumentoAdministrativo)
data_tramitacao = models.DateField( data_tramitacao = models.DateField(
blank=True, null=True, verbose_name=_('Data Tramitação')) verbose_name=_('Data Tramitação'))
unidade_tramitacao_local = models.ForeignKey( unidade_tramitacao_local = models.ForeignKey(
UnidadeTramitacao, UnidadeTramitacao,
blank=True,
null=True,
related_name='adm_tramitacoes_origem', related_name='adm_tramitacoes_origem',
verbose_name=_('Unidade Local')) verbose_name=_('Unidade Local'))
data_encaminhamento = models.DateField( data_encaminhamento = models.DateField(

3
protocoloadm/urls.py

@ -19,8 +19,7 @@ from protocoloadm.views import (AnularProtocoloAdmView,
ProtocoloPesquisaView, ProtocoloPesquisaView,
StatusTramitacaoAdministrativoCrud, StatusTramitacaoAdministrativoCrud,
TipoDocumentoAdministrativoCrud, TipoDocumentoAdministrativoCrud,
TipoInstituicaoCrud, TipoInstituicaoCrud, TramitacaoAdmCrud,
TramitacaoAdmCrud,
get_nome_autor, pesquisa_autores) get_nome_autor, pesquisa_autores)
from .apps import AppConfig from .apps import AppConfig

7
protocoloadm/views.py

@ -22,7 +22,8 @@ from .forms import (AnularProcoloAdmForm, DocumentoAcessorioAdministrativoForm,
DocumentoAdministrativoFilterSet, DocumentoAdministrativoFilterSet,
DocumentoAdministrativoForm, ProposicaoSimpleForm, DocumentoAdministrativoForm, ProposicaoSimpleForm,
ProtocoloDocumentForm, ProtocoloFilterSet, ProtocoloDocumentForm, ProtocoloFilterSet,
ProtocoloMateriaForm, TramitacaoAdmForm) ProtocoloMateriaForm, TramitacaoAdmEditForm,
TramitacaoAdmForm)
from .models import (Autor, DocumentoAcessorioAdministrativo, from .models import (Autor, DocumentoAcessorioAdministrativo,
DocumentoAdministrativo, Protocolo, DocumentoAdministrativo, Protocolo,
StatusTramitacaoAdministrativo, StatusTramitacaoAdministrativo,
@ -579,13 +580,13 @@ class TramitacaoAdmCrud(MasterDetailCrud):
form_class = TramitacaoAdmForm form_class = TramitacaoAdmForm
class UpdateView(MasterDetailCrud.UpdateView): class UpdateView(MasterDetailCrud.UpdateView):
form_class = TramitacaoAdmForm form_class = TramitacaoAdmEditForm
class ListView(MasterDetailCrud.ListView): class ListView(MasterDetailCrud.ListView):
def get_queryset(self): def get_queryset(self):
qs = super(MasterDetailCrud.ListView, self).get_queryset() qs = super(MasterDetailCrud.ListView, self).get_queryset()
kwargs = {self.crud.parent_field: self.kwargs['pk']} kwargs = {self.crud.parent_field: self.kwargs['pk']}
return qs.filter(**kwargs).order_by('-data_tramitacao') return qs.filter(**kwargs).order_by('-id')
def get_nome_autor(request): def get_nome_autor(request):

Loading…
Cancel
Save