mirror of https://github.com/interlegis/sigi.git
Sesostris Vieira
9 years ago
7 changed files with 240 additions and 22 deletions
@ -0,0 +1,100 @@ |
|||
# -*- coding: utf-8 -*- |
|||
# |
|||
# sigi.apps.contatos.management.commands.importa_mesomicro |
|||
# |
|||
# 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 os |
|||
from django.core.management.base import BaseCommand, CommandError |
|||
from sigi.apps.contatos.models import Municipio, UnidadeFederativa, Mesorregiao, Microrregiao |
|||
|
|||
class Command(BaseCommand): |
|||
args = u"data_file.csv" |
|||
help = u"""Importa arquivo do IBGE para preencher as tabelas de meso e microrregiões para os municípios. |
|||
|
|||
A primeira linha do arquivo deve possuir um cabeçalho com os seguintes campos obrigatórios: |
|||
- cod_uf : Código IBGE da Unidade da Federação |
|||
- cod_mesorregiao : Código IBGE da mesorregião |
|||
- nome_mesorregiao : Nome da mesorregião |
|||
- cod_microrregiao : Código IBGE da microrregião |
|||
- nome_microrregiao : Nome da microrregião |
|||
- cod_municipio : Código IBGE do município |
|||
|
|||
* Os nomes dos campos devem ser grafados exatamente como descrito.""" |
|||
|
|||
campos = {'cod_uf', 'cod_mesorregiao', 'nome_mesorregiao', 'cod_microrregiao', |
|||
'nome_microrregiao', 'cod_municipio'} |
|||
|
|||
def handle(self, *args, **options): |
|||
if len(args) != 1: |
|||
raise CommandError(u"Informe UM arquivo csv a importar") |
|||
|
|||
file_name = args[0] |
|||
|
|||
if not os.path.isfile(file_name): |
|||
raise CommandError(u"Arquivo %s não encontrado" % [file_name,]) |
|||
|
|||
with open(file_name, 'rb') as csvfile: |
|||
reader = csv.DictReader(csvfile) |
|||
|
|||
if not self.campos.issubset(reader.fieldnames): |
|||
raise CommandError(u"O arquivo não possui todos os campos obrigatórios") |
|||
|
|||
erros = 0 |
|||
|
|||
for reg in reader: |
|||
try: |
|||
uf = UnidadeFederativa.objects.get(codigo_ibge=reg['cod_uf']) |
|||
except UnidadeFederativa.DoesNotExist: |
|||
self.stdout.write(u"(Linha %s): não existe UF com código IBGE '%s'" % |
|||
(reader.line_num, reg['cod_uf'],)) |
|||
erros = erros + 1 |
|||
continue |
|||
|
|||
try: |
|||
municipio = Municipio.objects.get(codigo_ibge=reg['cod_municipio']) |
|||
except Municipio.DoesNotExist: |
|||
self.stdout.write(u"(Linha %s): não existe Município com código IBGE '%s'" % |
|||
(reader.line_num, reg['cod_municipio'],)) |
|||
erros = erros + 1 |
|||
continue |
|||
|
|||
cod_meso = reg['cod_uf'] + reg['cod_mesorregiao'] |
|||
cod_micro = cod_meso + reg['cod_microrregiao'] |
|||
|
|||
if Mesorregiao.objects.filter(codigo_ibge=cod_meso).exists(): |
|||
meso = Mesorregiao.objects.get(codigo_ibge=cod_meso) |
|||
else: |
|||
meso = Mesorregiao(codigo_ibge=cod_meso, uf=uf, nome=reg['nome_mesorregiao']) |
|||
meso.nome = reg['nome_mesorregiao'] |
|||
meso.save() |
|||
|
|||
if Microrregiao.objects.filter(codigo_ibge=cod_micro).exists(): |
|||
micro = Microrregiao.objects.get(codigo_ibge=cod_micro) |
|||
else: |
|||
micro = Microrregiao(codigo_ibge=cod_micro, mesorregiao=meso, nome=reg['nome_microrregiao']) |
|||
micro.nome = reg['nome_microrregiao'] |
|||
micro.save() |
|||
|
|||
municipio.microrregiao = micro |
|||
municipio.save() |
|||
|
|||
self.stdout.write(u"Importação concluída. %s erros em %s linhas" % (erros, reader.line_num,)) |
@ -0,0 +1,59 @@ |
|||
# -*- coding: utf-8 -*- |
|||
from __future__ import unicode_literals |
|||
|
|||
from django.db import models, migrations |
|||
import sigi.apps.utils |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
('contatos', '0001_initial'), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.CreateModel( |
|||
name='Mesorregiao', |
|||
fields=[ |
|||
('codigo_ibge', models.PositiveIntegerField(help_text='C\xf3digo da mesorregi\xe3o segundo o IBGE', unique=True, serialize=False, verbose_name='C\xf3digo IBGE', primary_key=True)), |
|||
('nome', models.CharField(max_length=100, verbose_name='Nome mesorregi\xe3o')), |
|||
('search_text', sigi.apps.utils.SearchField(field_names=[b'nome'], editable=False)), |
|||
('uf', models.ForeignKey(verbose_name='UF', to='contatos.UnidadeFederativa')), |
|||
], |
|||
options={ |
|||
'ordering': ('uf', 'nome'), |
|||
'verbose_name': 'Mesorregi\xe3o', |
|||
'verbose_name_plural': 'Mesorregi\xf5es', |
|||
}, |
|||
bases=(models.Model,), |
|||
), |
|||
migrations.CreateModel( |
|||
name='Microrregiao', |
|||
fields=[ |
|||
('codigo_ibge', models.PositiveIntegerField(help_text='C\xf3digo da microrregi\xe3o segundo o IBGE', unique=True, serialize=False, verbose_name='C\xf3digo IBGE', primary_key=True)), |
|||
('nome', models.CharField(max_length=100, verbose_name='Nome microrregi\xe3o')), |
|||
('search_text', sigi.apps.utils.SearchField(field_names=[b'nome'], editable=False)), |
|||
('mesorregiao', models.ForeignKey(to='contatos.Mesorregiao')), |
|||
], |
|||
options={ |
|||
'ordering': ('mesorregiao', 'nome'), |
|||
'verbose_name': 'Microrregi\xe3o', |
|||
'verbose_name_plural': 'Microrregi\xf5es', |
|||
}, |
|||
bases=(models.Model,), |
|||
), |
|||
migrations.RemoveField( |
|||
model_name='municipio', |
|||
name='codigo_mesorregiao', |
|||
), |
|||
migrations.RemoveField( |
|||
model_name='municipio', |
|||
name='codigo_microrregiao', |
|||
), |
|||
migrations.AddField( |
|||
model_name='municipio', |
|||
name='microrregiao', |
|||
field=models.ForeignKey(verbose_name='Microrregi\xe3o', blank=True, to='contatos.Microrregiao', null=True), |
|||
preserve_default=True, |
|||
), |
|||
] |
@ -0,0 +1,20 @@ |
|||
# -*- coding: utf-8 -*- |
|||
from __future__ import unicode_literals |
|||
|
|||
from django.db import models, migrations |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
('eventos', '0002_auto_20151016_1449'), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.AlterField( |
|||
model_name='evento', |
|||
name='curso_moodle_id', |
|||
field=models.IntegerField(blank=True, null=True, verbose_name='Curso saberes', choices=[(None, '---------'), (59L, 'Oficina Interlegis em Montes Claros, MG')]), |
|||
preserve_default=True, |
|||
), |
|||
] |
Loading…
Reference in new issue