Browse Source

impl analise de pais e filhos rel nos perfis herdados

pull/1715/head
LeandroRoberto 7 years ago
parent
commit
4ab3ad2da5
  1. 11
      sapl/compilacao/models.py
  2. 83
      sapl/compilacao/views.py
  3. 0
      scripts/hooks/pre-commit

11
sapl/compilacao/models.py

@ -1,5 +1,4 @@
import reversion
from django.contrib import messages from django.contrib import messages
from django.contrib.contenttypes.fields import GenericForeignKey from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
@ -13,6 +12,8 @@ from django.utils import timezone
from django.utils.decorators import classonlymethod from django.utils.decorators import classonlymethod
from django.utils.encoding import force_text from django.utils.encoding import force_text
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
import reversion
from sapl.compilacao.utils import (get_integrations_view_names, int_to_letter, from sapl.compilacao.utils import (get_integrations_view_names, int_to_letter,
int_to_roman) int_to_roman)
from sapl.utils import YES_NO_CHOICES, get_settings_auth_user_model from sapl.utils import YES_NO_CHOICES, get_settings_auth_user_model
@ -103,6 +104,14 @@ class PerfilEstruturalTextoArticulado(BaseModel):
def __str__(self): def __str__(self):
return self.nome return self.nome
@property
def parents(self):
if not self.parent:
return []
parents = self.parent.parents + [self.parent, ]
return parents
@reversion.register() @reversion.register()
class TipoTextoArticulado(models.Model): class TipoTextoArticulado(models.Model):

83
sapl/compilacao/views.py

