diff --git a/scripts/migracao_norma_materia.py b/scripts/migracao_norma_materia.py new file mode 100644 index 000000000..89128d355 --- /dev/null +++ b/scripts/migracao_norma_materia.py @@ -0,0 +1,155 @@ +import os + +import sapl.utils + +from sapl import settings +from sapl.norma.models import NormaJuridica, TipoNormaJuridica +from sapl.materia.models import MateriaLegislativa, TipoMateriaLegislativa, RegimeTramitacao +from django.utils import timezone + +from sapl.utils import texto_upload_path + + +def migra_atas_normas(tipos_array): + for t in tipos_array: + print(t['old_descricao']) + for x in NormaJuridica.objects.filter(tipo__descricao__icontains=t['old_descricao']): + tipo_materia = get_or_create_tipo_materia(t['sigla'], t['descricao']) + n_mat = create_materia_from_norma(x, tipo_materia) + if n_mat is not None: + if NormaJuridica.objects.get(pk=x.id).delete(): + print("Removida NormaJuridica:", x) + else: + print("Impossível copiar Norma para tipo Materia:", x) + + for t in tipos_array: + a = TipoNormaJuridica.objects.filter(descricao__icontains=t['old_descricao']).first() + print(a, t['old_descricao']) + if a is not None: + print("Removido TipoNormaJuridica:", a) + a.delete() + else: + print("Erro ao remover TipoNormaJuridica:", a) + + +def get_or_create_tipo_materia(sigla, descricao): + tipo_materia = TipoMateriaLegislativa.objects.filter(descricao=descricao, sigla=sigla).first() + + if not tipo_materia: + tipo_materia = TipoMateriaLegislativa(sigla=sigla, descricao=descricao) + tipo_materia.save() + + return tipo_materia + + +def create_materia_from_norma(norma, tipo): + if not norma or not tipo: + print("Norma e/ou tipo invalidos:", norma, tipo) + return False + else: + n_materia = MateriaLegislativa() + n_materia.tipo = tipo + if norma.numero: + n_materia.numero = norma.numero + if norma.ano: + n_materia.ano = norma.ano + if norma.data_publicacao: + n_materia.data_publicacao = norma.data_publicacao + if norma.ementa: + n_materia.ementa = norma.ementa + if norma.texto_integral: + n_materia.texto_original = norma.texto_integral + if norma.data_ultima_atualizacao: + n_materia.data_ultima_atualizacao = norma.data_ultima_atualizacao + if norma.user: + n_materia.user = norma.user + if norma.ip: + n_materia.ip = norma.ip + if norma.ultima_edicao: + n_materia.ultima_edicao = norma.ultima_edicao + if norma.data is None: + n_materia.data_apresentacao = timezone.now() + else: + n_materia.data_apresentacao = norma.data + n_materia.regime_tramitacao = RegimeTramitacao.objects.first() + + n_materia.save() + print("Criada nova MateriaLegislativa:", n_materia.__str__()) + update_file_location_to_new_model(n_materia) + return True + + +def update_file_location_to_new_model(new_model): + try: + initial_path = new_model.texto_original.path + except ValueError: + print("arquivo não existe", new_model.texto_original.name) + return False + + if not os.path.exists(initial_path): + print("Arquivo nao existe:", initial_path) + return False + + # get new path using already defined function + print(os.path.basename(new_model.texto_original.name)) + new_name = texto_upload_path(new_model, os.path.basename(new_model.texto_original.name), subpath=new_model.ano) + new_path = os.path.join(settings.MEDIA_ROOT, new_name) + print("New name:", new_name) + print("Novo diretorio:", new_path) + # check if the dir exists + if not os.path.exists(os.path.dirname(new_path)): + print("criando novo diretorio...:", os.path.dirname(new_path)) + os.makedirs(os.path.dirname(new_path)) + + if os.path.exists(os.path.dirname(new_path)): + print("movendo arquivo de local:", new_path) + os.rename(initial_path, new_path) + # Update the file field + new_model.texto_original.name = new_name + new_model.save() + print("success!", new_model.texto_original) + return True + else: + print("Não foi possível criar diretorio:", os.path.dirname(new_path)) + + return False + + +def main(): + tipos_movimentacao = [ + { + 'old_descricao': 'ATA COMISS', + 'descricao': 'Ata de Comissão', + 'sigla': 'ACM' + }, + { + 'old_descricao': 'ATA CPI Nº 01', + 'descricao': 'Ata CPI', + 'sigla': 'ACPI' + }, + { + 'old_descricao': 'Atas Audiências Públicas', + 'descricao': 'Ata de Audiência Pública', + 'sigla': 'AAP' + }, + { + 'old_descricao': 'ATAS DA CPI Nº 2', + 'descricao': 'Ata de CPI', + 'sigla': 'ACPI' + }, + { + 'old_descricao': 'Atas Reuniões Extraordinárias', + 'descricao': 'Ata de Reunião Extraordinária', + 'sigla': 'ARE' + }, + { + 'old_descricao': 'Atas Reuniões Ordinárias', + 'descricao': 'Ata de Reunião Ordinária', + 'sigla': 'ARO' + }, + ] + migra_atas_normas(tipos_movimentacao) + + +if __name__ == '__main__': + main()