diff --git a/sapl/legacy/migracao_dados.py b/sapl/legacy/migracao_dados.py index 566be1113..ab7c3472a 100644 --- a/sapl/legacy/migracao_dados.py +++ b/sapl/legacy/migracao_dados.py @@ -452,21 +452,31 @@ def get_autorias_sem_repeticoes(autoria, reapontamento): def unifica_autores_repetidos_no_legado(campo_agregador): "Reúne autores repetidos em um único, antes da migracão" + # usamos uma tupla neutra se o conjunto é vazio + # p q a query seja sintaticamente correta + ids_ja_migrados = _formatar_lista_para_sql( + get_all_ids_from_model(Autor) or [-1000] + ) + # enumeramos a repeticoes segundo o campo relevante # (p. ex. cod_parlamentar ou cod_comissao) # a ordenação prioriza, as entradas: + # - ja migradas previamente # - não excluidas, # - em seguida as que têm col_username, # - em seguida as que têm des_cargo autores = exec_legado( - """ - select {cod_parlamentar}, cod_autor from autor - where {cod_parlamentar} is not null - order by {cod_parlamentar}, - ind_excluido, col_username desc, des_cargo desc""".format( - cod_parlamentar=campo_agregador - ) + f""" + select {campo_agregador}, cod_autor, + (cod_autor in {ids_ja_migrados}) ja_migrado + from autor + where {campo_agregador} is not null + order by {campo_agregador}, + ja_migrado desc, + ind_excluido, col_username desc, des_cargo desc""" ) + # descartamos o último campo, usado apenas p ordenar corretamente + autores = [a[:-1] for a in autores] reapontamento, apagar = get_reapontamento_de_autores_repetidos(autores)