Browse Source

correcoes em estatisticas de acesso

pull/2433/head
Cesar Carvalho 7 years ago
parent
commit
1b2cfe6234
  1. 41
      sapl/base/forms.py
  2. 36
      sapl/base/views.py
  3. 20
      sapl/norma/migrations/0018_normaestatisticas_ano.py
  4. 20
      sapl/norma/migrations/0019_auto_20181219_1807.py
  5. 6
      sapl/norma/models.py
  6. 6
      sapl/norma/views.py
  7. 10
      sapl/templates/base/EstatisticasAcessoNormas_filter.html

41
sapl/base/forms.py

@ -23,7 +23,7 @@ from sapl.crispy_layout_mixin import (SaplFormLayout, form_actions, to_column,
from sapl.audiencia.models import AudienciaPublica,TipoAudienciaPublica from sapl.audiencia.models import AudienciaPublica,TipoAudienciaPublica
from sapl.comissoes.models import Reuniao, Comissao from sapl.comissoes.models import Reuniao, Comissao
from sapl.materia.models import (MateriaLegislativa, UnidadeTramitacao, StatusTramitacao) from sapl.materia.models import (MateriaLegislativa, UnidadeTramitacao, StatusTramitacao)
from sapl.norma.models import (NormaJuridica) from sapl.norma.models import (NormaJuridica, NormaEstatisticas)
from sapl.parlamentares.models import SessaoLegislativa from sapl.parlamentares.models import SessaoLegislativa
from sapl.sessao.models import SessaoPlenaria from sapl.sessao.models import SessaoPlenaria
from sapl.settings import MAX_IMAGE_UPLOAD_SIZE from sapl.settings import MAX_IMAGE_UPLOAD_SIZE
@ -728,6 +728,45 @@ class RelatorioNormasMesFilterSet(django_filters.FilterSet):
return parent.distinct().order_by('data') return parent.distinct().order_by('data')
class EstatisticasAcessoNormasFilterSet(django_filters.FilterSet):
ano = django_filters.ChoiceFilter(required=True,
label='Ano de acesso',
choices=RANGE_ANOS)
filter_overrides = {models.DateField: {
'filter_class': django_filters.DateFromToRangeFilter,
'extra': lambda f: {
'label': '%s (%s)' % (f.verbose_name, _('Ano')),
'widget': RangeWidgetOverride}
}}
class Meta:
model = NormaEstatisticas
fields = ['ano']
def __init__(self, *args, **kwargs):
super(EstatisticasAcessoNormasFilterSet, self).__init__(
*args, **kwargs)
self.filters['ano'].label = 'Ano'
self.form.fields['ano'].required = True
row1 = to_row([('ano', 12)])
self.form.helper = FormHelper()
self.form.helper.form_method = 'GET'
self.form.helper.layout = Layout(
Fieldset(_('Normas por acessos nos meses do ano.'),
row1, form_actions(label='Pesquisar'))
)
@property
def qs(self):
parent = super(EstatisticasAcessoNormasFilterSet, self).qs
return parent.distinct().order_by('horario_acesso')
class RelatorioNormasVigenciaFilterSet(django_filters.FilterSet): class RelatorioNormasVigenciaFilterSet(django_filters.FilterSet):
ano = django_filters.ChoiceFilter(required=True, ano = django_filters.ChoiceFilter(required=True,

36
sapl/base/views.py

@ -10,6 +10,7 @@ from django.contrib.auth.tokens import default_token_generator
from django.core.exceptions import ObjectDoesNotExist, PermissionDenied from django.core.exceptions import ObjectDoesNotExist, PermissionDenied
from django.core.mail import send_mail from django.core.mail import send_mail
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.db import connection
from django.db.models import Count from django.db.models import Count
from django.http import Http404, HttpResponseRedirect from django.http import Http404, HttpResponseRedirect
from django.template import TemplateDoesNotExist from django.template import TemplateDoesNotExist
@ -49,7 +50,8 @@ from .forms import (AlterarSenhaForm, CasaLegislativaForm,
RelatorioPresencaSessaoFilterSet, RelatorioPresencaSessaoFilterSet,
RelatorioReuniaoFilterSet, UsuarioCreateForm, RelatorioReuniaoFilterSet, UsuarioCreateForm,
UsuarioEditForm, RelatorioNormasMesFilterSet, UsuarioEditForm, RelatorioNormasMesFilterSet,
RelatorioNormasVigenciaFilterSet) RelatorioNormasVigenciaFilterSet,
EstatisticasAcessoNormasFilterSet)
from .models import AppConfig, CasaLegislativa from .models import AppConfig, CasaLegislativa
@ -859,8 +861,8 @@ class RelatorioNormasVigenciaView(FilterView):
class EstatisticasAcessoNormas(FilterView): class EstatisticasAcessoNormas(FilterView):
model = NormaJuridica model = NormaEstatisticas
filterset_class = RelatorioNormasMesFilterSet filterset_class = EstatisticasAcessoNormasFilterSet
template_name = 'base/EstatisticasAcessoNormas_filter.html' template_name = 'base/EstatisticasAcessoNormas_filter.html'
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
@ -877,26 +879,36 @@ class EstatisticasAcessoNormas(FilterView):
context['show_results'] = show_results_filter_set(qr) context['show_results'] = show_results_filter_set(qr)
context['ano'] = self.request.GET['ano'] context['ano'] = self.request.GET['ano']
query = '''
select norma_id, ano, extract(month from horario_acesso) as mes, count(*)
from norma_normaestatisticas
where ano = {}
group by mes, ano, norma_id
order by mes asc, ano;
'''.format(context['ano'])
cursor = connection.cursor()
cursor.execute(query)
rows = cursor.fetchall()
normas_mes = collections.OrderedDict() normas_mes = collections.OrderedDict()
meses = {1: 'Janeiro', 2: 'Fevereiro', 3:'Março', 4: 'Abril', 5: 'Maio', 6:'Junho', meses = {1: 'Janeiro', 2: 'Fevereiro', 3:'Março', 4: 'Abril', 5: 'Maio', 6:'Junho',
7: 'Julho', 8: 'Agosto', 9:'Setembro', 10:'Outubro', 11:'Novembro', 12:'Dezembro'} 7: 'Julho', 8: 'Agosto', 9:'Setembro', 10:'Outubro', 11:'Novembro', 12:'Dezembro'}
for norma in context['object_list']:
if not meses[norma.data.month] in normas_mes:
normas_mes[meses[norma.data.month]] = []
norma_est = [norma, len(NormaEstatisticas.objects.filter(norma=norma))]
normas_mes[meses[norma.data.month]].append(norma_est)
meses_sem_acesso = [] for row in rows:
if not meses[int(row[2])] in normas_mes:
normas_mes[meses[int(row[2])]] = []
norma_est = [NormaJuridica.objects.get(id=row[0]), row[3]]
normas_mes[meses[int(row[2])]].append(norma_est)
# Ordena por acesso e limita em 5 # Ordena por acesso e limita em 5
for n in normas_mes: for n in normas_mes:
sorted_by_value = sorted(normas_mes[n], key=lambda kv: kv[1], reverse=True) sorted_by_value = sorted(normas_mes[n], key=lambda kv: kv[1], reverse=True)
normas_mes[n] = sorted_by_value[0:5] normas_mes[n] = sorted_by_value[0:5]
if all(v[1]==0 for v in normas_mes[n]):
meses_sem_acesso.append(n) import ipdb; ipdb.set_trace()
context['normas_mes'] = normas_mes context['normas_mes'] = normas_mes
context['meses_sem_acesso'] = meses_sem_acesso
return context return context

20
sapl/norma/migrations/0018_normaestatisticas_ano.py

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10.8 on 2018-12-19 18:35
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('norma', '0017_normaestatisticas'),
]
operations = [
migrations.AddField(
model_name='normaestatisticas',
name='ano',
field=models.PositiveSmallIntegerField(choices=[(2018, 2018), (2017, 2017), (2016, 2016), (2015, 2015), (2014, 2014), (2013, 2013), (2012, 2012), (2011, 2011), (2010, 2010), (2009, 2009), (2008, 2008), (2007, 2007), (2006, 2006), (2005, 2005), (2004, 2004), (2003, 2003), (2002, 2002), (2001, 2001), (2000, 2000), (1999, 1999), (1998, 1998), (1997, 1997), (1996, 1996), (1995, 1995), (1994, 1994), (1993, 1993), (1992, 1992), (1991, 1991), (1990, 1990), (1989, 1989), (1988, 1988), (1987, 1987), (1986, 1986), (1985, 1985), (1984, 1984), (1983, 1983), (1982, 1982), (1981, 1981), (1980, 1980), (1979, 1979), (1978, 1978), (1977, 1977), (1976, 1976), (1975, 1975), (1974, 1974), (1973, 1973), (1972, 1972), (1971, 1971), (1970, 1970), (1969, 1969), (1968, 1968), (1967, 1967), (1966, 1966), (1965, 1965), (1964, 1964), (1963, 1963), (1962, 1962), (1961, 1961), (1960, 1960), (1959, 1959), (1958, 1958), (1957, 1957), (1956, 1956), (1955, 1955), (1954, 1954), (1953, 1953), (1952, 1952), (1951, 1951), (1950, 1950), (1949, 1949), (1948, 1948), (1947, 1947), (1946, 1946), (1945, 1945), (1944, 1944), (1943, 1943), (1942, 1942), (1941, 1941), (1940, 1940), (1939, 1939), (1938, 1938), (1937, 1937), (1936, 1936), (1935, 1935), (1934, 1934), (1933, 1933), (1932, 1932), (1931, 1931), (1930, 1930), (1929, 1929), (1928, 1928), (1927, 1927), (1926, 1926), (1925, 1925), (1924, 1924), (1923, 1923), (1922, 1922), (1921, 1921), (1920, 1920), (1919, 1919), (1918, 1918), (1917, 1917), (1916, 1916), (1915, 1915), (1914, 1914), (1913, 1913), (1912, 1912), (1911, 1911), (1910, 1910), (1909, 1909), (1908, 1908), (1907, 1907), (1906, 1906), (1905, 1905), (1904, 1904), (1903, 1903), (1902, 1902), (1901, 1901), (1900, 1900), (1899, 1899), (1898, 1898), (1897, 1897), (1896, 1896), (1895, 1895), (1894, 1894), (1893, 1893), (1892, 1892), (1891, 1891), (1890, 1890)], default=2018, verbose_name='Ano'),
),
]

20
sapl/norma/migrations/0019_auto_20181219_1807.py

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10.8 on 2018-12-19 20:07
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('norma', '0018_normaestatisticas_ano'),
]
operations = [
migrations.AlterField(
model_name='normaestatisticas',
name='horario_acesso',
field=models.DateTimeField(blank=True, null=True),
),
]

