-
Notifications
You must be signed in to change notification settings - Fork 81
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Script para migração de dados do tipo norma para materia
- Loading branch information
joao
committed
Aug 24, 2022
1 parent
435cd0d
commit 45abf51
Showing
1 changed file
with
155 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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() |