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]) usuario.groups.add(PERFIL_LEGADO_PARA_NOVO[perfil])
# apaga arquivo (importante pois contém senhas) # apaga arquivo (importante pois contém senhas)
ARQUIVO_USUARIOS.remove() ARQUIVO_USUARIOS.remove()
print('Usuários migrados com sucesso.')

36
sapl/legacy/migration.py

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

Loading…
Cancel
Save