Browse Source

Merge pull request #380 from interlegis/354-Crud-Tramitação

Fix #354 crud tramitação
pull/377/head
Edward 9 years ago
parent
commit
ecf51a2dec
  1. 101
      materia/forms.py
  2. 11
      materia/layouts.yaml
  3. 20
      materia/migrations/0031_auto_20160502_1131.py
  4. 3
      materia/models.py
  5. 8
      materia/tests/test_materia.py
  6. 6
      materia/tests/test_materia_urls.py
  7. 18
      materia/urls.py
  8. 313
      materia/views.py
  9. 9
      norma/layouts.yaml
  10. 1
      static/js/app.js
  11. 33
      templates/materia/legislacao_citada.html
  12. 94
      templates/materia/legislacao_citada_edit.html
  13. 4
      templates/materia/subnav.yaml
  14. 33
      templates/materia/tramitacao.html
  15. 7
      templates/materia/tramitacao_edit.html

101
materia/forms.py

@ -11,7 +11,7 @@ from django.utils.translation import ugettext_lazy as _
import crispy_layout_mixin import crispy_layout_mixin
import sapl import sapl
from crispy_layout_mixin import form_actions from crispy_layout_mixin import form_actions
from norma.models import LegislacaoCitada, TipoNormaJuridica from norma.models import LegislacaoCitada, NormaJuridica, TipoNormaJuridica
from sapl.settings import MAX_DOC_UPLOAD_SIZE from sapl.settings import MAX_DOC_UPLOAD_SIZE
from sapl.utils import RANGE_ANOS from sapl.utils import RANGE_ANOS
@ -191,11 +191,6 @@ class RelatoriaForm(ModelForm):
class TramitacaoForm(ModelForm): class TramitacaoForm(ModelForm):
urgente = forms.ChoiceField(required=False,
label='Tramitando',
choices=[(True, 'Sim'), (False, 'Não')],
widget=forms.Select(
attrs={'class': 'selector'}))
class Meta: class Meta:
model = Tramitacao model = Tramitacao
@ -209,34 +204,21 @@ class TramitacaoForm(ModelForm):
'data_fim_prazo', 'data_fim_prazo',
'texto'] 'texto']
def __init__(self, excluir=False, *args, **kwargs): def clean(self):
row1 = crispy_layout_mixin.to_row( if self.errors:
[('data_tramitacao', 6), ('unidade_tramitacao_local', 6)]) return self.errors
row2 = crispy_layout_mixin.to_row(
[('status', 5), ('turno', 5), ('urgente', 2)])
row3 = crispy_layout_mixin.to_row(
[('unidade_tramitacao_destino', 12)])
row4 = crispy_layout_mixin.to_row( ultima_tramitacao = Tramitacao.objects.filter(
[('data_encaminhamento', 6), ('data_fim_prazo', 6)]) materia_id=self.instance.materia.id).last()
row5 = crispy_layout_mixin.to_row( if ultima_tramitacao:
[('texto', 12)]) 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)
more = [] return self.cleaned_data
if excluir:
more = [Submit('Excluir', 'Excluir')]
self.helper = FormHelper()
self.helper.layout = Layout(
Fieldset(_('Incluir Tramitação'),
row1, row2, row3, row4, row5,
),
form_actions(more=more)
)
super(TramitacaoForm, self).__init__(
*args, **kwargs)
class LegislacaoCitadaForm(ModelForm): class LegislacaoCitadaForm(ModelForm):
@ -270,41 +252,38 @@ class LegislacaoCitadaForm(ModelForm):
'alinea', 'alinea',
'item'] 'item']
def __init__(self, *args, **kwargs): def clean(self):
if self.errors:
return self.errors
row1 = crispy_layout_mixin.to_row( cleaned_data = self.cleaned_data
[('tipo', 4),
('numero', 4),
('ano', 4)])
row2 = crispy_layout_mixin.to_row( try:
[('disposicoes', 3), norma = NormaJuridica.objects.get(
('parte', 3), numero=cleaned_data['numero'],
('livro', 3), ano=cleaned_data['ano'],
('titulo', 3)]) tipo=cleaned_data['tipo'])
except ObjectDoesNotExist:
msg = _('A norma a ser inclusa não existe no cadastro'
' de Normas.')
raise ValidationError(msg)
else:
cleaned_data['norma'] = norma
row3 = crispy_layout_mixin.to_row( if LegislacaoCitada.objects.filter(
[('capitulo', 3), materia=self.instance.materia,
('secao', 3), norma=cleaned_data['norma']
('subsecao', 3), ).exists():
('artigo', 3)]) msg = _('Essa Legislação já foi cadastrada.')
raise ValidationError(msg)
row4 = crispy_layout_mixin.to_row( return cleaned_data
[('paragrafo', 3),
('inciso', 3),
('alinea', 3),
('item', 3)])
self.helper = FormHelper() def save(self, commit=False):
self.helper.form_class = 'form-horizontal' legislacao = super(LegislacaoCitadaForm, self).save(commit)
self.helper.layout = Layout( legislacao.norma = self.cleaned_data['norma']
Fieldset( legislacao.save()
_('Incluir Legislação Citada'), return legislacao
row1, row2, row3, row4,
form_actions()
)
)
super(LegislacaoCitadaForm, self).__init__(*args, **kwargs)
class NumeracaoForm(ModelForm): class NumeracaoForm(ModelForm):

