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. 154
      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. 347
      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

154
materia/forms.py

@ -15,10 +15,9 @@ from norma.models import LegislacaoCitada, 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
from .models import (AcompanhamentoMateria, Anexada, Autor, Autoria, from .models import (AcompanhamentoMateria, Anexada, Autor, DespachoInicial,
DespachoInicial, DocumentoAcessorio, MateriaLegislativa, DocumentoAcessorio, MateriaLegislativa, Numeracao,
Numeracao, Proposicao, Relatoria, TipoMateriaLegislativa, Proposicao, Relatoria, TipoMateriaLegislativa, Tramitacao)
Tramitacao)
ANO_CHOICES = [('', '---------')] + RANGE_ANOS ANO_CHOICES = [('', '---------')] + RANGE_ANOS
@ -337,29 +336,7 @@ class NumeracaoForm(ModelForm):
super(NumeracaoForm, self).__init__(*args, **kwargs) super(NumeracaoForm, self).__init__(*args, **kwargs)
class DespachoInicialForm(ModelForm): class AnexadaForm(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):
tipo = forms.ModelChoiceField( tipo = forms.ModelChoiceField(
label='Tipo', label='Tipo',
@ -372,90 +349,35 @@ class MateriaAnexadaForm(ModelForm):
ano = forms.CharField(label='Ano', required=True) ano = forms.CharField(label='Ano', required=True)
class Meta: def clean(self):
model = Anexada if self.errors:
fields = ['tipo', 'numero', 'ano', return self.errors
'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 = [] cleaned_data = self.cleaned_data
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)
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): return cleaned_data
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 save(self, commit=False):
anexada = super(AnexadaForm, self).save(commit)
anexada.materia_anexada = self.cleaned_data['materia_anexada']
anexada.save()
return anexada
class Meta: class Meta:
model = Autoria model = Anexada
fields = ['autor', fields = ['tipo', 'numero', 'ano', 'data_anexacao', 'data_desanexacao']
'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)
class RangeWidgetOverride(forms.MultiWidget): class RangeWidgetOverride(forms.MultiWidget):
@ -620,3 +542,25 @@ def filtra_tramitacao_destino_and_status(status, destino):
status=status, status=status,
unidade_tramitacao_destino=destino).distinct().values_list( unidade_tramitacao_destino=destino).distinct().values_list(
'materia_id', flat=True) '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 - observacao
Anexada: Anexada:
Matéria Legislativa: Matéria Anexada:
- tip_id_basica_FIXME num_ident_basica_FIXME ano_ident_basica_FIXME - tipo numero ano
- data_anexacao data_desanexacao - data_anexacao data_desanexacao
AnexadaDetail:
Matéria Anexada: Matéria Anexada:
- tip_id_basica_FIXME num_ident_basica_FIXME ano_ident_basica_FIXME - materia_principal
- materia_anexada
- data_anexacao data_desanexacao - data_anexacao data_desanexacao
TipoAutor: TipoAutor:
@ -55,7 +58,7 @@ Autor:
Autoria: Autoria:
Autoria: Autoria:
- tip_autor_FIXME nom_autor_FIXME primeiro_autor - autor partido primeiro_autor
DocumentoAcessorio: DocumentoAcessorio:
Documento Acessório: Documento Acessório:
@ -109,3 +112,7 @@ Tramitacao:
- status turno urgente - status turno urgente
- unidade_tramitacao_destino data_encaminhamento data_fim_prazo - unidade_tramitacao_destino data_encaminhamento data_fim_prazo
- texto - 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) partido = models.ForeignKey(Partido, blank=True, null=True)
autor = models.ForeignKey(Autor) autor = models.ForeignKey(Autor)
materia = models.ForeignKey(MateriaLegislativa) 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: class Meta:
verbose_name = _('Autoria') 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) materia_anexada = MateriaLegislativa.objects.get(numero=32, ano=2004)
# Testa POST # Testa POST
response = client.post(reverse('materia:materia_anexada', response = client.post(reverse('materia:anexada_create',
kwargs={'pk': materia_principal.pk}), kwargs={'pk': materia_principal.pk}),
{'tipo': materia_anexada.tipo.pk, {'tipo': materia_anexada.tipo.pk,
'numero': materia_anexada.numero, 'numero': materia_anexada.numero,
@ -124,7 +124,7 @@ def test_autoria_submit(client):
autor = mommy.make(Autor, tipo=tipo_autor, nome='Autor Teste') autor = mommy.make(Autor, tipo=tipo_autor, nome='Autor Teste')
# Testa POST # Testa POST
response = client.post(reverse('materia:autoria', response = client.post(reverse('materia:autoria_create',
kwargs={'pk': materia_principal.pk}), kwargs={'pk': materia_principal.pk}),
{'autor': autor.pk, {'autor': autor.pk,
'primeiro_autor': True, 'primeiro_autor': True,
@ -154,7 +154,7 @@ def test_despacho_inicial_submit(client):
data_criacao='2016-03-18') data_criacao='2016-03-18')
# Testa POST # Testa POST
response = client.post(reverse('materia:despacho_inicial', response = client.post(reverse('materia:despachoinicial_create',
kwargs={'pk': materia_principal.pk}), kwargs={'pk': materia_principal.pk}),
{'comissao': comissao.pk, {'comissao': comissao.pk,
'salvar': 'salvar'}, 'salvar': 'salvar'},
@ -286,7 +286,7 @@ def test_tramitacao_submit(client):
@pytest.mark.django_db(transaction=False) @pytest.mark.django_db(transaction=False)
def test_form_errors_anexada(client): def test_form_errors_anexada(client):
materia_principal = make_materia_principal() materia_principal = make_materia_principal()
response = client.post(reverse('materia:materia_anexada', response = client.post(reverse('materia:anexada_create',
kwargs={'pk': materia_principal.pk}), kwargs={'pk': materia_principal.pk}),
{'salvar': 'salvar'}, {'salvar': 'salvar'},
follow=True) follow=True)
@ -305,7 +305,7 @@ def test_form_errors_anexada(client):
def test_form_errors_autoria(client): def test_form_errors_autoria(client):
materia_principal = make_materia_principal() materia_principal = make_materia_principal()
response = client.post(reverse('materia:autoria', response = client.post(reverse('materia:autoria_create',
kwargs={'pk': materia_principal.pk}), kwargs={'pk': materia_principal.pk}),
{'materia_id': materia_principal.pk, {'materia_id': materia_principal.pk,
'partido': '', 'partido': '',
@ -315,15 +315,13 @@ def test_form_errors_autoria(client):
assert (response.context_data['form'].errors['autor'] == assert (response.context_data['form'].errors['autor'] ==
['Este campo é obrigatório.']) ['Este campo é obrigatório.'])
assert (response.context_data['form'].errors['primeiro_autor'] ==
['Este campo é obrigatório.'])
@pytest.mark.django_db(transaction=False) @pytest.mark.django_db(transaction=False)
def test_form_errors_despacho_inicial(client): def test_form_errors_despacho_inicial(client):
materia_principal = make_materia_principal() materia_principal = make_materia_principal()
response = client.post(reverse('materia:despacho_inicial', response = client.post(reverse('materia:despachoinicial_create',
kwargs={'pk': materia_principal.pk}), kwargs={'pk': materia_principal.pk}),
{'salvar': 'salvar'}, {'salvar': 'salvar'},
follow=True) follow=True)

23
materia/urls.py

@ -2,12 +2,10 @@ from django.conf.urls import include, url
from materia.views import (AcompanhamentoConfirmarView, from materia.views import (AcompanhamentoConfirmarView,
AcompanhamentoExcluirView, AcompanhamentoExcluirView,
AcompanhamentoMateriaView, AutorCrud, AcompanhamentoMateriaView, AnexadaCrud, AutorCrud,
AutoriaEditView, AutoriaView, AutoriaCrud, DespachoInicialCrud,
DespachoInicialEditView, DespachoInicialView,
DocumentoAcessorioEditView, DocumentoAcessorioView, DocumentoAcessorioEditView, DocumentoAcessorioView,
LegislacaoCitadaEditView, LegislacaoCitadaView, LegislacaoCitadaEditView, LegislacaoCitadaView,
MateriaAnexadaEditView, MateriaAnexadaView,
MateriaLegislativaCrud, MateriaLegislativaCrud,
MateriaLegislativaPesquisaView, MateriaTaView, MateriaLegislativaPesquisaView, MateriaTaView,
NumeracaoEditView, NumeracaoView, OrgaoCrud, NumeracaoEditView, NumeracaoView, OrgaoCrud,
@ -25,7 +23,10 @@ from .apps import AppConfig
app_name = AppConfig.name app_name = AppConfig.name
urlpatterns = [ 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$', url(r'^materia/(?P<pk>[0-9]+)/ta$',
@ -52,14 +53,6 @@ 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+)/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$', url(r'^materia/(?P<pk>\d+)/legislacao-citada$',
LegislacaoCitadaView.as_view(), name='legislacao_citada'), LegislacaoCitadaView.as_view(), name='legislacao_citada'),
url(r'^materia/(?P<pk>\d+)/legislacao-citada/(?P<id>\d+)/edit', url(r'^materia/(?P<pk>\d+)/legislacao-citada/(?P<id>\d+)/edit',
@ -78,10 +71,6 @@ urlpatterns = [
TramitacaoView.as_view(), name='tramitacao_materia'), TramitacaoView.as_view(), name='tramitacao_materia'),
url(r'^materia/(?P<pk>\d+)/tramitacao/(?P<id>\d+)/edit$', url(r'^materia/(?P<pk>\d+)/tramitacao/(?P<id>\d+)/edit$',
TramitacaoEditView.as_view(), name='tramitacao_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$', 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$',

347
materia/views.py

@ -15,19 +15,20 @@ from django.views.generic import CreateView, FormView, ListView, TemplateView
from django_filters.views import FilterView from django_filters.views import FilterView
import crud.base import crud.base
import crud.masterdetail
from base.models import CasaLegislativa from base.models import CasaLegislativa
from comissoes.models import Comissao, Composicao 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 norma.models import LegislacaoCitada, NormaJuridica, TipoNormaJuridica from norma.models import LegislacaoCitada, NormaJuridica, TipoNormaJuridica
from parlamentares.models import Partido
from sapl.utils import get_base_url from sapl.utils import get_base_url
from .forms import (AcompanhamentoMateriaForm, AutoriaForm, from .forms import (AcompanhamentoMateriaForm, AnexadaForm,
DespachoInicialForm, DocumentoAcessorioForm, DespachoInicialForm, DocumentoAcessorioForm,
LegislacaoCitadaForm, MateriaAnexadaForm, LegislacaoCitadaForm, MateriaLegislativaFilterSet,
MateriaLegislativaFilterSet, NumeracaoForm, ProposicaoForm, NumeracaoForm, ProposicaoForm, RelatoriaForm,
RelatoriaForm, TramitacaoForm, filtra_tramitacao_destino, TramitacaoForm, filtra_tramitacao_destino,
filtra_tramitacao_destino_and_status, filtra_tramitacao_destino_and_status,
filtra_tramitacao_status) filtra_tramitacao_status)
from .models import (AcompanhamentoMateria, Anexada, Autor, Autoria, from .models import (AcompanhamentoMateria, Anexada, Autor, Autoria,
@ -46,7 +47,6 @@ TipoFimRelatoriaCrud = Crud.build(TipoFimRelatoria, 'fim_relatoria')
AnexadaCrud = Crud.build(Anexada, '') AnexadaCrud = Crud.build(Anexada, '')
TipoAutorCrud = Crud.build(TipoAutor, 'tipo_autor') TipoAutorCrud = Crud.build(TipoAutor, 'tipo_autor')
AutorCrud = Crud.build(Autor, 'autor') AutorCrud = Crud.build(Autor, 'autor')
AutoriaCrud = Crud.build(Autoria, '')
DocumentoAcessorioCrud = Crud.build(DocumentoAcessorio, '') DocumentoAcessorioCrud = Crud.build(DocumentoAcessorio, '')
NumeracaoCrud = Crud.build(Numeracao, '') NumeracaoCrud = Crud.build(Numeracao, '')
OrgaoCrud = Crud.build(Orgao, 'orgao') OrgaoCrud = Crud.build(Orgao, 'orgao')
@ -57,243 +57,55 @@ StatusTramitacaoCrud = Crud.build(StatusTramitacao, 'status_tramitacao')
UnidadeTramitacaoCrud = Crud.build(UnidadeTramitacao, 'unidade_tramitacao') UnidadeTramitacaoCrud = Crud.build(UnidadeTramitacao, 'unidade_tramitacao')
TramitacaoCrud = Crud.build(Tramitacao, '') TramitacaoCrud = Crud.build(Tramitacao, '')
AutoriaCrud = MasterDetailCrud.build(Autoria, 'materia', '')
class MateriaLegislativaCrud(Crud):
model = MateriaLegislativa
help_path = 'materia_legislativa'
class BaseMixin(crud.base.CrudBaseMixin): class DespachoInicialCrud(MasterDetailCrud):
list_field_names = ['tipo', 'numero', 'ano', 'data_apresentacao'] model = DespachoInicial
parent_field = 'materia'
help_path = ''
class CreateView(MasterDetailCrud.CreateView):
form_class = DespachoInicialForm
class MateriaAnexadaView(FormView): class UpdateView(MasterDetailCrud.UpdateView):
template_name = "materia/materia_anexada.html" form_class = DespachoInicialForm
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 AnexadaCrud(MasterDetailCrud):
model = Anexada
parent_field = 'materia_principal'
help_path = ''
class MateriaAnexadaEditView(FormView): class BaseMixin(MasterDetailCrud.BaseMixin):
template_name = "materia/materia_anexada_edit.html" list_field_names = ['materia_anexada', 'data_anexacao']
form_class = MateriaAnexadaForm
def form_invalid(self, class CreateView(MasterDetailCrud.CreateView):
form, form_class = AnexadaForm
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): class UpdateView(MasterDetailCrud.UpdateView):
materia = MateriaLegislativa.objects.get(id=kwargs['pk']) form_class = AnexadaForm
anexada = Anexada.objects.get(id=kwargs['id'])
data = {} def get_initial(self, **kwargs):
data['tipo'] = anexada.materia_anexada.tipo self.initial['tipo'] = self.object.materia_anexada.tipo.id
data['numero'] = anexada.materia_anexada.numero self.initial['numero'] = self.object.materia_anexada.numero
data['ano'] = anexada.materia_anexada.ano self.initial['ano'] = self.object.materia_anexada.ano
data['data_anexacao'] = anexada.data_anexacao
data['data_desanexacao'] = anexada.data_desanexacao
form = MateriaAnexadaForm(initial=data, excluir=True) return self.initial
return self.render_to_response( class DetailView(MasterDetailCrud.DetailView):
{'object': materia,
'form': form})
def post(self, request, *args, **kwargs): @property
form = self.get_form() def layout_key(self):
return 'AnexadaDetail'
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'] class MateriaLegislativaCrud(Crud):
numero = form.cleaned_data['numero'] model = MateriaLegislativa
ano = form.cleaned_data['ano'] help_path = 'materia_legislativa'
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 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()
return self.render_to_response(
{'object': materia,
'form': form,
'despachos': despacho})
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)
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})
def get_success_url(self):
pk = self.kwargs['pk']
return reverse('materia:despacho_inicial', kwargs={'pk': pk})
class DespachoInicialEditView(CreateView):
template_name = "materia/despacho_inicial_edit.html"
form_class = DespachoInicialForm
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)
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()})
def get_success_url(self): class BaseMixin(crud.base.CrudBaseMixin):
pk = self.kwargs['pk'] list_field_names = ['tipo', 'numero', 'ano', 'data_apresentacao']
return reverse('materia:despacho_inicial', kwargs={'pk': pk})
class LegislacaoCitadaView(FormView): class LegislacaoCitadaView(FormView):
@ -1087,87 +899,6 @@ class TramitacaoEditView(CreateView):
return reverse('materia:tramitacao_materia', kwargs={'pk': pk}) 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): class ProposicaoListView(ListView):
template_name = "materia/proposicao/proposicao_list.html" template_name = "materia/proposicao/proposicao_list.html"
paginate_by = 10 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 i18n %}
{% load crispy_forms_tags %} {% load crispy_forms_tags %}
{% block actions %} {% endblock %} {% 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 i18n %}
{% load crispy_forms_tags %} {% load crispy_forms_tags %}
{% block actions %} {% endblock %} {% 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 i18n %}
{% load crispy_forms_tags %} {% load crispy_forms_tags %}
{% block actions %} {% endblock %} {% 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 i18n %}
{% load crispy_forms_tags %} {% load crispy_forms_tags %}
{% block actions %} {% endblock %} {% 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 i18n %}
{% load crispy_forms_tags %} {% load crispy_forms_tags %}
{% block actions %}{% endblock %} {% block actions %}{% endblock %}

2
templates/materia/numeracao.html

@ -1,4 +1,4 @@
{% extends "materia/materialegislativa_detail.html" %} {% extends "crud/detail.html" %}
{% load i18n %} {% load i18n %}
{% load crispy_forms_tags %} {% load crispy_forms_tags %}
{% block actions %} {% endblock %} {% 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 i18n %}
{% load crispy_forms_tags %} {% load crispy_forms_tags %}
{% block actions %} {% endblock %} {% block actions %} {% endblock %}

2
templates/materia/relatoria.html

@ -1,4 +1,4 @@
{% extends "materia/materialegislativa_detail.html" %} {% extends "crud/detail.html" %}
{% load i18n %} {% load i18n %}
{% load crispy_forms_tags %} {% load crispy_forms_tags %}
{% block actions %} {% endblock %} {% 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 i18n %}
{% load crispy_forms_tags %} {% load crispy_forms_tags %}
{% block actions %} {% endblock %} {% block actions %} {% endblock %}

6
templates/materia/subnav.yaml

@ -1,11 +1,11 @@
- title: Início - title: Início
url: materialegislativa_detail url: materialegislativa_detail
- title: Anexada - title: Anexada
url: materia_anexada url: anexada_list
- title: Autoria - title: Autoria
url: autoria url: autoria_list
- title: Despacho Inicial - title: Despacho Inicial
url: despacho_inicial url: despachoinicial_list
- title: Documento Acessório - title: Documento Acessório
url: documento_acessorio url: documento_acessorio
- title: Legislação Citada - 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 i18n %}
{% load crispy_forms_tags %} {% load crispy_forms_tags %}
{% block actions %} {% endblock %} {% 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 i18n %}
{% load crispy_forms_tags %} {% load crispy_forms_tags %}
{% block actions %} {% endblock %} {% block actions %} {% endblock %}

Loading…
Cancel
Save