Browse Source

Cria as regras para criacao e edicao de tramitacao de uma materia

pull/540/head
Eduardo Calil 9 years ago
parent
commit
98334f4c6b
  1. 77
      sapl/materia/forms.py
  2. 14
      sapl/materia/views.py
  3. 6
      sapl/templates/materia/layouts.yaml
  4. 4
      sapl/utils.py

77
sapl/materia/forms.py

@ -216,22 +216,87 @@ class TramitacaoForm(ModelForm):
'texto'] 'texto']
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
ultima_tramitacao = Tramitacao.objects.filter( ultima_tramitacao = Tramitacao.objects.filter(
materia_id=self.instance.materia.id).last() materia_id=self.instance.materia_id).exclude(
id=self.instance.id).last()
if not self.instance.data_tramitacao:
if ultima_tramitacao:
destino = ultima_tramitacao.unidade_tramitacao_destino
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)
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 ultima_tramitacao: if data_enc_form:
destino = ultima_tramitacao.unidade_tramitacao_destino if data_enc_form < data_tram_form:
if (destino != self.cleaned_data['unidade_tramitacao_local']): msg = _('A data de encaminhamento deve ser ' +
msg = _('A origem da nova tramitação deve ser igual ao ' 'maior que a data de tramitação!')
'destino da última adicionada!') raise ValidationError(msg)
if data_prazo_form:
if data_prazo_form < data_tram_form:
msg = _('A data fim de prazo deve ser ' +
'maior que a data de tramitação!')
raise ValidationError(msg) raise ValidationError(msg)
return self.cleaned_data return self.cleaned_data
class TramitacaoUpdateForm(TramitacaoForm):
unidade_tramitacao_local = forms.ModelChoiceField(
queryset=UnidadeTramitacao.objects.all(),
widget=forms.HiddenInput())
data_tramitacao = forms.DateField(widget=forms.HiddenInput())
class Meta:
model = Tramitacao
fields = ['data_tramitacao',
'unidade_tramitacao_local',
'status',
'turno',
'urgente',
'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(TramitacaoUpdateForm, self).clean()
class LegislacaoCitadaForm(ModelForm): class LegislacaoCitadaForm(ModelForm):
tipo = forms.ModelChoiceField( tipo = forms.ModelChoiceField(

14
sapl/materia/views.py

@ -37,7 +37,8 @@ from .forms import (AcompanhamentoMateriaForm, AnexadaForm, AutorForm,
AutoriaForm, ConfirmarProposicaoForm, DespachoInicialForm, AutoriaForm, ConfirmarProposicaoForm, DespachoInicialForm,
DocumentoAcessorioForm, LegislacaoCitadaForm, DocumentoAcessorioForm, LegislacaoCitadaForm,
MateriaLegislativaFilterSet, NumeracaoForm, ProposicaoForm, MateriaLegislativaFilterSet, NumeracaoForm, ProposicaoForm,
ReceberProposicaoForm, RelatoriaForm, TramitacaoForm, ReceberProposicaoForm, RelatoriaForm,
TramitacaoForm, TramitacaoUpdateForm,
UnidadeTramitacaoForm, filtra_tramitacao_destino, UnidadeTramitacaoForm, filtra_tramitacao_destino,
filtra_tramitacao_destino_and_status, filtra_tramitacao_destino_and_status,
filtra_tramitacao_status) filtra_tramitacao_status)
@ -573,14 +574,19 @@ class TramitacaoCrud(MasterDetailCrud):
return super(CreateView, self).post(request, *args, **kwargs) return super(CreateView, self).post(request, *args, **kwargs)
class UpdateView(PermissionRequiredMixin, MasterDetailCrud.UpdateView): class UpdateView(PermissionRequiredMixin, MasterDetailCrud.UpdateView):
form_class = TramitacaoForm form_class = TramitacaoUpdateForm
permission_required = permissoes_materia() permission_required = permissoes_materia()
def post(self, request, *args, **kwargs): def post(self, request, *args, **kwargs):
materia = MateriaLegislativa.objects.get(id=kwargs['pk']) materia = MateriaLegislativa.objects.get(
tramitacao__id=kwargs['pk'])
do_envia_email_tramitacao(request, materia) do_envia_email_tramitacao(request, materia)
return super(UpdateView, self).post(request, *args, **kwargs) return super(UpdateView, self).post(request, *args, **kwargs)
@property
def layout_key(self):
return 'TramitacaoUpdate'
class ListView(MasterDetailCrud.ListView): class ListView(MasterDetailCrud.ListView):
def get_queryset(self): def get_queryset(self):
@ -598,7 +604,7 @@ class TramitacaoCrud(MasterDetailCrud):
kwargs={'pk': tramitacao.materia.id}) kwargs={'pk': tramitacao.materia.id})
if tramitacao.pk != materia.tramitacao_set.last().pk: if tramitacao.pk != materia.tramitacao_set.last().pk:
msg = _('Somente a útlima tramitação pode ser deletada!') msg = _('Somente a última tramitação pode ser deletada!')
messages.add_message(request, messages.ERROR, msg) messages.add_message(request, messages.ERROR, msg)
return HttpResponseRedirect(url) return HttpResponseRedirect(url)
else: else:

6
sapl/templates/materia/layouts.yaml

@ -129,6 +129,12 @@ Tramitacao:
- status turno urgente - status turno urgente
- texto - texto
TramitacaoUpdate:
{% trans 'Tramitação' %}:
- unidade_tramitacao_destino data_encaminhamento data_fim_prazo
- status turno urgente
- texto
DespachoInicial: DespachoInicial:
{% trans 'Despacho Inicial' %}: {% trans 'Despacho Inicial' %}:
- comissao - comissao

4
sapl/utils.py

@ -225,8 +225,8 @@ def intervalos_tem_intersecao(a_inicio, a_fim, b_inicio, b_fim):
def permissoes_materia(): def permissoes_materia():
lista_permissoes = [] lista_permissoes = []
try: try:
cts = ContentType.objects.filter(app_label='materia') perms_materia = Permission.objects.filter(
perms_materia = list(Permission.objects.filter(content_type__in=cts)) group__name='Operador de Matéria')
for p in perms_materia: for p in perms_materia:
lista_permissoes.append('materia.' + p.codename) lista_permissoes.append('materia.' + p.codename)
except: except:

Loading…
Cancel
Save