Commit 35e058d7851900b16284ab8c4c40767edb84daee

Authored by erick.sato
2 parents 0a10df0f 27710a6f
Exists in master

Merge branch 'tarefa-4455' of http://ferramentasgo.centralit.com.br:8080/scm/git…

…/cit-grp-contratos into tarefa-4455
cit-contratos-api/src/main/java/br/com/centralit/api/model/Contrato.java
... ... @@ -367,6 +367,10 @@ public class Contrato extends PersistentObjectAuditOrganizacao {
367 367 @JsonView({ ViewsContrato.ContratoEditView.class, ViewsContrato.ContratoAutoCompleteView.class })
368 368 private TermoReferencia termoReferencia;
369 369  
  370 + @Transient
  371 + @JsonView({ ViewsContrato.ContratoEditView.class })
  372 + private Long rascunho;
  373 +
370 374 /**
371 375 * Retorna o valor do atributo <code>id</code>
372 376 *
... ... @@ -1143,4 +1147,11 @@ public class Contrato extends PersistentObjectAuditOrganizacao {
1143 1147 this.termoReferencia = termoReferencia;
1144 1148 }
1145 1149  
  1150 + public Long getRascunho() {
  1151 + return rascunho;
  1152 + }
  1153 +
  1154 + public void setRascunho(Long rascunho) {
  1155 + this.rascunho = rascunho;
  1156 + }
1146 1157 }
... ...
cit-contratos-api/src/main/java/br/com/centralit/api/model/EstudoTecnico.java
... ... @@ -16,6 +16,7 @@ import javax.persistence.OneToMany;
16 16 import javax.persistence.Table;
17 17 import javax.persistence.Temporal;
18 18 import javax.persistence.TemporalType;
  19 +import javax.persistence.Transient;
19 20  
20 21 import br.com.centralit.api.viewHelper.ViewsContrato;
21 22 import br.com.centralit.framework.json.JsonCalendarSimpleDateDeserializer;
... ... @@ -167,6 +168,10 @@ public class EstudoTecnico extends PersistentObjectAuditOrganizacao {
167 168 @JsonView({ ViewsContrato.EstudoTecnicoEditView.class })
168 169 private Collection<EstudoTecnicoDocumento> documentos;
169 170  
  171 + @Transient
  172 + @JsonView({ ViewsContrato.EstudoTecnicoEditView.class })
  173 + private Long rascunho;
  174 +
170 175 public RegistroSequencial getRegistroSequencial() {
171 176  
172 177 return registroSequencial;
... ... @@ -623,4 +628,11 @@ public class EstudoTecnico extends PersistentObjectAuditOrganizacao {
623 628 this.documentos = documentos;
624 629 }
625 630  
  631 + public Long getRascunho() {
  632 + return rascunho;
  633 + }
  634 +
  635 + public void setRascunho(Long rascunho) {
  636 + this.rascunho = rascunho;
  637 + }
626 638 }
... ...
cit-contratos-api/src/main/java/br/com/centralit/api/model/TermoReferencia.java
... ... @@ -16,6 +16,7 @@ import javax.persistence.OneToMany;
16 16 import javax.persistence.Table;
17 17 import javax.persistence.Temporal;
18 18 import javax.persistence.TemporalType;
  19 +import javax.persistence.Transient;
19 20  
20 21 import org.hibernate.annotations.Type;
21 22  
... ... @@ -151,6 +152,10 @@ public class TermoReferencia extends PersistentObjectAuditOrganizacao {
151 152 @JsonView({ ViewsContrato.TermoReferenciaEditView.class })
152 153 private Collection<TermoReferenciaDocumento> documentos;
153 154  
  155 + @Transient
  156 + @JsonView({ ViewsContrato.TermoReferenciaEditView.class })
  157 + private Long rascunho;
  158 +
154 159 /**
155 160 * Retorna o valor do atributo <code>id</code>
156 161 *
... ... @@ -663,4 +668,11 @@ public class TermoReferencia extends PersistentObjectAuditOrganizacao {
663 668 this.dataTermoGerado = dataTermoGerado;
664 669 }
665 670  
  671 + public Long getRascunho() {
  672 + return rascunho;
  673 + }
  674 +
  675 + public void setRascunho(Long rascunho) {
  676 + this.rascunho = rascunho;
  677 + }
666 678 }
... ...
cit-contratos-api/src/main/java/br/com/centralit/api/service/impl/ContratoServiceImpl.java
... ... @@ -40,6 +40,7 @@ import br.com.centralit.api.service.EventoAditivoService;
40 40 import br.com.centralit.api.service.FornecedorService;
41 41 import br.com.centralit.api.service.InternacionalizacaoService;
42 42 import br.com.centralit.api.service.ParceiroService;
  43 +import br.com.centralit.api.service.RascunhoService;
43 44 import br.com.centralit.api.service.UsuarioService;
44 45 import br.com.centralit.framework.exception.CodigoErro;
45 46 import br.com.centralit.framework.model.Dominio;
... ... @@ -102,7 +103,7 @@ public class ContratoServiceImpl extends GenericServiceImpl&lt;Contrato, Long&gt; impl
102 103  
103 104 @Autowired
104 105 private ConfiguracaoParametroSistemaService configuracaoParametroSistemaService;
105   - /** Atributo colaboradorService. */
  106 +
106 107 @Autowired
107 108 private EstudoTecnicoService estudoTecnicoService;
108 109  
... ... @@ -115,6 +116,9 @@ public class ContratoServiceImpl extends GenericServiceImpl&lt;Contrato, Long&gt; impl
115 116 @Autowired
116 117 private EventoAditivoService aditivoService;
117 118  
  119 + @Autowired
  120 + private RascunhoService rascunhoService;
  121 +
118 122 /**
119 123 * Responsável pela criação de novas instâncias desta classe.
120 124 * @param contratoDao
... ... @@ -156,6 +160,8 @@ public class ContratoServiceImpl extends GenericServiceImpl&lt;Contrato, Long&gt; impl
156 160  
157 161 validarPapeisEnvolvidos(contrato);
158 162  
  163 + rascunhoService.removeById(contrato.getRascunho());
  164 +
159 165 return super.save(contrato);
160 166 }
161 167  
... ...
cit-contratos-api/src/main/java/br/com/centralit/api/service/impl/EstudoTecnicoServiceImpl.java
... ... @@ -39,6 +39,7 @@ import br.com.centralit.api.service.EstudoTecnicoService;
39 39 import br.com.centralit.api.service.FuncaoService;
40 40 import br.com.centralit.api.service.ObjetivoEstrategicoNecessidadeService;
41 41 import br.com.centralit.api.service.ParceiroService;
  42 +import br.com.centralit.api.service.RascunhoService;
42 43 import br.com.centralit.api.service.TermoReferenciaService;
43 44 import br.com.centralit.api.service.UsuarioService;
44 45 import br.com.centralit.framework.exception.CodigoErro;
... ... @@ -114,6 +115,9 @@ public class EstudoTecnicoServiceImpl extends GenericServiceImpl&lt;EstudoTecnico,
114 115 @Autowired
115 116 private FuncaoService funcaoService;
116 117  
  118 + @Autowired
  119 + private RascunhoService rascunhoService;
  120 +
117 121 /** Atributo statico CAMPO_BUSCA_PARAMETRIZADA_ULTIMO_REGISTRO. */
118 122 public static final String CAMPO_BUSCA_PARAMETRIZADA_ULTIMO_REGISTRO = "codigo";
119 123  
... ... @@ -150,6 +154,8 @@ public class EstudoTecnicoServiceImpl extends GenericServiceImpl&lt;EstudoTecnico,
150 154 // monta objeto estudoTecnico com todas as suas listas e objetos transients
151 155 this.montarObjetoEstudoTecnico(estudoTecnico);
152 156  
  157 + rascunhoService.removeById(estudoTecnico.getRascunho());
  158 +
153 159 // verifica se tem codigo, senao gera e salva entidade
154 160 if (UtilObjeto.isReferencia(estudoTecnico.getRegistroSequencial())) {
155 161  
... ...
cit-contratos-api/src/main/java/br/com/centralit/api/service/impl/TermoReferenciaServiceImpl.java
... ... @@ -12,6 +12,14 @@ import java.util.Map;
12 12  
13 13 import javax.servlet.http.HttpServletResponse;
14 14  
  15 +import net.sf.jasperreports.engine.JRException;
  16 +import net.sf.jasperreports.engine.JasperCompileManager;
  17 +import net.sf.jasperreports.engine.JasperFillManager;
  18 +import net.sf.jasperreports.engine.JasperPrint;
  19 +import net.sf.jasperreports.engine.JasperReport;
  20 +import net.sf.jasperreports.engine.design.JasperDesign;
  21 +import net.sf.jasperreports.engine.xml.JRXmlLoader;
  22 +
15 23 import org.apache.commons.collections.CollectionUtils;
16 24 import org.apache.commons.lang3.StringUtils;
17 25 import org.apache.log4j.Logger;
... ... @@ -32,6 +40,7 @@ import br.com.centralit.api.service.ConfiguracaoParametroSistemaService;
32 40 import br.com.centralit.api.service.DominioService;
33 41 import br.com.centralit.api.service.InternacionalizacaoService;
34 42 import br.com.centralit.api.service.ParceiroService;
  43 +import br.com.centralit.api.service.RascunhoService;
35 44 import br.com.centralit.api.service.TermoReferenciaDetalhamentoSolucaoService;
36 45 import br.com.centralit.api.service.TermoReferenciaPenalidadeService;
37 46 import br.com.centralit.api.service.TermoReferenciaSancaoService;
... ... @@ -44,13 +53,6 @@ import br.com.centralit.framework.model.Usuario;
44 53 import br.com.centralit.framework.service.arquitetura.GenericServiceImpl;
45 54 import br.com.centralit.framework.util.UtilDataBase;
46 55 import br.com.centralit.framework.util.UtilObjeto;
47   -import net.sf.jasperreports.engine.JRException;
48   -import net.sf.jasperreports.engine.JasperCompileManager;
49   -import net.sf.jasperreports.engine.JasperFillManager;
50   -import net.sf.jasperreports.engine.JasperPrint;
51   -import net.sf.jasperreports.engine.JasperReport;
52   -import net.sf.jasperreports.engine.design.JasperDesign;
53   -import net.sf.jasperreports.engine.xml.JRXmlLoader;
54 56  
55 57 /**
56 58 * <p>
... ... @@ -122,8 +124,10 @@ public class TermoReferenciaServiceImpl extends GenericServiceImpl&lt;TermoReferenc
122 124 @Autowired
123 125 private InternacionalizacaoService internacionalizacaoService;
124 126  
125   - private Dominio idioma;
  127 + @Autowired
  128 + private RascunhoService rascunhoService;
126 129  
  130 + private Dominio idioma;
127 131  
128 132 @Autowired
129 133 public TermoReferenciaServiceImpl( TermoReferenciaDao termoReferenciaDao, @Qualifier("termoReferenciaValidator") Validator validator ) {
... ... @@ -143,6 +147,8 @@ public class TermoReferenciaServiceImpl extends GenericServiceImpl&lt;TermoReferenc
143 147 termoReferencia = (TermoReferencia) termoReferenciaDao.save(termoReferencia);
144 148  
145 149 configurarCodigo(termoReferencia);
  150 +
  151 + rascunhoService.removeById(termoReferencia.getRascunho());
146 152  
147 153 return termoReferencia;
148 154 }
... ...
cit-contratos-web/src/main/webapp/assets/js/angular/custom/controller/ContratoController.js
... ... @@ -134,10 +134,6 @@ citApp.controller(&#39;ContratoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUploader&#39;, &#39;C
134 134 $scope.contratoForm.anexosObservacoesContratoForm.$setPristine();
135 135 });
136 136  
137   -// $scope.getRascunho($scope.workspace, 201501378985);
138   -// $timeout(function(){
139   -// $scope.contrato = JSON.parse($scope.workspace.rascunho.json);
140   -// });
141 137 };
142 138  
143 139 $scope.gerarRelatorioTermoContrato = function() {
... ... @@ -343,6 +339,7 @@ citApp.controller(&#39;ContratoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUploader&#39;, &#39;C
343 339 $scope.setLoadingSalva(true);
344 340  
345 341 $scope.contrato.exercicio = new Date($scope.contrato.exercicio);
  342 + $scope.contrato.rascunho = $scope.workspace.rascunho.id;
346 343 ContratoRepository.save($scope.contrato).then(function(result) {
347 344  
348 345 $scope.contrato = result.originalElement;
... ...
cit-contratos-web/src/main/webapp/assets/js/angular/custom/controller/EstudoTecnicoController.js
... ... @@ -121,6 +121,8 @@ citApp.controller(&#39;EstudoTecnicoController&#39;, [&#39;$scope&#39;, &#39;EstudoTecnicoRepository
121 121 $scope.atualizarListaSizeSelectRecursoMaterial();
122 122 $scope.atualizarListaSizeSelectRecursoHumano();
123 123 $scope.atualizarListaSizeSelectAcaoContigencia();
  124 +
  125 + $scope.startTimerIntervalSaveDraft($scope.workspace , $scope.estudoTecnico, true);
124 126 $timeout(function() {
125 127 $scope.estudoTecnicoForm.planejamentoContratacaoForm.$submitted = false;
126 128 $scope.estudoTecnicoForm.definicaoRequisitosForm.$submitted = false;
... ... @@ -136,6 +138,17 @@ citApp.controller(&#39;EstudoTecnicoController&#39;, [&#39;$scope&#39;, &#39;EstudoTecnicoRepository
136 138 });
137 139 };
138 140  
  141 + $scope.setRascunho = function(rascunho){
  142 +
  143 + if (rascunho) {
  144 + $scope.estudoTecnico = rascunho;
  145 + }
  146 + $scope.workspace.objetoScope = $scope.estudoTecnico;
  147 + $scope.startTimerIntervalSaveDraft($scope.workspace);
  148 + $scope.edit = true;
  149 + $scope.setLoading(false);
  150 + };
  151 +
139 152 $scope.visualizarEditar = function(idEstudoTecnico, edit) {
140 153 $scope.resetForm();
141 154 $scope.setLoadingGet(true);
... ... @@ -199,6 +212,7 @@ citApp.controller(&#39;EstudoTecnicoController&#39;, [&#39;$scope&#39;, &#39;EstudoTecnicoRepository
199 212 }
200 213 });
201 214  
  215 + $scope.estudoTecnico.rascunho = $scope.workspace.rascunho.id;
202 216 EstudoTecnicoRepository.save($scope.estudoTecnico).then(function(result) {
203 217  
204 218 $scope.estudoTecnico = result.originalElement;
... ...
cit-contratos-web/src/main/webapp/assets/js/angular/custom/controller/TermoReferenciaController.js
... ... @@ -18,348 +18,357 @@ citApp.controller(&#39;TermoReferenciaController&#39;, [&#39;$scope&#39;,
18 18 '$filter',
19 19 'EventoRegistroNaoConformidadeRepository',
20 20 function TermoReferenciaController($scope,
21   - TermoReferenciaRepository,
22   - DominioRepository,
23   - EstudoTecnicoRequisitoNegocioRepository,
24   - EstudoTecnicoBemServicoSolucaoRepository,
25   - EstudoTecnicoRepository,
26   - ConfiguracaoRepository,
27   - ParceiroRepository,
28   - EstudoTecnicoBeneficioEsperadoRepository,
29   - TermoReferenciaDetalhamentoSolucaoRepository,
30   - TermoReferenciaPenalidadeRepository,
31   - TermoReferenciaSancaoRepository,
32   - FileUploader,
33   - $translate,
34   - $timeout,
35   - $filter,
36   - EventoRegistroNaoConformidadeRepository) {
37   - $scope.termoReferencia = {
38   - estudoTecnico : {},
39   - detalhamentosSolucoes : [],
40   - penalidades : [],
41   - sancoes : [],
42   - observacoes : [],
43   - documentos : [],
44   - deveresContratante : "",
45   - deveresContratada : "",
46   - deveresOrgaoRegistroPreco : "",
47   - mecanismoComunicacao : "",
48   - integrantesEstudoTecnico : {}
49   - };
50   -
51   - $scope.listaJustificativaContratacao = [];
52   - $scope.listaBeneficiosEsperados = [];
53   - $scope.listEtBensServicos = [];
54   - $scope.papeis = '';
55   -
56   - $scope.termoReferenciaDetalhamentoSolucao = {formaPagamento: {}, bemServicoSolucao:{}};
57   - $scope.editDetalhamento = false;
58   - $scope.editPenalidade = false;
59   - $scope.editSancao = false;
60   -
61   - //Dados da tabela de Justificativa de Contratacao
62   - $scope.headers = [{
63   - title : $translate.instant('LABEL.NECESSIDADE_NEGOCIO'),
64   - value : 'objetivoEstrategicoNecessidade.descricao'
65   - },{
66   - title : $translate.instant('LABEL.JUSTIFICATIVA'),
67   - value : 'justificativaNecessidade'
68   - }];
69   -
70   - $scope.fields = [ 'id', 'objetivoEstrategicoNecessidade.descricao', 'justificativaNecessidade'];
71   -
72   - $scope.filters = [ {
73   - type : 'string',
74   - field : 'objetivoEstrategicoNecessidade.descricao'
75   - },{
76   - type : 'string',
77   - field : 'justificativaNecessidade',
78   - },{
79   - type: 'numeric',
80   - field: 'estudoTecnico.id',
81   - value: ($scope.termoReferencia.estudoTecnico ? $scope.termoReferencia.estudoTecnico.id : 0 )
82   - }];
83   -
84   - $scope.filterCriteria = {
85   - start : 1,
86   - dir : 'asc',
87   - sort : 'id',
88   - limit : 10,
89   - };
90   -
91   - //Dados da tabela de Beneficios Esperados
92   - $scope.headersBeneficios = [{
93   - title : $translate.instant('LABEL.BENEFICIO'),
94   - value : 'beneficioEsperado'
95   - },{
96   - title : $translate.instant('LABEL.DESCRICAO'),
97   - value : 'descricaoBeneficioEsperado'
98   - }];
99   -
100   - $scope.fieldsBeneficios = [ 'id', 'beneficioEsperado', 'descricaoBeneficioEsperado'];
101   -
102   - $scope.filtersBeneficios = [ {
103   - type : 'string',
104   - field : 'beneficioEsperado'
105   - },{
106   - type : 'string',
107   - field : 'descricaoBeneficioEsperado',
108   - },{
109   - type: 'numeric',
110   - field: 'estudoTecnico.id',
111   - value: ($scope.termoReferencia.estudoTecnico ? $scope.termoReferencia.estudoTecnico.id : 0)
112   - }];
113   -
114   - $scope.filterCriteriaBeneficios = {
115   - start : 1,
116   - dir : 'asc',
117   - sort : 'id',
118   - limit : 10,
119   - };
120   -
121   - //#####################DOMINIOS###########################
122   -
123   - DominioRepository.findAllDominio('tipoFormaPagamento').then(function(result) {
124   - $scope.dominiosTiposFormaPagamento = result;
125   - });
126   -
127   - DominioRepository.findAllDominio('tipoEmpreitada').then(function(result) {
128   - $scope.dominiosEmpreitada = result;
129   - });
130   -
131   - DominioRepository.findAllDominio('tipoAdjudicacaoObjeto').then(function(result) {
132   - $scope.dominiosAdjudicacao = result;
133   - });
134   -
135   - DominioRepository.findAllDominio('tipoModalidadeContrato').then(function(result) {
136   - $scope.dominiosModalidade = result;
137   - });
138   -
139   - DominioRepository.findAllDominio('tipoNotificacaoContratoSancao').then(function(result) {
140   - $scope.dominioTiposSancaoList = result;
141   - });
142   - //##########################AUTOCOMPLETES###########################################
143   -
144   - $scope.findBemServicoSolucao = function (value){
145   - return EstudoTecnicoBemServicoSolucaoRepository.listarBensServicosPorNome(value).then(function(result) {
146   - return result;
147   - });
148   - };
149   -
150   - $scope.findFornecedor = function(value){
151   - return ParceiroRepository.findParceiros('tipoParceiro', ['FORNECEDOR'] , value).then(function(result) {
152   - return result;
153   - });
154   - };
155   -
156   - $scope.findOrgaoExterno = function(value){
157   - return ParceiroRepository.findParceiros('tipoParceiro', ['ORGAO_EXTERNO'] , value).then(function(result) {
158   - return result;
159   - });
160   - };
161   -
162   - $scope.findEstudoTecnico = function(value){
163   - return EstudoTecnicoRepository.listarEstudosPorCodigo(value).then(function(result) {
164   - return result;
165   - });
166   - };
167   -
168   - $scope.atualizaInformacoesIntegrantesEstudoTecnico = function (item){
169   -
170   - $scope.termoReferencia.integrantesEstudoTecnico = {
171   - integranteTecnico : item.integranteTecnico.pessoa.nome + ' - Mat. SIAPE: ' + item.integranteTecnico.matricula,
172   - integranteAdministrativo : item.integranteAdministrativo.pessoa.nome + ' - Mat. SIAPE: ' + item.integranteAdministrativo.matricula,
173   - integranteRequisitante : item.integranteRequisitante.pessoa.nome + ' - Mat. SIAPE: ' + item.integranteRequisitante.matricula
174   - };
175   - };
176   -
177   - // Metodo responsavel por limpar o auto complete de Modelo Email
178   - $scope.limparModeloEmailAutoComplete = function(value) {
179   - value = {};
180   - };
181   -
182   - $scope.atualizaListaJustificativasContratacao = function(value){
183   - var listIdJustificativa = [];
184   - angular.forEach(value.etRequisitosNegocio, function(value, key){
185   - listIdJustificativa.push(value.id);
186   - });
187   -
188   - $scope.listaJustificativaContratacao = listIdJustificativa;
189   - };
190   -
191   - $scope.atualizaListaBeneficiosEsperados = function(value){
192   - var listIdBeneficios = [];
193   - angular.forEach(value.etBeneficiosEsperados, function(value, key){
194   - listIdBeneficios.push(value.id);
195   - });
196   -
197   - $scope.listaBeneficiosEsperados = listIdBeneficios;
198   - };
199   -
200   - $scope.atualizaListaEtBensServicos = function(value){
201   - if (!value){
202   - value = $scope.termoReferencia.estudoTecnico;
203   - }
204   - $scope.listEtBensServicos = $filter('idNotEqualObj')(value.etBensServicosSolucoes, $scope.termoReferencia.detalhamentosSolucoes, "bemServicoSolucao"); ;
205   - };
206   -
207   -
208   - //###################### METODOS AUXILIARES ####################################
209   -
210   - // Limpa formulario para novo cadastro
211   - $scope.resetForm = function() {
212   - $scope.termoReferencia = {
213   - detalhamentosSolucoes : [],
214   - penalidades : [],
215   - sancoes : [],
216   - observacoes : [],
217   - documentos : [],
218   - deveresContratante : "",
219   - deveresContratada : "",
220   - deveresOrgaoRegistroPreco : "",
221   - mecanismoComunicacao : ""
222   - };
223   - $scope.listaJustificativaContratacao = [];
224   - $scope.listaBeneficiosEsperados = [];
225   - $scope.listEtBensServicos = [];
226   - $scope.termoReferenciaDetalhamentoSolucao = {formaPagamento: {}, bemServicoSolucao:{}};
227   - $scope.papeis = '';
228   -
229   - $scope.penalidade = {};
230   - $scope.sancao = {};
231   -
232   - $scope.edit = true;
233   - $scope.pgEdit = true;
234   - $scope.editDetalhamento = false;
235   - $scope.editPenalidade = false;
236   - $scope.editSancao = false;
237   - $scope.step = 0;
238   -
239   - $scope.startTimerIntervalSaveDraft($scope.workspace , $scope.termoReferencia, true);
240   -
241   - $timeout(function(){
242   - $scope.termoReferenciaForm.$submitted = false;
243   - $scope.termoReferenciaForm.equipeContratacaoForm.$submitted = false;
244   - $scope.termoReferenciaForm.justificativaContratacaoForm.$submitted = false;
245   - $scope.termoReferenciaForm.especificacoesTecnicasForm.$submitted = false;
246   - $scope.termoReferenciaForm.modeloGestaoForm.$submitted = false;
247   - $scope.termoReferenciaForm.sancoesForm.$submitted = false;
248   - $scope.termoReferenciaForm.criteriosSelecaoForm.$submitted = false;
249   - $scope.termoReferenciaForm.anexosObservacoesForm.$submitted = false;
250   -
251   - $scope.termoReferenciaForm.$setPristine();
252   - $scope.termoReferenciaForm.equipeContratacaoForm.$setPristine();
253   - $scope.termoReferenciaForm.justificativaContratacaoForm.$setPristine();
254   - $scope.termoReferenciaForm.especificacoesTecnicasForm.$setPristine();
255   - $scope.termoReferenciaForm.modeloGestaoForm.$setPristine();
256   - $scope.termoReferenciaForm.sancoesForm.$setPristine();
257   - $scope.termoReferenciaForm.criteriosSelecaoForm.$setPristine();
258   - $scope.termoReferenciaForm.anexosObservacoesForm.$setPristine();
259   - });
260   -
261   - createTemplates();
262   - $scope.getConfiguracoesTemplate();
263   - $scope.preenchePapeis();
264   - $scope.carregarValoresPadrao();
265   - $scope.atualizarListaSizeSelect();
266   - $scope.atualizarListaSizeSelectPenalidade();
267   - $scope.atualizarListaSizeSelectSancao();
268   -
269   - };
270   -
271   -
272   -
273   - // Atualiza pagina de pesquisa
274   - $scope.atualizaPaginaPesquisa = function () {
275   - angular.element('#searchTermoReferencia').scope().fetchResult();
276   - };
277   -
278   - $scope.openModalDetalhamentoSolucao = function() {
279   -
280   - $scope.termoReferenciaDetalhamentoSolucao = {};
281   - $scope.editDetalhamento = true;
282   -// $scope.atualizaListaEtBensServicos();
283   - $scope.listEtBensServicos = $scope.termoReferencia.estudoTecnico.etBensServicosSolucoes;
284   -
285   - $timeout(function() {
286   - $scope.$openModal('modal-detalhamento-solucao.html', 'lg');
287   - });
288   - };
289   -
290   - $scope.openModalPenalidade = function() {
291   -
292   - $scope.penalidade = {};
293   - $scope.editPenalidade = true;
294   -
295   - $timeout(function() {
296   - $scope.$openModal('modal-penalidade.html', 'lg');
297   - });
298   - };
299   -
300   - $scope.openModalSancao = function() {
301   -
302   - $scope.sancao = {};
303   - $scope.editSancao = true;
304   -
305   - $timeout(function() {
306   - $scope.$openModal('modal-sancao.html', 'lg');
307   - });
308   - };
309   -
310   - $scope.uploader = new FileUploader({
311   - autoUpload: false,
312   - queueLimit: 1,
313   - url: '/cit-tabelas-corp-web/rest/anexo/uploadAnexo?idDocumento='
314   - });
315   -
316   - // metodo utilizado para percorrer a lista de documentos persistidos e verificar com a lista de documentos temporarios para verificacao de qual anexo pertence a qual documento
317   - var salvarListaDocumentos = function(termo) {
318   -
319   - angular.forEach($scope.termoReferencia.documentos, function(documentoSalvo, key) {
320   - // verifica se a entidade documento foi salva
321   - if (documentoSalvo !== undefined && documentoSalvo.id !== undefined) {
322   - // percorre todos os documentos temporarios para verificacao do numero do documento
323   - angular.forEach(termo.documentos, function(documentoTransient, key) {
324   - // verifica se o numero do documento salvo e igual ao numero do documento transient que o anexo ainda esta vinculado
325   - if (documentoSalvo.numero === documentoTransient.numero) {
326   - //salva o anexo ao documento que tiver o mesmo numero do documento transient
327   - salvarUpload(documentoSalvo, documentoTransient.uploadsDocumento);
328   - }
329   -
330   - });
331   -
332   - }
333   - });
334   -
335   - };
336   -
337   - // metodo responsavel para salvar os anexos da baixa depois de ter salvo a baixa, utilizando a referencia do id baixa.documento.id
338   - var salvarUpload = function(documento, uploadsDocumento) {
339   - $scope.uploader.queue = uploadsDocumento;
340   - // percorre a lista de uploads a serem enviados
341   - angular.forEach($scope.uploader.queue, function(item, key) {
342   - item.url = item.url + documento.id;
343   - });
344   - if ($scope.uploader.queue && $scope.uploader.queue.length > 0) {
345   - // realiza o upload se existir no minimo um arquivo para upload
346   - $scope.uploader.uploadAll();
347   - }
348   - };
349   -
350   - // ADICIONAR Detalhamento Solucao
351   - $scope.addDetalhamentoSolucao = function(formDetalhamento, continuarEditando) {
  21 + TermoReferenciaRepository,
  22 + DominioRepository,
  23 + EstudoTecnicoRequisitoNegocioRepository,
  24 + EstudoTecnicoBemServicoSolucaoRepository,
  25 + EstudoTecnicoRepository,
  26 + ConfiguracaoRepository,
  27 + ParceiroRepository,
  28 + EstudoTecnicoBeneficioEsperadoRepository,
  29 + TermoReferenciaDetalhamentoSolucaoRepository,
  30 + TermoReferenciaPenalidadeRepository,
  31 + TermoReferenciaSancaoRepository,
  32 + FileUploader,
  33 + $translate,
  34 + $timeout,
  35 + $filter,
  36 + EventoRegistroNaoConformidadeRepository) {
  37 + $scope.termoReferencia = {
  38 + estudoTecnico : {},
  39 + detalhamentosSolucoes : [],
  40 + penalidades : [],
  41 + sancoes : [],
  42 + observacoes : [],
  43 + documentos : [],
  44 + deveresContratante : "",
  45 + deveresContratada : "",
  46 + deveresOrgaoRegistroPreco : "",
  47 + mecanismoComunicacao : "",
  48 + integrantesEstudoTecnico : {}
  49 + };
  50 +
  51 + $scope.listaJustificativaContratacao = [];
  52 + $scope.listaBeneficiosEsperados = [];
  53 + $scope.listEtBensServicos = [];
  54 + $scope.papeis = '';
  55 +
  56 + $scope.termoReferenciaDetalhamentoSolucao = {formaPagamento: {}, bemServicoSolucao:{}};
  57 + $scope.editDetalhamento = false;
  58 + $scope.editPenalidade = false;
  59 + $scope.editSancao = false;
  60 +
  61 + //Dados da tabela de Justificativa de Contratacao
  62 + $scope.headers = [{
  63 + title : $translate.instant('LABEL.NECESSIDADE_NEGOCIO'),
  64 + value : 'objetivoEstrategicoNecessidade.descricao'
  65 + },{
  66 + title : $translate.instant('LABEL.JUSTIFICATIVA'),
  67 + value : 'justificativaNecessidade'
  68 + }];
  69 +
  70 + $scope.fields = [ 'id', 'objetivoEstrategicoNecessidade.descricao', 'justificativaNecessidade'];
  71 +
  72 + $scope.filters = [ {
  73 + type : 'string',
  74 + field : 'objetivoEstrategicoNecessidade.descricao'
  75 + },{
  76 + type : 'string',
  77 + field : 'justificativaNecessidade',
  78 + },{
  79 + type: 'numeric',
  80 + field: 'estudoTecnico.id',
  81 + value: ($scope.termoReferencia.estudoTecnico ? $scope.termoReferencia.estudoTecnico.id : 0 )
  82 + }];
  83 +
  84 + $scope.filterCriteria = {
  85 + start : 1,
  86 + dir : 'asc',
  87 + sort : 'id',
  88 + limit : 10,
  89 + };
  90 +
  91 + //Dados da tabela de Beneficios Esperados
  92 + $scope.headersBeneficios = [{
  93 + title : $translate.instant('LABEL.BENEFICIO'),
  94 + value : 'beneficioEsperado'
  95 + },{
  96 + title : $translate.instant('LABEL.DESCRICAO'),
  97 + value : 'descricaoBeneficioEsperado'
  98 + }];
  99 +
  100 + $scope.fieldsBeneficios = [ 'id', 'beneficioEsperado', 'descricaoBeneficioEsperado'];
  101 +
  102 + $scope.filtersBeneficios = [ {
  103 + type : 'string',
  104 + field : 'beneficioEsperado'
  105 + },{
  106 + type : 'string',
  107 + field : 'descricaoBeneficioEsperado',
  108 + },{
  109 + type: 'numeric',
  110 + field: 'estudoTecnico.id',
  111 + value: ($scope.termoReferencia.estudoTecnico ? $scope.termoReferencia.estudoTecnico.id : 0)
  112 + }];
  113 +
  114 + $scope.filterCriteriaBeneficios = {
  115 + start : 1,
  116 + dir : 'asc',
  117 + sort : 'id',
  118 + limit : 10,
  119 + };
  120 +
  121 + //#####################DOMINIOS###########################
  122 +
  123 + DominioRepository.findAllDominio('tipoFormaPagamento').then(function(result) {
  124 + $scope.dominiosTiposFormaPagamento = result;
  125 + });
  126 +
  127 + DominioRepository.findAllDominio('tipoEmpreitada').then(function(result) {
  128 + $scope.dominiosEmpreitada = result;
  129 + });
  130 +
  131 + DominioRepository.findAllDominio('tipoAdjudicacaoObjeto').then(function(result) {
  132 + $scope.dominiosAdjudicacao = result;
  133 + });
  134 +
  135 + DominioRepository.findAllDominio('tipoModalidadeContrato').then(function(result) {
  136 + $scope.dominiosModalidade = result;
  137 + });
  138 +
  139 + DominioRepository.findAllDominio('tipoNotificacaoContratoSancao').then(function(result) {
  140 + $scope.dominioTiposSancaoList = result;
  141 + });
  142 + //##########################AUTOCOMPLETES###########################################
  143 +
  144 + $scope.findBemServicoSolucao = function (value){
  145 + return EstudoTecnicoBemServicoSolucaoRepository.listarBensServicosPorNome(value).then(function(result) {
  146 + return result;
  147 + });
  148 + };
  149 +
  150 + $scope.findFornecedor = function(value){
  151 + return ParceiroRepository.findParceiros('tipoParceiro', ['FORNECEDOR'] , value).then(function(result) {
  152 + return result;
  153 + });
  154 + };
  155 +
  156 + $scope.findOrgaoExterno = function(value){
  157 + return ParceiroRepository.findParceiros('tipoParceiro', ['ORGAO_EXTERNO'] , value).then(function(result) {
  158 + return result;
  159 + });
  160 + };
  161 +
  162 + $scope.findEstudoTecnico = function(value){
  163 + return EstudoTecnicoRepository.listarEstudosPorCodigo(value).then(function(result) {
  164 + return result;
  165 + });
  166 + };
  167 +
  168 + $scope.atualizaInformacoesIntegrantesEstudoTecnico = function (item){
  169 +
  170 + $scope.termoReferencia.integrantesEstudoTecnico = {
  171 + integranteTecnico : item.integranteTecnico.pessoa.nome + ' - Mat. SIAPE: ' + item.integranteTecnico.matricula,
  172 + integranteAdministrativo : item.integranteAdministrativo.pessoa.nome + ' - Mat. SIAPE: ' + item.integranteAdministrativo.matricula,
  173 + integranteRequisitante : item.integranteRequisitante.pessoa.nome + ' - Mat. SIAPE: ' + item.integranteRequisitante.matricula
  174 + };
  175 + };
  176 +
  177 + // Metodo responsavel por limpar o auto complete de Modelo Email
  178 + $scope.limparModeloEmailAutoComplete = function(value) {
  179 + value = {};
  180 + };
  181 +
  182 + $scope.atualizaListaJustificativasContratacao = function(value){
  183 + var listIdJustificativa = [];
  184 + angular.forEach(value.etRequisitosNegocio, function(value, key){
  185 + listIdJustificativa.push(value.id);
  186 + });
  187 +
  188 + $scope.listaJustificativaContratacao = listIdJustificativa;
  189 + };
  190 +
  191 + $scope.atualizaListaBeneficiosEsperados = function(value){
  192 + var listIdBeneficios = [];
  193 + angular.forEach(value.etBeneficiosEsperados, function(value, key){
  194 + listIdBeneficios.push(value.id);
  195 + });
  196 +
  197 + $scope.listaBeneficiosEsperados = listIdBeneficios;
  198 + };
  199 +
  200 + $scope.atualizaListaEtBensServicos = function(value){
  201 + if (!value){
  202 + value = $scope.termoReferencia.estudoTecnico;
  203 + }
  204 + $scope.listEtBensServicos = $filter('idNotEqualObj')(value.etBensServicosSolucoes, $scope.termoReferencia.detalhamentosSolucoes, "bemServicoSolucao"); ;
  205 + };
  206 +
  207 +
  208 + //###################### METODOS AUXILIARES ####################################
  209 +
  210 + // Limpa formulario para novo cadastro
  211 + $scope.resetForm = function() {
  212 + $scope.termoReferencia = {
  213 + detalhamentosSolucoes : [],
  214 + penalidades : [],
  215 + sancoes : [],
  216 + observacoes : [],
  217 + documentos : [],
  218 + deveresContratante : "",
  219 + deveresContratada : "",
  220 + deveresOrgaoRegistroPreco : "",
  221 + mecanismoComunicacao : ""
  222 + };
  223 + $scope.listaJustificativaContratacao = [];
  224 + $scope.listaBeneficiosEsperados = [];
  225 + $scope.listEtBensServicos = [];
  226 + $scope.termoReferenciaDetalhamentoSolucao = {formaPagamento: {}, bemServicoSolucao:{}};
  227 + $scope.papeis = '';
  228 +
  229 + $scope.penalidade = {};
  230 + $scope.sancao = {};
  231 +
  232 + $scope.edit = true;
  233 + $scope.pgEdit = true;
  234 + $scope.editDetalhamento = false;
  235 + $scope.editPenalidade = false;
  236 + $scope.editSancao = false;
  237 + $scope.step = 0;
  238 +
  239 + $scope.startTimerIntervalSaveDraft($scope.workspace , $scope.termoReferencia, true);
  240 + $timeout(function(){
  241 + $scope.termoReferenciaForm.$submitted = false;
  242 + $scope.termoReferenciaForm.equipeContratacaoForm.$submitted = false;
  243 + $scope.termoReferenciaForm.justificativaContratacaoForm.$submitted = false;
  244 + $scope.termoReferenciaForm.especificacoesTecnicasForm.$submitted = false;
  245 + $scope.termoReferenciaForm.modeloGestaoForm.$submitted = false;
  246 + $scope.termoReferenciaForm.sancoesForm.$submitted = false;
  247 + $scope.termoReferenciaForm.criteriosSelecaoForm.$submitted = false;
  248 + $scope.termoReferenciaForm.anexosObservacoesForm.$submitted = false;
  249 +
  250 + $scope.termoReferenciaForm.$setPristine();
  251 + $scope.termoReferenciaForm.equipeContratacaoForm.$setPristine();
  252 + $scope.termoReferenciaForm.justificativaContratacaoForm.$setPristine();
  253 + $scope.termoReferenciaForm.especificacoesTecnicasForm.$setPristine();
  254 + $scope.termoReferenciaForm.modeloGestaoForm.$setPristine();
  255 + $scope.termoReferenciaForm.sancoesForm.$setPristine();
  256 + $scope.termoReferenciaForm.criteriosSelecaoForm.$setPristine();
  257 + $scope.termoReferenciaForm.anexosObservacoesForm.$setPristine();
  258 + });
  259 +
  260 + createTemplates();
  261 + $scope.getConfiguracoesTemplate();
  262 + $scope.preenchePapeis();
  263 + $scope.carregarValoresPadrao();
  264 + $scope.atualizarListaSizeSelect();
  265 + $scope.atualizarListaSizeSelectPenalidade();
  266 + $scope.atualizarListaSizeSelectSancao();
  267 +
  268 + };
  269 +
  270 + $scope.setRascunho = function(rascunho){
  271 +
  272 + if (rascunho) {
  273 + $scope.termoReferencia = rascunho;
  274 + }
  275 + $scope.workspace.objetoScope = $scope.termoReferencia;
  276 + $scope.startTimerIntervalSaveDraft($scope.workspace);
  277 + $scope.edit = true;
  278 + $scope.setLoading(false);
  279 + };
  280 +
  281 +
  282 + // Atualiza pagina de pesquisa
  283 + $scope.atualizaPaginaPesquisa = function () {
  284 + angular.element('#searchTermoReferencia').scope().fetchResult();
  285 + };
  286 +
  287 + $scope.openModalDetalhamentoSolucao = function() {
  288 +
  289 + $scope.termoReferenciaDetalhamentoSolucao = {};
  290 + $scope.editDetalhamento = true;
  291 +// $scope.atualizaListaEtBensServicos();
  292 + $scope.listEtBensServicos = $scope.termoReferencia.estudoTecnico.etBensServicosSolucoes;
  293 +
  294 + $timeout(function() {
  295 + $scope.$openModal('modal-detalhamento-solucao.html', 'lg');
  296 + });
  297 + };
  298 +
  299 + $scope.openModalPenalidade = function() {
  300 +
  301 + $scope.penalidade = {};
  302 + $scope.editPenalidade = true;
  303 +
  304 + $timeout(function() {
  305 + $scope.$openModal('modal-penalidade.html', 'lg');
  306 + });
  307 + };
  308 +
  309 + $scope.openModalSancao = function() {
  310 +
  311 + $scope.sancao = {};
  312 + $scope.editSancao = true;
  313 +
  314 + $timeout(function() {
  315 + $scope.$openModal('modal-sancao.html', 'lg');
  316 + });
  317 + };
  318 +
  319 + $scope.uploader = new FileUploader({
  320 + autoUpload: false,
  321 + queueLimit: 1,
  322 + url: '/cit-tabelas-corp-web/rest/anexo/uploadAnexo?idDocumento='
  323 + });
  324 +
  325 + // metodo utilizado para percorrer a lista de documentos persistidos e verificar com a lista de documentos temporarios para verificacao de qual anexo pertence a qual documento
  326 + var salvarListaDocumentos = function(termo) {
  327 +
  328 + angular.forEach($scope.termoReferencia.documentos, function(documentoSalvo, key) {
  329 + // verifica se a entidade documento foi salva
  330 + if (documentoSalvo !== undefined && documentoSalvo.id !== undefined) {
  331 + // percorre todos os documentos temporarios para verificacao do numero do documento
  332 + angular.forEach(termo.documentos, function(documentoTransient, key) {
  333 + // verifica se o numero do documento salvo e igual ao numero do documento transient que o anexo ainda esta vinculado
  334 + if (documentoSalvo.numero === documentoTransient.numero) {
  335 + //salva o anexo ao documento que tiver o mesmo numero do documento transient
  336 + salvarUpload(documentoSalvo, documentoTransient.uploadsDocumento);
  337 + }
  338 +
  339 + });
  340 +
  341 + }
  342 + });
  343 +
  344 + };
  345 +
  346 + // metodo responsavel para salvar os anexos da baixa depois de ter salvo a baixa, utilizando a referencia do id baixa.documento.id
  347 + var salvarUpload = function(documento, uploadsDocumento) {
  348 + $scope.uploader.queue = uploadsDocumento;
  349 + // percorre a lista de uploads a serem enviados
  350 + angular.forEach($scope.uploader.queue, function(item, key) {
  351 + item.url = item.url + documento.id;
  352 + });
  353 + if ($scope.uploader.queue && $scope.uploader.queue.length > 0) {
  354 + // realiza o upload se existir no minimo um arquivo para upload
  355 + $scope.uploader.uploadAll();
  356 + }
  357 + };
  358 +
  359 + // ADICIONAR Detalhamento Solucao
  360 + $scope.addDetalhamentoSolucao = function(formDetalhamento, continuarEditando) {
352 361  
353 362 var detalhe = $scope.termoReferenciaDetalhamentoSolucao;
354 363 formDetalhamento.$submitted = true;
355   -
  364 +
356 365 //verifica se o formulario esta valido para salvar
357 366 if (formDetalhamento.$invalid) {
358 367 //Mensagem de erro de campos obrigatorios nao preenchidos
359 368 $scope.showAlert('error', $translate.instant('VALIDACAO.ALERTA_OBRIGATORIOS'), " ", false);
360 369 return;
361 370 }
362   -
  371 +
363 372 if (detalhe.formaPagamento && detalhe.formaPagamento.codigo===1){
364 373 $scope.termoReferenciaDetalhamentoSolucao.numeroParcelas = null;
365 374 }
... ... @@ -372,730 +381,731 @@ citApp.controller(&#39;TermoReferenciaController&#39;, [&#39;$scope&#39;,
372 381 return;
373 382 }
374 383 });
375   -
  384 +
376 385 if (!isDuplicado) {
377   -
  386 +
378 387 if (detalhe.$index != undefined && detalhe.$index != null) {
379 388 $scope.termoReferencia.detalhamentosSolucoes[detalhe.$index] = detalhe;
380 389 } else {
381 390 $scope.termoReferencia.detalhamentosSolucoes.push(detalhe);
382 391 }
383   -
  392 +
384 393 if(continuarEditando){
385 394 formDetalhamento.$submitted = false;
386 395 formDetalhamento.$setPristine();
387 396 $scope.termoReferenciaDetalhamentoSolucao = {};
388   - $scope.listEtBensServicos = $scope.termoReferencia.estudoTecnico.etBensServicosSolucoes;
  397 + $scope.listEtBensServicos = $scope.termoReferencia.estudoTecnico.etBensServicosSolucoes;
389 398 }else{
390 399 $scope.$modalInstance.dismiss('cancel');
391 400 }
392 401 $scope.atualizarListaSizeSelect();
393 402 }
394   -
  403 +
395 404 $scope.setLoadingSalva(false);
396   -
397   - };
398   -
399   - // ADICIONAR Penalidade
400   - $scope.addPenalidade = function(formPenalidade, continuarEditando) {
401   -
402   - var penalid = $scope.penalidade;
403   -
404   - formPenalidade.$submitted = true;
405   -
406   - //verifica se o formulario esta valido para salvar
407   - if (formPenalidade.$invalid) {
408   - //Mensagem de erro de campos obrigatorios nao preenchidos
409   - $scope.showAlert('error', $translate.instant('VALIDACAO.ALERTA_OBRIGATORIOS'), " ", false);
410   - return;
411   - }
412   -
413   - $scope.setLoadingSalva(true);
414   -
415   - if (penalid.$index != undefined && penalid.$index != null) {
416   - $scope.termoReferencia.penalidades[penalid.$index] = penalid;
417   - } else {
418   - $scope.termoReferencia.penalidades.push(penalid);
419   - }
420   -
421   - $scope.setLoadingSalva(false);
422   -
423   - if(continuarEditando){
424   - formPenalidade.$submitted = false;
425   - formPenalidade.$setPristine();
426   - $scope.penalidade = {};
427   - }else{
428   - $scope.$modalInstance.dismiss('cancel');
429   - }
  405 +
  406 + };
  407 +
  408 + // ADICIONAR Penalidade
  409 + $scope.addPenalidade = function(formPenalidade, continuarEditando) {
  410 +
  411 + var penalid = $scope.penalidade;
  412 +
  413 + formPenalidade.$submitted = true;
  414 +
  415 + //verifica se o formulario esta valido para salvar
  416 + if (formPenalidade.$invalid) {
  417 + //Mensagem de erro de campos obrigatorios nao preenchidos
  418 + $scope.showAlert('error', $translate.instant('VALIDACAO.ALERTA_OBRIGATORIOS'), " ", false);
  419 + return;
  420 + }
  421 +
  422 + $scope.setLoadingSalva(true);
  423 +
  424 + if (penalid.$index != undefined && penalid.$index != null) {
  425 + $scope.termoReferencia.penalidades[penalid.$index] = penalid;
  426 + } else {
  427 + $scope.termoReferencia.penalidades.push(penalid);
  428 + }
  429 +
  430 + $scope.setLoadingSalva(false);
  431 +
  432 + if(continuarEditando){
  433 + formPenalidade.$submitted = false;
  434 + formPenalidade.$setPristine();
  435 + $scope.penalidade = {};
  436 + }else{
  437 + $scope.$modalInstance.dismiss('cancel');
  438 + }
430 439 $scope.atualizarListaSizeSelectPenalidade();
431   - };
432   -
433   - // ADICIONAR Penalidade
434   - $scope.addSancao = function(formSancao, continuarEditando) {
435   -
436   - var sans = $scope.sancao;
437   -
438   - formSancao.$submitted = true;
439   -
440   - //verifica se o formulario esta valido para salvar
441   - if (formSancao.$invalid) {
442   - //Mensagem de erro de campos obrigatorios nao preenchidos
443   - $scope.showAlert('error', $translate.instant('VALIDACAO.ALERTA_OBRIGATORIOS'), " ", false);
444   - return;
445   - }
446   -
447   - $scope.setLoadingSalva(true);
448   -
449   - if (sans.$index != undefined && sans.$index != null) {
450   - $scope.termoReferencia.sancoes[sans.$index] = sans;
451   - } else {
452   - $scope.termoReferencia.sancoes.push(sans);
453   - }
454   -
455   - $scope.setLoadingSalva(false);
456   -
457   - if(continuarEditando){
458   - formSancao.$submitted = false;
459   - formSancao.$setPristine();
460   - $scope.sancao = {};
461   - } else {
462   - $scope.$modalInstance.dismiss('cancel');
463   - }
464   - };
465   -
466   - //Watch para calcular total
467   - $scope.$watch('termoReferenciaDetalhamentoSolucao.valor', function() {
468   - $timeout(function() {
469   - if ($scope.termoReferenciaDetalhamentoSolucao && ($scope.termoReferenciaDetalhamentoSolucao.valor && $scope.termoReferenciaDetalhamentoSolucao.quantidade)) {
470   - $scope.termoReferenciaDetalhamentoSolucao.total = $scope.termoReferenciaDetalhamentoSolucao.valor * $scope.termoReferenciaDetalhamentoSolucao.quantidade;
471   - } else {
472   - if ($scope.termoReferenciaDetalhamentoSolucao) {
473   - $scope.termoReferenciaDetalhamentoSolucao.total = null;
474   - }
475   - }
476   - });
477   - });
478   -
479   - //Watch para calcular total
480   - $scope.$watch('termoReferenciaDetalhamentoSolucao.quantidade', function() {
481   - $timeout(function() {
482   - if ($scope.termoReferenciaDetalhamentoSolucao && ($scope.termoReferenciaDetalhamentoSolucao.valor && $scope.termoReferenciaDetalhamentoSolucao.quantidade)) {
483   - $scope.termoReferenciaDetalhamentoSolucao.total = $scope.termoReferenciaDetalhamentoSolucao.valor * $scope.termoReferenciaDetalhamentoSolucao.quantidade;
484   - } else {
485   - if ($scope.termoReferenciaDetalhamentoSolucao) {
486   - $scope.termoReferenciaDetalhamentoSolucao.total = null;
487   - }
488   - }
489   - });
490   - });
491   -
492   - $scope.getConfiguracoesTemplate = function () {
493   - ConfiguracaoRepository.getConfiguracao($scope.usuarioLogado.organizacao.id).then(function (result) {
494   - var configTemp = result.originalElement;
495   - var parametro;
496   - for (var i = 0; i < configTemp.parametros.length; i++){
497   - parametro = configTemp.parametros[i];
498   - switch (parametro.chave) {
499   - case "DEVERES_RESPONSABILIDADES_CONTRATANTE" :
500   - $scope.termoReferencia.deveresContratante = parametro.valor;
501   - break;
502   - case "DEVERES_RESPONSABILIDADES_CONTRATADA" :
503   - $scope.termoReferencia.deveresContratada = parametro.valor;
504   - break;
505   - case "DEVERES_RESPONSABILIDADES_ORGAO" :
506   - $scope.termoReferencia.deveresOrgaoRegistroPreco = parametro.valor;
507   - break;
508   - case "MECANISMOS_FORMAIS_COMUNICACAO" :
509   - $scope.termoReferencia.mecanismoComunicacao = parametro.valor;
510   - break;
511   - };
512   - };
513   - });
514   - };
515   -
516   - // marca DetalhamentoSolucao
517   - $scope.checkDetalhamentoSolucao = function(index) {
518   - $timeout(function() {
519   - for (var i = 0; i < $scope.termoReferencia.detalhamentosSolucoes.length; i++) {
520   - if (i == index) {
521   - $scope.termoReferencia.detalhamentosSolucoes[i].$checked = true;
522   - } else {
523   - $scope.termoReferencia.detalhamentosSolucoes[i].$checked = false;
524   - }
525   - }
526   - $scope.atualizarListaSizeSelect();
527   - });
528   - };
529   -
530   - // recupera DetalhamentoSolucao selecionada
531   - $scope.getDetalhamentoSolucaoChecked = function() {
532   - var detalhamentoSolucaoChecked = undefined;
533   - $scope.termoReferenciaDetalhamentoSolucao = {};
534   - $scope.termoReferencia.detalhamentosSolucoes.forEach(function(detalhe) {
535   - if (detalhe.$checked) {
536   - detalhamentoSolucaoChecked = detalhe;
537   - }
538   - });
539   -
540   - return detalhamentoSolucaoChecked;
541   - };
542   -
543   - // marca Penalidade
544   - $scope.checkPenalidade = function(index) {
545   - $timeout(function() {
546   - for (var i = 0; i < $scope.termoReferencia.penalidades.length; i++) {
547   - if (i == index) {
548   - $scope.termoReferencia.penalidades[i].$checked = true;
549   - } else {
550   - $scope.termoReferencia.penalidades[i].$checked = false;
551   - }
552   - }
553   - $scope.atualizarListaSizeSelectPenalidade();
554   - });
555   - };
556   -
557   - // recupera Penalidade selecionada
558   - $scope.getPenalidadeChecked = function() {
559   - var penalidadeChecked = undefined;
560   - $scope.termoReferenciaPenalidade = {};
561   - $scope.termoReferencia.penalidades.forEach(function(penalidade) {
562   - if (penalidade.$checked) {
563   - penalidadeChecked = penalidade;
564   - }
565   - });
566   -
567   - return penalidadeChecked;
568   - };
569   -
570   - // marca Sancao
571   - $scope.checkSancao = function(index) {
572   - $timeout(function() {
573   - for (var i = 0; i < $scope.termoReferencia.sancoes.length; i++) {
574   - if (i == index) {
575   - $scope.termoReferencia.sancoes[i].$checked = true;
576   - } else {
577   - $scope.termoReferencia.sancoes[i].$checked = false;
578   - }
579   - }
580   - $scope.atualizarListaSizeSelectSancao();
581   - });
582   - };
583   -
584   - // recupera Sancao selecionada
585   - $scope.getSancaoChecked = function() {
586   - var sancaoChecked = undefined;
587   - $scope.termoReferenciaSancao = {};
588   - $scope.termoReferencia.sancoes.forEach(function(sancao) {
589   - if (sancao.$checked) {
590   - sancaoChecked = sancao;
591   - }
592   - });
593   -
594   - return sancaoChecked;
595   - };
596   -
597   - $scope.preenchePapeis = function(){
598   - DominioRepository.findAllDominio('tipoPapelEquipeContratos').then(function(result) {
599   - $scope.dominioPapeis = result;
600   -
601   - angular.forEach($scope.dominioPapeis, function(value, key){
602   - $scope.papeis+= value.descricao + '\n';
603   - });
604   -
605   - });
606   -
607   - };
608   -
609   - $scope.carregarValoresPadrao = function() {
610   - DominioRepository.findAllDominioByCodigo('tipoEmpreitada', 2).then(function(result) {
611   - $scope.termoReferencia.empreitada = result.originalElement;
612   - });
613   -
614   - DominioRepository.findAllDominioByCodigo('tipoAdjudicacaoObjeto', 2).then(function(result) {
615   - $scope.termoReferencia.adjudicacaoObjeto = result.originalElement;
616   - });
617   -
618   - if($scope.dominioTiposSancaoList){
619   - angular.forEach($scope.dominioTiposSancaoList, function(sancaoDominio) {
620   - var sans = {sancao : sancaoDominio.descricao, dominioTipoSancao : sancaoDominio.originalElement, descricao : $translate.instant('LABEL.DESCREVER_SANCAO')};
621   - $scope.termoReferencia.sancoes.push(sans);
622   - });
623   - }
624   - };
625   -
626   - //###################### METODOS DA BARRA DE ACOES DO FORMULARIO ####################################
627   -
628   - function setFormsTermoReferenciaSubmitted(valor){
629   - $scope.termoReferenciaForm.$submitted = valor;
630   - $scope.termoReferenciaForm.equipeContratacaoForm.$submitted = valor;
631   - $scope.termoReferenciaForm.justificativaContratacaoForm.$submitted = valor;
632   - $scope.termoReferenciaForm.especificacoesTecnicasForm.$submitted = valor;
633   - $scope.termoReferenciaForm.modeloGestaoForm.$submitted = valor;
634   - $scope.termoReferenciaForm.sancoesForm.$submitted = valor;
635   - $scope.termoReferenciaForm.criteriosSelecaoForm.$submitted = valor;
636   - $scope.termoReferenciaForm.anexosObservacoesForm.$submitted = valor;
637   - }
638   - // SALVA O TERMO
639   - $scope.saveOrUpdate = function(){
640   -
641   - setFormsTermoReferenciaSubmitted(true);
642   -
643   - //Vefifica se o termoReferenciaForm esta invalido, caso esteja envia um alerta para o usuario
644   - if($scope.termoReferenciaForm.$invalid){
645   - $scope.showAlert('error', $translate.instant('MSG.MN001'));
646   - } else {
647   - var termoTemp = {
648   - documentos: []
649   - };
650   -
651   - // preencher lista de documentos temporarios para verificacao dos anexos. verificar qual anexo e de qual documento pelo numero do documento
652   - angular.forEach($scope.termoReferencia.documentos, function(documento, key) {
653   - if (documento.uploadsDocumento) {
654   - termoTemp.documentos.push({
655   - uploadsDocumento: clone(documento.uploadsDocumento),
656   - numero: clone(documento.numero)
657   - });
658   - // deleta esse atributo por causa de um erro de ciclo no json
659   - delete documento.uploadsDocumento;
660   - }
661   - });
662   -
663   - $scope.setLoadingSalva(true);
664   -
665   - TermoReferenciaRepository.save($scope.termoReferencia).then(function(result) {
666   -
667   - $scope.termoReferencia = result.originalElement;
668   - $scope.atualizaListaBeneficiosEsperados($scope.termoReferencia.estudoTecnico);
669   - $scope.atualizaListaJustificativasContratacao($scope.termoReferencia.estudoTecnico);
670   - $scope.atualizaInformacoesIntegrantesEstudoTecnico($scope.termoReferencia.estudoTecnico);
671   -
672   - $scope.setLoading(false);
673   - $scope.showAlert("success", $translate.instant('MSG.SUCESSO_SALVAR_TERMO_REFERENCIA'));
674   - // depois de salvar o termo ja tendo uma referencia do id do termo, esse metodo ira salvar os documentos se houver
675   - salvarListaDocumentos(termoTemp);
676   - setFormsTermoReferenciaSubmitted(false);
677   - });
678   - };
679   - };
680   -
681   - $scope.editar = function () {
682   - if ($scope.termoReferencia.dataTermoGerado){
683   - $scope.showAlert('warning', $translate.instant('MSG.TERMO_REFERENCIA_JA_GERADO'));
684   - $scope.setLoadingGet(false);
685   - } else {
686   - $scope.edit = true;
687   - $scope.pgEdit = true;
688   - }
689   - };
690   -
691   - // Consulta entidade e mostra no formulario
692   - $scope.getTermo = function(idTermo, edit) {
693   - $scope.resetForm();
694   - $scope.setLoadingGet(true);
695   -
696   - TermoReferenciaRepository.get(idTermo).then(function(result) {
697   -
698   - $scope.termoReferencia = result.originalElement;
699   - $scope.edit = edit;
700   - $scope.atualizaListaBeneficiosEsperados($scope.termoReferencia.estudoTecnico);
701   - $scope.atualizaListaJustificativasContratacao($scope.termoReferencia.estudoTecnico);
702   - $scope.atualizaInformacoesIntegrantesEstudoTecnico($scope.termoReferencia.estudoTecnico);
703   - $scope.setLoading(false);
704   - });
705   - };
706   -
707   - // MODAL QUE CONFIRMA REMOVER TERMO
708   - $scope.remover = function(termo){
709   - $scope.$openModalConfirm({
710   - message: $translate.instant('MSG.CONFIRMA_EXCLUIR_TERMO_REFERENCIA'),
711   - callback: function () {
712   - TermoReferenciaRepository.remove(termo).then(function() {
713   - $scope.termoReferencia = {};
714   -
715   - $scope.showAlert("success", $translate.instant('MSG.SUCESSO_EXCLUSAO_TERMO_REFERENCIA'));
716   - angular.element('#searchTermoReferencia').scope().fetchResult();
717   -
718   - });
719   -
720   - $scope.$modalConfirmInstance.dismiss('cancel');
721   - $scope.resetForm();
722   - }
723   - });
724   - };
725   -
726   - $scope.abrirDetalhamentoSolucao = function(edit) {
727   -
728   - $scope.termoReferenciaDetalhamentoSolucao = clone($scope.getDetalhamentoSolucaoChecked());
729   -
730   - $scope.editDetalhamento = edit;
731   -
732   - if(!edit && !$scope.termoReferenciaDetalhamentoSolucao) {//DetalhamentoSolucao
733   - $scope.showAlert('warning', $translate.instant('MSG.SELECIONE_UM_ITEM_PARA_VISUALIZACAO'));
734   - return;
735   - }
736   -
737   - if(edit && !$scope.termoReferenciaDetalhamentoSolucao) {
738   - $scope.showAlert('warning', $translate.instant('MSG.SELECIONE_UM_ITEM_PARA_EDICAO'));
739   - return;
740   - }
741   -
742   - if ($scope.termoReferenciaDetalhamentoSolucao.prazoEntrega){
743   -
744   - $scope.termoReferenciaDetalhamentoSolucao.prazoEntrega = $filter('date')( $scope.termoReferenciaDetalhamentoSolucao.prazoEntrega, "dd/MM/yyyy");
745   - }
746   -
747   - $timeout(function() {
748   - $scope.$openModal('modal-detalhamento-solucao.html', 'lg');
749   - });
750   - };
751   -
752   - $scope.abrirPenalidade = function(edit) {
753   -
754   - $scope.penalidade = clone($scope.getPenalidadeChecked());
755   -
756   - $scope.editPenalidade = edit;
757   -
758   - if(!edit && !$scope.penalidade) {
759   - $scope.showAlert('warning', $translate.instant('MSG.SELECIONE_UM_ITEM_PARA_VISUALIZACAO'));
760   - return;
761   - }
762   -
763   - if(edit && !$scope.penalidade) {
764   - $scope.showAlert('warning', $translate.instant('MSG.SELECIONE_UM_ITEM_PARA_EDICAO'));
765   - return;
766   - }
767   -
768   - $timeout(function() {
769   - $scope.$openModal('modal-penalidade.html', 'lg');
770   - });
771   - };
772   -
773   - $scope.abrirSancao = function(edit) {
774   -
775   - $scope.sancao = clone($scope.getSancaoChecked());
776   -
777   - $scope.editSancao = edit;
778   -
779   - if(!edit && !$scope.sancao) {
780   - $scope.showAlert('warning', $translate.instant('MSG.SELECIONE_UM_ITEM_PARA_VISUALIZACAO'));
781   - return;
782   - }
783   -
784   - if(edit && !$scope.sancao) {
785   - $scope.showAlert('warning', $translate.instant('MSG.SELECIONE_UM_ITEM_PARA_EDICAO'));
786   - return;
787   - }
788   -
789   - $timeout(function() {
790   - $scope.$openModal('modal-sancao.html', 'lg');
791   - });
792   - };
793   -
794   - $scope.removerPenalidade = function() {
795   - $scope.penalidade = $scope.getPenalidadeChecked();
796   -
797   - if ($scope.penalidade) {
798   - $scope.$openModalConfirm({
799   - message: $translate.instant('MSG.CONFIRMA_EXCLUSAO'),
800   - callback: function() {
801   - var index = 0;
802   -
803   - $scope.termoReferencia.penalidades.forEach(function(penalidade, key) {
804   - if (penalidade.$checked) {
805   - index = key;
806   - }
807   - });
808   -
809   - $scope.termoReferencia.penalidades.splice(index, 1);
810   - $scope.atualizarListaSizeSelectPenalidade();
811   - $scope.$modalConfirmInstance.dismiss('cancel');
812   - }
813   - });
814   - } else {
815   - $scope.showAlert('warning', $translate.instant('MSG.SELECIONE_UM_ITEM_PARA_SER_REMOVIDO'));
816   - }
817   - };
818   -
819   - $scope.removerSancao = function() {
820   - $scope.sancao = $scope.getSancaoChecked();
821   -
822   - if ($scope.sancao) {
823   - EventoRegistroNaoConformidadeRepository.existeVinculoSancoesComNaoConformidade($scope.sancao.id).then(function(result) {
824   - if(result){
825   - $scope.showAlert('warning', $translate.instant('CONTRATOS.MSG.SANCAO_VINCULADA_NAO_CONFORMIDADE'));
826   - }else{
827   - $scope.$openModalConfirm({
828   - message: $translate.instant('MSG.CONFIRMA_EXCLUSAO'),
829   - callback: function() {
830   - var index = 0;
831   -
832   - $scope.termoReferencia.sancoes.forEach(function(sancao, key) {
833   - if (sancao.$checked) {
834   - index = key;
835   - }
836   - });
837   -
838   -
839   - $scope.termoReferencia.sancoes.splice(index, 1);
840   - $scope.atualizarListaSizeSelectSancao();
841   - $scope.$modalConfirmInstance.dismiss('cancel');
842   - }
843   - });
844   - }
845   - });
846   - } else {
847   - $scope.showAlert('warning', $translate.instant('MSG.SELECIONE_UM_ITEM_PARA_SER_REMOVIDO'));
848   - }
849   - };
850   -
851   - $scope.removerDetalhamentoSolucao = function() {
852   - $scope.termoReferenciaDetalhamentoSolucao = $scope.getDetalhamentoSolucaoChecked();
853   -
854   - if ($scope.termoReferenciaDetalhamentoSolucao) {
855   - $scope.$openModalConfirm({
856   - message: $translate.instant('MSG.CONFIRMA_EXCLUSAO'),
857   - callback: function() {
858   - var index = 0;
859   -
860   - $scope.termoReferencia.detalhamentosSolucoes.forEach(function(detalhamento, key) {
861   - if (detalhamento.$checked) {
862   - index = key;
863   - }
864   - });
865   -
866   - $scope.termoReferencia.detalhamentosSolucoes.splice(index, 1);
867   - $scope.atualizarListaSizeSelect();
868   - $scope.$modalConfirmInstance.dismiss('cancel');
869   - }
870   - });
871   - } else {
872   - $scope.showAlert('warning', $translate.instant('MSG.SELECIONE_UM_ITEM_PARA_SER_REMOVIDO'));
873   - }
874   - };
875   -
876   -
877   -
878   -/*##################################
879   -* # METODOS RELACIONADOS AO WIZARD #
880   -* ##################################*/
881   -
882   - function createTemplates(){
883   - $scope.templates = [{ name: 'termoReferenciaPg1.html', url: '/cit-contratos-web/html/termoReferencia/termoReferenciaPg1.html', show: true },
884   - { name: 'termoReferenciaPg2.html', url: '/cit-contratos-web/html/termoReferencia/termoReferenciaPg2.html', show: false},
885   - { name: 'termoReferenciaPg3.html', url: '/cit-contratos-web/html/termoReferencia/termoReferenciaPg3.html', show: false},
886   - { name: 'termoReferenciaPg4.html', url: '/cit-contratos-web/html/termoReferencia/termoReferenciaPg4.html', show: false},
887   - { name: 'termoReferenciaPg5.html', url: '/cit-contratos-web/html/termoReferencia/termoReferenciaPg5.html', show: false},
888   - { name: 'termoReferenciaPg6.html', url: '/cit-contratos-web/html/termoReferencia/termoReferenciaPg6.html', show: false},
889   - { name: 'termoReferenciaPg7.html', url: '/cit-contratos-web/html/termoReferencia/termoReferenciaPg7.html', show: false}];
890   - };
891   -
892   - createTemplates();
893   -
894   - $scope.step = 0;
895   -
896   - // Verifica se o passo e o primeiro passo do wizard
897   - $scope.isFirstStep = function () {
898   - return $scope.step === 0;
899   - };
900   -
901   - // Verifica é o ultimo passo do wizard
902   - $scope.isLastStep = function () {
903   - return $scope.step === ($scope.templates.length - 1);
904   - };
905   -
906   - // Verifica se o passo e o passo atual do wizard
907   - $scope.isCurrentStep = function (step) {
908   - return $scope.step === step;
909   - };
910   -
911   - // Recupera o label do botao de comando
912   - $scope.getNextLabel = function () {
913   - return ($scope.isLastStep()) ? $translate.instant("LABEL.SALVAR") : $translate.instant("LABEL.PROXIMO");
914   - };
915   -
916   - // Utilizado pelo wizard para mudar para o passo desejado
917   - $scope.setCurrentStep = function (step) {
918   -
919   - $scope.setLoadingGet(true);
920   -
921   - if (step <= ($scope.step - 1)) {
922   - $scope.templates[$scope.step].show = false;
923   - $scope.step = step;
924   - $scope.templates[step].show = true;
925   - } else {
926   - if (!$scope.edit) {
927   - $scope.permitidoAvancar = true;
928   - } else {
929   - permiteAvancoFluxo();
930   - }
931   -
932   - if ($scope.permitidoAvancar) {
933   - $scope.templates[$scope.step].show = false;
934   - $scope.step = step;
935   - $scope.templates[step].show = true;
936   - }
937   - }
938   - $scope.setLoading(false);
939   - };
940   -
941   - // Faz com o que o wizard retroceda um passo
942   - $scope.handlePrevious = function () {
943   -
944   - $scope.setLoadingGet(true);
945   -
946   - $scope.templates[$scope.step].show = false;
947   - $scope.step -= ($scope.isFirstStep()) ? 0 : 1;
948   - $scope.templates[$scope.step].show = true;
949   -
950   - $scope.setLoading(false);
951   -
952   - };
953   -
954   - // Faz com o que o wizard avance um passo
955   - $scope.handleNext = function () {
956   -
957   - if ($scope.isLastStep()) {
958   - $scope.saveOrUpdate();
959   - } else {
960   - $scope.setLoadingGet(true);
961   -
962   - if (!$scope.edit) {
963   - $scope.permitidoAvancar = true;
964   - } else {
965   - permiteAvancoFluxo();
966   - }
967   -
968   - if ($scope.permitidoAvancar) {
969   - $scope.templates[$scope.step].show = false;
970   - $scope.step += 1;
971   - $scope.templates[$scope.step].show = true;
972   - }
973   - $scope.setLoading(false);
974   - }
975   - };
976   -
977   -
978   -//Controla se o usuario pode avancar o fluxo no wizard, validando os itens obrigatorios
979   - function permiteAvancoFluxo() {
980   -
981   - $scope.permitidoAvancar = true;
982   -
983   - switch ($scope.step) {
984   - case 0 :
985   - //equipeContratacaoForm
986   - if (isFormValid($scope.termoReferenciaForm.equipeContratacaoForm) && $scope.permitidoAvancar) {
987   - $scope.termoReferenciaForm.equipeContratacaoForm.$submitted = true;
988   - }
989   - break;
990   - case 1 :
991   - //justificativaContratacaoForm
992   - if (isFormValid($scope.termoReferenciaForm.justificativaContratacaoForm) && $scope.termoReferencia.detalhamentosSolucoes.length >= 1 && $scope.permitidoAvancar) {
993   - $scope.termoReferenciaForm.justificativaContratacaoForm.$submitted = true;
994   - }
995   - break;
996   - case 2 :
997   - //especificacoesTecnicasForm
998   - if (isFormValid($scope.termoReferenciaForm.especificacoesTecnicasForm) && $scope.permitidoAvancar) {
999   - $scope.termoReferenciaForm.especificacoesTecnicasForm.$submitted = true;
1000   - }
1001   - break;
1002   - case 3 :
1003   - //modeloGestaoForm
1004   - if (isFormValid($scope.termoReferenciaForm.modeloGestaoForm) && $scope.permitidoAvancar) {
1005   - $scope.termoReferenciaForm.modeloGestaoForm.$submitted = true;
1006   - }
1007   - break;
1008   - case 4 :
1009   - //sancoesForm
1010   - if (($scope.termoReferencia.sancoes.length >= 1 || $scope.termoReferencia.penalidades.length >= 1) && $scope.permitidoAvancar) {
1011   - $scope.termoReferenciaForm.sancoesForm.$submitted = true;
1012   - }
1013   - break;
1014   - case 5 :
1015   - //criteriosSelecaoForm
1016   - if (isFormValid($scope.termoReferenciaForm.criteriosSelecaoForm) && $scope.permitidoAvancar) {
1017   - $scope.termoReferenciaForm.criteriosSelecaoForm.$submitted = true;
1018   - }
1019   - break;
1020   - case 6 :
1021   - //anexosObservacoesForm
1022   - $scope.termoReferenciaForm.anexosObservacoesForm.$submitted = true;
1023   - break;
1024   - }
1025   -
1026   - if (!$scope.permitidoAvancar && !$scope.stepValid) {
1027   - //Mensagem de erro de campos obrigatorios nao preenchidos
1028   - $scope.showAlert('error', $translate.instant('VALIDACAO.ALERTA_OBRIGATORIOS'), " ", false);
1029   - }
1030   - };
1031   -
1032   - //Evita erros verificando se determinadas propriedades existem no form.
1033   - function isFormValid (form) {
1034   - $scope.stepValid = true;
1035   - if (form && form.$invalid) {
1036   - $scope.stepValid = false;
1037   - }
1038   - return $scope.stepValid;
1039   - };
1040   - //Evita erros verificando se determinadas propriedades existem no form.
1041   - function isFormSubmited (form){
1042   - var submitted = false;
1043   - if(form && form.$submitted){
1044   - submitted = true;
1045   - }
1046   - return submitted;
1047   - }
1048   -
1049   -
1050   - $scope.getClassEdit = function (step){
1051   -
1052   - switch (step) {
1053   - case 0 :
1054   - //equipeContratacaoForm
1055   - return {'active': $scope.isCurrentStep(step),
1056   - 'complete' : ($scope.step >= step && isFormValid($scope.termoReferenciaForm.equipeContratacaoForm)),
1057   - 'invalid' : (isFormSubmited($scope.termoReferenciaForm.equipeContratacaoForm)|| $scope.step > step) && (!isFormValid($scope.termoReferenciaForm.equipeContratacaoForm))};
1058   - break;
1059   - case 1 :
1060   - //justificativaContratacaoForm
1061   - return {'active': $scope.isCurrentStep(step),
1062   - 'complete' : ($scope.step > step && isFormValid($scope.termoReferenciaForm.justificativaContratacaoForm) && $scope.termoReferencia.detalhamentosSolucoes.length >= 1 ),
1063   - 'invalid' : (isFormSubmited($scope.termoReferenciaForm.justificativaContratacaoForm) || $scope.step > step) && (!isFormValid($scope.termoReferenciaForm.justificativaContratacaoForm) || $scope.termoReferencia.detalhamentosSolucoes.length < 1)};
1064   - break;
1065   - case 2 :
1066   - //especificacoesTecnicasForm
1067   - return {'active': $scope.isCurrentStep(step),
1068   - 'complete' : ($scope.step > step && isFormValid($scope.termoReferenciaForm.especificacoesTecnicasForm)),
1069   - 'invalid' : (isFormSubmited($scope.termoReferenciaForm.especificacoesTecnicasForm) || $scope.step > step) && !isFormValid($scope.termoReferenciaForm.especificacoesTecnicasForm)};
1070   - break;
1071   - case 3 :
1072   - //modeloGestaoForm
1073   - return {'active': $scope.isCurrentStep(step),
1074   - 'complete' : ($scope.step > step || ($scope.step > step && isFormSubmited($scope.termoReferenciaForm.modeloGestaoForm)))};
1075   - break;
1076   - case 4 :
1077   - //sancoesForm
1078   - return {'active': $scope.isCurrentStep(step),
1079   - 'complete' : ($scope.step > step && isFormValid($scope.termoReferenciaForm.sancoesForm) && ($scope.termoReferencia.sancoes.length >= 1 && $scope.termoReferencia.penalidades.length >= 1)),
1080   - 'invalid' : ($scope.step > step && ($scope.termoReferencia.sancoes.length < 1 || $scope.termoReferencia.penalidades.length < 1))};
1081   - break;
1082   - case 5 :
1083   - //criteriosSelecaoForm
1084   - return {'active': $scope.isCurrentStep(step),
1085   - 'complete' : ($scope.step > step && isFormValid($scope.termoReferenciaForm.criteriosSelecaoForm)),
1086   - 'invalid' : ((isFormSubmited($scope.termoReferenciaForm.criteriosSelecaoForm) || $scope.step > step) && !isFormValid($scope.termoReferenciaForm.criteriosSelecaoForm))};
1087   - break;
1088   - case 6 :
1089   - //anexosObservacoesForm
1090   - return {'active': $scope.isCurrentStep(step) || isFormSubmited($scope.termoReferenciaForm.anexosObservacoesForm),
1091   - 'complete' : ($scope.isCurrentStep(step) || ($scope.step > step && isFormSubmited($scope.termoReferenciaForm.anexosObservacoesForm)))};
1092   - break;
1093   - };
1094   - };
1095   -
1096   - $scope.getClassList = function (){
1097   - return {'active': false, 'complete' : true, 'invalid' : false};
1098   - };
  440 + };
  441 +
  442 + // ADICIONAR Penalidade
  443 + $scope.addSancao = function(formSancao, continuarEditando) {
  444 +
  445 + var sans = $scope.sancao;
  446 +
  447 + formSancao.$submitted = true;
  448 +
  449 + //verifica se o formulario esta valido para salvar
  450 + if (formSancao.$invalid) {
  451 + //Mensagem de erro de campos obrigatorios nao preenchidos
  452 + $scope.showAlert('error', $translate.instant('VALIDACAO.ALERTA_OBRIGATORIOS'), " ", false);
  453 + return;
  454 + }
  455 +
  456 + $scope.setLoadingSalva(true);
  457 +
  458 + if (sans.$index != undefined && sans.$index != null) {
  459 + $scope.termoReferencia.sancoes[sans.$index] = sans;
  460 + } else {
  461 + $scope.termoReferencia.sancoes.push(sans);
  462 + }
  463 +
  464 + $scope.setLoadingSalva(false);
  465 +
  466 + if(continuarEditando){
  467 + formSancao.$submitted = false;
  468 + formSancao.$setPristine();
  469 + $scope.sancao = {};
  470 + } else {
  471 + $scope.$modalInstance.dismiss('cancel');
  472 + }
  473 + };
  474 +
  475 + //Watch para calcular total
  476 + $scope.$watch('termoReferenciaDetalhamentoSolucao.valor', function() {
  477 + $timeout(function() {
  478 + if ($scope.termoReferenciaDetalhamentoSolucao && ($scope.termoReferenciaDetalhamentoSolucao.valor && $scope.termoReferenciaDetalhamentoSolucao.quantidade)) {
  479 + $scope.termoReferenciaDetalhamentoSolucao.total = $scope.termoReferenciaDetalhamentoSolucao.valor * $scope.termoReferenciaDetalhamentoSolucao.quantidade;
  480 + } else {
  481 + if ($scope.termoReferenciaDetalhamentoSolucao) {
  482 + $scope.termoReferenciaDetalhamentoSolucao.total = null;
  483 + }
  484 + }
  485 + });
  486 + });
  487 +
  488 + //Watch para calcular total
  489 + $scope.$watch('termoReferenciaDetalhamentoSolucao.quantidade', function() {
  490 + $timeout(function() {
  491 + if ($scope.termoReferenciaDetalhamentoSolucao && ($scope.termoReferenciaDetalhamentoSolucao.valor && $scope.termoReferenciaDetalhamentoSolucao.quantidade)) {
  492 + $scope.termoReferenciaDetalhamentoSolucao.total = $scope.termoReferenciaDetalhamentoSolucao.valor * $scope.termoReferenciaDetalhamentoSolucao.quantidade;
  493 + } else {
  494 + if ($scope.termoReferenciaDetalhamentoSolucao) {
  495 + $scope.termoReferenciaDetalhamentoSolucao.total = null;
  496 + }
  497 + }
  498 + });
  499 + });
  500 +
  501 + $scope.getConfiguracoesTemplate = function () {
  502 + ConfiguracaoRepository.getConfiguracao($scope.usuarioLogado.organizacao.id).then(function (result) {
  503 + var configTemp = result.originalElement;
  504 + var parametro;
  505 + for (var i = 0; i < configTemp.parametros.length; i++){
  506 + parametro = configTemp.parametros[i];
  507 + switch (parametro.chave) {
  508 + case "DEVERES_RESPONSABILIDADES_CONTRATANTE" :
  509 + $scope.termoReferencia.deveresContratante = parametro.valor;
  510 + break;
  511 + case "DEVERES_RESPONSABILIDADES_CONTRATADA" :
  512 + $scope.termoReferencia.deveresContratada = parametro.valor;
  513 + break;
  514 + case "DEVERES_RESPONSABILIDADES_ORGAO" :
  515 + $scope.termoReferencia.deveresOrgaoRegistroPreco = parametro.valor;
  516 + break;
  517 + case "MECANISMOS_FORMAIS_COMUNICACAO" :
  518 + $scope.termoReferencia.mecanismoComunicacao = parametro.valor;
  519 + break;
  520 + };
  521 + };
  522 + });
  523 + };
  524 +
  525 + // marca DetalhamentoSolucao
  526 + $scope.checkDetalhamentoSolucao = function(index) {
  527 + $timeout(function() {
  528 + for (var i = 0; i < $scope.termoReferencia.detalhamentosSolucoes.length; i++) {
  529 + if (i == index) {
  530 + $scope.termoReferencia.detalhamentosSolucoes[i].$checked = true;
  531 + } else {
  532 + $scope.termoReferencia.detalhamentosSolucoes[i].$checked = false;
  533 + }
  534 + }
  535 + $scope.atualizarListaSizeSelect();
  536 + });
  537 + };
  538 +
  539 + // recupera DetalhamentoSolucao selecionada
  540 + $scope.getDetalhamentoSolucaoChecked = function() {
  541 + var detalhamentoSolucaoChecked = undefined;
  542 + $scope.termoReferenciaDetalhamentoSolucao = {};
  543 + $scope.termoReferencia.detalhamentosSolucoes.forEach(function(detalhe) {
  544 + if (detalhe.$checked) {
  545 + detalhamentoSolucaoChecked = detalhe;
  546 + }
  547 + });
  548 +
  549 + return detalhamentoSolucaoChecked;
  550 + };
  551 +
  552 + // marca Penalidade
  553 + $scope.checkPenalidade = function(index) {
  554 + $timeout(function() {
  555 + for (var i = 0; i < $scope.termoReferencia.penalidades.length; i++) {
  556 + if (i == index) {
  557 + $scope.termoReferencia.penalidades[i].$checked = true;
  558 + } else {
  559 + $scope.termoReferencia.penalidades[i].$checked = false;
  560 + }
  561 + }
  562 + $scope.atualizarListaSizeSelectPenalidade();
  563 + });
  564 + };
  565 +
  566 + // recupera Penalidade selecionada
  567 + $scope.getPenalidadeChecked = function() {
  568 + var penalidadeChecked = undefined;
  569 + $scope.termoReferenciaPenalidade = {};
  570 + $scope.termoReferencia.penalidades.forEach(function(penalidade) {
  571 + if (penalidade.$checked) {
  572 + penalidadeChecked = penalidade;
  573 + }
  574 + });
  575 +
  576 + return penalidadeChecked;
  577 + };
  578 +
  579 + // marca Sancao
  580 + $scope.checkSancao = function(index) {
  581 + $timeout(function() {
  582 + for (var i = 0; i < $scope.termoReferencia.sancoes.length; i++) {
  583 + if (i == index) {
  584 + $scope.termoReferencia.sancoes[i].$checked = true;
  585 + } else {
  586 + $scope.termoReferencia.sancoes[i].$checked = false;
  587 + }
  588 + }
  589 + $scope.atualizarListaSizeSelectSancao();
  590 + });
  591 + };
  592 +
  593 + // recupera Sancao selecionada
  594 + $scope.getSancaoChecked = function() {
  595 + var sancaoChecked = undefined;
  596 + $scope.termoReferenciaSancao = {};
  597 + $scope.termoReferencia.sancoes.forEach(function(sancao) {
  598 + if (sancao.$checked) {
  599 + sancaoChecked = sancao;
  600 + }
  601 + });
  602 +
  603 + return sancaoChecked;
  604 + };
  605 +
  606 + $scope.preenchePapeis = function(){
  607 + DominioRepository.findAllDominio('tipoPapelEquipeContratos').then(function(result) {
  608 + $scope.dominioPapeis = result;
  609 +
  610 + angular.forEach($scope.dominioPapeis, function(value, key){
  611 + $scope.papeis+= value.descricao + '\n';
  612 + });
  613 +
  614 + });
  615 +
  616 + };
  617 +
  618 + $scope.carregarValoresPadrao = function() {
  619 + DominioRepository.findAllDominioByCodigo('tipoEmpreitada', 2).then(function(result) {
  620 + $scope.termoReferencia.empreitada = result.originalElement;
  621 + });
  622 +
  623 + DominioRepository.findAllDominioByCodigo('tipoAdjudicacaoObjeto', 2).then(function(result) {
  624 + $scope.termoReferencia.adjudicacaoObjeto = result.originalElement;
  625 + });
  626 +
  627 + if($scope.dominioTiposSancaoList){
  628 + angular.forEach($scope.dominioTiposSancaoList, function(sancaoDominio) {
  629 + var sans = {sancao : sancaoDominio.descricao, dominioTipoSancao : sancaoDominio.originalElement, descricao : $translate.instant('LABEL.DESCREVER_SANCAO')};
  630 + $scope.termoReferencia.sancoes.push(sans);
  631 + });
  632 + }
  633 + };
  634 +
  635 + //###################### METODOS DA BARRA DE ACOES DO FORMULARIO ####################################
  636 +
  637 + function setFormsTermoReferenciaSubmitted(valor){
  638 + $scope.termoReferenciaForm.$submitted = valor;
  639 + $scope.termoReferenciaForm.equipeContratacaoForm.$submitted = valor;
  640 + $scope.termoReferenciaForm.justificativaContratacaoForm.$submitted = valor;
  641 + $scope.termoReferenciaForm.especificacoesTecnicasForm.$submitted = valor;
  642 + $scope.termoReferenciaForm.modeloGestaoForm.$submitted = valor;
  643 + $scope.termoReferenciaForm.sancoesForm.$submitted = valor;
  644 + $scope.termoReferenciaForm.criteriosSelecaoForm.$submitted = valor;
  645 + $scope.termoReferenciaForm.anexosObservacoesForm.$submitted = valor;
  646 + }
  647 + // SALVA O TERMO
  648 + $scope.saveOrUpdate = function(){
  649 +
  650 + setFormsTermoReferenciaSubmitted(true);
  651 +
  652 + //Vefifica se o termoReferenciaForm esta invalido, caso esteja envia um alerta para o usuario
  653 + if($scope.termoReferenciaForm.$invalid){
  654 + $scope.showAlert('error', $translate.instant('MSG.MN001'));
  655 + } else {
  656 + var termoTemp = {
  657 + documentos: []
  658 + };
  659 +
  660 + // preencher lista de documentos temporarios para verificacao dos anexos. verificar qual anexo e de qual documento pelo numero do documento
  661 + angular.forEach($scope.termoReferencia.documentos, function(documento, key) {
  662 + if (documento.uploadsDocumento) {
  663 + termoTemp.documentos.push({
  664 + uploadsDocumento: clone(documento.uploadsDocumento),
  665 + numero: clone(documento.numero)
  666 + });
  667 + // deleta esse atributo por causa de um erro de ciclo no json
  668 + delete documento.uploadsDocumento;
  669 + }
  670 + });
  671 +
  672 + $scope.setLoadingSalva(true);
  673 +
  674 + $scope.termoReferencia.rascunho = $scope.workspace.rascunho.id;
  675 + TermoReferenciaRepository.save($scope.termoReferencia).then(function(result) {
  676 +
  677 + $scope.termoReferencia = result.originalElement;
  678 + $scope.atualizaListaBeneficiosEsperados($scope.termoReferencia.estudoTecnico);
  679 + $scope.atualizaListaJustificativasContratacao($scope.termoReferencia.estudoTecnico);
  680 + $scope.atualizaInformacoesIntegrantesEstudoTecnico($scope.termoReferencia.estudoTecnico);
  681 +
  682 + $scope.setLoading(false);
  683 + $scope.showAlert("success", $translate.instant('MSG.SUCESSO_SALVAR_TERMO_REFERENCIA'));
  684 + // depois de salvar o termo ja tendo uma referencia do id do termo, esse metodo ira salvar os documentos se houver
  685 + salvarListaDocumentos(termoTemp);
  686 + setFormsTermoReferenciaSubmitted(false);
  687 + });
  688 + };
  689 + };
  690 +
  691 + $scope.editar = function () {
  692 + if ($scope.termoReferencia.dataTermoGerado){
  693 + $scope.showAlert('warning', $translate.instant('MSG.TERMO_REFERENCIA_JA_GERADO'));
  694 + $scope.setLoadingGet(false);
  695 + } else {
  696 + $scope.edit = true;
  697 + $scope.pgEdit = true;
  698 + }
  699 + };
  700 +
  701 + // Consulta entidade e mostra no formulario
  702 + $scope.getTermo = function(idTermo, edit) {
  703 + $scope.resetForm();
  704 + $scope.setLoadingGet(true);
  705 +
  706 + TermoReferenciaRepository.get(idTermo).then(function(result) {
  707 +
  708 + $scope.termoReferencia = result.originalElement;
  709 + $scope.edit = edit;
  710 + $scope.atualizaListaBeneficiosEsperados($scope.termoReferencia.estudoTecnico);
  711 + $scope.atualizaListaJustificativasContratacao($scope.termoReferencia.estudoTecnico);
  712 + $scope.atualizaInformacoesIntegrantesEstudoTecnico($scope.termoReferencia.estudoTecnico);
  713 + $scope.setLoading(false);
  714 + });
  715 + };
  716 +
  717 + // MODAL QUE CONFIRMA REMOVER TERMO
  718 + $scope.remover = function(termo){
  719 + $scope.$openModalConfirm({
  720 + message: $translate.instant('MSG.CONFIRMA_EXCLUIR_TERMO_REFERENCIA'),
  721 + callback: function () {
  722 + TermoReferenciaRepository.remove(termo).then(function() {
  723 + $scope.termoReferencia = {};
  724 +
  725 + $scope.showAlert("success", $translate.instant('MSG.SUCESSO_EXCLUSAO_TERMO_REFERENCIA'));
  726 + angular.element('#searchTermoReferencia').scope().fetchResult();
  727 +
  728 + });
  729 +
  730 + $scope.$modalConfirmInstance.dismiss('cancel');
  731 + $scope.resetForm();
  732 + }
  733 + });
  734 + };
  735 +
  736 + $scope.abrirDetalhamentoSolucao = function(edit) {
  737 +
  738 + $scope.termoReferenciaDetalhamentoSolucao = clone($scope.getDetalhamentoSolucaoChecked());
  739 +
  740 + $scope.editDetalhamento = edit;
  741 +
  742 + if(!edit && !$scope.termoReferenciaDetalhamentoSolucao) {//DetalhamentoSolucao
  743 + $scope.showAlert('warning', $translate.instant('MSG.SELECIONE_UM_ITEM_PARA_VISUALIZACAO'));
  744 + return;
  745 + }
  746 +
  747 + if(edit && !$scope.termoReferenciaDetalhamentoSolucao) {
  748 + $scope.showAlert('warning', $translate.instant('MSG.SELECIONE_UM_ITEM_PARA_EDICAO'));
  749 + return;
  750 + }
  751 +
  752 + if ($scope.termoReferenciaDetalhamentoSolucao.prazoEntrega){
  753 +
  754 + $scope.termoReferenciaDetalhamentoSolucao.prazoEntrega = $filter('date')( $scope.termoReferenciaDetalhamentoSolucao.prazoEntrega, "dd/MM/yyyy");
  755 + }
  756 +
  757 + $timeout(function() {
  758 + $scope.$openModal('modal-detalhamento-solucao.html', 'lg');
  759 + });
  760 + };
  761 +
  762 + $scope.abrirPenalidade = function(edit) {
  763 +
  764 + $scope.penalidade = clone($scope.getPenalidadeChecked());
  765 +
  766 + $scope.editPenalidade = edit;
  767 +
  768 + if(!edit && !$scope.penalidade) {
  769 + $scope.showAlert('warning', $translate.instant('MSG.SELECIONE_UM_ITEM_PARA_VISUALIZACAO'));
  770 + return;
  771 + }
  772 +
  773 + if(edit && !$scope.penalidade) {
  774 + $scope.showAlert('warning', $translate.instant('MSG.SELECIONE_UM_ITEM_PARA_EDICAO'));
  775 + return;
  776 + }
  777 +
  778 + $timeout(function() {
  779 + $scope.$openModal('modal-penalidade.html', 'lg');
  780 + });
  781 + };
  782 +
  783 + $scope.abrirSancao = function(edit) {
  784 +
  785 + $scope.sancao = clone($scope.getSancaoChecked());
  786 +
  787 + $scope.editSancao = edit;
  788 +
  789 + if(!edit && !$scope.sancao) {
  790 + $scope.showAlert('warning', $translate.instant('MSG.SELECIONE_UM_ITEM_PARA_VISUALIZACAO'));
  791 + return;
  792 + }
  793 +
  794 + if(edit && !$scope.sancao) {
  795 + $scope.showAlert('warning', $translate.instant('MSG.SELECIONE_UM_ITEM_PARA_EDICAO'));
  796 + return;
  797 + }
  798 +
  799 + $timeout(function() {
  800 + $scope.$openModal('modal-sancao.html', 'lg');
  801 + });
  802 + };
  803 +
  804 + $scope.removerPenalidade = function() {
  805 + $scope.penalidade = $scope.getPenalidadeChecked();
  806 +
  807 + if ($scope.penalidade) {
  808 + $scope.$openModalConfirm({
  809 + message: $translate.instant('MSG.CONFIRMA_EXCLUSAO'),
  810 + callback: function() {
  811 + var index = 0;
  812 +
  813 + $scope.termoReferencia.penalidades.forEach(function(penalidade, key) {
  814 + if (penalidade.$checked) {
  815 + index = key;
  816 + }
  817 + });
  818 +
  819 + $scope.termoReferencia.penalidades.splice(index, 1);
  820 + $scope.atualizarListaSizeSelectPenalidade();
  821 + $scope.$modalConfirmInstance.dismiss('cancel');
  822 + }
  823 + });
  824 + } else {
  825 + $scope.showAlert('warning', $translate.instant('MSG.SELECIONE_UM_ITEM_PARA_SER_REMOVIDO'));
  826 + }
  827 + };
  828 +
  829 + $scope.removerSancao = function() {
  830 + $scope.sancao = $scope.getSancaoChecked();
  831 +
  832 + if ($scope.sancao) {
  833 + EventoRegistroNaoConformidadeRepository.existeVinculoSancoesComNaoConformidade($scope.sancao.id).then(function(result) {
  834 + if(result){
  835 + $scope.showAlert('warning', $translate.instant('CONTRATOS.MSG.SANCAO_VINCULADA_NAO_CONFORMIDADE'));
  836 + }else{
  837 + $scope.$openModalConfirm({
  838 + message: $translate.instant('MSG.CONFIRMA_EXCLUSAO'),
  839 + callback: function() {
  840 + var index = 0;
  841 +
  842 + $scope.termoReferencia.sancoes.forEach(function(sancao, key) {
  843 + if (sancao.$checked) {
  844 + index = key;
  845 + }
  846 + });
  847 +
  848 +
  849 + $scope.termoReferencia.sancoes.splice(index, 1);
  850 + $scope.atualizarListaSizeSelectSancao();
  851 + $scope.$modalConfirmInstance.dismiss('cancel');
  852 + }
  853 + });
  854 + }
  855 + });
  856 + } else {
  857 + $scope.showAlert('warning', $translate.instant('MSG.SELECIONE_UM_ITEM_PARA_SER_REMOVIDO'));
  858 + }
  859 + };
  860 +
  861 + $scope.removerDetalhamentoSolucao = function() {
  862 + $scope.termoReferenciaDetalhamentoSolucao = $scope.getDetalhamentoSolucaoChecked();
  863 +
  864 + if ($scope.termoReferenciaDetalhamentoSolucao) {
  865 + $scope.$openModalConfirm({
  866 + message: $translate.instant('MSG.CONFIRMA_EXCLUSAO'),
  867 + callback: function() {
  868 + var index = 0;
  869 +
  870 + $scope.termoReferencia.detalhamentosSolucoes.forEach(function(detalhamento, key) {
  871 + if (detalhamento.$checked) {
  872 + index = key;
  873 + }
  874 + });
  875 +
  876 + $scope.termoReferencia.detalhamentosSolucoes.splice(index, 1);
  877 + $scope.atualizarListaSizeSelect();
  878 + $scope.$modalConfirmInstance.dismiss('cancel');
  879 + }
  880 + });
  881 + } else {
  882 + $scope.showAlert('warning', $translate.instant('MSG.SELECIONE_UM_ITEM_PARA_SER_REMOVIDO'));
  883 + }
  884 + };
  885 +
  886 +
  887 +
  888 + /*##################################
  889 + * # METODOS RELACIONADOS AO WIZARD #
  890 + * ##################################*/
  891 +
  892 + function createTemplates(){
  893 + $scope.templates = [{ name: 'termoReferenciaPg1.html', url: '/cit-contratos-web/html/termoReferencia/termoReferenciaPg1.html', show: true },
  894 + { name: 'termoReferenciaPg2.html', url: '/cit-contratos-web/html/termoReferencia/termoReferenciaPg2.html', show: false},
  895 + { name: 'termoReferenciaPg3.html', url: '/cit-contratos-web/html/termoReferencia/termoReferenciaPg3.html', show: false},
  896 + { name: 'termoReferenciaPg4.html', url: '/cit-contratos-web/html/termoReferencia/termoReferenciaPg4.html', show: false},
  897 + { name: 'termoReferenciaPg5.html', url: '/cit-contratos-web/html/termoReferencia/termoReferenciaPg5.html', show: false},
  898 + { name: 'termoReferenciaPg6.html', url: '/cit-contratos-web/html/termoReferencia/termoReferenciaPg6.html', show: false},
  899 + { name: 'termoReferenciaPg7.html', url: '/cit-contratos-web/html/termoReferencia/termoReferenciaPg7.html', show: false}];
  900 + };
  901 +
  902 + createTemplates();
  903 +
  904 + $scope.step = 0;
  905 +
  906 + // Verifica se o passo e o primeiro passo do wizard
  907 + $scope.isFirstStep = function () {
  908 + return $scope.step === 0;
  909 + };
  910 +
  911 + // Verifica é o ultimo passo do wizard
  912 + $scope.isLastStep = function () {
  913 + return $scope.step === ($scope.templates.length - 1);
  914 + };
  915 +
  916 + // Verifica se o passo e o passo atual do wizard
  917 + $scope.isCurrentStep = function (step) {
  918 + return $scope.step === step;
  919 + };
  920 +
  921 + // Recupera o label do botao de comando
  922 + $scope.getNextLabel = function () {
  923 + return ($scope.isLastStep()) ? $translate.instant("LABEL.SALVAR") : $translate.instant("LABEL.PROXIMO");
  924 + };
  925 +
  926 + // Utilizado pelo wizard para mudar para o passo desejado
  927 + $scope.setCurrentStep = function (step) {
  928 +
  929 + $scope.setLoadingGet(true);
  930 +
  931 + if (step <= ($scope.step - 1)) {
  932 + $scope.templates[$scope.step].show = false;
  933 + $scope.step = step;
  934 + $scope.templates[step].show = true;
  935 + } else {
  936 + if (!$scope.edit) {
  937 + $scope.permitidoAvancar = true;
  938 + } else {
  939 + permiteAvancoFluxo();
  940 + }
  941 +
  942 + if ($scope.permitidoAvancar) {
  943 + $scope.templates[$scope.step].show = false;
  944 + $scope.step = step;
  945 + $scope.templates[step].show = true;
  946 + }
  947 + }
  948 + $scope.setLoading(false);
  949 + };
  950 +
  951 + // Faz com o que o wizard retroceda um passo
  952 + $scope.handlePrevious = function () {
  953 +
  954 + $scope.setLoadingGet(true);
  955 +
  956 + $scope.templates[$scope.step].show = false;
  957 + $scope.step -= ($scope.isFirstStep()) ? 0 : 1;
  958 + $scope.templates[$scope.step].show = true;
  959 +
  960 + $scope.setLoading(false);
  961 +
  962 + };
  963 +
  964 + // Faz com o que o wizard avance um passo
  965 + $scope.handleNext = function () {
  966 +
  967 + if ($scope.isLastStep()) {
  968 + $scope.saveOrUpdate();
  969 + } else {
  970 + $scope.setLoadingGet(true);
  971 +
  972 + if (!$scope.edit) {
  973 + $scope.permitidoAvancar = true;
  974 + } else {
  975 + permiteAvancoFluxo();
  976 + }
  977 +
  978 + if ($scope.permitidoAvancar) {
  979 + $scope.templates[$scope.step].show = false;
  980 + $scope.step += 1;
  981 + $scope.templates[$scope.step].show = true;
  982 + }
  983 + $scope.setLoading(false);
  984 + }
  985 + };
  986 +
  987 +
  988 +// Controla se o usuario pode avancar o fluxo no wizard, validando os itens obrigatorios
  989 + function permiteAvancoFluxo() {
  990 +
  991 + $scope.permitidoAvancar = true;
  992 +
  993 + switch ($scope.step) {
  994 + case 0 :
  995 + //equipeContratacaoForm
  996 + if (isFormValid($scope.termoReferenciaForm.equipeContratacaoForm) && $scope.permitidoAvancar) {
  997 + $scope.termoReferenciaForm.equipeContratacaoForm.$submitted = true;
  998 + }
  999 + break;
  1000 + case 1 :
  1001 + //justificativaContratacaoForm
  1002 + if (isFormValid($scope.termoReferenciaForm.justificativaContratacaoForm) && $scope.termoReferencia.detalhamentosSolucoes.length >= 1 && $scope.permitidoAvancar) {
  1003 + $scope.termoReferenciaForm.justificativaContratacaoForm.$submitted = true;
  1004 + }
  1005 + break;
  1006 + case 2 :
  1007 + //especificacoesTecnicasForm
  1008 + if (isFormValid($scope.termoReferenciaForm.especificacoesTecnicasForm) && $scope.permitidoAvancar) {
  1009 + $scope.termoReferenciaForm.especificacoesTecnicasForm.$submitted = true;
  1010 + }
  1011 + break;
  1012 + case 3 :
  1013 + //modeloGestaoForm
  1014 + if (isFormValid($scope.termoReferenciaForm.modeloGestaoForm) && $scope.permitidoAvancar) {
  1015 + $scope.termoReferenciaForm.modeloGestaoForm.$submitted = true;
  1016 + }
  1017 + break;
  1018 + case 4 :
  1019 + //sancoesForm
  1020 + if (($scope.termoReferencia.sancoes.length >= 1 || $scope.termoReferencia.penalidades.length >= 1) && $scope.permitidoAvancar) {
  1021 + $scope.termoReferenciaForm.sancoesForm.$submitted = true;
  1022 + }
  1023 + break;
  1024 + case 5 :
  1025 + //criteriosSelecaoForm
  1026 + if (isFormValid($scope.termoReferenciaForm.criteriosSelecaoForm) && $scope.permitidoAvancar) {
  1027 + $scope.termoReferenciaForm.criteriosSelecaoForm.$submitted = true;
  1028 + }
  1029 + break;
  1030 + case 6 :
  1031 + //anexosObservacoesForm
  1032 + $scope.termoReferenciaForm.anexosObservacoesForm.$submitted = true;
  1033 + break;
  1034 + }
  1035 +
  1036 + if (!$scope.permitidoAvancar && !$scope.stepValid) {
  1037 + //Mensagem de erro de campos obrigatorios nao preenchidos
  1038 + $scope.showAlert('error', $translate.instant('VALIDACAO.ALERTA_OBRIGATORIOS'), " ", false);
  1039 + }
  1040 + };
  1041 +
  1042 + //Evita erros verificando se determinadas propriedades existem no form.
  1043 + function isFormValid (form) {
  1044 + $scope.stepValid = true;
  1045 + if (form && form.$invalid) {
  1046 + $scope.stepValid = false;
  1047 + }
  1048 + return $scope.stepValid;
  1049 + };
  1050 + //Evita erros verificando se determinadas propriedades existem no form.
  1051 + function isFormSubmited (form){
  1052 + var submitted = false;
  1053 + if(form && form.$submitted){
  1054 + submitted = true;
  1055 + }
  1056 + return submitted;
  1057 + }
  1058 +
  1059 +
  1060 + $scope.getClassEdit = function (step){
  1061 +
  1062 + switch (step) {
  1063 + case 0 :
  1064 + //equipeContratacaoForm
  1065 + return {'active': $scope.isCurrentStep(step),
  1066 + 'complete' : ($scope.step >= step && isFormValid($scope.termoReferenciaForm.equipeContratacaoForm)),
  1067 + 'invalid' : (isFormSubmited($scope.termoReferenciaForm.equipeContratacaoForm)|| $scope.step > step) && (!isFormValid($scope.termoReferenciaForm.equipeContratacaoForm))};
  1068 + break;
  1069 + case 1 :
  1070 + //justificativaContratacaoForm
  1071 + return {'active': $scope.isCurrentStep(step),
  1072 + 'complete' : ($scope.step > step && isFormValid($scope.termoReferenciaForm.justificativaContratacaoForm) && $scope.termoReferencia.detalhamentosSolucoes.length >= 1 ),
  1073 + 'invalid' : (isFormSubmited($scope.termoReferenciaForm.justificativaContratacaoForm) || $scope.step > step) && (!isFormValid($scope.termoReferenciaForm.justificativaContratacaoForm) || $scope.termoReferencia.detalhamentosSolucoes.length < 1)};
  1074 + break;
  1075 + case 2 :
  1076 + //especificacoesTecnicasForm
  1077 + return {'active': $scope.isCurrentStep(step),
  1078 + 'complete' : ($scope.step > step && isFormValid($scope.termoReferenciaForm.especificacoesTecnicasForm)),
  1079 + 'invalid' : (isFormSubmited($scope.termoReferenciaForm.especificacoesTecnicasForm) || $scope.step > step) && !isFormValid($scope.termoReferenciaForm.especificacoesTecnicasForm)};
  1080 + break;
  1081 + case 3 :
  1082 + //modeloGestaoForm
  1083 + return {'active': $scope.isCurrentStep(step),
  1084 + 'complete' : ($scope.step > step || ($scope.step > step && isFormSubmited($scope.termoReferenciaForm.modeloGestaoForm)))};
  1085 + break;
  1086 + case 4 :
  1087 + //sancoesForm
  1088 + return {'active': $scope.isCurrentStep(step),
  1089 + 'complete' : ($scope.step > step && isFormValid($scope.termoReferenciaForm.sancoesForm) && ($scope.termoReferencia.sancoes.length >= 1 && $scope.termoReferencia.penalidades.length >= 1)),
  1090 + 'invalid' : ($scope.step > step && ($scope.termoReferencia.sancoes.length < 1 || $scope.termoReferencia.penalidades.length < 1))};
  1091 + break;
  1092 + case 5 :
  1093 + //criteriosSelecaoForm
  1094 + return {'active': $scope.isCurrentStep(step),
  1095 + 'complete' : ($scope.step > step && isFormValid($scope.termoReferenciaForm.criteriosSelecaoForm)),
  1096 + 'invalid' : ((isFormSubmited($scope.termoReferenciaForm.criteriosSelecaoForm) || $scope.step > step) && !isFormValid($scope.termoReferenciaForm.criteriosSelecaoForm))};
  1097 + break;
  1098 + case 6 :
  1099 + //anexosObservacoesForm
  1100 + return {'active': $scope.isCurrentStep(step) || isFormSubmited($scope.termoReferenciaForm.anexosObservacoesForm),
  1101 + 'complete' : ($scope.isCurrentStep(step) || ($scope.step > step && isFormSubmited($scope.termoReferenciaForm.anexosObservacoesForm)))};
  1102 + break;
  1103 + };
  1104 + };
  1105 +
  1106 + $scope.getClassList = function (){
  1107 + return {'active': false, 'complete' : true, 'invalid' : false};
  1108 + };
1099 1109  
1100 1110 $scope.atualizarListaSizeSelect = function() {
1101 1111 $timeout(function(){
... ...
cit-contratos-web/src/main/webapp/html/estudoTecnico/estudoTecnicoList.html
... ... @@ -26,7 +26,11 @@
26 26 <button class="btn btn-clear" ng-click="exportarCSV(filterCriteria, headers, 'EstudoTecnicoRepository', 'LABEL.ESTUDO_TECNICO')" type="button">
27 27 <i class="fa fa-file-excel-o"></i> <translate>LABEL.EXPORTAR_CSV</translate>
28 28 </button>
29   -
  29 +
  30 + <button class="btn btn-clear" ng-click="showListRascunho(workspace.name)" type="button">
  31 + <i class="fa fa-list"></i> <translate>PORTAL.LABEL.SHOW_RASCUNHO</translate>
  32 + </button>
  33 +
30 34 <button
31 35 title="{{$translate.instant('CONTRATOS.LABEL.GERAR_ESTUDO_TECNICO')}}"
32 36 alt="{{$translate.instant('CONTRATOS.LABEL.GERAR_ESTUDO_TECNICO')}}"
... ...
cit-contratos-web/src/main/webapp/html/termoReferencia/termoReferenciaList.html
... ... @@ -29,11 +29,11 @@
29 29 <button class="btn btn-clear" ng-click="exportarCSV(filterCriteria, headers, 'TermoReferenciaRepository', 'CONTRATOS.LABEL.TERMO_REFERENCIA_PROJETO_BASICO')" type="button">
30 30 <i class="fa fa-file-excel-o"></i> <translate>LABEL.EXPORTAR_CSV</translate>
31 31 </button>
32   -
33   - <button class="btn btn-clear" ng-click="showListRascunho(workspace.name)" type="button">
  32 +
  33 + <button class="btn btn-clear" ng-click="showListRascunho(workspace.name)" type="button">
34 34 <i class="fa fa-list"></i> <translate>PORTAL.LABEL.SHOW_RASCUNHO</translate>
35 35 </button>
36   -
  36 +
37 37 <button
38 38 title="{{$translate.instant('LABEL.GERAR_TERMO_REFERENCIA')}}"
39 39 alt="{{$translate.instant('LABEL.GERAR_TERMO_REFERENCIA')}}"
... ...