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()