mirror of https://github.com/interlegis/sigi.git
Sesostris Vieira
3 years ago
55 changed files with 1976 additions and 280 deletions
@ -1,43 +0,0 @@ |
|||||
# -*- coding: utf-8 -*- |
|
||||
# |
|
||||
# sigi.apps.casas.management.commands.importa_gerentes |
|
||||
# |
|
||||
# Copyright (c) 2015 by Interlegis |
|
||||
# |
|
||||
# GNU General Public License (GPL) |
|
||||
# |
|
||||
# This program is free software; you can redistribute it and/or |
|
||||
# modify it under the terms of the GNU General Public License |
|
||||
# as published by the Free Software Foundation; either version 2 |
|
||||
# of the License, or (at your option) any later version. |
|
||||
# |
|
||||
# This program is distributed in the hope that it will be useful, |
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||
# GNU General Public License for more details. |
|
||||
# |
|
||||
# You should have received a copy of the GNU General Public License |
|
||||
# along with this program; if not, write to the Free Software |
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA |
|
||||
# 02110-1301, USA. |
|
||||
# |
|
||||
|
|
||||
from django.core.management.base import BaseCommand, CommandError |
|
||||
from sigi.apps.convenios.models import Projeto, Convenio |
|
||||
|
|
||||
class Command(BaseCommand): |
|
||||
help = u"""Define a duração de todos os ACT para 60 meses. |
|
||||
* A sigla do Projeto precisa ser ACT; |
|
||||
* O campo duracao precisa estar em branco. |
|
||||
""" |
|
||||
|
|
||||
def handle(self, *args, **options): |
|
||||
self.stdout.write(u"Atualizando ACTs... ") |
|
||||
act = Projeto.objects.get(sigla='ACT') |
|
||||
for conv in Convenio.objects.filter(projeto=act, duracao=None): |
|
||||
conv.duracao = 60 |
|
||||
conv.save() |
|
||||
self.stdout.write(u"\tACT {sigad} da Casa {casa} atualizado".format( |
|
||||
sigad=conv.num_processo_sf, casa=conv.casa_legislativa.nome |
|
||||
)) |
|
||||
self.stdout.write(u"Pronto!") |
|
@ -0,0 +1,20 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
from __future__ import unicode_literals |
||||
|
|
||||
|
from django.db import models, migrations |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('convenios', '0009_auto_20210611_0946'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.AlterField( |
||||
|
model_name='convenio', |
||||
|
name='data_retorno_assinatura', |
||||
|
field=models.DateField(help_text='Conv\xeanio firmado.', null=True, verbose_name='data in\xedcio vig\xeancia', blank=True), |
||||
|
preserve_default=True, |
||||
|
), |
||||
|
] |
@ -0,0 +1,20 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
from __future__ import unicode_literals |
||||
|
|
||||
|
from django.db import models, migrations |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('convenios', '0010_auto_20210819_0833'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.AddField( |
||||
|
model_name='convenio', |
||||
|
name='data_termino_vigencia', |
||||
|
field=models.DateField(help_text='T\xe9rmino da vig\xeancia do conv\xeanio.', null=True, verbose_name='Data t\xe9rmino vig\xeancia', blank=True), |
||||
|
preserve_default=True, |
||||
|
), |
||||
|
] |
@ -0,0 +1,38 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
from __future__ import unicode_literals |
||||
|
from datetime import date |
||||
|
from django.db import models, migrations |
||||
|
|
||||
|
def migra_data_termino_vigencia(apps, schema_editor): |
||||
|
Convenio = apps.get_model('convenios', 'Convenio') |
||||
|
|
||||
|
for c in Convenio.objects.all(): |
||||
|
if (c.data_retorno_assinatura is None or c.duracao is None): |
||||
|
continue |
||||
|
|
||||
|
ano = c.data_retorno_assinatura.year + int(c.duracao / 12) |
||||
|
mes = int(c.data_retorno_assinatura.month + int(c.duracao % 12)) |
||||
|
if mes > 12: |
||||
|
ano = ano + 1 |
||||
|
mes = mes - 12 |
||||
|
dia = c.data_retorno_assinatura.day |
||||
|
|
||||
|
while True: |
||||
|
try: |
||||
|
data_fim = date(year=ano, month=mes,day=dia) |
||||
|
break |
||||
|
except: |
||||
|
dia = dia - 1 |
||||
|
|
||||
|
c.data_termino_vigencia = data_fim |
||||
|
c.save() |
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('convenios', '0011_convenio_data_termino_vigencia'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.RunPython(migra_data_termino_vigencia), |
||||
|
] |
@ -0,0 +1,18 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
from __future__ import unicode_literals |
||||
|
|
||||
|
from django.db import models, migrations |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('convenios', '0012_auto_20210831_0844'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.RemoveField( |
||||
|
model_name='convenio', |
||||
|
name='duracao', |
||||
|
), |
||||
|
] |
@ -0,0 +1,30 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
from __future__ import unicode_literals |
||||
|
|
||||
|
from django.db import models, migrations |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('convenios', '0013_remove_convenio_duracao'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.CreateModel( |
||||
|
name='Gescon', |
||||
|
fields=[ |
||||
|
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), |
||||
|
('url_gescon', models.URLField(default='https://adm.senado.gov.br/gestao-contratos/api/contratos/busca?especie={s}', help_text='Informe o ponto de consulta do webservice do Gescon, inclusive com a querystring. No ponto onde deve ser inserida a sigla da subespecie do contrato, use a marca\xe7\xe3o {s}.<br/><strong>Por exemplo:</strong> https://adm.senado.gov.br/gestao-contratos/api/contratos/busca?especie=<strong>{s}</strong>', verbose_name='Webservice Gescon')), |
||||
|
('subespecies', models.TextField(default='AC=ACT\nPI=PI\nCN=PML\nTA=PML', help_text='Informe as siglas das subesp\xe9cies de contratos que devem ser pesquisados no Gescon com a sigla correspondente do projeto no SIGI. Coloque um par de siglas por linha, no formato SIGLA_GESTON=SIGLA_SIGI. As siglas n\xe3o encontradas ser\xe3o ignoradas.', verbose_name='Subesp\xe9cies')), |
||||
|
('palavras', models.TextField(default='ILB\nINTERLEGIS', help_text='Palavras que devem aparecer no campo OBJETO dos dados do Gescon para identificar se o contrato pertence ao ILB. <ul><li>Informe uma palavra por linha.</li><li>Ocorrendo qualquer uma das palavras, o contrato ser\xe1 importado.</li></ul>', verbose_name='Palavras de filtro')), |
||||
|
('email', models.EmailField(help_text='Caixa de e-mail para onde o relat\xf3rio di\xe1rio de importa\xe7\xe3o ser\xe1 enviado.', max_length=75, verbose_name='E-mail')), |
||||
|
('ultima_importacao', models.TextField(verbose_name='Resultado da \xfaltima importa\xe7\xe3o', blank=True)), |
||||
|
], |
||||
|
options={ |
||||
|
'verbose_name': 'Configura\xe7\xe3o do Gescon', |
||||
|
'verbose_name_plural': 'Configura\xe7\xf5es do Gescon', |
||||
|
}, |
||||
|
bases=(models.Model,), |
||||
|
), |
||||
|
] |
@ -0,0 +1,18 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
from __future__ import unicode_literals |
||||
|
|
||||
|
from django.db import models, migrations |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('convenios', '0014_gescon'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.RemoveField( |
||||
|
model_name='convenio', |
||||
|
name='search_text', |
||||
|
), |
||||
|
] |
@ -0,0 +1,26 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
from __future__ import unicode_literals |
||||
|
|
||||
|
from django.db import models, migrations |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('convenios', '0015_remove_convenio_search_text'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.AddField( |
||||
|
model_name='convenio', |
||||
|
name='atualizacao_gescon', |
||||
|
field=models.DateTimeField(null=True, verbose_name='Data de atualiza\xe7\xe3o pelo Gescon', blank=True), |
||||
|
preserve_default=True, |
||||
|
), |
||||
|
migrations.AddField( |
||||
|
model_name='convenio', |
||||
|
name='observacao_gescon', |
||||
|
field=models.TextField(verbose_name='Observa\xe7\xf5es da atualiza\xe7\xe3o do Gescon', blank=True), |
||||
|
preserve_default=True, |
||||
|
), |
||||
|
] |
@ -0,0 +1,20 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
from __future__ import unicode_literals |
||||
|
|
||||
|
from django.db import models, migrations |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('convenios', '0016_auto_20210909_0732'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.AddField( |
||||
|
model_name='convenio', |
||||
|
name='id_contrato_gescon', |
||||
|
field=models.CharField(default=b'', verbose_name='ID do contrato no Gescon', max_length=20, editable=False, blank=True), |
||||
|
preserve_default=True, |
||||
|
), |
||||
|
] |
@ -0,0 +1,21 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
from __future__ import unicode_literals |
||||
|
|
||||
|
from django.db import models, migrations |
||||
|
import django.db.models.deletion |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('convenios', '0017_convenio_id_contrato_gescon'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.AlterField( |
||||
|
model_name='convenio', |
||||
|
name='projeto', |
||||
|
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, verbose_name='Tipo de Convenio', to='convenios.Projeto'), |
||||
|
preserve_default=True, |
||||
|
), |
||||
|
] |
@ -0,0 +1,18 @@ |
|||||
|
{% extends 'admin/base_site.html' %} |
||||
|
{% load i18n %} |
||||
|
|
||||
|
{% block content_title %}<h1>{% trans 'Importar dados do Gescon' %}</h1>{% endblock %} |
||||
|
{% block object-tools-items %} |
||||
|
<li class="nav-item"><a class="nav-link active" href="{% url 'importar-gescon' %}?action=importar">Importar</a></li> |
||||
|
<li class="nav-item"><a class="nav-link" href="{% url 'admin:convenios_gescon_change' gescon.id %}">Configurações</a></li> |
||||
|
{% endblock %} |
||||
|
{% block content %} |
||||
|
{% if gescon.ultima_importacao %} |
||||
|
<pre><code>{{ gescon.ultima_importacao }}</code></pre> |
||||
|
{% else %} |
||||
|
{% blocktrans %} |
||||
|
<p class="alert alert-danger"><strong>Nenhuma importação anterior foi realizada!</strong></p> |
||||
|
<p class="">Configure a conexão com o Gescon para realizar a primeira importação.</p> |
||||
|
{% endblocktrans %} |
||||
|
{% endif %} |
||||
|
{% endblock %} |
@ -0,0 +1,32 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
|
||||
|
from django import forms |
||||
|
from django.utils.translation import ugettext as _ |
||||
|
from sigi.apps.eventos.models import ModeloDeclaracao, Evento |
||||
|
|
||||
|
class EventoAdminForm(forms.ModelForm): |
||||
|
class Meta: |
||||
|
model = Evento |
||||
|
fields = ('tipo_evento', 'nome', 'descricao', 'virtual', 'solicitante', |
||||
|
'data_inicio', 'data_termino', 'carga_horaria', |
||||
|
'casa_anfitria', 'municipio', 'local', 'publico_alvo', |
||||
|
'total_participantes', 'status', 'data_cancelamento', |
||||
|
'motivo_cancelamento', ) |
||||
|
|
||||
|
def clean(self): |
||||
|
cleaned_data = super(EventoAdminForm, self).clean() |
||||
|
data_inicio = cleaned_data.get("data_inicio") |
||||
|
data_termino = cleaned_data.get("data_termino") |
||||
|
|
||||
|
if data_inicio > data_termino: |
||||
|
raise forms.ValidationError( |
||||
|
_(u"Data término deve ser posterior à data inicio"), |
||||
|
code="invalid_period" |
||||
|
) |
||||
|
|
||||
|
class SelecionaModeloForm(forms.Form): |
||||
|
modelo = forms.ModelChoiceField( |
||||
|
queryset=ModeloDeclaracao.objects.all(), |
||||
|
required=True, |
||||
|
label=_(u"Modelo de declaração"), |
||||
|
) |
@ -0,0 +1,26 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
from __future__ import unicode_literals |
||||
|
|
||||
|
from django.db import models, migrations |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('eventos', '0007_auto_20210417_0744'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.AlterField( |
||||
|
model_name='evento', |
||||
|
name='data_inicio', |
||||
|
field=models.DateTimeField(null=True, verbose_name='Data/hora do In\xedcio', blank=True), |
||||
|
preserve_default=True, |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='evento', |
||||
|
name='data_termino', |
||||
|
field=models.DateTimeField(null=True, verbose_name='Data/hora do Termino', blank=True), |
||||
|
preserve_default=True, |
||||
|
), |
||||
|
] |
@ -0,0 +1,20 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
from __future__ import unicode_literals |
||||
|
|
||||
|
from django.db import models, migrations |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('eventos', '0008_auto_20211104_1253'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.AddField( |
||||
|
model_name='tipoevento', |
||||
|
name='categoria', |
||||
|
field=models.CharField(default='E', max_length=1, verbose_name='Categoaria', choices=[(b'C', 'Curso'), (b'E', 'Encontro'), (b'O', 'Oficina'), (b'S', 'Semin\xe1rio'), (b'V', 'Visita')]), |
||||
|
preserve_default=False, |
||||
|
), |
||||
|
] |
@ -0,0 +1,37 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
from __future__ import unicode_literals |
||||
|
|
||||
|
from django.db import models, migrations |
||||
|
import django.db.models.deletion |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('servidores', '0007_auto_20210430_0735'), |
||||
|
('eventos', '0009_tipoevento_categoria'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.CreateModel( |
||||
|
name='Modulo', |
||||
|
fields=[ |
||||
|
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), |
||||
|
('nome', models.CharField(max_length=100, verbose_name='Nome')), |
||||
|
('descricao', models.TextField(verbose_name='Descri\xe7\xe3o do m\xf3dulo')), |
||||
|
('tipo', models.CharField(max_length=1, verbose_name='Tipo', choices=[(b'A', 'Aula'), (b'P', 'Palestra'), (b'R', 'Apresenta\xe7\xe3o')])), |
||||
|
('inicio', models.DateTimeField(null=True, verbose_name='Data/hora de in\xedcio', blank=True)), |
||||
|
('termino', models.DateTimeField(null=True, verbose_name='Data/hora de t\xe9rmino', blank=True)), |
||||
|
('carga_horaria', models.PositiveIntegerField(default=0, verbose_name='carga hor\xe1ria')), |
||||
|
('qtde_participantes', models.PositiveIntegerField(default=0, help_text='Deixar Zero significa que todos os participantes do evento participaram do m\xf3dulo', verbose_name='n\xfamero de participantes')), |
||||
|
('apresentador', models.ForeignKey(related_name='modulo_apresentador', on_delete=django.db.models.deletion.PROTECT, verbose_name='Apresentador', blank=True, to='servidores.Servidor', null=True)), |
||||
|
('evento', models.ForeignKey(verbose_name='Evento', to='eventos.Evento')), |
||||
|
('monitor', models.ForeignKey(related_name='modulo_monitor', on_delete=django.db.models.deletion.PROTECT, blank=True, to='servidores.Servidor', help_text='Monitor, mediador, auxiliar, etc.', null=True, verbose_name='Monitor')), |
||||
|
], |
||||
|
options={ |
||||
|
'verbose_name': 'M\xf3dulo do evento', |
||||
|
'verbose_name_plural': 'M\xf3dulos do evento', |
||||
|
}, |
||||
|
bases=(models.Model,), |
||||
|
), |
||||
|
] |
@ -0,0 +1,24 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
from __future__ import unicode_literals |
||||
|
|
||||
|
from django.db import models, migrations |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('eventos', '0010_modulo'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.AlterModelOptions( |
||||
|
name='modulo', |
||||
|
options={'ordering': ('inicio',), 'verbose_name': 'M\xf3dulo do evento', 'verbose_name_plural': 'M\xf3dulos do evento'}, |
||||
|
), |
||||
|
migrations.AddField( |
||||
|
model_name='evento', |
||||
|
name='total_participantes', |
||||
|
field=models.PositiveIntegerField(default=0, help_text='Se informar quantidade de participantes na aba de convites, este campo ser\xe1 ajustado com a somat\xf3ria dos participantes naquela aba.', verbose_name='Total de participantes'), |
||||
|
preserve_default=True, |
||||
|
), |
||||
|
] |
@ -0,0 +1,28 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
from __future__ import unicode_literals |
||||
|
|
||||
|
from django.db import models, migrations |
||||
|
from django.db.models import Sum |
||||
|
|
||||
|
def atualiza_participantes(apps, schema_editor): |
||||
|
if schema_editor.connection.alias != 'default': |
||||
|
return |
||||
|
|
||||
|
Evento = apps.get_model('eventos', 'Evento') |
||||
|
|
||||
|
for e in Evento.objects.all(): |
||||
|
total = e.convite_set.aggregate(total=Sum('qtde_participantes')) |
||||
|
total = total['total'] |
||||
|
if (total is not None) or (total > 0): |
||||
|
e.total_participantes = total |
||||
|
e.save() |
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('eventos', '0011_auto_20211117_0633'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.RunPython(atualiza_participantes), |
||||
|
] |
@ -0,0 +1,30 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
from __future__ import unicode_literals |
||||
|
|
||||
|
from django.db import models, migrations |
||||
|
import tinymce.models |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('eventos', '0012_auto_20211117_0657'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.CreateModel( |
||||
|
name='ModeloDeclaracao', |
||||
|
fields=[ |
||||
|
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), |
||||
|
('nome', models.CharField(max_length=100, verbose_name='Nome do modelo')), |
||||
|
('formato', models.CharField(default=b'A4 portrait', max_length=30, verbose_name='Formato da p\xe1gina', choices=[(b'A4 portrait', 'A4 retrato'), (b'A4 landscape', 'A4 paisagem'), (b'letter portrait', 'Carta retrato'), (b'letter landscape', 'Carta paisagem')])), |
||||
|
('margem', models.PositiveIntegerField(default=4, help_text='Margem da p\xe1gina em cent\xedmetros', verbose_name='Margem')), |
||||
|
('texto', tinymce.models.HTMLField(help_text='Use as seguintes marca\xe7\xf5es:<ul><li>{{ casa }} para o nome da Casa Legislativa / \xf3rg\xe3o</li><li>{{ nome }} para o nome do visitante</li><li>{{ data }} para a data de emiss\xe3o da declara\xe7\xe3o</li><li>{{ evento.data_inicio }} para a data/hora do in\xedcio da visita</li><li>{{ evento.data_termino }} para a data/hora do t\xe9rmino da visita</li><li>{{ evento.nome }} para o nome do evento</li><li>{{ evento.descricao }} para a descri\xe7\xe3o do evento</li></ul>', verbose_name='Texto da declara\xe7\xe3o')), |
||||
|
], |
||||
|
options={ |
||||
|
'verbose_name': 'modelo de declara\xe7\xe3o', |
||||
|
'verbose_name_plural': 'modelos de declara\xe7\xe3o', |
||||
|
}, |
||||
|
bases=(models.Model,), |
||||
|
), |
||||
|
] |
@ -0,0 +1,21 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
from __future__ import unicode_literals |
||||
|
|
||||
|
from django.db import models, migrations |
||||
|
import tinymce.models |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('eventos', '0013_modelodeclaracao'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.AlterField( |
||||
|
model_name='modelodeclaracao', |
||||
|
name='texto', |
||||
|
field=tinymce.models.HTMLField(help_text='Use as seguintes marca\xe7\xf5es:<ul><li>{{ casa.nome }} para o nome da Casa Legislativa / \xf3rg\xe3o</li><li>{{ casa.municipio.uf.sigla }} para a sigla da UF da Casa legislativa</li><li>{{ nome }} para o nome do visitante</li><li>{{ data }} para a data de emiss\xe3o da declara\xe7\xe3o</li><li>{{ evento.data_inicio }} para a data/hora do in\xedcio da visita</li><li>{{ evento.data_termino }} para a data/hora do t\xe9rmino da visita</li><li>{{ evento.nome }} para o nome do evento</li><li>{{ evento.descricao }} para a descri\xe7\xe3o do evento</li></ul>', verbose_name='Texto da declara\xe7\xe3o'), |
||||
|
preserve_default=True, |
||||
|
), |
||||
|
] |
@ -0,0 +1,29 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
from __future__ import unicode_literals |
||||
|
|
||||
|
from django.db import models, migrations |
||||
|
import datetime |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('eventos', '0014_auto_20211124_0736'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.CreateModel( |
||||
|
name='Anexo', |
||||
|
fields=[ |
||||
|
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), |
||||
|
('arquivo', models.FileField(max_length=500, upload_to=b'apps/eventos/anexo/arquivo')), |
||||
|
('descricao', models.CharField(max_length=b'70', verbose_name='descri\xe7\xe3o')), |
||||
|
('data_pub', models.DateTimeField(default=datetime.datetime.now, verbose_name='data da publica\xe7\xe3o do anexo')), |
||||
|
('evento', models.ForeignKey(verbose_name='evento', to='eventos.Evento')), |
||||
|
], |
||||
|
options={ |
||||
|
'ordering': ('-data_pub',), |
||||
|
}, |
||||
|
bases=(models.Model,), |
||||
|
), |
||||
|
] |
@ -0,0 +1,10 @@ |
|||||
|
{% extends "base_change_form.html" %} |
||||
|
{% load i18n %} |
||||
|
|
||||
|
{% block object-tools-items %} |
||||
|
<li><a href="declaracao/"> |
||||
|
<span class="glyphicon glyphicon-print"></span> |
||||
|
{% trans 'Declaração' %} |
||||
|
</a></li> |
||||
|
{{ block.super }} |
||||
|
{% endblock %} |
@ -0,0 +1,24 @@ |
|||||
|
{% extends 'base_report.html' %} |
||||
|
{% load i18n %} |
||||
|
|
||||
|
{% block pagesize %}{{ pagesize }}{% endblock pagesize %} |
||||
|
{% block pagemargin %}4cm {{ pagemargin }}cm {{ pagemargin }}cm 2cm{% endblock pagemargin %} |
||||
|
|
||||
|
{% block report %} |
||||
|
{% for convite in evento.convite_set.all %} |
||||
|
{% with convite.casa as casa %} |
||||
|
{% for nome in convite.nomes_participantes.splitlines %} |
||||
|
{% block text_body %}{% endblock %} |
||||
|
<pdf:nextpage /> |
||||
|
{% endfor %} |
||||
|
{% endwith %} |
||||
|
{% endfor %} |
||||
|
{% endblock %} |
||||
|
|
||||
|
{%block page_foot%} |
||||
|
<table> |
||||
|
<tr> |
||||
|
<td class="footer-left">{% trans 'Emissão:' %} {% now "d/m/Y H:i:s" %}</td> |
||||
|
</tr> |
||||
|
</table> |
||||
|
{% endblock %} |
@ -0,0 +1,25 @@ |
|||||
|
{% extends "admin/base_site.html" %} |
||||
|
{% load i18n bootstrap3 %} |
||||
|
|
||||
|
{% block content_title %} |
||||
|
<h1 class="pull-left">{% trans 'Emitir declaração de comparecimento' %}</h1> |
||||
|
{% endblock %} |
||||
|
|
||||
|
{% block content %} |
||||
|
{% if error %} |
||||
|
<div class="alert alert-danger" role="alert"> |
||||
|
{{ error }} |
||||
|
</div> |
||||
|
{% endif %} |
||||
|
<div id="content-main"> |
||||
|
<form action="" method="post">{% csrf_token %} |
||||
|
{% csrf_token %} |
||||
|
<div class="form-group"> |
||||
|
{% bootstrap_form form %} |
||||
|
</div> |
||||
|
<input type="submit" value="Imprimir" class="btn btn-primary"/> |
||||
|
<a class="btn btn-danger" role="button" href="{% url 'admin:eventos_evento_change' evento_id %}">{% trans "Voltar" %}</a> |
||||
|
</form> |
||||
|
</div> |
||||
|
{% endblock %} |
||||
|
|
@ -1,4 +0,0 @@ |
|||||
{% extends "admin/change_list.html" %} |
|
||||
|
|
||||
{% block object-tools-items %} |
|
||||
{% endblock %} |
|
@ -0,0 +1,33 @@ |
|||||
|
{% extends "change_list_with_cart.html" %} |
||||
|
{% load i18n %} |
||||
|
|
||||
|
|
||||
|
{% block extra_search %} |
||||
|
<nav class="navbar navbar-default"> |
||||
|
<div class="container-fluid"> |
||||
|
<div class="navbar-header"> |
||||
|
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false"> |
||||
|
<span class="sr-only">Toggle navigation</span> |
||||
|
<span class="icon-bar"></span> |
||||
|
<span class="icon-bar"></span> |
||||
|
<span class="icon-bar"></span> |
||||
|
</button> |
||||
|
<a class="navbar-brand" href="#">Filtro de datas</a> |
||||
|
<p class="navbar-text">Use AAAA, AAAA-MM ou AAAA-MM-DD</p> |
||||
|
</div> |
||||
|
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> |
||||
|
<form class="navbar-form navbar-left" role="extra-search" id="changelist-extrasearch" action="" method="get"> |
||||
|
<div class="form-group"> |
||||
|
<label for="data_ativacao__gte">{% trans 'Ativados a partir de' %}:</label> |
||||
|
<input type="text" class="form-control search-query" size="10" name="data_ativacao__gte" value="" id="data_ativacao__gte"> |
||||
|
<label for="data_ativacao__lte">{% trans 'até' %}:</label> |
||||
|
<input type="text" class="form-control search-query" size="10" name="data_ativacao__lte" value="" id="data_ativacao__lte"> |
||||
|
</div> |
||||
|
<button type="submit" class="btn btn-default navbar-btn "> |
||||
|
<span class="glyphicon glyphicon-search"></span> |
||||
|
</button> |
||||
|
</form> |
||||
|
</div><!-- /.navbar-collapse --> |
||||
|
</div><!-- /.container-fluid --> |
||||
|
</nav> |
||||
|
{% endblock %} |
@ -0,0 +1,100 @@ |
|||||
|
{% extends "admin/carrinho.html" %} |
||||
|
{% load admin_list i18n %} |
||||
|
{% block extrastyle %} |
||||
|
{{ block.super }} |
||||
|
{% include "admin/tabs_style.html" %} |
||||
|
{% endblock %} |
||||
|
|
||||
|
{% block title %}{% trans 'Serviços no Carrinho | SIGI' %}{% endblock %} |
||||
|
{% block content_title %}<h1>{% trans 'Serviços no Carrinho' %}</h1>{% endblock %} |
||||
|
|
||||
|
{% block mensagem%} |
||||
|
<ul class="messagelist"> |
||||
|
{%if carIsEmpty%} |
||||
|
<li class="warning">{% trans 'O carrinho está vazio, sendo assim todos os Serviços entram na lista para exportação de acordo com os filtros aplicados.' %}</li> |
||||
|
{%else%} |
||||
|
<li>{{paginas.paginator.count}} {% trans 'Serviços no carrinho' %}.</li> |
||||
|
{%endif%} |
||||
|
</ul> |
||||
|
{% endblock %} |
||||
|
|
||||
|
{% block action %}deleta_itens_carrinho{% endblock %} |
||||
|
|
||||
|
{% block tabela %} |
||||
|
<table class="table table-striped"> |
||||
|
<thead class="thead-dark"> |
||||
|
<tr> |
||||
|
{%if not carIsEmpty%} |
||||
|
<th class="sorted ascending"><!-- <input type="checkbox" id="action-toggle" style="display: inline;">--> |
||||
|
</th> |
||||
|
{% endif %} |
||||
|
<th class="sorted ascending">{% trans 'Casa Legislativa' %}</th> |
||||
|
<th class="sorted ascending">{% trans 'UF' %}</th> |
||||
|
<th class="sorted ascending">{% trans 'Email' %}</th> |
||||
|
<th class="sorted ascending">{% trans 'Telefone' %}</th> |
||||
|
<th class="sorted ascending">{% trans 'Contato Interlegis' %}</th> |
||||
|
<th class="sorted ascending">{% trans 'Tipo de Serviço' %}</th> |
||||
|
<th class="sorted ascending">{% trans 'Data Ativação' %}</th> |
||||
|
</tr> |
||||
|
</thead> |
||||
|
<tbody> |
||||
|
{% for servico in paginas.object_list %} |
||||
|
<tr> |
||||
|
{%if not carIsEmpty%} |
||||
|
<th><input type="checkbox" name="_selected_action" |
||||
|
value="{{servico.id|safe}}" class="action-select" /></th> |
||||
|
{% endif %} |
||||
|
<td style="text-align: left;">{{servico.casa_legislativa}}</td> |
||||
|
<td>{{servico.casa_legislativa.municipio.uf.sigla}}</td> |
||||
|
<td>{{servico.casa_legislativa.email}}</td> |
||||
|
<td>{{servico.casa_legislativa.telefone}}</td> |
||||
|
<td>{{servico.casa_legislativa.contato_interlegis}}</td> |
||||
|
<td>{{servico.casa_legislativa.contato_interlegis.email}}</td> |
||||
|
<td>{{servico.tipo_servico}}</td> |
||||
|
<td>{{servico.data_ativacao}}</td></tr> |
||||
|
{% endfor %} |
||||
|
</tbody> |
||||
|
</table> |
||||
|
{% endblock %} |
||||
|
|
||||
|
{% block botoes %} |
||||
|
<ul class="nav nav-tabs" role="tablist"> |
||||
|
<li class="active" role="presentation"><a href="#tabs-2" aria-controls="tabs-2" role="tab" data-toggle="tab">{% trans 'Arquivo CSV (Excel, Calc)' %}</a></li> |
||||
|
</ul> |
||||
|
<div class="tab-content"> |
||||
|
<div role="tabpanel" class="tab-pane active" id="tabs-2"> |
||||
|
<form action="../csv/{{query_str}}" method="post">{% csrf_token %} |
||||
|
<fieldset> |
||||
|
<legend>{% trans 'Escolha os atributos para exportar' %}</legend> |
||||
|
<ul id="sortable" class="tabs-conteudo"> |
||||
|
<li> |
||||
|
<span class="ui-icon ui-icon-arrowthick-2-n-s"></span> |
||||
|
<input type="checkbox" name="itens_csv_selected" value="Casa Legislativa" |
||||
|
class="action-select" checked="checked" /> |
||||
|
<label>{% trans 'Casa Legislativa' %}</label> |
||||
|
</li> |
||||
|
<li> |
||||
|
<span class="ui-icon ui-icon-arrowthick-2-n-s"></span> |
||||
|
<input type="checkbox" name="itens_csv_selected" value="Contato Interlegis" |
||||
|
class="action-select" checked="checked" /> |
||||
|
<label>{% trans 'Contato Interlegis' %}</label> |
||||
|
</li> |
||||
|
<li> |
||||
|
<span class="ui-icon ui-icon-arrowthick-2-n-s"></span> |
||||
|
<input type="checkbox" name="itens_csv_selected" value="Produto" |
||||
|
class="action-select" checked="checked" /> |
||||
|
<label>{% trans 'Produto' %}</label> |
||||
|
</li> |
||||
|
<li> |
||||
|
<span class="ui-icon ui-icon-arrowthick-2-n-s"></span> |
||||
|
<input type="checkbox" name="itens_csv_selected" value="Data de Ativação" |
||||
|
class="action-select" checked="checked" /> |
||||
|
<label>{% trans 'Data de Ativação' %}</label> |
||||
|
</li> |
||||
|
</ul> |
||||
|
</fieldset> |
||||
|
<input type="submit" value="Exportar CSV" type="button" class="btn btn-primary"/> |
||||
|
</form> |
||||
|
</div> |
||||
|
</div> |
||||
|
{% endblock %} |
Loading…
Reference in new issue