Browse Source

Importação serviços SEIT

pull/66/head
Sesostris Vieira 4 years ago
parent
commit
d00c38061c
  1. 120
      sigi/apps/servicos/management/commands/importa_servico.py

120
sigi/apps/servicos/management/commands/importa_servico.py

@ -27,11 +27,12 @@ Importa dados de serviços de arquivos TXT gerados pela COTIN.
if (not 'TEMPLATE' in reader.fieldnames or if (not 'TEMPLATE' in reader.fieldnames or
not 'NAME' in reader.fieldnames or not 'NAME' in reader.fieldnames or
not 'COD_ORGAO' in reader.fieldnames): not 'COD_ORGAO' in reader.fieldnames):
print reader.fieldnames
raise CommandError(u"Formato inválido do arquivo.") raise CommandError(u"Formato inválido do arquivo.")
self.stdout.write(u'Estrutura parece ok.') self.stdout.write(u'Estrutura parece ok.')
self.stdout.write("Preparando dados...") self.stdout.write("Preparando dados...")
casas = { casas = {
to_ascii(c.municipio.nome).replace(' ','').replace('-','').lower() to_ascii(c.municipio.nome).replace(' ','').replace('-','').replace("'", '').lower()
+ '-' + to_ascii(c.municipio.uf.sigla).lower(): c.pk + '-' + to_ascii(c.municipio.uf.sigla).lower(): c.pk
for c in Orgao.objects.filter(tipo__sigla='CM') for c in Orgao.objects.filter(tipo__sigla='CM')
} }
@ -53,29 +54,35 @@ Importa dados de serviços de arquivos TXT gerados pela COTIN.
can_deactivate = True can_deactivate = True
for rec in reader: for rec in reader:
nome = rec['NAME'] name = rec['NAME']
sigla = rec['TEMPLATE'] template = rec['TEMPLATE']
cod_orgao = rec['COD_ORGAO'] cod_orgao = rec['COD_ORGAO']
if sigla == 'DNS': if template == 'DNS':
dominio = nome s = name.split('.')
if '.leg.br' in nome: nome_casa = s[0]+"-"+s[1]
nome = nome.replace('.leg.br', '') dominio = s[0]
sufixo = ".".join(s[1:])
if '.leg.br' in name:
sigla = 'LEGBR' sigla = 'LEGBR'
elif '.gov.br' in nome: elif '.gov.br' in name:
nome = nome.replace('.gov.br', '')
if nome.startswith('camara'):
nome = nome.replace('camara', '')
if nome.startswith('cm'):
nome = nome.replace('cm','')
sigla = 'GOVBR' sigla = 'GOVBR'
nome = nome.replace('.', '-')
else: else:
dominio = nome.replace('-','.')+'.leg.br' s = name.split("-")
nome_casa = name
dominio = name[0]
sufixo = ".".join(s[1:]) + '.leg.br'
sigla = template
url = u"https://{subdominio}.{dominio}".format( if nome_casa.startswith('camara'):
nome_casa = nome_casa.replace('camara', '')
if nome_casa.startswith('cm'):
nome_casa = nome_casa.replace('cm','')
url = u"https://{subdominio}.{dominio}.{sufixo}".format(
subdominio=subdominios[sigla], subdominio=subdominios[sigla],
dominio=dominio dominio=dominio,
sufixo=sufixo
) )
tipo_servico = TipoServico.objects.get(sigla=sigla) tipo_servico = TipoServico.objects.get(sigla=sigla)
lista_tipos.add(tipo_servico) lista_tipos.add(tipo_servico)
@ -85,33 +92,67 @@ Importa dados de serviços de arquivos TXT gerados pela COTIN.
self.stdout.write( self.stdout.write(
"{template} {name} {cod_orgao} " "{template} {name} {cod_orgao} "
"registro ignorado".format( "registro ignorado".format(
template=rec['TEMPLATE'], template=template,
name=rec['NAME'], name=name,
cod_orgao=rec['COD_ORGAO'] cod_orgao=cod_orgao
) )
) )
continue continue
else: else:
casa = Orgao.objects.get(id=cod_orgao) try:
casa = Orgao.objects.get(id=cod_orgao)
except Orgao.DoesNotExist:
self.stdout.write(
"{template} {name} {cod_orgao} "
"codigo inexistente".format(
template=template,
name=name,
cod_orgao=cod_orgao
)
)
can_deactivate = False
continue
else: else:
if nome not in casas: if nome_casa in casas:
self.stdout.write( casa = Orgao.objects.get(id=casas[nome_casa])
"{template} {name} {cod_orgao} " else:
"orgao nao encontrado ({s})".format( # Nome pode divergir, vamos procurar pelo domínio
template=rec['TEMPLATE'], try:
name=rec['NAME'], servico = Servico.objects.get(
cod_orgao=rec['COD_ORGAO'], url__icontains=dominio,
s=nome tipo_servico=tipo_servico
) )
) servico.save()
can_deactivate = False continue
continue except (Servico.DoesNotExist,
casa = Orgao.objects.get(id=casas[nome]) Servico.MultipleObjectsReturned):
# tenta descobrir outro serviço do mesmo domínio
casa = None
for servico in Servico.objects.filter(
url__icontains=dominio):
if casa is None:
casa = servico.casa_legislativa
elif casa != servico.casa_legislativa:
# Mais de uma casa usando o mesmo domínio!!!
casa = None
break
if casa is None: # Impossível identificar a casa
self.stdout.write(
"{template} {name} {cod_orgao} "
"orgao nao encontrado ({s})".format(
template=template,
name=name,
cod_orgao=cod_orgao,
s=nome_casa
)
)
can_deactivate = False
continue
try: try:
contato, created = casa.funcionario_set.get_or_create( contato, created = casa.funcionario_set.get_or_create(
setor='contato_interlegis', setor='contato_interlegis',
defaults={'nome': u"<<CRIADO PELO SISTEMA>>"} defaults={'nome': u"<<CRIADO PELA IMPORTAÇÃO DE SERVIÇOS SEIT>>"}
) )
except Funcionario.MultipleObjectsReturned: except Funcionario.MultipleObjectsReturned:
contato = casa.funcionario_set.filter( contato = casa.funcionario_set.filter(
@ -133,13 +174,16 @@ Importa dados de serviços de arquivos TXT gerados pela COTIN.
servico.save() servico.save()
except Servico.MultipleObjectsReturned: except Servico.MultipleObjectsReturned:
self.stdout.write( self.stdout.write(
u"{template} {name} mais de um servico encontrado " u"{template} {name} {cod_orgao} mais de um servico "
u"({s})".format(template=rec['TEMPLATE'], u"encontrado ({s})".format(
name=rec['NAME'], s=nome) template=template,
name=name,
cod_orgao=cod_orgao,
s=nome_casa
)
) )
can_deactivate = False can_deactivate = False
if can_deactivate: if can_deactivate:
for tipo_servico in lista_tipos: for tipo_servico in lista_tipos:
tipo_servico.servico_set.filter( tipo_servico.servico_set.filter(

Loading…
Cancel
Save