Commit c3f40fa6e94b2198c0e8d5c6980283ec41700fc9

Authored by geovane.filho
2 parents c6915e74 e96409a3
Exists in master

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

…/cit-grp-almoxarifado into tarefa-3943
cit-almoxarifado-api/src/main/java/br/com/centralit/api/model/EntradaAlmoxarifado.java
... ... @@ -17,11 +17,17 @@ import javax.persistence.OneToMany;
17 17 import javax.persistence.Table;
18 18 import javax.persistence.Temporal;
19 19 import javax.persistence.TemporalType;
  20 +import javax.persistence.Transient;
20 21  
21 22 import org.hibernate.envers.AuditJoinTable;
22 23 import org.hibernate.envers.Audited;
23 24 import org.hibernate.envers.NotAudited;
24 25  
  26 +import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
  27 +import com.fasterxml.jackson.annotation.JsonView;
  28 +import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
  29 +import com.fasterxml.jackson.databind.annotation.JsonSerialize;
  30 +
25 31 import br.com.centralit.api.framework.json.ViewsAdmMateriais;
26 32 import br.com.centralit.framework.json.JsonCalendarSimpleDateDeserializer;
27 33 import br.com.centralit.framework.json.JsonCalendarSimpleDateSerializer;
... ... @@ -31,11 +37,6 @@ import br.com.centralit.framework.model.Dominio;
31 37 import br.com.centralit.framework.model.arquitetura.PersistentObjectAuditOrganizacao;
32 38 import br.com.centralit.framework.util.UtilObjeto;
33 39  
34   -import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
35   -import com.fasterxml.jackson.annotation.JsonView;
36   -import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
37   -import com.fasterxml.jackson.databind.annotation.JsonSerialize;
38   -
39 40 /**
40 41 * <p>
41 42 * <img src="http://centralit.com.br/images/logo_central.png">
... ... @@ -76,11 +77,13 @@ public class EntradaAlmoxarifado extends PersistentObjectAuditOrganizacao implem
76 77  
77 78 /** Atributo serialVersionUID. */
78 79 private static final long serialVersionUID = 6267732497145774401L;
79   -
  80 +
80 81 /** Atributo id. */
81 82 @Id
82   -// @SequenceGenerator(name = "entrada_id_seq", sequenceName = "entrada_id_seq")
83   -// @GeneratedValue(strategy = GenerationType.AUTO, generator = "entrada_id_seq")
  83 + // @SequenceGenerator(name = "entrada_id_seq", sequenceName =
  84 + // "entrada_id_seq")
  85 + // @GeneratedValue(strategy = GenerationType.AUTO, generator =
  86 + // "entrada_id_seq")
84 87 @GeneratedValue(strategy = GenerationType.AUTO)
85 88 @JsonView({ Views.GenericView.class })
86 89 private Long id;
... ... @@ -98,7 +101,8 @@ public class EntradaAlmoxarifado extends PersistentObjectAuditOrganizacao implem
98 101 @Temporal(TemporalType.TIMESTAMP)
99 102 @JsonSerialize(using = JsonCalendarSimpleDateSerializer.class)
100 103 @JsonDeserialize(using = JsonCalendarSimpleDateDeserializer.class)
101   - @JsonView({ Views.EntradaListView.class, Views.BemPatrimonialEditView.class, Views.BemPatrimonialListView.class, Views.BemPatrimonialAutoCompleteView.class, Views.GenericView.class })
  104 + @JsonView({ Views.EntradaListView.class, Views.BemPatrimonialEditView.class, Views.BemPatrimonialListView.class,
  105 + Views.BemPatrimonialAutoCompleteView.class, Views.GenericView.class })
102 106 private Calendar dataContabil;
103 107  
104 108 /** Atributo dataRecebimento. */
... ... @@ -106,7 +110,7 @@ public class EntradaAlmoxarifado extends PersistentObjectAuditOrganizacao implem
106 110 @Temporal(TemporalType.TIMESTAMP)
107 111 @JsonSerialize(using = JsonCalendarSimpleDateSerializer.class)
108 112 @JsonDeserialize(using = JsonCalendarSimpleDateDeserializer.class)
109   - @JsonView({ Views.EntradaListView.class, Views.BemPatrimonialEditView.class })
  113 + @JsonView({ Views.EntradaListView.class, Views.BemPatrimonialEditView.class })
110 114 private Calendar dataRecebimento;
111 115  
112 116 /** Atributo codigo. */
... ... @@ -150,12 +154,12 @@ public class EntradaAlmoxarifado extends PersistentObjectAuditOrganizacao implem
150 154 /** Atributo codigo. */
151 155 @Column(length = 30)
152 156 private String codigoAsi;
153   -
  157 +