@ -1,7 +1,7 @@
import logging
import sys
from collections import OrderedDict from collections import OrderedDict
from datetime import timedelta from datetime import timedelta
import logging
import sys
from braces.views import FormMessagesMixin from braces.views import FormMessagesMixin
from django import forms from django import forms
@ -19,13 +19,14 @@ from django.http.response import (HttpResponse, HttpResponseRedirect,
from django.shortcuts import get_object_or_404, redirect from django.shortcuts import get_object_or_404, redirect
from django.utils.dateparse import parse_date from django.utils.dateparse import parse_date
from django.utils.encoding import force_text from django.utils.encoding import force_text
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import string_concat from django.utils.translation import string_concat
from django.utils.translation import ugettext_lazy as _
from django.views.generic.base import TemplateView from django.views.generic.base import TemplateView
from django.views.generic.detail import DetailView from django.views.generic.detail import DetailView
from django.views.generic.edit import (CreateView, DeleteView, FormView, from django.views.generic.edit import (CreateView, DeleteView, FormView,
UpdateView) UpdateView)
from django.views.generic.list import ListView from django.views.generic.list import ListView
from sapl.compilacao.forms import (DispositivoDefinidorVigenciaForm, from sapl.compilacao.forms import (DispositivoDefinidorVigenciaForm,
DispositivoEdicaoAlteracaoForm, DispositivoEdicaoAlteracaoForm,
DispositivoEdicaoBasicaForm, DispositivoEdicaoBasicaForm,
@ -49,6 +50,7 @@ from sapl.compilacao.utils import (DISPOSITIVO_SELECT_RELATED,
from sapl.crud.base import Crud, CrudListView, make_pagination from sapl.crud.base import Crud, CrudListView, make_pagination
from sapl.settings import BASE_DIR from sapl.settings import BASE_DIR
TipoNotaCrud = Crud.build(TipoNota, 'tipo_nota') TipoNotaCrud = Crud.build(TipoNota, 'tipo_nota')
TipoVideCrud = Crud.build(TipoVide, 'tipo_vide') TipoVideCrud = Crud.build(TipoVide, 'tipo_vide')
TipoPublicacaoCrud = Crud.build(TipoPublicacao, 'tipo_publicacao') TipoPublicacaoCrud = Crud.build(TipoPublicacao, 'tipo_publicacao')
@ -2187,12 +2189,18 @@ class ActionDispositivoCreateMixin(ActionsCommonsMixin):
else: else:
raise Exception('Não existe perfil padrão!') raise Exception('Não existe perfil padrão!')
perfil_parents = PerfilEstruturalTextoArticulado.objects.get(
pk=context['perfil_pk'])
perfil_parents = perfil_parents.parents + [perfil_parents, ]
perfil_parents.reverse()
dp_irmao = None dp_irmao = None
dp_pai = None dp_pai = None
for dp in parents: for dp in parents:
if dp.tipo_dispositivo == tipo: if dp.tipo_dispositivo == tipo:
dp_irmao = dp dp_irmao = dp
break break
if tipo.permitido_inserir_in( if tipo.permitido_inserir_in(
dp.tipo_dispositivo, dp.tipo_dispositivo,
perfil_pk=context['perfil_pk']): perfil_pk=context['perfil_pk']):
@ -2230,24 +2238,25 @@ class ActionDispositivoCreateMixin(ActionsCommonsMixin):
# verificar se existe restrição de quantidade de itens # verificar se existe restrição de quantidade de itens
if dp.dispositivo_pai: if dp.dispositivo_pai:
pp = dp.tipo_dispositivo.possiveis_pais.filter( for perfil in perfil_parents:
pai_id=dp.dispositivo_pai.tipo_dispositivo_id, pp = dp.tipo_dispositivo.possiveis_pais.filter(
perfil_id=context['perfil_pk']) pai_id=dp.dispositivo_pai.tipo_dispositivo_id,
perfil=perfil)
if pp.exists() and pp[0].quantidade_permitida >= 0: if pp.exists() and pp[0].quantidade_permitida >= 0:
qtd_existente = Dispositivo.objects.filter( qtd_existente = Dispositivo.objects.filter(
ta_id=dp.ta_id, ta_id=dp.ta_id,
tipo_dispositivo_id=dp.tipo_dispositivo_id, tipo_dispositivo_id=dp.tipo_dispositivo_id,
dispositivo_pai=dp.dispositivo_pai).count() dispositivo_pai=dp.dispositivo_pai).count()
if qtd_existente >= pp[0].quantidade_permitida: if qtd_existente >= pp[0].quantidade_permitida:
data = {'pk': base.pk, data = {'pk': base.pk,
'pai': [base.dispositivo_pai.pk, ]} 'pai': [base.dispositivo_pai.pk, ]}
self.set_message(data, 'warning', self.set_message(data, 'warning',
_('Limite de inserções de ' _('Limite de inserções de '
'dispositivos deste tipo ' 'dispositivos deste tipo '
'foi excedido.'), time=6000) 'foi excedido.'), time=6000)
return data return data
ordem = base.criar_espaco( ordem = base.criar_espaco(
espaco_a_criar=1, local=local_add) espaco_a_criar=1, local=local_add)
@ -2261,22 +2270,26 @@ class ActionDispositivoCreateMixin(ActionsCommonsMixin):
count_auto_insert = 0 count_auto_insert = 0
if create_auto_inserts: if create_auto_inserts:
tipos_dp_auto_insert = tipo.filhos_permitidos.filter( for perfil in perfil_parents:
filho_de_insercao_automatica=True, tipos_dp_auto_insert = tipo.filhos_permitidos.filter(
perfil_id=context['perfil_pk']) filho_de_insercao_automatica=True,
perfil=perfil)
for tipoauto in tipos_dp_auto_insert:
qtdp = tipoauto.quantidade_permitida for tipoauto in tipos_dp_auto_insert:
if qtdp >= 0: qtdp = tipoauto.quantidade_permitida
qtdp -= Dispositivo.objects.filter( if qtdp >= 0:
ta_id=dp.ta_id, qtdp -= Dispositivo.objects.filter(
dispositivo_pai_id=dp.id, ta_id=dp.ta_id,
tipo_dispositivo_id=tipoauto.filho_permitido.pk dispositivo_pai_id=dp.id,
).count() tipo_dispositivo_id=tipoauto.filho_permitido.pk
if qtdp > 0: ).count()
if qtdp > 0:
count_auto_insert += 1
else:
count_auto_insert += 1 count_auto_insert += 1
else:
count_auto_insert += 1 if count_auto_insert:
break
# Inserção automática # Inserção automática
if count_auto_insert: if count_auto_insert:

0
scripts/hooks/pre-commit

Loading…
Cancel
Save