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