Browse Source

Aprimoramentos no dashboard

whois_api
Sesostris Vieira 9 years ago
parent
commit
823fb98edb
  1. 98
      sigi/apps/home/templates/home/sem_convenio.html
  2. 8
      sigi/apps/home/urls.py
  3. 281
      sigi/apps/home/views.py
  4. 12
      sigiStatic/css/base_site.css
  5. 47
      sigiStatic/css/style.css
  6. 63
      sigiStatic/js/dashboard.js
  7. 53
      templates/index.html
  8. 123
      templates/snippets/modules/charts-convenios.html
  9. 60
      templates/snippets/modules/resumo_convenios.html
  10. 38
      templates/snippets/modules/resumo_seit.html

98
sigi/apps/home/templates/home/sem_convenio.html

@ -0,0 +1,98 @@
{% load static from staticfiles %}
{% load i18n %}
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>{{ titulo }}</title>
<style type="text/css">
h1 {
font-size: 2em;
text-align: center;
}
h2 {
font-size: 1.7em;
}
h3 {
margin-top: 10px;
margin-bottom: 0px;
}
body {
font-family: "Helvetica, Arial, sans-serif";
font-size: 1.3em;
line-height: 1em;
}
#header {
text-align: center;
}
th {
text-align: left;
padding: 2px 5px 2px 2px;
background-color: #f5f5f5;
border-left: 2px solid #ffffff;
}
th, td {
padding: 2px 2px 1px 2px;
vertical-align: bottom;
}
td {
border-bottom: 1px solid #ddd;
}
@page {
size: {{ pagesize|default:"a4" }};
margin: {{ margin|default:"4cm 1cm 1cm 2cm" }};
font-family: "Helvetica, Arial, sans-serif";
font-size: 2em;
@frame header {
-pdf-frame-content: header;
top: 1cm;
}
@frame footer {
-pdf-frame-content: footer;
bottom: 0cm;
margin-left: 9cm;
margin-right: 9cm;
height: 1cm;
}
}
</style>
</head>
<body>
<div id="header">
<p><strong>{% trans 'SENADO FEDERAL' %}</strong></p>
<p><strong>{% trans 'PROGRAMA INTERLEGIS – SIGI' %}</strong></p>
<p><strong>{{ titulo }}</strong></p>
</div>
<table repeat="1">
<tr>
<th>{% trans "Nome da Casa" %}</th>
<th width=30>{% trans "UF" %}</th>
<th>{% trans "Gerente de contas" %}</th>
<th>{% trans "Serviços" %}</th>
</tr>
{% for casa in casas %}
<tr>
<td>{{ casa.nome }}</td>
<td>{{ casa.municipio.uf.sigla }}</td>
<td>{{ casa.gerente_contas.nome_completo }}</td>
<td>
{% for s in casa.servico_set.all %}
{% if s.data_desativacao == None %}
{{ s.tipo_servico.nome }}{% if not forloop.last %}, {% endif %}
{% endif %}
{% endfor %}
</td>
</tr>
{% endfor %}
</table>
<div id="footer">
{%block page_foot%}
{% trans 'Página' %} <pdf:pagenumber>
{%endblock%}
</div>
</body>
</html>

8
sigi/apps/home/urls.py

@ -4,4 +4,12 @@ from django.conf.urls import patterns, url
urlpatterns = patterns('sigi.apps.home.views',
url(r'^$', 'index', name='sigi_index'),
url(r'^home/resumoconvenios/$', 'resumo_convenios', name="home_resumoconvenios"),
url(r'^home/resumoseit/$', 'resumo_seit', name="home_resumoseit"),
url(r'^home/chartseit/$', 'chart_seit', name="home_chartseit"),
url(r'^home/chartconvenios/$', 'chart_convenios', name="home_chartconvenios"),
url(r'^home/chartcarteira/$', 'chart_carteira', name="home_chartcarteira"),
url(r'^home/chartperformance/$', 'chart_performance', name="home_chartperformance"),
url(r'^home/report/semconvenio/$', 'report_sem_convenio', name="home_reportsemconvenio"),
)

281
sigi/apps/home/views.py

