Commit 3ddb140803e2627ed014f1b2dae6dd3eebef18b7

Authored by luis.camargo
1 parent f63028f1
Exists in master

redmine #4455 Construção funcionalidade Rascunho;

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