Browse Source

Migra documento adm mesmo sem protocolo

pull/1728/head
Marcio Mazza 7 years ago
parent
commit
2fb499fedf
  1. 1
      sapl/legacy/migracao_usuarios.py
  2. 36
      sapl/legacy/migration.py

1
sapl/legacy/migracao_usuarios.py

@ -92,3 +92,4 @@ def migra_usuarios():
usuario.groups.add(PERFIL_LEGADO_PARA_NOVO[perfil])
# apaga arquivo (importante pois contém senhas)
ARQUIVO_USUARIOS.remove()
print('Usuários migrados com sucesso.')

36
sapl/legacy/migration.py

@ -121,7 +121,9 @@ def warn(msg):
class ForeignKeyFaltando(ObjectDoesNotExist):
'Uma FK aponta para um registro inexistente'
pass
def __init__(self, msg=''):
self.msg = msg
@lru_cache()
@ -697,10 +699,11 @@ class DataMigrator:
self.populate_renamed_fields(new, old)
if ajuste_antes_salvar:
ajuste_antes_salvar(new, old)
except ForeignKeyFaltando:
except ForeignKeyFaltando as e:
# tentamos preencher uma FK e o ojeto relacionado
# não existe
# então este é um objeo órfão: simplesmente ignoramos
warn(e.msg)
continue
else:
if get_id_do_legado:
@ -749,19 +752,21 @@ def adjust_documentoadministrativo(new, old):
protocolo = Protocolo.objects.filter(
numero=old.num_protocolo, ano=new.ano)
if not protocolo:
# tentamos encontrar o protocolo no ano seguinte
protocolo = Protocolo.objects.filter(
numero=old.num_protocolo, ano=new.ano + 1)
print('PROTOCOLO ENCONTRADO APENAS PARA O ANO SEGUINTE!!!!! '
'DocumentoAdministrativo: {}, numero_protocolo: {}, '
'ano doc adm: {}'.format(
old.cod_documento, old.num_protocolo, new.ano))
if not protocolo:
raise ForeignKeyFaltando(
'Protocolo {} faltando '
'(referenciado no documento administrativo {}'.format(
old.num_protocolo, old.cod_documento))
assert len(protocolo) == 1
new.protocolo = protocolo[0]
if protocolo:
print('PROTOCOLO ENCONTRADO APENAS PARA O ANO SEGUINTE!!!!! '
'DocumentoAdministrativo: {}, numero_protocolo: {}, '
'ano doc adm: {}'.format(
old.cod_documento, old.num_protocolo, new.ano))
else:
warn('Protocolo {} faltando '
'(referenciado no documento administrativo {}'.format(
old.num_protocolo, old.cod_documento))
if protocolo:
assert len(protocolo) == 1, 'mais de um protocolo encontrado'
[new.protocolo] = protocolo
def adjust_mandato(new, old):
@ -954,8 +959,9 @@ def vincula_autor(new, old, model_relacionado, campo_relacionado, campo_nome):
new.autor_related = model_relacionado.objects.get(pk=pk_rel)
except ObjectDoesNotExist:
# ignoramos o autor órfão
raise ForeignKeyFaltando('{} inexiste para autor'.format(
model_relacionado._meta.verbose_name))
raise ForeignKeyFaltando(
'{} [pk={}] inexistente para autor'.format(
model_relacionado._meta.verbose_name, pk_rel))
else:
new.nome = getattr(new.autor_related, campo_nome)
return True

Loading…
Cancel
Save