diff --git a/sapl/legacy/migracao_dados.py b/sapl/legacy/migracao_dados.py index ab7c3472a..1773131e4 100644 --- a/sapl/legacy/migracao_dados.py +++ b/sapl/legacy/migracao_dados.py @@ -1862,7 +1862,7 @@ def get_apagados_que_geram_ocorrencias_fk(fks_faltando): for fk in fks_faltando: model_dependente = tabela_legado_p_model[fk["tabela"]] # não funciona para models em que o mapeamento de campos nao é direto - if model_dependente == Participacao: + if model_dependente in (Participacao, Autor): model_relacionado = { "cod_comissao": Comissao, "cod_parlamentar": Parlamentar, @@ -1882,6 +1882,10 @@ def get_apagados_que_geram_ocorrencias_fk(fks_faltando): if versions: [version] = versions # se há, deve ser único apagados.add((tabela_relacionada, campo_pk, version)) + # XXX poderíamos gerar aqui os parlementares apontados por autor + # para listar como restaurado para o usuário + # ... mas já está demais + # nós restauramos no método abaixo, mesmo sem o feedback desse detalhe return [(*_, encode_version(version)) for *_, version in apagados] @@ -1889,8 +1893,26 @@ def revert_delete_producao(dados_versions): if not dados_versions: return print("Revertendo registros apagados em produção...") + restaurados = [] for dados in dados_versions: print(dados) version = Version.objects.get(**dados) version.revert() + reverted = version.object + assert reverted + restaurados.append(reverted) + # restauramos objetos relacinados ao autor + # teoricamente precisaríamos fazer isso pra todas as generic relations + if isinstance(reverted, Autor): + apagados_relacionados = Version.objects.get_deleted( + reverted.content_type.model_class() + ) + rel = apagados_relacionados.filter(object_id=reverted.object_id) + if rel: + [rel] = rel + rel.revert() + assert reverted.autor_related + assert reverted.autor_related == rel.object + restaurados.append(rel) + print("... sucesso")