mirror of https://github.com/interlegis/sigi.git
Sesostris Vieira
10 years ago
5 changed files with 209 additions and 4 deletions
@ -0,0 +1,131 @@ |
|||
# -*- coding: utf-8 -*- |
|||
# |
|||
# importa_pesquisa |
|||
# |
|||
# Copyright (c) 2015 by Interlegis |
|||
# |
|||
# GNU General Public License (GPL) |
|||
# |
|||
# This program is free software; you can redistribute it and/or |
|||
# modify it under the terms of the GNU General Public License |
|||
# as published by the Free Software Foundation; either version 2 |
|||
# of the License, or (at your option) any later version. |
|||
# |
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU General Public License for more details. |
|||
# |
|||
# You should have received a copy of the GNU General Public License |
|||
# along with this program; if not, write to the Free Software |
|||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA |
|||
# 02110-1301, USA. |
|||
# |
|||
|
|||
import csv |
|||
import urlparse |
|||
from datetime import datetime |
|||
|
|||
from sigi.apps.casas.models import CasaLegislativa |
|||
from sigi.apps.servidores.models import Servidor |
|||
|
|||
def importa(file_list): |
|||
''' Este script importa dados de um arquivo CSV e dá carga no model casas.CasaLegislativa |
|||
|
|||
O arquivo CSV esperado tem um cabeçalho de campos na primeira linha, com os seguintes campos: |
|||
|
|||
Indicação de data e hora,Pesquisador,Câmara,Possui portal,Portal Modelo,URL,Observações |
|||
|
|||
Indicação de data e hora: Uma string datetime no formato %d/%m/%y %H:%M |
|||
Pesquisador: O nome do servidor que realizou a pesquisa, conforme cadastrado no SIGI |
|||
Câmara: A sigla da UF seguida de um espaço, seguido de um caracter - seguido de um espaço seguido do nome do município, |
|||
exemplo: MG - Montes Claros |
|||
Possui portal: Deve constar "sim" ou "não" indicando se a casa possui ou não portal. |
|||
Portal Modelo: Deve constar "sim" ou "não" indicando se o portal da casa é o portal modelo ou não. |
|||
URL: Deve conter a URL do portal da Casa. Opcionalmente pode ter alguma observação do pesquisador |
|||
Observações: Deve conter as observações do pesquisador, caso existam.''' |
|||
|
|||
for filename in file_list: |
|||
print 'Importando '+filename+'.csv' |
|||
with open(filename+'.csv', 'rb') as infile: |
|||
with open(filename+'.out', 'wb') as outfile: |
|||
indata = csv.reader(infile, delimiter=',', quotechar='"') |
|||
outdata = csv.writer(outfile, delimiter=',', quotechar='"', quoting=csv.QUOTE_ALL) |
|||
|
|||
head = next(indata) |
|||
head.append('Erros encontrados') |
|||
outdata.writerow(head) |
|||
|
|||
for row in indata: |
|||
data = row[0] |
|||
pesquisador = row[1] |
|||
uf_cidade = row[2] |
|||
tem_portal = row[3] |
|||
pmodelo = row[4] |
|||
url = row[5] |
|||
obs = row[6] |
|||
|
|||
if data == '': |
|||
data = None |
|||
else: |
|||
data = datetime.strptime(data, '%d/%m/%y %H:%M') |
|||
|
|||
uf = uf_cidade[:2] |
|||
cidade = uf_cidade[5:] |
|||
|
|||
if tem_portal.lower() == 'não': |
|||
inclusao = CasaLegislativa.INCLUSAO_DIGITAL_CHOICES[1][0] |
|||
elif pmodelo.lower() == 'não': |
|||
inclusao = CasaLegislativa.INCLUSAO_DIGITAL_CHOICES[3][0] |
|||
else: |
|||
inclusao = CasaLegislativa.INCLUSAO_DIGITAL_CHOICES[2][0] |
|||
|
|||
l = url.splitlines() |
|||
url = '' |
|||
|
|||
for s in l: |
|||
p = urlparse.urlparse(s) |
|||
if p.netloc: |
|||
url = s |
|||
else: |
|||
obs = obs + '\n' + s |
|||
|
|||
if pesquisador == '': |
|||
servidor = None |
|||
else: |
|||
servidor = Servidor.objects.filter(nome_completo__iexact=pesquisador) |
|||
cc = servidor.count() |
|||
if cc == 0: |
|||
row.append('Não encontrado servidor com este nome') |
|||
outdata.writerow(row) |
|||
continue |
|||
else: |
|||
servidor = servidor[0] |
|||
|
|||
casa = CasaLegislativa.objects.filter(tipo_id=1, municipio__uf__sigla=uf, municipio__nome__iexact=cidade) |
|||
cc = casa.count() |
|||
if cc == 0: |
|||
row.append('Municipio nao foi encontrado') |
|||
outdata.writerow(row) |
|||
continue |
|||
elif cc > 1: |
|||
row.append('Existem %s casas legislativas nesta cidade') |
|||
outdata.writerow(row) |
|||
continue |
|||
else: |
|||
casa = casa[0] |
|||
|
|||
casa.inclusao_digital = inclusao |
|||
casa.data_levantamento = data |
|||
casa.pesquisador = servidor |
|||
|
|||
if casa.pagina_web == '': |
|||
casa.pagina_web = url |
|||
else: |
|||
obs = url + '\n' + obs |
|||
|
|||
casa.obs_pesquisa = obs |
|||
casa.save() |
|||
|
|||
print 'O arquivo '+filename+'.out foi criado com os registros que nao puderam ser importados' |
|||
|
@ -0,0 +1,51 @@ |
|||
# -*- coding: utf-8 -*- |
|||
from __future__ import unicode_literals |
|||
|
|||
from django.db import models, migrations |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
('servidores', '0001_initial'), |
|||
('casas', '0001_initial'), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.AddField( |
|||
model_name='casalegislativa', |
|||
name='data_levantamento', |
|||
field=models.DateTimeField(null=True, verbose_name='Data/hora da pesquisa', blank=True), |
|||
preserve_default=True, |
|||
), |
|||
migrations.AddField( |
|||
model_name='casalegislativa', |
|||
name='inclusao_digital', |
|||
field=models.CharField(default=b'NAO PESQUISADO', max_length=30, choices=[(b'NAO PESQUISADO', 'N\xe3o pesquisado'), (b'NAO POSSUI PORTAL', 'N\xe3o possui portal'), (b'PORTAL MODELO', 'Possui Portal Modelo'), (b'OUTRO PORTAL', 'Possui outro portal')]), |
|||
preserve_default=True, |
|||
), |
|||
migrations.AddField( |
|||
model_name='casalegislativa', |
|||
name='obs_pesquisa', |
|||
field=models.TextField(verbose_name='Observa\xe7\xf5es do pesquisador', blank=True), |
|||
preserve_default=True, |
|||
), |
|||
migrations.AddField( |
|||
model_name='casalegislativa', |
|||
name='pesquisador', |
|||
field=models.ForeignKey(verbose_name='Pesquisador', blank=True, to='servidores.Servidor', null=True), |
|||
preserve_default=True, |
|||
), |
|||
migrations.AlterField( |
|||
model_name='casalegislativa', |
|||
name='gerente_contas', |
|||
field=models.ForeignKey(related_name='casas_que_gerencia', verbose_name=b'Gerente de contas', blank=True, to='servidores.Servidor', null=True), |
|||
preserve_default=True, |
|||
), |
|||
migrations.AlterField( |
|||
model_name='funcionario', |
|||
name='ult_alteracao', |
|||
field=models.DateTimeField(auto_now=True, verbose_name='\xdaltima altera\xe7\xe3o', null=True), |
|||
preserve_default=True, |
|||
), |
|||
] |
Loading…
Reference in new issue