154 158 /** Atributo entrada concluida. */
155 159 @Column(name = "isentradaconcluida")
156 160 @JsonView({ Views.EntradaListView.class })
157 161 private Boolean isEntradaConcluida;
158   -
  162 +
159 163 /** Atributo entrada contabilizada. */
160 164 @Column(name = "iscontabilizada")
161 165 @JsonView({ Views.EntradaListView.class })
... ... @@ -175,15 +179,19 @@ public class EntradaAlmoxarifado extends PersistentObjectAuditOrganizacao implem
175 179 @OneToMany(fetch = FetchType.LAZY, mappedBy = "entrada", cascade = CascadeType.ALL, orphanRemoval = true)
176 180 @JsonView({ ViewsAdmMateriais.EntradaAlmoxarifadoEditView.class })
177 181 private Collection<EntradaAlmoxarifadoItem> entradasItem;
178   -
  182 +
179 183 @ManyToOne(fetch = FetchType.LAZY, optional = false)
180 184 @JsonView({ ViewsAdmMateriais.EntradaAlmoxarifadoEditView.class })
181 185 private Dominio dominioFinalidade;
182   -
  186 +
183 187 @ManyToOne(fetch = FetchType.LAZY, optional = true)
184 188 @JsonView(ViewsAdmMateriais.EntradaAlmoxarifadoEditView.class)
185 189 private EstruturaOrganizacional unidadeRequisitante;
186 190  
  191 + @Transient
  192 + @JsonView({ ViewsAdmMateriais.EntradaAlmoxarifadoEditView.class })
  193 + private Long rascunho;
  194 +
187 195 /**
188 196 * Retorna o valor do atributo <code>id</code>
189 197 *
... ... @@ -433,17 +441,17 @@ public class EntradaAlmoxarifado extends PersistentObjectAuditOrganizacao implem
433 441  
434 442 this.dataReferencia = dataReferencia;
435 443 }
436   -
  444 +
437 445 /**
438 446 * Define o valor do atributo <code>isEntradaConcluida</code>.
439 447 *
440 448 * @param isEntradaConcluida
441 449 */
442 450 public void setIsEntradaConcluida(Boolean isEntradaConcluida) {
443   -
  451 +
444 452 this.isEntradaConcluida = isEntradaConcluida;
445 453 }
446   -
  454 +
447 455 /**
448 456 * Retorna o valor do atributo <code>isEntradaConcluida</code>
449 457 *
... ... @@ -453,24 +461,24 @@ public class EntradaAlmoxarifado extends PersistentObjectAuditOrganizacao implem
453 461  
454 462 return isEntradaConcluida;
455 463 }
456   -
  464 +
457 465 /**
458 466 * Define o valor do atributo <code>isContabilizada</code>.
459 467 *
460 468 * @param isContabilizada
461 469 */
462 470 public void setIsContabilizada(Boolean isContabilizada) {
463   -
  471 +
464 472 this.isContabilizada = isContabilizada;
465 473 }
466   -
  474 +
467 475 /**
468 476 * Retorna o valor do atributo <code>isContabilizada</code>
469 477 *
470 478 * @return <code>IsContabilizada</code>
471 479 */
472 480 public Boolean getIsContabilizada() {
473   -
  481 +
474 482 return isContabilizada;
475 483 }
476 484  
... ... @@ -489,7 +497,7 @@ public class EntradaAlmoxarifado extends PersistentObjectAuditOrganizacao implem
489 497 return this;
490 498 }
491 499 }
492   -
  500 +
493 501 /**
494 502 * Retorna o valor do atributo <code>almoxarifado</code>
495 503 *
... ... @@ -565,5 +573,13 @@ public class EntradaAlmoxarifado extends PersistentObjectAuditOrganizacao implem
565 573 public void setUnidadeRequisitante(EstruturaOrganizacional unidadeRequisitante) {
566 574 this.unidadeRequisitante = unidadeRequisitante;
567 575 }
568   -
  576 +
  577 + public Long getRascunho() {
  578 + return rascunho;
  579 + }
  580 +
  581 + public void setRascunho(Long rascunho) {
  582 + this.rascunho = rascunho;
  583 + }
  584 +
569 585 }
... ...
cit-almoxarifado-api/src/main/java/br/com/centralit/api/model/EntradaAlmoxarifadoItem.java
... ... @@ -66,7 +66,7 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize;
66 66 @Audited
67 67 @Entity
68 68 @Table(name = "alm_en_entradaitem")
69   -@JsonIgnoreProperties({ "$quantidadeEntrada", "uuid", "$validarPrecoMedio" })
  69 +@JsonIgnoreProperties({ "$quantidadeEntrada", "uuid", "$validarPrecoMedio", "$checked" })
70 70 public class EntradaAlmoxarifadoItem extends PersistentObjectAudit {
71 71  
72 72 /** Atributo serialVersionUID. */
... ...
cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/impl/EntradaAlmoxarifadoServiceImpl.java
1 1 package br.com.centralit.api.service.impl;
2 2  
  3 +import java.util.ArrayList;
