Browse Source

implementa herança em perfis de Textos Articulados

pull/797/head
LeandroRoberto 8 years ago
parent
commit
3506b8ac97
  1. 9
      sapl/compilacao/compilacao_data_tables.sql
  2. 21
      sapl/compilacao/migrations/0070_perfilestruturaltextoarticulado_parent.py
  3. 38
      sapl/compilacao/models.py
  4. 4
      sapl/materia/forms.py
  5. 21
      sapl/materia/migrations/0070_auto_20161111_1301.py
  6. 2
      sapl/materia/models.py
  7. 2
      sapl/templates/materia/layouts.yaml

9
sapl/compilacao/compilacao_data_tables.sql

@ -1,6 +1,7 @@
INSERT INTO compilacao_perfilestruturaltextoarticulado (id, sigla, nome, padrao) VALUES (2, 'LC95-v', 'Lei Complementar 95 com Variação', false);
INSERT INTO compilacao_perfilestruturaltextoarticulado (id, sigla, nome, padrao) VALUES (1, 'LC95', 'Lei Complementar 95', true); INSERT INTO compilacao_perfilestruturaltextoarticulado (id, sigla, nome, padrao) VALUES (1, 'LC95', 'Lei Complementar 95', true);
SELECT pg_catalog.setval('compilacao_perfilestruturaltextoarticulado_id_seq', 2, true); INSERT INTO compilacao_perfilestruturaltextoarticulado (id, sigla, nome, padrao) VALUES (2, 'LC95-v', 'Lei Complementar 95 com Variação', false);
INSERT INTO compilacao_perfilestruturaltextoarticulado (id, sigla, nome, padrao) VALUES (3, 'PLOL', 'Projeto de Lei Ordinária do Legislativo', false);
SELECT pg_catalog.setval('compilacao_perfilestruturaltextoarticulado_id_seq', 3, true);
INSERT INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5, rotulo_separador_variacao01, rotulo_separador_variacao12, rotulo_separador_variacao23, rotulo_separador_variacao34, rotulo_separador_variacao45, dispositivo_de_articulacao, dispositivo_de_alteracao) VALUES (1, 'Articulação', 'articulacao', '', '', 0, '', '', '', '', '', '', true, 'N', 'N', 'N', 'N', 'N', 'N', '-', '-', '-', '-', '-', true, false); INSERT INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5, rotulo_separador_variacao01, rotulo_separador_variacao12, rotulo_separador_variacao23, rotulo_separador_variacao34, rotulo_separador_variacao45, dispositivo_de_articulacao, dispositivo_de_alteracao) VALUES (1, 'Articulação', 'articulacao', '', '', 0, '', '', '', '', '', '', true, 'N', 'N', 'N', 'N', 'N', 'N', '-', '-', '-', '-', '-', true, false);
INSERT INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5, rotulo_separador_variacao01, rotulo_separador_variacao12, rotulo_separador_variacao23, rotulo_separador_variacao34, rotulo_separador_variacao45, dispositivo_de_articulacao, dispositivo_de_alteracao) VALUES (2, 'Ementa', 'ementa', '', '', 0, '', '', '', '', '', '', false, 'N', '1', '1', '1', '1', '1', '-', '-', '-', '-', '-', false, false); INSERT INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5, rotulo_separador_variacao01, rotulo_separador_variacao12, rotulo_separador_variacao23, rotulo_separador_variacao34, rotulo_separador_variacao45, dispositivo_de_articulacao, dispositivo_de_alteracao) VALUES (2, 'Ementa', 'ementa', '', '', 0, '', '', '', '', '', '', false, 'N', '1', '1', '1', '1', '1', '-', '-', '-', '-', '-', false, false);
@ -24,7 +25,9 @@ INSERT INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html
INSERT INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5, rotulo_separador_variacao01, rotulo_separador_variacao12, rotulo_separador_variacao23, rotulo_separador_variacao34, rotulo_separador_variacao45, dispositivo_de_articulacao, dispositivo_de_alteracao) VALUES (123, 'Alinea', 'alinea', '', '', 0, ')', ' – ', '', '', '', '', false, 'a', '1', '1', '1', '1', '1', '-', '-', '-', '-', '-', false, false); INSERT INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5, rotulo_separador_variacao01, rotulo_separador_variacao12, rotulo_separador_variacao23, rotulo_separador_variacao34, rotulo_separador_variacao45, dispositivo_de_articulacao, dispositivo_de_alteracao) VALUES (123, 'Alinea', 'alinea', '', '', 0, ')', ' – ', '', '', '', '', false, 'a', '1', '1', '1', '1', '1', '-', '-', '-', '-', '-', false, false);
INSERT INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5, rotulo_separador_variacao01, rotulo_separador_variacao12, rotulo_separador_variacao23, rotulo_separador_variacao34, rotulo_separador_variacao45, dispositivo_de_articulacao, dispositivo_de_alteracao) VALUES (124, 'Item', 'item', '', '', 0, '', ' – ', '', '', '', '', false, '1', '1', '1', '1', '1', '1', '.', '.', '.', '.', '.', false, false); INSERT INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5, rotulo_separador_variacao01, rotulo_separador_variacao12, rotulo_separador_variacao23, rotulo_separador_variacao34, rotulo_separador_variacao45, dispositivo_de_articulacao, dispositivo_de_alteracao) VALUES (124, 'Item', 'item', '', '', 0, '', ' – ', '', '', '', '', false, '1', '1', '1', '1', '1', '1', '.', '.', '.', '.', '.', false, false);
INSERT INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5, rotulo_separador_variacao01, rotulo_separador_variacao12, rotulo_separador_variacao23, rotulo_separador_variacao34, rotulo_separador_variacao45, dispositivo_de_articulacao, dispositivo_de_alteracao) VALUES (125, 'Texto Não Estruturado', 'texto_n_estruturado', '', '', 0, '', '', '', '', '', '', true, 'N', 'N', 'N', 'N', 'N', 'N', '-', '-', '-', '-', '-', false, false); INSERT INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5, rotulo_separador_variacao01, rotulo_separador_variacao12, rotulo_separador_variacao23, rotulo_separador_variacao34, rotulo_separador_variacao45, dispositivo_de_articulacao, dispositivo_de_alteracao) VALUES (125, 'Texto Não Estruturado', 'texto_n_estruturado', '', '', 0, '', '', '', '', '', '', true, 'N', 'N', 'N', 'N', 'N', 'N', '-', '-', '-', '-', '-', false, false);
SELECT pg_catalog.setval('compilacao_tipodispositivo_id_seq', 125, true);
INSERT INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5, rotulo_separador_variacao01, rotulo_separador_variacao12, rotulo_separador_variacao23, rotulo_separador_variacao34, rotulo_separador_variacao45, dispositivo_de_articulacao, dispositivo_de_alteracao) VALUES (126, 'Justificativa', 'titulo', '', '', 0, '', '', '', '', '', '', true, 'N', 'N', 'N', 'N', 'N', 'N', '-', '-', '-', '-', '-', false, false);
SELECT pg_catalog.setval('compilacao_tipodispositivo_id_seq', 126, true);
delete from compilacao_tipodispositivorelationship; delete from compilacao_tipodispositivorelationship;