@ -23,7 +23,8 @@
#
import datetime
from django.shortcuts import render
import calendar
from django.shortcuts import render, get_object_or_404
from django.utils.translation import ugettext as _
from itertools import cycle
from sigi.apps.casas.models import CasaLegislativa
@ -31,29 +32,152 @@ from sigi.apps.convenios.models import Convenio, Projeto
from sigi.apps.diagnosticos.models import Diagnostico
from sigi.apps.metas.models import Meta
from sigi.apps.servicos.models import TipoServico
from sigi.apps.servidores.models import Servidor
from django.views.decorators.cache import never_cache
from django.contrib.auth.decorators import login_required
from django.http.response import JsonResponse
from django.core.urlresolvers import reverse
from django.db.models import Q, Count
from sigi.shortcuts import render_to_pdf
@never_cache
@login_required
def index(request):
context = {'gerentes': Servidor.objects.exclude(casas_que_gerencia=None)}
return render(request, 'index.html', context)
@never_cache
@login_required
def resumo_convenios(request):
context = {'tabela_resumo_camara': busca_informacoes_camara() }
return render(request, 'snippets/modules/resumo_convenios.html', context)
@never_cache
@login_required
def resumo_seit(request):
mes = request.GET.get('mes', None)
ano = request.GET.get('ano', None)
try:
mes = datetime.date(year=int(ano), month=int(mes), day=1)
tabela_resumo_seit = busca_informacoes_seit(mes)
except:
tabela_resumo_seit = busca_informacoes_seit()
context = {'tabela_resumo_seit': tabela_resumo_seit}
return render(request, 'snippets/modules/resumo_seit.html', context)
@never_cache
@login_required
def chart_seit(request):
mes = request.GET.get('mes', None)
ano = request.GET.get('ano', None)
try:
mes = datetime.date(year=int(ano), month=int(mes), day=1)
tabela_resumo_seit = busca_informacoes_seit(mes)
except:
tabela_resumo_seit = busca_informacoes_seit()
data = {
'type': 'line',
'prevlink': reverse('home_chartseit') + ('?ano=%s&mes=%s' %
(tabela_resumo_seit['mes_anterior'].year,
tabela_resumo_seit['mes_anterior'].month)),
'nextlink': reverse('home_chartseit') + ('?ano=%s&mes=%s' %
(tabela_resumo_seit['proximo_mes'].year,
tabela_resumo_seit['proximo_mes'].month)),
'options': {'bezierCurve': False, 'datasetFill': False, 'pointDot': False, 'responsive': True},
'data': {
'labels': ['%02d/%s' % (mes.month, mes.year) for mes in reversed(tabela_resumo_seit['meses'])],
'datasets': [
{
'label': servico['nome'],
'strokeColor': servico['cor'],
'data': [mes['total'] for mes in reversed(servico['novos_por_mes'])]
}
for servico in tabela_resumo_seit['servicos']],
}
}
return JsonResponse(data)
@never_cache
@login_required
def chart_convenios(request):
q = request.GET.get('q', 'all')
convenios = Convenio.objects.all()
convenios_assinados = convenios.exclude(data_retorno_assinatura=None)
if q == 'assinados':
convenios = convenios.exclude(data_retorno_assinatura=None)
data = {
'type': 'pie',
'options': {'responsive': False, 'maintainAspectRatio': False},
'data': grafico_convenio_projeto(convenios),
}
return JsonResponse(data)
tabela_resumo_camara = busca_informacoes_camara()
tabela_resumo_seit = busca_informacoes_seit()
tabela_resumo_diagnostico = busca_informacoes_diagnostico()
dados_graficos_convenio_projeto = [(1, grafico_convenio_projeto(convenios)),
(2, grafico_convenio_projeto(convenios_assinados))]
context = {
'tabela_resumo_camara': tabela_resumo_camara,
'tabela_resumo_seit': tabela_resumo_seit,
'tabela_resumo_diagnostico': tabela_resumo_diagnostico,
'dados_graficos_convenio_projeto': dados_graficos_convenio_projeto,
'metas': Meta.objects.all(),
@never_cache
@login_required
def chart_carteira(request):
colors, highlights = color_palete()
data = {'type': 'pie',
'options': {'responsive': True},
'data': [{'value': r['total_casas'],
'color': colors.next(),
'highlight': highlights.next(),
'label': Servidor.objects.get(pk=r['gerente_contas']).nome_completo
}
for r in CasaLegislativa.objects.all().values('gerente_contas').annotate(total_casas=Count('pk')).order_by('gerente_contas')
]
}
return render(request, 'index.html', context)
return JsonResponse(data)
@never_cache
@login_required
def chart_performance(request):
servidor = request.GET.get('servidor', None)
if servidor is None:
casas = CasaLegislativa.objects.exclude(gerente_contas=None)
else:
gerente = get_object_or_404(Servidor, pk=servidor)
casas = gerente.casas_que_gerencia
data = {
'type': 'pie',
'options': {'responsive': True},
'data': [
{'label': _(u"Utilizam serviços"), 'value': casas.exclude(servico=None).count(), 'color': '#91e8e1'},
{'label': _(u"Não utilizam serviços"), 'value': casas.filter(servico=None).count(), 'color': '#f7a35c'},
]
}
return JsonResponse(data)
@never_cache
@login_required
def report_sem_convenio(request):
modo = request.GET.get('modo', None)
sc = sem_convenio()
if modo == 'H':
casas = sc['hospedagem']
titulo = _(u"Casas sem convenio que utilizam algum serviço de hospedagem")
elif modo == 'R':
casas = sc['registro']
titulo = _(u"Casas sem convenio que utilizam somente serviço de registro")
else:
casas = sc['total']
titulo = _(u"Casas sem convenio que utilizam algum serviço de registro e/ou hospedagem")
context = {'casas': casas, 'titulo': titulo}
print context
# return render(request, 'home/sem_convenio.html', context)
return render_to_pdf('home/sem_convenio.html', context)
def busca_informacoes_camara():
"""
Busca informacoes no banco para montar tabela de resumo de camaras por projeto
@ -128,49 +252,38 @@ def busca_informacoes_camara():
# Unindo as duas listass para que o cabecalho da esquerda fique junto com sua
# respectiva linha
lista_zip = zip(cabecalho_esquerda, linhas)
# Retornando listas em forma de dicionario
return {
u'cabecalho_topo': cabecalho_topo,
u'lista_zip': lista_zip,
u'total_camaras': camaras.count(),
u'camaras_sem_processo': camaras_sem_processo.count(),
'cabecalho_topo': cabecalho_topo,
'lista_zip': lista_zip,
'total_camaras': camaras.count(),
'camaras_sem_processo': camaras_sem_processo.count(),
'sem_convenio': sem_convenio(),
}
def grafico_convenio_projeto(convenios):
colors = cycle(['#7cb5ec',
'#434348',
'#90ed7d',
'#f7a35c',
'#8085e9',
'#f15c80',
'#e4d354',
'#8085e8',
'#8d4653',
'#91e8e1', ])
highlights = cycle(['#B0D3F4',
'#8E8E91',
'#BCF4B1',
'#FAC89D',
'#B3B6F2',
'#F79DB3',
'#EFE598',
'#B3B6F1',
'#BB9098',
'#BDF1ED', ])
def sem_convenio():
total = CasaLegislativa.objects.exclude(servico=None).filter(servico__data_desativacao=None, convenio=None).order_by('municipio__uf__sigla', 'nome').distinct('municipio__uf__sigla', 'nome')
hospedagem = CasaLegislativa.objects.exclude(servico=None).filter(servico__data_desativacao=None, servico__tipo_servico__modo='H', convenio=None).order_by('municipio__uf__sigla', 'nome').distinct('municipio__uf__sigla', 'nome')
reg_keys = set(total.values_list('pk', flat=True)).difference(set(hospedagem.values_list('pk', flat=True)))
registro = CasaLegislativa.objects.filter(pk__in=reg_keys).order_by('municipio__uf__sigla', 'nome')
return {
'total': total,
'hospedagem': hospedagem,
'registro': registro,
}
def grafico_convenio_projeto(convenios):
colors, highlights = color_palete()
projetos = Projeto.objects.all()
lista_projetos = [(projeto.sigla,
convenios.filter(projeto=projeto).count(),
colors.next(),
highlights.next())
lista_projetos = [{'label': projeto.sigla,
'value': convenios.filter(projeto=projeto).count(),
'color': colors.next(),
'highlight': highlights.next()}
for projeto in projetos]
# remove projetos sem convenio
lista_projetos = [x for x in lista_projetos if x[1] > 0]
lista_projetos = [x for x in lista_projetos if x['value'] > 0]
# print lista_projetos
# total_convenios = "Total: " + str(convenios.count())
@ -178,27 +291,45 @@ def grafico_convenio_projeto(convenios):
return lista_projetos
def busca_informacoes_seit():
mes_atual = datetime.date.today().replace(day=1)
def busca_informacoes_seit(mes_atual=None):
colors, highlights = color_palete()
if mes_atual is None:
mes_atual = datetime.date.today().replace(day=1)
mes_anterior = mes_atual - datetime.timedelta(days=1)
result = [{'nome': '',
'total': 'Total de casas atendidas',
'novos_mes_anterior': 'Novas casas em %s/%s' % (mes_anterior.month, mes_anterior.year),
'novos_mes_atual': 'Novas casas em %s/%s' % (mes_atual.month, mes_atual.year)}]
proximo_mes = mes_atual + datetime.timedelta(days=calendar.monthrange(mes_atual.year, mes_atual.month)[1])
meses = []
mes = mes_atual
for i in range(1, 13):
meses.append(mes)
mes = (mes - datetime.timedelta(days=1)).replace(day=1)
result = {
'mes_atual': mes_atual,
'mes_anterior': mes_anterior,
'proximo_mes': proximo_mes,
'meses': meses,
'titulos': [ '',
'Total de casas atendidas',
'Novas casas em %s/%s' % (mes_anterior.month, mes_anterior.year),
'Novas casas em %s/%s' % (mes_atual.month, mes_atual.year)
],
'servicos': [],
}
for tipo_servico in TipoServico.objects.all():
por_mes = []
for mes in range(1, 13):
por_mes.append({'mes': '%02d/%s' % (mes, datetime.date.today().year),
'total': tipo_servico.servico_set.filter(data_desativacao=None, data_ativacao__year=mes_atual.year, data_ativacao__month=mes).count()})
for mes in meses:
por_mes.append({'mes': '%02d/%s' % (mes.month, mes.year),
'total': tipo_servico.servico_set.filter(data_ativacao__year=mes.year, data_ativacao__month=mes.month).count()})
result.append(
result['servicos'].append(
{'nome': tipo_servico.nome,
'total': tipo_servico.servico_set.filter(data_desativacao=None).count(),
'novos_mes_anterior': tipo_servico.servico_set.filter(data_desativacao=None, data_ativacao__year=mes_anterior.year, data_ativacao__month=mes_anterior.month).count(),
'novos_mes_atual': tipo_servico.servico_set.filter(data_desativacao=None, data_ativacao__year=mes_atual.year, data_ativacao__month=mes_atual.month).count(),
'total': tipo_servico.servico_set.filter(Q(data_ativacao__lt=proximo_mes)&(Q(data_desativacao=None)|Q(data_desativacao__gt=proximo_mes))).count(),
'novos_mes_anterior': tipo_servico.servico_set.filter(data_ativacao__year=mes_anterior.year, data_ativacao__month=mes_anterior.month).count(),
'novos_mes_atual': tipo_servico.servico_set.filter(data_ativacao__year=mes_atual.year, data_ativacao__month=mes_atual.month).count(),
'novos_por_mes': por_mes,
'cor': colors.next(),
}
)
@ -210,3 +341,29 @@ def busca_informacoes_diagnostico():
{'title': _(u'Diagnósticos digitados'), 'count': Diagnostico.objects.count()},
{'title': _(u'Diagnósticos publicados'), 'count': Diagnostico.objects.filter(publicado=True).count()},
]
def color_palete():
colors = cycle(['#7cb5ec',
'#434348',
'#90ed7d',
'#f7a35c',
'#8085e9',
'#f15c80',
'#e4d354',
'#8085e8',
'#8d4653',
'#91e8e1', ])
highlights = cycle(['#B0D3F4',
'#8E8E91',
'#BCF4B1',
'#FAC89D',
'#B3B6F2',
'#F79DB3',
'#EFE598',
'#B3B6F1',
'#BB9098',
'#BDF1ED', ])
return (colors, highlights)

12
sigiStatic/css/base_site.css

@ -124,18 +124,6 @@ div#footer a {
width: 18px;
}
.titlemapbox {
display: inline-block;
margin-bottom: 0.6em;
width: 100%;
}
.mapbox {
text-align: center;
display: inline-block;
float: right;
}
#branding h1 {
float: left;
}

47
sigiStatic/css/style.css

@ -1,3 +1,8 @@
.chartcontainer {
position: relative;
max-height: 400px;
}
div[id^=canvas] {
padding: 20px 20px 20px 20px;
min-height: 180px;
@ -33,4 +38,46 @@ div[id^=canvas] {
-moz-transition: background-color 200ms ease-in-out;
-o-transition: background-color 200ms ease-in-out;
transition: background-color 200ms ease-in-out;
}
.line-legend {
list-style: none;
position: absolute;
right: 50px;
top: 18px;
}
.line-legend li span {
display: block;
position: absolute;
left: 0;
top: 0;
width: 20px;
height: 100%;
border-radius: 5px;
}
.line-legend li {
display: block;
padding-left: 30px;
position: relative;
margin-bottom: 4px;
border-radius: 5px;
padding: 2px 8px 2px 28px;
font-size: 14px;
cursor: default;
-webkit-transition: background-color 200ms ease-in-out;
-moz-transition: background-color 200ms ease-in-out;
-o-transition: background-color 200ms ease-in-out;
transition: background-color 200ms ease-in-out;
}
.numeros td, .numeros th {
text-align: right;
}
.numeros tr :first-child {
text-align: left;
}
.servicos tr :first-child {
width: 40%;
}
.panel-footer dl {
margin-bottom: 5px;
}

63
sigiStatic/js/dashboard.js

@ -0,0 +1,63 @@
$(document).ready(function () {
setlinks();
$("div[data-source]").each(function(index, container) {
var container = $(container);
var url = container.attr('data-source');
get_content(container, url);
});
$("canvas[data-source]").each(function(index, canvas) {
var canvas = $(canvas)
var url = canvas.attr("data-source");
plot_chart(canvas, url);
});
});
function setlinks() {
$("a[data-target]").off('click').on('click', function(e) {
e.preventDefault();
var $this = $(this);
var target = $("#"+$this.attr('data-target'));
var url = $this.attr('href');
if (target.is("canvas")) {
plot_chart(target, url);
} else if (target.is("div")) {
get_content(target, url);
}
});
}
function get_content(container, url) {
$.get(url, function(data) {
container.html(data);
setlinks();
});
}
function plot_chart(canvas, url) {
$.get(url, function(data) {
var new_canvas = $(canvas.clone()).insertBefore(canvas);
canvas.remove();
canvas = new_canvas;
var ctx = canvas.get(0).getContext("2d");
if (data.type == 'pie') {
var myChart = new Chart(ctx).Pie(data.data, data.options);
} else if (data.type == 'line') {
var myChart = new Chart(ctx).Line(data.data, data.options);
} else if (data.type == 'bar') {
var myChart = new Chart(ctx).Bar(data.data, data.options);
}
if (canvas.is("[data-legend-id]")) {
var legend_container = $("#"+canvas.attr("data-legend-id"));
legend_container.html(myChart.generateLegend());
}
if (canvas.is("[data-prevlink-id]")) {
var prevlink = $("#"+canvas.attr("data-prevlink-id"));
prevlink.attr('href', data.prevlink);
}
if (canvas.is("[data-nextlink-id]")) {
var nextlink = $("#"+canvas.attr("data-nextlink-id"));
nextlink.attr('href', data.nextlink);
}
});
}

53
templates/index.html

@ -12,55 +12,14 @@
<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 'js/Chart.min.js' %}" ></script>
<script type="text/javascript">
$(document).ready(function () {
var pieData = {
{% for num, dados in dados_graficos_convenio_projeto %}
{{ num }}: [
{% for label, value, color, highlight in dados %}
{
label: "{{ label }}",
value: {{ value }},
color:"{{ color }}",
highlight: "{{ highlight }}"
},
{% endfor %}
],
{% endfor %}
};
$.each(pieData, function(num, data) {
var canvas = $("#canvas-holder-"+num);
var ctx = $("#chart-area-"+num).get(0).getContext("2d");
var myPie = new Chart(ctx).Pie(data);
canvas.append('<div>'+myPie.generateLegend()+'</div>');
});
});
</script>
<style type="text/css">
.numeros td,
.numeros th {
text-align: right;
}
.numeros tr :first-child {
text-align: left;
}
.servicos tr :first-child {
width: 40%;
}
#dashboard-mapa a img {
width: 80%;
}
.panel-footer dl {
margin-bottom: 5px;
}
</style>
<script type="text/javascript" src="{% static 'js/dashboard.js' %}"></script>
{% endblock %}
{% block content_title %}<h1>{% trans 'Dashboard' %}</h1>{% endblock %}
{% block content_title %}
<h1 class="pull-left">{% trans 'Dashboard' %}</h1>
<div class="pull-right"><a href="/dashboard/mapa/"><img src="{% static 'img/mapicon.png' %}" /> {% trans 'Mapa de atuação do Interlegis' %}</a></div>
{% endblock %}
{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% static "admin/css/dashboard.css" %}" />{% endblock %}
@ -74,4 +33,4 @@
<div id="content-main">
{% include "snippets/modules/charts-convenios.html" %}
</div>
{% endblock %}
{% endblock %}

123
templates/snippets/modules/charts-convenios.html

@ -2,94 +2,75 @@
{% load i18n %}
<div class="row row-flex row-flex-wrap">
<div id="resumoseit" class="col-md-6" data-source="{% url "home_resumoseit" %}"></div>
<div class="col-md-6">
<div class="panel panel-primary flex-col">
<div class="panel-heading">{% trans 'Resumo de informações' %}</div>
<div class="panel-body table-responsive">
<dl class="dl-horizontal">
<dt class="pilllabel">{% trans 'Resumo por região' %}:</dt>
<dd>
<ul class="nav nav-pills">
<li><a href="{% url 'convenios-report_regiao_pdf' 'CO' %}">Centro Oeste</a></li>
<li><a href="{% url 'convenios-report_regiao_pdf' 'NE' %}">Nordeste</a></li>
<li><a href="{% url 'convenios-report_regiao_pdf' 'NO' %}">Norte</a></li>
<li><a href="{% url 'convenios-report_regiao_pdf' 'SD' %}">Sudeste</a></li>
<li><a href="{% url 'convenios-report_regiao_pdf' 'SL' %}">Sul</a></li>
</ul>
</dd>
</dl>
<table class="table table-condensed numeros">
<tr>
{% for item in tabela_resumo_camara.cabecalho_topo %}
<th>{{item}}</th>
{% endfor %}
</tr>
{% for cabecalho,lista in tabela_resumo_camara.lista_zip %}
<tr>
<th>{{cabecalho}}</th>
{% for item in lista %}
<td>{{item}}</td>
{% endfor %}
</tr>
{% endfor %}
</table>
<div class="panel-heading">{% trans 'Sazonalidade da hospedagem de serviços' %}</div>
<div class="panel-body">
<div class="chartcontainer">
<canvas id="chart-area-evolucao" data-source="{% url "home_chartseit" %}" data-legend-id="area-evolucao-legend" data-prevlink-id="area-evolucao-previlink" data-nextlink-id="area-evolucao-nextlink"></canvas>
<div id="area-evolucao-legend"></div>
<div>
<a id="area-evolucao-previlink" href="#" aria-label="{% trans "Retroceder um mês" %}" data-target="chart-area-evolucao">
<span class="glyphicon glyphicon-chevron-left pull-left" aria-hidden="true"></span>
</a>
<a id="area-evolucao-nextlink" href="#" aria-label="{% trans "Avançar um mês" %}" data-target="chart-area-evolucao">
<span class="glyphicon glyphicon-chevron-right pull-right" aria-hidden="true"></span>
</a>
</div>
</div>
</div>
<div class="panel-footer">
<dl class="dl-horizontal">
<dt>{% trans 'Câmaras sem processo' %}</dt>
<dd>{{tabela_resumo_camara.camaras_sem_processo}}</dd>
</dl>
<dl class="dl-horizontal">
<dt>{% trans 'Total de câmaras' %}</dt>
<dd>{{tabela_resumo_camara.total_camaras}}</dd>
</dl>
</div>
</div>
</div>
<div class="row row-flex row-flex-wrap">
<div id="resumo" class="col-md-6" data-source="{% url "casas-carteira" %}?snippet=resumo&s=sim"></div>
<div class="col-md-6">
<div class="panel panel-primary flex-col">
<div class="panel-heading">{% trans 'Performance da gerência de carteiras' %}</div>
<div class="panel-body">
<ul class="nav nav-pills" role="tablist">
<li role="presentation"><a href="{% url "home_chartperformance" %}" data-target="chart-performance">{% trans "Todo o Interlegis" %}</a></li>
{% for g in gerentes %}
<li role="presentation"><a href="{% url "home_chartperformance" %}?servidor={{ g.pk }}" data-target="chart-performance">{{ g.user.first_name }}</a></li>
{% endfor %}
</ul>
<div class="chartcontainer">
<canvas id="chart-performance" data-source="{% url "home_chartperformance" %}" data-legend-id="chart-performance-all-legend"></canvas>
<div id="chart-performance-all-legend"></div>
</div>
</div>
</div>
</div>
</div>
<div class="row row-flex row-flex-wrap">
<div class="col-md-6" data-source="{% url "home_resumoconvenios" %}"></div>
<div class="col-md-6">
<div class="panel panel-primary flex-col">
<div class="panel-heading">{% trans 'Serviços hospedados no Interlegis (SEIT)' %}</div>
<div class="panel-heading">{% trans 'Distribuição de Casas por Gerente' %}</div>
<div class="panel-body">
<div class="titlemapbox">
<div class="mapbox"><a href="/dashboard/mapa/"><img src="{% static 'img/mapicon.png' %}" /><br/>{% trans 'Ver mapa' %}</a></div>
<div class="chartcontainer">
<canvas id="chart-carteira" data-source="{% url "home_chartcarteira" %}" data-legend-id="chart-carteira-legend"></canvas>
<div id="chart-carteira-legend"></div>
</div>
<table class="table table-condensed numeros servicos">
{% for servico in tabela_resumo_seit %}
<tr>
{% if forloop.first %}
<th>{{ servico.nome }}</th>
<th>{{ servico.total }}</th>
<th>{{ servico.novos_mes_anterior }}</th>
<th>{{ servico.novos_mes_atual }}</th>
{% else %}
<th class="dropdown">
<a id="ddm-{{ servico.nome }}" data-toggle="dropdown" href="#">{{ servico.nome }}</a>
<table class="table table-condensed numeros servicos dropdown-menu" role="menu" aria-labelledby="ddm-{{ servico.nome }}">
{% for mes in servico.novos_por_mes %}
<tr><th>{{ mes.mes }}</th><td>{{ mes.total }}</td></tr>
{% endfor %}
</table>
</th>
<td>{{ servico.total }}</td>
<td>{{ servico.novos_mes_anterior }}</td>
<td>{{ servico.novos_mes_atual }}</td>
{% endif %}
</tr>
{% endfor %}
</table>
</div>
</div>
</div>
</div>
{% comment %}
<div class="row row-flex row-flex-wrap">
<div class="col-md-6">
<div class="panel panel-primary flex-col">
<div class="panel-heading">{% trans 'Convênios assinados por projeto' %}</div>
<div class="panel-body">
<div id="canvas-holder-1">
<canvas id="chart-area-1" width="150" height="150" />
<div class="chartcontainer">
<div>
<canvas id="chart-area-convenios" width="400" height="400" data-source="{% url "home_chartconvenios" %}" data-legend-id="area-convenios-legend"></canvas>
</div>
<div id="area-convenios-legend"></div>
</div>
</div>
</div>
@ -99,13 +80,13 @@
<div class="panel panel-primary flex-col">
<div class="panel-heading">{% trans 'Processos de convênios por projeto' %}</div>
<div class="panel-body">
<div id="canvas-holder-2">
<canvas id="chart-area-2" width="150" height="150" />
<div class="chartcontainer">
<canvas id="chart-area-processos" width="150" height="150" data-source="{% url "home_chartconvenios" %}?q=assinados" data-legend-id="area-processos-legend"></canvas>
<div id="area-processos-legend"></div>
</div>
</div>
</div>
</div>
</div>
{% endcomment %}

60
templates/snippets/modules/resumo_convenios.html

@ -0,0 +1,60 @@
{% load i18n %}
<div class="panel panel-primary flex-col">
<div class="panel-heading">{% trans 'Resumo de informações' %}</div>
<div class="panel-body table-responsive">
<dl class="dl-horizontal">
<dt class="pilllabel">{% trans 'Resumo por região' %}:</dt>
<dd>
<ul class="nav nav-pills">
<li><a href="{% url 'convenios-report_regiao_pdf' 'CO' %}">Centro Oeste</a></li>
<li><a href="{% url 'convenios-report_regiao_pdf' 'NE' %}">Nordeste</a></li>
<li><a href="{% url 'convenios-report_regiao_pdf' 'NO' %}">Norte</a></li>
<li><a href="{% url 'convenios-report_regiao_pdf' 'SD' %}">Sudeste</a></li>
<li><a href="{% url 'convenios-report_regiao_pdf' 'SL' %}">Sul</a></li>
</ul>
</dd>
</dl>
<table class="table table-condensed numeros">
<tr>
{% for item in tabela_resumo_camara.cabecalho_topo %}
<th>{{item}}</th>
{% endfor %}
</tr>
{% for cabecalho,lista in tabela_resumo_camara.lista_zip %}
<tr>
<th>{{cabecalho}}</th>
{% for item in lista %}
<td>{{item}}</td>
{% endfor %}
</tr>
{% endfor %}
</table>
</div>
<div class="panel-footer">
<table class="table table-condensed numeros">
<tr>
<th>{% trans 'Total de câmaras' %}</th>
<td>{{ tabela_resumo_camara.total_camaras }}</td>
</tr>
<tr>
<th>{% trans 'Câmaras sem processo' %}</th>
<td>{{ tabela_resumo_camara.camaras_sem_processo }}</td>
</tr>
<tr>
<th>{% trans 'Casas sem convenio que utilizam algum serviço de hospedagem' %} <a href="{% url "home_reportsemconvenio" %}?modo=H" target="_blank" aria-label="{% trans "Listar casas" %}" title="{% trans "Listar casas" %}"><span class="glyphicon glyphicon-list-alt" aria-hidden="true"></span></a></th>
<td>{{ tabela_resumo_camara.sem_convenio.hospedagem|length }}</td>
</tr>
<tr>
<th>{% trans 'Casas sem convenio que utilizam somente serviço de registro' %} <a href="{% url "home_reportsemconvenio" %}?modo=R" target="_blank" aria-label="{% trans "Listar casas" %}" title="{% trans "Listar casas" %}"><span class="glyphicon glyphicon-list-alt" aria-hidden="true"></span></a></th>
<td>{{ tabela_resumo_camara.sem_convenio.registro|length }}</td>
</tr>
<tr>
<th>{% trans 'Casas sem convenio que utilizam algum serviço de registro e/ou hospedagem' %} <a href="{% url "home_reportsemconvenio" %}" target="_blank" aria-label="{% trans "Listar casas" %}" title="{% trans "Listar casas" %}"><span class="glyphicon glyphicon-list-alt" aria-hidden="true"></span></a></th>
<td>{{ tabela_resumo_camara.sem_convenio.total|length }}</td>
</tr>
</table>
</div>
</div>

38
templates/snippets/modules/resumo_seit.html

@ -0,0 +1,38 @@
{% load static from staticfiles %}
{% load i18n %}
<div class="panel panel-primary flex-col">
<div class="panel-heading">{% trans 'Serviços hospedados no Interlegis (SEIT)' %}</div>
<div class="panel-body">
<table class="table table-condensed numeros servicos">
<tr>
{% for s in tabela_resumo_seit.titulos %}
<th>{{ s }}</th>
{% endfor %}
</tr>
{% for servico in tabela_resumo_seit.servicos %}
<tr>
<th class="dropdown">
<a id="ddm-{{ servico.nome }}" data-toggle="dropdown" href="#">{{ servico.nome }}</a>
<table class="table table-condensed numeros servicos dropdown-menu" role="menu" aria-labelledby="ddm-{{ servico.nome }}">
{% for mes in servico.novos_por_mes %}
<tr><th>{{ mes.mes }}</th><td>{{ mes.total }}</td></tr>
{% endfor %}
</table>
</th>
<td>{{ servico.total }}</td>
<td>{{ servico.novos_mes_anterior }}</td>
<td>{{ servico.novos_mes_atual }}</td>
</tr>
{% endfor %}
</table>
<div>
<a href="{% url "home_resumoseit" %}?ano={{ tabela_resumo_seit.mes_anterior.year|safe }}&mes={{ tabela_resumo_seit.mes_anterior.month|safe }}" aria-label="{% trans "Retroceder um mês" %}" data-target="resumoseit">
<span class="glyphicon glyphicon-chevron-left pull-left" aria-hidden="true"></span>
</a>
<a href="{% url "home_resumoseit" %}?ano={{ tabela_resumo_seit.proximo_mes.year|safe }}&mes={{ tabela_resumo_seit.proximo_mes.month|safe }}" aria-label="{% trans "Avançar um mês" %}" data-target="resumoseit">
<span class="glyphicon glyphicon-chevron-right pull-right" aria-hidden="true"></span>
</a>
</div>
</div>
</div>
Loading…
Cancel
Save