3 4 import java.util.Calendar;
4 5 import java.util.HashMap;
5 6 import java.util.List;
6 7 import java.util.Map;
7 8  
  9 +import org.apache.commons.lang3.StringUtils;
8 10 import org.springframework.beans.factory.annotation.Autowired;
9 11 import org.springframework.beans.factory.annotation.Qualifier;
10 12 import org.springframework.stereotype.Service;
11 13 import org.springframework.validation.Validator;
12 14  
  15 +import com.drew.lang.StringUtil;
  16 +
13 17 import br.com.centralit.api.dao.EntradaAlmoxarifadoDao;
  18 +import br.com.centralit.api.model.BemAlmoxarifadoCaracteristica;
14 19 import br.com.centralit.api.model.ContaContabilMovimento;
15 20 import br.com.centralit.api.model.EntradaAlmoxarifado;
16 21 import br.com.centralit.api.model.EntradaAlmoxarifadoDocumento;
... ... @@ -28,6 +33,7 @@ import br.com.centralit.api.service.MaterialCaracteristicaService;
28 33 import br.com.centralit.api.service.MaterialConsumoService;
29 34 import br.com.centralit.api.service.MovimentoEstoqueService;
30 35 import br.com.centralit.api.service.ParceiroService;
  36 +import br.com.centralit.api.service.RascunhoService;
31 37 import br.com.centralit.api.service.UnidadeMedidaService;
32 38 import br.com.centralit.api.service.UsuarioService;
33 39 import br.com.centralit.api.service.validation.EntradaAlmoxarifadoAllValidator;
... ... @@ -111,6 +117,9 @@ public class EntradaAlmoxarifadoServiceImpl extends GenericServiceImpl&lt;EntradaAl
111 117 @Autowired
112 118 private ConfiguracaoParametroSistemaService configuracaoParametroSistemaService;
113 119  
  120 + @Autowired
  121 + private RascunhoService rascunhoService;
  122 +
114 123 private Validator validatorBasic;
115 124  
116 125 private Validator validatorAll;
... ... @@ -150,6 +159,8 @@ public class EntradaAlmoxarifadoServiceImpl extends GenericServiceImpl&lt;EntradaAl
150 159 configurarNotaRecebimento(entradaAlmoxarifado);
151 160  
152 161 entrada.setCodigo(String.valueOf(entradaAlmoxarifado.getNotaRecebimento()));
  162 +
  163 + rascunhoService.removeById(entrada.getRascunho());
153 164  
154 165 return entradaAlmoxarifado;
155 166 }
... ... @@ -232,16 +243,24 @@ public class EntradaAlmoxarifadoServiceImpl extends GenericServiceImpl&lt;EntradaAl
232 243 entradaAlmoxarifadoItem.setUnidadeMedidaEntrada(this.unidadeMedidaService.find(entradaAlmoxarifadoItem.getUnidadeMedidaEntrada().getId()));
233 244  
234 245 entradaAlmoxarifadoItem.setEntrada(entrada);
  246 +
  247 + List<BemAlmoxarifadoCaracteristica> caracteristicas = new ArrayList<BemAlmoxarifadoCaracteristica>();
235 248  
236 249 //TODO Arrumar caracteristicas
237   - /*for (BemAlmoxarifadoCaracteristica bemAlmoxarifadoCaracteristica : entradaAlmoxarifadoItem.getCaracteristicas()) {
238   -
239   - bemAlmoxarifadoCaracteristica.setMaterialCaracteristica(this.materialCaracteristicaService.find(bemAlmoxarifadoCaracteristica.getMaterialCaracteristica().getId()));
240   -
241   - bemAlmoxarifadoCaracteristica.setCaracteristica(bemAlmoxarifadoCaracteristica.getMaterialCaracteristica().getCaracteristica());
  250 + for (BemAlmoxarifadoCaracteristica bemAlmoxarifadoCaracteristica : entradaAlmoxarifadoItem.getCaracteristicas()) {
  251 +
  252 + if(StringUtils.isNotBlank(bemAlmoxarifadoCaracteristica.getValorCaracteristica())){
  253 + bemAlmoxarifadoCaracteristica.setMaterialCaracteristica(this.materialCaracteristicaService.find(bemAlmoxarifadoCaracteristica.getMaterialCaracteristica().getId()));
  254 +
  255 + bemAlmoxarifadoCaracteristica.setCaracteristica(bemAlmoxarifadoCaracteristica.getMaterialCaracteristica().getCaracteristica());
  256 +
  257 + bemAlmoxarifadoCaracteristica.setEntradaItem(entradaAlmoxarifadoItem);
  258 + caracteristicas.add(bemAlmoxarifadoCaracteristica);
  259 + }
242 260  
243   - bemAlmoxarifadoCaracteristica.setEntradaItem(entradaAlmoxarifadoItem);
244   - }*/
  261 + }
  262 +
  263 + entradaAlmoxarifadoItem.setCaracteristicas(caracteristicas);
