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 @@
{% csrf_token %}
- {{ form }} + {% bootstrap_form form %}
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)