mirror of https://github.com/interlegis/sigi.git
Sesostris Vieira
3 years ago
42 changed files with 1872 additions and 1699 deletions
@ -1,6 +1,10 @@ |
|||
ipython==7.30.1 |
|||
weasyprint==54.0 |
|||
Django==4.0.1 |
|||
django-localflavor==3.1 |
|||
django-extensions==3.1.5 |
|||
django-weasyprint==2.1.0 |
|||
psycopg2==2.9.3 |
|||
django-bootstrap5==21.3 |
|||
Pillow==9.0.0 |
|||
django-localflavor==3.1 |
|||
|
@ -0,0 +1,6 @@ |
|||
from django.apps import AppConfig |
|||
from django.utils.translation import gettext_lazy as _ |
|||
|
|||
class CasasConfig(AppConfig): |
|||
name = 'sigi.apps.casas' |
|||
verbose_name = _('casas legislativas') |
@ -0,0 +1,97 @@ |
|||
from django.contrib import admin |
|||
from sigi.apps.servidores.models import Servidor |
|||
|
|||
|
|||
class GerentesInterlegisFilter(admin.filters.RelatedFieldListFilter): |
|||
|
|||
def __init__(self, *args, **kwargs): |
|||
super(GerentesInterlegisFilter, self).__init__(*args, **kwargs) |
|||
gerentes = Servidor.objects.filter(casas_que_gerencia__isnull=False).order_by('nome_completo').distinct() |
|||
self.lookup_choices = [(x.id, x) for x in gerentes] |
|||
|
|||
# class ConvenioFilter(admin.SimpleListFilter): |
|||
# title = _("Tipo de convênio") |
|||
# parameter_name = 'convenio' |
|||
|
|||
# def lookups(self, request, model_admin): |
|||
# return ( |
|||
# ('SC', _("Sem nenhum convênio")), |
|||
# ('CC', _("Com algum convênio")), |
|||
# ) + tuple([(p.pk, p.sigla) for p in Projeto.objects.all()]) |
|||
|
|||
# def queryset(self, request, queryset): |
|||
# if self.value() is not None: |
|||
# if self.value() == 'SC': |
|||
# queryset = queryset.filter(convenio=None) |
|||
# elif self.value() == 'CC': |
|||
# queryset = queryset.exclude(convenio=None) |
|||
# else: |
|||
# queryset = queryset.filter(convenio__projeto_id=self.value()) |
|||
|
|||
# return queryset.distinct('municipio__uf__nome', 'nome') |
|||
|
|||
# class ExcluirConvenioFilter(admin.SimpleListFilter): |
|||
# title=_("Excluir convênio da pesquisa") |
|||
# parameter_name = 'excluir_convenio' |
|||
|
|||
# def lookups(self, request, model_admin): |
|||
# return tuple([(p.pk, p.sigla) for p in Projeto.objects.all()]) |
|||
|
|||
# def queryset(self, request, queryset): |
|||
# if (self.value() is None): |
|||
# return queryset |
|||
# else: |
|||
# queryset = queryset.exclude(convenio__projeto_id=self.value()).distinct('municipio__uf__nome', 'nome') |
|||
# return queryset |
|||
|
|||
# class ServicoFilter(admin.SimpleListFilter): |
|||
# title = _("Serviço") |
|||
# parameter_name = 'servico' |
|||
|
|||
# def lookups(self, request, model_admin): |
|||
# return ( |
|||
# ('SS', _("Sem nenhum serviço")), |
|||
# ('CS', _("Com algum serviço")), |
|||
# ('CH', _("Com algum serviço de hospedagem")), |
|||
# ('CR', _("Apenas serviço de registro")), |
|||
# ) + tuple([(p.pk, p.nome) for p in TipoServico.objects.all()]) |
|||
|
|||
# def queryset(self, request, queryset): |
|||
# if self.value() is not None: |
|||
# if self.value() == 'SS': |
|||
# queryset = queryset.filter(servico=None) |
|||
# elif self.value() == 'CS': |
|||
# queryset = queryset.exclude(servico=None).filter( |
|||
# servico__data_desativacao__isnull=True) |
|||
# elif self.value() == 'CR': |
|||
# queryset = queryset.exclude(servico__tipo_servico__modo='H') \ |
|||
# .exclude(servico=None) |
|||
# elif self.value() == 'CH': |
|||
# queryset = queryset.filter( |
|||
# servico__tipo_servico__modo='H', |
|||
# servico__data_desativacao__isnull=True |
|||
# ) |
|||
# else: |
|||
# queryset = queryset.filter( |
|||
# servico__tipo_servico_id=self.value() |
|||
# ) |
|||
|
|||
# return queryset.distinct('municipio__uf__nome', 'nome') |
|||
|
|||
# class ServicoAtivoFilter(admin.SimpleListFilter): |
|||
# title = _("Serviço ativo") |
|||
# parameter_name = 'ativo' |
|||
|
|||
# def lookups(self, request, model_admin): |
|||
# return ( |
|||
# ('ativo', _("Ativo")), |
|||
# ('desativado', _("Desativado")), |
|||
# ) |
|||
|
|||
# def queryset(self, request, queryset): |
|||
# if self.value() is not None: |
|||
# if self.value() == 'ativo': |
|||
# queryset = queryset.filter(servico__data_desativacao__isnull=True) |
|||
# else: |
|||
# queryset = queryset.filter(servico__data_desativacao__isnull=False) |
|||
# return queryset |
@ -0,0 +1,200 @@ |
|||
# Generated by Django 4.0.1 on 2022-01-11 18:44 |
|||
|
|||
from django.db import migrations, models |
|||
import django.db.models.deletion |
|||
import sigi.apps.utils |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
('servidores', '0008_alter_servico_id_alter_servidor_foto_and_more'), |
|||
('contatos', '0005_alter_mesorregiao_options_alter_microrregiao_options_and_more'), |
|||
('casas', '0020_auto_20210611_0946'), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.AlterModelOptions( |
|||
name='orgao', |
|||
options={'ordering': ('nome',), 'verbose_name': 'órgão', 'verbose_name_plural': 'órgãos'}, |
|||
), |
|||
migrations.RemoveField( |
|||
model_name='orgao', |
|||
name='recorte', |
|||
), |
|||
migrations.AlterField( |
|||
model_name='funcionario', |
|||
name='bairro', |
|||
field=models.CharField(blank=True, max_length=100, verbose_name='bairro'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='funcionario', |
|||
name='cargo', |
|||
field=models.CharField(blank=True, max_length=100, null=True, verbose_name='cargo'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='funcionario', |
|||
name='data_nascimento', |
|||
field=models.DateField(blank=True, null=True, verbose_name='data de nascimento'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='funcionario', |
|||
name='desativado', |
|||
field=models.BooleanField(default=False, verbose_name='desativado'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='funcionario', |
|||
name='endereco', |
|||
field=models.CharField(blank=True, max_length=100, verbose_name='endereço'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='funcionario', |
|||
name='id', |
|||
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='funcionario', |
|||
name='municipio', |
|||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='contatos.municipio', verbose_name='municipio'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='funcionario', |
|||
name='nome', |
|||
field=models.CharField(max_length=60, verbose_name='nome completo'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='funcionario', |
|||
name='nota', |
|||
field=models.CharField(blank=True, max_length=250, null=True, verbose_name='telefones'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='funcionario', |
|||
name='observacoes', |
|||
field=models.TextField(blank=True, verbose_name='observações'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='funcionario', |
|||
name='redes_sociais', |
|||
field=models.TextField(blank=True, help_text='Colocar um por linha', verbose_name='redes sociais'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='funcionario', |
|||
name='setor', |
|||
field=models.CharField(choices=[('presidente', 'Presidente'), ('contato_interlegis', 'Contato Interlegis'), ('infraestrutura_fisica', 'Infraestrutura Física'), ('estrutura_de_ti', 'Estrutura de TI'), ('organizacao_do_processo_legislativo', 'Organização do Processo Legislativo'), ('producao_legislativa', 'Produção Legislativa'), ('estrutura_de_comunicacao_social', 'Estrutura de Comunicação Social'), ('estrutura_de_recursos_humanos', 'Estrutura de Recursos Humanos'), ('gestao', 'Gestão'), ('outros', 'Outros')], default='outros', max_length=100, verbose_name='setor'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='funcionario', |
|||
name='sexo', |
|||
field=models.CharField(choices=[('M', 'Masculino'), ('F', 'Feminino')], default='M', max_length=1, verbose_name='sexo'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='funcionario', |
|||
name='tempo_de_servico', |
|||
field=models.CharField(blank=True, max_length=50, null=True, verbose_name='tempo de serviço'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='funcionario', |
|||
name='ult_alteracao', |
|||
field=models.DateTimeField(auto_now=True, null=True, verbose_name='última alteração'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='orgao', |
|||
name='bairro', |
|||
field=models.CharField(blank=True, max_length=100, verbose_name='bairro'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='orgao', |
|||
name='cnpj', |
|||
field=models.CharField(blank=True, max_length=32, verbose_name='CNPJ'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='orgao', |
|||
name='codigo_interlegis', |
|||
field=models.CharField(blank=True, max_length=3, verbose_name='código Interlegis'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='orgao', |
|||
name='data_instalacao', |
|||
field=models.DateField(blank=True, null=True, verbose_name='data de instalação da Casa Legislativa'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='orgao', |
|||
name='data_levantamento', |
|||
field=models.DateTimeField(blank=True, null=True, verbose_name='data/hora da pesquisa'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='orgao', |
|||
name='email', |
|||
field=models.EmailField(blank=True, max_length=128, verbose_name='e-mail'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='orgao', |
|||
name='foto', |
|||
field=models.ImageField(blank=True, height_field='foto_altura', upload_to='imagens/casas', verbose_name='foto', width_field='foto_largura'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='orgao', |
|||
name='horario_funcionamento', |
|||
field=models.CharField(blank=True, max_length=100, verbose_name='horário de funcionamento da Casa Legislativa'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='orgao', |
|||
name='id', |
|||
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='orgao', |
|||
name='inclusao_digital', |
|||
field=models.CharField(choices=[('NAO PESQUISADO', 'Não pesquisado'), ('NAO POSSUI PORTAL', 'Não possui portal'), ('PORTAL MODELO', 'Possui Portal Modelo'), ('OUTRO PORTAL', 'Possui outro portal')], default='NAO PESQUISADO', max_length=30, verbose_name='inclusão digital'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='orgao', |
|||
name='logradouro', |
|||
field=models.CharField(help_text='Avenida, rua, praça, jardim, parque...', max_length=100, verbose_name='logradouro'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='orgao', |
|||
name='municipio', |
|||
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='contatos.municipio', verbose_name='município'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='orgao', |
|||
name='nome', |
|||
field=models.CharField(help_text='Exemplo: <em>Câmara Municipal de Pains</em>.', max_length=60, verbose_name='nome'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='orgao', |
|||
name='obs_pesquisa', |
|||
field=models.TextField(blank=True, verbose_name='observações do pesquisador'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='orgao', |
|||
name='pagina_web', |
|||
field=models.URLField(blank=True, help_text='Exemplo: <em>http://www.camarapains.mg.gov.br</em>.', verbose_name='página web'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='orgao', |
|||
name='pesquisador', |
|||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='servidores.servidor', verbose_name='pesquisador'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='orgao', |
|||
name='search_text', |
|||
field=sigi.apps.utils.SearchField(editable=False, field_names=['nome']), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='orgao', |
|||
name='tipo', |
|||
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='casas.tipoorgao', verbose_name='tipo'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='orgao', |
|||
name='ult_alt_endereco', |
|||
field=models.DateTimeField(blank=True, null=True, verbose_name='última alteração do endereço'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='tipoorgao', |
|||
name='id', |
|||
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), |
|||
), |
|||
] |
@ -0,0 +1,37 @@ |
|||
{% extends 'pdf/base_report.html' %} |
|||
{% load static i18n %} |
|||
|
|||
{% block page_size %}A4 landscape{% endblock %} |
|||
|
|||
{% block main_content %} |
|||
<table repeat="1"> |
|||
<thead> |
|||
<tr> |
|||
<th style="width: 22.5%;">{% trans 'Casa' %}</th> |
|||
<th style="width: 12.5%;">{% trans 'Presidente' %}</th> |
|||
<th style="width: 5%;">{% trans 'Tipo' %}</th> |
|||
<th style="width: 18%;">{% trans 'Endereço' %}</th> |
|||
<th style="width: 10%;">{% trans 'Bairro' %}</th> |
|||
<th style="width: 7%;">{% trans 'CEP' %}</th> |
|||
<th style="width: 12.5%;">{% trans 'Telefone' %}</th> |
|||
<th style="width: 12.5%;">{% trans 'E-mail' %}</th> |
|||
</tr> |
|||
</thead> |
|||
|
|||
{% for casa in casas %} |
|||
{% ifchanged casa.municipio.uf %} |
|||
<tr class="title_row"><td colspan="8"><h1>{{ casa.municipio.uf.nome }}</h1></td></tr> |
|||
{% endifchanged %} |
|||
<tr> |
|||
<td>{{ casa.nome }}</td> |
|||
<td>{{ casa.presidente }}</td> |
|||
<td>{{ casa.tipo.sigla }}</td> |
|||
<td>{{ casa.logradouro }}</td> |
|||
<td>{{ casa.bairro }}</td> |
|||
<td>{{ casa.cep }}</td> |
|||
<td>{{ casa.telefone }}</td> |
|||
<td>{{ casa.email }}</td> |
|||
</tr> |
|||
{% endfor %} |
|||
</table> |
|||
{% endblock main_content %} |
@ -1,132 +0,0 @@ |
|||
{% load smart_if %} |
|||
{% load static from staticfiles %} |
|||
{% load i18n %} |
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> |
|||
<html> |
|||
<head> |
|||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
|||
<title>Casa Legislativa</title> |
|||
<style type="text/css"> |
|||
table { |
|||
padding: 3px; |
|||
line-height: 1em; |
|||
-fs-table-paginate: paginate; |
|||
} |
|||
thead { |
|||
display: table-header-group; |
|||
} |
|||
th { |
|||
font-weight: bold; |
|||
text-align: left; |
|||
} |
|||
|
|||
th, td { |
|||
border-bottom: 1px solid #ddd; |
|||
} |
|||
|
|||
td.logo { |
|||
text-align: center; |
|||
} |
|||
|
|||
td.header_text p { |
|||
margin: 0px; |
|||
font-size: 1.4em; |
|||
} |
|||
|
|||
td.header_text { |
|||
width: 550px; |
|||
} |
|||
|
|||
h1 { |
|||
font-size: 2em; |
|||
text-align: center; |
|||
} |
|||
h2 { |
|||
font-size: 1.7em; |
|||
} |
|||
h3 { |
|||
margin-top: 10px; |
|||
margin-bottom: 0px; |
|||
} |
|||
body { |
|||
font-family: "Helvetica, Arial, sans-serif"; |
|||
font-size: 1.3em; |
|||
line-height: 1em; |
|||
} |
|||
|
|||
#footer { |
|||
text-align: center; |
|||
} |
|||
|
|||
@page { |
|||
size: a4 landscape; |
|||
margin: 3.5cm 2cm 2cm 2cm; |
|||
font-family: "Helvetica, Arial, sans-serif"; |
|||
font-size: 2em; |
|||
@frame header { |
|||
-pdf-frame-content: header; |
|||
top: 1cm; |
|||
} |
|||
@frame footer { |
|||
-pdf-frame-content: footer; |
|||
bottom: 0cm; |
|||
margin-left: 2cm; |
|||
margin-right: 2cm; |
|||
height: 1cm; |
|||
} |
|||
} |
|||
</style> |
|||
</head> |
|||
<body> |
|||
<div id="header"> |
|||
<table> |
|||
<tr> |
|||
<td class="logo"><img src="{% static 'img/logo-senado.jpg' %}"/></td> |
|||
<td class="header_text"> |
|||
<p><strong>{% trans 'SENADO FEDERAL' %}</strong></p> |
|||
<p><strong>{% trans 'ILB - Interlegis' %}</strong></p> |
|||
<p>{{ title }}</p> |
|||
</td> |
|||
<td class="logo"><img src="{% static 'img/logo-interlegis.jpg' %}"/></td> |
|||
</tr> |
|||
</table> |
|||
</div> |
|||
|
|||
<table repeat="1"> |
|||
<thead> |
|||
<tr> |
|||
<th style="width: 22.5%;">{% trans 'Casa' %}</th> |
|||
<th style="width: 12.5%;">{% trans 'Presidente' %}</th> |
|||
<th style="width: 5%;">{% trans 'Tipo' %}</th> |
|||
<th style="width: 18%;">{% trans 'Endereço' %}</th> |
|||
<th style="width: 10%;">{% trans 'Bairro' %}</th> |
|||
<th style="width: 7%;">{% trans 'CEP' %}</th> |
|||
<th style="width: 12.5%;">{% trans 'Telefone' %}</th> |
|||
<th style="width: 12.5%;">{% trans 'E-mail' %}</th> |
|||
</tr> |
|||
</thead> |
|||
|
|||
{% for casa in casas %} |
|||
{% ifchanged casa.municipio.uf %} |
|||
<tr><td colspan="8"><h3>{{ casa.municipio.uf.nome }}</h3></td></tr> |
|||
{% endifchanged %} |
|||
<tr> |
|||
<td>{{ casa.nome }}</td> |
|||
<td>{{ casa.presidente }}</td> |
|||
<td>{{ casa.tipo.sigla }}</td> |
|||
<td>{{ casa.logradouro }}</td> |
|||
<td>{{ casa.bairro }}</td> |
|||
<td>{{ casa.cep }}</td> |
|||
<td>{{ casa.telefone }}</td> |
|||
<td>{{ casa.email }}</td> |
|||
</tr> |
|||
{% endfor %} |
|||
</table> |
|||
|
|||
<div id="footer"> |
|||
{%block page_foot%} |
|||
{% trans 'Página' %} <pdf:pagenumber> |
|||
{%endblock%} |
|||
</div> |
|||
</body> |
|||
</html> |
@ -0,0 +1,3 @@ |
|||
from django.test import TestCase |
|||
|
|||
# Create your tests here. |
File diff suppressed because it is too large
After Width: | Height: | Size: 19 KiB |
After Width: | Height: | Size: 31 KiB |
@ -1,5 +1,5 @@ |
|||
{% extends "admin/change_list.html" %} |
|||
{% load admin_list i18n reporting_tags %} |
|||
{% load admin_list i18n %} |
|||
|
|||
{% block object-tools-items %} |
|||
<li><a class="btn" href="carrinho/{{query_str}}"> |
@ -0,0 +1,45 @@ |
|||
{% load static i18n %} |
|||
<!DOCTYPE HTML> |
|||
<html lang="pt-BR"> |
|||
<head> |
|||
<meta charset="utf-8"/> |
|||
<meta name="description" content="SIGI reports"> |
|||
<meta name="author" content="Interlegis"> |
|||
<style type="text/css"> |
|||
@page { |
|||
size: {% block page_size %}A4 portrait{% endblock page_size %}; |
|||
margin: {% block page_margin %}3cm 2cm 2cm 2cm{% endblock page_margin %}; |
|||
font-family: "Helvetica, Arial, sans-serif"; |
|||
font-size: 10px; |
|||
@top-right { content: url("{% static 'img/logo-interlegis.png' %}");} |
|||
@top-left {content: url("{% static 'img/logo-senado.png' %}");} |
|||
@top-center { content: element(header); } |
|||
@bottom-center { content: element(footer); } |
|||
@bottom-right { content: "{% trans "Página: " %}" counter(page); } |
|||
{% block extra_page_settings %}{% endblock extra_page_settings %} |
|||
} |
|||
h1 { bookmark-level: 1 } |
|||
h2 { bookmark-level: 2 } |
|||
h3 { bookmark-level: 3 } |
|||
h4 { bookmark-level: 4 } |
|||
h5 { bookmark-level: 5 } |
|||
h6 { bookmark-level: 6 } |
|||
@media print { |
|||
header {position: running(header);} |
|||
footer {position: running(footer);} |
|||
} |
|||
@media print { |
|||
} |
|||
body { |
|||
font-family: Helvetica, Arial, sans-serif; |
|||
font-size: 10px; |
|||
} |
|||
{% block extra_style %}{% endblock extra_style %} |
|||
</style> |
|||
{% block extra_head %}{% endblock extra_head %} |
|||
<title>{% block title %}{% endblock title %}</title> |
|||
</head> |
|||
<body class="{% block body_class %}{% endblock body_class %}"> |
|||
{% block body_content %}{% endblock body_content %} |
|||
</body> |
|||
</html> |
@ -0,0 +1,59 @@ |
|||
{% extends 'pdf/base.html' %} |
|||
{% load static i18n %} |
|||
|
|||
{% block title %}{{ title }}{% endblock title %} |
|||
{% block extra_style %} |
|||
h1, h2, h3, h4, h5, h6 { |
|||
margin: 0; |
|||
} |
|||
h1 {font-size: 1.6em;} |
|||
h2 {font-size: 1.5em;} |
|||
h3 {font-size: 1.4em;} |
|||
h4 {font-size: 1.3em;} |
|||
h5 {font-size: 1.2em;} |
|||
h6 {font-size: 1.1em;} |
|||
header { |
|||
font-size: 1.4em; |
|||
font-weight: bold; |
|||
text-align: center; |
|||
} |
|||
header p { |
|||
margin: 5px; |
|||
} |
|||
.report_name { |
|||
font-size: 1.6em; |
|||
} |
|||
|
|||
table { |
|||
border: 2px white; |
|||
width: 100%; |
|||
} |
|||
th,td { |
|||
padding: 4px; |
|||
} |
|||
th { |
|||
background-color: #007433; |
|||
color: white; |
|||
} |
|||
tr:nth-child(even) { |
|||
background-color: #d2d2d2; |
|||
} |
|||
.title_row { |
|||
background-color: #b2b2b2; |
|||
} |
|||
{% endblock extra_style %} |
|||
|
|||
{% block body_content %} |
|||
<header>{% block header %} |
|||
<p>{% trans 'SENADO FEDERAL' %}</p> |
|||
<p>{% trans 'Instituto Legislativo Brasileiro - ILB' %}</p> |
|||
<p>{% trans "INTERLEGIS" %}</p> |
|||
<p class="report_name">{{ title|upper }}</p>{% endblock header %} |
|||
</header> |
|||
|
|||
<footer>{% block footer %} |
|||
<p>{% trans 'Emitido em ' %}{% now "DATETIME_FORMAT" %}</p>{% endblock footer %} |
|||
</footer> |
|||
|
|||
{% block main_content %}{% endblock main_content %} |
|||
{% endblock body_content %} |
Before Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 30 KiB |
Loading…
Reference in new issue