11
materia/layouts.yaml

@ -107,11 +107,18 @@ UnidadeTramitacao:
Tramitacao: Tramitacao:
Tramitação: Tramitação:
- cod_ult_tram_dest_FIXME unidade_tramitacao_local - unidade_tramitacao_local unidade_tramitacao_destino
- data_tramitacao data_encaminhamento data_fim_prazo
- status turno urgente - status turno urgente
- unidade_tramitacao_destino data_encaminhamento data_fim_prazo
- texto - texto
DespachoInicial: DespachoInicial:
Despacho Inicial: Despacho Inicial:
- comissao - comissao
LegislacaoCitadaDetail:
Legislação Citada:
- norma
- disposicoes parte livro titulo
- capitulo secao subsecao artigo
- paragrafo inciso alinea item

20
materia/migrations/0031_auto_20160502_1131.py

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.5 on 2016-05-02 14:31
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('materia', '0030_auto_20160429_1349'),
]
operations = [
migrations.AlterField(
model_name='tramitacao',
name='urgente',
field=models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], verbose_name='Urgente ?'),
),
]

3
materia/models.py

@ -546,7 +546,8 @@ class Tramitacao(models.Model):
UnidadeTramitacao, UnidadeTramitacao,
related_name='tramitacoes_destino', related_name='tramitacoes_destino',
verbose_name=_('Unidade Destino')) verbose_name=_('Unidade Destino'))
urgente = models.BooleanField(verbose_name=_('Urgente ?')) urgente = models.BooleanField(verbose_name=_('Urgente ?'),
choices=YES_NO_CHOICES)
turno = models.CharField( turno = models.CharField(
max_length=1, blank=True, verbose_name=_('Turno'), max_length=1, blank=True, verbose_name=_('Turno'),
choices=TURNO_CHOICES) choices=TURNO_CHOICES)

8
materia/tests/test_materia.py

