mirror of https://github.com/interlegis/sigi.git
Sesostris Vieira
3 years ago
16 changed files with 98 additions and 194 deletions
@ -0,0 +1,2 @@ |
|||
-r requirements.txt |
|||
django-debug-toolbar==3.2.4 |
@ -0,0 +1,20 @@ |
|||
from django.contrib import admin |
|||
from django.utils.translation import gettext as _ |
|||
from sigi.apps.servidores.models import Servico |
|||
|
|||
|
|||
class ServicoFilter(admin.SimpleListFilter): |
|||
title = _("Subordinados à") |
|||
parameter_name = 'subordinado__id__exact' |
|||
|
|||
def lookups(self, request, model_admin): |
|||
return ([('None', _("Nenhum"))] + |
|||
[(s.id, s.nome) for s in Servico.objects.exclude(servico=None)]) |
|||
|
|||
def queryset(self, request, queryset): |
|||
if self.value(): |
|||
if self.value() == "None": |
|||
queryset = queryset.filter(subordinado=None) |
|||
else: |
|||
queryset = queryset.filter(subordinado__id=self.value()) |
|||
return queryset |
@ -1,66 +0,0 @@ |
|||
# -*- coding: utf-8 -*- |
|||
from collections import namedtuple |
|||
|
|||
from django import forms |
|||
from django.utils.translation import gettext as _ |
|||
|
|||
from sigi.apps.servidores.models import Ferias, Licenca, Funcao, Servidor |
|||
|
|||
|
|||
def valida_data_inicial_menor_que_final(data, chave_ini, chave_fim): |
|||
if data.get(chave_ini) >= data.get(chave_fim): |
|||
raise forms.ValidationError(_( |
|||
"A data de início deve ser menor que a data final. Verifique novamente")) |
|||
|
|||
|
|||
class FeriasForm(forms.ModelForm): |
|||
|
|||
class Meta: |
|||
model = Ferias |
|||
fields = '__all__' |
|||
|
|||
def clean(self): |
|||
data = self.cleaned_data |
|||
valida_data_inicial_menor_que_final(data, 'inicio_ferias', 'fim_ferias') |
|||
return data |
|||
|
|||
|
|||
class LicencaForm(forms.ModelForm): |
|||
|
|||
class Meta: |
|||
model = Licenca |
|||
fields = '__all__' |
|||
|
|||
def clean(self): |
|||
data = self.cleaned_data |
|||
valida_data_inicial_menor_que_final(data, 'inicio_licenca', 'fim_licenca') |
|||
return data |
|||
|
|||
|
|||
Periodo = namedtuple('Periodo', ['ini', 'fim']) |
|||
|
|||
|
|||
def periodos_se_sobrepoe(periodo1, periodo2): |
|||
return not (periodo1.fim < periodo2.ini or periodo2.fim < periodo1.ini) |
|||
|
|||
|
|||
class FuncaoForm(forms.ModelForm): |
|||
|
|||
class Meta: |
|||
model = Funcao |
|||
fields = '__all__' |
|||
|
|||
def clean(self): |
|||
data = self.cleaned_data |
|||
valida_data_inicial_menor_que_final(data, 'inicio_funcao', 'fim_funcao') |
|||
|
|||
# Verifica na função anterior, se o seu período é igual |
|||
# ou está entre o período da função atual. |
|||
servidor = Servidor.objects.get(nome_completo=data.get('servidor')) |
|||
for funcao in servidor.funcao_set.all(): |
|||
if periodos_se_sobrepoe( |
|||
Periodo(funcao.inicio_funcao, funcao.fim_funcao), |
|||
Periodo(data.get('inicio_funcao'), data.get('fim_funcao'))): |
|||
raise forms.ValidationError(_( |
|||
"Este período coincide com o de outra função exercida.")) |
|||
return data |
@ -1,14 +0,0 @@ |
|||
{% extends 'admin/change_list.html' %} |
|||
{% load i18n reporting_tags %} |
|||
|
|||
{% block object-tools-items %} |
|||
<li><a href="/servidores/servidores_por_cargo.pdf" class="historylink"> |
|||
<span class="glyphicon glyphicon-list-alt"></span> |
|||
{% trans 'Relatório por cargo' %} |
|||
</a></li> |
|||
<li><a href="/servidores/servidores_por_funcao.pdf" class="historylink"> |
|||
<span class="glyphicon glyphicon-list-alt"></span> |
|||
{% trans 'Relatório por função' %} |
|||
</a></li> |
|||
{{ block.super }} |
|||
{% endblock %} |
@ -0,0 +1,18 @@ |
|||
<a href="{{ widget.value.url }}"><img src="{{ widget.value.url }}"/></a> |
|||
{% if widget.is_initial %} |
|||
<p class="file-upload"> |
|||
{{ widget.initial_text }}: |
|||
<a href="{{ widget.value.url }}">{{ widget.value }}</a> |
|||
{% if not widget.required %} |
|||
<span class="clearable-file-input"> |
|||
<input type="checkbox" name="{{ widget.checkbox_name }}" id="{{ widget.checkbox_id }}"{% if widget.attrs.disabled %} disabled{% endif %}> |
|||
<label for="{{ widget.checkbox_id }}">{{ widget.clear_checkbox_label }}</label> |
|||
</span> |
|||
{% endif %} |
|||
<br> |
|||
{{ widget.input_text }}: |
|||
{% endif %} |
|||
<input type="{{ widget.type }}" name="{{ widget.name }}"{% include "django/forms/widgets/attrs.html" %}> |
|||
{% if widget.is_initial %} |
|||
</p> |
|||
{% endif %} |
@ -1,31 +0,0 @@ |
|||
# -*- coding: utf-8 -*- |
|||
from django import forms |
|||
import pytest |
|||
from datetime import date |
|||
|
|||
from sigi.apps.servidores.forms import valida_data_inicial_menor_que_final, Periodo, periodos_se_sobrepoe |
|||
|
|||
|
|||
@pytest.mark.parametrize('data', [ |
|||
dict(ini=1, fim=2), |
|||
pytest.mark.xfail(raises=forms.ValidationError)(dict(ini=2, fim=1)), |
|||
pytest.mark.xfail(raises=forms.ValidationError)(dict(ini=1, fim=1)), |
|||
]) |
|||
def test_valida_data_inicial_menor_que_final(data): |
|||
valida_data_inicial_menor_que_final(data, 'ini', 'fim') |
|||
|
|||
|
|||
periodos = [ |
|||
[Periodo(date(2000, 10, 1), date(2001, 1, 1)), Periodo(date(2001, 1, 1), date(2002, 2, 2)), True], # um dia de interseção |
|||
[Periodo(date(2000, 10, 1), date(2001, 1, 1)), Periodo(date(2001, 1, 2), date(2002, 2, 2)), False], # exatamente um dia após |
|||
[Periodo(date(2000, 10, 1), date(2001, 1, 1)), Periodo(date(2000, 12, 2), date(2002, 2, 2)), True], |
|||
[Periodo(date(2000, 10, 1), date(2001, 1, 1)), Periodo(date(2014, 1, 1), date(2014, 2, 2)), False], |
|||
] |
|||
|
|||
# para testar que a ordem dos parametros nao importa |
|||
periodos_trocados = [[b, a, res] for [a, b, res] in periodos] |
|||
|
|||
|
|||
@pytest.mark.parametrize('periodo1, periodo2, resultado', periodos + periodos_trocados) |
|||
def test_periodos_se_sobrepoe(periodo1, periodo2, resultado): |
|||
assert periodos_se_sobrepoe(periodo1, periodo2) == resultado |
@ -1,18 +0,0 @@ |
|||
from django.contrib.admin.widgets import AdminFileWidget |
|||
from django.utils.safestring import mark_safe |
|||
from django.utils.translation import gettext as _ |
|||
|
|||
|
|||
class AdminImageWidget(AdminFileWidget): |
|||
|
|||
def render(self, name, value, attrs=None): |
|||
output = [] |
|||
if value and getattr(value, "url", None): |
|||
image_url = value.url |
|||
file_name = str(value) |
|||
output.append( |
|||
''' <a href="%s" target="_blank"><img src="%s" width="100" |
|||
height="100" alt="%s"/></a> <br/> %s''' % |
|||
(image_url, image_url, file_name, _('Change') + ':')) |
|||
output.append(super(AdminFileWidget, self).render(name, value, attrs)) |
|||
return mark_safe(''.join(output)) |
Loading…
Reference in new issue