mirror of https://github.com/interlegis/sapl.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
156 lines
5.1 KiB
156 lines
5.1 KiB
2 years ago
|
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()
|