Browse Source

Merge pull request #350 from interlegis/349-Crud-Despacho-Inicial

Fix #349 crud despacho inicial
pull/382/head
Edward 9 years ago
parent
commit
388f1e5af6
  1. 152
      materia/forms.py
  2. 15
      materia/layouts.yaml
  3. 20
      materia/migrations/0029_auto_20160428_1020.py
  4. 3
      materia/models.py
  5. 14
      materia/tests/test_materia.py
  6. 23
      materia/urls.py
  7. 345
      materia/views.py
  8. 19
      parlamentares/migrations/0017_remove_parlamentar_unidade_deliberativa.py
  9. 33
      templates/materia/autoria.html
  10. 7
      templates/materia/autoria_edit.html
  11. 29
      templates/materia/despacho_inicial.html
  12. 7
      templates/materia/despacho_inicial_edit.html
  13. 2
      templates/materia/documento_acessorio.html
  14. 2
      templates/materia/documento_acessorio_edit.html
  15. 2
      templates/materia/legislacao_citada.html
  16. 2
      templates/materia/legislacao_citada_edit.html
  17. 33
      templates/materia/materia_anexada.html
  18. 7
      templates/materia/materia_anexada_edit.html
  19. 1
      templates/materia/materialegislativa_detail.html
  20. 2
      templates/materia/materialegislativa_filter.html
  21. 2
      templates/materia/numeracao.html
  22. 2
      templates/materia/numeracao_edit.html
  23. 2
      templates/materia/relatoria.html
  24. 2
      templates/materia/relatoria_edit.html
  25. 6
      templates/materia/subnav.yaml
  26. 2
      templates/materia/tramitacao.html
  27. 2
      templates/materia/tramitacao_edit.html

152
materia/forms.py

@ -15,10 +15,9 @@ from norma.models import LegislacaoCitada, TipoNormaJuridica
from sapl.settings import MAX_DOC_UPLOAD_SIZE
from sapl.utils import RANGE_ANOS
from .models import (AcompanhamentoMateria, Anexada, Autor, Autoria,
DespachoInicial, DocumentoAcessorio, MateriaLegislativa,
Numeracao, Proposicao, Relatoria, TipoMateriaLegislativa,
Tramitacao)
from .models import (AcompanhamentoMateria, Anexada, Autor, DespachoInicial,
DocumentoAcessorio, MateriaLegislativa, Numeracao,
Proposicao, Relatoria, TipoMateriaLegislativa, Tramitacao)
ANO_CHOICES = [('', '---------')] + RANGE_ANOS
@ -337,29 +336,7 @@ class NumeracaoForm(ModelForm):
super(NumeracaoForm, self).__init__(*args, **kwargs)
class DespachoInicialForm(ModelForm):
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 +349,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')]
self.helper = FormHelper()
self.helper.layout = Layout(
Fieldset(
_('Anexar Matéria'),
row1, row2,
form_actions(more=more)
)
)
super(MateriaAnexadaForm, self).__init__(
*args, **kwargs)
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'))],
)
materia_id = forms.CharField(widget=forms.HiddenInput(), required=False)
def clean(self):
if self.errors:
return self.errors
class Meta:
model = Autoria
fields = ['autor',
'primeiro_autor',
'partido',
'materia_id']
cleaned_data = self.cleaned_data
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!'))
materia_anexada = MateriaLegislativa.objects.get(
numero=cleaned_data['numero'],
ano=cleaned_data['ano'],
tipo=cleaned_data['tipo'])
except ObjectDoesNotExist:
pass
def __init__(self, excluir=False, *args, **kwargs):
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
row1 = crispy_layout_mixin.to_row(
[('autor', 4), ('primeiro_autor', 4), ('partido', 4)])
return cleaned_data
more = []
if excluir:
more = [Submit('Excluir', 'Excluir')]
def save(self, commit=False):
anexada = super(AnexadaForm, self).save(commit)
anexada.materia_anexada = self.cleaned_data['materia_anexada']
anexada.save()
return anexada
self.helper = FormHelper()
self.helper.layout = Layout(
Fieldset(
_('Adicionar Autoria'),
row1,
form_actions(more=more)
)
)
super(AutoriaForm, self).__init__(
*args, **kwargs)
class Meta:
model = Anexada
fields = ['tipo', 'numero', 'ano', 'data_anexacao', 'data_desanexacao']
class RangeWidgetOverride(forms.MultiWidget):
@ -620,3 +542,25 @@ 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
cleaned_data = self.cleaned_data
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

15
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:
@ -109,3 +112,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'),
),
]

3
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')

14
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'},
@ -286,7 +286,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 +305,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 +315,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)

23
materia/urls.py

@ -2,12 +2,10 @@ 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,
@ -25,7 +23,10 @@ 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())),
url(r'^materia/(?P<pk>[0-9]+)/ta$',
@ -52,14 +53,6 @@ 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',
@ -78,10 +71,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$',

345
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,
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,7 +47,6 @@ 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')
@ -57,243 +57,55 @@ StatusTramitacaoCrud = Crud.build(StatusTramitacao, 'status_tramitacao')
UnidadeTramitacaoCrud = Crud.build(UnidadeTramitacao, 'unidade_tramitacao')
TramitacaoCrud = Crud.build(Tramitacao, '')
AutoriaCrud = MasterDetailCrud.build(Autoria, 'materia', '')
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:
tipo = form.cleaned_data['tipo']
numero = form.cleaned_data['numero']
ano = form.cleaned_data['ano']
data_anexacao = form.cleaned_data['data_anexacao']
if 'data_desanexacao' in request.POST:
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, msg)
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()
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})
def get_success_url(self):
pk = self.kwargs['pk']
return reverse('materia_anexada', kwargs={'pk': pk})
class DespachoInicialCrud(MasterDetailCrud):
model = DespachoInicial
parent_field = 'materia'
help_path = ''
class CreateView(MasterDetailCrud.CreateView):
form_class = DespachoInicialForm
class DespachoInicialView(CreateView):
template_name = "materia/despacho_inicial.html"
class UpdateView(MasterDetailCrud.UpdateView):
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()
return self.render_to_response(
{'object': materia,
'form': form,
'despachos': despacho})
class AnexadaCrud(MasterDetailCrud):
model = Anexada
parent_field = 'materia_principal'
help_path = ''
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 BaseMixin(MasterDetailCrud.BaseMixin):
list_field_names = ['materia_anexada', 'data_anexacao']
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 CreateView(MasterDetailCrud.CreateView):
form_class = AnexadaForm
def get_success_url(self):
pk = self.kwargs['pk']
return reverse('materia:despacho_inicial', kwargs={'pk': pk})
class UpdateView(MasterDetailCrud.UpdateView):
form_class = AnexadaForm
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
class DespachoInicialEditView(CreateView):
template_name = "materia/despacho_inicial_edit.html"
form_class = DespachoInicialForm
return self.initial
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)
class DetailView(MasterDetailCrud.DetailView):
return self.render_to_response({'object': materia, 'form': form})
@property
def layout_key(self):
return 'AnexadaDetail'
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):
@ -1087,87 +899,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

19
parlamentares/migrations/0017_remove_parlamentar_unidade_deliberativa.py

@ -0,0 +1,19 @@
# -*- 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
class Migration(migrations.Migration):
dependencies = [
('parlamentares', '0016_auto_20160404_1409'),
]
operations = [
migrations.RemoveField(
model_name='parlamentar',
name='unidade_deliberativa',
),
]

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 %}

2
templates/materia/numeracao.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/numeracao_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/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 %}

6
templates/materia/subnav.yaml

@ -1,11 +1,11 @@
- 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

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