245 264  
246 265 }
247 266  
... ...
cit-almoxarifado-web/src/main/java/br/com/centralit/listener/StartupListenerAlmoxarifado.java
... ... @@ -310,6 +310,9 @@ public class StartupListenerAlmoxarifado extends UtilStartup implements Applicat
310 310 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.CONCLUIR_ENTRADA_BTN", "Concluir", dominio, modulo));
311 311 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.CONCLUIR_E_CONTABILIZAR_ENTRADA", "Concluir e contabilizar", dominio, modulo));
312 312 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.CONCLUIR_E_DESCONTABILIZAR_ENTRADA", "Concluir e descontabilizar", dominio, modulo));
  313 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.DEFINIR_CARACTERISTICAS", "Definir características", dominio, modulo));
  314 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.CARACTERISTICAS_GENERICAS", "Características genéricas", dominio, modulo));
  315 +
313 316 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.ATENDIMENTO_S", "Atendimento(s)", dominio, modulo));
314 317 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.BAIXA_S", "Baixa(s)", dominio, modulo));
315 318 }
... ... @@ -360,6 +363,8 @@ public class StartupListenerAlmoxarifado extends UtilStartup implements Applicat
360 363  
361 364 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.ENTRADA_CONTABILIZADA", "Entrada contabilizada com sucesso!", dominio, modulo));
362 365 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.ENTRADA_DESCONTABILIZADA", "Entrada descontabilizada com sucesso!", dominio, modulo));
  366 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.SELECIONE_UM_ITEM_PARA_DEFINIR_CARAC", "Selecione um item para definir suas características!", dominio, modulo));
  367 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.MATERIAL_NAO_POSSUI_CARACTERISTICAS", "Material não possui características cadastradas.", dominio, modulo));
363 368 }
364 369 }
365 370  
... ...
cit-almoxarifado-web/src/main/webapp/assets/js/angular/custom/controller/EntradaAlmoxarifadoController.js
... ... @@ -2,10 +2,10 @@
2 2  
3 3 citApp.controller('EntradaAlmoxarifadoController', ['$scope', '$filter', 'FileUploader', 'EntradaAlmoxarifadoRepository', 'EstruturaOrganizacionalAlmoxarifadoRepository', '$translate', '$timeout',
4 4 'DominioRepository', 'FornecedorRepository', 'MaterialConsumoRepository', 'EntradaAlmoxarifadoItemRepository', 'MaterialLocalEstoqueRepository',
5   - 'MovimentoEstoqueRepository',
  5 + 'MovimentoEstoqueRepository','$q','MaterialRepository',
6 6 function EntradaAlmoxarifadoController($scope, $filter, FileUploader, EntradaAlmoxarifadoRepository, EstruturaOrganizacionalAlmoxarifadoRepository,
7 7 $translate, $timeout, DominioRepository , FornecedorRepository, MaterialConsumoRepository, EntradaAlmoxarifadoItemRepository,
8   - MaterialLocalEstoqueRepository, MovimentoEstoqueRepository) {
  8 + MaterialLocalEstoqueRepository, MovimentoEstoqueRepository, $q, MaterialRepository) {
9 9  
10 10 var CODIGO_DOMINIO_TIPO_RECEBIMENTO_COMPRA_ORCAMENTARIA = 1;
11 11  
... ... @@ -42,6 +42,10 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp
42 42  
43 43 $scope.atualizarListaSizeSelectEntradaItem();
44 44 $scope.edit = true;
  45 +
  46 + $scope.workspace.objetoScope = $scope.entradaAlmoxarifado;
  47 + $scope.startTimerIntervalSaveDraft($scope.workspace, null, true);
  48 +
45 49 $timeout(function(){
46 50 $scope.entradaAlmoxarifadoForm.$submitted = false;
47 51 $scope.entradaAlmoxarifadoForm.$setPristine();
... ... @@ -137,6 +141,7 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp
137 141 $scope.calcularValorTotalMateriais();
138 142 $scope.atualizarListaSizeSelectEntradaItem();
139 143 $scope.edit = edit;
  144 + $scope.stopTimerIntervalDraft($scope.workspace);
140 145 $scope.setLoading(false);
141 146 });
142 147  
... ... @@ -148,6 +153,17 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp
148 153 }
149 154 });
150 155 };
  156 +
  157 + $scope.setRascunho = function(rascunho){
  158 +
  159 + if (rascunho) {
  160 + $scope.entradaAlmoxarifado = rascunho;
  161 + }
  162 + $scope.workspace.objetoScope = $scope.entradaAlmoxarifado;
  163 + $scope.startTimerIntervalSaveDraft($scope.workspace);
  164 + $scope.edit = true;
  165 + $scope.setLoading(false);
  166 + };
