mirror of https://github.com/interlegis/sapl.git
Gustavo274
3 years ago
12 changed files with 1038 additions and 60 deletions
@ -0,0 +1,28 @@ |
|||||
|
# Generated by Django 2.2.20 on 2021-08-17 23:29 |
||||
|
|
||||
|
from django.db import migrations, models |
||||
|
import django.db.models.deletion |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('parlamentares', '0039_documentoacessorio_reuniao'), |
||||
|
('materia', '0079_auto_20210311_1711'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.CreateModel( |
||||
|
name='PautaReuniaoFrente', |
||||
|
fields=[ |
||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
|
('materia', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='materia.MateriaLegislativa', verbose_name='Matéria')), |
||||
|
('reuniao', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='parlamentares.Reuniao', verbose_name='Reunião')), |
||||
|
], |
||||
|
options={ |
||||
|
'verbose_name': 'Matéria da Pauta', |
||||
|
'verbose_name_plural': 'Matérias da Pauta', |
||||
|
'ordering': ('id',), |
||||
|
}, |
||||
|
), |
||||
|
] |
@ -0,0 +1,60 @@ |
|||||
|
# Generated by Django 2.2.20 on 2021-08-17 23:26 |
||||
|
|
||||
|
from django.db import migrations, models |
||||
|
import django.db.models.deletion |
||||
|
import sapl.parlamentares.models |
||||
|
import sapl.utils |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('parlamentares', '0038_sessao_legislativa_redundante'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.CreateModel( |
||||
|
name='Reuniao', |
||||
|
fields=[ |
||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
|
('numero', models.PositiveIntegerField(verbose_name='Número')), |
||||
|
('nome', models.CharField(max_length=150, verbose_name='Nome da Reunião')), |
||||
|
('tema', models.CharField(blank=True, max_length=150, verbose_name='Tema da Reunião')), |
||||
|
('data', models.DateField(verbose_name='Data')), |
||||
|
('hora_inicio', models.TimeField(null=True, verbose_name='Horário de Início (hh:mm)')), |
||||
|
('hora_fim', models.TimeField(blank=True, null=True, verbose_name='Horário de Término (hh:mm)')), |
||||
|
('local_reuniao', models.CharField(blank=True, max_length=100, verbose_name='Local da Reunião')), |
||||
|
('observacao', models.TextField(blank=True, verbose_name='Observação')), |
||||
|
('url_audio', models.URLField(blank=True, max_length=150, verbose_name='URL do Arquivo de Áudio (Formatos MP3 / AAC)')), |
||||
|
('url_video', models.URLField(blank=True, max_length=150, verbose_name='URL do Arquivo de Vídeo (Formatos MP4 / FLV / WebM)')), |
||||
|
('upload_pauta', models.FileField(blank=True, max_length=300, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.parlamentares.models.pauta_upload_path, verbose_name='Pauta da Reunião')), |
||||
|
('upload_ata', models.FileField(blank=True, max_length=300, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.parlamentares.models.ata_upload_path, verbose_name='Ata da Reunião')), |
||||
|
('upload_anexo', models.FileField(blank=True, max_length=300, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.parlamentares.models.anexo_upload_path, verbose_name='Anexo da Reunião')), |
||||
|
('frente', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='parlamentares.Frente', verbose_name='Frente Parlamentar')), |
||||
|
], |
||||
|
options={ |
||||
|
'verbose_name': 'Reunião de Frente Parlamentar', |
||||
|
'verbose_name_plural': 'Reuniões de Frentes Parlamentares', |
||||
|
'ordering': ('numero', 'frente'), |
||||
|
}, |
||||
|
), |
||||
|
migrations.CreateModel( |
||||
|
name='DocumentoAcessorio', |
||||
|
fields=[ |
||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
|
('nome', models.CharField(max_length=50, verbose_name='Nome')), |
||||
|
('data', models.DateField(blank=True, default=None, null=True, verbose_name='Data')), |
||||
|
('autor', models.CharField(max_length=200, verbose_name='Autor')), |
||||
|
('ementa', models.TextField(blank=True, verbose_name='Ementa')), |
||||
|
('indexacao', models.TextField(blank=True)), |
||||
|
('arquivo', models.FileField(blank=True, max_length=300, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.parlamentares.models.anexo_upload_path, verbose_name='Texto Integral')), |
||||
|
('data_ultima_atualizacao', models.DateTimeField(auto_now=True, null=True, verbose_name='Data')), |
||||
|
('reuniao', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='documentoacessorio_set', to='parlamentares.Reuniao')), |
||||
|
], |
||||
|
options={ |
||||
|
'verbose_name': 'Documento Acessório', |
||||
|
'verbose_name_plural': 'Documentos Acessórios', |
||||
|
'ordering': ('data', 'id'), |
||||
|
}, |
||||
|
), |
||||
|
] |
@ -0,0 +1,33 @@ |
|||||
|
{% extends "crud/detail.html" %} |
||||
|
{% load i18n %} |
||||
|
{% load crispy_forms_tags %} |
||||
|
{% block actions %} {% endblock %} |
||||
|
|
||||
|
{% block title %} |
||||
|
<h1 class="page-header"> |
||||
|
Matérias em Tramitação <small>({{object}})</small> |
||||
|
</h1> |
||||
|
{% endblock %} |
||||
|
|
||||
|
{% block detail_content %} |
||||
|
<fieldset> |
||||
|
<legend>{{ frente }}</legend> |
||||
|
<b>Há {{ qtde }} matéria(s) em tramitação nesta unidade.</b> <br><br> |
||||
|
{% for materia_em_tramitacao in page_obj %} |
||||
|
<b><a href="{% url 'sapl.materia:materialegislativa_detail' materia_em_tramitacao.materia.id %}"> |
||||
|
{{ materia_em_tramitacao.materia.tipo.sigla }} {{ materia_em_tramitacao.materia.numero }} |
||||
|
{{ materia_em_tramitacao.materia.ano }} - {{ materia_em_tramitacao.materia.tipo }} |
||||
|
</b></a><br> |
||||
|
{{ materia_em_tramitacao.materia }}<br> |
||||
|
<b>Autor: </b>{{ materia_em_tramitacao.materia.autoria_set.first.autor.nome }}<br> |
||||
|
<b>Situação: </b>{{ materia_em_tramitacao.tramitacao.status.descricao }}<br> |
||||
|
<b>Data Fim Prazo da Última Tramitação: </b> |
||||
|
{% if materia_em_tramitacao.tramitacao.data_fim_prazo %} |
||||
|
{{ materia_em_tramitacao.tramitacao.data_fim_prazo }} |
||||
|
{% else %} |
||||
|
Não definida. |
||||
|
{% endif %}<br> |
||||
|
<br> |
||||
|
{% endfor %} |
||||
|
</fieldset> |
||||
|
{% endblock detail_content %} |
@ -0,0 +1,113 @@ |
|||||
|
{% extends "crud/detail.html" %} |
||||
|
{% load i18n crispy_forms_tags %} |
||||
|
{% block actions %}{% endblock %} |
||||
|
|
||||
|
{% block title %} |
||||
|
<h1 class="page-header"> |
||||
|
{% if opcao %} |
||||
|
Adicionar Matérias à Pauta <small>(Reunião: {{ object }})</small> |
||||
|
{% else %} |
||||
|
Remover Matérias da Pauta <small>(Reunião: {{ object }})</small> |
||||
|
{% endif %} |
||||
|
</h1> |
||||
|
{% endblock %} |
||||
|
|
||||
|
{% block detail_content %} |
||||
|
{% if opcao %} |
||||
|
{% if not show_results %} |
||||
|
{% crispy filter.form %} |
||||
|
{% endif %} |
||||
|
|
||||
|
{% if show_results %} |
||||
|
{% if numero_resultados > 0 %} |
||||
|
{% if numero_resultados == 1 %} |
||||
|
<div style="text-align: right;"><b>Pesquisa concluída com sucesso! Foi encontrada 1 matéria disponível.</b></div><br> |
||||
|
{% else %} |
||||
|
<div style="text-align: right;"> |
||||
|
<b>Pesquisa concluída com sucesso! Foram encontradas {{ numero_resultados }} matérias disponíveis.</b> |
||||
|
</div> |
||||
|
<br> |
||||
|
{% endif %} |
||||
|
<form method="POST" enctype="multipart/form-data"> |
||||
|
{% csrf_token %} |
||||
|
<fieldset> |
||||
|
<legend>Matérias para Adicionar à Pauta</legend> |
||||
|
<table class="table table-striped table-hover"> |
||||
|
<div class="controls"> |
||||
|
<div class="checkbox"> |
||||
|
<label for="id_check_all"> |
||||
|
<input type="checkbox" id="id_check_all" onchange="checkAll(this)"/> Marcar/Desmarcar Todos |
||||
|
</label> |
||||
|
</div> |
||||
|
</div> |
||||
|
<thead><tr><th>Matéria</th></tr></thead> |
||||
|
<tbody> |
||||
|
{% for materia_t in object_list %} |
||||
|
<tr> |
||||
|
<td> |
||||
|
<input type="checkbox" name="materia_id" value="{{ materia_t.materia.id }}" {% if check %} checked {% endif %}/> |
||||
|
{{ materia_t.materia.tipo.sigla }} |
||||
|
{{ materia_t.materia.numero }}/{{ materia_t.materia.ano }} - {{ materia_t.materia.tipo.descricao }} |
||||
|
</td> |
||||
|
</tr> |
||||
|
{% endfor %} |
||||
|
</tbody> |
||||
|
</table> |
||||
|
</fieldset> |
||||
|
<input type="submit" value="Salvar" class="btn btn-primary"S> |
||||
|
</form> |
||||
|
{% else %} |
||||
|
<br><div style="text-align: center"><b>Nenhuma matéria disponível encontrada.</b></div> |
||||
|
{% endif %} |
||||
|
{% endif %} |
||||
|
{% else %} |
||||
|
{% if materias %} |
||||
|
{% if numero_materias == 1 %} |
||||
|
<div style="text-align: right;"><b>Há 1 matéria disponível.</b></div><br> |
||||
|
{% else %} |
||||
|
<div style="text-align: right;"><b>Há {{ numero_materias }} matérias disponíveis.</b></div><br> |
||||
|
{% endif %} |
||||
|
<form method="POST" enctype="multipart/form-data"> |
||||
|
{% csrf_token %} |
||||
|
<fieldset> |
||||
|
<legend>Matérias para Remover da Pauta</legend> |
||||
|
<table class="table table-striped table-hover"> |
||||
|
<div class="controls"> |
||||
|
<div class="checkbox"> |
||||
|
<label for="id_check_all"> |
||||
|
<input type="checkbox" id="id_check_all" onchange="checkAll(this)" /> Marcar/Desmarcar Todos |
||||
|
</label> |
||||
|
</div> |
||||
|
</div> |
||||
|
<thead><tr><th>Matéria</th></tr></thead> |
||||
|
<tbody> |
||||
|
{% for materia in materias %} |
||||
|
<tr> |
||||
|
<td> |
||||
|
<input type="checkbox" name="materia_id" value="{{ materia.id }}" {% if check %} checked {% endif %}/> |
||||
|
{{ materia.tipo.sigla }} {{ materia.numero }}/{{ materia.ano }} - {{ materia.tipo.descricao }} |
||||
|
</td> |
||||
|
</tr> |
||||
|
{% endfor %} |
||||
|
</tbody> |
||||
|
</table> |
||||
|
</fieldset> |
||||
|
<input type="submit" value="Remover" class="btn btn-danger"S> |
||||
|
</form> |
||||
|
{% else %} |
||||
|
<br><div style="text-align: center;"><b>Não há matéria disponível.</b></div> |
||||
|
{% endif %} |
||||
|
{% endif %} |
||||
|
{% endblock %} |
||||
|
|
||||
|
{% block extra_js %} |
||||
|
<script language="JavaScript"> |
||||
|
function checkAll(elem){ |
||||
|
let checkboxes = document.getElementsByName('materia_id'); |
||||
|
for(let i=0; i<checkboxes.length; i++){ |
||||
|
if(checkboxes[i].type == 'checkbox') |
||||
|
checkboxes[i].checked = elem.checked |
||||
|
} |
||||
|
} |
||||
|
</script> |
||||
|
{% endblock %} |
@ -0,0 +1,59 @@ |
|||||
|
{% extends "crud/detail_detail.html" %} |
||||
|
{% load i18n %} |
||||
|
|
||||
|
{% block detail_content %} |
||||
|
{{ block.super }} |
||||
|
<h2 class="legend">Pauta</h2> |
||||
|
{% if mats %} |
||||
|
<p>Total de Registros: <b>{{ num_mats }}</b></p> |
||||
|
<table class="table table-striped table-hover"> |
||||
|
<thead><tr><th>Matéria</th></tr></thead> |
||||
|
<tbody> |
||||
|
{% for mat in mats %} |
||||
|
<tr><td><a href="{% url 'sapl.materia:materialegislativa_detail' mat.pk %}">{{mat}}</a></td></tr> |
||||
|
{% endfor %} |
||||
|
</tbody> |
||||
|
</table> |
||||
|
{% if perms.parlamentares.add_reuniao %} |
||||
|
<div class="actions btn-group float-right" role="group"> |
||||
|
<a href="{% url 'sapl.parlamentares:pauta_add' reuniao_pk %}" class="btn btn-outline-primary">{% trans 'Adicionar Matéria(s)' %}</a> |
||||
|
{% if num_mats == 1 %} |
||||
|
<a href="{% url 'sapl.parlamentares:pauta_remove' reuniao_pk %}" class="btn btn-outline-primary btn-outline-danger"> |
||||
|
{% trans 'Remover Matéria' %} |
||||
|
</a> |
||||
|
{% else %} |
||||
|
<a href="{% url 'sapl.parlamentares:pauta_remove' reuniao_pk %}" class="btn btn-outline-primary btn-outline-danger"> |
||||
|
{% trans 'Remover Matéria(s)' %} |
||||
|
</a> |
||||
|
{% endif %} |
||||
|
</div> |
||||
|
{% endif %} |
||||
|
{% else %} |
||||
|
{% if perms.parlamentares.add_reuniao %} |
||||
|
<a href="{% url 'sapl.parlamentares:pauta_add' reuniao_pk %}" class="btn btn-outline-primary">{% trans 'Adicionar Matéria(s)' %}</a> |
||||
|
{% endif %} |
||||
|
{% endif %} |
||||
|
<br /><br /> |
||||
|
<h2 class="legend">Documentos Acessórios</h2> |
||||
|
{% if docs %} |
||||
|
<p>Total de registros: <b>{{ num_docs }}</b></p> |
||||
|
<table class="table table-striped table-hover"> |
||||
|
<thead><tr><th>Documento Acessório</th></tr></thead> |
||||
|
<tbody> |
||||
|
{% for doc in docs %} |
||||
|
<tr><td><a href="{% url 'sapl.parlamentares:documentoacessorio_detail' doc.pk %}">{{ doc.nome }}</a></td></tr> |
||||
|
{% endfor %} |
||||
|
</tbody> |
||||
|
</table> |
||||
|
{% if perms.parlamentares.add_reuniao %} |
||||
|
<a href="{% url 'sapl.parlamentares:documentoacessorio_create' reuniao_pk %}" class="btn btn-outline-primary float-right"> |
||||
|
{% trans 'Adicionar Documento' %} |
||||
|
</a> |
||||
|
{% endif %} |
||||
|
{% else %} |
||||
|
{% if perms.parlamentares.add_reuniao %} |
||||
|
<a href="{% url 'sapl.parlamentares:documentoacessorio_create' reuniao_pk %}" class="btn btn-outline-primary">{% trans 'Adicionar Documento' %}</a> |
||||
|
{% endif %} |
||||
|
{% endif %} |
||||
|
<br /><br /> |
||||
|
{% endblock detail_content %} |
Loading…
Reference in new issue