6
sapl/norma/models.py

@ -3,6 +3,7 @@ from django.db import models
from django.template import defaultfilters from django.template import defaultfilters
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from model_utils import Choices from model_utils import Choices
import datetime
import reversion import reversion
from sapl.base.models import Autor from sapl.base.models import Autor
@ -194,8 +195,9 @@ class NormaJuridica(models.Model):
class NormaEstatisticas(models.Model): class NormaEstatisticas(models.Model):
usuario = models.CharField(max_length=50) usuario = models.CharField(max_length=50)
horario_acesso = models.DateTimeField( horario_acesso = models.DateTimeField(
blank=True, null=True, blank=True, null=True)
auto_now=True) ano = models.PositiveSmallIntegerField(verbose_name=_('Ano'),
choices=RANGE_ANOS, default=datetime.date.today().year)
norma = models.ForeignKey(NormaJuridica, norma = models.ForeignKey(NormaJuridica,
on_delete=models.CASCADE) on_delete=models.CASCADE)
def __str__(self): def __str__(self):

6
sapl/norma/views.py

@ -1,4 +1,4 @@
import datetime
import logging import logging
import re import re
import sapl import sapl
@ -194,7 +194,9 @@ class NormaCrud(Crud):
estatisticas_acesso_normas = AppConfig.objects.first().estatisticas_acesso_normas estatisticas_acesso_normas = AppConfig.objects.first().estatisticas_acesso_normas
if estatisticas_acesso_normas == 'S': if estatisticas_acesso_normas == 'S':
NormaEstatisticas.objects.create(usuario=str(self.request.user), NormaEstatisticas.objects.create(usuario=str(self.request.user),
norma_id=kwargs['pk']) norma_id=kwargs['pk'],
ano = datetime.date.today().year,
horario_acesso=datetime.datetime.now())
return super().get(request, *args, **kwargs) return super().get(request, *args, **kwargs)

