|
@ -1,6 +1,5 @@ |
|
|
|
|
|
|
|
|
#!/usr/bin/env python |
|
|
#!/usr/bin/env python |
|
|
# coding: utf-8 |
|
|
# -*- coding: utf-8 -*- |
|
|
|
|
|
|
|
|
""" |
|
|
""" |
|
|
Script para fazer a migração dos dados do SIGI antigo (Access), exportados para |
|
|
Script para fazer a migração dos dados do SIGI antigo (Access), exportados para |
|
@ -38,29 +37,31 @@ ERROR_MSG_0 = ('<ERRO> %s[%s]: erro desconhecido! Possível erro de integridade |
|
|
'necessário.') |
|
|
'necessário.') |
|
|
ERROR_MSG_1 = ('<ERRO> %s[%s]: erro ao inserir item, será necessário inserção ' |
|
|
ERROR_MSG_1 = ('<ERRO> %s[%s]: erro ao inserir item, será necessário inserção ' |
|
|
'manual.') |
|
|
'manual.') |
|
|
|
|
|
OBS_CONVENIO = ('Convênio sem termo de adesão') |
|
|
|
|
|
|
|
|
def migra_assembleias(filename): |
|
|
def migra_assembleias(filename): |
|
|
# identificação das colunas nos arquivo CSV |
|
|
# identificação das colunas nos arquivo CSV |
|
|
UF_COL = 5 |
|
|
UF_COL = 5 |
|
|
NOME_COL = 8 |
|
|
NOME_COL = 8 |
|
|
ENDERECO_COL = 39 |
|
|
|
|
|
CEP_COL = 40 |
|
|
|
|
|
EMAIL_COL = 41 |
|
|
|
|
|
PAGINA_COL = 43 |
|
|
|
|
|
OBS_COL = 37 |
|
|
|
|
|
FONE_1_COL = 32 |
|
|
FONE_1_COL = 32 |
|
|
FONE_2_COL = 33 |
|
|
FONE_2_COL = 33 |
|
|
FAX_COL = 34 |
|
|
FAX_COL = 34 |
|
|
FONE_PREFEITURA = 35 |
|
|
FONE_PREFEITURA = 35 |
|
|
|
|
|
OBS_COL = 37 |
|
|
PRESIDENTE_COL = 38 |
|
|
PRESIDENTE_COL = 38 |
|
|
|
|
|
ENDERECO_COL = 39 |
|
|
|
|
|
CEP_COL = 40 |
|
|
|
|
|
EMAIL_COL = 41 |
|
|
EMAIL_PRESIDENTE_COL = 42 |
|
|
EMAIL_PRESIDENTE_COL = 42 |
|
|
REPRESENTANTE_COL = 86 |
|
|
PAGINA_COL = 43 |
|
|
|
|
|
#REPRESENTANTE_COL = 86 |
|
|
|
|
|
|
|
|
reader = csv.reader(open(filename, 'r'), delimiter='|', skipinitialspace=True) |
|
|
reader = csv.reader(open(filename, 'r'), delimiter='|', skipinitialspace=True) |
|
|
header = reader.next() |
|
|
header = reader.next() |
|
|
|
|
|
|
|
|
for line in reader: |
|
|
for line in reader: |
|
|
municipio = Municipio.objects.get(uf__sigla=line[UF_COL], is_capital=True) |
|
|
uf = UnidadeFederativa.objects.get(sigla=line[UF_COL]) |
|
|
|
|
|
municipio = Municipio.objects.get(uf=uf, is_capital=True) |
|
|
casa = CasaLegislativa( |
|
|
casa = CasaLegislativa( |
|
|
municipio=municipio, |
|
|
municipio=municipio, |
|
|
nome=line[NOME_COL], |
|
|
nome=line[NOME_COL], |
|
@ -93,9 +94,9 @@ def migra_assembleias(filename): |
|
|
) |
|
|
) |
|
|
fone_prefeitura.save() |
|
|
fone_prefeitura.save() |
|
|
|
|
|
|
|
|
if line[REPRESENTANTE_COL]: |
|
|
# if line[REPRESENTANTE_COL]: |
|
|
representante = Contato(nome=line[REPRESENTANTE_COL], content_object=casa) |
|
|
# representante = Contato(nome=line[REPRESENTANTE_COL], content_object=casa) |
|
|
representante.save() |
|
|
# representante.save() |
|
|
|
|
|
|
|
|
if line[PRESIDENTE_COL]: |
|
|
if line[PRESIDENTE_COL]: |
|
|
mesa = MesaDiretora(casa_legislativa=casa) |
|
|
mesa = MesaDiretora(casa_legislativa=casa) |
|
@ -134,15 +135,19 @@ def migra_casas(filename): |
|
|
linenum = 1 |
|
|
linenum = 1 |
|
|
for line in reader: |
|
|
for line in reader: |
|
|
linenum += 1 |
|
|
linenum += 1 |
|
|
|
|
|
|
|
|
try: |
|
|
try: |
|
|
municipio = Municipio.objects.get(codigo_ibge=line[COD_IBGE_COL]) |
|
|
municipio = Municipio.objects.get(codigo_ibge=line[COD_IBGE_COL]) |
|
|
except Municipio.DoesNotExist: |
|
|
except Municipio.DoesNotExist: |
|
|
|
|
|
print "Municipio não existe" |
|
|
print ERROR_MSG_1 % (filename, linenum) |
|
|
print ERROR_MSG_1 % (filename, linenum) |
|
|
continue |
|
|
continue |
|
|
except ValueError: |
|
|
except ValueError: |
|
|
print ERROR_MSG_1 % (filename, linenum) |
|
|
print ERROR_MSG_1 % (filename, linenum) |
|
|
continue |
|
|
continue |
|
|
|
|
|
parlamentar=None |
|
|
|
|
|
if(line[PRESIDENTE_COL]): |
|
|
|
|
|
parlamentar = Parlamentar(nome_completo=line[PRESIDENTE_COL], email=line[EMAIL_PRESIDENTE_COL]) |
|
|
|
|
|
parlamentar.save() |
|
|
casa = CasaLegislativa( |
|
|
casa = CasaLegislativa( |
|
|
municipio=municipio, |
|
|
municipio=municipio, |
|
|
nome='Câmara Municipal de ' + line[NOME_COL], |
|
|
nome='Câmara Municipal de ' + line[NOME_COL], |
|
@ -152,10 +157,13 @@ def migra_casas(filename): |
|
|
email=line[EMAIL_COL], |
|
|
email=line[EMAIL_COL], |
|
|
pagina_web=line[PAGINA_COL], |
|
|
pagina_web=line[PAGINA_COL], |
|
|
observacoes=line[OBS_COL], |
|
|
observacoes=line[OBS_COL], |
|
|
|
|
|
parlamentar=parlamentar, |
|
|
) |
|
|
) |
|
|
|
|
|
|
|
|
try: |
|
|
try: |
|
|
casa.save() |
|
|
casa.save() |
|
|
except: |
|
|
except: |
|
|
|
|
|
print "Erro ao inserir casa..." |
|
|
print ERROR_MSG_0 % (filename, linenum) |
|
|
print ERROR_MSG_0 % (filename, linenum) |
|
|
continue |
|
|
continue |
|
|
|
|
|
|
|
@ -217,35 +225,67 @@ def migra_cnpj(filename): |
|
|
except ValueError: |
|
|
except ValueError: |
|
|
print ERROR_MSG_1 % (filename, linenum) |
|
|
print ERROR_MSG_1 % (filename, linenum) |
|
|
continue |
|
|
continue |
|
|
casa.cnpj = line[COD_CNPJ1_COL] if not 'BRANCO' in line[COD_CNPJ1_COL] else line[COD_CNPJ2_COL] |
|
|
casa.cnpj = line[COD_CNPJ1_COL] if not 'EM BRANCO' in line[COD_CNPJ1_COL] else line[COD_CNPJ2_COL] |
|
|
casa.save() |
|
|
casa.save() |
|
|
|
|
|
|
|
|
def migra_convenios_casas(filename): |
|
|
def migra_convenios_casas(filename): |
|
|
|
|
|
""" |
|
|
|
|
|
Será preciso cadastrar no banco os seguintes Projeto: |
|
|
|
|
|
1 - Projeto Interlegis |
|
|
|
|
|
2 - Programa Piloto de Modernização |
|
|
|
|
|
""" |
|
|
def get_datetime_obj(data): |
|
|
def get_datetime_obj(data): |
|
|
ldata = data.split('-') |
|
|
ldata = data.split('-') |
|
|
if len(ldata) != 3: |
|
|
if len(ldata) != 3: |
|
|
return None |
|
|
return None |
|
|
return datetime(int(ldata[0]), int(ldata[1]), int(ldata[2])) |
|
|
return datetime(int(ldata[0]), int(ldata[1]), int(ldata[2])) |
|
|
|
|
|
|
|
|
|
|
|
projeto1 = Projeto(nome="Projeto Interlegis") |
|
|
|
|
|
projeto1.save() |
|
|
|
|
|
projeto2 = Projeto(nome="Projeto Piloto de Modernização") |
|
|
|
|
|
projeto2.save() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# identificação das colunas no arquivo CSV |
|
|
# identificação das colunas no arquivo CSV |
|
|
|
|
|
# No arquivo CSV colunas que contém _100 são do Programa Interlegis |
|
|
COD_IBGE_COL = 1 |
|
|
COD_IBGE_COL = 1 |
|
|
NUM_PROCESSO_SF_COL = 25 |
|
|
|
|
|
DATA_ADESAO_COL = 10 |
|
|
DATA_ADESAO_COL = 10 |
|
|
DATA_TERMO_ACEITE_COL = 21 |
|
|
DATA_TERMO_ACEITE_COL = 21 |
|
|
|
|
|
NUM_CONVENIO_COL = 23 |
|
|
|
|
|
DATA_POSTAGEM_CORREIO = 26 |
|
|
|
|
|
NUM_PROCESSO_SF_COL = 27 |
|
|
DATA_RETORNO_ASSINATURA = 28 |
|
|
DATA_RETORNO_ASSINATURA = 28 |
|
|
DATA_PUB_DIARIO = 30 |
|
|
DATA_PUB_DIARIO = 30 |
|
|
DATA_DEV_VIA_CONV_CM = 32 |
|
|
DATA_DEV_VIA_CONV_CM = 32 |
|
|
DATA_POSTAGEM_CORREIO = 26 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DATA_ADESAO_100_COL = 11 |
|
|
|
|
|
DATA_TERMO_ACEITE_100_COL = 22 |
|
|
|
|
|
NUM_CONVENIO_100_COL = 24 |
|
|
|
|
|
NUM_PROCESSO_SF_100_COL = 25 |
|
|
|
|
|
DATA_RETORNO_ASSINATURA_100_COL = 29 |
|
|
|
|
|
DATA_PUB_DIARIO_100_COL = 31 |
|
|
|
|
|
#DATA_DEV_VIA_CONV_CM_100 = 32 Não foi registrado para as 100 |
|
|
|
|
|
#DATA_POSTAGEM_CORREIO_100 = 26 |
|
|
|
|
|
|
|
|
reader = csv.reader(open(filename, 'r'), delimiter='|', skipinitialspace=True) |
|
|
reader = csv.reader(open(filename, 'r'), delimiter='|', skipinitialspace=True) |
|
|
header = reader.next() |
|
|
header = reader.next() |
|
|
linenum = 1 |
|
|
linenum = 1 |
|
|
|
|
|
###Geração de arquivos para análise### |
|
|
|
|
|
import codecs |
|
|
|
|
|
f1 = codecs.open('file1.txt','w' , encoding="utf-8") |
|
|
|
|
|
f1.write(u'Casas que não tem Número Processo Senado Federal\n') |
|
|
|
|
|
f2 = codecs.open('file2.txt','w', encoding="utf-8") |
|
|
|
|
|
f2.write(u'Casas que não tem data de adesão e não tem convênio mas recebeu equipamentos\n') |
|
|
|
|
|
###### |
|
|
for line in reader: |
|
|
for line in reader: |
|
|
linenum += 1 |
|
|
linenum += 1 |
|
|
|
|
|
|
|
|
try: |
|
|
try: |
|
|
casa = CasaLegislativa.objects.get(municipio__codigo_ibge=line[COD_IBGE_COL]) |
|
|
casa = CasaLegislativa.objects.get(municipio__codigo_ibge=line[COD_IBGE_COL]) |
|
|
except CasaLegislativa.DoesNotExist: |
|
|
except CasaLegislativa.DoesNotExist: |
|
|
|
|
|
print "Erro ao inserir convênio. Casa não existe" |
|
|
print ERROR_MSG_1 % (filename, linenum) |
|
|
print ERROR_MSG_1 % (filename, linenum) |
|
|
continue |
|
|
continue |
|
|
except CasaLegislativa.MultipleObjectsReturned: |
|
|
except CasaLegislativa.MultipleObjectsReturned: |
|
@ -255,21 +295,68 @@ def migra_convenios_casas(filename): |
|
|
print ERROR_MSG_1 % (filename, linenum) |
|
|
print ERROR_MSG_1 % (filename, linenum) |
|
|
continue |
|
|
continue |
|
|
|
|
|
|
|
|
convenio = Convenio( |
|
|
# Se o convênio não tiver data de adesão mas tiver data retorno assinatura copiar essa data para a data de adesão. |
|
|
|
|
|
obs = '' |
|
|
|
|
|
projeto = None |
|
|
|
|
|
convenio1=None |
|
|
|
|
|
convenio2=None |
|
|
|
|
|
if line[DATA_ADESAO_COL]=='1001-01-01' and line[DATA_RETORNO_ASSINATURA].__len__()!=0: |
|
|
|
|
|
line[DATA_ADESAO_COL] = line[DATA_RETORNO_ASSINATURA] |
|
|
|
|
|
obs = OBS_CONVENIO |
|
|
|
|
|
|
|
|
|
|
|
if line[DATA_ADESAO_COL]!='1001-01-01': |
|
|
|
|
|
projeto = Projeto.objects.get(id=1) |
|
|
|
|
|
|
|
|
|
|
|
if projeto: |
|
|
|
|
|
convenio1 = Convenio( |
|
|
casa_legislativa=casa, |
|
|
casa_legislativa=casa, |
|
|
|
|
|
projeto=projeto, |
|
|
num_processo_sf=line[NUM_PROCESSO_SF_COL], |
|
|
num_processo_sf=line[NUM_PROCESSO_SF_COL], |
|
|
|
|
|
num_convenio=line[NUM_CONVENIO_COL], |
|
|
data_adesao=get_datetime_obj(line[DATA_ADESAO_COL]), |
|
|
data_adesao=get_datetime_obj(line[DATA_ADESAO_COL]), |
|
|
data_retorno_assinatura=get_datetime_obj(line[DATA_TERMO_ACEITE_COL]), |
|
|
data_retorno_assinatura=get_datetime_obj(line[DATA_TERMO_ACEITE_COL]), |
|
|
data_pub_diario=get_datetime_obj(line[DATA_RETORNO_ASSINATURA]), |
|
|
data_pub_diario=get_datetime_obj(line[DATA_RETORNO_ASSINATURA]), |
|
|
data_termo_aceite=get_datetime_obj(line[DATA_PUB_DIARIO]), |
|
|
data_termo_aceite=get_datetime_obj(line[DATA_PUB_DIARIO]), |
|
|
data_devolucao_via=get_datetime_obj(line[DATA_DEV_VIA_CONV_CM]), |
|
|
data_devolucao_via=get_datetime_obj(line[DATA_DEV_VIA_CONV_CM]), |
|
|
data_postagem_correio=get_datetime_obj(line[DATA_POSTAGEM_CORREIO]), |
|
|
data_postagem_correio=get_datetime_obj(line[DATA_POSTAGEM_CORREIO]), |
|
|
|
|
|
observacao=obs,) |
|
|
|
|
|
|
|
|
|
|
|
###Relatório### |
|
|
|
|
|
if( (projeto or line[DATA_TERMO_ACEITE_COL]) and line[NUM_PROCESSO_SF_COL].__len__()==0): |
|
|
|
|
|
f1.write(casa.nome+","+casa.municipio.uf.sigla+"\n") |
|
|
|
|
|
if(projeto==None and line[DATA_TERMO_ACEITE_COL].__len__()!=0): |
|
|
|
|
|
f2.write(casa.nome+","+casa.municipio.uf.sigla+"\n") |
|
|
|
|
|
###### |
|
|
|
|
|
projeto=None |
|
|
|
|
|
obs = '' |
|
|
|
|
|
if line[DATA_ADESAO_100_COL]=='1001-01-01' and line[DATA_RETORNO_ASSINATURA_100_COL].__len__()!=0: |
|
|
|
|
|
line[DATA_ADESAO_100_COL] = line[DATA_RETORNO_ASSINATURA_100_COL] |
|
|
|
|
|
obs = OBS_CONVENIO |
|
|
|
|
|
if line[DATA_ADESAO_100_COL]!='1001-01-01': |
|
|
|
|
|
projeto = Projeto.objects.get(id=2) |
|
|
|
|
|
|
|
|
|
|
|
if projeto: |
|
|
|
|
|
convenio2 = Convenio( |
|
|
|
|
|
casa_legislativa=casa, |
|
|
|
|
|
projeto=projeto, |
|
|
|
|
|
num_processo_sf=line[NUM_PROCESSO_SF_100_COL], |
|
|
|
|
|
num_convenio=line[NUM_CONVENIO_100_COL], |
|
|
|
|
|
data_adesao=get_datetime_obj(line[DATA_ADESAO_100_COL]), |
|
|
|
|
|
data_retorno_assinatura=get_datetime_obj(line[DATA_TERMO_ACEITE_100_COL]), |
|
|
|
|
|
data_pub_diario=get_datetime_obj(line[DATA_RETORNO_ASSINATURA_100_COL]), |
|
|
|
|
|
data_termo_aceite=get_datetime_obj(line[DATA_PUB_DIARIO_100_COL]), |
|
|
|
|
|
observacao=obs, |
|
|
) |
|
|
) |
|
|
|
|
|
|
|
|
try: |
|
|
try: |
|
|
convenio.save() |
|
|
if convenio1: convenio1.save() |
|
|
|
|
|
if convenio2: convenio2.save() |
|
|
except: |
|
|
except: |
|
|
|
|
|
print "Erro ao inserir convênio" |
|
|
print ERROR_MSG_0 % (filename, linenum) |
|
|
print ERROR_MSG_0 % (filename, linenum) |
|
|
continue |
|
|
continue |
|
|
|
|
|
f1.close() |
|
|
|
|
|
f2.close() |
|
|
|
|
|
|
|
|
def migra_convenios_assembleias(filename): |
|
|
def migra_convenios_assembleias(filename): |
|
|
def get_datetime_obj(data): |
|
|
def get_datetime_obj(data): |
|
@ -279,14 +366,13 @@ def migra_convenios_assembleias(filename): |
|
|
return datetime(int(ldata[0]), int(ldata[1]), int(ldata[2])) |
|
|
return datetime(int(ldata[0]), int(ldata[1]), int(ldata[2])) |
|
|
|
|
|
|
|
|
# identificação das colunas no arquivo CSV |
|
|
# identificação das colunas no arquivo CSV |
|
|
COD_IBGE_COL = 1 |
|
|
SIGLA_COL = 5 |
|
|
NUM_PROCESSO_SF_COL = 25 |
|
|
|
|
|
DATA_ADESAO_COL = 10 |
|
|
DATA_ADESAO_COL = 10 |
|
|
DATA_TERMO_ACEITE_COL = 21 |
|
|
DATA_TERMO_ACEITE_COL = 21 |
|
|
DATA_RETORNO_ASSINATURA = 28 |
|
|
NUM_CONVENIO_COL = 23 |
|
|
DATA_PUB_DIARIO = 30 |
|
|
NUM_PROCESSO_SF_COL = 26 |
|
|
DATA_DEV_VIA_CONV_CM = 32 |
|
|
DATA_RETORNO_ASSINATURA = 27 |
|
|
DATA_POSTAGEM_CORREIO = 26 |
|
|
DATA_PUB_DIARIO = 29 |
|
|
|
|
|
|
|
|
reader = csv.reader(open(filename, 'r'), delimiter='|', skipinitialspace=True) |
|
|
reader = csv.reader(open(filename, 'r'), delimiter='|', skipinitialspace=True) |
|
|
header = reader.next() |
|
|
header = reader.next() |
|
@ -295,7 +381,7 @@ def migra_convenios_assembleias(filename): |
|
|
linenum += 1 |
|
|
linenum += 1 |
|
|
|
|
|
|
|
|
try: |
|
|
try: |
|
|
assembleia = CasaLegislativa.objects.get(municipio__codigo_ibge=line[COD_IBGE_COL]) |
|
|
assembleia = CasaLegislativa.objects.get(municipio__uf__sigla=line[SIGLA_COL], tipo='AL') |
|
|
except CasaLegislativa.DoesNotExist: |
|
|
except CasaLegislativa.DoesNotExist: |
|
|
print ERROR_MSG_1 % (filename, linenum) |
|
|
print ERROR_MSG_1 % (filename, linenum) |
|
|
continue |
|
|
continue |
|
@ -304,16 +390,16 @@ def migra_convenios_assembleias(filename): |
|
|
except ValueError: |
|
|
except ValueError: |
|
|
print ERROR_MSG_1 % (filename, linenum) |
|
|
print ERROR_MSG_1 % (filename, linenum) |
|
|
continue |
|
|
continue |
|
|
|
|
|
projeto = Projeto.objects.get(id=2) |
|
|
convenio = Convenio( |
|
|
convenio = Convenio( |
|
|
casa_legislativa=assembleia, |
|
|
casa_legislativa=assembleia, |
|
|
num_processo_sf=line[NUM_PROCESSO_SF_COL], |
|
|
num_processo_sf=line[NUM_PROCESSO_SF_COL], |
|
|
|
|
|
num_convenio=line[NUM_CONVENIO_COL], |
|
|
|
|
|
projeto=projeto, |
|
|
data_adesao=get_datetime_obj(line[DATA_ADESAO_COL]), |
|
|
data_adesao=get_datetime_obj(line[DATA_ADESAO_COL]), |
|
|
data_retorno_assinatura=get_datetime_obj(line[DATA_TERMO_ACEITE_COL]), |
|
|
data_retorno_assinatura=get_datetime_obj(line[DATA_TERMO_ACEITE_COL]), |
|
|
data_pub_diario=get_datetime_obj(line[DATA_RETORNO_ASSINATURA]), |
|
|
data_pub_diario=get_datetime_obj(line[DATA_RETORNO_ASSINATURA]), |
|
|
data_termo_aceite=get_datetime_obj(line[DATA_PUB_DIARIO]), |
|
|
data_termo_aceite=get_datetime_obj(line[DATA_PUB_DIARIO]), |
|
|
data_devolucao_via=get_datetime_obj(line[DATA_DEV_VIA_CONV_CM]), |
|
|
|
|
|
data_postagem_correio=get_datetime_obj(line[DATA_POSTAGEM_CORREIO]), |
|
|
|
|
|
) |
|
|
) |
|
|
try: |
|
|
try: |
|
|
convenio.save() |
|
|
convenio.save() |
|
@ -323,13 +409,13 @@ def migra_convenios_assembleias(filename): |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__': |
|
|
if __name__ == '__main__': |
|
|
print "<iniciando migração das assembléias legislativas>" |
|
|
# print "<iniciando migração das assembléias legislativas>" |
|
|
migra_assembleias('assembleias.csv') |
|
|
# migra_assembleias('assembleias.csv') |
|
|
print "<iniciando migração das demais casas legislativas>" |
|
|
# print "<iniciando migração das demais casas legislativas>" |
|
|
migra_casas('casas.csv') |
|
|
# migra_casas('casas.csv') |
|
|
print "<iniciando migração dos CNPJ das casas>" |
|
|
# print "<iniciando migração dos CNPJ das casas>" |
|
|
migra_cnpj('cnpj.csv') |
|
|
# migra_cnpj('cnpj.csv') |
|
|
print "<iniciando migração dos convênios das casas municipais>" |
|
|
print "<iniciando migração dos convênios das casas municipais>" |
|
|
migra_convenios_casas('casas.csv') |
|
|
migra_convenios_casas('casas.csv') |
|
|
print "<iniciando migração dos convênios das assembléias>" |
|
|
print "<iniciando migração dos convênios das assembléias>" |
|
|
migra_convenios_casas('assembleias.csv') |
|
|
migra_convenios_assembleias('assembleias.csv') |
|
|