diff --git a/materia/forms.py b/materia/forms.py index 11c786949..186c6ba09 100644 --- a/materia/forms.py +++ b/materia/forms.py @@ -119,6 +119,7 @@ class DocumentoAcessorioForm(ModelForm): class Meta: model = DocumentoAcessorio fields = ['tipo', 'nome', 'data', 'autor', 'ementa', 'arquivo'] + widgets = {'autor': forms.HiddenInput()} widgets = {'autor': forms.HiddenInput()} @@ -155,6 +156,26 @@ class RelatoriaForm(ModelForm): return cleaned_data + class Meta: + model = Relatoria + fields = ['data_designacao_relator', 'comissao', 'parlamentar', + 'data_destituicao_relator', 'tipo_fim_relatoria'] + + widgets = {'comissao': forms.Select(attrs={'disabled': 'disabled'})} + + def clean(self): + cleaned_data = self.cleaned_data + + try: + comissao = Comissao.objects.get(id=self.initial['comissao']) + except ObjectDoesNotExist: + msg = _('A localização atual deve ser uma comissão.') + raise ValidationError(msg) + else: + cleaned_data['comissao'] = comissao + + return cleaned_data + class TramitacaoForm(ModelForm): diff --git a/materia/views.py b/materia/views.py index 345123cda..93c322221 100644 --- a/materia/views.py +++ b/materia/views.py @@ -57,7 +57,34 @@ ProposicaoCrud = Crud.build(Proposicao, '') StatusTramitacaoCrud = Crud.build(StatusTramitacao, 'status_tramitacao') UnidadeTramitacaoCrud = Crud.build(UnidadeTramitacao, 'unidade_tramitacao') -RelatoriaCrud = MasterDetailCrud.build(Relatoria, 'materia', '') + +class RelatoriaCrud(MasterDetailCrud): + model = Relatoria + parent_field = 'materia' + help_path = '' + + class CreateView(MasterDetailCrud.CreateView): + form_class = RelatoriaForm + + def get_initial(self): + materia = MateriaLegislativa.objects.get(id=self.kwargs['pk']) + + loc_atual = Tramitacao.objects.filter( + materia=materia).last() + + if loc_atual is None: + localizacao = 0 + else: + comissao = loc_atual.unidade_tramitacao_destino.comissao + if comissao: + localizacao = comissao.pk + else: + localizacao = 0 + + return {'comissao': localizacao} + + class UpdateView(MasterDetailCrud.UpdateView): + form_class = RelatoriaForm class RelatoriaCrud(MasterDetailCrud): @@ -128,6 +155,39 @@ class TramitacaoCrud(MasterDetailCrud): return HttpResponseRedirect(url) +def montar_row_autor(): + autor_row = crispy_layout_mixin.to_row( + [('autor', 0), + (Button('pesquisar', + 'Pesquisar Autor', + css_class='btn btn-primary btn-sm'), 2), + (Button('limpar', + 'Limpar Autor', + css_class='btn btn-primary btn-sm'), 10)]) + + return autor_row + + +def montar_helper_documento_acessorio(self): + autor_row = montar_row_autor() + self.helper = FormHelper() + self.helper.layout = crispy_layout_mixin.SaplFormLayout( + *self.get_layout()) + + # Adiciona o novo campo 'autor' e mecanismo de busca + self.helper.layout[0][0].append(HTML(sapl.utils.autor_label)) + self.helper.layout[0][0].append(HTML(sapl.utils.autor_modal)) + self.helper.layout[0][1] = autor_row + + # Remove botões que estão fora do form + self.helper.layout[1].pop() + + # Adiciona novos botões dentro do form + self.helper.layout[0][3][0].insert(1, form_actions(more=[ + HTML('Cancelar')])) + + class DocumentoAcessorioCrud(MasterDetailCrud): model = DocumentoAcessorio parent_field = 'materia' @@ -140,32 +200,7 @@ class DocumentoAcessorioCrud(MasterDetailCrud): form_class = DocumentoAcessorioForm def __init__(self, *args, **kwargs): - autor_row = crispy_layout_mixin.to_row( - [('autor', 0), - (Button('pesquisar', - 'Pesquisar Autor', - css_class='btn btn-primary btn-sm'), 2), - (Button('limpar', - 'Limpar Autor', - css_class='btn btn-primary btn-sm'), 10)]) - - self.helper = FormHelper() - self.helper.layout = crispy_layout_mixin.SaplFormLayout( - *self.get_layout()) - - # Adiciona o novo campo 'autor' e mecanismo de busca - self.helper.layout[0][0].append(HTML(sapl.utils.autor_label)) - self.helper.layout[0][0].append(HTML(sapl.utils.autor_modal)) - self.helper.layout[0][1] = autor_row - - # Remove botões que estão fora do form - self.helper.layout[1].pop() - - # Adiciona novos botões dentro do form - self.helper.layout[0][3][0].insert(1, form_actions(more=[ - HTML('Cancelar')])) - + montar_helper_documento_acessorio(self) super(CreateView, self).__init__(*args, **kwargs) def get_context_data(self, **kwargs): @@ -177,32 +212,7 @@ class DocumentoAcessorioCrud(MasterDetailCrud): form_class = DocumentoAcessorioForm def __init__(self, *args, **kwargs): - autor_row = crispy_layout_mixin.to_row( - [('autor', 0), - (Button('pesquisar', - 'Pesquisar Autor', - css_class='btn btn-primary btn-sm'), 2), - (Button('limpar', - 'Limpar Autor', - css_class='btn btn-primary btn-sm'), 10)]) - - self.helper = FormHelper() - self.helper.layout = crispy_layout_mixin.SaplFormLayout( - *self.get_layout()) - - # Adiciona o novo campo 'autor' e mecanismo de busca - self.helper.layout[0][0].append(HTML(sapl.utils.autor_label)) - self.helper.layout[0][0].append(HTML(sapl.utils.autor_modal)) - self.helper.layout[0][1] = autor_row - - # Remove botões que estão fora do form - self.helper.layout[1].pop() - - # Adiciona novos botões dentro do form - self.helper.layout[0][3][0].insert(1, form_actions(more=[ - HTML('Cancelar')])) - + montar_helper_documento_acessorio(self) super(UpdateView, self).__init__(*args, **kwargs) def get_context_data(self, **kwargs): @@ -258,7 +268,6 @@ class LegislacaoCitadaCrud(MasterDetailCrud): self.initial['tipo'] = self.object.norma.tipo.id self.initial['numero'] = self.object.norma.numero self.initial['ano'] = self.object.norma.ano - return self.initial class DetailView(MasterDetailCrud.DetailView): @@ -316,42 +325,6 @@ class MateriaLegislativaCrud(Crud): list_field_names = ['tipo', 'numero', 'ano', 'data_apresentacao'] -class DocumentoAcessorioView(CreateView): - template_name = "materia/documento_acessorio.html" - form_class = DocumentoAcessorioForm - - def get(self, request, *args, **kwargs): - materia = MateriaLegislativa.objects.get(id=kwargs['pk']) - docs = DocumentoAcessorio.objects.filter( - materia_id=kwargs['pk']).order_by('data') - form = DocumentoAcessorioForm() - - return self.render_to_response( - {'object': materia, - 'form': form, - 'docs': docs}) - - def post(self, request, *args, **kwargs): - form = self.get_form() - materia = MateriaLegislativa.objects.get(id=kwargs['pk']) - docs_list = DocumentoAcessorio.objects.filter( - materia_id=kwargs['pk']) - - if form.is_valid(): - documento_acessorio = form.save(commit=False) - documento_acessorio.materia = materia - documento_acessorio.save() - return self.form_valid(form) - else: - return self.render_to_response({'form': form, - 'object': materia, - 'docs': docs_list}) - - def get_success_url(self): - pk = self.kwargs['pk'] - return reverse('materia:documento_acessorio', kwargs={'pk': pk}) - - class AcompanhamentoConfirmarView(TemplateView): def get_redirect_url(self): diff --git a/protocoloadm/views.py b/protocoloadm/views.py index 5f874ef78..19e67e9ba 100644 --- a/protocoloadm/views.py +++ b/protocoloadm/views.py @@ -4,7 +4,7 @@ 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 Max, Q +from django.db.models import Q, Max from django.http import HttpResponse, HttpResponseRedirect from django.shortcuts import redirect from django.utils.translation import ugettext_lazy as _