10
sapl/templates/base/EstatisticasAcessoNormas_filter.html

@ -16,10 +16,7 @@
<br/> <br/>
{% if normas_mes|length == 0 %} {% if normas_mes|length == 0 %}
<br> <br>
<h3>{% trans 'Não foi encontrada nenhuma norma com os parâmetros buscados.'%}</h3> <h3>{% trans 'Nenhuma norma teve acesso neste ano.'%}</h3>
{% elif normas_mes|length == meses_sem_acesso|length %}
<br>
<h3>{% trans 'Nenhuma norma teve acesso neste ano.'%}</h3>
{% else %} {% else %}
{% for mes, normas in normas_mes.items %} {% for mes, normas in normas_mes.items %}
<div style="overflow:auto; "> <div style="overflow:auto; ">
@ -30,7 +27,6 @@
</tr> </tr>
</thead> </thead>
</table> </table>
{% if not mes in meses_sem_acesso %}
<table class="table table-bordered table-hover" style="width:100%; margin-bottom: 30px;"> <table class="table table-bordered table-hover" style="width:100%; margin-bottom: 30px;">
<thead class="thead-default" > <thead class="thead-default" >
<tr class="active"> <tr class="active">
@ -53,10 +49,6 @@
{% endfor %} {% endfor %}
</tbody> </tbody>
</table> </table>
{% else %}
<h3 style="text-align:center;">{% trans 'Nenhuma norma deste mês teve acessos.'%}</h3>
<br><br>
{% endif %}
</div> </div>
{% endfor %} {% endfor %}
{% endif %} {% endif %}

Loading…
Cancel
Save