diff --git a/sigi/apps/casas/templates/casas/importar.html b/sigi/apps/casas/templates/casas/importar.html
index 065f1d4..02c708d 100644
--- a/sigi/apps/casas/templates/casas/importar.html
+++ b/sigi/apps/casas/templates/casas/importar.html
@@ -1,5 +1,5 @@
{% extends "admin/base_site.html" %}
-{% load i18n %}
+{% load i18n bootstrap3 %}
{% block content_title %}
{% trans 'Importar dados para atualização de órgãos' %}
@@ -15,7 +15,7 @@
diff --git a/sigi/apps/casas/views.py b/sigi/apps/casas/views.py
index 0a1642d..2699963 100644
--- a/sigi/apps/casas/views.py
+++ b/sigi/apps/casas/views.py
@@ -47,6 +47,15 @@ class importa_casas(View):
PRESIDENTE_BAIRRO = 'presidente_bairro'
PRESIDENTE_CEP = 'presidente_cep'
PRESIDENTE_REDES_SOCIAIS = 'presidente_redes_sociais'
+ SERVIDOR_NOME = 'contato_nome'
+ SERVIDOR_DATA_NASCIMENTO = 'contato_data_nascimento'
+ SERVIDOR_TELEFONES = 'contato_telefones'
+ SERVIDOR_EMAILS = 'contato_emails'
+ SERVIDOR_ENDERECO = 'contato_endereco'
+ SERVIDOR_MUNICIPIO = 'contato_municipio'
+ SERVIDOR_BAIRRO = 'contato_bairro'
+ SERVIDOR_CEP = 'contato_cep'
+ SERVIDOR_REDES_SOCIAIS = 'contato_redes_sociais'
ERROS = 'erros_importacao'
fieldnames = [TIPO, MUNICIPIO, UF, ORGAO_ENDERECO, ORGAO_BAIRRO, ORGAO_CEP,
@@ -54,7 +63,9 @@ class importa_casas(View):
PRESIDENTE_DATA_NASCIMENTO, PRESIDENTE_TELEFONES,
PRESIDENTE_EMAILS, PRESIDENTE_ENDERECO, PRESIDENTE_MUNICIPIO,
PRESIDENTE_BAIRRO, PRESIDENTE_CEP, PRESIDENTE_REDES_SOCIAIS,
- ERROS,]
+ SERVIDOR_NOME, SERVIDOR_DATA_NASCIMENTO, SERVIDOR_TELEFONES,
+ SERVIDOR_EMAILS, SERVIDOR_ENDERECO, SERVIDOR_MUNICIPIO,
+ SERVIDOR_BAIRRO, SERVIDOR_CEP, SERVIDOR_REDES_SOCIAIS, ERROS,]
ID_FIELDS = {TIPO, MUNICIPIO, UF}
@@ -79,6 +90,18 @@ class importa_casas(View):
PRESIDENTE_REDES_SOCIAIS: 'redes_sociais',
}
+ SERVIDOR_FIELDS = {
+ SERVIDOR_NOME: 'nome',
+ SERVIDOR_DATA_NASCIMENTO: 'data_nascimento',
+ SERVIDOR_TELEFONES: 'nota',
+ SERVIDOR_EMAILS: 'email',
+ SERVIDOR_ENDERECO: 'endereco',
+ SERVIDOR_MUNICIPIO: 'municipio_id',
+ SERVIDOR_BAIRRO: 'bairro',
+ SERVIDOR_CEP: 'cep',
+ SERVIDOR_REDES_SOCIAIS: 'redes_sociais',
+ }
+
def get(self, request):
form = AtualizaCasaForm()
return render(request, 'casas/importar.html', {'form': form})
@@ -136,6 +159,85 @@ class importa_casas(View):
{'form': form, 'error': u"Erro no preenchimento do formulário."}
)
+ # Atualiza ou cria funcionário
+ def funcionario_update(self, setor, fields, orgao, reg):
+ field_nome = (self.PRESIDENTE_NOME if setor == 'presidente' else
+ self.SERVIDOR_NOME)
+ funcionario = orgao.funcionario_set.filter(
+ setor=setor,
+ nome__iexact=reg[field_nome].strip()
+ )
+
+ if funcionario.count() == 0:
+ funcionario = Funcionario(
+ casa_legislativa=orgao,
+ nome=reg[field_nome].strip(),
+ setor=setor
+ )
+ else:
+ funcionario = funcionario.first() #HACK: Sempre atualiza o primeiro
+
+ for key in fields:
+ field_name = fields[key]
+ if key in reg:
+ value = reg[key].strip()
+ else:
+ value = ""
+
+ if value != "":
+ if field_name == 'municipio_id':
+ if ',' in value:
+ municipio, uf = value.split(',')
+ else:
+ municipio = value
+ uf = reg[self.UF]
+
+ try:
+ value = Municipio.objects.get(
+ nome__iexact=municipio.strip(),
+ uf__sigla=uf.strip()).pk
+ except:
+ value = None
+ reg[self.ERROS].append(
+ "Impossivel identificar o Municipio de "
+ "residencia do {contato}".format(
+ contato="Presidente" if setor == 'presidente'
+ else "Contato")
+ )
+ continue
+ if field_name == 'redes_sociais':
+ value = value.replace(" ", "\r")
+ if field_name == 'data_nascimento':
+ sd = value.split('/')
+ if len(sd) < 3:
+ reg[self.ERROS].append(
+ "Data de nascimento do {contato} esta em um "
+ "formato nao reconhecido. Use DD/MM/AAAA".format(
+ contato="Presidente" if setor == 'presidente'
+ else "Contato"
+ )
+ )
+ continue
+ else:
+ value = "{ano}-{mes}-{dia}".format(
+ ano=sd[2],
+ mes=sd[1],
+ dia=sd[0]
+ )
+ if value != getattr(funcionario, field_name):
+ setattr(funcionario, field_name, value)
+ try:
+ funcionario.save()
+ except Exception as e:
+ reg[self.ERROS].append(
+ "Erro salvando {contato}: '{message}'".format(
+ message=e.message,
+ contato="Presidente" if setor == 'presidente'
+ else "Contato")
+ )
+
+ return reg
+
def importa(self, reader):
self.errors = []
self.total_registros = 0
@@ -185,65 +287,12 @@ class importa_casas(View):
)
# Atualiza o presidente
- presidente = orgao.presidente
-
- if presidente is None:
- presidente = Funcionario(
- casa_legislativa=orgao,
- setor="presidente"
- )
+ reg = self.funcionario_update("presidente", self.PRESIDENTE_FIELDS,
+ orgao, reg)
- for key in self.PRESIDENTE_FIELDS:
- field_name = self.PRESIDENTE_FIELDS[key]
- if key in reg:
- value = reg[key].strip()
- else:
- value = ""
-
- if value != "":
- if key == self.PRESIDENTE_MUNICIPIO:
- if ',' in value:
- municipio, uf = value.split(',')
- else:
- municipio = value
- uf = reg[self.UF]
-
- try:
- value = Municipio.objects.get(
- nome__iexact=municipio.strip(),
- uf__sigla=uf.strip()).pk
- except:
- value = None
- reg[self.ERROS].append(
- "Impossivel identificar o Municipio de "
- "residencia do Presidente"
- )
- continue
- if key == self.PRESIDENTE_REDES_SOCIAIS:
- value = value.replace(" ", "\r")
- if key == self.PRESIDENTE_DATA_NASCIMENTO:
- sd = value.split('/')
- if len(sd) < 3:
- reg[self.ERROS].append(
- "Data de nascimento do presidente esta em um "
- "formato nao reconhecido. Use DD/MM/AAAA"
- )
- continue
- else:
- value = "{ano}-{mes}-{dia}".format(
- ano=sd[2],
- mes=sd[1],
- dia=sd[0]
- )
- if value != getattr(presidente, field_name):
- setattr(presidente, field_name, value)
- try:
- presidente.save()
- except Exception as e:
- reg[self.ERROS].append(
- "Erro salvando presidente: '{message}'".format(
- message=e.message)
- )
+ # Atualiza o contato
+ reg = self.funcionario_update("outros", self.SERVIDOR_FIELDS,
+ orgao, reg)
if len(reg[self.ERROS]) > 0:
self.errors.append(reg)