151 167  
152 168 $scope.findAutoCompleteAlmoxarifado = function(value){
153 169 return EstruturaOrganizacionalAlmoxarifadoRepository.listarEstruturasOrganizacionaisAlmoxarifadoPorOrganizacao(value, $scope.usuarioLogado.organizacao.id).then(function(result) {
... ... @@ -412,6 +428,7 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp
412 428  
413 429 $scope.entradaAlmoxarifado.isEntradaConcluida = true;
414 430 $scope.entradaAlmoxarifadoOriginal.isEntradaConcluida = true;
  431 + $scope.entradaAlmoxarifado.rascunho = $scope.workspace.rascunho ? $scope.workspace.rascunho.id : null;
415 432  
416 433 if (contabilizar) {
417 434 $scope.dataContabilFinal = $scope.entradaAlmoxarifado.dataContabil;
... ... @@ -977,5 +994,132 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp
977 994 }
978 995 return $scope.stepValid;
979 996 };
  997 +
  998 + $scope.openModalCaracteristicas = function() {
  999 + var itensSelecionados = $scope.getEntradaItemChecked();
  1000 +
  1001 + if (itensSelecionados.length > 1) {
  1002 + $scope.showAlert('warning', $translate.instant('MSG.SELECIONE_APENAS_UM_ITEM_PARA_PREENCHER_CARACTERISTICA'));
  1003 + return;
  1004 + }
  1005 +
  1006 + if(itensSelecionados.length === 0) {
  1007 + $scope.showAlert('warning', $translate.instant('ALMOXARIFADO.MSG.SELECIONE_UM_ITEM_PARA_DEFINIR_CARAC'));
  1008 + return;
  1009 + }
  1010 +
  1011 + $scope.entradaItem = itensSelecionados[0];
  1012 + buscaCaracteristicas();
  1013 + };
  1014 +
  1015 + $scope.carregarCaracteristicasGenericasMaterial = function(material) {
  1016 + var deferred = $q.defer();
  1017 + MaterialRepository.getMaterialTransferencia(material.id).then(function(result) {
  1018 + $scope.caracteristicas = [];
  1019 + $scope.caracteristicasGenericas = [];
  1020 + var materialCaracteristicas = [];
  1021 +
  1022 + materialCaracteristicas = result.materialCaracteristicas.filter(function(caracteristica) {
  1023 + return caracteristica.generico;
  1024 + });
  1025 +
  1026 + var materialCaracteristicaTemp = {},
  1027 + tempMateriais = [],
  1028 + count = 0,
  1029 + limiteArray = materialCaracteristicas.length;
  1030 +
  1031 + for (var index = 0; index < materialCaracteristicas.length; index++) {
  1032 +
  1033 + materialCaracteristicaTemp = angular.copy(materialCaracteristicas[index]);
  1034 +
  1035 + if (materialCaracteristicaTemp.caracteristica.dominioTipoDado.nome == 'TIPO_DOMINIO') {
  1036 +
  1037 + tempMateriais.push(materialCaracteristicaTemp);
  1038 +
  1039 + } else {
  1040 + $scope.caracteristicasGenericas.push({
  1041 + materialCaracteristica: angular.copy(materialCaracteristicaTemp)
  1042 + });
  1043 +
  1044 + if(++count === limiteArray) {
  1045 + $timeout(function(){
  1046 + return deferred.resolve();
  1047 + });
  1048 + }
  1049 + }
  1050 + }
  1051 +
  1052 + if(tempMateriais.length >0){
  1053 + tempMateriais.forEach(function(materialCarac){
  1054 + DominioRepository.findAllDominio(materialCarac.caracteristica.chaveDominio).then(function(result) {
  1055 + if(result && result[0]){
  1056 + tempMateriais.forEach(function(item){
  1057 + if(result[0].originalElement.chave === item.caracteristica.chaveDominio) {
  1058 + $scope.caracteristicasGenericas.push({
  1059 + materialCaracteristica: angular.copy(item),
  1060 + listaDominios: angular.copy(result)
  1061 + });
  1062 + ++count;
  1063 + }
  1064 + });
  1065 + }
  1066 +
  1067 + if(count === limiteArray) {
  1068 + $timeout(function(){
  1069 + return deferred.resolve();
  1070 + });
  1071 + }
  1072 + });
  1073 +
  1074 + });
  1075 + }else{
  1076 + return deferred.resolve();
  1077 + }
  1078 +
  1079 + });
  1080 +
  1081 + return deferred.promise;
  1082 + };
  1083 +
  1084 + function buscaCaracteristicas(){
  1085 + if($scope.entradaItem.caracteristicas){
  1086 + $scope.setLoadingGet(true);
  1087 + $scope.caracteristicasGenericas = $scope.entradaItem.caracteristicas;
  1088 + abrirModalCaracteristicas();
  1089 + }else{
  1090 + $scope.carregarCaracteristicasGenericasMaterial($scope.entradaItem.material).then(function(){
  1091 + $scope.setLoadingGet(true);
  1092 + abrirModalCaracteristicas();
  1093 + });
  1094 + }
  1095 + };
  1096 +
  1097 + function abrirModalCaracteristicas(){
  1098 + $scope.editEntrada = $scope.edit;
  1099 + if ($scope.caracteristicasGenericas && $scope.caracteristicasGenericas.length > 0){
  1100 + $timeout(function(){
  1101 + $scope.$openModal('modal-caracteristicas.html', 'lg');
  1102 + $scope.setLoading(false);
  1103 + },10);
  1104 + }else{
  1105 + $scope.setLoading(false);
  1106 + $scope.showAlert('warning', $translate.instant('ALMOXARIFADO.MSG.MATERIAL_NAO_POSSUI_CARACTERISTICAS'));
  1107 + }
  1108 + };
  1109 +
  1110 + $scope.salvaCaracteristicasTemp = function(formDialogCaracteristicas) {
  1111 + formDialogCaracteristicas.$submitted = true;
  1112 + if (formDialogCaracteristicas.$valid) {
  1113 + angular.forEach($scope.entradaAlmoxarifado.entradasItem, function(entradaItem){
  1114 + if (entradaItem.$checked) {
  1115 + entradaItem.caracteristicas = $scope.caracteristicasGenericas;
  1116 + }
  1117 + });
  1118 + $scope.caracteristicasGenericas = [];
  1119 + $scope.$modalInstance.dismiss('cancel');
  1120 + } else {
  1121 + $scope.showAlert('error', $translate.instant('VALIDACAO.ALERTA_OBRIGATORIOS'));
  1122 + }
  1123 + };
980 1124  
981 1125 }]);
... ...
cit-almoxarifado-web/src/main/webapp/html/entradaAlmoxarifado/dialog_associar_caracteristicas.html 0 → 100644
... ... @@ -0,0 +1,132 @@
  1 +<ng-form name="formDialogCaracteristicas" autocomplete="off">
  2 + <div class="modal-header">
  3 + <button class="btn btn-clear" type="button" ng-disabled="!editEntrada" ng-show="{{editEntrada}}" ng-if="editEntrada" ng-click="salvaCaracteristicasTemp(formDialogCaracteristicas)">
  4 + <i class="fa fa-save green"></i>
  5 + <translate>LABEL.SALVAR</translate>
  6 + </button>
  7 +
  8 + <button title="{{$translate.instant('LABEL.CANCELAR')}}" alt="{{$translate.instant('LABEL.CANCELAR')}}" ng-click="$dismiss('cancel');" class="btn btn-clear" ng-if="editEntrada" type="button">
  9 + <i class="fa fa-times red"></i>
  10 + <translate>LABEL.CANCELAR</translate>
  11 + </button>
  12 +
  13 + </div>
  14 +
  15 + <div style="overflow-y:scroll; height: {{caracteristicasGenericas.length > 3 ? 500 : initial}}px; overflow-x: hidden;" class="modal-body">
  16 + <h2 class="title-modal"><translate>ALMOXARIFADO.LABEL.CARACTERISTICAS_GENERICAS</translate></h2>
  17 + <p ng-show="editEntrada">
  18 + <small>( <span class="red">*</span> ) <translate>LABEL.CAMPOS_OBRIGATORIOS</translate>
  19 + </small>
  20 + </p>
  21 + <fieldset>
  22 + <div class="scrollbar-inner">
  23 + <div class="col-sm-12" ng-repeat="materialCaract in caracteristicasGenericas" ng-if="editEntrada">
  24 +
  25 + <div class="row" ng-show="materialCaract.materialCaracteristica.generico" ng-if="materialCaract.materialCaracteristica.caracteristica.dominioTipoDado.nome == 'TEXT_FIELD'">
  26 + <div class="col-sm-12">
  27 + <label-input ng-type="text" ng-id="materialCaract.valorCaracteristica-{{$index}}"
  28 + ng-label="{{materialCaract.materialCaracteristica.caracteristica.descricao}}" ng-obrigatorio="materialCaract.materialCaracteristica.obrigatorio"
  29 + ng-disabled="!editEntrada" form="formDialogCaracteristicas" ng-model="materialCaract.valorCaracteristica"
  30 + ng-custom-maxlength="{{materialCaract.materialCaracteristica.caracteristica.tamanho}}" ng-regex="materialCaract.materialCaracteristica.caracteristica.expressaoRegular"/>
  31 + </div>
  32 + </div>
  33 +
  34 + <div class="row" ng-show="materialCaract.materialCaracteristica.generico" ng-if="materialCaract.materialCaracteristica.caracteristica.dominioTipoDado.nome == 'TEXT_AREA'">
  35 + <div class="col-sm-12">
  36 + <label-text-area ng-id="materialCaract.valorCaracteristica-{{$index}}"
  37 + ng-label="{{materialCaract.materialCaracteristica.caracteristica.descricao}}" rows="2" form="formDialogCaracteristicas" ng-disabled="!editEntrada"
  38 + ng-obrigatorio="materialCaract.materialCaracteristica.obrigatorio" ng-model="materialCaract.valorCaracteristica"
  39 + ng-custom-maxlength="{{materialCaract.materialCaracteristica.caracteristica.tamanho}}" ng-regex="materialCaract.materialCaracteristica.caracteristica.expressaoRegular"></label-text-area>
  40 + </div>
  41 + </div>
  42 +
  43 + <div class="row" ng-show="materialCaract.materialCaracteristica.generico" ng-if="materialCaract.materialCaracteristica.caracteristica.dominioTipoDado.nome == 'NUMBER'">
  44 + <div class="col-sm-12">
  45 + <label-input-number ng-id="materialCaract.valorCaracteristica-{{$index}}"
  46 + ng-label="{{materialCaract.materialCaracteristica.caracteristica.descricao}}" ng-obrigatorio="materialCaract.materialCaracteristica.obrigatorio"
  47 + ng-disabled="!editEntrada" form="formDialogCaracteristicas" ng-model="materialCaract.valorCaracteristica" ng-regex="materialCaract.materialCaracteristica.caracteristica.expressaoRegular"/>
  48 + </div>
  49 + </div>
  50 +
  51 + <div class="row" ng-show="materialCaract.materialCaracteristica.generico" ng-if="materialCaract.materialCaracteristica.caracteristica.dominioTipoDado.nome == 'DATA'">
  52 + <div class="col-sm-12">
  53 + <label-input-data ng-id="materialCaract.valorCaracteristica-{{$index}}"
  54 + ng-label="{{materialCaract.materialCaracteristica.caracteristica.descricao}}" ng-obrigatorio="materialCaract.materialCaracteristica.obrigatorio"
  55 + ng-disabled="!editEntrada" ng-model="materialCaract.valorCaracteristica" form="formDialogCaracteristicas" />
  56 + </div>
  57 + </div>
  58 +
  59 + <div class="row" ng-show="materialCaract.materialCaracteristica.generico" ng-if="materialCaract.materialCaracteristica.caracteristica.dominioTipoDado.nome == 'DECIMAL'">
  60 + <div class="col-sm-12">
  61 + <label-input-money ng-id="materialCaract.valorCaracteristica-{{$index}}"
  62 + ng-label="{{materialCaract.materialCaracteristica.caracteristica.descricao}}" ng-obrigatorio="materialCaract.materialCaracteristica.obrigatorio"
  63 + ng-disabled="!editEntrada" form="formDialogCaracteristicas" ng-model="materialCaract.valorCaracteristica"></label-input-money>
  64 + </div>
  65 + </div>
  66 +
  67 + <div class="row" ng-show="materialCaract.materialCaracteristica.generico" ng-if="materialCaract.materialCaracteristica.caracteristica.dominioTipoDado.nome == 'TIPO_DOMINIO'">
  68 + <div class="col-sm-12">
  69 + <label-select ng-id="materialCaract.valorCaracteristica-{{$index}}" ng-model="materialCaract.valorCaracteristica"
  70 + ng-label="{{materialCaract.materialCaracteristica.caracteristica.descricao}}" ng-obrigatorio="materialCaract.materialCaracteristica.obrigatorio"
  71 + ng-disabled="!editEntrada" form="formDialogCaracteristicas" ng-list="materialCaract.listaDominios"
  72 + ng-custom-options="dominio.id as dominio.descricao for dominio"></label-select>
  73 + </div>
  74 + </div>
  75 +
  76 + <div class="row" ng-show="materialCaract.materialCaracteristica.generico" ng-if="materialCaract.materialCaracteristica.caracteristica.dominioTipoDado.nome == 'ARQUIVO'">
  77 + <div class="col-sm-12">
  78 + <div class="form-group">
  79 +
  80 + <label ng-class="{'has-error': validaAnexo}" for='materialCaract.valorCaracteristica-arquivo-{{$index}}' class='control-label'>{{materialCaract.materialCaracteristica.caracteristica.descricao}}
  81 + <span class='red' ng-show='materialCaract.materialCaracteristica.obrigatorio'>*</span>
  82 + <i ng-if='materialCaract.materialCaracteristica.obrigatorio' ng-show='validaAnexo' class='fa fa-warning red' tooltip="{{materialCaract.materialCaracteristica.caracteristica.descricao + ' ' +$translate.instant('LABEL.CAMPO_OBRIGATORIO')}}" tooltip-placement='top'></i>
  83 + </label>
  84 +
  85 + <div class="col-sm-12" ng-show="editEntrada && uploaderCaracteristica.queue < 1">
  86 + <div nv-file-drop="" uploader="uploaderCaracteristica" id="actionUploadArquivos-{{workspace.id}}" onclick="acionarInputFile(this);">
  87 + <div nv-file-over="" uploader="uploaderCaracteristica" over-class="another-file-over-class">
  88 + <label class="file-input file-multiple">
  89 + <span class="file-container">
  90 + <label class="uploadMsg"><translate>LABEL.UPLOAD_MSG_ARRASTE</translate></label>
  91 + <span class="file-name" data-title="...">
  92 + <i class="icon icon fa fa-cloud-upload"></i>
  93 + </span>
  94 + </span>
  95 + </label>
  96 + </div>
  97 + </div>
  98 + <input id="uploadArquivos-{{workspace.id}}" type="file" nv-file-select="" uploader="uploaderCaracteristica" ng-show="false" />
  99 + </div>
  100 + <div class="row" ng-show="uploaderCaracteristica.queue.length > 0">
  101 + <div class="col-sm-12">
  102 + <table class="table">
  103 + <thead>
  104 + <tr>
  105 + <th width="50%"><translate>LABEL.NOME</translate></th>
  106 + <th ng-show="uploader.isHTML5"><translate>LABEL.TAMANHO</translate></th>
  107 + <th style="text-align: center;"><translate>LABEL.ACOES</translate></th>
  108 + </tr>
  109 + </thead>
  110 + <tbody>
  111 + <tr ng-repeat="item in uploaderCaracteristica.queue">
  112 + <td><strong>{{ item.file.name }}</strong></td>
  113 + <td ng-show="uploaderCaracteristica.isHTML5" nowrap>{{ item.file.size/1024/1024|number:2 }} MB</td>
  114 + <td nowrap style="text-align: center;">
  115 + <button type="button" class="btn btn-danger btn-xs" ng-show="editEntrada" ng-click="item.remove()">
  116 + <span class="fa fa-trash-o"></span>
  117 + </button>
  118 + </td>
  119 + </tr>
  120 + </tbody>
  121 + </table>
  122 + </div>
  123 + </div>
  124 + </div>
  125 + </div>
  126 + </div>
  127 + </div>
  128 + </div>
  129 + </fieldset>
  130 + </div>
  131 +
  132 +</ng-form>