@ -230,7 +230,7 @@ def test_legislacao_citada_submit(client):
norma = make_norma() norma = make_norma()
# Testa POST # Testa POST
response = client.post(reverse('materia:legislacao_citada', response = client.post(reverse('materia:legislacaocitada_create',
kwargs={'pk': materia_principal.pk}), kwargs={'pk': materia_principal.pk}),
{'tipo': norma.tipo.pk, {'tipo': norma.tipo.pk,
'numero': norma.numero, 'numero': norma.numero,
@ -256,7 +256,7 @@ def test_tramitacao_submit(client):
descricao='Status_Teste') descricao='Status_Teste')
# Testa POST # Testa POST
response = client.post( response = client.post(
reverse('materia:tramitacao_materia', reverse('materia:tramitacao_create',
kwargs={'pk': materia_principal.pk}), kwargs={'pk': materia_principal.pk}),
{'unidade_tramitacao_local': make_unidade_tramitacao( {'unidade_tramitacao_local': make_unidade_tramitacao(
'Unidade Local').pk, 'Unidade Local').pk,
@ -346,7 +346,7 @@ def test_form_errors_documento_acessorio(client):
def test_form_errors_legislacao_citada(client): def test_form_errors_legislacao_citada(client):
materia_principal = make_materia_principal() materia_principal = make_materia_principal()
response = client.post(reverse('materia:legislacao_citada', response = client.post(reverse('materia:legislacaocitada_create',
kwargs={'pk': materia_principal.pk}), kwargs={'pk': materia_principal.pk}),
{'salvar': 'salvar'}, {'salvar': 'salvar'},
follow=True) follow=True)
@ -382,7 +382,7 @@ def test_form_errors_numeracao(client):
def test_form_errors_tramitacao(client): def test_form_errors_tramitacao(client):
materia_principal = make_materia_principal() materia_principal = make_materia_principal()
response = client.post(reverse('materia:tramitacao_materia', response = client.post(reverse('materia:tramitacao_create',
kwargs={'pk': materia_principal.pk}), kwargs={'pk': materia_principal.pk}),
{'salvar': 'salvar'}, {'salvar': 'salvar'},
follow=True) follow=True)

6
materia/tests/test_materia_urls.py

@ -6,9 +6,9 @@ from django.core.urlresolvers import reverse
('materia:relatoria_edit', ('materia:relatoria_edit',
{'pk': '11', 'id': '99'}, {'pk': '11', 'id': '99'},
'/materia/11/relatoria/99/edit'), '/materia/11/relatoria/99/edit'),
('materia:tramitacao_edit', ('materia:tramitacao_update',
{'pk': '3', 'id': '8'}, {'pk': '8'},
'/materia/3/tramitacao/8/edit'), '/materia/tramitacao/8/edit'),
('materia:adicionar_proposicao', {}, '/materia/proposicao'), ('materia:adicionar_proposicao', {}, '/materia/proposicao'),
('materia:editar_proposicao', ('materia:editar_proposicao',
{'pk': '3'}, {'pk': '3'},

18
materia/urls.py

@ -5,8 +5,7 @@ from materia.views import (AcompanhamentoConfirmarView,
AcompanhamentoMateriaView, AnexadaCrud, AutorCrud, AcompanhamentoMateriaView, AnexadaCrud, AutorCrud,
AutoriaCrud, DespachoInicialCrud, AutoriaCrud, DespachoInicialCrud,
DocumentoAcessorioEditView, DocumentoAcessorioView, DocumentoAcessorioEditView, DocumentoAcessorioView,
LegislacaoCitadaEditView, LegislacaoCitadaView, LegislacaoCitadaCrud, MateriaLegislativaCrud,
MateriaLegislativaCrud,
MateriaLegislativaPesquisaView, MateriaTaView, MateriaLegislativaPesquisaView, MateriaTaView,
NumeracaoCrud, OrgaoCrud, OrigemCrud, NumeracaoCrud, OrgaoCrud, OrigemCrud,
ProposicaoEditView, ProposicaoListView, ProposicaoEditView, ProposicaoListView,
@ -14,8 +13,7 @@ from materia.views import (AcompanhamentoConfirmarView,
RegimeTramitacaoCrud, RelatoriaEditView, RegimeTramitacaoCrud, RelatoriaEditView,
RelatoriaView, StatusTramitacaoCrud, TipoAutorCrud, RelatoriaView, StatusTramitacaoCrud, TipoAutorCrud,
TipoDocumentoCrud, TipoFimRelatoriaCrud, TipoDocumentoCrud, TipoFimRelatoriaCrud,
TipoMateriaCrud, TipoProposicaoCrud, TipoMateriaCrud, TipoProposicaoCrud, TramitacaoCrud,
TramitacaoEditView, TramitacaoView,
UnidadeTramitacaoCrud) UnidadeTramitacaoCrud)
from .apps import AppConfig from .apps import AppConfig
@ -27,7 +25,9 @@ urlpatterns = [
AnexadaCrud.get_urls() + AnexadaCrud.get_urls() +
AutoriaCrud.get_urls() + AutoriaCrud.get_urls() +
DespachoInicialCrud.get_urls() + DespachoInicialCrud.get_urls() +
NumeracaoCrud.get_urls())), NumeracaoCrud.get_urls() +
LegislacaoCitadaCrud.get_urls() +
TramitacaoCrud.get_urls())),
# Integração com Compilação # Integração com Compilação
url(r'^materia/(?P<pk>[0-9]+)/ta$', url(r'^materia/(?P<pk>[0-9]+)/ta$',
@ -53,20 +53,12 @@ urlpatterns = [
url(r'^sistema/materia/status-tramitacao/', url(r'^sistema/materia/status-tramitacao/',
include(StatusTramitacaoCrud.get_urls())), include(StatusTramitacaoCrud.get_urls())),
url(r'^sistema/materia/orgao/', include(OrgaoCrud.get_urls())), url(r'^sistema/materia/orgao/', include(OrgaoCrud.get_urls())),
url(r'^materia/(?P<pk>\d+)/legislacao-citada$',
LegislacaoCitadaView.as_view(), name='legislacao_citada'),
url(r'^materia/(?P<pk>\d+)/legislacao-citada/(?P<id>\d+)/edit',
LegislacaoCitadaEditView.as_view(), name='legislacao_citada_edit'),
url(r'^materia/(?P<pk>\d+)/documento-acessorio$', url(r'^materia/(?P<pk>\d+)/documento-acessorio$',
DocumentoAcessorioView.as_view(), name='documento_acessorio'), DocumentoAcessorioView.as_view(), name='documento_acessorio'),
url(r'^materia/(?P<pk>\d+)/documento-acessorio/(?P<id>\d+)/edit', url(r'^materia/(?P<pk>\d+)/documento-acessorio/(?P<id>\d+)/edit',
DocumentoAcessorioEditView.as_view(), name='documento_acessorio_edit'), DocumentoAcessorioEditView.as_view(), name='documento_acessorio_edit'),
url(r'^materia/(?P<pk>\d+)/relatoria$', url(r'^materia/(?P<pk>\d+)/relatoria$',
RelatoriaView.as_view(), name='relatoria'), RelatoriaView.as_view(), name='relatoria'),
url(r'^materia/(?P<pk>\d+)/tramitacao$',
TramitacaoView.as_view(), name='tramitacao_materia'),
url(r'^materia/(?P<pk>\d+)/tramitacao/(?P<id>\d+)/edit$',
TramitacaoEditView.as_view(), name='tramitacao_edit'),
url(r'^materia/(?P<pk>\d+)/relatoria/(?P<id>\d+)/edit$', url(r'^materia/(?P<pk>\d+)/relatoria/(?P<id>\d+)/edit$',
RelatoriaEditView.as_view(), name='relatoria_edit'), RelatoriaEditView.as_view(), name='relatoria_edit'),
url(r'^materia/proposicao$', url(r'^materia/proposicao$',

313
materia/views.py

@ -21,7 +21,7 @@ from comissoes.models import Comissao, Composicao
from compilacao.views import IntegracaoTaView from compilacao.views import IntegracaoTaView
from crud.base import Crud, make_pagination from crud.base import Crud, make_pagination
from crud.masterdetail import MasterDetailCrud from crud.masterdetail import MasterDetailCrud
from norma.models import LegislacaoCitada, NormaJuridica, TipoNormaJuridica from norma.models import LegislacaoCitada
from sapl.utils import get_base_url from sapl.utils import get_base_url
from .forms import (AcompanhamentoMateriaForm, AnexadaForm, AutoriaForm, from .forms import (AcompanhamentoMateriaForm, AnexadaForm, AutoriaForm,
@ -54,7 +54,45 @@ TipoProposicaoCrud = Crud.build(TipoProposicao, 'tipo_proposicao')
ProposicaoCrud = Crud.build(Proposicao, '') ProposicaoCrud = Crud.build(Proposicao, '')
StatusTramitacaoCrud = Crud.build(StatusTramitacao, 'status_tramitacao') StatusTramitacaoCrud = Crud.build(StatusTramitacao, 'status_tramitacao')
UnidadeTramitacaoCrud = Crud.build(UnidadeTramitacao, 'unidade_tramitacao') UnidadeTramitacaoCrud = Crud.build(UnidadeTramitacao, 'unidade_tramitacao')
TramitacaoCrud = Crud.build(Tramitacao, '')
class TramitacaoCrud(MasterDetailCrud):
model = Tramitacao
parent_field = 'materia'
help_path = ''
class BaseMixin(MasterDetailCrud.BaseMixin):
list_field_names = ['data_tramitacao', 'unidade_tramitacao_local',
'unidade_tramitacao_destino', 'status']
class CreateView(MasterDetailCrud.CreateView):
form_class = TramitacaoForm
class UpdateView(MasterDetailCrud.UpdateView):
form_class = TramitacaoForm
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 DeleteView(MasterDetailCrud.DeleteView):
def delete(self, request, *args, **kwargs):
tramitacao = Tramitacao.objects.get(id=self.kwargs['pk'])
materia = MateriaLegislativa.objects.get(id=tramitacao.materia.id)
url = reverse('materia:tramitacao_list',
kwargs={'pk': tramitacao.materia.id})
if tramitacao.pk != materia.tramitacao_set.last().pk:
msg = _('Somente a útlima tramitação pode ser deletada!')
messages.add_message(request, messages.ERROR, msg)
return HttpResponseRedirect(url)
else:
tramitacao.delete()
return HttpResponseRedirect(url)
class AutoriaCrud(MasterDetailCrud): class AutoriaCrud(MasterDetailCrud):
@ -81,6 +119,38 @@ class DespachoInicialCrud(MasterDetailCrud):
form_class = DespachoInicialForm form_class = DespachoInicialForm
class LegislacaoCitadaCrud(MasterDetailCrud):
model = LegislacaoCitada
parent_field = 'materia'
help_path = ''
class BaseMixin(MasterDetailCrud.BaseMixin):
list_field_names = ['norma', 'disposicoes']
def resolve_url(self, suffix, args=None):
namespace = 'materia'
return reverse('%s:%s' % (namespace, self.url_name(suffix)),
args=args)
class CreateView(MasterDetailCrud.CreateView):
form_class = LegislacaoCitadaForm
class UpdateView(MasterDetailCrud.UpdateView):
form_class = LegislacaoCitadaForm
def get_initial(self):
self.initial['tipo'] = self.object.norma.tipo.id
self.initial['numero'] = self.object.norma.numero
self.initial['ano'] = self.object.norma.ano
return self.initial
class DetailView(MasterDetailCrud.DetailView):
@property
def layout_key(self):
return 'LegislacaoCitadaDetail'
class NumeracaoCrud(MasterDetailCrud): class NumeracaoCrud(MasterDetailCrud):
model = Numeracao model = Numeracao
parent_field = 'materia' parent_field = 'materia'
@ -107,7 +177,7 @@ class AnexadaCrud(MasterDetailCrud):
class UpdateView(MasterDetailCrud.UpdateView): class UpdateView(MasterDetailCrud.UpdateView):
form_class = AnexadaForm form_class = AnexadaForm
def get_initial(self, **kwargs): def get_initial(self):
self.initial['tipo'] = self.object.materia_anexada.tipo.id self.initial['tipo'] = self.object.materia_anexada.tipo.id
self.initial['numero'] = self.object.materia_anexada.numero self.initial['numero'] = self.object.materia_anexada.numero
self.initial['ano'] = self.object.materia_anexada.ano self.initial['ano'] = self.object.materia_anexada.ano
@ -129,132 +199,6 @@ class MateriaLegislativaCrud(Crud):
list_field_names = ['tipo', 'numero', 'ano', 'data_apresentacao'] list_field_names = ['tipo', 'numero', 'ano', 'data_apresentacao']
class LegislacaoCitadaView(FormView):
template_name = "materia/legislacao_citada.html"
form_class = LegislacaoCitadaForm
def get(self, request, *args, **kwargs):
materia = MateriaLegislativa.objects.get(id=kwargs['pk'])
legislacao = LegislacaoCitada.objects.filter(materia_id=kwargs['pk'])
form = LegislacaoCitadaForm()
return self.render_to_response(
{'object': materia,
'form': form,
'legislacao': legislacao})
def post(self, request, *args, **kwargs):
form = LegislacaoCitadaForm(request.POST)
materia = MateriaLegislativa.objects.get(id=kwargs['pk'])
legislacao_list = LegislacaoCitada.objects.filter(
materia_id=kwargs['pk'])
if form.is_valid():
legislacao = LegislacaoCitada()
try:
norma = NormaJuridica.objects.get(
tipo_id=form.cleaned_data['tipo'],
numero=form.cleaned_data['numero'],
ano=form.cleaned_data['ano'])
except ObjectDoesNotExist:
msg = _('Norma Juridica não existe.')
messages.add_message(request, messages.INFO, msg)
return self.render_to_response({'form': form,
'object': materia,
'legislacao': legislacao_list})
legislacao.materia = materia
legislacao.norma = norma
legislacao.disposicoes = form.cleaned_data['disposicoes']
legislacao.parte = form.cleaned_data['parte']
legislacao.livro = form.cleaned_data['livro']
legislacao.titulo = form.cleaned_data['titulo']
legislacao.capitulo = form.cleaned_data['capitulo']
legislacao.secao = form.cleaned_data['secao']
legislacao.subsecao = form.cleaned_data['subsecao']
legislacao.artigo = form.cleaned_data['artigo']
legislacao.paragrafo = form.cleaned_data['paragrafo']
legislacao.inciso = form.cleaned_data['inciso']
legislacao.alinea = form.cleaned_data['alinea']
legislacao.item = form.cleaned_data['item']
legislacao.save()
return self.form_valid(form)
else:
return self.render_to_response({'form': form,
'object': materia,
'legislacao': legislacao_list})
def get_success_url(self):
pk = self.kwargs['pk']
return reverse('materia:legislacao_citada', kwargs={'pk': pk})
class LegislacaoCitadaEditView(FormView):
template_name = "materia/legislacao_citada_edit.html"
form_class = LegislacaoCitadaForm
def get_success_url(self):
pk = self.kwargs['pk']
return reverse('materia:legislacao_citada', kwargs={'pk': pk})
def get(self, request, *args, **kwargs):
materia = MateriaLegislativa.objects.get(id=kwargs['pk'])
legislacao = LegislacaoCitada.objects.get(id=kwargs['id'])
form = LegislacaoCitadaForm()
return self.render_to_response(
{'object': materia,
'form': form,
'legislacao': legislacao,
'tipos_norma': TipoNormaJuridica.objects.all()})
def post(self, request, *args, **kwargs):
form = LegislacaoCitadaForm(request.POST)
materia = MateriaLegislativa.objects.get(id=kwargs['pk'])
legislacao = LegislacaoCitada.objects.get(id=kwargs['id'])
if form.is_valid():
if 'excluir' in request.POST:
legislacao.delete()
return self.form_valid(form)
elif 'salvar' in request.POST:
try:
norma = NormaJuridica.objects.get(
tipo_id=form.cleaned_data['tipo'],
numero=form.cleaned_data['numero'],
ano=form.cleaned_data['ano'])
except ObjectDoesNotExist:
msg = _('Norma Juridica não existe.')
messages.add_message(request, messages.INFO, msg)
return self.render_to_response(
{'form': form,
'object': materia,
'legislacao': legislacao,
'tipos_norma': TipoNormaJuridica.objects.all()})
legislacao.materia = materia
legislacao.norma = norma
legislacao.disposicoes = form.cleaned_data['disposicoes']
legislacao.parte = form.cleaned_data['parte']
legislacao.livro = form.cleaned_data['livro']
legislacao.titulo = form.cleaned_data['titulo']
legislacao.capitulo = form.cleaned_data['capitulo']
legislacao.secao = form.cleaned_data['secao']
legislacao.subsecao = form.cleaned_data['subsecao']
legislacao.artigo = form.cleaned_data['artigo']
legislacao.paragrafo = form.cleaned_data['paragrafo']
legislacao.inciso = form.cleaned_data['inciso']
legislacao.alinea = form.cleaned_data['alinea']
legislacao.item = form.cleaned_data['item']
legislacao.save()
return self.form_valid(form)
else:
return self.render_to_response(
{'form': form,
'object': materia})
class DocumentoAcessorioView(CreateView): class DocumentoAcessorioView(CreateView):
template_name = "materia/documento_acessorio.html" template_name = "materia/documento_acessorio.html"
form_class = DocumentoAcessorioForm form_class = DocumentoAcessorioForm
@ -735,117 +679,6 @@ def do_envia_email_tramitacao(request, materia):
return None return None
class TramitacaoView(CreateView):
template_name = "materia/tramitacao.html"
form_class = TramitacaoForm
def get(self, request, *args, **kwargs):
materia = MateriaLegislativa.objects.get(id=kwargs['pk'])
tramitacoes = Tramitacao.objects.filter(
materia_id=kwargs['pk']).order_by('-data_tramitacao')
form = self.get_form()
return self.render_to_response(
{'object': materia,
'form': form,
'tramitacoes': tramitacoes})
def post(self, request, *args, **kwargs):
form = self.get_form()
materia = MateriaLegislativa.objects.get(id=kwargs['pk'])
tramitacoes_list = Tramitacao.objects.filter(
materia_id=kwargs['pk']).order_by('-data_tramitacao')
if form.is_valid():
ultima_tramitacao = Tramitacao.objects.filter(
materia_id=kwargs['pk']).last()
if ultima_tramitacao:
destino = ultima_tramitacao.unidade_tramitacao_destino
cleaned_data = form.cleaned_data['unidade_tramitacao_local']
if (destino == cleaned_data):
tramitacao = form.save(commit=False)
tramitacao.materia = materia
tramitacao.save()
else:
msg = _('A origem da nova tramitação \
deve ser igual ao destino da última adicionada!')
messages.add_message(request, messages.INFO, msg)
return self.render_to_response(
{'form': form,
'object': materia,
'tramitacoes': tramitacoes_list})
do_envia_email_tramitacao(request, materia)
else:
tramitacao = form.save(commit=False)
tramitacao.materia = materia
tramitacao.save()
return self.form_valid(form)
else:
return self.render_to_response({'form': form,
'object': materia,
'tramitacoes': tramitacoes_list})
def get_success_url(self):
pk = self.kwargs['pk']
return reverse('materia:tramitacao_materia', kwargs={'pk': pk})
class TramitacaoEditView(CreateView):
template_name = "materia/tramitacao_edit.html"
form_class = TramitacaoForm
def get(self, request, *args, **kwargs):
materia = MateriaLegislativa.objects.get(id=kwargs['pk'])
tramitacao = Tramitacao.objects.get(id=kwargs['id'])
form = TramitacaoForm(excluir=True, instance=tramitacao)
return self.render_to_response(
{'object': materia,
'form': form,
'tramitacao': tramitacao})
def post(self, request, *args, **kwargs):
materia = MateriaLegislativa.objects.get(id=kwargs['pk'])
tramitacao = Tramitacao.objects.get(id=kwargs['id'])
form = self.get_form()
if form.is_valid():
if 'excluir' in request.POST:
if tramitacao == Tramitacao.objects.filter(
materia=materia).last():
tramitacao.delete()
else:
msg = _('Somente a útlima tramitação pode ser deletada!')
messages.add_message(request, messages.INFO, msg)
return self.render_to_response(
{'object': materia,
'form': form,
'tramitacao': tramitacao})
elif 'salvar' in request.POST:
tramitacao.status = form.cleaned_data['status']
tramitacao.turno = form.cleaned_data['turno']
tramitacao.urgente = form.cleaned_data['urgente']
tramitacao.unidade_tramitacao_destino = form.cleaned_data[
'unidade_tramitacao_destino']
tramitacao.data_encaminhamento = form.cleaned_data[
'data_encaminhamento']
tramitacao.data_fim_prazo = form.cleaned_data['data_fim_prazo']
tramitacao.texto = form.cleaned_data['texto']
tramitacao.save()
return redirect(self.get_success_url())
else:
return self.render_to_response(
{'object': materia,
'form': form,
'tramitacao': tramitacao})
def get_success_url(self):
pk = self.kwargs['pk']
return reverse('materia:tramitacao_materia', kwargs={'pk': pk})
class ProposicaoListView(ListView): class ProposicaoListView(ListView):
template_name = "materia/proposicao/proposicao_list.html" template_name = "materia/proposicao/proposicao_list.html"
paginate_by = 10 paginate_by = 10

9
norma/layouts.yaml

@ -30,7 +30,14 @@ NormaJuridicaCreate:
LegislacaoCitada: LegislacaoCitada:
Legislação Citada: Legislação Citada:
- tip_norma_FIXME num_norma_FIXME ano_norma_FIXME - tipo numero ano
- disposicoes parte livro titulo
- capitulo secao subsecao artigo
- paragrafo inciso alinea item
LegislacaoCitadaDetail:
Legislação Citada:
- norma
- disposicoes parte livro titulo - disposicoes parte livro titulo
- capitulo secao subsecao artigo - capitulo secao subsecao artigo
- paragrafo inciso alinea item - paragrafo inciso alinea item

1
static/js/app.js

@ -71,7 +71,6 @@ function autorModal() {
clean_if_exists("#id_autor"); clean_if_exists("#id_autor");
clean_if_exists("#id_autoria__autor"); clean_if_exists("#id_autoria__autor");
}); });
$("#button-id-pesquisar").click(function() { $("#button-id-pesquisar").click(function() {

33
templates/materia/legislacao_citada.html

@ -1,33 +0,0 @@
{% extends "crud/detail.html" %}
{% load i18n %}
{% load crispy_forms_tags %}
{% block actions %} {% endblock %}
{% block detail_content %}
<fieldset>
<legend>Matéria Legislativa</legend>
{% include "materia/resumo_detail_materia.html" %}
<fieldset>
<legend>Legislação Citada</legend>
<table class="table table-striped table-bordered">
<thead class="thead-default">
<tr>
<th>Tipo Norma</th>
<th>Número</th>
<th>Ano</th>
<th>Disposição</th>
</tr>
</thead>
{% for l in legislacao %}
<tr>
<td><a href="{% url 'materia:legislacao_citada_edit' object.id l.id %}">{{l.norma.tipo.descricao}}</a></td>
<td>{{l.norma.numero}}</td>
<td>{{l.norma.ano}}</td>
<td>{{l.disposicoes}}</td>
</tr>
{% endfor %}
</table>
</fieldset>
{% crispy form %}
</fieldset>
{% endblock %}

94
templates/materia/legislacao_citada_edit.html

@ -1,94 +0,0 @@
{% extends "crud/detail.html" %}
{% load i18n %}
{% load crispy_forms_tags %}
{% block actions %} {% endblock %}
{% block detail_content %}
<fieldset>
<legend>Matéria Legislativa</legend>
{% include "materia/resumo_detail_materia.html" %}
<fieldset class="form-group">
<legend>Editar Legislação Citada</legend>
<form method="POST">
{% csrf_token %}
<div class="row">
<div class="col-md-4">
<label>Tipo Norma*</label>
<select name="tipo" class="form-control">
{% for tipo in tipos_norma %}
<option value="{{tipo.id}}" {% if tipo == legislacao.norma.tipo %} selected {% endif %}>
{{tipo.sigla}} - {{tipo.descricao}}
</option>
{% endfor %}
</select>
</div>
<div class="col-md-4">
<label>Número*</label>
<input type="text" name="numero" value="{{legislacao.norma.numero}}" class="form-control"/>
</div>
<div class="col-md-4">
<label>Ano*</label>
<input type="text" name="ano" value="{{legislacao.norma.ano}}" class="form-control"/>
</div>
</div>
<div class="row">
<div class="col-md-3">
<label>Disposição</label>
<input type="text" name="disposicao" value="{{legislacao.disposicoes}}" class="form-control"/>
</div>
<div class="col-md-3">
<label>Parte</label>
<input type="text" name="parte" value="{{legislacao.parte}}" class="form-control"/>
</div>
<div class="col-md-3">
<label>Livro</label>
<input type="text" name="livro" value="{{legislacao.livro}}" class="form-control"/>
</div>
<div class="col-md-3">
<label>Título</label>
<input type="text" name="titulo" value="{{legislacao.titulo}}" class="form-control"/>
</div>
</div>
<div class="row">
<div class="col-md-3">
<label>Capítulo</label>
<input type="text" name="capitulo" value="{{legislacao.capitulo}}" class="form-control"/>
</div>
<div class="col-md-3">
<label>Seção</label>
<input type="text" name="secao" value="{{legislacao.secao}}" class="form-control"/>
</div>
<div class="col-md-3">
<label>Subseção</label>
<input type="text" name="subsecao" value="{{legislacao.subsecao}}" class="form-control"/>
</div>
<div class="col-md-3">
<label>Artigo</label>
<input type="text" name="artigo" value="{{legislacao.artigo}}" class="form-control"/>
</div>
</div>
<div class="row">
<div class="col-md-3">
<label>Inciso</label>
<input type="text" name="inciso" value="{{legislacao.inciso}}" class="form-control" />
</div>
<div class="col-md-3">
<label>Alínea</label>
<input type="text" name="alinea" value="{{legislacao.alinea}}" class="form-control"/>
</div>
<div class="col-md-3">
<label>Item</label>
<input type="text" name="item" value="{{legislacao.item}}" class="form-control"/>
</div>
</div>
<br />
<input type="submit" value="Salvar" id="salvar" name="salvar" class="btn btn-primary" />
<input type="submit" value="Excluir" id="excluir" name="excluir" class="btn btn-danger" />
</form>
</fieldset>
</fieldset>
{% endblock %}

4
templates/materia/subnav.yaml

@ -9,11 +9,11 @@
- title: Documento Acessório - title: Documento Acessório
url: documento_acessorio url: documento_acessorio
- title: Legislação Citada - title: Legislação Citada
url: legislacao_citada url: legislacaocitada_list
- title: Numeração - title: Numeração
url: numeracao_list url: numeracao_list
- title: Tramitação - title: Tramitação
url: tramitacao_materia url: tramitacao_list
- title: Relatoria - title: Relatoria
url: relatoria url: relatoria

33
templates/materia/tramitacao.html

@ -1,33 +0,0 @@
{% extends "crud/detail.html" %}
{% load i18n %}
{% load crispy_forms_tags %}
{% block actions %} {% endblock %}
{% block detail_content %}
<fieldset>
<legend>Matéria Legislativa</legend>
{% include "materia/resumo_detail_materia.html" %}
<fieldset>
<legend>Tramitações</legend>
<table class="table table-striped table-bordered">
<thead class="thead-default">
<tr>
<th>Data Ação</th>
<th>Origem</th>
<th>Destino</th>
<th>Status</th>
</tr>
</thead>
{% for t in tramitacoes %}
<tr>
<td><a href="{% url 'materia:tramitacao_edit' object.id t.id %}">{{t.data_tramitacao|date:'d/m/Y'}}</a></td>
<td>{{t.unidade_tramitacao_local}}</td>
<td>{{t.unidade_tramitacao_destino}}</td>
<td>{{t.status.descricao}}</td>
</tr>
{% endfor %}
</table>
</fieldset>
{% crispy form %}
</fieldset>
{% endblock %}

7
templates/materia/tramitacao_edit.html

@ -1,7 +0,0 @@
{% extends "crud/detail.html" %}
{% load i18n %}
{% load crispy_forms_tags %}
{% block actions %} {% endblock %}
{% block detail_content %}
{% crispy form %}
{% endblock %}
Loading…
Cancel
Save