Browse Source

Add Gerente de Relacionamentos filter in map

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

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

@ -77,6 +77,8 @@
var data = $("#filter_form").serializeArray(); var data = $("#filter_form").serializeArray();
var estados = []; var estados = [];
var regioes = []; var regioes = [];
var gerentes = [];
var mostra_sem_nada = true;
for (var i in data) { for (var i in data) {
var name = data[i].name, value = data[i].value; var name = data[i].name, value = data[i].value;
@ -86,6 +88,11 @@
} else if (name == 'regioes') { } else if (name == 'regioes') {
regioes.push(value); regioes.push(value);
delete data[i]; 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]; var municipio = municipiosArray[i];
municipio['infowindow'].close(); municipio['infowindow'].close();
var aparece = false; 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) { if (regioes.indexOf(municipio.regiao) == -1 && estados.indexOf(municipio.estado) == -1) {
aparece = false; aparece = false;
sem_nada = false;
} else {
if (gerentes.length > 0 && gerentes.indexOf(municipio.gerente) == -1) {
aparece = false;
sem_nada = false;
} else { } else {
for (var j in data) { for (var j in data) {
if (data[j]) { if (data[j]) {
var name = data[j].name, value = data[j].value; var name = data[j].name, value = data[j].value;
idx = municipio[name].indexOf(value); if (municipio[name].indexOf(value) != -1) {
if (idx != -1) {
aparece = true; aparece = true;
break; break;
} }
} }
} }
} }
if (aparece) { }
if (aparece || (sem_nada && mostra_sem_nada)) {
if (municipio.mapmark.map == null) { if (municipio.mapmark.map == null) {
municipio.mapmark.setMap(map); municipio.mapmark.setMap(map);
} }
totalizadores[municipio.regiao]++; totalizadores[municipio.regiao]++;
totalizadores[municipio.estado]++; totalizadores[municipio.estado]++;
totalizadores["gerente_" + municipio.gerente]++;
// TODO os prefixos dos ids dependem do codigo de // TODO os prefixos dos ids dependem do codigo de
// sigi/apps/metas/views.py:65 ... def mapa(...) // sigi/apps/metas/views.py:65 ... def mapa(...)
@ -187,13 +201,17 @@
} }
function open_report(event) { function open_report(event) {
event.preventDefault();
var href = $(this).attr('href');
var data = $("#filter_form").serialize(); var data = $("#filter_form").serialize();
var href = this.href;
if (href.indexOf("?") < 0) { if (href.indexOf("?") < 0) {
href = href + "?" + data href = href + "?" + data
} else { } else {
href = href + "&" + data href = href + "&" + data
} }
var win = window.open(href, '', ''); var win = window.open(href, '', '');
win.focus(); win.focus();
return false; 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.min.js" %}"></script>
<script type="text/javascript" src="{% static "admin/js/jquery.init.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="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> <style>
.totalizador { .totalizador {
float:right; float:right;
@ -90,6 +90,5 @@
</form> </form>
</div> </div>
</div> </div>
{% endblock %} {% endblock %}

63
sigi/apps/metas/views.py

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

Loading…
Cancel
Save