... ...
cit-almoxarifado-web/src/main/webapp/html/entradaAlmoxarifado/entradaAlmoxarifadoList.html
... ... @@ -29,6 +29,10 @@
29 29 <i class="fa fa-print"></i>
30 30 <translate>LABEL.RELATORIO</translate>
31 31 </button>
  32 +
  33 + <button class="btn btn-clear" ng-click="showListRascunho(workspace.name, 'entradaAlmoxarifadoControllerId')" type="button">
  34 + <i class="fa fa-list"></i> <translate>PORTAL.LABEL.SHOW_RASCUNHO</translate>
  35 + </button>
32 36  
33 37 <span class="divider-vertical"></span>
34 38  
... ...
cit-almoxarifado-web/src/main/webapp/html/entradaAlmoxarifado/entradaAlmoxarifadoPg2.html
... ... @@ -52,6 +52,11 @@
52 52 <i class="fa fa-times red"></i>
53 53 <translate>LABEL.REMOVER</translate>
54 54 </button>
  55 +
  56 + <button title="{{$translate.instant('ALMOXARIFADO.LABEL.DEFINIR_CARACTERISTICAS')}}" alt="{{$translate.instant('ALMOXARIFADO.LABEL.DEFINIR_CARACTERISTICAS')}}" ng-show="edit" class="btn btn-clear" type="button" ng-click="openModalCaracteristicas()">
  57 + <i class="fa fa-upload blue"></i>
  58 + <translate>ALMOXARIFADO.LABEL.DEFINIR_CARACTERISTICAS</translate>
  59 + </button>
55 60  
56 61 </div><!-- .panel-heading -->
57 62 <table class="table table-bordered table-striped">
... ... @@ -93,4 +98,8 @@
93 98  
94 99 </fieldset>
95 100 </div> <!-- /.page-content -->
96   -</ng-form>
97 101 \ No newline at end of file
  102 +</ng-form>
  103 +
  104 +<script type="text/ng-template" id="modal-caracteristicas.html">
  105 + <div ng-include src="'/cit-almoxarifado-web/html/entradaAlmoxarifado/dialog_associar_caracteristicas.html'" />
  106 +</script>
98 107 \ No newline at end of file
... ...