Browse Source

Merge branch '3.1.x'

pull/1828/merge
Edward Ribeiro 7 years ago
parent
commit
680af1f3ee
  1. 2
      docker-compose.yml
  2. 4
      sapl/materia/forms.py
  3. 2
      sapl/materia/views.py
  4. 5
      sapl/protocoloadm/admin.py
  5. 31
      sapl/protocoloadm/migrations/0005_auto_20180824_1241.py
  6. 10
      sapl/protocoloadm/models.py
  7. 16
      sapl/protocoloadm/views.py
  8. 18
      sapl/relatorios/views.py
  9. 3
      sapl/templates/base.html
  10. 2
      sapl/templates/protocoloadm/comprovante.html
  11. 5
      sapl/templates/protocoloadm/protocolo_filter.html
  12. 6
      sapl/templates/protocoloadm/protocolo_mostrar.html
  13. 4
      sapl/utils.py
  14. 2
      setup.py

2
docker-compose.yml

@ -11,7 +11,7 @@ sapldb:
ports: ports:
- "5432:5432" - "5432:5432"
sapl: sapl:
image: interlegis/sapl:3.1.110 image: interlegis/sapl:3.1.111
restart: always restart: always
environment: environment:
ADMIN_PASSWORD: interlegis ADMIN_PASSWORD: interlegis

4
sapl/materia/forms.py

@ -1839,11 +1839,7 @@ class ConfirmarProposicaoForm(ProposicaoForm):
protocolo = Protocolo() protocolo = Protocolo()
protocolo.numero = (nm['numero__max'] + 1) if nm['numero__max'] else 1 protocolo.numero = (nm['numero__max'] + 1) if nm['numero__max'] else 1
protocolo.ano = timezone.now().year protocolo.ano = timezone.now().year
protocolo.data = timezone.now()
protocolo.hora = timezone.now().time()
# TODO transformar campo timestamp em auto_now_add
protocolo.timestamp = timezone.now()
protocolo.tipo_protocolo = '1' protocolo.tipo_protocolo = '1'
protocolo.interessado = str(proposicao.autor) protocolo.interessado = str(proposicao.autor)

2
sapl/materia/views.py

@ -191,7 +191,7 @@ class CriarProtocoloMateriaView(CreateView):
context['form'].fields['tipo'].initial = protocolo.tipo_materia context['form'].fields['tipo'].initial = protocolo.tipo_materia
context['form'].fields['numero'].initial = numero context['form'].fields['numero'].initial = numero
context['form'].fields['ano'].initial = protocolo.ano context['form'].fields['ano'].initial = protocolo.ano
context['form'].fields['data_apresentacao'].initial = protocolo.data context['form'].fields['data_apresentacao'].initial = protocolo.timestamp.date()
context['form'].fields['numero_protocolo'].initial = protocolo.numero context['form'].fields['numero_protocolo'].initial = protocolo.numero
context['form'].fields['ementa'].initial = protocolo.assunto_ementa context['form'].fields['ementa'].initial = protocolo.assunto_ementa

5
sapl/protocoloadm/admin.py

@ -1,3 +1,6 @@
from sapl.utils import register_all_models_in_admin from sapl.utils import register_all_models_in_admin
register_all_models_in_admin(__name__) register_all_models_in_admin(__name__, exclude_list=['timestamp',
'data',
'hora',
'timestamp_anulacao'])

31
sapl/protocoloadm/migrations/0005_auto_20180824_1241.py

@ -0,0 +1,31 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.13 on 2018-08-24 15:41
from __future__ import unicode_literals
from django.db import migrations, models
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
('protocoloadm', '0004_documentoadministrativo_numero_externo'),
]
operations = [
migrations.AlterField(
model_name='protocolo',
name='data',
field=models.DateField(blank=True, null=True),
),
migrations.AlterField(
model_name='protocolo',
name='hora',
field=models.TimeField(blank=True, null=True),
),
migrations.AlterField(
model_name='protocolo',
name='timestamp',
field=models.DateTimeField(default=django.utils.timezone.now),
),
]

10
sapl/protocoloadm/models.py

