mirror of https://github.com/interlegis/sigi.git
Sesostris Vieira
9 years ago
7 changed files with 284 additions and 3 deletions
@ -0,0 +1,84 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
# |
||||
|
# sigi.apps.casas.management.commands.importa_gerentes |
||||
|
# |
||||
|
# 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.casas.models import CasaLegislativa |
||||
|
from sigi.apps.servidores.models import Servidor |
||||
|
from sigi.apps.contatos.models import Municipio |
||||
|
|
||||
|
class Command(BaseCommand): |
||||
|
args = u"data_file.csv" |
||||
|
help = u"""Importa dados de atribuição de gerencia de relacionamentos de um arquivo CSV. |
||||
|
|
||||
|
A primeira linha do arquivo deve possuir um cabeçalho com os seguintes campos obrigatórios: |
||||
|
- cod_municipio : Código IBGE do município |
||||
|
- user_id : Nome de usuário (usado no login) do gerente de relacionamento da Casa |
||||
|
|
||||
|
* Os nomes dos campos devem ser grafados exatamente como descrito.""" |
||||
|
|
||||
|
campos = {'cod_municipio', 'user_id'} |
||||
|
|
||||
|
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") |
||||
|
|
||||
|
CasaLegislativa.objects.update(gerente_contas=None) |
||||
|
|
||||
|
erros = 0 |
||||
|
|
||||
|
for reg in reader: |
||||
|
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 |
||||
|
|
||||
|
try: |
||||
|
gerente = Servidor.objects.get(user__username=reg['user_id']) |
||||
|
except Servidor.DoesNotExist: |
||||
|
self.stdout.write(u"(Linha %s): não existe Servidor com userid '%s'" % |
||||
|
(reader.line_num, reg['user_id'],)) |
||||
|
erros = erros + 1 |
||||
|
continue |
||||
|
|
||||
|
for casa in municipio.casalegislativa_set.filter(tipo__sigla__in=['AL', 'CM']): |
||||
|
casa.gerente_contas = gerente |
||||
|
casa.save() |
||||
|
|
||||
|
self.stdout.write(u"Importação concluída. %s erros em %s linhas" % (erros, reader.line_num,)) |
@ -0,0 +1,101 @@ |
|||||
|
{% extends "admin/base_site.html" %} |
||||
|
{% load i18n admin_static %} |
||||
|
{% load static from staticfiles %} |
||||
|
{% load smart_pagination %} |
||||
|
|
||||
|
{% block extrastyle %} |
||||
|
<style type="text/css"> |
||||
|
</style> |
||||
|
{{ block.super }} |
||||
|
{% endblock %} |
||||
|
|
||||
|
{% block extrahead %} |
||||
|
{{ block.super }} |
||||
|
{% endblock %} |
||||
|
|
||||
|
{% block coltype %}colMS{% endblock %} |
||||
|
|
||||
|
{% block content_title %}<h1>{% blocktrans %}Portfólio de relacionamento com Casas{% endblocktrans %}</h1>{% endblock %} |
||||
|
|
||||
|
{% block content %} |
||||
|
{% for e in errors %} |
||||
|
<div class="alert alert-danger">{{ e }}</div> |
||||
|
{% endfor %} |
||||
|
|
||||
|
<div class="nav"> |
||||
|
<ul class="object-tools pull-left nav nav-pills"> |
||||
|
{% for key, value in regioes %} |
||||
|
<li{% if regiao == key %} class="active"{% endif %}><a href="?regiao={{ key }}">{{ value }}</a></li> |
||||
|
{% endfor %} |
||||
|
</ul> |
||||
|
</div> |
||||
|
|
||||
|
{% if ufs %} |
||||
|
<div class="nav"> |
||||
|
<ul class="object-tools pull-left nav nav-tabs"> |
||||
|
{% for uf in ufs %} |
||||
|
<li{% if uf_id == uf.pk %} class="active"{% endif %}><a href="?uf={{ uf.pk|safe }}">{{ uf.nome }}</a></li> |
||||
|
{% endfor %} |
||||
|
</ul> |
||||
|
</div> |
||||
|
{% endif %} |
||||
|
|
||||
|
{% if mesorregioes %} |
||||
|
<div class="nav"> |
||||
|
<ul class="object-tools pull-left nav nav-pills"> |
||||
|
{% for meso in mesorregioes %} |
||||
|
<li{% if meso_id == meso.pk %} class="active"{% endif %}><a href="?meso={{ meso.pk|safe }}">{{ meso.nome }}</a></li> |
||||
|
{% endfor %} |
||||
|
</ul> |
||||
|
</div> |
||||
|
{% endif %} |
||||
|
|
||||
|
{% if microrregioes %} |
||||
|
<div class="nav"> |
||||
|
<ul class="object-tools pull-left nav nav-pills"> |
||||
|
{% for micro in microrregioes %} |
||||
|
<li{% if micro_id == micro.pk %} class="active"{% endif %}><a href="?micro={{ micro.pk|safe }}">{{ micro.nome }}</a></li> |
||||
|
{% endfor %} |
||||
|
</ul> |
||||
|
</div> |
||||
|
{% endif %} |
||||
|
|
||||
|
{% if form %} |
||||
|
<form action="" method="post" id="atribui_gerente_form"> |
||||
|
{% csrf_token %} |
||||
|
{{ form }} |
||||
|
<input type="submit" name="_save" value="Atribuir" class="btn btn-default" /> |
||||
|
</form> |
||||
|
{% endif %} |
||||
|
|
||||
|
{% if page_obj %} |
||||
|
<div class="table-responsive"> |
||||
|
<table class="table table-striped"> |
||||
|
<tr> |
||||
|
<th>{% trans "Nome da Casa" %}</th> |
||||
|
<th>{% trans "UF" %}</th> |
||||
|
<th>{% trans "Mesorregião" %}</th> |
||||
|
<th>{% trans "Microrregião" %}</th> |
||||
|
<th>{% trans "Gerente de relacionamento" %}</th> |
||||
|
</tr> |
||||
|
|
||||
|
{% for casa in page_obj.object_list %} |
||||
|
<tr> |
||||
|
<td>{{ casa.nome }}</td> |
||||
|
<td>{{ casa.municipio.uf }}</td> |
||||
|
<td>{{ casa.municipio.microrregiao.mesorregiao }}</td> |
||||
|
<td>{{ casa.municipio.microrregiao.nome }}</td> |
||||
|
<td>{{ casa.gerente_contas }}</td> |
||||
|
</tr> |
||||
|
{% endfor %} |
||||
|
</table> |
||||
|
</div> |
||||
|
|
||||
|
<p>{% blocktrans with count=page_obj.paginator.count %}{{ count }} casas encontradas.{% endblocktrans %}</p> |
||||
|
|
||||
|
{% if page_obj.paginator.num_pages > 1 %} |
||||
|
{% smart_paginator page_obj=page_obj querystring=querystring %} |
||||
|
{% endif %} |
||||
|
{% endif %} |
||||
|
|
||||
|
{% endblock %} |
Loading…
Reference in new issue