mirror of https://github.com/interlegis/sigi.git
Sesostris Vieira
3 years ago
28 changed files with 1237 additions and 399 deletions
@ -0,0 +1,28 @@ |
|||
# Generated by Django 4.0.4 on 2022-04-24 17:31 |
|||
|
|||
from django.db import migrations, models |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
('casas', '0021_alter_orgao_options_remove_orgao_recorte_and_more'), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.AddField( |
|||
model_name='orgao', |
|||
name='brasao', |
|||
field=models.ImageField(blank=True, height_field='brasao_altura', help_text='Trate a imagem para que ela fique com cerca de 120x120 pixels', upload_to='imagens/casas/brasao', verbose_name='brasão', width_field='brasao_largura'), |
|||
), |
|||
migrations.AddField( |
|||
model_name='orgao', |
|||
name='brasao_altura', |
|||
field=models.SmallIntegerField(editable=False, null=True), |
|||
), |
|||
migrations.AddField( |
|||
model_name='orgao', |
|||
name='brasao_largura', |
|||
field=models.SmallIntegerField(editable=False, null=True), |
|||
), |
|||
] |
@ -0,0 +1,23 @@ |
|||
# Generated by Django 4.0.4 on 2022-04-25 21:46 |
|||
|
|||
from django.db import migrations, models |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
('casas', '0022_orgao_brasao_orgao_brasao_altura_and_more'), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.AddField( |
|||
model_name='funcionario', |
|||
name='cpf', |
|||
field=models.CharField(blank=True, max_length=20, verbose_name='CPF'), |
|||
), |
|||
migrations.AddField( |
|||
model_name='funcionario', |
|||
name='identidade', |
|||
field=models.CharField(blank=True, help_text='Informe o RG e o órgão emissor.', max_length=30, verbose_name='Identidade (RG)'), |
|||
), |
|||
] |
@ -0,0 +1,24 @@ |
|||
# Generated by Django 4.0.4 on 2022-04-25 19:45 |
|||
|
|||
from django.db import migrations |
|||
import tinymce.models |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
('convenios', '0020_gescon_orgaos_gestores'), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.AddField( |
|||
model_name='projeto', |
|||
name='texto_minuta', |
|||
field=tinymce.models.HTMLField(blank=True, help_text='Use as seguintes marcações:<ul><li>{{ casa.nome }} para o nome da Casa Legislativa / órgão</li><li>{{ casa.municipio.uf.sigla }} para a sigla da UF da Casa legislativa</li><li>{{ presidente.nome }} para o nome do presidente</li><li>{{ contato.nome }} para o nome do contato Interlegis</li></ul>', verbose_name='texto da minuta'), |
|||
), |
|||
migrations.AddField( |
|||
model_name='projeto', |
|||
name='texto_oficio', |
|||
field=tinymce.models.HTMLField(blank=True, help_text='Use as seguintes marcações:<ul><li>{{ casa.nome }} para o nome da Casa Legislativa / órgão</li><li>{{ casa.municipio.uf.sigla }} para a sigla da UF da Casa legislativa</li><li>{{ presidente.nome }} para o nome do presidente</li><li>{{ contato.nome }} para o nome do contato Interlegis</li></ul>', verbose_name='texto do ofício'), |
|||
), |
|||
] |
@ -0,0 +1,75 @@ |
|||
{% extends "admin/base_site.html" %} |
|||
{% load i18n static %} |
|||
|
|||
{% block content %} |
|||
{{ block.super }} |
|||
<form action="" method="post" name="convite" enctype="multipart/form-data">{% csrf_token %} |
|||
<div class="row"> |
|||
<div class="col s12"> |
|||
<h5> |
|||
{% blocktranslate with casa_nome=casa.nome evento_nome=evento.nome %} |
|||
Convidar {{ casa_nome }} para {{ evento_nome }} |
|||
{% endblocktranslate %} |
|||
</h5> |
|||
</div> |
|||
</div> |
|||
<div class="row"> |
|||
<div class="col s12"> |
|||
<div class="card"> |
|||
<div class="card-content"> |
|||
<span class="card-title">{% trans "Convite" %}</span> |
|||
{{ form_convite }} |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="row"> |
|||
<div class="col s12"> |
|||
<div class="card"> |
|||
<div class="card-content"> |
|||
<span class="card-title">{% trans "Casa" %}</span> |
|||
{{ form_casa }} |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="row"> |
|||
<div class="col s12"> |
|||
<div class="card"> |
|||
<div class="card-content"> |
|||
<span class="card-title">{% trans "Dados do presidente" %}</span> |
|||
{{ form_presidente }} |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="row"> |
|||
<div class="col s12"> |
|||
<div class="card"> |
|||
<div class="card-content"> |
|||
<span class="card-title">{% trans "Dados do contato Interlegis" %}</span> |
|||
{{ form_contato }} |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="row"> |
|||
<div class="col s12"> |
|||
<div class="card"> |
|||
<div class="card-action"> |
|||
<button class="btn waves-effect waves-light" type="submit" name="save"> |
|||
{% trans "Save" %} |
|||
<i class="material-icons right">send</i> |
|||
</button> |
|||
{% for proj in projetos %} |
|||
<button class="btn waves-effect waves-light" type="submit" name="save" value="{{ proj.id }}"> |
|||
{% blocktrans with sigla=proj.sigla %}Gerar minuta de {{ sigla}}{% endblocktrans %} |
|||
<i class="material-icons right">picture_as_pdf</i> |
|||
</button> |
|||
{% endfor %} |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</form> |
|||
{% endblock %} |
@ -0,0 +1,134 @@ |
|||
{% extends "admin/base_site.html" %} |
|||
{% load i18n static model_fields %} |
|||
|
|||
{% block extrastyle %} |
|||
{{ block.super }} |
|||
<style> |
|||
.search-result-item { |
|||
display: list-item; |
|||
list-style: none; |
|||
padding-left: 15px; |
|||
font-weight: bold; |
|||
} |
|||
</style> |
|||
{% endblock %} |
|||
{% block content %} |
|||
{{ block.super }} |
|||
<div class=""> |
|||
<div class="row"> |
|||
<div class="col s12"> |
|||
<h4>{{ evento.nome }}</h4> |
|||
</div> |
|||
</div> |
|||
<div class="row"> |
|||
<div class="col s12"> |
|||
<ul class="tabs"> |
|||
<li class="tab col s4"><a{% if not active %} class="active"{% endif %} href="#base">{% trans "Dados básicos" %}</a></li> |
|||
<li class="tab col s4"><a href="#convites">{% trans "Casas convidadas" %}</a></li> |
|||
<li class="tab col s4"><a{% if active %} class="active"{% endif %} href="#anexos">{% trans "Anexos" %}</a></li> |
|||
</ul> |
|||
</div> |
|||
<div id="base" class="col s12"> |
|||
<div class="card"> |
|||
<div class="card-content"> |
|||
<table class="responsive-table striped"> |
|||
{% for field_name in fields %} |
|||
<tr> |
|||
<th>{{ evento|verbose_name:field_name|title }}</th> |
|||
<td>{{ evento|field_value:field_name }}</td> |
|||
</tr> |
|||
{% endfor %} |
|||
</table> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div id="convites" class="col s12"> |
|||
<div class="card"> |
|||
<div class="card-content"> |
|||
<div class="input-field"> |
|||
<input id="search-text" class="search-text" type="text" data-source="{% url 'openmapsearch' %}" |
|||
data-param="q" /> |
|||
<label for="search">{% trans "Convidar" %}</label> |
|||
</div> |
|||
<div id="search-result" class="search-result" data-item-click="convida_casa"></div> |
|||
{% if evento.convite_set.count == 0 %} |
|||
<span class="card-title">{% trans "Nenhum convite registrado" %}</span> |
|||
{% else %} |
|||
<table class="responsive-table striped"> |
|||
<thead> |
|||
<tr> |
|||
{% for field_name in convite_fields %} |
|||
<th>{{ evento.convite_set.first|verbose_name:field_name|title }}</th> |
|||
{% endfor %} |
|||
</tr> |
|||
</thead> |
|||
<tbody> |
|||
{% for convite in evento.convite_set.all %} |
|||
<tr> |
|||
{% for field_name in convite_fields %} |
|||
<td>{{ convite|field_value:field_name }}</td> |
|||
{% endfor %} |
|||
</tr> |
|||
{% endfor %} |
|||
</tbody> |
|||
</table> |
|||
{% endif %} |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div id="anexos" class="col s12"> |
|||
<div class="card"> |
|||
<div class="card-content"> |
|||
{% if anexos.count == 0 %} |
|||
<span class="card-title">{% trans "Nenhum anexo registrado" %}</span> |
|||
{% else %} |
|||
{% if active %} |
|||
<span class="card-title"> |
|||
{% trans "Mostrando apenas anexos recem-criados" %} |
|||
</span> |
|||
<a href="{% url 'eventos-evento' evento.id %}#anexos">{% trans "Ver todos" %}</a> |
|||
{% endif %} |
|||
<table class="responsive-table striped"> |
|||
<thead> |
|||
<tr> |
|||
{% with anexos.first as anexo %} |
|||
<th>{{ anexo|verbose_name:"descricao"|title }}</th> |
|||
<th>{{ anexo|verbose_name:"data_pub"|title }}</th> |
|||
<th>{{ anexo|verbose_name:"arquivo"|title }}</th> |
|||
{% endwith %} |
|||
</tr> |
|||
</thead> |
|||
<tbody> |
|||
{% for anexo in anexos.all %} |
|||
<tr> |
|||
<td>{{ anexo.descricao }}</td> |
|||
<td>{{ anexo.data_pub|date:"SHORT_DATE_FORMAT" }}</td> |
|||
<td> |
|||
<a href="{{ anexo.arquivo.url }}" target="_blank"> |
|||
<i class="material-icons">picture_as_pdf</i> |
|||
</a> |
|||
</td> |
|||
</tr> |
|||
{% endfor %} |
|||
</tbody> |
|||
</table> |
|||
{% endif %} |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
{% endblock %} |
|||
|
|||
{% block footer %} |
|||
{{ block.super }} |
|||
<script type="text/javascript" src="{% static 'js/search.js' %}"></script> |
|||
<script> |
|||
function convida_casa(obj) { |
|||
window.location.assign("{% url 'eventos-evento-convida' evento.id 'casa_id' %}".replace('casa_id', obj.id)); |
|||
} |
|||
$(document).ready(function () { |
|||
M.Tabs.init($('.tabs'), { swipeable: true }); |
|||
}); |
|||
</script> |
|||
{% endblock %} |
@ -0,0 +1,77 @@ |
|||
{% extends 'pdf/base_report.html' %} |
|||
{% load i18n static %} |
|||
|
|||
{% block page_margin %}4cm 2cm{% endblock page_margin %} |
|||
|
|||
{% block page-header-settings %} |
|||
@top-center { content: element(header);} |
|||
{% endblock %} |
|||
|
|||
{% block page-footer-settings %} |
|||
@bottom-center { content: element(footer); } |
|||
{% endblock %} |
|||
|
|||
|
|||
{% block extra_style %} |
|||
h1 {font-size: 1.2em;} |
|||
h2 {font-size: 1.1em;} |
|||
h3,h4,h5,h6 {font-size: 1em;} |
|||
|
|||
header { |
|||
font-size: 1em; |
|||
text-align: center; |
|||
} |
|||
|
|||
header p { |
|||
margin: 0 0 5px 0; |
|||
} |
|||
|
|||
.strong { |
|||
font-weight: bold; |
|||
} |
|||
|
|||
.header-title { |
|||
font-weight: bold; |
|||
font-size: 1.2em; |
|||
} |
|||
|
|||
.header-subtitle { |
|||
font-weight: bold; |
|||
font-size: 1em; |
|||
} |
|||
|
|||
.content { |
|||
font-size: 1.2em; |
|||
line-height: 1.4em; |
|||
padding-bottom: 5px; |
|||
} |
|||
|
|||
footer { |
|||
width: 100%; |
|||
text-align: center; |
|||
} |
|||
|
|||
.barra { |
|||
height: 15px; |
|||
} |
|||
{% endblock %} |
|||
|
|||
{% block header %} |
|||
<img src="{% static 'img/logo-senado.png' %}"> |
|||
<p class="header-title">SENADO FEDERAL</p> |
|||
<p class="header-subtitle">Instituto Legislativo Brasileiro - ILB</p> |
|||
<p class="header-subtitle">Programa Interlegis</p> |
|||
{% endblock %} |
|||
|
|||
{% block main_content %} |
|||
<div class="content"> |
|||
{% block text_body %}{% endblock %} |
|||
</div> |
|||
{% endblock %} |
|||
|
|||
{% block footer %} |
|||
<img class="barra" src="{% static 'img/brasil-barra.jpg' %}"/> |
|||
<p>Instituto Legislativo Brasileiro - ILB - Av. N2 - Bloco 12 - CEP 70165-900 – Brasília DF</p> |
|||
<p>Telefone: +55 (61) 3303-2599 – interlegis@senado.leg.br – www.interlegis.leg.br</p> |
|||
<p class="strong">MINUTA-PADRÃO aprovada pela Diretoria-Geral do Senado Federal em 01/setembro/2021, conforme processo 00200.006818/2021-12.</p> |
|||
{% endblock %} |
@ -0,0 +1,79 @@ |
|||
{% extends 'pdf/base_report.html' %} |
|||
{% load i18n %} |
|||
|
|||
{% block page_margin %}4cm 2cm{% endblock page_margin %} |
|||
|
|||
{% block page-header-settings %} |
|||
@top-left { content: element(logo);} |
|||
@top-center { content: element(header);} |
|||
{% endblock %} |
|||
|
|||
{% block page-footer-settings %} |
|||
@bottom-center { content: element(footer); } |
|||
{% endblock %} |
|||
|
|||
|
|||
{% block extra_style %} |
|||
@media print { |
|||
.logo {position: running(logo);} |
|||
} |
|||
|
|||
.logo-image { |
|||
display: block; |
|||
max-width: 120px; |
|||
max-height: 120px; |
|||
} |
|||
|
|||
header { |
|||
font-size: 1em; |
|||
text-align: left; |
|||
} |
|||
|
|||
header p { |
|||
margin: 5px 15px; |
|||
} |
|||
|
|||
header h1 { |
|||
margin: 0 0 5px 0; |
|||
} |
|||
|
|||
.strong { |
|||
font-weight: bold; |
|||
} |
|||
|
|||
.content { |
|||
font-size: 1.2em; |
|||
line-height: 1.4em; |
|||
padding-bottom: 5px; |
|||
} |
|||
|
|||
footer { |
|||
width: 100%; |
|||
text-align: center; |
|||
} |
|||
{% endblock %} |
|||
|
|||
{% block body_content %} |
|||
<div id="logo" class="logo"> |
|||
<img src="{{ casa.brasao.url }}" class="logo-image"> |
|||
</div> |
|||
{{ block.super }} |
|||
{% endblock %} |
|||
|
|||
{% block header %} |
|||
<h1>{{ casa.nome }}</h1> |
|||
<p class="strong">CNPJ: {{ casa.cnpj }}</p> |
|||
<p>{{ casa.logradouro }}, {{ casa.bairro }}</p> |
|||
<p>{{ casa.cep }} - {{ casa.municipio.nome }} - {{ casa.municipio.uf.nome }}</p> |
|||
{% endblock %} |
|||
|
|||
{% block main_content %} |
|||
<div class="content"> |
|||
{% block text_body %}{% endblock %} |
|||
</div> |
|||
{% endblock %} |
|||
|
|||
{% block footer %} |
|||
<p class="strong">{{ casa.nome }} - {{ casa.logradouro }} - {{ casa.bairro }}</p> |
|||
<p>{{ casa.cep }} - {{ casa.municipio.nome }}, {{ casa.municipio.uf.sigla }}</p> |
|||
{% endblock %} |
@ -1,18 +0,0 @@ |
|||
<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 %} |
@ -0,0 +1,15 @@ |
|||
from django import template |
|||
|
|||
register = template.Library() |
|||
|
|||
|
|||
@register.filter |
|||
def verbose_name(instance, field_name=""): |
|||
if field_name == "": |
|||
return "" |
|||
return instance._meta.get_field(field_name).verbose_name |
|||
|
|||
|
|||
@register.filter |
|||
def field_value(instance, field_name=""): |
|||
return getattr(instance, field_name, "") |
@ -0,0 +1,9 @@ |
|||
from django import template |
|||
from django.utils.safestring import mark_safe |
|||
|
|||
register = template.Library() |
|||
|
|||
|
|||
@register.simple_tag |
|||
def page_break(): |
|||
return mark_safe('<div class="new-page"></div>') |
After Width: | Height: | Size: 12 KiB |
@ -0,0 +1,39 @@ |
|||
$(document).ready(function () { |
|||
$(".search-text").on("input change", function () { |
|||
var $resultbox = $(".search-result"); |
|||
var $this = $(this); |
|||
var term = $this.val(); |
|||
var url = $this.attr("data-source"); |
|||
var param_name = $this.attr("data-param"); |
|||
var item_click = $resultbox.attr("data-item-click"); |
|||
var callback = window[item_click]; |
|||
var query_param = {}; |
|||
|
|||
query_param[param_name] = term; |
|||
|
|||
if (term.length < 3) { |
|||
$resultbox.html(""); |
|||
$resultbox.addClass("hide"); |
|||
return; |
|||
} |
|||
|
|||
$.get(url, query_param, function (data) { |
|||
$resultbox.html(""); |
|||
for (i in data) { |
|||
var plain = JSON.stringify(data[i]); |
|||
var $item = $(`<a href="#" class="search-result-item" data-retrieved='${plain}'></a>`); |
|||
$item.html(data[i].label); |
|||
$resultbox.append($item); |
|||
} |
|||
$resultbox.removeClass("hide"); |
|||
|
|||
$(".search-result-item").on("click", function () { |
|||
var plain = $(this).attr("data-retrieved"); |
|||
var obj = JSON.parse(plain); |
|||
$this.val(obj.label); |
|||
$resultbox.html("").addClass("hide"); |
|||
callback(obj); |
|||
}); |
|||
}); |
|||
}); |
|||
}); |
@ -0,0 +1,19 @@ |
|||
<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 %} |
@ -0,0 +1 @@ |
|||
{% include "django/forms/material_form.html" %} |
@ -0,0 +1,22 @@ |
|||
{{ errors }} |
|||
{% if errors and not fields %} |
|||
<p>{% for field in hidden_fields %}{{ field }}{% endfor %}</p> |
|||
{% endif %} |
|||
{% for field, errors in fields %} |
|||
<div{% with classes=field.css_classes %} class="{% if field.widget_type != 'clearablefile' %}input-field {% endif %}{{ classes }}" {% endwith %}> |
|||
<small class="error"> |
|||
{{ errors }} |
|||
</small> |
|||
{% if field.label %}{{ field.label_tag }}{% endif %} |
|||
{{ field }} |
|||
{% if field.help_text %} |
|||
<small class="helptext">{{ field.help_text|safe }}</small> |
|||
{% endif %} |
|||
{% if forloop.last %} |
|||
{% for field in hidden_fields %}{{ field }}{% endfor %} |
|||
{% endif %} |
|||
</div> |
|||
{% endfor %} |
|||
{% if not fields and not errors %} |
|||
{% for field in hidden_fields %}{{ field }}{% endfor %} |
|||
{% endif %} |
@ -0,0 +1,27 @@ |
|||
{% load i18n %} |
|||
<div class="file-field input-field"> |
|||
{% if widget.is_initial %} |
|||
<div class="left" style="padding: 5px;"> |
|||
<a href="{{ widget.value.url }}"> |
|||
<img src="{{ widget.value.url }}" alt="{{ widget.value }}" height="60" width="60"/> |
|||
</a> |
|||
</div> |
|||
{% endif %} |
|||
<div class="btn"> |
|||
<span>{% trans "File" %}</span> |
|||
<input type="{{ widget.type }}" name="{{ widget.name }}" {% include "django/forms/widgets/attrs.html" %}> |
|||
</div> |
|||
<div class="file-path-wrapper"> |
|||
<input class="file-path validate" type="text" value="{{ widget.value }}"> |
|||
</div> |
|||
</div> |
|||
{% if widget.is_initial %} |
|||
{% if not widget.required %} |
|||
<p> |
|||
<label> |
|||
<input type="checkbox" name="{{ widget.checkbox_name }}" id="{{ widget.checkbox_id }}" {% if widget.attrs.disabled %}disabled{% endif %}> |
|||
<span>{{ widget.clear_checkbox_label }}</span> |
|||
</label> |
|||
</p> |
|||
{% endif %} |
|||
{% endif %} |
Loading…
Reference in new issue