mirror of https://github.com/interlegis/sapl.git
Browse Source
* cria model VinculoDocAdminMateria * impl display em detailview de matéria e documentos * add unique_together a VinculoDocAdminMateria * impl crud de vinculodocadminmateria * impl vinculo em lote de docadm com matériaspull/3588/head
LeandroJataí
2 years ago
committed by
GitHub
15 changed files with 590 additions and 24 deletions
@ -0,0 +1,35 @@ |
|||||
|
# Generated by Django 2.2.28 on 2022-08-05 01:39 |
||||
|
|
||||
|
from django.db import migrations, models |
||||
|
import django.db.models.deletion |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('materia', '0081_auto_20220321_0934'), |
||||
|
('protocoloadm', '0040_auto_20220321_0934'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.CreateModel( |
||||
|
name='VinculoDocAdminMateria', |
||||
|
fields=[ |
||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
|
('data_anexacao', models.DateField(verbose_name='Data Anexação')), |
||||
|
('data_desanexacao', models.DateField(blank=True, null=True, verbose_name='Data Desanexação')), |
||||
|
('documento', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='materialegislativa_vinculada_set', to='protocoloadm.DocumentoAdministrativo', verbose_name='Documento Administrativo')), |
||||
|
('materia', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='documentoadministrativo_vinculado_set', to='materia.MateriaLegislativa', verbose_name='Matéria Legislativa')), |
||||
|
], |
||||
|
options={ |
||||
|
'verbose_name': 'Vinculo entre Documento Administrativo e Matéria Legislativa', |
||||
|
'verbose_name_plural': 'Vinculos entre Documento Administrativo e Matéria Legislativa', |
||||
|
'ordering': ('id',), |
||||
|
}, |
||||
|
), |
||||
|
migrations.AddField( |
||||
|
model_name='documentoadministrativo', |
||||
|
name='materiasvinculadas', |
||||
|
field=models.ManyToManyField(blank=True, related_name='docadmsvinculados', through='protocoloadm.VinculoDocAdminMateria', to='materia.MateriaLegislativa'), |
||||
|
), |
||||
|
] |
@ -0,0 +1,23 @@ |
|||||
|
# Generated by Django 2.2.28 on 2022-08-05 15:36 |
||||
|
|
||||
|
from django.db import migrations, models |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('materia', '0081_auto_20220321_0934'), |
||||
|
('protocoloadm', '0041_auto_20220804_2239'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.AlterField( |
||||
|
model_name='documentoadministrativo', |
||||
|
name='materiasvinculadas', |
||||
|
field=models.ManyToManyField(blank=True, related_name='docadmvinculados', through='protocoloadm.VinculoDocAdminMateria', to='materia.MateriaLegislativa'), |
||||
|
), |
||||
|
migrations.AlterUniqueTogether( |
||||
|
name='vinculodocadminmateria', |
||||
|
unique_together={('documento', 'materia')}, |
||||
|
), |
||||
|
] |
@ -0,0 +1,74 @@ |
|||||
|
{% extends "crud/detail.html" %} |
||||
|
{% load i18n crispy_forms_tags %} |
||||
|
{% block actions %}{% endblock %} |
||||
|
|
||||
|
{% block detail_content %} |
||||
|
{% if not show_results %} |
||||
|
{% crispy filter.form %} |
||||
|
{% endif %} |
||||
|
{% if show_results %} |
||||
|
{% if numero_res > 0 %} |
||||
|
{% if numero_res == 1 %} |
||||
|
<h3 style="text-align: right;">{% trans 'Pesquisa concluída com sucesso! Foi encontrada 1 matéria.'%}</h3> |
||||
|
{% else %} |
||||
|
<h3 style="text-align: right;">Foram encontradas {{ numero_res }} matérias.</h3> |
||||
|
{% endif %} |
||||
|
<form method="POST" enctype="multipart/form-data"> |
||||
|
{% csrf_token %} |
||||
|
<fieldset> |
||||
|
<div class="row"> |
||||
|
<div class="col-md-4"> |
||||
|
<div class="form-group"> |
||||
|
<label>Data Anexação*</label><input type="text" name="data_anexacao" class="form-control dateinput" required="True"> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-md-4"> |
||||
|
<div class="form-group"> |
||||
|
<label>Data Desanexação</label><input type="text" name="data_desanexacao" class="form-control dateinput"> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</fieldset> |
||||
|
<br /> |
||||
|
<fieldset> |
||||
|
<legend>Matérias para Vincular em Lote</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 object_list %} |
||||
|
<tr> |
||||
|
<td class="p-0"> |
||||
|
<label for="mat_{{materia.id}}" class="d-flex w-100 p-3"> |
||||
|
<input type="checkbox" id="mat_{{materia.id}}" name="materia_id" value="{{materia.id}}" {% if check %} checked {% endif %}/> |
||||
|
{{materia.tipo.sigla}} {{materia.numero}}/{{materia.ano}} - {{materia.tipo.descricao}} |
||||
|
</label> |
||||
|
</td> |
||||
|
</tr> |
||||
|
{% endfor %} |
||||
|
</tbody> |
||||
|
</table> |
||||
|
</fieldset> |
||||
|
<input type="submit" value="Salvar" class="btn btn-primary"S> |
||||
|
</form> |
||||
|
{% else %} |
||||
|
<tr><td><h3 style="text-align: right;">Nenhuma matéria encontrada.</h3></td></tr> |
||||
|
{% endif %} |
||||
|
{% endif %} |
||||
|
{% endblock detail_content %} |
||||
|
|
||||
|
{% 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,38 @@ |
|||||
|
{% extends "crud/form.html" %} |
||||
|
{% load i18n %} |
||||
|
|
||||
|
{% block extra_js %} |
||||
|
<script language="Javascript"> |
||||
|
// document.getElementById("id_observacao").readOnly = true; |
||||
|
|
||||
|
function recuperar_materia() { |
||||
|
var tipo_materia = $("#id_tipo").val() |
||||
|
var numero_materia = $("#id_numero").val() |
||||
|
var ano_materia = $("#id_ano").val() |
||||
|
|
||||
|
if (tipo_materia && numero_materia && ano_materia){ |
||||
|
$.get("/sessao/recuperar-materia", |
||||
|
{ tipo_materia: tipo_materia, numero_materia: numero_materia, ano_materia: ano_materia }, |
||||
|
function(data, status) { |
||||
|
if ($(".ementa-materia").length === 0){ |
||||
|
$("#div_id_tipo").closest('.row').after($('<div class="row"/>').append($('<div class="col-12"/>').append( |
||||
|
$('<div class="alert alert-info ementa-materia"/>').html(data.ementa) |
||||
|
))) |
||||
|
} |
||||
|
else { |
||||
|
$('.ementa-materia').html(data.ementa) |
||||
|
} |
||||
|
}); |
||||
|
} |
||||
|
} |
||||
|
var fields = ["#id_tipo", "#id_numero", "#id_ano"]; |
||||
|
for (i = 0; i < fields.length; i++){ |
||||
|
$(fields[i]).change(function() { |
||||
|
recuperar_materia(); |
||||
|
}); |
||||
|
} |
||||
|
recuperar_materia(); |
||||
|
$(document).ready( function() { |
||||
|
}); |
||||
|
</script> |
||||
|
{% endblock %} |
@ -0,0 +1,14 @@ |
|||||
|
{% extends "crud/list.html" %} |
||||
|
{% load i18n %} |
||||
|
{% load common_tags %} |
||||
|
|
||||
|
|
||||
|
{% block more_buttons %} |
||||
|
|
||||
|
{% if perms|get_add_perm:view %} |
||||
|
<a href="{% url 'sapl.protocoloadm:vinculodocadminmateria_em_lote' root_pk %}" class="btn btn-outline-primary"> |
||||
|
{% trans "Adicionar Vínculos em Lote" %} |
||||
|
</a> |
||||
|
{% endif %} |
||||
|
|
||||
|
{% endblock more_buttons %} |
Loading…
Reference in new issue