diff --git a/materia/migrations/0036_merge.py b/materia/migrations/0036_merge.py index f0a9f86a6..46be53b44 100644 --- a/materia/migrations/0036_merge.py +++ b/materia/migrations/0036_merge.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-05-19 13:49 +# Generated by Django 1.9.5 on 2016-05-20 11:53 from __future__ import unicode_literals from django.db import migrations 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 304cd0bd8..af2707baa 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 b85b44d0d..547909fba 100644 --- a/protocoloadm/models.py +++ b/protocoloadm/models.py @@ -186,7 +186,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 ea6cad974..c029c9dcb 100644 --- a/protocoloadm/urls.py +++ b/protocoloadm/urls.py @@ -19,20 +19,17 @@ from protocoloadm.views import (AnularProtocoloAdmView, ProtocoloPesquisaView, StatusTramitacaoAdministrativoCrud, TipoDocumentoAdministrativoCrud, - TipoInstituicaoCrud, TramitacaoAdmDeleteView, - TramitacaoAdmEditView, - TramitacaoAdmIncluirView, - TramitacaoAdministrativoCrud, - TramitacaoAdmView, get_nome_autor, - pesquisa_autores) - + TipoInstituicaoCrud, + TramitacaoAdmCrud, + get_nome_autor, pesquisa_autores) from .apps import AppConfig 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 35daf35b0..93a123b85 100644 --- a/protocoloadm/views.py +++ b/protocoloadm/views.py @@ -14,6 +14,7 @@ from django_filters.views import FilterView import crud.base 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 @@ -29,16 +30,28 @@ from .models import (Autor, DocumentoAcessorioAdministrativo, TramitacaoAdministrativo) TipoDocumentoAdministrativoCrud = Crud.build(TipoDocumentoAdministrativo, '') -DocumentoAdministrativoCrud = Crud.build(DocumentoAdministrativo, '') DocumentoAcessorioAdministrativoCrud = Crud.build( DocumentoAcessorioAdministrativo, '') +StatusTramitacaoAdministrativoCrud = Crud.build( + StatusTramitacaoAdministrativo, '') TramitacaoAdministrativoCrud = Crud.build(TramitacaoAdministrativo, '') ProtocoloDocumentoCrud = Crud.build(Protocolo, '') + # FIXME precisa de uma chave diferente para o layout ProtocoloMateriaCrud = Crud.build(Protocolo, '') TipoInstituicaoCrud = Crud.build(TipoInstituicao, '') +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 StatusTramitacaoAdministrativoCrud(Crud): model = StatusTramitacaoAdministrativo help_path = '' @@ -554,6 +567,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 %} +

Protocolos

+
+{% trans 'Tramitações' %} + {% trans 'Editar' %} + {% trans 'Excluir' %} +
+{% endblock actions %} \ No newline at end of file diff --git a/templates/protocoloadm/documentoadministrativo_filter.html b/templates/protocoloadm/documentoadministrativo_filter.html index e947609de..e4e0e73bb 100644 --- a/templates/protocoloadm/documentoadministrativo_filter.html +++ b/templates/protocoloadm/documentoadministrativo_filter.html @@ -5,15 +5,15 @@ {% block sections_nav %} {% endblock %} {% block actions %} +

Documentos Administrativos

- {% trans 'Adicionar Documento' %} + {% trans 'Adicionar Documento Administrativo' %}
{% endblock actions %} {% block detail_content %} -

Pesquisar Documento Administrativo

-

+ {% crispy filter.form %} diff --git a/templates/protocoloadm/protocolo_filter.html b/templates/protocoloadm/protocolo_filter.html index 8b690749d..157b6abf1 100644 --- a/templates/protocoloadm/protocolo_filter.html +++ b/templates/protocoloadm/protocolo_filter.html @@ -18,7 +18,7 @@ {% crispy filter.form %} {% endif %} - + {% crispy filter.form %} {% if filter_url %}

diff --git a/templates/protocoloadm/protocolo_pesquisa.html b/templates/protocoloadm/protocolo_pesquisa.html deleted file mode 100644 index 60a795994..000000000 --- a/templates/protocoloadm/protocolo_pesquisa.html +++ /dev/null @@ -1,9 +0,0 @@ -{% extends "protocoloadm/protocoloadm_detail.html" %} -{% load i18n %} -{% load crispy_forms_tags %} - -{% block detail_content %} - Pesquisa Avançada - {% crispy form %} - -{% endblock detail_content %} diff --git a/templates/protocoloadm/protocoloadm_detail.html b/templates/protocoloadm/protocoloadm_detail.html index ff79d9f3b..2407f2f32 100644 --- a/templates/protocoloadm/protocoloadm_detail.html +++ b/templates/protocoloadm/protocoloadm_detail.html @@ -1,6 +1,7 @@ {% extends "crud/detail.html" %} {% load i18n %} {% block actions %} +

Protocolos

{% trans 'Protocolar Documento' %} {% trans 'Protocolar Matéria' %}