From 0ca00cfe85de7149d1d58e6a5d32b8248ccd0f31 Mon Sep 17 00:00:00 2001 From: Eduardo Edson Batista Cordeiro Alves Date: Thu, 28 Apr 2016 08:48:22 -0300 Subject: [PATCH 01/19] Inicia crud de anexada --- materia/forms.py | 55 +-- materia/layouts.yaml | 5 +- materia/urls.py | 14 +- materia/views.py | 350 ++++++++++-------- templates/materia/anexada_detail.html | 3 + templates/materia/autoria.html | 2 +- templates/materia/autoria_edit.html | 2 +- templates/materia/despacho_inicial.html | 2 +- templates/materia/despacho_inicial_edit.html | 2 +- templates/materia/documento_acessorio.html | 2 +- .../materia/documento_acessorio_edit.html | 2 +- templates/materia/legislacao_citada.html | 2 +- templates/materia/legislacao_citada_edit.html | 2 +- templates/materia/materia_anexada.html | 33 -- templates/materia/materia_anexada_edit.html | 7 - .../materia/materialegislativa_detail.html | 1 - .../materia/materialegislativa_filter.html | 2 +- templates/materia/numeracao.html | 2 +- templates/materia/numeracao_edit.html | 2 +- templates/materia/relatoria.html | 2 +- templates/materia/relatoria_edit.html | 2 +- templates/materia/subnav.yaml | 2 +- templates/materia/tramitacao.html | 2 +- templates/materia/tramitacao_edit.html | 2 +- 24 files changed, 246 insertions(+), 254 deletions(-) create mode 100644 templates/materia/anexada_detail.html delete mode 100644 templates/materia/materia_anexada.html delete mode 100644 templates/materia/materia_anexada_edit.html delete mode 100644 templates/materia/materialegislativa_detail.html diff --git a/materia/forms.py b/materia/forms.py index 6f6587c7e..48550e980 100644 --- a/materia/forms.py +++ b/materia/forms.py @@ -359,7 +359,7 @@ class DespachoInicialForm(ModelForm): super(DespachoInicialForm, self).__init__(*args, **kwargs) -class MateriaAnexadaForm(ModelForm): +class AnexadaForm(ModelForm): tipo = forms.ModelChoiceField( label='Tipo', @@ -372,36 +372,37 @@ 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 clean(self): - def __init__(self, excluir=False, *args, **kwargs): + if self.errors: + return self.errors - row1 = crispy_layout_mixin.to_row( - [('tipo', 4), ('numero', 4), ('ano', 4)]) - row2 = crispy_layout_mixin.to_row( - [('data_anexacao', 6), ('data_desanexacao', 6)]) + cleaned_data = self.cleaned_data - more = [] - if excluir: - more = [Submit('Excluir', 'Excluir')] + 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_id'] = materia_anexada.id - self.helper = FormHelper() - self.helper.layout = Layout( - Fieldset( - _('Anexar Matéria'), - row1, row2, - form_actions(more=more) - ) - ) - super(MateriaAnexadaForm, self).__init__( - *args, **kwargs) + return cleaned_data + + def save(self, commit=False): + anexada = super(AnexadaForm, self).save(commit) + anexada.materia_anexada_id = self.cleaned_data['materia_anexada_id'] + import ipdb; ipdb.set_trace() + return anexada + + class Meta: + model = Anexada + fields = ['tipo', 'numero', 'ano', + 'data_anexacao', 'data_desanexacao'] class AutoriaForm(ModelForm): diff --git a/materia/layouts.yaml b/materia/layouts.yaml index 0a3270cd2..90bd68990 100644 --- a/materia/layouts.yaml +++ b/materia/layouts.yaml @@ -37,11 +37,8 @@ MateriaLegislativa: - observacao Anexada: - Matéria Legislativa: - - tip_id_basica_FIXME num_ident_basica_FIXME ano_ident_basica_FIXME - - data_anexacao data_desanexacao Matéria Anexada: - - tip_id_basica_FIXME num_ident_basica_FIXME ano_ident_basica_FIXME + - tipo numero ano - data_anexacao data_desanexacao TipoAutor: diff --git a/materia/urls.py b/materia/urls.py index d39828694..d1fded321 100644 --- a/materia/urls.py +++ b/materia/urls.py @@ -7,7 +7,6 @@ from materia.views import (AcompanhamentoConfirmarView, DespachoInicialEditView, DespachoInicialView, DocumentoAcessorioEditView, DocumentoAcessorioView, LegislacaoCitadaEditView, LegislacaoCitadaView, - MateriaAnexadaEditView, MateriaAnexadaView, MateriaLegislativaCrud, MateriaLegislativaPesquisaView, MateriaTaView, NumeracaoEditView, NumeracaoView, OrgaoCrud, @@ -18,14 +17,15 @@ from materia.views import (AcompanhamentoConfirmarView, TipoDocumentoCrud, TipoFimRelatoriaCrud, TipoMateriaCrud, TipoProposicaoCrud, TramitacaoEditView, TramitacaoView, - UnidadeTramitacaoCrud) + UnidadeTramitacaoCrud, AnexadaCrud) 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())), url(r'^materia/(?P[0-9]+)/ta$', @@ -52,10 +52,10 @@ urlpatterns = [ url(r'^sistema/materia/status-tramitacao/', include(StatusTramitacaoCrud.get_urls())), url(r'^sistema/materia/orgao/', include(OrgaoCrud.get_urls())), - url(r'^materia/(?P\d+)/materia-anexada$', - MateriaAnexadaView.as_view(), name='materia_anexada'), - url(r'^materia/(?P\d+)/materia-anexada/(?P\d+)/edit', - MateriaAnexadaEditView.as_view(), name='materia_anexada_edit'), + # url(r'^materia/(?P\d+)/materia-anexada$', + # MateriaAnexadaView.as_view(), name='materia_anexada'), + # url(r'^materia/(?P\d+)/materia-anexada/(?P\d+)/edit', + # MateriaAnexadaEditView.as_view(), name='materia_anexada_edit'), url(r'^materia/(?P\d+)/despacho-inicial$', DespachoInicialView.as_view(), name='despacho_inicial'), url(r'^materia/(?P\d+)/despacho-inicial/(?P\d+)/edit', diff --git a/materia/views.py b/materia/views.py index b47589a85..e5896330c 100644 --- a/materia/views.py +++ b/materia/views.py @@ -15,19 +15,21 @@ from django.views.generic import CreateView, FormView, ListView, TemplateView from django_filters.views import FilterView import crud.base +import crud.masterdetail from base.models import CasaLegislativa from comissoes.models import Comissao, Composicao from compilacao.views import IntegracaoTaView from crud.base import Crud, make_pagination +from crud.masterdetail import MasterDetailCrud from norma.models import LegislacaoCitada, NormaJuridica, TipoNormaJuridica from parlamentares.models import Partido from sapl.utils import get_base_url -from .forms import (AcompanhamentoMateriaForm, AutoriaForm, +from .forms import (AcompanhamentoMateriaForm, AnexadaForm, AutoriaForm, DespachoInicialForm, DocumentoAcessorioForm, - LegislacaoCitadaForm, MateriaAnexadaForm, - MateriaLegislativaFilterSet, NumeracaoForm, ProposicaoForm, - RelatoriaForm, TramitacaoForm, filtra_tramitacao_destino, + LegislacaoCitadaForm, MateriaLegislativaFilterSet, + NumeracaoForm, ProposicaoForm, RelatoriaForm, + TramitacaoForm, filtra_tramitacao_destino, filtra_tramitacao_destino_and_status, filtra_tramitacao_status) from .models import (AcompanhamentoMateria, Anexada, Autor, Autoria, @@ -58,171 +60,201 @@ UnidadeTramitacaoCrud = Crud.build(UnidadeTramitacao, 'unidade_tramitacao') TramitacaoCrud = Crud.build(Tramitacao, '') -class MateriaLegislativaCrud(Crud): - model = MateriaLegislativa - help_path = 'materia_legislativa' - - class BaseMixin(crud.base.CrudBaseMixin): - list_field_names = ['tipo', 'numero', 'ano', 'data_apresentacao'] - - -class MateriaAnexadaView(FormView): - template_name = "materia/materia_anexada.html" - form_class = MateriaAnexadaForm - form_valid_message = _('Matéria anexada com sucesso!') - - def get(self, request, *args, **kwargs): - form = MateriaAnexadaForm() - materia = MateriaLegislativa.objects.get( - id=kwargs['pk']) - anexadas = Anexada.objects.filter( - materia_principal_id=kwargs['pk']) - - return self.render_to_response({'object': materia, - 'anexadas': anexadas, - 'form': form}) - - def form_invalid(self, - form, - request, - mat_principal, - anexadas, - msg='Erro ineseperado.'): - messages.add_message(request, messages.ERROR, msg) - return self.render_to_response( - {'form': form, - 'object': mat_principal, - 'anexadas': anexadas}) - - def post(self, request, *args, **kwargs): - form = self.get_form() - - anexadas = Anexada.objects.filter( - materia_principal_id=kwargs['pk']) - mat_principal = MateriaLegislativa.objects.get( - id=kwargs['pk']) +class AnexadaCrud(MasterDetailCrud): + model = Anexada + parent_field = 'materia_principal' + help_path = '' - 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'] + class BaseMixin(MasterDetailCrud.BaseMixin): + list_field_names = ['materia_anexada', 'data_anexacao'] - 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 CreateView(MasterDetailCrud.CreateView): + form_class = AnexadaForm + class UpdateView(MasterDetailCrud.UpdateView): + form_class = AnexadaForm -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']) + class DetailView(MasterDetailCrud.DetailView): - 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 + def layout_display(self): + # context = super(MasterDetailCrud.DetailView, self).get_context_data(**kwargs) + # import ipdb; ipdb.set_trace() + # if self.object: + # context['tipo'] = self.object.materia_anexada.tipo + # context['numero'] = self.object.materia_anexada.numero + # context['ano'] = self.object.materia_anexada.ano + # context.update(context) + # return context + return [self.object.materia_anexada.tipo, + self.object.materia_anexada.numero, + self.object.materia_anexada.ano] - 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 +class MateriaLegislativaCrud(Crud): + model = MateriaLegislativa + help_path = 'materia_legislativa' - anexada.save() - return self.form_valid(form) + class BaseMixin(crud.base.CrudBaseMixin): + list_field_names = ['tipo', 'numero', 'ano', 'data_apresentacao'] - 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 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 DespachoInicialView(CreateView): diff --git a/templates/materia/anexada_detail.html b/templates/materia/anexada_detail.html new file mode 100644 index 000000000..6b0c105d3 --- /dev/null +++ b/templates/materia/anexada_detail.html @@ -0,0 +1,3 @@ +{% extends "crud/detail.html" %} +{% block detail_content %} +{% endblock %} diff --git a/templates/materia/autoria.html b/templates/materia/autoria.html index d1e79e695..c60e5ddbf 100644 --- a/templates/materia/autoria.html +++ b/templates/materia/autoria.html @@ -1,4 +1,4 @@ -{% extends "materia/materialegislativa_detail.html" %} +{% extends "crud/detail.html" %} {% load i18n %} {% load crispy_forms_tags %} {% block actions %} {% endblock %} diff --git a/templates/materia/autoria_edit.html b/templates/materia/autoria_edit.html index 683f9f8ca..2d5d01c2d 100644 --- a/templates/materia/autoria_edit.html +++ b/templates/materia/autoria_edit.html @@ -1,4 +1,4 @@ -{% extends "materia/materialegislativa_detail.html" %} +{% extends "crud/detail.html" %} {% load i18n %} {% load crispy_forms_tags %} {% block actions %} {% endblock %} diff --git a/templates/materia/despacho_inicial.html b/templates/materia/despacho_inicial.html index 908bb09dd..8efe59f6d 100644 --- a/templates/materia/despacho_inicial.html +++ b/templates/materia/despacho_inicial.html @@ -1,4 +1,4 @@ -{% extends "materia/materialegislativa_detail.html" %} +{% extends "crud/detail.html" %} {% load i18n %} {% load crispy_forms_tags %} {% block actions %} {% endblock %} diff --git a/templates/materia/despacho_inicial_edit.html b/templates/materia/despacho_inicial_edit.html index 338595dc0..05ddec8c2 100644 --- a/templates/materia/despacho_inicial_edit.html +++ b/templates/materia/despacho_inicial_edit.html @@ -1,4 +1,4 @@ -{% extends "materia/materialegislativa_detail.html" %} +{% extends "crud/detail.html" %} {% load i18n %} {% load crispy_forms_tags %} {% block actions %} {% endblock %} diff --git a/templates/materia/documento_acessorio.html b/templates/materia/documento_acessorio.html index 438cfb118..14c3b4eb1 100644 --- a/templates/materia/documento_acessorio.html +++ b/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 %} diff --git a/templates/materia/documento_acessorio_edit.html b/templates/materia/documento_acessorio_edit.html index 338595dc0..05ddec8c2 100644 --- a/templates/materia/documento_acessorio_edit.html +++ b/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 %} diff --git a/templates/materia/legislacao_citada.html b/templates/materia/legislacao_citada.html index 9ed99f31f..37381e79e 100644 --- a/templates/materia/legislacao_citada.html +++ b/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 %} diff --git a/templates/materia/legislacao_citada_edit.html b/templates/materia/legislacao_citada_edit.html index 9480fb3a2..f819a0a63 100644 --- a/templates/materia/legislacao_citada_edit.html +++ b/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 %} diff --git a/templates/materia/materia_anexada.html b/templates/materia/materia_anexada.html deleted file mode 100644 index 7eb6b20c6..000000000 --- a/templates/materia/materia_anexada.html +++ /dev/null @@ -1,33 +0,0 @@ -{% extends "materia/materialegislativa_detail.html" %} -{% load i18n %} -{% load crispy_forms_tags %} -{% block actions %} {% endblock %} -{% block detail_content %} -
- Matéria Legislativa - {% include "materia/resumo_detail_materia.html" %} - - -
- Matérias Anexadas - - - - - - - - - {% for a in anexadas %} - - - - - - {% endfor %} -
Matéria AnexadaData AnexaçãoData Desanexação
{{a.materia_anexada.tipo.sigla}} {{a.materia_anexada.numero}}/{{a.materia_anexada.ano}}{{a.data_anexacao|date:"d/m/Y"}}{{a.data_desanexacao|date:"d/m/Y"}}
-
-