@ -1,5 +1,6 @@
import reversion import reversion
from django.db import models from django.db import models
from django.utils import timezone
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
@ -57,10 +58,11 @@ class Protocolo(models.Model):
verbose_name=_('Ano do Protocolo')) verbose_name=_('Ano do Protocolo'))
# TODO: Remover esses dois campos após migração, # TODO: Remover esses dois campos após migração,
# TODO: pois timestamp supre a necessidade # TODO: pois timestamp supre a necessidade
data = models.DateField() data = models.DateField(null=True, blank=True)
hora = models.TimeField() hora = models.TimeField(null=True, blank=True)
# TODO transformar campo timestamp em auto_now_add # Não foi utilizado auto_now_add=True em timestamp porque
timestamp = models.DateTimeField() # ele usa datetime.now que não é timezone aware.
timestamp = models.DateTimeField(default=timezone.now)
tipo_protocolo = models.PositiveIntegerField( tipo_protocolo = models.PositiveIntegerField(
blank=True, null=True, verbose_name=_('Tipo de Protocolo')) blank=True, null=True, verbose_name=_('Tipo de Protocolo'))
tipo_processo = models.PositiveIntegerField() tipo_processo = models.PositiveIntegerField()

16
sapl/protocoloadm/views.py

@ -280,6 +280,7 @@ class AnularProtocoloAdmView(PermissionRequiredMixin, CreateView):
form.cleaned_data['justificativa_anulacao']) form.cleaned_data['justificativa_anulacao'])
protocolo.user_anulacao = form.cleaned_data['user_anulacao'] protocolo.user_anulacao = form.cleaned_data['user_anulacao']
protocolo.ip_anulacao = form.cleaned_data['ip_anulacao'] protocolo.ip_anulacao = form.cleaned_data['ip_anulacao']
protocolo.timestamp_anulacao = timezone.now()
protocolo.save() protocolo.save()
return redirect(self.get_success_url()) return redirect(self.get_success_url())
@ -332,11 +333,7 @@ class ProtocoloDocumentoView(PermissionRequiredMixin,
messages.add_message(self.request, messages.ERROR, msg) messages.add_message(self.request, messages.ERROR, msg)
return self.render_to_response(self.get_context_data()) return self.render_to_response(self.get_context_data())
protocolo.ano = timezone.now().year protocolo.ano = timezone.now().year
protocolo.data = timezone.now()
protocolo.hora = timezone.now().time()
protocolo.timestamp = timezone.now()
protocolo.assunto_ementa = self.request.POST['assunto'] protocolo.assunto_ementa = self.request.POST['assunto']
protocolo.save() protocolo.save()
self.object = protocolo self.object = protocolo
return redirect(self.get_success_url()) return redirect(self.get_success_url())
@ -418,10 +415,14 @@ class ComprovanteProtocoloView(PermissionRequiredMixin, TemplateView):
autenticacao = _("** NULO **") autenticacao = _("** NULO **")
if not protocolo.anulado: if not protocolo.anulado:
if protocolo.timestamp:
data = protocolo.timestamp.strftime("%Y/%m/%d")
else:
data = protocolo.data.strftime("%Y/%m/%d")
# data is not i18n sensitive 'Y-m-d' is the right format. # data is not i18n sensitive 'Y-m-d' is the right format.
autenticacao = str(protocolo.tipo_processo) + \ autenticacao = str(protocolo.tipo_processo) + \
protocolo.data.strftime("%Y/%m/%d") + \ data + str(protocolo.numero).zfill(6)
str(protocolo.numero).zfill(6)
context.update({"protocolo": protocolo, context.update({"protocolo": protocolo,
"barcode": barcode, "barcode": barcode,
@ -478,9 +479,6 @@ class ProtocoloMateriaView(PermissionRequiredMixin, CreateView):
messages.add_message(self.request, messages.ERROR, msg) messages.add_message(self.request, messages.ERROR, msg)
return self.render_to_response(self.get_context_data()) return self.render_to_response(self.get_context_data())
protocolo.ano = timezone.now().year protocolo.ano = timezone.now().year
protocolo.data = timezone.now().date()
protocolo.hora = timezone.now().time()
protocolo.timestamp = timezone.now()
protocolo.tipo_protocolo = 0 protocolo.tipo_protocolo = 0
protocolo.tipo_processo = '1' # TODO validar o significado protocolo.tipo_processo = '1' # TODO validar o significado

18
sapl/relatorios/views.py

@ -827,9 +827,12 @@ def get_protocolos(prots):
dic['titulo'] = str(protocolo.numero) + '/' + str(protocolo.ano) dic['titulo'] = str(protocolo.numero) + '/' + str(protocolo.ano)
ts = timezone.localtime(protocolo.timestamp) ts = timezone.localtime(protocolo.timestamp)
if protocolo.timestamp:
dic['data'] = ts.strftime("%d/%m/%Y") + ' - <b>Horário:</b>' + \ dic['data'] = ts.strftime("%d/%m/%Y") + ' - <b>Horário:</b>' + \
ts.strftime("%H:%m") ts.strftime("%H:%m")
else:
dic['data'] = protocolo.data.strftime("%d/%m/%Y") + ' - <b>Horário:</b>' \
+ protocolo.hora.strftime("%H:%m")
dic['txt_assunto'] = protocolo.assunto_ementa dic['txt_assunto'] = protocolo.assunto_ementa
@ -941,9 +944,12 @@ def get_etiqueta_protocolos(prots):
dic['titulo'] = str(p.numero) + '/' + str(p.ano) dic['titulo'] = str(p.numero) + '/' + str(p.ano)
tz_hora = timezone.localtime(p.timestamp) tz_hora = timezone.localtime(p.timestamp)
if p.timestamp:
dic['data'] = '<b>Data: </b>' + tz_hora.strftime( dic['data'] = '<b>Data: </b>' + tz_hora.strftime(
"%d/%m/%Y") + ' - <b>Horário: </b>' + tz_hora.strftime("%H:%M") "%d/%m/%Y") + ' - <b>Horário: </b>' + tz_hora.strftime("%H:%M")
else:
dic['data'] = '<b>Data: </b>' + p.data.strftime(
"%d/%m/%Y") + ' - <b>Horário: </b>' + p.hora.strftime("%H:%M")
dic['txt_assunto'] = p.assunto_ementa dic['txt_assunto'] = p.assunto_ementa
dic['txt_interessado'] = p.interessado dic['txt_interessado'] = p.interessado

3
sapl/templates/base.html

@ -262,8 +262,7 @@
$(document).ready(function(){ $(document).ready(function(){
let iframe_set_backend = {{ request|has_iframe|lower }} let iframe_set_backend = {{ request|has_iframe|lower }}
if (iframe_set_backend && !inIframe() ) { if (iframe_set_backend && !inIframe() ) {
let href = location.href location.href = location.origin + '?iframe=0'
location.href = href + '?iframe=0'
} }
}); });
</script> </script>

2
sapl/templates/protocoloadm/comprovante.html

@ -59,7 +59,7 @@
</tr> </tr>
<tr> <tr>
<th>Data / Horário</th> <th>Data / Horário</th>
<td>{{ protocolo.data|date:"d/m/Y" }} - {{ protocolo.timestamp|date:"H:i:s" }}</td> <td>{{ protocolo.timestamp|date:"d/m/Y" }} - {{ protocolo.timestamp|date:"H:i:s" }}</td>
</tr> </tr>
{% if protocolo.tipo_processo == 1 %} {% if protocolo.tipo_processo == 1 %}
<tr> <tr>

5
sapl/templates/protocoloadm/protocolo_filter.html

@ -44,8 +44,11 @@
{% if p.anulado %}<strong><font color="red">&nbsp;&nbsp;** NULO **</font></strong>{% endif %} {% if p.anulado %}<strong><font color="red">&nbsp;&nbsp;** NULO **</font></strong>{% endif %}
</br> </br>
<strong>Assunto:</strong> {{ p.assunto_ementa|default_if_none:"Não informado"}}</br> <strong>Assunto:</strong> {{ p.assunto_ementa|default_if_none:"Não informado"}}</br>
{% if p.timestamp%}
<strong>Data Protocolo:</strong> {{ p.timestamp|localtime|date:"d/m/Y"|default_if_none:"Não informado" }} - Horário: {{ p.timestamp|localtime|date:"G:i:s" }}</br> <strong>Data Protocolo:</strong> {{ p.timestamp|localtime|date:"d/m/Y"|default_if_none:"Não informado" }} - Horário: {{ p.timestamp|localtime|date:"G:i:s" }}</br>
{% else %}
<strong>Data Protocolo:</strong> {{ p.data|date:"d/m/Y"|default_if_none:"Não informado" }} - Horário: {{ p.hora|date:"G:i:s" }}</br>
{% endif %}
{% if p.tipo_processo == 0 %} {% if p.tipo_processo == 0 %}
<strong>Interessado:</strong> {{ p.interessado|default_if_none:"Não informado" }}</br> <strong>Interessado:</strong> {{ p.interessado|default_if_none:"Não informado" }}</br>
{% elif p.tipo_processo == 1 %} {% elif p.tipo_processo == 1 %}

6
sapl/templates/protocoloadm/protocolo_mostrar.html

@ -9,7 +9,11 @@
<a href="{% url 'sapl.relatorios:relatorio_etiqueta_protocolo' protocolo.numero protocolo.ano %}"><img src="{% static 'img/etiqueta.png' %}" alt="Etiqueta Individual"></a></br> <a href="{% url 'sapl.relatorios:relatorio_etiqueta_protocolo' protocolo.numero protocolo.ano %}"><img src="{% static 'img/etiqueta.png' %}" alt="Etiqueta Individual"></a></br>
<strong>Assunto: </strong> {{ protocolo.assunto_ementa|default:"Não informado" }}</br> <strong>Assunto: </strong> {{ protocolo.assunto_ementa|default:"Não informado" }}</br>
<strong>Data Protocolo: </strong> {{ protocolo.timestamp|localtime|date:"d/m/Y" }} - Horário: {{ protocolo.timestamp|localtime|date:"G:i:s" }}</br> {% if p.timestamp%}
<strong>Data Protocolo:</strong> {{ p.timestamp|localtime|date:"d/m/Y"|default_if_none:"Não informado" }} - Horário: {{ p.timestamp|localtime|date:"G:i:s" }}</br>
{% else %}
<strong>Data Protocolo:</strong> {{ p.data|date:"d/m/Y"|default_if_none:"Não informado" }} - Horário: {{ p.hora|date:"G:i:s" }}</br>
{% endif %}
{% if protocolo.tipo_processo == 0 %} {% if protocolo.tipo_processo == 0 %}
<strong>Interessado:</strong> {{ protocolo.interessado|default_if_none:"Não informado" }}</br> <strong>Interessado:</strong> {{ protocolo.interessado|default_if_none:"Não informado" }}</br>

4
sapl/utils.py

@ -224,14 +224,14 @@ class RangeWidgetOverride(forms.MultiWidget):
return '<div class="row">%s</div>' % html return '<div class="row">%s</div>' % html
def register_all_models_in_admin(module_name): def register_all_models_in_admin(module_name, exclude_list=[]):
appname = module_name.split('.') appname = module_name.split('.')
appname = appname[1] if appname[0] == 'sapl' else appname[0] appname = appname[1] if appname[0] == 'sapl' else appname[0]
app = apps.get_app_config(appname) app = apps.get_app_config(appname)
for model in app.get_models(): for model in app.get_models():
class CustomModelAdmin(CompareVersionAdmin): class CustomModelAdmin(CompareVersionAdmin):
list_display = [f.name for f in model._meta.fields list_display = [f.name for f in model._meta.fields
if f.name != 'id'] if f.name != 'id' and f.name not in exclude_list]
if not admin.site.is_registered(model): if not admin.site.is_registered(model):
admin.site.register(model, CustomModelAdmin) admin.site.register(model, CustomModelAdmin)

2
setup.py

@ -49,7 +49,7 @@ install_requires = [
] ]
setup( setup(
name='interlegis-sapl', name='interlegis-sapl',
version='3.1.110', version='3.1.111',
packages=find_packages(), packages=find_packages(),
include_package_data=True, include_package_data=True,
license='GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007', license='GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007',

Loading…
Cancel
Save