Repository: interlegis/sapl

Issue:
Receber proposição sem a necessidade do recibo ser apresentado



Discussion:

Resolving patch:
diff --git a/sapl/materia/forms.py b/sapl/materia/forms.py
--- a/sapl/materia/forms.py
+++ b/sapl/materia/forms.py
@@ -40,7 +40,7 @@
                         ChoiceWithoutValidationField,
                         MateriaPesquisaOrderingFilter, RangeWidgetOverride,
                         autor_label, autor_modal, models_with_gr_for_model,
-                        qs_override_django_filter)
+                        qs_override_django_filter, gerar_hash_arquivo)
 
 from .models import (AcompanhamentoMateria, Anexada, Autoria, DespachoInicial,
                      DocumentoAcessorio, Numeracao, Proposicao, Relatoria,
@@ -1113,9 +1113,14 @@ class ProposicaoForm(forms.ModelForm):
         widget=widgets.HiddenInput(),
         required=False)
 
+    receber_recibo = forms.TypedChoiceField(
+        choices=YES_NO_CHOICES,
+        label='Deseja protocolar com recibo?')
+
     class Meta:
         model = Proposicao
         fields = ['tipo',
+                  'receber_recibo',
                   'descricao',
                   'texto_original',
                   'materia_de_vinculo',
@@ -1123,11 +1128,13 @@ class Meta:
                   'tipo_materia',
                   'numero_materia',
                   'ano_materia',
-                  'tipo_texto']
+                  'tipo_texto',
+                  'hash_code']
 
         widgets = {
             'descricao': widgets.Textarea(attrs={'rows': 4}),
-            'tipo': TipoProposicaoSelect()}
+            'tipo': TipoProposicaoSelect(),
+            'hash_code': forms.HiddenInput(),}
 
     def __init__(self, *args, **kwargs):
         self.texto_articulado_proposicao = sapl.base.models.AppConfig.attr(
@@ -1149,11 +1156,13 @@ def __init__(self, *args, **kwargs):
                      to_column(('ano_materia', 4))
                      ),
 
+            to_column(('receber_recibo', 3)),
             to_column(
                 (Alert('teste',
                        css_class="ementa_materia hidden alert-info",
                        dismiss=False), 12)),
             to_column(('descricao', 12)),
+
         ]
 
         if self.texto_articulado_proposicao:
@@ -1196,6 +1205,7 @@ def clean_texto_original(self):
                     "Arquivo muito grande. ( > {0}MB )".format(max_size))
             return texto_original
 
+
     def clean(self):
         super(ProposicaoForm, self).clean()
 
@@ -1221,6 +1231,7 @@ def clean(self):
     def save(self, commit=True):
         cd = self.cleaned_data
         inst = self.instance
+
         if inst.pk:
             if 'tipo_texto' in cd:
 
@@ -1245,6 +1256,14 @@ def save(self, commit=True):
         inst.numero_proposicao = (
             numero__max + 1) if numero__max else 1
 
+        inst.save()
+        if cd['receber_recibo'] == 'True':
+            inst.hash_code = ''
+        else:
+            _hash = gerar_hash_arquivo(inst.texto_original.path, str(inst.pk))
+
+            inst.hash_code = _hash
+
         inst.save()
 
         return inst
diff --git a/sapl/materia/migrations/0023_proposicao_hash_code.py b/sapl/materia/migrations/0023_proposicao_hash_code.py
new file mode 100644
--- /dev/null
+++ b/sapl/materia/migrations/0023_proposicao_hash_code.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.13 on 2018-02-20 17:53
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('materia', '0022_auto_20180206_0908'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='proposicao',
+            name='hash_code',
+            field=models.CharField(blank=True, max_length=200, verbose_name='Código do Documento'),
+        ),
+    ]
diff --git a/sapl/materia/models.py b/sapl/materia/models.py
--- a/sapl/materia/models.py
+++ b/sapl/materia/models.py
@@ -649,6 +649,10 @@ class Proposicao(models.Model):
     numero_proposicao = models.PositiveIntegerField(
         blank=True, null=True, verbose_name=_('Número'))
 
+    hash_code = models.CharField(verbose_name=_('Código do Documento'),
+                                 max_length=200,
+                                 blank=True)
+
     """
     FIXME Campo não é necessário na modelagem e implementação atual para o
     módulo de proposições.


Test patch:
diff --git a/sapl/materia/tests/test_materia.py b/sapl/materia/tests/test_materia.py
--- a/sapl/materia/tests/test_materia.py
+++ b/sapl/materia/tests/test_materia.py
@@ -465,6 +465,7 @@ def test_proposicao_submit(admin_client):
              'autor': autor.pk,
              'texto_original': texto,
              'salvar': 'salvar',
+             'receber_recibo': 'True',
              },
             follow=True)