- {% crispy form %} -
-{% endblock %} diff --git a/templates/materia/materia_anexada_edit.html b/templates/materia/materia_anexada_edit.html deleted file mode 100644 index 338595dc0..000000000 --- a/templates/materia/materia_anexada_edit.html +++ /dev/null @@ -1,7 +0,0 @@ -{% extends "materia/materialegislativa_detail.html" %} -{% load i18n %} -{% load crispy_forms_tags %} -{% block actions %} {% endblock %} -{% block detail_content %} - {% crispy form %} -{% endblock %} diff --git a/templates/materia/materialegislativa_detail.html b/templates/materia/materialegislativa_detail.html deleted file mode 100644 index 73a083226..000000000 --- a/templates/materia/materialegislativa_detail.html +++ /dev/null @@ -1 +0,0 @@ -{% extends "crud/detail.html" %} diff --git a/templates/materia/materialegislativa_filter.html b/templates/materia/materialegislativa_filter.html index bb3f187b8..e046d19dd 100644 --- a/templates/materia/materialegislativa_filter.html +++ b/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 %} diff --git a/templates/materia/numeracao.html b/templates/materia/numeracao.html index 1956a4fd4..518ee133f 100644 --- a/templates/materia/numeracao.html +++ b/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 %} diff --git a/templates/materia/numeracao_edit.html b/templates/materia/numeracao_edit.html index 6cf29f2e6..139dd4117 100644 --- a/templates/materia/numeracao_edit.html +++ b/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 %} diff --git a/templates/materia/relatoria.html b/templates/materia/relatoria.html index 778b5f355..6368f385d 100644 --- a/templates/materia/relatoria.html +++ b/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 %} diff --git a/templates/materia/relatoria_edit.html b/templates/materia/relatoria_edit.html index 4c6af9664..d694dff93 100644 --- a/templates/materia/relatoria_edit.html +++ b/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 %} diff --git a/templates/materia/subnav.yaml b/templates/materia/subnav.yaml index 049f16388..40fc1ca18 100644 --- a/templates/materia/subnav.yaml +++ b/templates/materia/subnav.yaml @@ -1,7 +1,7 @@ - title: Início url: materialegislativa_detail - title: Anexada - url: materia_anexada + url: anexada_list - title: Autoria url: autoria - title: Despacho Inicial diff --git a/templates/materia/tramitacao.html b/templates/materia/tramitacao.html index a879dc5a9..33ed398bd 100644 --- a/templates/materia/tramitacao.html +++ b/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 %} diff --git a/templates/materia/tramitacao_edit.html b/templates/materia/tramitacao_edit.html index 338595dc0..05ddec8c2 100644 --- a/templates/materia/tramitacao_edit.html +++ b/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 %} From c297c5a1b4ed42bd1ba5af95acdf0c93c85208e1 Mon Sep 17 00:00:00 2001 From: Eduardo Edson Batista Cordeiro Alves Date: Thu, 28 Apr 2016 08:56:04 -0300 Subject: [PATCH 02/19] =?UTF-8?q?Detail=20de=20Mat=C3=A9ria=20Anexada?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- materia/layouts.yaml | 6 ++++++ materia/views.py | 15 +++------------ templates/materia/anexada_detail.html | 3 --- 3 files changed, 9 insertions(+), 15 deletions(-) delete mode 100644 templates/materia/anexada_detail.html diff --git a/materia/layouts.yaml b/materia/layouts.yaml index 90bd68990..260f44d4f 100644 --- a/materia/layouts.yaml +++ b/materia/layouts.yaml @@ -41,6 +41,12 @@ Anexada: - tipo numero ano - data_anexacao data_desanexacao +AnexadaDetail: + Matéria Anexada: + - materia_principal + - materia_anexada + - data_anexacao data_desanexacao + TipoAutor: Tipo Autor: - descricao diff --git a/materia/views.py b/materia/views.py index e5896330c..c64630270 100644 --- a/materia/views.py +++ b/materia/views.py @@ -76,18 +76,9 @@ class AnexadaCrud(MasterDetailCrud): class DetailView(MasterDetailCrud.DetailView): - def layout_display(self): - # context = super(MasterDetailCrud.DetailView, self).get_context_data(**kwargs) - # import ipdb; ipdb.set_trace() - # if self.object: - # context['tipo'] = self.object.materia_anexada.tipo - # context['numero'] = self.object.materia_anexada.numero - # context['ano'] = self.object.materia_anexada.ano - # context.update(context) - # return context - return [self.object.materia_anexada.tipo, - self.object.materia_anexada.numero, - self.object.materia_anexada.ano] + @property + def layout_key(self): + return 'AnexadaDetail' class MateriaLegislativaCrud(Crud): diff --git a/templates/materia/anexada_detail.html b/templates/materia/anexada_detail.html deleted file mode 100644 index 6b0c105d3..000000000 --- a/templates/materia/anexada_detail.html +++ /dev/null @@ -1,3 +0,0 @@ -{% extends "crud/detail.html" %} -{% block detail_content %} -{% endblock %} From ced892e9d85ab1acb55ea6fe94f0ff2f5926ff9b Mon Sep 17 00:00:00 2001 From: Edward Ribeiro Date: Wed, 27 Apr 2016 12:12:40 -0300 Subject: [PATCH 03/19] FIX: substitui null por '' ao limpar autor --- static/js/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/static/js/app.js b/static/js/app.js index a5af75510..4523eeb52 100644 --- a/static/js/app.js +++ b/static/js/app.js @@ -61,7 +61,7 @@ function autorModal() { $( "#button-id-limpar" ).click(function() { $("#nome_autor").text(''); - $("#id_autor").val(null); + $("#id_autor").val(''); }); $("#button-id-pesquisar").click(function() { From c10d86a2fe26c1e8754a5e76d149452f77fb764c Mon Sep 17 00:00:00 2001 From: Edward Ribeiro Date: Wed, 27 Apr 2016 12:54:03 -0300 Subject: [PATCH 04/19] Ao recarregar a tela da pesquisa traz nome do autor. --- protocoloadm/urls.py | 7 +++++-- protocoloadm/views.py | 17 +++++++++++++++++ static/js/app.js | 13 +++++++++++-- 3 files changed, 33 insertions(+), 4 deletions(-) diff --git a/protocoloadm/urls.py b/protocoloadm/urls.py index e69decff5..9022e4358 100644 --- a/protocoloadm/urls.py +++ b/protocoloadm/urls.py @@ -22,7 +22,8 @@ from protocoloadm.views import (AnularProtocoloAdmView, TramitacaoAdmDeleteView, TramitacaoAdmEditView, TramitacaoAdmIncluirView, TramitacaoAdministrativoCrud, - TramitacaoAdmView, pesquisa_autores) + TramitacaoAdmView, get_nome_autor, + pesquisa_autores) from .apps import AppConfig @@ -97,5 +98,7 @@ urlpatterns = [ url(r'^proposicao/(?P\d+)/proposicao', ProposicaoDetailView.as_view(), name='proposicao_view'), url(r'^proposicao/pesquisar_autor', - pesquisa_autores, name='pesquisar_autor') + pesquisa_autores, name='pesquisar_autor'), + url(r'^proposicao/get_nome_autor', + get_nome_autor, name='get_nome_autor') ] diff --git a/protocoloadm/views.py b/protocoloadm/views.py index 980b7cdbe..851cf76f9 100644 --- a/protocoloadm/views.py +++ b/protocoloadm/views.py @@ -2,6 +2,7 @@ import json from datetime import date, datetime from braces.views import FormValidMessageMixin +from django.core.exceptions import ObjectDoesNotExist from django.core.urlresolvers import reverse from django.db.models import Q, Max from django.http import HttpResponse, HttpResponseRedirect @@ -634,6 +635,22 @@ class TramitacaoAdmDeleteView(DetailView): 'tramitacoes': tramitacoes}) +def get_nome_autor(request): + nome_autor = '' + if request.method == 'GET': + id = request.GET.get('id', '') + try: + autor = Autor.objects.get(pk=id) + if autor.parlamentar: + nome_autor = autor.parlamentar.nome_parlamentar + elif autor.comissao: + nome_autor = autor.comissao.nome + except ObjectDoesNotExist: + pass + return HttpResponse("{\"nome\":\"" + nome_autor + "\"}", + content_type="application/json; charset=utf-8") + + def pesquisa_autores(request): q = '' if request.method == 'GET': diff --git a/static/js/app.js b/static/js/app.js index 4523eeb52..a9cc8f684 100644 --- a/static/js/app.js +++ b/static/js/app.js @@ -59,7 +59,7 @@ function autorModal() { } }); - $( "#button-id-limpar" ).click(function() { + $("#button-id-limpar").click(function() { $("#nome_autor").text(''); $("#id_autor").val(''); }); @@ -71,7 +71,7 @@ function autorModal() { $("#selecionar").attr("hidden", "hidden"); }); - $( "#pesquisar" ).click(function() { + $("#pesquisar").click(function() { var query = $("#q").val() $.get("/proposicao/pesquisar_autor?q="+ query, function( @@ -121,6 +121,15 @@ function autorModal() { }); }); }); + + if ($("#id_autor").length > 0) { // se campo existir + if ($("#id_autor").val() != "") { // e não for vazio + var id = $("#id_autor").val(); + $.get("/proposicao/get_nome_autor?id=" + id, function(data, status){ + $("#nome_autor").text(data.nome); + }); + } + } } $(document).ready(function(){ From 63ab72578c15a672b59e6bb3e0294b47f826aa7e Mon Sep 17 00:00:00 2001 From: Edward Ribeiro Date: Wed, 27 Apr 2016 13:37:49 -0300 Subject: [PATCH 05/19] =?UTF-8?q?FIX=20Pesquisa=20Mat=C3=A9ria?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- static/js/app.js | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/static/js/app.js b/static/js/app.js index a9cc8f684..b6494b433 100644 --- a/static/js/app.js +++ b/static/js/app.js @@ -61,7 +61,16 @@ function autorModal() { $("#button-id-limpar").click(function() { $("#nome_autor").text(''); - $("#id_autor").val(''); + + function clean_if_exists(fieldname) { + if ($(fieldname).length > 0) { + $(fieldname).val(''); + } + } + + clean_if_exists("#id_autor"); + clean_if_exists("#id_autoria__autor"); + }); $("#button-id-pesquisar").click(function() { @@ -122,14 +131,19 @@ function autorModal() { }); }); - if ($("#id_autor").length > 0) { // se campo existir - if ($("#id_autor").val() != "") { // e não for vazio - var id = $("#id_autor").val(); - $.get("/proposicao/get_nome_autor?id=" + id, function(data, status){ - $("#nome_autor").text(data.nome); - }); + function get_nome_autor(fieldname) { + if ($(fieldname).length > 0) { // se campo existir + if ($(fieldname).val() != "") { // e não for vazio + var id = $(fieldname).val(); + $.get("/proposicao/get_nome_autor?id=" + id, function(data, status){ + $("#nome_autor").text(data.nome); + }); + } } } + + get_nome_autor("#id_autor"); + get_nome_autor("#id_autoria__autor"); } $(document).ready(function(){ From 516f0a3ac3dccbfbd803f16c15b0494ed822f0ce Mon Sep 17 00:00:00 2001 From: Eduardo Edson Batista Cordeiro Alves Date: Thu, 28 Apr 2016 09:41:29 -0300 Subject: [PATCH 06/19] Preenche campos durante update --- materia/forms.py | 6 +- materia/views.py | 166 ++--------------------------------------------- 2 files changed, 10 insertions(+), 162 deletions(-) diff --git a/materia/forms.py b/materia/forms.py index 48550e980..a41532a68 100644 --- a/materia/forms.py +++ b/materia/forms.py @@ -389,14 +389,14 @@ class AnexadaForm(ModelForm): ' de matérias legislativas.') raise ValidationError(msg) else: - cleaned_data['materia_anexada_id'] = materia_anexada.id + cleaned_data['materia_anexada'] = materia_anexada return cleaned_data def save(self, commit=False): anexada = super(AnexadaForm, self).save(commit) - anexada.materia_anexada_id = self.cleaned_data['materia_anexada_id'] - import ipdb; ipdb.set_trace() + anexada.materia_anexada = self.cleaned_data['materia_anexada'] + anexada.save() return anexada class Meta: diff --git a/materia/views.py b/materia/views.py index c64630270..fbc3a8540 100644 --- a/materia/views.py +++ b/materia/views.py @@ -74,6 +74,13 @@ class AnexadaCrud(MasterDetailCrud): 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 + + return self.initial + class DetailView(MasterDetailCrud.DetailView): @property @@ -89,165 +96,6 @@ class MateriaLegislativaCrud(Crud): 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 DespachoInicialView(CreateView): template_name = "materia/despacho_inicial.html" form_class = DespachoInicialForm From bd39bdb602d778f39fd50564dde9b14591e6ccca Mon Sep 17 00:00:00 2001 From: Eduardo Edson Batista Cordeiro Alves Date: Thu, 28 Apr 2016 10:02:39 -0300 Subject: [PATCH 07/19] Fix testes e qa --- materia/forms.py | 4 +--- materia/tests/test_materia.py | 4 ++-- materia/urls.py | 8 ++------ 3 files changed, 5 insertions(+), 11 deletions(-) diff --git a/materia/forms.py b/materia/forms.py index a41532a68..2464cdc82 100644 --- a/materia/forms.py +++ b/materia/forms.py @@ -373,7 +373,6 @@ class AnexadaForm(ModelForm): ano = forms.CharField(label='Ano', required=True) def clean(self): - if self.errors: return self.errors @@ -401,8 +400,7 @@ class AnexadaForm(ModelForm): class Meta: model = Anexada - fields = ['tipo', 'numero', 'ano', - 'data_anexacao', 'data_desanexacao'] + fields = ['tipo', 'numero', 'ano', 'data_anexacao', 'data_desanexacao'] class AutoriaForm(ModelForm): diff --git a/materia/tests/test_materia.py b/materia/tests/test_materia.py index 71d7ccb05..088ce0472 100644 --- a/materia/tests/test_materia.py +++ b/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, @@ -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) diff --git a/materia/urls.py b/materia/urls.py index d1fded321..00c5dbf53 100644 --- a/materia/urls.py +++ b/materia/urls.py @@ -2,7 +2,7 @@ from django.conf.urls import include, url from materia.views import (AcompanhamentoConfirmarView, AcompanhamentoExcluirView, - AcompanhamentoMateriaView, AutorCrud, + AcompanhamentoMateriaView, AnexadaCrud, AutorCrud, AutoriaEditView, AutoriaView, DespachoInicialEditView, DespachoInicialView, DocumentoAcessorioEditView, DocumentoAcessorioView, @@ -17,7 +17,7 @@ from materia.views import (AcompanhamentoConfirmarView, TipoDocumentoCrud, TipoFimRelatoriaCrud, TipoMateriaCrud, TipoProposicaoCrud, TramitacaoEditView, TramitacaoView, - UnidadeTramitacaoCrud, AnexadaCrud) + UnidadeTramitacaoCrud) from .apps import AppConfig @@ -52,10 +52,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\d+)/materia-anexada$', - # MateriaAnexadaView.as_view(), name='materia_anexada'), - # url(r'^materia/(?P\d+)/materia-anexada/(?P\d+)/edit', - # MateriaAnexadaEditView.as_view(), name='materia_anexada_edit'), url(r'^materia/(?P\d+)/despacho-inicial$', DespachoInicialView.as_view(), name='despacho_inicial'), url(r'^materia/(?P\d+)/despacho-inicial/(?P\d+)/edit', From 0aaf87a9e43a70c786bffb58af62c268a8780055 Mon Sep 17 00:00:00 2001 From: Eduardo Edson Batista Cordeiro Alves Date: Thu, 28 Apr 2016 10:25:33 -0300 Subject: [PATCH 08/19] Crud autoria --- materia/forms.py | 61 +------------ materia/layouts.yaml | 2 +- materia/migrations/0029_auto_20160428_1020.py | 20 +++++ materia/models.py | 3 +- materia/tests/test_materia.py | 6 +- materia/urls.py | 16 ++-- materia/views.py | 87 +------------------ ...remove_parlamentar_unidade_deliberativa.py | 19 ++++ templates/materia/autoria.html | 33 ------- templates/materia/autoria_edit.html | 7 -- templates/materia/subnav.yaml | 2 +- 11 files changed, 57 insertions(+), 199 deletions(-) create mode 100644 materia/migrations/0029_auto_20160428_1020.py create mode 100644 parlamentares/migrations/0017_remove_parlamentar_unidade_deliberativa.py delete mode 100644 templates/materia/autoria.html delete mode 100644 templates/materia/autoria_edit.html diff --git a/materia/forms.py b/materia/forms.py index 2464cdc82..2406b58b5 100644 --- a/materia/forms.py +++ b/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 @@ -403,60 +402,6 @@ class AnexadaForm(ModelForm): fields = ['tipo', 'numero', 'ano', 'data_anexacao', 'data_desanexacao'] -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: - model = Autoria - fields = ['autor', - 'primeiro_autor', - 'partido', - 'materia_id'] - - def clean(self): - if self.data['materia_id'] and self.data['autor']: - try: - materia = MateriaLegislativa.objects.get( - id=self.data['materia_id']) - Autoria.objects.get(autor=self.data['autor'], - materia=materia) - raise forms.ValidationError( - _('Essa autoria já foi adicionada!')) - except ObjectDoesNotExist: - pass - - def __init__(self, excluir=False, *args, **kwargs): - - row1 = crispy_layout_mixin.to_row( - [('autor', 4), ('primeiro_autor', 4), ('partido', 4)]) - - more = [] - if excluir: - more = [Submit('Excluir', 'Excluir')] - - self.helper = FormHelper() - self.helper.layout = Layout( - Fieldset( - _('Adicionar Autoria'), - row1, - form_actions(more=more) - ) - ) - super(AutoriaForm, self).__init__( - *args, **kwargs) - - class RangeWidgetOverride(forms.MultiWidget): def __init__(self, attrs=None): diff --git a/materia/layouts.yaml b/materia/layouts.yaml index 260f44d4f..dee076e02 100644 --- a/materia/layouts.yaml +++ b/materia/layouts.yaml @@ -58,7 +58,7 @@ Autor: Autoria: Autoria: - - tip_autor_FIXME nom_autor_FIXME primeiro_autor + - autor partido primeiro_autor DocumentoAcessorio: Documento Acessório: diff --git a/materia/migrations/0029_auto_20160428_1020.py b/materia/migrations/0029_auto_20160428_1020.py new file mode 100644 index 000000000..2cdd68c76 --- /dev/null +++ b/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'), + ), + ] diff --git a/materia/models.py b/materia/models.py index d80d751c4..28dc52e80 100644 --- a/materia/models.py +++ b/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') diff --git a/materia/tests/test_materia.py b/materia/tests/test_materia.py index 088ce0472..f95f1bcfa 100644 --- a/materia/tests/test_materia.py +++ b/materia/tests/test_materia.py @@ -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, @@ -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,8 +315,6 @@ 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) diff --git a/materia/urls.py b/materia/urls.py index 00c5dbf53..4eaae5bea 100644 --- a/materia/urls.py +++ b/materia/urls.py @@ -3,11 +3,10 @@ from django.conf.urls import include, url from materia.views import (AcompanhamentoConfirmarView, AcompanhamentoExcluirView, AcompanhamentoMateriaView, AnexadaCrud, AutorCrud, - AutoriaEditView, AutoriaView, - DespachoInicialEditView, DespachoInicialView, - DocumentoAcessorioEditView, DocumentoAcessorioView, - LegislacaoCitadaEditView, LegislacaoCitadaView, - MateriaLegislativaCrud, + AutoriaCrud, DespachoInicialEditView, + DespachoInicialView, DocumentoAcessorioEditView, + DocumentoAcessorioView, LegislacaoCitadaEditView, + LegislacaoCitadaView, MateriaLegislativaCrud, MateriaLegislativaPesquisaView, MateriaTaView, NumeracaoEditView, NumeracaoView, OrgaoCrud, OrigemCrud, ProposicaoEditView, ProposicaoListView, @@ -25,7 +24,8 @@ app_name = AppConfig.name urlpatterns = [ url(r'^materia/', include(MateriaLegislativaCrud.get_urls() + - AnexadaCrud.get_urls())), + AnexadaCrud.get_urls() + + AutoriaCrud.get_urls())), url(r'^materia/(?P[0-9]+)/ta$', @@ -74,10 +74,6 @@ urlpatterns = [ TramitacaoView.as_view(), name='tramitacao_materia'), url(r'^materia/(?P\d+)/tramitacao/(?P\d+)/edit$', TramitacaoEditView.as_view(), name='tramitacao_edit'), - url(r'^materia/(?P\d+)/autoria$', - AutoriaView.as_view(), name='autoria'), - url(r'^materia/(?P\d+)/autoria/(?P\d+)/edit$', - AutoriaEditView.as_view(), name='autoria_edit'), url(r'^materia/(?P\d+)/relatoria/(?P\d+)/edit$', RelatoriaEditView.as_view(), name='relatoria_edit'), url(r'^materia/proposicao$', diff --git a/materia/views.py b/materia/views.py index fbc3a8540..c3075f346 100644 --- a/materia/views.py +++ b/materia/views.py @@ -22,10 +22,9 @@ 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, AnexadaForm, AutoriaForm, +from .forms import (AcompanhamentoMateriaForm, AnexadaForm, DespachoInicialForm, DocumentoAcessorioForm, LegislacaoCitadaForm, MateriaLegislativaFilterSet, NumeracaoForm, ProposicaoForm, RelatoriaForm, @@ -48,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') @@ -59,6 +57,8 @@ StatusTramitacaoCrud = Crud.build(StatusTramitacao, 'status_tramitacao') UnidadeTramitacaoCrud = Crud.build(UnidadeTramitacao, 'unidade_tramitacao') TramitacaoCrud = Crud.build(Tramitacao, '') +AutoriaCrud = MasterDetailCrud.build(Autoria, 'materia', '') + class AnexadaCrud(MasterDetailCrud): model = Anexada @@ -958,87 +958,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 diff --git a/parlamentares/migrations/0017_remove_parlamentar_unidade_deliberativa.py b/parlamentares/migrations/0017_remove_parlamentar_unidade_deliberativa.py new file mode 100644 index 000000000..be2e861fe --- /dev/null +++ b/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', + ), + ] diff --git a/templates/materia/autoria.html b/templates/materia/autoria.html deleted file mode 100644 index c60e5ddbf..000000000 --- a/templates/materia/autoria.html +++ /dev/null @@ -1,33 +0,0 @@ -{% extends "crud/detail.html" %} -{% load i18n %} -{% load crispy_forms_tags %} -{% block actions %} {% endblock %} -{% block detail_content %} -
- Matéria Legislativa - {% include "materia/resumo_detail_materia.html" %} - -
- Autorias - - - - - - - - - - {% for a in autorias %} - - - - - - - {% endfor %} -
Nome AutorTipo AutorPrimeiro AutorPartido Autor
{{a.autor}}{{a.autor.tipo.descricao}}{{a.primeiro_autor|yesno:"Sim,Não"}}{{a.partido.sigla|default_if_none:"Não Informado"}}
-
- {% crispy form %} -
-{% endblock %} diff --git a/templates/materia/autoria_edit.html b/templates/materia/autoria_edit.html deleted file mode 100644 index 2d5d01c2d..000000000 --- a/templates/materia/autoria_edit.html +++ /dev/null @@ -1,7 +0,0 @@ -{% extends "crud/detail.html" %} -{% load i18n %} -{% load crispy_forms_tags %} -{% block actions %} {% endblock %} -{% block detail_content %} - {% crispy form %} -{% endblock %} diff --git a/templates/materia/subnav.yaml b/templates/materia/subnav.yaml index 40fc1ca18..75958fb46 100644 --- a/templates/materia/subnav.yaml +++ b/templates/materia/subnav.yaml @@ -3,7 +3,7 @@ - title: Anexada url: anexada_list - title: Autoria - url: autoria + url: autoria_list - title: Despacho Inicial url: despacho_inicial - title: Documento Acessório From 9a095137b3df8202941a62de68d5cc88cc1e02cc Mon Sep 17 00:00:00 2001 From: Eduardo Edson Batista Cordeiro Alves Date: Thu, 28 Apr 2016 10:44:28 -0300 Subject: [PATCH 09/19] Crud despacho inicial --- materia/forms.py | 28 +------ materia/layouts.yaml | 4 + materia/tests/test_materia.py | 4 +- materia/urls.py | 15 ++-- materia/views.py | 79 +------------------- templates/materia/despacho_inicial.html | 29 ------- templates/materia/despacho_inicial_edit.html | 7 -- templates/materia/subnav.yaml | 2 +- 8 files changed, 20 insertions(+), 148 deletions(-) delete mode 100644 templates/materia/despacho_inicial.html delete mode 100644 templates/materia/despacho_inicial_edit.html diff --git a/materia/forms.py b/materia/forms.py index 2406b58b5..c03846d06 100644 --- a/materia/forms.py +++ b/materia/forms.py @@ -15,9 +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, DespachoInicial, - DocumentoAcessorio, MateriaLegislativa, Numeracao, - Proposicao, Relatoria, TipoMateriaLegislativa, Tramitacao) +from .models import (AcompanhamentoMateria, Anexada, Autor, DocumentoAcessorio, + MateriaLegislativa, Numeracao, Proposicao, Relatoria, + TipoMateriaLegislativa, Tramitacao) ANO_CHOICES = [('', '---------')] + RANGE_ANOS @@ -336,28 +336,6 @@ 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 AnexadaForm(ModelForm): tipo = forms.ModelChoiceField( diff --git a/materia/layouts.yaml b/materia/layouts.yaml index dee076e02..958edc210 100644 --- a/materia/layouts.yaml +++ b/materia/layouts.yaml @@ -112,3 +112,7 @@ Tramitacao: - status turno urgente - unidade_tramitacao_destino data_encaminhamento data_fim_prazo - texto + +DespachoInicial: + Despacho Inicial: + - comissao diff --git a/materia/tests/test_materia.py b/materia/tests/test_materia.py index f95f1bcfa..5cf871795 100644 --- a/materia/tests/test_materia.py +++ b/materia/tests/test_materia.py @@ -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'}, @@ -321,7 +321,7 @@ def test_form_errors_autoria(client): 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) diff --git a/materia/urls.py b/materia/urls.py index 4eaae5bea..012039406 100644 --- a/materia/urls.py +++ b/materia/urls.py @@ -3,10 +3,10 @@ from django.conf.urls import include, url from materia.views import (AcompanhamentoConfirmarView, AcompanhamentoExcluirView, AcompanhamentoMateriaView, AnexadaCrud, AutorCrud, - AutoriaCrud, DespachoInicialEditView, - DespachoInicialView, DocumentoAcessorioEditView, - DocumentoAcessorioView, LegislacaoCitadaEditView, - LegislacaoCitadaView, MateriaLegislativaCrud, + AutoriaCrud, DespachoInicialCrud, + DocumentoAcessorioEditView, DocumentoAcessorioView, + LegislacaoCitadaEditView, LegislacaoCitadaView, + MateriaLegislativaCrud, MateriaLegislativaPesquisaView, MateriaTaView, NumeracaoEditView, NumeracaoView, OrgaoCrud, OrigemCrud, ProposicaoEditView, ProposicaoListView, @@ -25,7 +25,8 @@ app_name = AppConfig.name urlpatterns = [ url(r'^materia/', include(MateriaLegislativaCrud.get_urls() + AnexadaCrud.get_urls() + - AutoriaCrud.get_urls())), + AutoriaCrud.get_urls() + + DespachoInicialCrud.get_urls())), url(r'^materia/(?P[0-9]+)/ta$', @@ -52,10 +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\d+)/despacho-inicial$', - DespachoInicialView.as_view(), name='despacho_inicial'), - url(r'^materia/(?P\d+)/despacho-inicial/(?P\d+)/edit', - DespachoInicialEditView.as_view(), name='despacho_inicial_edit'), url(r'^materia/(?P\d+)/legislacao-citada$', LegislacaoCitadaView.as_view(), name='legislacao_citada'), url(r'^materia/(?P\d+)/legislacao-citada/(?P\d+)/edit', diff --git a/materia/views.py b/materia/views.py index c3075f346..e59e7da6d 100644 --- a/materia/views.py +++ b/materia/views.py @@ -25,10 +25,9 @@ from norma.models import LegislacaoCitada, NormaJuridica, TipoNormaJuridica from sapl.utils import get_base_url from .forms import (AcompanhamentoMateriaForm, AnexadaForm, - DespachoInicialForm, DocumentoAcessorioForm, - LegislacaoCitadaForm, MateriaLegislativaFilterSet, - NumeracaoForm, ProposicaoForm, RelatoriaForm, - TramitacaoForm, filtra_tramitacao_destino, + DocumentoAcessorioForm, LegislacaoCitadaForm, + MateriaLegislativaFilterSet, NumeracaoForm, ProposicaoForm, + RelatoriaForm, TramitacaoForm, filtra_tramitacao_destino, filtra_tramitacao_destino_and_status, filtra_tramitacao_status) from .models import (AcompanhamentoMateria, Anexada, Autor, Autoria, @@ -58,6 +57,7 @@ UnidadeTramitacaoCrud = Crud.build(UnidadeTramitacao, 'unidade_tramitacao') TramitacaoCrud = Crud.build(Tramitacao, '') AutoriaCrud = MasterDetailCrud.build(Autoria, 'materia', '') +DespachoInicialCrud = MasterDetailCrud.build(DespachoInicial, 'materia', '') class AnexadaCrud(MasterDetailCrud): @@ -96,77 +96,6 @@ class MateriaLegislativaCrud(Crud): list_field_names = ['tipo', 'numero', 'ano', 'data_apresentacao'] -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): - pk = self.kwargs['pk'] - return reverse('materia:despacho_inicial', kwargs={'pk': pk}) - - class LegislacaoCitadaView(FormView): template_name = "materia/legislacao_citada.html" form_class = LegislacaoCitadaForm diff --git a/templates/materia/despacho_inicial.html b/templates/materia/despacho_inicial.html deleted file mode 100644 index 8efe59f6d..000000000 --- a/templates/materia/despacho_inicial.html +++ /dev/null @@ -1,29 +0,0 @@ -{% extends "crud/detail.html" %} -{% load i18n %} -{% load crispy_forms_tags %} -{% block actions %} {% endblock %} -{% block detail_content %} -
- Matéria Legislativa - {% include "materia/resumo_detail_materia.html" %} - -
- Despachos - - - - - - - - {% for d in despachos %} - - - - - {% endfor %} -
ComissãoSigla
{{d.comissao.nome}}{{d.comissao.sigla}}
-
- {% crispy form %} -
-{% endblock %} diff --git a/templates/materia/despacho_inicial_edit.html b/templates/materia/despacho_inicial_edit.html deleted file mode 100644 index 05ddec8c2..000000000 --- a/templates/materia/despacho_inicial_edit.html +++ /dev/null @@ -1,7 +0,0 @@ -{% extends "crud/detail.html" %} -{% load i18n %} -{% load crispy_forms_tags %} -{% block actions %} {% endblock %} -{% block detail_content %} - {% crispy form %} -{% endblock %} diff --git a/templates/materia/subnav.yaml b/templates/materia/subnav.yaml index 75958fb46..45c21ec0a 100644 --- a/templates/materia/subnav.yaml +++ b/templates/materia/subnav.yaml @@ -5,7 +5,7 @@ - title: Autoria url: autoria_list - title: Despacho Inicial - url: despacho_inicial + url: despachoinicial_list - title: Documento Acessório url: documento_acessorio - title: Legislação Citada From 661545849d7fbe487031c774a01c86b5fd3d971b Mon Sep 17 00:00:00 2001 From: Eduardo Edson Batista Cordeiro Alves Date: Thu, 28 Apr 2016 11:38:27 -0300 Subject: [PATCH 10/19] Crud numeracao --- materia/forms.py | 30 ++++----- materia/layouts.yaml | 3 +- materia/tests/test_materia.py | 19 +++--- materia/urls.py | 11 ++-- materia/views.py | 87 ++++----------------------- templates/materia/numeracao.html | 35 ----------- templates/materia/numeracao_edit.html | 7 --- templates/materia/subnav.yaml | 2 +- 8 files changed, 39 insertions(+), 155 deletions(-) delete mode 100644 templates/materia/numeracao.html delete mode 100644 templates/materia/numeracao_edit.html diff --git a/materia/forms.py b/materia/forms.py index c03846d06..d90057bcb 100644 --- a/materia/forms.py +++ b/materia/forms.py @@ -315,25 +315,21 @@ class NumeracaoForm(ModelForm): 'ano_materia', 'data_materia'] - def __init__(self, excluir=False, *args, **kwargs): - more = [] - if excluir: - more = [Submit('Excluir', 'Excluir')] + def clean(self): + if self.errors: + return self.errors - row1 = crispy_layout_mixin.to_row( - [('tipo_materia', 12)]) - row2 = crispy_layout_mixin.to_row( - [('numero_materia', 4), ('ano_materia', 4), ('data_materia', 4)]) + try: + materia_anexada = MateriaLegislativa.objects.get( + numero=self.cleaned_data['numero_materia'], + ano=self.cleaned_data['ano_materia'], + tipo=self.cleaned_data['tipo_materia']) + except ObjectDoesNotExist: + msg = _('A matéria a ser inclusa não existe no cadastro' + ' de matérias legislativas.') + raise ValidationError(msg) - self.helper = FormHelper() - self.helper.layout = Layout( - Fieldset( - _('Incluir Numeração'), - row1, row2, - form_actions(more=more) - ) - ) - super(NumeracaoForm, self).__init__(*args, **kwargs) + return self.cleaned_data class AnexadaForm(ModelForm): diff --git a/materia/layouts.yaml b/materia/layouts.yaml index 958edc210..cafaeb94f 100644 --- a/materia/layouts.yaml +++ b/materia/layouts.yaml @@ -70,8 +70,7 @@ DocumentoAcessorio: Numeracao: Numeração: - - tipo_materia numero_materia - - ano_materia data_materia + - tipo_materia numero_materia ano_materia data_materia Orgao: Órgão: diff --git a/materia/tests/test_materia.py b/materia/tests/test_materia.py index 5cf871795..a72d8a497 100644 --- a/materia/tests/test_materia.py +++ b/materia/tests/test_materia.py @@ -170,17 +170,14 @@ def test_despacho_inicial_submit(client): @pytest.mark.django_db(transaction=False) def test_numeracao_submit(client): materia_principal = make_materia_principal() + materia = make_materia_principal() - # Cria dados para inserir na numeração - tipo = mommy.make(TipoMateriaLegislativa, - sigla='T2', - descricao='Teste_2') # Testa POST - response = client.post(reverse('materia:numeracao', + response = client.post(reverse('materia:numeracao_create', kwargs={'pk': materia_principal.pk}), - {'tipo_materia': tipo.pk, - 'numero_materia': '341', - 'ano_materia': 2015, + {'tipo_materia': materia.tipo.pk, + 'numero_materia': materia.numero, + 'ano_materia': materia.ano, 'data_materia': '2016-03-21', 'salvar': 'salvar'}, follow=True) @@ -189,8 +186,8 @@ def test_numeracao_submit(client): # Verifica se a numeração foi criada numeracao = Numeracao.objects.first() - assert numeracao.tipo_materia == tipo - assert numeracao.ano_materia == 2015 + assert numeracao.tipo_materia == materia.tipo + assert numeracao.ano_materia == materia.ano @pytest.mark.django_db(transaction=False) @@ -366,7 +363,7 @@ def test_form_errors_legislacao_citada(client): def test_form_errors_numeracao(client): materia_principal = make_materia_principal() - response = client.post(reverse('materia:numeracao', + response = client.post(reverse('materia:numeracao_create', kwargs={'pk': materia_principal.pk}), {'salvar': 'salvar'}, follow=True) diff --git a/materia/urls.py b/materia/urls.py index 012039406..26982c318 100644 --- a/materia/urls.py +++ b/materia/urls.py @@ -8,8 +8,8 @@ from materia.views import (AcompanhamentoConfirmarView, LegislacaoCitadaEditView, LegislacaoCitadaView, MateriaLegislativaCrud, MateriaLegislativaPesquisaView, MateriaTaView, - NumeracaoEditView, NumeracaoView, OrgaoCrud, - OrigemCrud, ProposicaoEditView, ProposicaoListView, + NumeracaoCrud, OrgaoCrud, OrigemCrud, + ProposicaoEditView, ProposicaoListView, ProposicaoTaView, ProposicaoView, RegimeTramitacaoCrud, RelatoriaEditView, RelatoriaView, StatusTramitacaoCrud, TipoAutorCrud, @@ -26,7 +26,8 @@ urlpatterns = [ url(r'^materia/', include(MateriaLegislativaCrud.get_urls() + AnexadaCrud.get_urls() + AutoriaCrud.get_urls() + - DespachoInicialCrud.get_urls())), + DespachoInicialCrud.get_urls() + + NumeracaoCrud.get_urls())), url(r'^materia/(?P[0-9]+)/ta$', @@ -57,10 +58,6 @@ urlpatterns = [ LegislacaoCitadaView.as_view(), name='legislacao_citada'), url(r'^materia/(?P\d+)/legislacao-citada/(?P\d+)/edit', LegislacaoCitadaEditView.as_view(), name='legislacao_citada_edit'), - url(r'^materia/(?P\d+)/numeracao$', - NumeracaoView.as_view(), name='numeracao'), - url(r'^materia/(?P\d+)/numeracao/(?P\d+)/edit', - NumeracaoEditView.as_view(), name='numeracao_edit'), url(r'^materia/(?P\d+)/documento-acessorio$', DocumentoAcessorioView.as_view(), name='documento_acessorio'), url(r'^materia/(?P\d+)/documento-acessorio/(?P\d+)/edit', diff --git a/materia/views.py b/materia/views.py index e59e7da6d..1a5534321 100644 --- a/materia/views.py +++ b/materia/views.py @@ -47,7 +47,6 @@ AnexadaCrud = Crud.build(Anexada, '') TipoAutorCrud = Crud.build(TipoAutor, 'tipo_autor') AutorCrud = Crud.build(Autor, 'autor') DocumentoAcessorioCrud = Crud.build(DocumentoAcessorio, '') -NumeracaoCrud = Crud.build(Numeracao, '') OrgaoCrud = Crud.build(Orgao, 'orgao') RelatoriaCrud = Crud.build(Relatoria, '') TipoProposicaoCrud = Crud.build(TipoProposicao, 'tipo_proposicao') @@ -60,6 +59,18 @@ AutoriaCrud = MasterDetailCrud.build(Autoria, 'materia', '') DespachoInicialCrud = MasterDetailCrud.build(DespachoInicial, 'materia', '') +class NumeracaoCrud(MasterDetailCrud): + model = Numeracao + parent_field = 'materia' + help_path = '' + + class CreateView(MasterDetailCrud.CreateView): + form_class = NumeracaoForm + + class UpdateView(MasterDetailCrud.UpdateView): + form_class = NumeracaoForm + + class AnexadaCrud(MasterDetailCrud): model = Anexada parent_field = 'materia_principal' @@ -222,80 +233,6 @@ class LegislacaoCitadaEditView(FormView): 'object': materia}) -class NumeracaoView(CreateView): - template_name = "materia/numeracao.html" - form_class = NumeracaoForm - - def get(self, request, *args, **kwargs): - materia = MateriaLegislativa.objects.get(id=kwargs['pk']) - numeracao = Numeracao.objects.filter(materia_id=kwargs['pk']) - - return self.render_to_response( - {'object': materia, - 'form': self.get_form(), - 'numeracao': numeracao}) - - def post(self, request, *args, **kwargs): - form = self.get_form() - materia = MateriaLegislativa.objects.get(id=kwargs['pk']) - numeracao_list = Numeracao.objects.filter( - materia_id=kwargs['pk']) - - if form.is_valid(): - numeracao = form.save(commit=False) - numeracao.materia = materia - numeracao.save() - return self.form_valid(form) - else: - return self.render_to_response({'form': form, - 'object': materia, - 'numeracao': numeracao_list}) - - def get_success_url(self): - pk = self.kwargs['pk'] - return reverse('materia:numeracao', kwargs={'pk': pk}) - - -class NumeracaoEditView(CreateView): - template_name = "materia/numeracao_edit.html" - form_class = NumeracaoForm - - def get(self, request, *args, **kwargs): - materia = MateriaLegislativa.objects.get(id=kwargs['pk']) - numeracao = Numeracao.objects.get(id=kwargs['id']) - form = NumeracaoForm(instance=numeracao, excluir=True) - - return self.render_to_response( - {'object': materia, - 'form': form, - 'numeracao': numeracao}) - - def post(self, request, *args, **kwargs): - form = self.get_form() - materia = MateriaLegislativa.objects.get(id=kwargs['pk']) - numeracao = Numeracao.objects.get(id=kwargs['id']) - - if form.is_valid(): - if 'excluir' in request.POST: - numeracao.delete() - elif 'salvar' in request.POST: - numeracao.materia = materia - numeracao.tipo_materia = form.cleaned_data['tipo_materia'] - numeracao.numero_materia = form.cleaned_data['numero_materia'] - numeracao.ano_materia = form.cleaned_data['ano_materia'] - numeracao.data_materia = form.cleaned_data['data_materia'] - numeracao.save() - return redirect(self.get_success_url()) - else: - return self.render_to_response({'form': form, - 'object': materia, - 'numeracao': numeracao}) - - def get_success_url(self): - pk = self.kwargs['pk'] - return reverse('materia:numeracao', kwargs={'pk': pk}) - - class DocumentoAcessorioView(CreateView): template_name = "materia/documento_acessorio.html" form_class = DocumentoAcessorioForm diff --git a/templates/materia/numeracao.html b/templates/materia/numeracao.html deleted file mode 100644 index 518ee133f..000000000 --- a/templates/materia/numeracao.html +++ /dev/null @@ -1,35 +0,0 @@ -{% extends "crud/detail.html" %} -{% load i18n %} -{% load crispy_forms_tags %} -{% block actions %} {% endblock %} -{% block detail_content %} -
- Matéria Legislativa - {% include "materia/resumo_detail_materia.html" %} - -
- Numeração - - - - - - - - - - - {% for n in numeracao %} - - - - - - - - {% endfor %} -
Tipo MatériaDescriçãoNúmeroAnoData
{{n.tipo_materia.sigla}}{{n.tipo_materia.descricao}}{{n.numero_materia}}{{n.ano_materia}}{{n.data_materia|date:'d/m/Y'}}
-
- {% crispy form %} -
-{% endblock %} diff --git a/templates/materia/numeracao_edit.html b/templates/materia/numeracao_edit.html deleted file mode 100644 index 139dd4117..000000000 --- a/templates/materia/numeracao_edit.html +++ /dev/null @@ -1,7 +0,0 @@ -{% extends "crud/detail.html" %} -{% load i18n %} -{% load crispy_forms_tags %} -{% block actions %} {% endblock %} -{% block detail_content %} - {% crispy form %} -{% endblock %} diff --git a/templates/materia/subnav.yaml b/templates/materia/subnav.yaml index 45c21ec0a..49d4d40e2 100644 --- a/templates/materia/subnav.yaml +++ b/templates/materia/subnav.yaml @@ -11,7 +11,7 @@ - title: Legislação Citada url: legislacao_citada - title: Numeração - url: numeracao + url: numeracao_list - title: Tramitação url: tramitacao_materia - title: Relatoria From ae56f60a9a182a9d79fba3d14a27e1f5a299b605 Mon Sep 17 00:00:00 2001 From: Eduardo Edson Batista Cordeiro Alves Date: Thu, 28 Apr 2016 11:39:50 -0300 Subject: [PATCH 11/19] Fix qa --- materia/forms.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/materia/forms.py b/materia/forms.py index d90057bcb..c964e8c72 100644 --- a/materia/forms.py +++ b/materia/forms.py @@ -320,7 +320,7 @@ class NumeracaoForm(ModelForm): return self.errors try: - materia_anexada = MateriaLegislativa.objects.get( + MateriaLegislativa.objects.get( numero=self.cleaned_data['numero_materia'], ano=self.cleaned_data['ano_materia'], tipo=self.cleaned_data['tipo_materia']) From 5df5ae76f3deb35f600a732e99647623f6e71de7 Mon Sep 17 00:00:00 2001 From: Edward Ribeiro Date: Fri, 29 Apr 2016 13:47:41 -0300 Subject: [PATCH 12/19] =?UTF-8?q?Adiciona=20ordena=C3=A7=C3=A3o=20padr?= =?UTF-8?q?=C3=A3o=20na=20busca=20de=20Numera=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- materia/migrations/0030_auto_20160429_1349.py | 19 +++++++++++++++++++ materia/models.py | 5 +++++ 2 files changed, 24 insertions(+) create mode 100644 materia/migrations/0030_auto_20160429_1349.py diff --git a/materia/migrations/0030_auto_20160429_1349.py b/materia/migrations/0030_auto_20160429_1349.py new file mode 100644 index 000000000..cfd764719 --- /dev/null +++ b/materia/migrations/0030_auto_20160429_1349.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9 on 2016-04-29 16:49 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('materia', '0029_auto_20160428_1020'), + ] + + operations = [ + migrations.AlterModelOptions( + name='numeracao', + options={'ordering': ('materia', 'tipo_materia', 'numero_materia', 'ano_materia', 'data_materia'), 'verbose_name': 'Numeração', 'verbose_name_plural': 'Numerações'}, + ), + ] diff --git a/materia/models.py b/materia/models.py index 28dc52e80..15e3e2590 100644 --- a/materia/models.py +++ b/materia/models.py @@ -317,6 +317,11 @@ class Numeracao(models.Model): class Meta: verbose_name = _('Numeração') verbose_name_plural = _('Numerações') + ordering = ('materia', + 'tipo_materia', + 'numero_materia', + 'ano_materia', + 'data_materia',) def __str__(self): return _('Nº%(numero)s %(tipo)s - %(data)s') % { From fa99dddf2f51402568cf5eed0d55d99002d7d327 Mon Sep 17 00:00:00 2001 From: Eduardo Edson Batista Cordeiro Alves Date: Fri, 29 Apr 2016 15:04:21 -0300 Subject: [PATCH 13/19] =?UTF-8?q?Valida=20numera=C3=A7=C3=A3o=20igual?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- materia/forms.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/materia/forms.py b/materia/forms.py index c964e8c72..1b9bf27e6 100644 --- a/materia/forms.py +++ b/materia/forms.py @@ -316,6 +316,7 @@ class NumeracaoForm(ModelForm): 'data_materia'] def clean(self): + if self.errors: return self.errors @@ -331,6 +332,21 @@ class NumeracaoForm(ModelForm): return self.cleaned_data + def save(self, commit=False): + numeracao = super(NumeracaoForm, self).save(commit) + try: + Numeracao.objects.get(materia=numeracao.materia, + tipo_materia=numeracao.tipo_materia, + ano_materia=numeracao.ano_materia, + numero_materia=numeracao.numero_materia) + except ObjectDoesNotExist: + numeracao.save() + else: + msg = _('Essa numeração já existe.') + raise ValidationError(msg) + + return numeracao + class AnexadaForm(ModelForm): From 4b5a062e5fd39e008fe244ce3037d5a95e4c2207 Mon Sep 17 00:00:00 2001 From: Eduardo Edson Batista Cordeiro Alves Date: Fri, 29 Apr 2016 15:30:15 -0300 Subject: [PATCH 14/19] =?UTF-8?q?Valida=C3=A7=C3=A3o=20de=20numera=C3=A7?= =?UTF-8?q?=C3=A3o=20igual?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- materia/forms.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/materia/forms.py b/materia/forms.py index 1b9bf27e6..c420b7bf6 100644 --- a/materia/forms.py +++ b/materia/forms.py @@ -316,7 +316,6 @@ class NumeracaoForm(ModelForm): 'data_materia'] def clean(self): - if self.errors: return self.errors @@ -330,6 +329,15 @@ class NumeracaoForm(ModelForm): ' de matérias legislativas.') raise ValidationError(msg) + if Numeracao.objects.filter( + materia=self.instance.materia, + tipo_materia=self.cleaned_data['tipo_materia'], + ano_materia=self.cleaned_data['ano_materia'], + numero_materia=self.cleaned_data['numero_materia'] + ).exists(): + msg = _('Essa numeração já foi cadastrada.') + raise ValidationError(msg) + return self.cleaned_data def save(self, commit=False): From f7947074238b38c67c90903597e980fbd148cc99 Mon Sep 17 00:00:00 2001 From: Eduardo Edson Batista Cordeiro Alves Date: Fri, 29 Apr 2016 15:34:08 -0300 Subject: [PATCH 15/19] =?UTF-8?q?Remove=20c=C3=B3digo=20n=C3=A3o=20usado?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- materia/forms.py | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/materia/forms.py b/materia/forms.py index c420b7bf6..a1727770b 100644 --- a/materia/forms.py +++ b/materia/forms.py @@ -340,21 +340,6 @@ class NumeracaoForm(ModelForm): return self.cleaned_data - def save(self, commit=False): - numeracao = super(NumeracaoForm, self).save(commit) - try: - Numeracao.objects.get(materia=numeracao.materia, - tipo_materia=numeracao.tipo_materia, - ano_materia=numeracao.ano_materia, - numero_materia=numeracao.numero_materia) - except ObjectDoesNotExist: - numeracao.save() - else: - msg = _('Essa numeração já existe.') - raise ValidationError(msg) - - return numeracao - class AnexadaForm(ModelForm): From 264cf53a688219f0756c379ff49e61a6a3e8ef37 Mon Sep 17 00:00:00 2001 From: Eduardo Edson Batista Cordeiro Alves Date: Fri, 29 Apr 2016 15:43:15 -0300 Subject: [PATCH 16/19] Valida despachos iguais --- materia/forms.py | 28 +++++++++++++++++++++++++--- materia/views.py | 20 ++++++++++++++++---- 2 files changed, 41 insertions(+), 7 deletions(-) diff --git a/materia/forms.py b/materia/forms.py index c03846d06..c986c423c 100644 --- a/materia/forms.py +++ b/materia/forms.py @@ -15,9 +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, 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 @@ -542,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 diff --git a/materia/views.py b/materia/views.py index e59e7da6d..0eeb7f268 100644 --- a/materia/views.py +++ b/materia/views.py @@ -25,9 +25,10 @@ from norma.models import LegislacaoCitada, NormaJuridica, TipoNormaJuridica from sapl.utils import get_base_url from .forms import (AcompanhamentoMateriaForm, AnexadaForm, - DocumentoAcessorioForm, LegislacaoCitadaForm, - MateriaLegislativaFilterSet, NumeracaoForm, ProposicaoForm, - RelatoriaForm, TramitacaoForm, filtra_tramitacao_destino, + DespachoInicialForm, DocumentoAcessorioForm, + LegislacaoCitadaForm, MateriaLegislativaFilterSet, + NumeracaoForm, ProposicaoForm, RelatoriaForm, + TramitacaoForm, filtra_tramitacao_destino, filtra_tramitacao_destino_and_status, filtra_tramitacao_status) from .models import (AcompanhamentoMateria, Anexada, Autor, Autoria, @@ -57,7 +58,18 @@ UnidadeTramitacaoCrud = Crud.build(UnidadeTramitacao, 'unidade_tramitacao') TramitacaoCrud = Crud.build(Tramitacao, '') AutoriaCrud = MasterDetailCrud.build(Autoria, 'materia', '') -DespachoInicialCrud = MasterDetailCrud.build(DespachoInicial, 'materia', '') + + +class DespachoInicialCrud(MasterDetailCrud): + model = DespachoInicial + parent_field = 'materia' + help_path = '' + + class CreateView(MasterDetailCrud.CreateView): + form_class = DespachoInicialForm + + class UpdateView(MasterDetailCrud.UpdateView): + form_class = DespachoInicialForm class AnexadaCrud(MasterDetailCrud): From 61079f45c08ee1a6fe576e2844cfc0051bc41c6c Mon Sep 17 00:00:00 2001 From: Eduardo Edson Batista Cordeiro Alves Date: Fri, 29 Apr 2016 16:15:15 -0300 Subject: [PATCH 17/19] =?UTF-8?q?Impede=20que=20seja=20adicionado=20dois?= =?UTF-8?q?=20autores=20iguais=20na=20mat=C3=A9ria?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- materia/forms.py | 29 ++++++++++++++++++++++++----- materia/views.py | 14 ++++++++++++-- 2 files changed, 36 insertions(+), 7 deletions(-) diff --git a/materia/forms.py b/materia/forms.py index 8ca7c3023..e6be32d9c 100644 --- a/materia/forms.py +++ b/materia/forms.py @@ -15,9 +15,10 @@ 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, DespachoInicial, - DocumentoAcessorio, MateriaLegislativa, Numeracao, - Proposicao, Relatoria, TipoMateriaLegislativa, Tramitacao) +from .models import (AcompanhamentoMateria, Anexada, Autor, Autoria, + DespachoInicial, DocumentoAcessorio, MateriaLegislativa, + Numeracao, Proposicao, Relatoria, TipoMateriaLegislativa, + Tramitacao) ANO_CHOICES = [('', '---------')] + RANGE_ANOS @@ -559,8 +560,6 @@ class DespachoInicialForm(ModelForm): if self.errors: return self.errors - cleaned_data = self.cleaned_data - if DespachoInicial.objects.filter( materia=self.instance.materia, comissao=self.cleaned_data['comissao'], @@ -569,3 +568,23 @@ class DespachoInicialForm(ModelForm): raise ValidationError(msg) return self.cleaned_data + + +class AutoriaForm(ModelForm): + + class Meta: + model = Autoria + fields = ['autor', 'partido', 'primeiro_autor'] + + def clean(self): + if self.errors: + return self.errors + + if Autoria.objects.filter( + materia=self.instance.materia, + autor=self.cleaned_data['autor'], + ).exists(): + msg = _('Esse Autor já foi cadastrado.') + raise ValidationError(msg) + + return self.cleaned_data diff --git a/materia/views.py b/materia/views.py index 56e2773e7..430946edc 100644 --- a/materia/views.py +++ b/materia/views.py @@ -24,7 +24,7 @@ from crud.masterdetail import MasterDetailCrud from norma.models import LegislacaoCitada, NormaJuridica, TipoNormaJuridica from sapl.utils import get_base_url -from .forms import (AcompanhamentoMateriaForm, AnexadaForm, +from .forms import (AcompanhamentoMateriaForm, AnexadaForm, AutoriaForm, DespachoInicialForm, DocumentoAcessorioForm, LegislacaoCitadaForm, MateriaLegislativaFilterSet, NumeracaoForm, ProposicaoForm, RelatoriaForm, @@ -56,7 +56,17 @@ StatusTramitacaoCrud = Crud.build(StatusTramitacao, 'status_tramitacao') UnidadeTramitacaoCrud = Crud.build(UnidadeTramitacao, 'unidade_tramitacao') TramitacaoCrud = Crud.build(Tramitacao, '') -AutoriaCrud = MasterDetailCrud.build(Autoria, 'materia', '') + +class AutoriaCrud(MasterDetailCrud): + model = Autoria + parent_field = 'materia' + help_path = '' + + class CreateView(MasterDetailCrud.CreateView): + form_class = AutoriaForm + + class UpdateView(MasterDetailCrud.UpdateView): + form_class = AutoriaForm class DespachoInicialCrud(MasterDetailCrud): From 61d43c971d67bd9ec91b08dfcdd873aeae9b0851 Mon Sep 17 00:00:00 2001 From: Marcio Mazza Date: Fri, 29 Apr 2016 16:38:33 -0300 Subject: [PATCH 18/19] =?UTF-8?q?Adiciona=20script=20para=20atualizar=20c?= =?UTF-8?q?=C3=B3digo=20de=20produ=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/atualizar_producao.sh | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100755 scripts/atualizar_producao.sh diff --git a/scripts/atualizar_producao.sh b/scripts/atualizar_producao.sh new file mode 100755 index 000000000..d9ab55a82 --- /dev/null +++ b/scripts/atualizar_producao.sh @@ -0,0 +1,7 @@ +#!/bin/bash +git pull +pip install -r requirements/dev-requirements.txt +./manage.py migrate +./manage.py bower install +./manage.py collectstatic --noinput +sudo supervisorctl restart sapl From 4f9ed658f102630de1f5a9b8365c5569a6161b97 Mon Sep 17 00:00:00 2001 From: Edward Ribeiro Date: Mon, 2 May 2016 12:54:11 -0300 Subject: [PATCH 19/19] =?UTF-8?q?Adiciona=20a=20ativa=C3=A7=C3=A3o/desativ?= =?UTF-8?q?a=C3=A7=C3=A3o=20do=20virtualenv?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/atualizar_producao.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scripts/atualizar_producao.sh b/scripts/atualizar_producao.sh index d9ab55a82..6649d3078 100755 --- a/scripts/atualizar_producao.sh +++ b/scripts/atualizar_producao.sh @@ -1,7 +1,9 @@ #!/bin/bash -git pull +git pull --rebase +workon sapl pip install -r requirements/dev-requirements.txt ./manage.py migrate ./manage.py bower install ./manage.py collectstatic --noinput +deactivate sudo supervisorctl restart sapl