|  | @ -1,6 +1,6 @@ | 
			
		
	
		
		
			
				
					|  |  | import sys |  |  |  | 
			
		
	
		
		
			
				
					|  |  | from collections import OrderedDict |  |  | from collections import OrderedDict | 
			
		
	
		
		
			
				
					|  |  | from datetime import datetime, timedelta |  |  | from datetime import datetime, timedelta | 
			
		
	
		
		
			
				
					|  |  |  |  |  | import sys | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  | from braces.views import FormMessagesMixin |  |  | from braces.views import FormMessagesMixin | 
			
		
	
		
		
			
				
					|  |  | from django import forms |  |  | from django import forms | 
			
		
	
	
		
		
			
				
					|  | @ -23,8 +23,7 @@ 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 (AllowedInsertsFragmentForm, |  |  | from sapl.compilacao.forms import (DispositivoDefinidorVigenciaForm, | 
			
				
				
			
		
	
		
		
			
				
					|  |  |                                    DispositivoDefinidorVigenciaForm, |  |  |  | 
			
		
	
		
		
	
		
		
			
				
					|  |  |                                    DispositivoEdicaoAlteracaoForm, |  |  |                                    DispositivoEdicaoAlteracaoForm, | 
			
		
	
		
		
			
				
					|  |  |                                    DispositivoEdicaoBasicaForm, |  |  |                                    DispositivoEdicaoBasicaForm, | 
			
		
	
		
		
			
				
					|  |  |                                    DispositivoEdicaoVigenciaForm, |  |  |                                    DispositivoEdicaoVigenciaForm, | 
			
		
	
	
		
		
			
				
					|  | @ -44,6 +43,7 @@ from sapl.compilacao.utils import (DISPOSITIVO_SELECT_RELATED, | 
			
		
	
		
		
			
				
					|  |  |                                    DISPOSITIVO_SELECT_RELATED_EDIT) |  |  |                                    DISPOSITIVO_SELECT_RELATED_EDIT) | 
			
		
	
		
		
			
				
					|  |  | from sapl.crud.base import Crud, CrudListView, make_pagination |  |  | from sapl.crud.base import Crud, CrudListView, make_pagination | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  | 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') | 
			
		
	
	
		
		
			
				
					|  | @ -1743,7 +1743,9 @@ class ActionDispositivoCreateMixin(ActionsCommonsMixin): | 
			
		
	
		
		
			
				
					|  |  |     def json_add_in(self, context): |  |  |     def json_add_in(self, context): | 
			
		
	
		
		
			
				
					|  |  |         return self.json_add_next(context, local_add='json_add_in') |  |  |         return self.json_add_next(context, local_add='json_add_in') | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |     def json_add_next(self, context, local_add='json_add_next'): |  |  |     def json_add_next( | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					|  |  |  |  |  |             self, | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             context, local_add='json_add_next', create_auto_inserts=True): | 
			
		
	
		
		
			
				
					|  |  |         try: |  |  |         try: | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |             dp_auto_insert = None |  |  |             dp_auto_insert = None | 
			
		
	
	
		
		
			
				
					|  | @ -1837,23 +1839,24 @@ class ActionDispositivoCreateMixin(ActionsCommonsMixin): | 
			
		
	
		
		
			
				
					|  |  |             dp.publicacao = pub_last |  |  |             dp.publicacao = pub_last | 
			
		
	
		
		
			
				
					|  |  |             dp.save() |  |  |             dp.save() | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |             tipos_dp_auto_insert = tipo.filhos_permitidos.filter( |  |  |  | 
			
		
	
		
		
			
				
					|  |  |                 filho_de_insercao_automatica=True, |  |  |  | 
			
		
	
		
		
			
				
					|  |  |                 perfil_id=context['perfil_pk']) |  |  |  | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  |  | 
			
		
	
		
		
			
				
					|  |  |             count_auto_insert = 0 |  |  |             count_auto_insert = 0 | 
			
		
	
		
		
			
				
					
					|  |  |             for tipoauto in tipos_dp_auto_insert: |  |  |             if create_auto_inserts: | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |                 qtdp = tipoauto.quantidade_permitida |  |  |                 tipos_dp_auto_insert = tipo.filhos_permitidos.filter( | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |                 if qtdp >= 0: |  |  |                     filho_de_insercao_automatica=True, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |                     qtdp -= Dispositivo.objects.filter( |  |  |                     perfil_id=context['perfil_pk']) | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |                         ta_id=dp.ta_id, |  |  | 
 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |                         dispositivo_pai_id=dp.id, |  |  |                 for tipoauto in tipos_dp_auto_insert: | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |                         tipo_dispositivo_id=tipoauto.filho_permitido.pk |  |  |                     qtdp = tipoauto.quantidade_permitida | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |                     ).count() |  |  |                     if qtdp >= 0: | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |                     if qtdp > 0: |  |  |                         qtdp -= Dispositivo.objects.filter( | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					|  |  |  |  |  |                             ta_id=dp.ta_id, | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                             dispositivo_pai_id=dp.id, | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                             tipo_dispositivo_id=tipoauto.filho_permitido.pk | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                         ).count() | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                         if qtdp > 0: | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                             count_auto_insert += 1 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     else: | 
			
		
	
		
		
			
				
					|  |  |                         count_auto_insert += 1 |  |  |                         count_auto_insert += 1 | 
			
		
	
		
		
			
				
					|  |  |                 else: |  |  |  | 
			
		
	
		
		
			
				
					|  |  |                     count_auto_insert += 1 |  |  |  | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |             # Inserção automática |  |  |             # Inserção automática | 
			
		
	
		
		
			
				
					|  |  |             if count_auto_insert: |  |  |             if count_auto_insert: | 
			
		
	
	
		
		
			
				
					|  | @ -2006,6 +2009,7 @@ class ActionDispositivoCreateMixin(ActionsCommonsMixin): | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |         except Exception as e: |  |  |         except Exception as e: | 
			
		
	
		
		
			
				
					|  |  |             print(e) |  |  |             print(e) | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             return {} | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  | class ActionsEditMixin(ActionDragAndMoveDispositivoAlteradoMixin, |  |  | class ActionsEditMixin(ActionDragAndMoveDispositivoAlteradoMixin, | 
			
		
	
	
		
		
			
				
					|  | @ -2022,6 +2026,9 @@ class ActionsEditMixin(ActionDragAndMoveDispositivoAlteradoMixin, | 
			
		
	
		
		
			
				
					|  |  |         if 'variacao' in self.request.GET: |  |  |         if 'variacao' in self.request.GET: | 
			
		
	
		
		
			
				
					|  |  |             context['variacao'] = self.request.GET['variacao'] |  |  |             context['variacao'] = self.request.GET['variacao'] | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |         if 'pk_bloco' in self.request.GET: | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             context['pk_bloco'] = self.request.GET['pk_bloco'] | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |         if 'perfil_estrutural' in self.request.session: |  |  |         if 'perfil_estrutural' in self.request.session: | 
			
		
	
		
		
			
				
					|  |  |             context['perfil_pk'] = self.request.session['perfil_estrutural'] |  |  |             context['perfil_pk'] = self.request.session['perfil_estrutural'] | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  | @ -2069,13 +2076,42 @@ class ActionsEditMixin(ActionDragAndMoveDispositivoAlteradoMixin, | 
			
		
	
		
		
			
				
					|  |  |                 return perfis[0].pk |  |  |                 return perfis[0].pk | 
			
		
	
		
		
			
				
					|  |  |         return None |  |  |         return None | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |     def registra_inclusao(self, bloco_alteracao, dispositivo_base_inclusao): |  |  |     def json_add_next_registra_inclusao( | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |         data = {} |  |  |             self, context, local_add='json_add_next'): | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |         data.update({'pk': bloco_alteracao.pk, |  |  | 
 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |                      'pai': [bloco_alteracao.pk, ]}) |  |  |         data = self.json_add_next(context, | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					|  |  |  |  |  |                                   local_add=local_add, | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                                   create_auto_inserts=True) | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |         if data: | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             bloco_alteracao = Dispositivo.objects.get(pk=context['pk_bloco']) | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             ndp = Dispositivo.objects.get(pk=data['pk']) | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             ndp.dispositivo_atualizador = bloco_alteracao | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             ndp.ta_publicado = bloco_alteracao.ta | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             ndp.publicacao = bloco_alteracao.publicacao | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             ndp.dispositivo_vigencia = bloco_alteracao.dispositivo_vigencia | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             if ndp.dispositivo_vigencia: | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 ndp.inicio_eficacia = ndp.dispositivo_vigencia.inicio_eficacia | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 ndp.inicio_vigencia = ndp.dispositivo_vigencia.inicio_vigencia | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             else: | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 ndp.inicio_eficacia = bloco_alteracao.inicio_eficacia | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 ndp.inicio_vigencia = bloco_alteracao.inicio_vigencia | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             ndp.save() | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             bloco_alteracao.ordenar_bloco_alteracao() | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             data.update({'pk': ndp.pk, | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                          'pai': [bloco_alteracao.pk, ]}) | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |         return data |  |  |         return data | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |     def json_add_in_registra_inclusao(self, context): | 
			
		
	
		
		
			
				
					|  |  |  |  |  |         return self.json_add_next_registra_inclusao( | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             context, local_add='json_add_in') | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |     def registra_revogacao(self, bloco_alteracao, dispositivo_a_revogar): |  |  |     def registra_revogacao(self, bloco_alteracao, dispositivo_a_revogar): | 
			
		
	
		
		
			
				
					|  |  |         return self.registra_alteracao( |  |  |         return self.registra_alteracao( | 
			
		
	
		
		
			
				
					|  |  |             bloco_alteracao, |  |  |             bloco_alteracao, | 
			
		
	
	
		
		
			
				
					|  | @ -2261,14 +2297,13 @@ class DispositivoDinamicEditView( | 
			
		
	
		
		
			
				
					|  |  |                 self.form_class = DispositivoRegistroRevogacaoForm |  |  |                 self.form_class = DispositivoRegistroRevogacaoForm | 
			
		
	
		
		
			
				
					|  |  |             elif self.action.endswith('_inclusao'): |  |  |             elif self.action.endswith('_inclusao'): | 
			
		
	
		
		
			
				
					|  |  |                 self.form_class = DispositivoRegistroInclusaoForm |  |  |                 self.form_class = DispositivoRegistroInclusaoForm | 
			
		
	
		
		
			
				
					
					|  |  |             elif self.action.endswith('_radio_allowed_inserts'): |  |  | 
 | 
			
				
				
			
		
	
		
		
			
				
					|  |  |                 self.form_class = AllowedInsertsFragmentForm |  |  |  | 
			
		
	
		
		
	
		
		
			
				
					|  |  |             context = self.get_context_data() |  |  |             context = self.get_context_data() | 
			
		
	
		
		
			
				
					|  |  |             return self.render_to_response(context) |  |  |             return self.render_to_response(context) | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |         elif self.action.startswith('get_actions'): |  |  |         elif self.action.startswith('get_actions'): | 
			
		
	
		
		
			
				
					|  |  |             self.form_class = None |  |  |             self.form_class = None | 
			
		
	
		
		
			
				
					
					|  |  |             self.template_name = 'compilacao/ajax_actions_dinamic_edit.html' |  |  | 
 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					|  |  |             self.object = Dispositivo.objects.get( |  |  |             self.object = Dispositivo.objects.get( | 
			
		
	
		
		
			
				
					|  |  |                 pk=self.kwargs['dispositivo_id']) |  |  |                 pk=self.kwargs['dispositivo_id']) | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  | @ -2277,17 +2312,26 @@ class DispositivoDinamicEditView( | 
			
		
	
		
		
			
				
					|  |  |             context = {} |  |  |             context = {} | 
			
		
	
		
		
			
				
					|  |  |             context['object'] = self.object |  |  |             context['object'] = self.object | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |             if ta_id == str(self.object.ta_id): |  |  |             if self.action.endswith('_allowed_inserts_registro_inclusao'): | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					|  |  |  |  |  |                 self.template_name = ('compilacao/' | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                                       'ajax_actions_registro_inclusao.html') | 
			
		
	
		
		
			
				
					|  |  |                 context['allowed_inserts'] = self.allowed_inserts() |  |  |                 context['allowed_inserts'] = self.allowed_inserts() | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |                 if 'perfil_pk' in request.GET: |  |  |             else: | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |                     self.set_perfil_in_session( |  |  |                 self.template_name = ('compilacao/' | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |                         request, request.GET['perfil_pk']) |  |  |                                       'ajax_actions_dinamic_edit.html') | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |                 elif 'perfil_estrutural' not in request.session: |  |  | 
 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |                     self.set_perfil_in_session(request=request) |  |  |                 if ta_id == str(self.object.ta_id): | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					|  |  |  |  |  |                     context['allowed_inserts'] = self.allowed_inserts() | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     if 'perfil_pk' in request.GET: | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                         self.set_perfil_in_session( | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                             request, request.GET['perfil_pk']) | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     elif 'perfil_estrutural' not in request.session: | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                         self.set_perfil_in_session(request=request) | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |                 context['perfil_estrutural_list' |  |  |                     context['perfil_estrutural_list' | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |                         ] = PerfilEstruturalTextoArticulado.objects.all() |  |  |                             ] = PerfilEstruturalTextoArticulado.objects.all() | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |             return self.render_to_response(context) |  |  |             return self.render_to_response(context) | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  | @ -2310,7 +2354,7 @@ class DispositivoDinamicEditView( | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |             data = self.registra_alteracao(d, dispositivo_a_alterar) |  |  |             data = self.registra_alteracao(d, dispositivo_a_alterar) | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |         if formtype == 'get_form_revogacao': |  |  |         elif formtype == 'get_form_revogacao': | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |             dispositivo_a_revogar = Dispositivo.objects.get( |  |  |             dispositivo_a_revogar = Dispositivo.objects.get( | 
			
		
	
		
		
			
				
					|  |  |                 pk=request.POST['dispositivo_revogado']) |  |  |                 pk=request.POST['dispositivo_revogado']) | 
			
		
	
	
		
		
			
				
					|  | 
 |