Browse Source

Adiciona criação de documento acessório, caso a proposicao tenha uma matéria

pull/527/head
Eduardo Edson Batista Cordeiro Alves 9 years ago
committed by Edward Ribeiro
parent
commit
7fddabf5f4
  1. 35
      sapl/materia/forms.py
  2. 35
      sapl/materia/migrations/0040_auto_20160810_1524.py
  3. 14
      sapl/materia/models.py
  4. 46
      sapl/materia/views.py
  5. 6
      sapl/templates/materia/proposicao_form.html

35
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']

35
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'),
),
]

14
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'),

46
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'

6
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();

Loading…
Cancel
Save