Repository: interlegis/sapl

Issue:
Data com valor nulo na migração da model NormaJuridica
```
django.db.utils.IntegrityError: null value in column "timestamp" violates not-null constraint
```

Esse erro é muito recorrente. Aparentemente o campo `timestamp` de NormaJuridica não deveria ser nulo, mas provavelmente no banco legado ele não tem nenhum valor.


Discussion:
Precisamos saber qual o significado desse campo `timestamp`. Se for só pra log de auditoria essa informação precisa ir pro `Django Reversion`.

@LeandroRoberto Ajuda?
campo desnecessário!
Certo... mas vc sabe o que significa esse campo, @LeandroRoberto ?
Resolveu? eu disse desnecessário pois vc cantou a pedra correta: "Se for só pra log de auditoria essa informação precisa ir pro Django Reversion."
Deveria mudar o campo no model pra ser nulável então?
Durante a migração, se existir valor nesse campo, mesmo que seu objetivo seja somente de auditoria e seja nulável, ele será migrado. Sendo migrado, automaticamente ele já será marcado no django reversion.

Outra opção seria mudar aqueles timestamps que são nulos pra um valor qualquer, assim como faço nos campos de data que são nulos ou inválidos, e marcá-los como problema de migração... mas essa não seria uma boa opção porque ninguém saberia qual o exato momento que aquela norma foi cadastrada.

Resolving patch:
diff --git a/sapl/legacy/migration.py b/sapl/legacy/migration.py
--- a/sapl/legacy/migration.py
+++ b/sapl/legacy/migration.py
@@ -580,11 +580,27 @@ def migrate(obj=appconfs, interativo=True):
 
 # MIGRATION_ADJUSTMENTS #####################################################
 
-def adjust_ordemdia(new, old):
+def adjust_ordemdia_antes_salvar(new, old):
     # Prestar atenção
     if not old.tip_votacao:
         new.tipo_votacao = 1
 
+    if old.num_ordem is None:
+        new.numero_ordem = 999999999
+
+
+def adjust_ordemdia_depois_salvar(new, old):
+    if old.num_ordem is None and new.numero_ordem == 999999999:
+        with reversion.create_revision():
+            problema = 'OrdemDia de PK %s tinha seu valor de numero ordem'\
+                ' nulo.' % old.pk
+            descricao = 'O valor %s foi colocado no lugar.' % new.numero_ordem
+            warn(problema + ' => ' + descricao)
+            save_relation(obj=new, problema=problema,
+                          descricao=descricao, eh_stub=False)
+            reversion.set_comment('OrdemDia sem número da ordem.')
+    pass
+
 
 def adjust_parlamentar(new, old):
     if old.ind_unid_deliberativa:
@@ -754,7 +770,7 @@ def adjust_comissao(new, old):
     Comissao: adjust_comissao,
     NormaJuridica: adjust_normajuridica_antes_salvar,
     NormaRelacionada: adjust_normarelacionada,
-    OrdemDia: adjust_ordemdia,
+    OrdemDia: adjust_ordemdia_antes_salvar,
     Parlamentar: adjust_parlamentar,
     Participacao: adjust_participacao,
     Protocolo: adjust_protocolo,
@@ -767,6 +783,7 @@ def adjust_comissao(new, old):
 
 AJUSTE_DEPOIS_SALVAR = {
     NormaJuridica: adjust_normajuridica_depois_salvar,
+    OrdemDia: adjust_ordemdia_depois_salvar,
     Protocolo: adjust_protocolo_depois_salvar,
     RegistroVotacao: adjust_registrovotacao_depois_salvar,
 }
diff --git a/sapl/norma/migrations/0004_auto_20170522_1115.py b/sapl/norma/migrations/0004_auto_20170522_1115.py
new file mode 100644
--- /dev/null
+++ b/sapl/norma/migrations/0004_auto_20170522_1115.py
@@ -0,0 +1,27 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.12 on 2017-05-22 11:15
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import sapl.norma.models
+import sapl.utils
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('norma', '0003_auto_20170510_1549'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='normajuridica',
+            name='texto_integral',
+            field=models.FileField(blank=True, null=True, upload_to=sapl.norma.models.norma_upload_path, validators=[sapl.utils.restringe_tipos_de_arquivo_txt], verbose_name='Texto Integral'),
+        ),
+        migrations.AlterField(
+            model_name='normajuridica',
+            name='timestamp',
+            field=models.DateTimeField(null=True),
+        ),
+    ]
diff --git a/sapl/norma/models.py b/sapl/norma/models.py
--- a/sapl/norma/models.py
+++ b/sapl/norma/models.py
@@ -116,7 +116,7 @@ class NormaJuridica(models.Model):
         AssuntoNorma, blank=True,
         verbose_name=_('Assuntos'))
     data_vigencia = models.DateField(blank=True, null=True)
-    timestamp = models.DateTimeField()
+    timestamp = models.DateTimeField(null=True)
 
     texto_articulado = GenericRelation(
         TextoArticulado, related_query_name='texto_articulado')


Test patch: