From 7fddabf5f4c84562213060c49a4ea97eebda22ed Mon Sep 17 00:00:00 2001 From: Eduardo Edson Batista Cordeiro Alves Date: Wed, 10 Aug 2016 16:05:40 -0300 Subject: [PATCH] =?UTF-8?q?Adiciona=20cria=C3=A7=C3=A3o=20de=20documento?= =?UTF-8?q?=20acess=C3=B3rio,=20caso=20a=20proposicao=20tenha=20uma=20mat?= =?UTF-8?q?=C3=A9ria?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/materia/forms.py | 35 +++++++++----- .../migrations/0040_auto_20160810_1524.py | 35 ++++++++++++++ sapl/materia/models.py | 14 ++++-- sapl/materia/views.py | 46 ++++++++++++++++--- sapl/templates/materia/proposicao_form.html | 6 +-- 5 files changed, 111 insertions(+), 25 deletions(-) create mode 100644 sapl/materia/migrations/0040_auto_20160810_1524.py diff --git a/sapl/materia/forms.py b/sapl/materia/forms.py index e53e5976c..ad85c014a 100644 --- a/sapl/materia/forms.py +++ b/sapl/materia/forms.py @@ -100,21 +100,34 @@ class ProposicaoForm(ModelForm): def clean(self): cleaned_data = self.cleaned_data if 'tipo' in cleaned_data: - if cleaned_data['tipo'].descricao == 'Emenda': - try: - materia = MateriaLegislativa.objects.get( - tipo_id=cleaned_data['tipo_materia'], - ano=cleaned_data['ano_materia'], - numero=cleaned_data['numero_materia']) - except ObjectDoesNotExist: - msg = _('Matéria adicionada não existe!') - raise ValidationError(msg) + if cleaned_data['tipo'].descricao == 'Parecer': + if self.instance.materia: + cleaned_data['materia'] = self.instance.materia + cleaned_data['autor'] = ( + self.instance.materia.autoria_set.first().autor) else: - cleaned_data['materia'] = materia - cleaned_data['autor'] = materia.autoria_set.first().autor + try: + materia = MateriaLegislativa.objects.get( + tipo_id=cleaned_data['tipo_materia'], + ano=cleaned_data['ano_materia'], + numero=cleaned_data['numero_materia']) + except ObjectDoesNotExist: + msg = _('Matéria adicionada não existe!') + raise ValidationError(msg) + else: + cleaned_data['materia'] = materia + cleaned_data['autor'] = materia.autoria_set.first( + ).autor return cleaned_data + def save(self, commit=False): + proposicao = super(ProposicaoForm, self).save(commit) + if 'materia' in self.cleaned_data: + proposicao.materia = self.cleaned_data['materia'] + proposicao.save() + return proposicao + class Meta: model = Proposicao fields = ['tipo', 'data_envio', 'descricao', 'texto_original'] diff --git a/sapl/materia/migrations/0040_auto_20160810_1524.py b/sapl/materia/migrations/0040_auto_20160810_1524.py new file mode 100644 index 000000000..798bd8a64 --- /dev/null +++ b/sapl/materia/migrations/0040_auto_20160810_1524.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.5 on 2016-08-10 18:24 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('materia', '0039_auto_20160808_1753'), + ] + + operations = [ + migrations.RemoveField( + model_name='proposicao', + name='documento', + ), + migrations.AddField( + model_name='proposicao', + name='documento_gerado', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='materia.DocumentoAcessorio'), + ), + migrations.AddField( + model_name='proposicao', + name='materia_gerada', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='materia_gerada', to='materia.MateriaLegislativa'), + ), + migrations.AlterField( + model_name='proposicao', + name='materia', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='materia_vinculada', to='materia.MateriaLegislativa', verbose_name='Matéria'), + ), + ] diff --git a/sapl/materia/models.py b/sapl/materia/models.py index f6c0ec39f..816dcbd19 100644 --- a/sapl/materia/models.py +++ b/sapl/materia/models.py @@ -468,9 +468,17 @@ class Proposicao(models.Model): verbose_name=_('Status Proposição')) # mutually exclusive (depend on tipo.materia_ou_documento) materia = models.ForeignKey( - MateriaLegislativa, blank=True, null=True, verbose_name=_('Matéria')) - documento = models.ForeignKey( - DocumentoAcessorio, blank=True, null=True, verbose_name=_('Documento')) + MateriaLegislativa, blank=True, null=True, verbose_name=_('Matéria'), + related_name=_('materia_vinculada')) + + # Ao ser recebida, irá gerar uma nova matéria ou um documento acessorio + # de uma já existente + materia_gerada = models.ForeignKey( + MateriaLegislativa, blank=True, null=True, + related_name=_('materia_gerada')) + documento_gerado = models.ForeignKey( + DocumentoAcessorio, blank=True, null=True) + texto_original = models.FileField( upload_to=texto_upload_path, verbose_name=_('Texto Original'), diff --git a/sapl/materia/views.py b/sapl/materia/views.py index 50160ed0c..bfdb2b2e4 100644 --- a/sapl/materia/views.py +++ b/sapl/materia/views.py @@ -73,6 +73,24 @@ def criar_materia_proposicao(proposicao): ) +def criar_doc_proposicao(proposicao): + tipo_doc = TipoDocumento.objects.get( + descricao=proposicao.tipo.descricao) + if proposicao.autor is None: + autor = 'Desconhecido' + else: + autor = proposicao.autor + + return DocumentoAcessorio.objects.create( + materia=proposicao.materia, + tipo=tipo_doc, + arquivo=proposicao.texto_original, + nome=proposicao.descricao, + data=proposicao.data_envio, + autor=autor + ) + + class UnidadeTramitacaoCrud(Crud): model = UnidadeTramitacao help_path = 'unidade_tramitacao' @@ -99,17 +117,27 @@ class ReceberProposicao(CreateView): if form.is_valid(): proposicoes = Proposicao.objects.filter(data_envio__isnull=False) + for proposicao in proposicoes: hasher = gerar_hash_arquivo(proposicao.texto_original.path, str(proposicao.pk)) if hasher == form.cleaned_data['cod_hash']: proposicao.data_recebimento = datetime.now() - materia = criar_materia_proposicao(proposicao) - proposicao.materia = materia - proposicao.save() - return HttpResponseRedirect( - reverse('sapl.materia:materialegislativa_update', - kwargs={'pk': materia.pk})) + if proposicao.tipo.descricao == 'Parecer': + documento = criar_doc_proposicao(proposicao) + proposicao.documento_gerado = documento + proposicao.save() + return HttpResponseRedirect( + reverse('sapl.materia:documentoacessorio_update', + kwargs={'pk': documento.pk})) + else: + materia = criar_materia_proposicao(proposicao) + proposicao.materia_gerada = materia + proposicao.save() + return HttpResponseRedirect( + reverse('sapl.materia:materialegislativa_update', + kwargs={'pk': materia.pk})) + msg = 'Proposição não encontrada!' return self.render_to_response({'form': form, 'msg': msg}) else: @@ -137,6 +165,12 @@ class ProposicaoCrud(Crud): class UpdateView(CrudUpdateView): form_class = ProposicaoForm + def get_initial(self): + self.initial['tipo_materia'] = self.object.materia.tipo.id + self.initial['numero_materia'] = self.object.materia.numero + self.initial['ano_materia'] = self.object.materia.ano + return self.initial + @property def layout_key(self): return 'ProposicaoCreate' diff --git a/sapl/templates/materia/proposicao_form.html b/sapl/templates/materia/proposicao_form.html index 996e72258..d158d12a3 100644 --- a/sapl/templates/materia/proposicao_form.html +++ b/sapl/templates/materia/proposicao_form.html @@ -15,10 +15,6 @@ }); function disable_fields() { - $("#id_tipo_materia").val(""); - $("#id_numero_materia").val(""); - $("#id_ano_materia").val(""); - $("#id_tipo_materia").attr("disabled", "disabled"); $("#id_numero_materia").attr("disabled", "disabled"); $("#id_ano_materia").attr("disabled", "disabled"); @@ -34,7 +30,7 @@ $(function () { disable_fields(); $("#id_tipo").change(function() { - if ($('#id_tipo option:selected').text() == 'Emenda') { // parecer + if ($('#id_tipo option:selected').text() == 'Parecer') { // parecer enable_fields(); }else { disable_fields();