21
sapl/compilacao/migrations/0070_perfilestruturaltextoarticulado_parent.py

@ -0,0 +1,21 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-11-11 13:01
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('compilacao', '0069_auto_20161107_1932'),
]
operations = [
migrations.AddField(
model_name='perfilestruturaltextoarticulado',
name='parent',
field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='perfil_parent_set', to='compilacao.PerfilEstruturalTextoArticulado', verbose_name='Perfil Herdado'),
),
]

38
sapl/compilacao/models.py

@ -6,6 +6,7 @@ from django.contrib.contenttypes.models import ContentType
from django.db import models from django.db import models
from django.db.models import F, Q from django.db.models import F, Q
from django.db.models.aggregates import Max from django.db.models.aggregates import Max
from django.db.models.deletion import PROTECT
from django.http.response import Http404 from django.http.response import Http404
from django.template import defaultfilters from django.template import defaultfilters
from django.utils.decorators import classonlymethod from django.utils.decorators import classonlymethod
@ -657,39 +658,49 @@ class TipoDispositivo(BaseModel):
def permitido_inserir_in( def permitido_inserir_in(
self, pai_relativo, include_relative_autos=True, perfil_pk=None): self, pai_relativo, include_relative_autos=True, perfil_pk=None):
perfil = PerfilEstruturalTextoArticulado.objects.all()
if not perfil_pk: if not perfil_pk:
perfis = PerfilEstruturalTextoArticulado.objects.filter( perfil = perfil.filter(padrao=True)
padrao=True)[:1]
else:
perfil = perfil.filter(pk=perfil_pk)
if not perfis.exists(): if not perfil.exists():
return False return False
perfil_pk = perfis[0].pk perfil = perfil[0]
pp = self.possiveis_pais.filter(pai=pai_relativo, perfil_id=perfil_pk) while perfil:
pp = self.possiveis_pais.filter(pai=pai_relativo, perfil=perfil)
if pp.exists(): if pp.exists():
if not include_relative_autos: if not include_relative_autos:
if pp[0].filho_de_insercao_automatica: if pp[0].filho_de_insercao_automatica:
return False return False
return True return True
perfil = perfil.parent
return False return False
def permitido_variacao( def permitido_variacao(
self, base, perfil_pk=None): self, base, perfil_pk=None):
perfil = PerfilEstruturalTextoArticulado.objects.all()
if not perfil_pk: if not perfil_pk:
perfis = PerfilEstruturalTextoArticulado.objects.filter( perfil = perfil.filter(padrao=True)
padrao=True)[:1]
if not perfis.exists(): else:
perfil = perfil.filter(pk=perfil_pk)
if not perfil.exists():
return False return False
perfil_pk = perfis[0].pk perfil = perfil[0]
pp = self.possiveis_pais.filter(pai=base, perfil_id=perfil_pk) while perfil:
pp = self.possiveis_pais.filter(pai=base, perfil=perfil)
if pp.exists(): if pp.exists():
if pp[0].permitir_variacao: if pp[0].permitir_variacao:
return True return True
perfil = perfil.parent
return False return False
@ -701,6 +712,13 @@ class PerfilEstruturalTextoArticulado(BaseModel):
default=False, default=False,
choices=YES_NO_CHOICES, verbose_name=_('Padrão')) choices=YES_NO_CHOICES, verbose_name=_('Padrão'))
parent = models.ForeignKey(
'self',
blank=True, null=True, default=None,
related_name='perfil_parent_set',
on_delete=PROTECT,
verbose_name=_('Perfil Herdado'))
class Meta: class Meta:
verbose_name = _('Perfil Estrutural de Texto Articulado') verbose_name = _('Perfil Estrutural de Texto Articulado')
verbose_name_plural = _('Perfis Estruturais de Textos Articulados') verbose_name_plural = _('Perfis Estruturais de Textos Articulados')

