mirror of https://github.com/interlegis/sigi.git
Lude Ribeiro
3 years ago
3 changed files with 139 additions and 0 deletions
@ -0,0 +1,96 @@ |
|||
from datetime import date, timedelta |
|||
from django.utils.translation import gettext as _ |
|||
from django.contrib import admin |
|||
|
|||
class ServicoAtivoFilter(admin.FieldListFilter): |
|||
parameter_name = None |
|||
|
|||
def __init__(self, field, request, params, model, model_admin, field_path): |
|||
self.model = model |
|||
self.model_admin = model_admin |
|||
self.parameter_name = f'{field_path}__isnull' |
|||
|
|||
super().__init__(field, request, params, model, model_admin, field_path) |
|||
|
|||
self.title = _("Serviço ativo") |
|||
|
|||
if self.parameter_name in params: |
|||
value = params.pop(self.parameter_name) |
|||
self.used_parameters[self.parameter_name] = value |
|||
lookup_choices = self.lookups(request, model_admin) |
|||
|
|||
if lookup_choices is None: |
|||
lookup_choices = () |
|||
self.lookup_choices = list(lookup_choices) |
|||
|
|||
def lookups(self, request, model_admin): |
|||
return ( |
|||
('True', _('Ativo')), |
|||
('False', _('Inativo')) |
|||
) |
|||
|
|||
def has_output(self): |
|||
return self.model.objects.exists() |
|||
|
|||
def value(self): |
|||
return self.used_parameters.get(self.parameter_name) |
|||
|
|||
def expected_parameters(self): |
|||
return [self.parameter_name,] |
|||
|
|||
def choices(self, changelist): |
|||
yield { |
|||
'selected': self.value() is None, |
|||
'query_string': changelist.get_query_string( |
|||
remove=[self.parameter_name]), |
|||
'display': _('All'), |
|||
} |
|||
for lookup, title in self.lookup_choices: |
|||
yield { |
|||
'selected': str(self.value()) == str(lookup), |
|||
'query_string': changelist.get_query_string( |
|||
{self.parameter_name: lookup} |
|||
), |
|||
'display': title, |
|||
} |
|||
|
|||
class DataUtimoUsoFilter(admin.SimpleListFilter): |
|||
title = _("Atualização") |
|||
parameter_name = 'atualizacao' |
|||
|
|||
def lookups(self, request, model_admin): |
|||
return ( |
|||
('err', _("Erro na verificação")), |
|||
('year', _("Sem atualização há um ano ou mais")), |
|||
('semester', _("Sem atualização de seis meses a um ano")), |
|||
('quarter', _("Sem atualização de três a seis meses")), |
|||
('month', _("Sem atualização de um a três meses")), |
|||
('week', _("Sem atualização de uma semana a um mês")), |
|||
('updated', _("Atualizado na última semana")), |
|||
) |
|||
|
|||
def queryset(self, request, queryset): |
|||
if self.value() is not None: |
|||
queryset = queryset.exclude(tipo_servico__string_pesquisa="") |
|||
if self.value() == 'err': |
|||
queryset = queryset.exclude(erro_atualizacao="") |
|||
elif self.value() == 'year': |
|||
limite = date.today() - timedelta(days=365) |
|||
queryset = queryset.filter(data_ultimo_uso__lte=limite) |
|||
else: |
|||
de = date.today() - ( |
|||
timedelta(days=365) if self.value() == 'semester' else |
|||
timedelta(days=6*30) if self.value() == 'quarter' else |
|||
timedelta(days=3*30) if self.value() == 'month' else |
|||
timedelta(days=30) if self.value() == 'week' else |
|||
timedelta(days=0) |
|||
) |
|||
ate = date.today() - ( |
|||
timedelta(days=6*30) if self.value() == 'semester' else |
|||
timedelta(days=3*30) if self.value() == 'quarter' else |
|||
timedelta(days=30) if self.value() == 'month' else |
|||
timedelta(days=7) if self.value() == 'week' else |
|||
timedelta(days=0) |
|||
) |
|||
queryset = queryset.filter(data_ultimo_uso__range=(de, ate)) |
|||
return queryset |
@ -0,0 +1,30 @@ |
|||
from django.forms.models import ModelForm |
|||
from django.utils.encoding import force_str |
|||
from sigi.apps.servicos.models import Servico, CasaAtendida |
|||
|
|||
class ServicoFormAdmin(ModelForm): |
|||
class Meta: |
|||
model = Servico |
|||
fields = '__all__' |
|||
|
|||
def __init__(self, *args, **kwargs): |
|||
super(ServicoFormAdmin, self).__init__(*args, **kwargs) |
|||
|
|||
self.fields['contato_tecnico'].choices = () |
|||
self.fields['contato_administrativo'].choices = () |
|||
|
|||
if self.instance.casa_legislativa_id: |
|||
id_casa = self.instance.casa_legislativa_id |
|||
elif 'initial' in kwargs and 'id_casa' in kwargs['initial']: |
|||
id_casa = kwargs['initial']['id_casa'] |
|||
self.instance.casa_legislativa_id = id_casa |
|||
else: |
|||
id_casa = None |
|||
|
|||
if id_casa: |
|||
casa = CasaAtendida.objects.get(pk=id_casa) |
|||
contatos = [ |
|||
(f.id, force_str(f)) for f in casa.funcionario_set.all() |
|||
] |
|||
self.fields['contato_tecnico'].choices = contatos |
|||
self.fields['contato_administrativo'].choices = contatos |
@ -0,0 +1,13 @@ |
|||
{% load i18n %} |
|||
{% with choice=choices.0 %} |
|||
<div class="col s12"> |
|||
<form method="get" action="{{ choice.query_string|iriencode }}"> |
|||
<label>{% blocktrans with filter_title=title %} By {{ filter_title }} {% endblocktrans %}</label> |
|||
<button class="btn-floating btn-small right pulse waves-effect waves-light" type="submit"><i class="material-icons tiny">send</i></button> |
|||
<a href="{{ choice.query_string|iriencode }}">{% trans 'All' %}</a> |
|||
{% for field in choice.form %} |
|||
<input id="{{ field.id }}" name="{{ field.name }}" type="text" class="datepicker" value="{{ field.value|default_if_none:''|date:"SHORT_DATE_FORMAT" }}"/> |
|||
{% endfor %} |
|||
</form> |
|||
</div> |
|||
{% endwith %} |
Loading…
Reference in new issue