diff --git a/legacy/migration.py b/legacy/migration.py index ddc8e0bfd..4fcd75708 100644 --- a/legacy/migration.py +++ b/legacy/migration.py @@ -13,8 +13,10 @@ from model_mommy.mommy import foreign_key_required, make from base.models import ProblemaMigracao from comissoes.models import Composicao, Participacao +from materia.models import StatusTramitacao, Tramitacao +from norma.models import NormaJuridica from parlamentares.models import Parlamentar -from sessao.models import SessaoPlenaria +from sessao.models import OrdemDia, SessaoPlenaria # BASE ###################################################################### @@ -229,6 +231,7 @@ class DataMigrator: def __init__(self): self.field_renames, self.model_renames = get_renames() self.data_mudada = {} + self.choice_valida = {} def populate_renamed_fields(self, new, old): renames = self.field_renames[type(new)] @@ -250,32 +253,18 @@ class DataMigrator: value = get_fk_related(field, old_value, label) else: value = getattr(old, old_field_name) - if (field_type == 'DateField' and - field.null is False and value is None): - names = [old_fields.name for old_fields - in old._meta.get_fields()] - combined_names = "(" + ")|(".join(names) + ")" - matches = re.search('(ano_\w+)', combined_names) - if not matches: - descricao = 'A data 0001-01-01 foi colocada no lugar' - warn(msg + - ' => ' + descricao) - value = '0001-01-01' - self.data_mudada['obj'] = new - self.data_mudada['descricao'] = descricao - self.data_mudada['problema'] = msg - else: - value = '%d-01-01' % getattr(old, matches.group(0)) - descricao = ('A data %s para foi colocada no lugar' - % value) - self.data_mudada['obj'] = new - self.data_mudada['descricao'] = descricao - self.data_mudada['problema'] = msg - warn(msg + - '=> ' + descricao) - if field_type == 'CharField' or field_type == 'TextField': - if value is None: - value = '' + if field_type == 'DateField' and \ + not field.null and value is None: + descricao = 'A data 0001-01-01 foi colocada no lugar' + warn(msg + + ' => ' + descricao) + value = '0001-01-01' + self.data_mudada['obj'] = new + self.data_mudada['descricao'] = descricao + self.data_mudada['problema'] = msg + if field_type in ('CharField', 'TextField') and field.blank \ + and value is None: + value = '' setattr(new, field.name, value) def migrate(self, obj=appconfs): @@ -404,14 +393,47 @@ def adjust_parlamentar(new_parlamentar, old): new_parlamentar.unidade_deliberativa = False +def adjust_normajuridica(new, old): + # O 'S' vem de 'Selecionar'. Na versão antiga do SAPL, quando uma opção do + # combobox era selecionada, o sistema pegava a primeira letra da seleção, + # sendo F para Federal, E para Estadual, M para Municipal e o S para + # Selecionar, que era a primeira opção quando nada era selecionado. + if old.tip_esfera_federacao == 'S': + new.esfera_federacao = '' + + +def adjust_ordemdia(new, old): + # Prestar atenção + if not old.tip_votacao: + new.tipo_votacao = 1 + + +def adjust_statustramitacao(new, old): + if old.ind_fim_tramitacao: + new.indicador = 'F' + elif old.ind_retorno_tramitacao: + new.indicador = 'R' + else: + new.indicador = '' + + +def adjust_tramitacao(new, old): + if old.sgl_turno == 'Ú': + new.turno = 'U' + + def adjust_sessaoplenaria(new, old): assert not old.tip_expediente MIGRATION_ADJUSTMENTS = { + NormaJuridica: adjust_normajuridica, + OrdemDia: adjust_ordemdia, Participacao: adjust_participacao, Parlamentar: adjust_parlamentar, SessaoPlenaria: adjust_sessaoplenaria, + StatusTramitacao: adjust_statustramitacao, + Tramitacao: adjust_tramitacao, } # CHECKS #################################################################### diff --git a/materia/models.py b/materia/models.py index 54111f2a6..2a03a570b 100644 --- a/materia/models.py +++ b/materia/models.py @@ -490,9 +490,8 @@ class StatusTramitacao(models.Model): sigla = models.CharField(max_length=10, verbose_name=_('Sigla')) descricao = models.CharField(max_length=60, verbose_name=_('Descrição')) - # TODO make specific migration considering both ind_fim_tramitacao, - # ind_retorno_tramitacao indicador = models.CharField( + blank=True, max_length=1, verbose_name=_('Indicador da Tramitação'), choices=INDICADOR_CHOICES) diff --git a/norma/migrations/0013_auto_20160510_1404.py b/norma/migrations/0013_auto_20160510_1404.py new file mode 100644 index 000000000..97d780cb5 --- /dev/null +++ b/norma/migrations/0013_auto_20160510_1404.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.5 on 2016-05-10 17:04 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('norma', '0012_auto_20160309_1407'), + ] + + operations = [ + migrations.AlterField( + model_name='vinculonormajuridica', + name='tipo_vinculo', + field=models.CharField(blank=True, choices=[('A', 'Altera a norma'), ('R', 'Revoga integralmente a norma'), ('P', 'Revoga parcialmente a norma'), ('T', 'Revoga integralmente por consolidação'), ('C', 'Norma correlata'), ('S', 'Ressalva a norma'), ('E', 'Reedita a norma'), ('I', 'Reedita a norma com alteração'), ('G', 'Regulamenta a norma'), ('K', 'Suspende parcialmente a norma'), ('L', 'Suspende integralmente a norma'), ('N', 'Julgada integralmente inconstitucional'), ('O', 'Julgada parcialmente inconstitucional')], max_length=1), + ), + ] diff --git a/norma/models.py b/norma/models.py index 06a4531d0..84c14d74b 100644 --- a/norma/models.py +++ b/norma/models.py @@ -166,12 +166,18 @@ class LegislacaoCitada(models.Model): class VinculoNormaJuridica(models.Model): TIPO_VINCULO_CHOICES = ( ('A', _('Altera a norma')), - ('R', _('Revoga a norma')), + ('R', _('Revoga integralmente a norma')), ('P', _('Revoga parcialmente a norma')), - ('T', _('Revoga por consolidação a norma')), + ('T', _('Revoga integralmente por consolidação')), ('C', _('Norma correlata')), - ('I', _('Suspende a execução da norma')), + ('S', _('Ressalva a norma')), + ('E', _('Reedita a norma')), + ('I', _('Reedita a norma com alteração')), ('G', _('Regulamenta a norma')), + ('K', _('Suspende parcialmente a norma')), + ('L', _('Suspende integralmente a norma')), + ('N', _('Julgada integralmente inconstitucional')), + ('O', _('Julgada parcialmente inconstitucional')), ) # TODO M2M ???