4
sapl/materia/forms.py

@ -834,7 +834,7 @@ class ProposicaoForm(forms.ModelForm):
label=_('Tipo do Texto da Proposição'), label=_('Tipo do Texto da Proposição'),
required=False, required=False,
choices=TIPO_TEXTO_CHOICE, choices=TIPO_TEXTO_CHOICE,
widget=widgets.CheckboxSelectMultiple()) widget=widgets.RadioSelect())
materia_de_vinculo = forms.ModelChoiceField( materia_de_vinculo = forms.ModelChoiceField(
queryset=MateriaLegislativa.objects.all(), queryset=MateriaLegislativa.objects.all(),
@ -885,7 +885,7 @@ class ProposicaoForm(forms.ModelForm):
if self.texto_articulado_proposicao: if self.texto_articulado_proposicao:
fields.append( fields.append(
to_column((InlineCheckboxes('tipo_texto'), 5)),) to_column((InlineRadios('tipo_texto'), 5)),)
fields.append(to_column(( fields.append(to_column((
'texto_original', 7 if self.texto_articulado_proposicao else 12))) 'texto_original', 7 if self.texto_articulado_proposicao else 12)))

21
sapl/materia/migrations/0070_auto_20161111_1301.py

@ -0,0 +1,21 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-11-11 13:01
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('materia', '0069_tipoproposicao_perfis'),
]
operations = [
migrations.AlterField(
model_name='tipoproposicao',
name='perfis',
field=models.ManyToManyField(blank=True, help_text='\n Mesmo que em Configurações da Aplicação nas\n Tabelas Auxiliares esteja definido que Proposições possam\n utilizar Textos Articulados, ao gerar uma proposição,\n a solução de Textos Articulados será disponibilizada se\n o Tipo escolhido para a Proposição estiver associado a ao\n menos um Perfil Estrutural de Texto Articulado.\n ',
to='compilacao.PerfilEstruturalTextoArticulado', verbose_name='Perfis Estruturais de Textos Articulados'),
),
]

2
sapl/materia/models.py

@ -47,7 +47,7 @@ class TipoProposicao(models.Model):
Tabelas Auxiliares esteja definido que Proposições possam Tabelas Auxiliares esteja definido que Proposições possam
utilizar Textos Articulados, ao gerar uma proposição, utilizar Textos Articulados, ao gerar uma proposição,
a solução de Textos Articulados será disponibilizada se a solução de Textos Articulados será disponibilizada se
o Tipo escolhido para a Proposição estiver associada a ao o Tipo escolhido para a Proposição estiver associado a ao
menos um Perfil Estrutural de Texto Articulado. menos um Perfil Estrutural de Texto Articulado.
""")) """))

2
sapl/templates/materia/layouts.yaml

@ -75,7 +75,7 @@ Relatoria:
TipoProposicao: TipoProposicao:
{% trans 'Tipo Proposição' %}: {% trans 'Tipo Proposição' %}:
- descricao content_type - descricao content_type
- tipo_conteudo_related - tipo_conteudo_related perfis
Proposicao: Proposicao:
{% trans 'Proposição' %}: {% trans 'Proposição' %}:

Loading…
Cancel
Save