diff --git a/materia/migrations/0036_merge.py b/materia/migrations/0036_merge.py new file mode 100644 index 000000000..46be53b44 --- /dev/null +++ b/materia/migrations/0036_merge.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.5 on 2016-05-20 11:53 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('materia', '0032_auto_20160503_0926'), + ('materia', '0035_auto_20160510_0949'), + ] + + operations = [ + ] diff --git a/protocoloadm/forms.py b/protocoloadm/forms.py index f01bc67fc..aec065756 100644 --- a/protocoloadm/forms.py +++ b/protocoloadm/forms.py @@ -1,9 +1,9 @@ import django_filters from crispy_forms.bootstrap import InlineRadios from crispy_forms.helper import FormHelper -from crispy_forms.layout import HTML, Button, Field, Fieldset, Layout, Submit +from crispy_forms.layout import HTML, Button, Fieldset, Layout, Submit from django import forms -from django.core.exceptions import ObjectDoesNotExist +from django.core.exceptions import ObjectDoesNotExist, ValidationError from django.db import models from django.forms import ModelForm from django.utils.translation import ugettext_lazy as _ @@ -523,7 +523,6 @@ class TramitacaoAdmForm(ModelForm): 'data_encaminhamento', 'data_fim_prazo', 'texto', - 'documento', ] widgets = { @@ -532,22 +531,21 @@ class TramitacaoAdmForm(ModelForm): 'data_fim_prazo': forms.DateInput(format='%d/%m/%Y'), } - def __init__(self, *args, **kwargs): - self.helper = FormHelper() - self.helper.layout = Layout( - Fieldset(_('Incluir Tramitação'), - 'data_tramitacao', - 'unidade_tramitacao_local', - 'status', - 'unidade_tramitacao_destino', - 'data_encaminhamento', - 'data_fim_prazo', - 'texto'), - Field('documento', type="hidden"), - form_actions() - ) - super(TramitacaoAdmForm, self).__init__( - *args, **kwargs) + def clean(self): + if self.errors: + return self.errors + + # ultima_tramitacao = TramitacaoAdministrativo.objects.filter( + # documento_id=self.instance.documento.id).last() + + # 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) + + return self.cleaned_data class DocumentoAdministrativoForm(ModelForm): diff --git a/protocoloadm/layouts.yaml b/protocoloadm/layouts.yaml index 32ba858ee..098c5ff01 100644 --- a/protocoloadm/layouts.yaml +++ b/protocoloadm/layouts.yaml @@ -14,6 +14,15 @@ DocumentoAdministrativo: - dias_prazo data_fim_prazo - observacao +TramitacaoAdministrativo: + Indentificação Básica: + - data_tramitacao unidade_tramitacao_local + - unidade_tramitacao_destino status + + Outras Informações: + - dias_prazo data_fim_prazo + - observacao + DocumentoAcessorioAdministrativo: Documento Acessório: - tipo nome data diff --git a/protocoloadm/migrations/0013_remove_tramitacaoadministrativo_ultima.py b/protocoloadm/migrations/0013_remove_tramitacaoadministrativo_ultima.py new file mode 100644 index 000000000..4753f9059 --- /dev/null +++ b/protocoloadm/migrations/0013_remove_tramitacaoadministrativo_ultima.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.5 on 2016-05-20 11:54 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('protocoloadm', '0012_auto_20160503_0926'), + ] + + operations = [ + migrations.RemoveField( + model_name='tramitacaoadministrativo', + name='ultima', + ), + ] diff --git a/protocoloadm/models.py b/protocoloadm/models.py index 9d2f922cd..081b8b277 100644 --- a/protocoloadm/models.py +++ b/protocoloadm/models.py @@ -175,7 +175,6 @@ class TramitacaoAdministrativo(models.Model): null=True, related_name='adm_tramitacoes_destino', verbose_name=_('Unidade Destino')) - ultima = models.BooleanField() texto = models.TextField( blank=True, verbose_name=_('Texto da Ação')) data_fim_prazo = models.DateField( diff --git a/protocoloadm/urls.py b/protocoloadm/urls.py index 09951476d..2548ebbd5 100644 --- a/protocoloadm/urls.py +++ b/protocoloadm/urls.py @@ -19,6 +19,7 @@ from protocoloadm.views import (AnularProtocoloAdmView, ProtocoloPesquisaView, StatusTramitacaoAdministrativoCrud, TipoDocumentoAdministrativoCrud, + TramitacaoAdmCrud, TramitacaoAdmDeleteView, TramitacaoAdmEditView, TramitacaoAdmIncluirView, TramitacaoAdministrativoCrud, @@ -31,7 +32,8 @@ app_name = AppConfig.name urlpatterns = [ url(r'^protocoloadm/docadm/', - include(DocumentoAdministrativoCrud.get_urls())), + include(DocumentoAdministrativoCrud.get_urls() + + TramitacaoAdmCrud.get_urls())), url(r'^protocoloadm/tipo-documento-adm/', include(TipoDocumentoAdministrativoCrud.get_urls())), url(r'^protocoloadm/doc-acessorio/', diff --git a/protocoloadm/views.py b/protocoloadm/views.py index 5f874ef78..cdf101a61 100644 --- a/protocoloadm/views.py +++ b/protocoloadm/views.py @@ -1,4 +1,6 @@ import json +import crud.base + from datetime import date, datetime from braces.views import FormValidMessageMixin @@ -13,6 +15,7 @@ from django.views.generic.base import TemplateView from django_filters.views import FilterView from crud.base import Crud, make_pagination +from crud.masterdetail import MasterDetailCrud from materia.models import Proposicao, TipoMateriaLegislativa from sapl.utils import create_barcode, get_client_ip @@ -28,7 +31,6 @@ from .models import (Autor, DocumentoAcessorioAdministrativo, TipoDocumentoAdministrativoCrud = Crud.build(TipoDocumentoAdministrativo, '') -DocumentoAdministrativoCrud = Crud.build(DocumentoAdministrativo, '') DocumentoAcessorioAdministrativoCrud = Crud.build( DocumentoAcessorioAdministrativo, '') StatusTramitacaoAdministrativoCrud = Crud.build( @@ -40,6 +42,16 @@ ProtocoloDocumentoCrud = Crud.build(Protocolo, '') ProtocoloMateriaCrud = Crud.build(Protocolo, '') +class DocumentoAdministrativoCrud(Crud): + model = DocumentoAdministrativo + help_path = '' + + class BaseMixin(crud.base.CrudBaseMixin): + list_field_names = ['tipo', 'numero', 'ano', 'data', + 'numero_protocolo', 'assunto', + 'interessado', 'tramitacao', 'texto_integral'] + + class ProtocoloPesquisaView(FilterView): model = Protocolo filterset_class = ProtocoloFilterSet @@ -544,6 +556,28 @@ class DocumentoAcessorioAdministrativoView(FormView): return reverse('protocoloadm:doc_ace_adm', kwargs={'pk': pk}) +class TramitacaoAdmCrud(MasterDetailCrud): + model = TramitacaoAdministrativo + parent_field = 'documento' + help_path = '' + + class BaseMixin(MasterDetailCrud.BaseMixin): + list_field_names = ['data_tramitacao', 'unidade_tramitacao_local', + 'unidade_tramitacao_destino', 'status'] + + class CreateView(MasterDetailCrud.CreateView): + form_class = TramitacaoAdmForm + + class UpdateView(MasterDetailCrud.UpdateView): + form_class = TramitacaoAdmForm + + class ListView(MasterDetailCrud.ListView): + def get_queryset(self): + qs = super(MasterDetailCrud.ListView, self).get_queryset() + kwargs = {self.crud.parent_field: self.kwargs['pk']} + return qs.filter(**kwargs).order_by('-data_tramitacao') + + class TramitacaoAdmView(FormView): template_name = "protocoloadm/tramitacao.html" diff --git a/templates/protocoloadm/documentoadministrativo_detail.html b/templates/protocoloadm/documentoadministrativo_detail.html new file mode 100644 index 000000000..a56d176f3 --- /dev/null +++ b/templates/protocoloadm/documentoadministrativo_detail.html @@ -0,0 +1,10 @@ +{% extends "crud/detail.html" %} +{% load i18n %} +{% block actions %} +