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.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 = []
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)
class Meta: cleaned_data = self.cleaned_data
model = Autoria
fields = ['autor',
'primeiro_autor',
'partido',
'materia_id']
def clean(self):
if self.data['materia_id'] and self.data['autor']:
try: try:
materia = MateriaLegislativa.objects.get( materia_anexada = MateriaLegislativa.objects.get(
id=self.data['materia_id']) numero=cleaned_data['numero'],
Autoria.objects.get(autor=self.data['autor'], ano=cleaned_data['ano'],
materia=materia) tipo=cleaned_data['tipo'])
raise forms.ValidationError(
_('Essa autoria já foi adicionada!'))
except ObjectDoesNotExist: except ObjectDoesNotExist:
pass msg = _('A matéria a ser anexada não existe no cadastro'
' de matérias legislativas.')
def __init__(self, excluir=False, *args, **kwargs): raise ValidationError(msg)
else:
cleaned_data['materia_anexada'] = materia_anexada
row1 = crispy_layout_mixin.to_row( return cleaned_data
[('autor', 4), ('primeiro_autor', 4), ('partido', 4)])
more = [] def save(self, commit=False):
if excluir: anexada = super(AnexadaForm, self).save(commit)
more = [Submit('Excluir', 'Excluir')] anexada.materia_anexada = self.cleaned_data['materia_anexada']
anexada.save()
return anexada
self.helper = FormHelper() class Meta:
self.helper.layout = Layout( model = Anexada
Fieldset( fields = ['tipo', 'numero', 'ano', 'data_anexacao', 'data_desanexacao']
_('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$',

345
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):
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: class DespachoInicialCrud(MasterDetailCrud):
msg = _('A matéria a ser anexada não pode ser do mesmo \ model = DespachoInicial
tipo da matéria principal.') parent_field = 'materia'
self.form_invalid(form, request, mat_principal, msg) help_path = ''
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 CreateView(MasterDetailCrud.CreateView):
form_class = DespachoInicialForm
class DespachoInicialView(CreateView): class UpdateView(MasterDetailCrud.UpdateView):
template_name = "materia/despacho_inicial.html"
form_class = DespachoInicialForm 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( class AnexadaCrud(MasterDetailCrud):
{'object': materia, model = Anexada
'form': form, parent_field = 'materia_principal'
'despachos': despacho}) help_path = ''
def post(self, request, *args, **kwargs): class BaseMixin(MasterDetailCrud.BaseMixin):
form = self.get_form() list_field_names = ['materia_anexada', 'data_anexacao']
materia = MateriaLegislativa.objects.get(id=kwargs['pk'])
despacho = DespachoInicial.objects.filter(materia_id=materia.id)
if form.is_valid(): class CreateView(MasterDetailCrud.CreateView):
despacho = DespachoInicial() form_class = AnexadaForm
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): class UpdateView(MasterDetailCrud.UpdateView):
pk = self.kwargs['pk'] form_class = AnexadaForm
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
class DespachoInicialEditView(CreateView): return self.initial
template_name = "materia/despacho_inicial_edit.html"
form_class = DespachoInicialForm
def get(self, request, *args, **kwargs): class DetailView(MasterDetailCrud.DetailView):
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}) @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(): class MateriaLegislativaCrud(Crud):
if 'Excluir' in request.POST: model = MateriaLegislativa
despacho.delete() help_path = 'materia_legislativa'
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