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