From c5a34e8dfd3dc92af9b726821313d76cb2fbe088 Mon Sep 17 00:00:00 2001 From: Guilherme Gondim Date: Wed, 16 Dec 2009 20:58:28 +0000 Subject: [PATCH] =?UTF-8?q?Adicionado=20script=20para=20migra=C3=A7=C3=A3o?= =?UTF-8?q?=20dos=20dados=20do=20SIGI=20antigo=20para=20o=20novo=20(ainda?= =?UTF-8?q?=20em=20desenvolvilmento).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- etc/migracao/migra.py | 334 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 334 insertions(+) create mode 100755 etc/migracao/migra.py diff --git a/etc/migracao/migra.py b/etc/migracao/migra.py new file mode 100755 index 0000000..c145767 --- /dev/null +++ b/etc/migracao/migra.py @@ -0,0 +1,334 @@ +#!/usr/bin/env python +# coding: utf-8 + +""" +Script para fazer a migração dos dados do SIGI antigo (Access), exportados para +CSV, para o novo SIGI. + +Conversão dos dados para CSV:: + + mdb-export -d "|" -D "%Y-%m-%d" .mdb "Assembléias" > assembleias.csv + mdb-export -d "|" -D "%Y-%m-%d" .mdb "municipios" > casas.csv + mdb-export -d "|" -D "%Y-%m-%d" .mdb "municipios_equipamentos" > equipamentos.csv + +Coloque os arquivos no diretório deste script e execute ``./migra.py`` para +fazer a migração. + +Nota: é recomendado que o banco de dados esteja em seu estado inicial (de +pós-instalação) para a migração dos dados. Este script não foi feito para um +banco de dados em produção. +""" + +from django.core.management import setup_environ +from sigi import settings +setup_environ(settings) + +import csv +from sigi.apps.casas.models import * +from sigi.apps.contatos.models import * +from sigi.apps.convenios.models import * +from sigi.apps.inventario.models import * +from sigi.apps.mesas.models import * +from sigi.apps.parlamentares.models import * + +ERROR_MSG_0 = (' %s[%s]: erro desconhecido! Possível erro de integridade ' + 'do banco de dados. Favor verificar e inserir manualmente caso ' + 'necessário.') +ERROR_MSG_1 = (' %s[%s]: erro ao inserir item, será necessário inserção ' + 'manual.') + +def migra_assembleias(filename): + """ TODO: CNPJ """ + # identificação das colunas nos arquivo CSV + UF_COL = 5 + NOME_COL = 8 + ENDERECO_COL = 39 + CEP_COL = 40 + EMAIL_COL = 41 + PAGINA_COL = 43 + OBS_COL = 37 + FONE_1_COL = 32 + FONE_2_COL = 33 + FAX_COL = 34 + FONE_PREFEITURA = 35 + PRESIDENTE_COL = 38 + EMAIL_PRESIDENTE_COL = 42 + REPRESENTANTE_COL = 83 + + reader = csv.reader(open(filename, 'r'), delimiter='|', skipinitialspace=True) + header = reader.next() + + for line in reader: + municipio = Municipio.objects.get(uf__sigla=line[UF_COL], is_capital=True) + casa = CasaLegislativa( + municipio=municipio, + nome=line[NOME_COL], + tipo='AL', + logradouro=line[ENDERECO_COL], + cep=line[CEP_COL], + email=line[EMAIL_COL], + pagina_web=line[PAGINA_COL], + observacoes=line[OBS_COL], + ) + if line[UF_COL] == 'DF': + casa.tipo = 'CD' + casa.save() + + if line[FONE_1_COL]: + fone1 = Telefone(numero=line[FONE_1_COL], tipo='F', content_object=casa) + fone1.save() + if line[FONE_2_COL]: + fone2 = Telefone(numero=line[FONE_2_COL], tipo='I', content_object=casa) + fone2.save() + if line[FAX_COL]: + fax = Telefone(numero=line[FAX_COL], tipo='X', content_object=casa) + fax.save() + if line[FONE_PREFEITURA]: + fone_prefeitura = Telefone( + numero=line[FONE_PREFEITURA], + tipo='F', + content_object=casa, + nota='Telefone da Prefeitura.' + ) + fone_prefeitura.save() + + if line[REPRESENTANTE_COL]: + representante = Contato(nome=line[REPRESENTANTE_COL], content_object=casa) + representante.save() + + if line[PRESIDENTE_COL]: + mesa = MesaDiretora(casa_legislativa=casa) + mesa.save() + parlamentar = Parlamentar(nome_completo=line[PRESIDENTE_COL], email=line[EMAIL_PRESIDENTE_COL]) + parlamentar.save() + cargo_presidente = Cargo.objects.get(descricao__iexact='presidente') + presidente = MembroMesaDiretora( + parlamentar=parlamentar, + cargo=cargo_presidente, + mesa_diretora=mesa + ) + presidente.save() + + +def migra_casas(filename): + """ TODO: CNPJ """ + # identificação das colunas no arquivo CSV + COD_IBGE_COL = 1 + NOME_COL = 8 + ENDERECO_COL = 39 + CEP_COL = 40 + EMAIL_COL = 41 + PAGINA_COL = 43 + OBS_COL = 37 + FONE_1_COL = 32 + FONE_2_COL = 33 + FAX_COL = 34 + FONE_PREFEITURA = 35 + PRESIDENTE_COL = 38 + EMAIL_PRESIDENTE_COL = 42 + REPRESENTANTE_COL = 83 + + reader = csv.reader(open(filename, 'r'), delimiter='|', skipinitialspace=True) + header = reader.next() + linenum = 1 + for line in reader: + linenum += 1 + + try: + municipio = Municipio.objects.get(codigo_ibge=line[COD_IBGE_COL]) + except Municipio.DoesNotExist: + print ERROR_MSG_1 % (filename, linenum) + continue + except ValueError: + print ERROR_MSG_1 % (filename, linenum) + continue + + casa = CasaLegislativa( + municipio=municipio, + nome=line[NOME_COL], + tipo='CM', + logradouro=line[ENDERECO_COL], + cep=line[CEP_COL], + email=line[EMAIL_COL], + pagina_web=line[PAGINA_COL], + observacoes=line[OBS_COL], + ) + try: + casa.save() + except: + print ERROR_MSG_0 % (filename, linenum) + continue + + if line[FONE_1_COL]: + fone1 = Telefone(numero=line[FONE_1_COL], tipo='F', content_object=casa) + fone1.save() + if line[FONE_2_COL]: + fone2 = Telefone(numero=line[FONE_2_COL], tipo='I', content_object=casa) + fone2.save() + if line[FAX_COL]: + fax = Telefone(numero=line[FAX_COL], tipo='X', content_object=casa) + fax.save() + if line[FONE_PREFEITURA]: + fone_prefeitura = Telefone( + numero=line[FONE_PREFEITURA], + tipo='F', + content_object=casa, + nota='Telefone da Prefeitura.' + ) + fone_prefeitura.save() + + if line[REPRESENTANTE_COL]: + representante = Contato(nome=line[REPRESENTANTE_COL], content_object=casa) + representante.save() + + if line[PRESIDENTE_COL]: + mesa = MesaDiretora(casa_legislativa=casa) + mesa.save() + parlamentar = Parlamentar(nome_completo=line[PRESIDENTE_COL], email=line[EMAIL_PRESIDENTE_COL]) + parlamentar.save() + cargo_presidente = Cargo.objects.get(descricao__iexact='presidente') + presidente = MembroMesaDiretora( + parlamentar=parlamentar, + cargo=cargo_presidente, + mesa_diretora=mesa + ) + presidente.save() + +def migra_equipamentos(filename): + UF_COL = 3 + NOME_CASA_COL = 4 + N_IMPRESSORA_COL = 51 + N_NOVADATA_COL = 48 + N_MICROCOMP_COL = 47 + N_MONITOR_COL = 52 + N_MODEM_COL = 53 + N_WEBCAM_COL = 55 + N_ROUTER_COL = 54 + N_ESTABILIZADOR = 56 + QUEM_RECEBEU_COL = 57 + + reader = csv.reader(open(filename, 'r'), delimiter='|', skipinitialspace=True) + header = reader.next() + linenum = 1 + + for line in reader: + linenum += 1 + try: + casa = CasaLegislativa.objects.get(nome=line[NOME_CASA_COL]]) + except CasaLegislativa.DoesNotExist: + print ERROR_MSG_1 % (filename, linenum) + continue + + fornecedor = Fornecedor.objects.get(nome__iexact="desconhecido") + + if line[N_IMPRESSORA_COL]: + impressora = Equipamento.objects.get(id=2) + bem = Bem( + casa_legislativa=casa, + fornecedor=fornecedor, + equipamento=impressora, + recebido_por=line[QUEM_RECEBEU_COL] + ) + bem.save() + + if line[N_NOVADATA_COL]: + novadata = Equipamento.objects.get(id=1) + bem = Bem( + casa_legislativa=casa, + fornecedor=fornecedor, + equipamento=novadata, + recebido_por=line[QUEM_RECEBEU_COL], + observacoes=('Número de nota de equipamento NOVADATA importado ', + 'do SIGI antigo.') + ) + bem.save() + + if line[N_MICROCOMP_COL]: + microcomp = Equipamento.objects.get(id=3) + bem = Bem( + casa_legislativa=casa, + fornecedor=fornecedor, + equipamento=microcomp, + recebido_por=line[QUEM_RECEBEU_COL] + ) + bem.save() + + if line[N_MONITOR_COL]: + monitor = Equipamento.objects.get(id=6) + bem = Bem( + casa_legislativa=casa, + fornecedor=fornecedor, + equipamento=monitor, + recebido_por=line[QUEM_RECEBEU_COL] + ) + bem.save() + + if line[N_MODEM_COL]: + modem = Equipamento.objects.get(id=5) + bem = Bem( + casa_legislativa=casa, + fornecedor=fornecedor, + equipamento=modem, + recebido_por=line[QUEM_RECEBEU_COL] + ) + bem.save() + + if line[N_WEBCAM_COL]: + webcam = Equipamento.objects.get(id=9) + bem = Bem( + casa_legislativa=casa, + fornecedor=fornecedor, + equipamento=webcam, + recebido_por=line[QUEM_RECEBEU_COL] + ) + bem.save() + + if line[N_ROUTER_COL]: + roteador = Equipamento.objects.get(id=8) + bem = Bem( + casa_legislativa=casa, + fornecedor=fornecedor, + equipamento=roteador, + recebido_por=line[QUEM_RECEBEU_COL] + ) + bem.save() + + if line[N_ESTABILIZADOR]: + estabilizador = Equipamento.objects.get(id=4) + bem = Bem( + casa_legislativa=casa, + fornecedor=fornecedor, + equipamento=estabilizador, + recebido_por=line[QUEM_RECEBEU_COL] + ) + bem.save() + +def migra_convenios(filename): + # identificação das colunas no arquivo CSV + STATUS_COL = 8 + NUM_PROCESSO_SF_COL = 39 + DATA_ADESAO_COL = 1 + DATA_TERMO_ACEITE_COL = 40 + DATA_RETORNO_ASSINATURA = 43 + DATA_PUB_DIARIO = 37 + DATA_DEV_VIA_CONV_CM = 32 + DATA_POSTAGEM_CORREIO = 33 + RECEBEU_ESTACAO = 34 + RECEBIDOS_COMO_PREVISTO = 35 + + reader = csv.reader(open(filename, 'r'), delimiter='|', skipinitialspace=True) + header = reader.next() + linenum = 1 + for line in reader: + linenum += 1 + + +if __name__ == '__main__': + print "" + migra_equipamentos('equipamentos.csv') + print "" + migra_assembleias('assembleias.csv') + print "" + migra_casas('casas.csv') + print "" + # migra_convenios('casas.csv')