Browse Source

WIP72

pull/386/head
Eduardo Calil 10 years ago
parent
commit
80c8a3a4a5
  1. 202
      materia/forms.py
  2. 18
      materia/layouts.yaml
  3. 20
      materia/migrations/0029_auto_20160428_1020.py
  4. 19
      materia/migrations/0030_auto_20160429_1349.py
  5. 8
      materia/models.py
  6. 33
      materia/tests/test_materia.py
  7. 32
      materia/urls.py
  8. 430
      materia/views.py
  9. 9
      scripts/atualizar_producao.sh
  10. 33
      templates/materia/autoria.html
  11. 7
      templates/materia/autoria_edit.html
  12. 29
      templates/materia/despacho_inicial.html
  13. 7
      templates/materia/despacho_inicial_edit.html
  14. 2
      templates/materia/documento_acessorio.html
  15. 2
      templates/materia/documento_acessorio_edit.html
  16. 2
      templates/materia/legislacao_citada.html
  17. 2
      templates/materia/legislacao_citada_edit.html
  18. 33
      templates/materia/materia_anexada.html
  19. 7
      templates/materia/materia_anexada_edit.html
  20. 1
      templates/materia/materialegislativa_detail.html
  21. 2
      templates/materia/materialegislativa_filter.html
  22. 35
      templates/materia/numeracao.html
  23. 7
      templates/materia/numeracao_edit.html
  24. 2
      templates/materia/relatoria.html
  25. 2
      templates/materia/relatoria_edit.html
  26. 8
      templates/materia/subnav.yaml
  27. 2
      templates/materia/tramitacao.html
  28. 2
      templates/materia/tramitacao_edit.html

202
materia/forms.py

@ -316,50 +316,33 @@ class NumeracaoForm(ModelForm):
'ano_materia',
'data_materia']
def __init__(self, excluir=False, *args, **kwargs):
more = []
if excluir:
more = [Submit('Excluir', 'Excluir')]
row1 = crispy_layout_mixin.to_row(
[('tipo_materia', 12)])
row2 = crispy_layout_mixin.to_row(
[('numero_materia', 4), ('ano_materia', 4), ('data_materia', 4)])
def clean(self):
if self.errors:
return self.errors
self.helper = FormHelper()
self.helper.layout = Layout(
Fieldset(
_('Incluir Numeração'),
row1, row2,
form_actions(more=more)
)
)
super(NumeracaoForm, self).__init__(*args, **kwargs)
try:
MateriaLegislativa.objects.get(
numero=self.cleaned_data['numero_materia'],
ano=self.cleaned_data['ano_materia'],
tipo=self.cleaned_data['tipo_materia'])
except ObjectDoesNotExist:
msg = _('A matéria a ser inclusa não existe no cadastro'
' de matérias legislativas.')
raise ValidationError(msg)
if Numeracao.objects.filter(
materia=self.instance.materia,
tipo_materia=self.cleaned_data['tipo_materia'],
ano_materia=self.cleaned_data['ano_materia'],
numero_materia=self.cleaned_data['numero_materia']
).exists():
msg = _('Essa numeração já foi cadastrada.')
raise ValidationError(msg)
class DespachoInicialForm(ModelForm):
return self.cleaned_data
class Meta:
model = DespachoInicial
fields = ['comissao']
def __init__(self, excluir=False, *args, **kwargs):
more = []
if excluir:
more = [Submit('Excluir', 'Excluir')]
self.helper = FormHelper()
self.helper.layout = Layout(
Fieldset(
_('Adicionar Despacho Inicial'),
'comissao',
form_actions(more=more)
)
)
super(DespachoInicialForm, self).__init__(*args, **kwargs)
class MateriaAnexadaForm(ModelForm):
class AnexadaForm(ModelForm):
tipo = forms.ModelChoiceField(
label='Tipo',
@ -372,90 +355,35 @@ class MateriaAnexadaForm(ModelForm):
ano = forms.CharField(label='Ano', required=True)
class Meta:
model = Anexada
fields = ['tipo', 'numero', 'ano',
'data_anexacao', 'data_desanexacao']
widgets = {
'data_anexacao': forms.DateInput(attrs={'class': 'dateinput'}),
'data_desanexacao': forms.DateInput(attrs={'class': 'dateinput'}),
}
def __init__(self, excluir=False, *args, **kwargs):
row1 = crispy_layout_mixin.to_row(
[('tipo', 4), ('numero', 4), ('ano', 4)])
row2 = crispy_layout_mixin.to_row(
[('data_anexacao', 6), ('data_desanexacao', 6)])
more = []
if excluir:
more = [Submit('Excluir', 'Excluir')]
def clean(self):
if self.errors:
return self.errors
self.helper = FormHelper()
self.helper.layout = Layout(
Fieldset(
_('Anexar Matéria'),
row1, row2,
form_actions(more=more)
)
)
super(MateriaAnexadaForm, self).__init__(
*args, **kwargs)
cleaned_data = self.cleaned_data
try:
materia_anexada = MateriaLegislativa.objects.get(
numero=cleaned_data['numero'],
ano=cleaned_data['ano'],
tipo=cleaned_data['tipo'])
except ObjectDoesNotExist:
msg = _('A matéria a ser anexada não existe no cadastro'
' de matérias legislativas.')
raise ValidationError(msg)
else:
cleaned_data['materia_anexada'] = materia_anexada
class AutoriaForm(ModelForm):
autor = forms.ModelChoiceField(
label=_('Autor'),
required=True,
queryset=Autor.objects.all().order_by('tipo', 'nome'),
)
primeiro_autor = forms.ChoiceField(
label=_('Primeiro Autor'),
required=True,
choices=[(True, _('Sim')), (False, _('Não'))],
)
return cleaned_data
materia_id = forms.CharField(widget=forms.HiddenInput(), required=False)
def save(self, commit=False):
anexada = super(AnexadaForm, self).save(commit)
anexada.materia_anexada = self.cleaned_data['materia_anexada']
anexada.save()
return anexada
class Meta:
model = Autoria
fields = ['autor',
'primeiro_autor',
'partido',
'materia_id']
def clean(self):
if self.data['materia_id'] and self.data['autor']:
try:
materia = MateriaLegislativa.objects.get(
id=self.data['materia_id'])
Autoria.objects.get(autor=self.data['autor'],
materia=materia)
raise forms.ValidationError(
_('Essa autoria já foi adicionada!'))
except ObjectDoesNotExist:
pass
def __init__(self, excluir=False, *args, **kwargs):
row1 = crispy_layout_mixin.to_row(
[('autor', 4), ('primeiro_autor', 4), ('partido', 4)])
more = []
if excluir:
more = [Submit('Excluir', 'Excluir')]
self.helper = FormHelper()
self.helper.layout = Layout(
Fieldset(
_('Adicionar Autoria'),
row1,
form_actions(more=more)
)
)
super(AutoriaForm, self).__init__(
*args, **kwargs)
model = Anexada
fields = ['tipo', 'numero', 'ano', 'data_anexacao', 'data_desanexacao']
class RangeWidgetOverride(forms.MultiWidget):
@ -620,3 +548,43 @@ def filtra_tramitacao_destino_and_status(status, destino):
status=status,
unidade_tramitacao_destino=destino).distinct().values_list(
'materia_id', flat=True)
class DespachoInicialForm(ModelForm):
class Meta:
model = DespachoInicial
fields = ['comissao']
def clean(self):
if self.errors:
return self.errors
if DespachoInicial.objects.filter(
materia=self.instance.materia,
comissao=self.cleaned_data['comissao'],
).exists():
msg = _('Esse Despacho já foi cadastrado.')
raise ValidationError(msg)
return self.cleaned_data
class AutoriaForm(ModelForm):
class Meta:
model = Autoria
fields = ['autor', 'partido', 'primeiro_autor']
def clean(self):
if self.errors:
return self.errors
if Autoria.objects.filter(
materia=self.instance.materia,
autor=self.cleaned_data['autor'],
).exists():
msg = _('Esse Autor já foi cadastrado.')
raise ValidationError(msg)
return self.cleaned_data

