diff --git a/sigi/apps/convenios/admin.py b/sigi/apps/convenios/admin.py
index 9b8bcdc..36198f4 100644
--- a/sigi/apps/convenios/admin.py
+++ b/sigi/apps/convenios/admin.py
@@ -65,7 +65,7 @@ class ConvenioAdmin(admin.ModelAdmin):
report.generate_by(PDFGenerator, filename=response)
return response
- relatorio.short_description = 'Gerar relatorio dos convenios selecionados'
+ relatorio.short_description = u'Exportar convênios selecionados para PDF'
class EquipamentoPrevistoAdmin(admin.ModelAdmin):
diff --git a/sigi/apps/convenios/reports.py b/sigi/apps/convenios/reports.py
index ca711a2..2cb19c5 100644
--- a/sigi/apps/convenios/reports.py
+++ b/sigi/apps/convenios/reports.py
@@ -4,7 +4,7 @@ from ctypes import alignment
from operator import attrgetter
from geraldo import Report, ReportBand, ObjectValue, DetailBand, Label, \
landscape,SystemField, BAND_WIDTH,ReportGroup, \
- FIELD_ACTION_SUM, FIELD_ACTION_COUNT
+ FIELD_ACTION_SUM, FIELD_ACTION_COUNT, FIELD_ACTION_AVG
from geraldo.graphics import Image
from reportlab.lib.units import cm
@@ -26,8 +26,9 @@ class CasasComEquipamentosReport(object):
class SemEquipamentosReport(object):
pass
+
class ConvenioReport(ReportDefault):
- title = u'Relatório de Convênios'
+ title = u'Relatório de Convênios'
class band_page_header(ReportDefault.band_page_header):
@@ -151,62 +152,60 @@ class ConvenioReport(ReportDefault):
)
]
-
+float_duas_casas = lambda instance: '%.2f' % (instance)
class ConvenioReportRegiao(ReportDefault):
title = u'Relatório de Convênios por Região'
class band_page_header(ReportDefault.band_page_header):
label_top = ReportDefault.band_page_header.label_top
+ label_left = [0.5,6,8,10,12,14]
+ map(lambda x:x-0.4,label_left)
elements = list(ReportDefault.band_page_header.elements)
elements += [
- Label(
- text="Região", left=0*cm,
- top=label_top,
- ),
- Label(
- text="Casas", left=3*cm,
- top=label_top,
- ),
- Label(
- text="Conveniadas", left=5*cm,
- top=label_top,
- ),
- Label(
- text="%", left=7*cm,
- top=label_top
- ),
- Label(
- text="Não Conveniadas", left=9*cm,
- top=label_top,
- ),
+ Label(text="UF", left=label_left[0]*cm,top=label_top,),
+ Label(text="Total", left=label_left[1]*cm,top=label_top,),
+ Label(text="Aderidas", left=label_left[2]*cm,top=label_top,),
+ Label(text="%", left=label_left[3]*cm,top=label_top),
+ Label(text="Ñ Aderidas", left=label_left[4]*cm,top=label_top,),
+ Label(text="%", left=label_left[5]*cm,top=label_top),
]
class band_detail(ReportDefault.band_detail):
- elements=[
- ObjectValue(attribute_name='regiao', left=0*cm, ),
- ObjectValue(attribute_name='casas', left=3*cm,),
- ObjectValue(attribute_name='casas_conveniadas', left=5*cm),
- ObjectValue(attribute_name='porc_casas_conveniadas', left=7*cm),
- ]
- border = {'bottom': True}
+ label_left = [0.5,6,8,10,12,14]
+ display_inline = True
+ float_duas_casas = lambda instance: '%.2f' % (instance.porc_casas_aderidas)
+ default_style = {'fontName': 'Helvetica', 'fontSize': 11}
- class band_summary(ReportBand):
+ elements=[
+ ObjectValue(attribute_name='estado', left=label_left[0]*cm, ),
+ ObjectValue(attribute_name='quant_casas', left=label_left[1]*cm,),
+ ObjectValue(attribute_name='quant_casas_aderidas', left=label_left[2]*cm),
+ ObjectValue(attribute_name='porc_casas_aderidas', left=label_left[3]*cm),
+ ObjectValue(attribute_name='quant_casas_nao_aderidas', left=label_left[4]*cm),
+ ObjectValue(attribute_name='porc_casas_nao_aderidas', left=label_left[5]*cm,),
+ ]
+
+ class band_summary(ReportBand):
+ label_left = [0.5,6,8,10,12,14]
elements = [
- Label(text="Total", top=0.1*cm, left=0),
- ObjectValue(attribute_name='casas', action=FIELD_ACTION_SUM, left=3*cm, top=0.1*cm),
- ObjectValue(attribute_name='casas_conveniadas', left=6*cm, action=FIELD_ACTION_SUM),
+ Label(text="Total", top=0.1*cm, left=label_left[0]*cm),
+ ObjectValue(attribute_name='quant_casas', action=FIELD_ACTION_SUM, left=label_left[1]*cm, ),
+ ObjectValue(attribute_name='quant_casas_aderidas', action=FIELD_ACTION_SUM, left=label_left[2]*cm),
+# ObjectValue(attribute_name='porc_casas_aderidas', action=FIELD_ACTION_AVG, left=label_left[3]*cm,
+# #get_value= lambda instance : lambda instance: '%.2f' % (instance.porc_casas_aderidas),
+# ),
+ ObjectValue(attribute_name='quant_casas_nao_aderidas', action=FIELD_ACTION_SUM, left=label_left[4]*cm),
+# ObjectValue(attribute_name='porc_casas_nao_aderidas', left=label_left[5]*cm,
+# get_value=lambda x: teste(),
+# ),
]
borders = {'top':True}
- #child_bands = [
- # ReportBand(
- # height = 0.6*cm,
- # elements = [
- # Label(text="Total",),
- # ObjectValue(attribute_name='casas', action=FIELD_ACTION_COUNT,)
- # ]
- # ),
- # ]
+
+
+
+
+
class ConvenioPorCMReport(ConvenioReport):
title = u'Relatório de Convênios por Câmera Municipal'
diff --git a/sigi/apps/convenios/templates/convenios/change_list.html b/sigi/apps/convenios/templates/convenios/change_list.html
index 0e0620a..eee44af 100644
--- a/sigi/apps/convenios/templates/convenios/change_list.html
+++ b/sigi/apps/convenios/templates/convenios/change_list.html
@@ -1,17 +1,63 @@
{% extends "admin/change_list.html" %}
{% load i18n reporting_tags %}
+{% block extrastyle %}
+ {{ block.super }}
+ {% include "jquery/tabs_style.html" %}
+
+{% endblock %}
+
{% block object-tools %}
{% if has_add_permission %}
-
+
+
+
+
+
+
+
Escolha uma das opções abaixo para exportar todos os convênios listados.
+ Caso queira selecionar convênios especificos, utilize a opção "exportar
+ convênios selecionados" na caixa "Ação".
+
+
+
+
Escolha uma das opções abaixo para obter um resumo de informações do Projeto Interlegis por região.
+ Outros projetos como PPM e PML não serão incluidos.
+
+
+
+
+
{% endif %}
{% endblock %}
diff --git a/sigi/apps/convenios/templates/convenios/relatorio_por_regiao.html b/sigi/apps/convenios/templates/convenios/relatorio_por_regiao.html
new file mode 100644
index 0000000..d5a6247
--- /dev/null
+++ b/sigi/apps/convenios/templates/convenios/relatorio_por_regiao.html
@@ -0,0 +1,165 @@
+
+
+ Relatório por Região
+
+
+
+
+
+
+
+ |
+ SENADO FEDERAL SINTER - Secretaria Especial do Interlegis |
+ |
+
+
+
Resumo por Região
+
+
+
+ {{sumario_regiao.regiao}}
+
+
+ UF |
+ Total |
+ Não Aderidas |
+ % |
+ Aderidas |
+ % |
+ Não Equipadas |
+ % |
+ Equipadas |
+ % |
+
+
+
+ {%for r in lista%}
+
+ {{r.estado}} |
+ {{r.quant_casas}} |
+ {{r.quant_casas_nao_aderidas}} |
+ {{r.porc_casas_nao_aderidas}} |
+ {{r.quant_casas_aderidas}} |
+ {{r.porc_casas_aderidas}} |
+ {{r.quant_casas_nao_equipadas}} |
+ {{r.porc_casas_nao_equipadas}} |
+ {{r.quant_casas_equipadas}} |
+ {{r.porc_casas_equipadas}} |
+
+
+ {%endfor%}
+
+ Total |
+ {{sumario_regiao.total}} |
+ {{sumario_regiao.total_casas_nao_aderidas}} |
+ {{sumario_regiao.porc_casas_nao_aderidas}} |
+ {{sumario_regiao.total_casas_aderidas}} |
+ {{sumario_regiao.porc_casas_aderidas}} |
+ {{sumario_regiao.total_casas_nao_equipadas }} |
+ {{sumario_regiao.porc_casas_nao_equipadas }} |
+ {{sumario_regiao.total_casas_equipadas }} |
+ {{sumario_regiao.porc_casas_equipadas }} |
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sigi/apps/convenios/views.py b/sigi/apps/convenios/views.py
index 8c1d671..710beb3 100644
--- a/sigi/apps/convenios/views.py
+++ b/sigi/apps/convenios/views.py
@@ -1,4 +1,5 @@
from django.http import HttpResponse, HttpResponseRedirect
+from django.shortcuts import render_to_response, get_list_or_404
from geraldo.generators import PDFGenerator
from sigi.apps.convenios.models import Convenio
from sigi.apps.convenios.reports import ConvenioReport, \
@@ -6,6 +7,14 @@ from sigi.apps.convenios.reports import ConvenioReport, \
ConvenioPorALReport, \
ConvenioReportRegiao
from sigi.apps.casas.models import CasaLegislativa
+from sigi.apps.contatos.models import UnidadeFederativa
+
+import ho.pisa as pisa
+from django.template import Context, loader
+
+import datetime
+
+
def report_por_cm(request, id=None):
@@ -54,45 +63,110 @@ def report_por_al(request, id=None):
report.generate_by(PDFGenerator, filename=response)
return response
-class Relatorios(object):
- def __init__(self, regiao, casas, casas_conveniadas):
- self.regiao = regiao
+class RelatorioRegiao(object):
+ def __init__(self, estado, casas, casas_aderidas, casas_equipadas,casas_nao_equipadas):
+ self.estado = estado
self.quant_casas = casas
- self.quant_casas_conveniadas = casas_conveniadas
- if(casas_conveniadas!=0):
- self.porc_casas_conveniadas = float(casas_conveniadas)/float(casas)*100
+ self.quant_casas_aderidas = casas_aderidas
+ self.quant_casas_nao_aderidas = (casas - casas_aderidas)
+ self.quant_casas_equipadas = casas_equipadas
+ self.quant_casas_nao_equipadas = casas_nao_equipadas
+ if(casas!=0):
+ self.porc_casas_aderidas = "%.2f" % (float(casas_aderidas)*100/float(casas))
+ self.porc_casas_nao_aderidas = "%.2f" % (float(self.quant_casas_nao_aderidas)*100/float(casas))
else:
- self.porc_casas_conveniadas = 0
+ self.porc_casas_aderidas = 0
+ self.porc_casas_nao_aderidas = 0
-def reportRegiao(request):
+ if(casas_aderidas!=0):
+ self.porc_casas_equipadas = "%.2f" % (float(casas_equipadas)*100/float(casas_aderidas))
+ self.porc_casas_nao_equipadas = "%.2f" % (float(self.quant_casas_nao_equipadas)*100/float(casas_aderidas))
+ else:
+ self.porc_casas_equipadas = 0
+ self.porc_casas_nao_equipadas = 0
- REGIAO_CHOICES = (
- ('SL', 'Sul'),
- ('SD', 'Sudeste'),
- ('CO', 'Centro-Oeste'),
- ('NE', 'Nordeste'),
- ('NO', 'Norte'),
- )
-
- convenios = Convenio.object.all()
-
- regioes = []
- conveniosCO.filter(municipio__uf__regiao='CO')
- conveniosNO.filter(municipio__uf__regiao='NO')
- conveniosNE.filter(municipio__uf__regiao='NE')
- conveniosSD.filter(municipio__uf__regiao='SD')
- conveniosSL.filter(municipio__uf__regiao='SL')
-
- for regiao in REGIAO_CHOICES:
+class RelatorioRegiaoTotal:
+ def __init__(self,regiao,total,total_casas_aderidas,total_casas_equipadas,total_casas_nao_equipadas):
+ self.regiao = regiao
+ self.total = total
+ self.total_casas_aderidas = total_casas_aderidas
+ self.total_casas_nao_aderidas = (total - total_casas_aderidas)
+ self.total_casas_equipadas = total_casas_equipadas
+ self.total_casas_nao_equipadas = total_casas_nao_equipadas
+
+ if(total!=0):
+ self.porc_casas_aderidas = "%.2f" % (float(self.total_casas_aderidas)*100/float(total))
+ self.porc_casas_nao_aderidas = "%.2f" % (float(self.total_casas_nao_aderidas)*100/float(total))
+ else:
+ self.porc_casas_aderidas = 0
+ self.porc_casas_nao_aderidas = 0
+
+ if(total_casas_aderidas!=0):
+ self.porc_casas_equipadas = "%.2f" % (float(self.total_casas_equipadas)*100/float(total_casas_aderidas))
+ self.porc_casas_nao_equipadas = "%.2f" % (float(total_casas_nao_equipadas)*100/float(total_casas_aderidas))
+ else:
+ self.porc_casas_equipadas = 0
+ self.porc_casas_nao_equipadas = 0
+
+def report_regiao(request,regiao='NE'):
+
+ REGIAO_CHOICES = {
+ 'SL': 'Sul',
+ 'SD': 'Sudeste',
+ 'CO': 'Centro-Oeste',
+ 'NE': 'Nordeste',
+ 'NO': 'Norte',
+ }
+
+ get_list_or_404(UnidadeFederativa,regiao=regiao)
- casasSD = CasaLegislativa.objects.filter(municipio__uf__regiao=regiao[0])
- casasConvSD = CasaLegislativa.objects.filter(convenio__casa_legislativa__municipio__uf__regiao=regiao[0]).distinct()
+ # Contando casas por estado
+ estados = get_list_or_404(UnidadeFederativa,regiao=regiao)
- relatorio.append(Relatorios(casa[1], casasSD.count(),
- casasConvSD.count()))
+ lista = []
+ for estado in estados:
+
+ casas = CasaLegislativa.objects.filter(municipio__uf=estado)
+ casas_aderidas = casas.exclude(convenio=None).distinct()
+ casas_equipadas = casas_aderidas.exclude(convenio__data_termo_aceite=None).distinct()
+ casas_nao_equipadas = casas_aderidas.filter(convenio__data_termo_aceite=None).distinct()
+
+ lista.append(
+ RelatorioRegiao(
+ estado.sigla,casas.count(),
+ casas_aderidas.count(),
+ casas_equipadas.count(),
+ casas_nao_equipadas.count()
+ )
+ )
+
+ # Total de casas na regiao
+ casas = CasaLegislativa.objects.filter(municipio__uf__regiao=regiao)
+ casas_aderidas = casas.exclude(convenio=None).distinct()
+ casas_equipadas = casas_aderidas.exclude(convenio__data_termo_aceite=None).distinct()
+ casas_nao_equipadas = casas_aderidas.filter(convenio__data_termo_aceite=None).distinct()
+ sumario_regiao = RelatorioRegiaoTotal(
+ REGIAO_CHOICES[regiao],
+ casas.count(),
+ casas_aderidas.count(),
+ casas_equipadas.count(),
+ casas_nao_equipadas.count(),
+ )
+
+# response = HttpResponse(mimetype='application/pdf')
+# relatorio = ConvenioReportRegiao(queryset=lista)
+# relatorio.generate_by(PDFGenerator, filename=response)
+ data = datetime.datetime.now().strftime('%d/%m/%Y')
+ hora = datetime.datetime.now().strftime('%H:%M')
+ pisa.showLogging()
response = HttpResponse(mimetype='application/pdf')
- relatorio = ConvenioReportRegiao(queryset=relatorio)
- relatorio.generate_by(PDFGenerator, filename=response)
+ response['Content-Disposition'] = 'attachment; filename=RelatorioRegiao_' + regiao + '.pdf'
+ t = loader.get_template('convenios/relatorio_por_regiao.html')
+ c = Context({'lista': lista,'sumario_regiao':sumario_regiao,'data':data,'hora':hora})
+ pdf = pisa.CreatePDF(t.render(c),response)
+ if not pdf.err:
+ pisa.startViewer(response)
+
return response
diff --git a/sigi/urls.py b/sigi/urls.py
index 7c3c056..94d59f0 100644
--- a/sigi/urls.py
+++ b/sigi/urls.py
@@ -27,8 +27,8 @@ urlpatterns = patterns(
'sigi.apps.convenios.views.report_por_cm'),
(r'^convenios/convenio/reports_por_al/',
'sigi.apps.convenios.views.report_por_al'),
- (r'^convenios/convenio/reportsRegiao/',
- 'sigi.apps.convenios.views.reportRegiao'),
+ (r'^convenios/convenio/reportsRegiao/(?P\w+)',
+ 'sigi.apps.convenios.views.report_regiao'),
# automatic interface based on admin
(r'^(.*)', sites.default.root),
)