Browse Source

Add Gerente de Relacionamentos filter in map

producao
Sesostris Vieira 9 years ago
parent
commit
4619db5ff1
  1. 36
      sigi/apps/metas/static/metas/js/mapa.js
  2. 3
      sigi/apps/metas/templates/metas/mapa.html
  3. 69
      sigi/apps/metas/views.py

36
sigiStatic/js/metas/mapa.js → sigi/apps/metas/static/metas/js/mapa.js

@ -77,6 +77,8 @@
var data = $("#filter_form").serializeArray();
var estados = [];
var regioes = [];
var gerentes = [];
var mostra_sem_nada = true;
for (var i in data) {
var name = data[i].name, value = data[i].value;
@ -86,6 +88,11 @@
} else if (name == 'regioes') {
regioes.push(value);
delete data[i];
} else if (name == 'gerente') {
gerentes.push(value);
delete data[i];
} else {
mostra_sem_nada = false;
}
}
@ -96,27 +103,34 @@
var municipio = municipiosArray[i];
municipio['infowindow'].close();
var aparece = false;
var sem_nada = municipio.seit.length == 0 && municipio.convenios.length == 0 && municipio.equipadas.length == 0 && municipio.diagnosticos.length == 0;
if (regioes.indexOf(municipio.regiao) == -1 && estados.indexOf(municipio.estado) == -1) {
aparece = false;
sem_nada = false;
} else {
for (var j in data) {
if (data[j]) {
var name = data[j].name, value = data[j].value;
idx = municipio[name].indexOf(value);
if (idx != -1) {
aparece = true;
break;
if (gerentes.length > 0 && gerentes.indexOf(municipio.gerente) == -1) {
aparece = false;
sem_nada = false;
} else {
for (var j in data) {
if (data[j]) {
var name = data[j].name, value = data[j].value;
if (municipio[name].indexOf(value) != -1) {
aparece = true;
break;
}
}
}
}
}
if (aparece) {
if (aparece || (sem_nada && mostra_sem_nada)) {
if (municipio.mapmark.map == null) {
municipio.mapmark.setMap(map);
}
totalizadores[municipio.regiao]++;
totalizadores[municipio.estado]++;
totalizadores["gerente_" + municipio.gerente]++;
// TODO os prefixos dos ids dependem do codigo de
// sigi/apps/metas/views.py:65 ... def mapa(...)
@ -187,13 +201,17 @@
}
function open_report(event) {
event.preventDefault();
var href = $(this).attr('href');
var data = $("#filter_form").serialize();
var href = this.href;
if (href.indexOf("?") < 0) {
href = href + "?" + data
} else {
href = href + "&" + data
}
var win = window.open(href, '', '');
win.focus();
return false;

3
sigi/apps/metas/templates/metas/mapa.html

@ -11,7 +11,7 @@
<script type="text/javascript" src="{% static "admin/js/jquery.min.js" %}"></script>
<script type="text/javascript" src="{% static "admin/js/jquery.init.js" %}"></script>
<script type="text/javascript" src="https://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript" src="{% static 'js/metas/mapa.js' %}" ></script>
<script type="text/javascript" src="{% static 'metas/js/mapa.js' %}" ></script>
<style>
.totalizador {
float:right;
@ -90,6 +90,5 @@
</form>
</div>
</div>
{% endblock %}

69
sigi/apps/metas/views.py

@ -89,6 +89,12 @@ def mapa(request):
("estados", _(u'Por Estado'),
[(x.sigla, x.sigla, x.nome, False)
for x in UnidadeFederativa.objects.all()]),
("gerente", _(u'Por gerente de relacionamento'),
[("", 'gerente_', _(u"Sem gerente"), False)] +
[(x.gerente_contas.id, 'gerente_%s' % (x.gerente_contas.id,),
"%s %s" % (x.gerente_contas.nome_completo.split()[0], x.gerente_contas.nome_completo.split()[-1]), False)
for x in CasaLegislativa.objects.exclude(gerente_contas=None).select_related(
'gerente_contas').distinct('gerente_contas__nome_completo').order_by('gerente_contas__nome_completo')]),
)
return render(request, 'metas/mapa.html', {'filters': filters})
@ -210,26 +216,31 @@ def map_list(request):
response['Content-Disposition'] = 'attachment; filename="maplist.csv"'
writer = csv.writer(response)
srv = {}
for ts in TipoServico.objects.all():
srv[ts.pk] = ts.nome
srv = {x[0]: x[1] for x in TipoServico.objects.values_list('id', 'nome')}
cnv = {x[0]: x[1] for x in Projeto.objects.values_list('id', 'sigla')}
head = [s.encode('utf-8') for s in
[u'código IBGE', u'nome da casa', u'município', u'UF', u'região', ] +
[x for x in srv.values()] +
reduce(lambda x, y: x + y,
[['conveniada ao %s' % x, 'equipada por %s' % x] for x in cnv.values()])]
cnv = {}
for pr in Projeto.objects.all():
cnv[pr.id] = pr.sigla
writer.writerow([u'codigo_ibge', u'nome_casa', u'municipio', u'uf', u'regiao', ] + [x for x in srv.values()] +
reduce(lambda x, y: x + y, [['conveniada ao %s' % x, 'equipada por %s' % x] for x in cnv.values()]))
writer.writerow(head)
for casa in casas:
row = [casa.municipio.codigo_ibge, casa.nome, casa.municipio.nome, casa.municipio.uf.sigla,
casa.municipio.uf.get_regiao_display(), ]
row = [casa.municipio.codigo_ibge,
casa.nome.encode('utf-8'),
casa.municipio.nome.encode('utf-8'),
casa.municipio.uf.sigla.encode('utf-8'),
casa.municipio.uf.get_regiao_display().encode('utf-8'), ]
for id in srv.keys():
try:
sv = casa.servico_set.get(tipo_servico__id=id)
row += [sv.data_ativacao, ]
except:
row += [None, ]
for id in cnv.keys():
try:
cv = casa.convenio_set.get(projeto__id=id)
@ -256,23 +267,36 @@ def get_params(request):
'diagnosticos': request.GET.getlist('diagnosticos'),
'regioes': request.GET.getlist('regioes'),
'estados': request.GET.getlist('estados'),
'gerentes': request.GET.getlist('gerente'),
}
def filtrar_casas(seit, convenios, equipadas, regioes, estados, diagnosticos):
def filtrar_casas(seit, convenios, equipadas, regioes, estados, diagnosticos, gerentes):
''' Filtrar Casas que atendem aos parâmetros de pesquisa '''
qServico = Q(servico__tipo_servico__sigla__in=seit)
qServico = Q(servico__tipo_servico__sigla__in=seit)
qConvenio = Q(convenio__projeto__sigla__in=convenios)
qEquipada = Q(convenio__projeto__sigla__in=equipadas, convenio__equipada=True)
qRegiao = Q(municipio__uf__regiao__in=regioes)
qEstado = Q(municipio__uf__sigla__in=estados)
if gerentes:
qGerente = Q(gerente_contas_id__in=gerentes)
else:
qGerente = Q()
if diagnosticos:
qDiagnostico = Q(diagnostico__publicado__in=[p == 'P' for p in diagnosticos])
else:
qDiagnostico = Q()
casas = CasaLegislativa.objects.filter(qServico | qConvenio | qEquipada | qDiagnostico).filter(qRegiao | qEstado)
casas = CasaLegislativa.objects.filter(qRegiao | qEstado).filter(qGerente)
if seit or convenios or equipadas or diagnosticos:
casas = casas.filter(qServico | qConvenio | qEquipada | qDiagnostico)
else:
casas = casas.filter(Q(servico=None) & Q(convenio=None) & Q(diagnostico=None))
return casas
@ -289,9 +313,9 @@ def gera_map_data_file(cronjob=False):
casas = {}
for c in CasaLegislativa.objects.prefetch_related('servico_set', 'convenio_set', 'diagnostico_set').all().distinct():
if c.servico_set.count() == 0 and c.convenio_set.count() == 0 and c.diagnostico_set.count() == 0:
continue
# Salta essa casa, pois ela não tem nada com o Interlegis
# if c.servico_set.count() == 0 and c.convenio_set.count() == 0 and c.diagnostico_set.count() == 0:
# continue
# # Salta essa casa, pois ela não tem nada com o Interlegis
if c.pk not in casas:
summary = parliament_summary(c)
@ -327,12 +351,16 @@ def parliament_summary(parliament):
'lng': str(parliament.municipio.longitude),
'estado': parliament.municipio.uf.sigla,
'regiao': parliament.municipio.uf.regiao,
'gerente': (str(parliament.gerente_contas.id) if parliament.gerente_contas else ''),
'diagnosticos': [],
'seit': [],
'convenios': [],
'equipadas': [],
'info': []
}
if parliament.gerente_contas:
summary['info'].append(_(u"Gerente de relacionamento: %s") % parliament.gerente_contas.nome_completo)
for sv in parliament.servico_set.filter(data_desativacao=None):
summary['info'].append(
@ -348,6 +376,11 @@ def parliament_summary(parliament):
date=cv.data_termo_aceite.strftime('%d/%m/%Y'),
project=cv.projeto.sigla))
summary['equipadas'].append(cv.projeto.sigla)
elif cv.data_retorno_assinatura is None:
summary['info'].append(_(u"Adesão ao projeto %(project)s, em %(date)s") % dict(
project=cv.projeto.sigla,
date=cv.data_adesao))
summary['convenios'].append(cv.projeto.sigla)
if (cv.data_retorno_assinatura is not None) and not (cv.equipada and cv.data_termo_aceite is not None):
summary['info'].append(_(u"Conveniada ao %(project)s em %(date)s") % dict(
project=cv.projeto.sigla,

Loading…
Cancel
Save