18
materia/layouts.yaml

@ -37,11 +37,14 @@ MateriaLegislativa:
- observacao
Anexada:
Matéria Legislativa:
- tip_id_basica_FIXME num_ident_basica_FIXME ano_ident_basica_FIXME
Matéria Anexada:
- tipo numero ano
- data_anexacao data_desanexacao
AnexadaDetail:
Matéria Anexada:
- tip_id_basica_FIXME num_ident_basica_FIXME ano_ident_basica_FIXME
- materia_principal
- materia_anexada
- data_anexacao data_desanexacao
TipoAutor:
@ -55,7 +58,7 @@ Autor:
Autoria:
Autoria:
- tip_autor_FIXME nom_autor_FIXME primeiro_autor
- autor partido primeiro_autor
DocumentoAcessorio:
Documento Acessório:
@ -67,8 +70,7 @@ DocumentoAcessorio:
Numeracao:
Numeração:
- tipo_materia numero_materia
- ano_materia data_materia
- tipo_materia numero_materia ano_materia data_materia
Orgao:
Órgão:
@ -109,3 +111,7 @@ Tramitacao:
- status turno urgente
- unidade_tramitacao_destino data_encaminhamento data_fim_prazo
- texto
DespachoInicial:
Despacho Inicial:
- comissao

20
materia/migrations/0029_auto_20160428_1020.py

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.5 on 2016-04-28 13:20
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('materia', '0028_auto_20160419_1000'),
]
operations = [
migrations.AlterField(
model_name='autoria',
name='primeiro_autor',
field=models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], verbose_name='Primeiro Autor'),
),
]

19
materia/migrations/0030_auto_20160429_1349.py

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9 on 2016-04-29 16:49
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('materia', '0029_auto_20160428_1020'),
]
operations = [
migrations.AlterModelOptions(
name='numeracao',
options={'ordering': ('materia', 'tipo_materia', 'numero_materia', 'ano_materia', 'data_materia'), 'verbose_name': 'Numeração', 'verbose_name_plural': 'Numerações'},
),
]

8
materia/models.py

