Browse Source

Add new fields to register poll results about digital inclusion

producao
Sesostris Vieira 10 years ago
parent
commit
c66c1a080f
  1. 131
      scripts/importa_pesquisa.py
  2. 8
      sigi/apps/casas/admin.py
  3. 51
      sigi/apps/casas/migrations/0002_auto_20150710_1247.py
  4. 12
      sigi/apps/casas/models.py
  5. 11
      sigi/settings/dev.py

131
scripts/importa_pesquisa.py

@ -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'

8
sigi/apps/casas/admin.py

@ -178,7 +178,8 @@ class CasaLegislativaAdmin(ImageCroppingMixin, BaseModelAdmin):
DiagnosticoInline, BemInline, ServicoInline, PlanoDiretorInline, OcorrenciaInline, ) DiagnosticoInline, BemInline, ServicoInline, PlanoDiretorInline, OcorrenciaInline, )
list_display = ('nome', 'municipio', 'gerente_contas', 'get_convenios') list_display = ('nome', 'municipio', 'gerente_contas', 'get_convenios')
list_display_links = ('nome',) list_display_links = ('nome',)
list_filter = ('tipo', ('gerente_contas', GerentesContasFilter), 'municipio__uf__nome', 'convenio__projeto') list_filter = ('tipo', ('gerente_contas', GerentesContasFilter), 'municipio__uf__nome', 'convenio__projeto',
'inclusao_digital',)
ordering = ('nome', 'municipio__uf') ordering = ('nome', 'municipio__uf')
queyrset = queryset_ascii queyrset = queryset_ascii
fieldsets = ( fieldsets = (
@ -187,7 +188,10 @@ class CasaLegislativaAdmin(ImageCroppingMixin, BaseModelAdmin):
}), }),
(_(u'Endereço'), { (_(u'Endereço'), {
'fields': ('data_instalacao', 'logradouro', 'bairro', 'fields': ('data_instalacao', 'logradouro', 'bairro',
'municipio', 'cep', 'pagina_web', 'email', 'ult_alt_endereco'), 'municipio', 'cep', 'ult_alt_endereco'),
}),
(_(u'Presença na Internet'), {
'fields': ('inclusao_digital', 'data_levantamento', 'pesquisador', 'pagina_web', 'email', 'obs_pesquisa',)
}), }),
(_(u'Outras informações'), { (_(u'Outras informações'), {
'fields': ('observacoes', 'foto', 'recorte'), 'fields': ('observacoes', 'foto', 'recorte'),

51
sigi/apps/casas/migrations/0002_auto_20150710_1247.py

@ -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,
),
]

12
sigi/apps/casas/models.py

@ -35,6 +35,14 @@ class CasaLegislativa(models.Model):
""" Modelo para representar uma Casa Legislativa """ Modelo para representar uma Casa Legislativa
""" """
INCLUSAO_DIGITAL_CHOICES = (
('NAO PESQUISADO', u'Não pesquisado'),
('NAO POSSUI PORTAL', u'Não possui portal'),
('PORTAL MODELO', u'Possui Portal Modelo'),
('OUTRO PORTAL', u'Possui outro portal'),
)
nome = models.CharField( nome = models.CharField(
max_length=60, max_length=60,
help_text='Exemplo: <em>Câmara Municipal de Pains</em>.' help_text='Exemplo: <em>Câmara Municipal de Pains</em>.'
@ -72,6 +80,10 @@ class CasaLegislativa(models.Model):
help_text='Exemplo: <em>http://www.camarapains.mg.gov.br</em>.', help_text='Exemplo: <em>http://www.camarapains.mg.gov.br</em>.',
blank=True, blank=True,
) )
inclusao_digital = models.CharField(max_length=30, choices=INCLUSAO_DIGITAL_CHOICES, default=INCLUSAO_DIGITAL_CHOICES[0][0])
data_levantamento = models.DateTimeField(u"Data/hora da pesquisa", null=True, blank=True)
pesquisador = models.ForeignKey(Servidor, verbose_name=u"Pesquisador", null=True, blank=True)
obs_pesquisa = models.TextField(u"Observações do pesquisador", blank=True)
ult_alt_endereco = models.DateTimeField(u'Última alteração do endereço', null=True, blank=True, editable=True) ult_alt_endereco = models.DateTimeField(u'Última alteração do endereço', null=True, blank=True, editable=True)
telefones = generic.GenericRelation('contatos.Telefone') telefones = generic.GenericRelation('contatos.Telefone')

11
sigi/settings/dev.py

@ -6,8 +6,11 @@ SECRET_KEY = '0$ip1fb5xtq%a=)-k_4r^(#jn0t^@+*^kihkxkozg-mip7+w3+'
DATABASES = { DATABASES = {
'default': { 'default': {
'ENGINE': 'django.db.backends.sqlite3', 'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': os.path.join(BASE_DIR, 'sigi.db'), 'NAME': 'sigi',
'USER': 'sigi',
'PASSWORD': '123456',
'HOST': 'localhost',
}, },
'moodle': { 'moodle': {
'ENGINE': 'django.db.backends.sqlite3', 'ENGINE': 'django.db.backends.sqlite3',
@ -28,3 +31,7 @@ CACHES = {
'BACKEND': 'django.core.cache.backends.dummy.DummyCache', 'BACKEND': 'django.core.cache.backends.dummy.DummyCache',
} }
} }
PENTAHO_SERVER = 'http://localhost.com/pentaho/'
PENTAHO_DASHBOARDS = ('saberes',)
PENTAHO_USERNAME_PASSWORD = 'root@root'

Loading…
Cancel
Save