@ -229,7 +229,8 @@ class Autoria(models.Model):
partido = models.ForeignKey(Partido, blank=True, null=True)
autor = models.ForeignKey(Autor)
materia = models.ForeignKey(MateriaLegislativa)
primeiro_autor = models.BooleanField(verbose_name=_('Primeiro Autor'))
primeiro_autor = models.BooleanField(verbose_name=_('Primeiro Autor'),
choices=YES_NO_CHOICES)
class Meta:
verbose_name = _('Autoria')
@ -316,6 +317,11 @@ class Numeracao(models.Model):
class Meta:
verbose_name = _('Numeração')
verbose_name_plural = _('Numerações')
ordering = ('materia',
'tipo_materia',
'numero_materia',
'ano_materia',
'data_materia',)
def __str__(self):
return _('%(numero)s %(tipo)s - %(data)s') % {

33
materia/tests/test_materia.py

@ -97,7 +97,7 @@ def test_materia_anexada_submit(client):
materia_anexada = MateriaLegislativa.objects.get(numero=32, ano=2004)
# Testa POST
response = client.post(reverse('materia:materia_anexada',
response = client.post(reverse('materia:anexada_create',
kwargs={'pk': materia_principal.pk}),
{'tipo': materia_anexada.tipo.pk,
'numero': materia_anexada.numero,
@ -124,7 +124,7 @@ def test_autoria_submit(client):
autor = mommy.make(Autor, tipo=tipo_autor, nome='Autor Teste')
# Testa POST
response = client.post(reverse('materia:autoria',
response = client.post(reverse('materia:autoria_create',
kwargs={'pk': materia_principal.pk}),
{'autor': autor.pk,
'primeiro_autor': True,
@ -154,7 +154,7 @@ def test_despacho_inicial_submit(client):
data_criacao='2016-03-18')
# Testa POST
response = client.post(reverse('materia:despacho_inicial',
response = client.post(reverse('materia:despachoinicial_create',
kwargs={'pk': materia_principal.pk}),
{'comissao': comissao.pk,
'salvar': 'salvar'},
@ -170,17 +170,14 @@ def test_despacho_inicial_submit(client):
@pytest.mark.django_db(transaction=False)
def test_numeracao_submit(client):
materia_principal = make_materia_principal()
materia = make_materia_principal()
# Cria dados para inserir na numeração
tipo = mommy.make(TipoMateriaLegislativa,
sigla='T2',
descricao='Teste_2')
# Testa POST
response = client.post(reverse('materia:numeracao',
response = client.post(reverse('materia:numeracao_create',
kwargs={'pk': materia_principal.pk}),
{'tipo_materia': tipo.pk,
'numero_materia': '341',
'ano_materia': 2015,
{'tipo_materia': materia.tipo.pk,
'numero_materia': materia.numero,
'ano_materia': materia.ano,
'data_materia': '2016-03-21',
'salvar': 'salvar'},
follow=True)
@ -189,8 +186,8 @@ def test_numeracao_submit(client):
# Verifica se a numeração foi criada
numeracao = Numeracao.objects.first()
assert numeracao.tipo_materia == tipo
assert numeracao.ano_materia == 2015
assert numeracao.tipo_materia == materia.tipo
assert numeracao.ano_materia == materia.ano
@pytest.mark.django_db(transaction=False)
@ -286,7 +283,7 @@ def test_tramitacao_submit(client):
@pytest.mark.django_db(transaction=False)
def test_form_errors_anexada(client):
materia_principal = make_materia_principal()
response = client.post(reverse('materia:materia_anexada',
response = client.post(reverse('materia:anexada_create',
kwargs={'pk': materia_principal.pk}),
{'salvar': 'salvar'},
follow=True)
@ -305,7 +302,7 @@ def test_form_errors_anexada(client):
def test_form_errors_autoria(client):
materia_principal = make_materia_principal()
response = client.post(reverse('materia:autoria',
response = client.post(reverse('materia:autoria_create',
kwargs={'pk': materia_principal.pk}),
{'materia_id': materia_principal.pk,
'partido': '',
@ -315,15 +312,13 @@ def test_form_errors_autoria(client):
assert (response.context_data['form'].errors['autor'] ==
['Este campo é obrigatório.'])
assert (response.context_data['form'].errors['primeiro_autor'] ==
['Este campo é obrigatório.'])
@pytest.mark.django_db(transaction=False)
def test_form_errors_despacho_inicial(client):
materia_principal = make_materia_principal()
response = client.post(reverse('materia:despacho_inicial',
response = client.post(reverse('materia:despachoinicial_create',
kwargs={'pk': materia_principal.pk}),
{'salvar': 'salvar'},
follow=True)
@ -368,7 +363,7 @@ def test_form_errors_legislacao_citada(client):
def test_form_errors_numeracao(client):
materia_principal = make_materia_principal()
response = client.post(reverse('materia:numeracao',
response = client.post(reverse('materia:numeracao_create',
kwargs={'pk': materia_principal.pk}),
{'salvar': 'salvar'},
follow=True)

32
materia/urls.py

@ -2,16 +2,14 @@ from django.conf.urls import include, url
from materia.views import (AcompanhamentoConfirmarView,
AcompanhamentoExcluirView,
AcompanhamentoMateriaView, AutorCrud,
AutoriaEditView, AutoriaView,
DespachoInicialEditView, DespachoInicialView,
AcompanhamentoMateriaView, AnexadaCrud, AutorCrud,
AutoriaCrud, DespachoInicialCrud,
DocumentoAcessorioEditView, DocumentoAcessorioView,
LegislacaoCitadaEditView, LegislacaoCitadaView,
MateriaAnexadaEditView, MateriaAnexadaView,
MateriaLegislativaCrud,
MateriaLegislativaPesquisaView, MateriaTaView,
NumeracaoEditView, NumeracaoView, OrgaoCrud,
OrigemCrud, ProposicaoEditView, ProposicaoListView,
NumeracaoCrud, OrgaoCrud, OrigemCrud,
ProposicaoEditView, ProposicaoListView,
ProposicaoTaView, ProposicaoView,
RegimeTramitacaoCrud, RelatoriaEditView,
RelatoriaView, StatusTramitacaoCrud, TipoAutorCrud,
@ -25,7 +23,11 @@ from .apps import AppConfig
app_name = AppConfig.name
urlpatterns = [
url(r'^materia/', include(MateriaLegislativaCrud.get_urls())),
url(r'^materia/', include(MateriaLegislativaCrud.get_urls() +
AnexadaCrud.get_urls() +
AutoriaCrud.get_urls() +
DespachoInicialCrud.get_urls() +
NumeracaoCrud.get_urls())),
url(r'^materia/(?P<pk>[0-9]+)/ta$',
@ -52,22 +54,10 @@ urlpatterns = [
url(r'^sistema/materia/status-tramitacao/',
include(StatusTramitacaoCrud.get_urls())),
url(r'^sistema/materia/orgao/', include(OrgaoCrud.get_urls())),
url(r'^materia/(?P<pk>\d+)/materia-anexada$',
MateriaAnexadaView.as_view(), name='materia_anexada'),
url(r'^materia/(?P<pk>\d+)/materia-anexada/(?P<id>\d+)/edit',
MateriaAnexadaEditView.as_view(), name='materia_anexada_edit'),
url(r'^materia/(?P<pk>\d+)/despacho-inicial$',
DespachoInicialView.as_view(), name='despacho_inicial'),
url(r'^materia/(?P<pk>\d+)/despacho-inicial/(?P<id>\d+)/edit',
DespachoInicialEditView.as_view(), name='despacho_inicial_edit'),
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+)/numeracao$',
NumeracaoView.as_view(), name='numeracao'),
url(r'^materia/(?P<pk>\d+)/numeracao/(?P<id>\d+)/edit',
NumeracaoEditView.as_view(), name='numeracao_edit'),
url(r'^materia/(?P<pk>\d+)/documento-acessorio$',
DocumentoAcessorioView.as_view(), name='documento_acessorio'),
url(r'^materia/(?P<pk>\d+)/documento-acessorio/(?P<id>\d+)/edit',
@ -78,10 +68,6 @@ urlpatterns = [
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+)/autoria$',
AutoriaView.as_view(), name='autoria'),
url(r'^materia/(?P<pk>\d+)/autoria/(?P<id>\d+)/edit$',
AutoriaEditView.as_view(), name='autoria_edit'),
url(r'^materia/(?P<pk>\d+)/relatoria/(?P<id>\d+)/edit$',
RelatoriaEditView.as_view(), name='relatoria_edit'),
url(r'^materia/proposicao$',

430
materia/views.py

@ -15,19 +15,20 @@ from django.views.generic import CreateView, FormView, ListView, TemplateView
from django_filters.views import FilterView
import crud.base
import crud.masterdetail
from base.models import CasaLegislativa
from comissoes.models import Comissao, Composicao
from compilacao.views import IntegracaoTaView
from crud.base import Crud, make_pagination
from crud.masterdetail import MasterDetailCrud
from norma.models import LegislacaoCitada, NormaJuridica, TipoNormaJuridica
from parlamentares.models import Partido
from sapl.utils import get_base_url
from .forms import (AcompanhamentoMateriaForm, AutoriaForm,
from .forms import (AcompanhamentoMateriaForm, AnexadaForm, AutoriaForm,
DespachoInicialForm, DocumentoAcessorioForm,
LegislacaoCitadaForm, MateriaAnexadaForm,
MateriaLegislativaFilterSet, NumeracaoForm, ProposicaoForm,
RelatoriaForm, TramitacaoForm, filtra_tramitacao_destino,
LegislacaoCitadaForm, MateriaLegislativaFilterSet,
NumeracaoForm, ProposicaoForm, RelatoriaForm,
TramitacaoForm, filtra_tramitacao_destino,
filtra_tramitacao_destino_and_status,
filtra_tramitacao_status)
from .models import (AcompanhamentoMateria, Anexada, Autor, Autoria,
@ -46,9 +47,7 @@ TipoFimRelatoriaCrud = Crud.build(TipoFimRelatoria, 'fim_relatoria')
AnexadaCrud = Crud.build(Anexada, '')
TipoAutorCrud = Crud.build(TipoAutor, 'tipo_autor')
AutorCrud = Crud.build(Autor, 'autor')
AutoriaCrud = Crud.build(Autoria, '')
DocumentoAcessorioCrud = Crud.build(DocumentoAcessorio, '')
NumeracaoCrud = Crud.build(Numeracao, '')
OrgaoCrud = Crud.build(Orgao, 'orgao')
RelatoriaCrud = Crud.build(Relatoria, '')
TipoProposicaoCrud = Crud.build(TipoProposicao, 'tipo_proposicao')
@ -58,242 +57,76 @@ UnidadeTramitacaoCrud = Crud.build(UnidadeTramitacao, 'unidade_tramitacao')
TramitacaoCrud = Crud.build(Tramitacao, '')
class MateriaLegislativaCrud(Crud):
model = MateriaLegislativa
help_path = 'materia_legislativa'
class BaseMixin(crud.base.CrudBaseMixin):
list_field_names = ['tipo', 'numero', 'ano', 'data_apresentacao']
class MateriaAnexadaView(FormView):
template_name = "materia/materia_anexada.html"
form_class = MateriaAnexadaForm
form_valid_message = _('Matéria anexada com sucesso!')
def get(self, request, *args, **kwargs):
form = MateriaAnexadaForm()
materia = MateriaLegislativa.objects.get(
id=kwargs['pk'])
anexadas = Anexada.objects.filter(
materia_principal_id=kwargs['pk'])
return self.render_to_response({'object': materia,
'anexadas': anexadas,
'form': form})
def form_invalid(self,
form,
request,
mat_principal,
anexadas,
msg='Erro ineseperado.'):
messages.add_message(request, messages.ERROR, msg)
return self.render_to_response(
{'form': form,
'object': mat_principal,
'anexadas': anexadas})
def post(self, request, *args, **kwargs):
form = self.get_form()
anexadas = Anexada.objects.filter(
materia_principal_id=kwargs['pk'])
mat_principal = MateriaLegislativa.objects.get(
id=kwargs['pk'])
if form.is_valid():
tipo = form.cleaned_data['tipo']
numero = form.cleaned_data['numero']
ano = form.cleaned_data['ano']
data_anexacao = form.cleaned_data['data_anexacao']
data_desanexacao = form.cleaned_data['data_desanexacao']
try:
mat_anexada = MateriaLegislativa.objects.get(
numero=numero, ano=ano, tipo=tipo)
if mat_principal.tipo == mat_anexada.tipo:
msg = _('A matéria a ser anexada não pode ser do mesmo'
' tipo da matéria principal.')
self.form_invalid(
form, request, mat_principal, anexadas, msg)
anexada = Anexada()
anexada.materia_principal = mat_principal
anexada.materia_anexada = mat_anexada
anexada.data_anexacao = data_anexacao
if data_desanexacao:
anexada.data_desanexacao = data_desanexacao
anexada.save()
except ObjectDoesNotExist:
msg = _('A matéria a ser anexada não existe no cadastro'
' de matérias legislativas.')
self.form_invalid(form, request, mat_principal, anexadas, msg)
return self.form_valid(form)
else:
return self.render_to_response(
{'form': form,
'object': mat_principal,
'anexadas': anexadas})
def get_success_url(self):
pk = self.kwargs['pk']
return reverse('materia:materia_anexada', kwargs={'pk': pk})
class MateriaAnexadaEditView(FormView):
template_name = "materia/materia_anexada_edit.html"
form_class = MateriaAnexadaForm
def form_invalid(self,
form,
request,
mat_principal,
msg='Erro ineseperado.'):
messages.add_message(request, messages.ERROR, msg)
return self.render_to_response(
{'form': form, 'object': mat_principal})
def get(self, request, *args, **kwargs):
materia = MateriaLegislativa.objects.get(id=kwargs['pk'])
anexada = Anexada.objects.get(id=kwargs['id'])
data = {}
data['tipo'] = anexada.materia_anexada.tipo
data['numero'] = anexada.materia_anexada.numero
data['ano'] = anexada.materia_anexada.ano
data['data_anexacao'] = anexada.data_anexacao
data['data_desanexacao'] = anexada.data_desanexacao
form = MateriaAnexadaForm(initial=data, excluir=True)
return self.render_to_response(
{'object': materia,
'form': form})
def post(self, request, *args, **kwargs):
form = self.get_form()
anexada = Anexada.objects.get(id=kwargs['id'])
mat_principal = MateriaLegislativa.objects.get(
id=kwargs['pk'])
if form.is_valid():
if 'Excluir' in request.POST:
anexada.delete()
return self.form_valid(form)
elif 'salvar' in request.POST:
class AutoriaCrud(MasterDetailCrud):
model = Autoria
parent_field = 'materia'
help_path = ''
tipo = form.cleaned_data['tipo']
numero = form.cleaned_data['numero']
ano = form.cleaned_data['ano']
data_anexacao = form.cleaned_data['data_anexacao']
class CreateView(MasterDetailCrud.CreateView):
form_class = AutoriaForm
if 'data_desanexacao' in request.POST:
data_desanexacao = form.cleaned_data['data_desanexacao']
class UpdateView(MasterDetailCrud.UpdateView):
form_class = AutoriaForm
try:
mat_anexada = MateriaLegislativa.objects.get(
numero=numero, ano=ano, tipo=tipo)
if mat_principal.tipo == mat_anexada.tipo:
msg = _('A matéria a ser anexada não pode ser do mesmo \
tipo da matéria principal.')
self.form_invalid(form, request, mat_principal, msg)
class DespachoInicialCrud(MasterDetailCrud):
model = DespachoInicial
parent_field = 'materia'
help_path = ''
anexada.materia_principal = mat_principal
anexada.materia_anexada = mat_anexada
anexada.data_anexacao = data_anexacao
class CreateView(MasterDetailCrud.CreateView):
form_class = DespachoInicialForm
if data_desanexacao:
anexada.data_desanexacao = data_desanexacao
class UpdateView(MasterDetailCrud.UpdateView):
form_class = DespachoInicialForm
anexada.save()
return self.form_valid(form)
except ObjectDoesNotExist:
msg = _('A matéria a ser anexada não existe no cadastro \
de matérias legislativas.')
self.form_invalid(form, request, mat_principal, msg)
else:
return self.render_to_response(
{'form': form,
'materia': mat_principal})
class NumeracaoCrud(MasterDetailCrud):
model = Numeracao
parent_field = 'materia'
help_path = ''
def get_success_url(self):
pk = self.kwargs['pk']
return reverse('materia_anexada', kwargs={'pk': pk})
class CreateView(MasterDetailCrud.CreateView):
form_class = NumeracaoForm
class UpdateView(MasterDetailCrud.UpdateView):
form_class = NumeracaoForm
class DespachoInicialView(CreateView):
template_name = "materia/despacho_inicial.html"
form_class = DespachoInicialForm
def get(self, request, *args, **kwargs):
materia = MateriaLegislativa.objects.get(id=kwargs['pk'])
despacho = DespachoInicial.objects.filter(materia_id=materia.id)
form = DespachoInicialForm()
class AnexadaCrud(MasterDetailCrud):
model = Anexada
parent_field = 'materia_principal'
help_path = ''
return self.render_to_response(
{'object': materia,
'form': form,
'despachos': despacho})
class BaseMixin(MasterDetailCrud.BaseMixin):
list_field_names = ['materia_anexada', 'data_anexacao']
def post(self, request, *args, **kwargs):
form = self.get_form()
materia = MateriaLegislativa.objects.get(id=kwargs['pk'])
despacho = DespachoInicial.objects.filter(materia_id=materia.id)
class CreateView(MasterDetailCrud.CreateView):
form_class = AnexadaForm
if form.is_valid():
despacho = DespachoInicial()
despacho.comissao = form.cleaned_data['comissao']
despacho.materia = materia
despacho.save()
return redirect(self.get_success_url())
else:
return self.render_to_response({'form': form,
'object': materia,
'despachos': despacho})
class UpdateView(MasterDetailCrud.UpdateView):
form_class = AnexadaForm
def get_success_url(self):
pk = self.kwargs['pk']
return reverse('materia:despacho_inicial', kwargs={'pk': pk})
def get_initial(self, **kwargs):
self.initial['tipo'] = self.object.materia_anexada.tipo.id
self.initial['numero'] = self.object.materia_anexada.numero
self.initial['ano'] = self.object.materia_anexada.ano
return self.initial
class DespachoInicialEditView(CreateView):
template_name = "materia/despacho_inicial_edit.html"
form_class = DespachoInicialForm
class DetailView(MasterDetailCrud.DetailView):
def get(self, request, *args, **kwargs):
materia = MateriaLegislativa.objects.get(id=kwargs['pk'])
despacho = DespachoInicial.objects.get(id=kwargs['id'])
form = DespachoInicialForm(instance=despacho, excluir=True)
@property
def layout_key(self):
return 'AnexadaDetail'
return self.render_to_response({'object': materia, 'form': form})
def post(self, request, *args, **kwargs):
form = self.get_form()
materia = MateriaLegislativa.objects.get(id=kwargs['pk'])
despacho = DespachoInicial.objects.get(id=kwargs['id'])
if form.is_valid():
if 'Excluir' in request.POST:
despacho.delete()
elif 'salvar' in request.POST:
despacho.comissao = form.cleaned_data['comissao']
despacho.materia = materia
despacho.save()
return redirect(self.get_success_url())
else:
return self.render_to_response(
{'object': materia,
'form': form,
'despacho': despacho,
'comissoes': Comissao.objects.all()})
class MateriaLegislativaCrud(Crud):
model = MateriaLegislativa
help_path = 'materia_legislativa'
def get_success_url(self):
pk = self.kwargs['pk']
return reverse('materia:despacho_inicial', kwargs={'pk': pk})
class BaseMixin(crud.base.CrudBaseMixin):
list_field_names = ['tipo', 'numero', 'ano', 'data_apresentacao']
class LegislacaoCitadaView(FormView):
@ -422,80 +255,6 @@ class LegislacaoCitadaEditView(FormView):
'object': materia})
class NumeracaoView(CreateView):
template_name = "materia/numeracao.html"
form_class = NumeracaoForm
def get(self, request, *args, **kwargs):
materia = MateriaLegislativa.objects.get(id=kwargs['pk'])
numeracao = Numeracao.objects.filter(materia_id=kwargs['pk'])
return self.render_to_response(
{'object': materia,
'form': self.get_form(),
'numeracao': numeracao})
def post(self, request, *args, **kwargs):
form = self.get_form()
materia = MateriaLegislativa.objects.get(id=kwargs['pk'])
numeracao_list = Numeracao.objects.filter(
materia_id=kwargs['pk'])
if form.is_valid():
numeracao = form.save(commit=False)
numeracao.materia = materia
numeracao.save()
return self.form_valid(form)
else:
return self.render_to_response({'form': form,
'object': materia,
'numeracao': numeracao_list})
def get_success_url(self):
pk = self.kwargs['pk']
return reverse('materia:numeracao', kwargs={'pk': pk})
class NumeracaoEditView(CreateView):
template_name = "materia/numeracao_edit.html"
form_class = NumeracaoForm
def get(self, request, *args, **kwargs):
materia = MateriaLegislativa.objects.get(id=kwargs['pk'])
numeracao = Numeracao.objects.get(id=kwargs['id'])
form = NumeracaoForm(instance=numeracao, excluir=True)
return self.render_to_response(
{'object': materia,
'form': form,
'numeracao': numeracao})
def post(self, request, *args, **kwargs):
form = self.get_form()
materia = MateriaLegislativa.objects.get(id=kwargs['pk'])
numeracao = Numeracao.objects.get(id=kwargs['id'])
if form.is_valid():
if 'excluir' in request.POST:
numeracao.delete()
elif 'salvar' in request.POST:
numeracao.materia = materia
numeracao.tipo_materia = form.cleaned_data['tipo_materia']
numeracao.numero_materia = form.cleaned_data['numero_materia']
numeracao.ano_materia = form.cleaned_data['ano_materia']
numeracao.data_materia = form.cleaned_data['data_materia']
numeracao.save()
return redirect(self.get_success_url())
else:
return self.render_to_response({'form': form,
'object': materia,
'numeracao': numeracao})
def get_success_url(self):
pk = self.kwargs['pk']
return reverse('materia:numeracao', kwargs={'pk': pk})
class DocumentoAcessorioView(CreateView):
template_name = "materia/documento_acessorio.html"
form_class = DocumentoAcessorioForm
@ -1087,87 +846,6 @@ class TramitacaoEditView(CreateView):
return reverse('materia:tramitacao_materia', kwargs={'pk': pk})
class AutoriaView(CreateView):
template_name = "materia/autoria.html"
form_class = AutoriaForm
form_valid_message = _('Autoria cadastrada com sucesso!')
model = Autoria
def get_initial(self):
initial = super(AutoriaView, self).get_initial()
initial['materia_id'] = self.kwargs['pk']
return initial
def get_context_data(self, **kwargs):
context = super(AutoriaView, self).get_context_data(**kwargs)
materia = MateriaLegislativa.objects.get(id=self.kwargs['pk'])
autorias = Autoria.objects.filter(materia=materia)
context.update({'object': materia,
'autorias': autorias})
return context
def form_valid(self, form):
materia = MateriaLegislativa.objects.get(id=form.data['materia_id'])
if 'salvar' in self.request.POST:
autoria = Autoria()
autoria.autor = Autor.objects.get(id=form.data['autor'])
autoria.materia = materia
autoria.primeiro_autor = form.data['primeiro_autor']
if form.data['partido']:
filiacao_autor = Partido.objects.get(id=form.data['partido'])
autoria.partido = filiacao_autor
autoria.save()
return redirect(self.get_success_url())
def get_success_url(self):
pk = self.kwargs['pk']
return reverse('materia:autoria', kwargs={'pk': pk})
class AutoriaEditView(CreateView):
template_name = "materia/autoria_edit.html"
form_class = AutoriaForm
def get(self, request, *args, **kwargs):
materia = MateriaLegislativa.objects.get(id=kwargs['pk'])
autoria = Autoria.objects.get(id=self.kwargs['id'])
form = AutoriaForm(instance=autoria, excluir=True)
return self.render_to_response(
{'object': materia,
'form': form})
def post(self, request, *args, **kwargs):
materia = MateriaLegislativa.objects.get(id=kwargs['pk'])
form = self.get_form()
if form.is_valid():
autoria = Autoria.objects.get(id=self.kwargs['id'])
if 'salvar' in request.POST:
autoria.autor = Autor.objects.get(id=form.data['autor'])
autoria.primeiro_autor = form.data['primeiro_autor']
if 'partido' in form.data:
autoria.partido = Partido.objects.get(
id=form.data['partido'])
autoria.materia = materia
autoria.save()
elif 'Excluir' in request.POST:
autoria.delete()
return redirect(self.get_success_url())
else:
return self.render_to_response(
{'object': materia,
'form': form})
def get_success_url(self):
pk = self.kwargs['pk']
return reverse('materia:autoria', kwargs={'pk': pk})
class ProposicaoListView(ListView):
template_name = "materia/proposicao/proposicao_list.html"
paginate_by = 10

9
scripts/atualizar_producao.sh

@ -0,0 +1,9 @@
#!/bin/bash
git pull --rebase
workon sapl
pip install -r requirements/dev-requirements.txt
./manage.py migrate
./manage.py bower install
./manage.py collectstatic --noinput
deactivate
sudo supervisorctl restart sapl

33
templates/materia/autoria.html

@ -1,33 +0,0 @@
{% extends "materia/materialegislativa_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>Autorias</legend>
<table class="table table-striped table-bordered">
<thead class="thead-default">
<tr>
<th>Nome Autor</th>
<th>Tipo Autor</th>
<th>Primeiro Autor</th>
<th>Partido Autor</th>
</tr>
</thead>
{% for a in autorias %}
<tr>
<td><a href="{% url 'materia:autoria_edit' object.id a.id %}">{{a.autor}}</a></td>
<td>{{a.autor.tipo.descricao}}</td>
<td>{{a.primeiro_autor|yesno:"Sim,Não"}}</td>
<td>{{a.partido.sigla|default_if_none:"Não Informado"}}</td>
</tr>
{% endfor %}
</table>
</fieldset>
{% crispy form %}
</fieldset>
{% endblock %}

7
templates/materia/autoria_edit.html

@ -1,7 +0,0 @@
{% extends "materia/materialegislativa_detail.html" %}
{% load i18n %}
{% load crispy_forms_tags %}
{% block actions %} {% endblock %}
{% block detail_content %}
{% crispy form %}
{% endblock %}

29
templates/materia/despacho_inicial.html

@ -1,29 +0,0 @@
{% extends "materia/materialegislativa_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>Despachos</legend>
<table class="table table-striped table-bordered">
<thead class="thead-default">
<tr>
<th>Comissão</th>
<th>Sigla</th>
</tr>
</thead>
{% for d in despachos %}
<tr>
<td><a href="{% url 'materia:despacho_inicial_edit' object.id d.id %}">{{d.comissao.nome}}</a></td>
<td>{{d.comissao.sigla}}</td>
</tr>
{% endfor %}
</table>
</fieldset>
{% crispy form %}
</fieldset>
{% endblock %}

7
templates/materia/despacho_inicial_edit.html

@ -1,7 +0,0 @@
{% extends "materia/materialegislativa_detail.html" %}
{% load i18n %}
{% load crispy_forms_tags %}
{% block actions %} {% endblock %}
{% block detail_content %}
{% crispy form %}
{% endblock %}

2
templates/materia/documento_acessorio.html

@ -1,4 +1,4 @@
{% extends "materia/materialegislativa_detail.html" %}
{% extends "crud/detail.html" %}
{% load i18n %}
{% load crispy_forms_tags %}
{% block actions %} {% endblock %}

2
templates/materia/documento_acessorio_edit.html

@ -1,4 +1,4 @@
{% extends "materia/materialegislativa_detail.html" %}
{% extends "crud/detail.html" %}
{% load i18n %}
{% load crispy_forms_tags %}
{% block actions %} {% endblock %}

2
templates/materia/legislacao_citada.html

@ -1,4 +1,4 @@
{% extends "materia/materialegislativa_detail.html" %}
{% extends "crud/detail.html" %}
{% load i18n %}
{% load crispy_forms_tags %}
{% block actions %} {% endblock %}

2
templates/materia/legislacao_citada_edit.html

@ -1,4 +1,4 @@
{% extends "materia/materialegislativa_detail.html" %}
{% extends "crud/detail.html" %}
{% load i18n %}
{% load crispy_forms_tags %}
{% block actions %} {% endblock %}

33
templates/materia/materia_anexada.html

@ -1,33 +0,0 @@
{% extends "materia/materialegislativa_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>Matérias Anexadas</legend>
<table class="table table-striped table-bordered">
<thead class="thead-default">
<tr>
<th>Matéria Anexada</th>
<th>Data Anexação</th>
<th>Data Desanexação</th>
</tr>
</thead>
{% for a in anexadas %}
<tr>
<td><a href="{% url 'materia:materia_anexada_edit' object.id a.id %}">{{a.materia_anexada.tipo.sigla}} {{a.materia_anexada.numero}}/{{a.materia_anexada.ano}}</a></td>
<td>{{a.data_anexacao|date:"d/m/Y"}}</td>
<td>{{a.data_desanexacao|date:"d/m/Y"}}</td>
</tr>
{% endfor %}
</table>
</fieldset>
<br /><br />
{% crispy form %}
</fieldset>
{% endblock %}

7
templates/materia/materia_anexada_edit.html

@ -1,7 +0,0 @@
{% extends "materia/materialegislativa_detail.html" %}
{% load i18n %}
{% load crispy_forms_tags %}
{% block actions %} {% endblock %}
{% block detail_content %}
{% crispy form %}
{% endblock %}

1
templates/materia/materialegislativa_detail.html

@ -1 +0,0 @@
{% extends "crud/detail.html" %}

2
templates/materia/materialegislativa_filter.html

@ -1,4 +1,4 @@
{% extends "materia/materialegislativa_detail.html" %}
{% extends "crud/detail.html" %}
{% load i18n %}
{% load crispy_forms_tags %}
{% block actions %}{% endblock %}

35
templates/materia/numeracao.html

@ -1,35 +0,0 @@
{% extends "materia/materialegislativa_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>Numeração</legend>
<table class="table table-striped table-bordered">
<thead class="thead-default">
<tr>
<th>Tipo Matéria</th>
<th>Descrição</th>
<th>Número</th>
<th>Ano</th>
<th>Data</th>
</tr>
</thead>
{% for n in numeracao %}
<tr>
<td><a href="{% url 'materia:numeracao_edit' object.id n.id %}">{{n.tipo_materia.sigla}}</a></td>
<td>{{n.tipo_materia.descricao}}</td>
<td>{{n.numero_materia}}</td>
<td>{{n.ano_materia}}</td>
<td>{{n.data_materia|date:'d/m/Y'}}</td>
</tr>
{% endfor %}
</table>
</fieldset>
{% crispy form %}
</fieldset>
{% endblock %}

7
templates/materia/numeracao_edit.html

@ -1,7 +0,0 @@
{% extends "materia/materialegislativa_detail.html" %}
{% load i18n %}
{% load crispy_forms_tags %}
{% block actions %} {% endblock %}
{% block detail_content %}
{% crispy form %}
{% endblock %}

2
templates/materia/relatoria.html

@ -1,4 +1,4 @@
{% extends "materia/materialegislativa_detail.html" %}
{% extends "crud/detail.html" %}
{% load i18n %}
{% load crispy_forms_tags %}
{% block actions %} {% endblock %}

2
templates/materia/relatoria_edit.html

@ -1,4 +1,4 @@
{% extends "materia/materialegislativa_detail.html" %}
{% extends "crud/detail.html" %}
{% load i18n %}
{% load crispy_forms_tags %}
{% block actions %} {% endblock %}

8
templates/materia/subnav.yaml

@ -1,17 +1,17 @@
- title: Início
url: materialegislativa_detail
- title: Anexada
url: materia_anexada
url: anexada_list
- title: Autoria
url: autoria
url: autoria_list
- title: Despacho Inicial
url: despacho_inicial
url: despachoinicial_list
- title: Documento Acessório
url: documento_acessorio
- title: Legislação Citada
url: legislacao_citada
- title: Numeração
url: numeracao
url: numeracao_list
- title: Tramitação
url: tramitacao_materia
- title: Relatoria

2
templates/materia/tramitacao.html

@ -1,4 +1,4 @@
{% extends "materia/materialegislativa_detail.html" %}
{% extends "crud/detail.html" %}
{% load i18n %}
{% load crispy_forms_tags %}
{% block actions %} {% endblock %}

2
templates/materia/tramitacao_edit.html

@ -1,4 +1,4 @@
{% extends "materia/materialegislativa_detail.html" %}
{% extends "crud/detail.html" %}
{% load i18n %}
{% load crispy_forms_tags %}
{% block actions %} {% endblock %}

Loading…
Cancel
Save