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,11 +17,17 @@ import javax.persistence.OneToMany;
17 import javax.persistence.Table; 17 import javax.persistence.Table;
18 import javax.persistence.Temporal; 18 import javax.persistence.Temporal;
19 import javax.persistence.TemporalType; 19 import javax.persistence.TemporalType;
  20 +import javax.persistence.Transient;
20 21
21 import org.hibernate.envers.AuditJoinTable; 22 import org.hibernate.envers.AuditJoinTable;
22 import org.hibernate.envers.Audited; 23 import org.hibernate.envers.Audited;
23 import org.hibernate.envers.NotAudited; 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 import br.com.centralit.api.framework.json.ViewsAdmMateriais; 31 import br.com.centralit.api.framework.json.ViewsAdmMateriais;
26 import br.com.centralit.framework.json.JsonCalendarSimpleDateDeserializer; 32 import br.com.centralit.framework.json.JsonCalendarSimpleDateDeserializer;
27 import br.com.centralit.framework.json.JsonCalendarSimpleDateSerializer; 33 import br.com.centralit.framework.json.JsonCalendarSimpleDateSerializer;
@@ -31,11 +37,6 @@ import br.com.centralit.framework.model.Dominio; @@ -31,11 +37,6 @@ import br.com.centralit.framework.model.Dominio;
31 import br.com.centralit.framework.model.arquitetura.PersistentObjectAuditOrganizacao; 37 import br.com.centralit.framework.model.arquitetura.PersistentObjectAuditOrganizacao;
32 import br.com.centralit.framework.util.UtilObjeto; 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 * <p> 41 * <p>
41 * <img src="http://centralit.com.br/images/logo_central.png"> 42 * <img src="http://centralit.com.br/images/logo_central.png">
@@ -76,11 +77,13 @@ public class EntradaAlmoxarifado extends PersistentObjectAuditOrganizacao implem @@ -76,11 +77,13 @@ public class EntradaAlmoxarifado extends PersistentObjectAuditOrganizacao implem
76 77
77 /** Atributo serialVersionUID. */ 78 /** Atributo serialVersionUID. */
78 private static final long serialVersionUID = 6267732497145774401L; 79 private static final long serialVersionUID = 6267732497145774401L;
79 - 80 +
80 /** Atributo id. */ 81 /** Atributo id. */
81 @Id 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 @GeneratedValue(strategy = GenerationType.AUTO) 87 @GeneratedValue(strategy = GenerationType.AUTO)
85 @JsonView({ Views.GenericView.class }) 88 @JsonView({ Views.GenericView.class })
86 private Long id; 89 private Long id;
@@ -98,7 +101,8 @@ public class EntradaAlmoxarifado extends PersistentObjectAuditOrganizacao implem @@ -98,7 +101,8 @@ public class EntradaAlmoxarifado extends PersistentObjectAuditOrganizacao implem
98 @Temporal(TemporalType.TIMESTAMP) 101 @Temporal(TemporalType.TIMESTAMP)
99 @JsonSerialize(using = JsonCalendarSimpleDateSerializer.class) 102 @JsonSerialize(using = JsonCalendarSimpleDateSerializer.class)
100 @JsonDeserialize(using = JsonCalendarSimpleDateDeserializer.class) 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 private Calendar dataContabil; 106 private Calendar dataContabil;
103 107
104 /** Atributo dataRecebimento. */ 108 /** Atributo dataRecebimento. */
@@ -106,7 +110,7 @@ public class EntradaAlmoxarifado extends PersistentObjectAuditOrganizacao implem @@ -106,7 +110,7 @@ public class EntradaAlmoxarifado extends PersistentObjectAuditOrganizacao implem
106 @Temporal(TemporalType.TIMESTAMP) 110 @Temporal(TemporalType.TIMESTAMP)
107 @JsonSerialize(using = JsonCalendarSimpleDateSerializer.class) 111 @JsonSerialize(using = JsonCalendarSimpleDateSerializer.class)
108 @JsonDeserialize(using = JsonCalendarSimpleDateDeserializer.class) 112 @JsonDeserialize(using = JsonCalendarSimpleDateDeserializer.class)
109 - @JsonView({ Views.EntradaListView.class, Views.BemPatrimonialEditView.class }) 113 + @JsonView({ Views.EntradaListView.class, Views.BemPatrimonialEditView.class })
110 private Calendar dataRecebimento; 114 private Calendar dataRecebimento;
111 115
112 /** Atributo codigo. */ 116 /** Atributo codigo. */
@@ -150,12 +154,12 @@ public class EntradaAlmoxarifado extends PersistentObjectAuditOrganizacao implem @@ -150,12 +154,12 @@ public class EntradaAlmoxarifado extends PersistentObjectAuditOrganizacao implem
150 /** Atributo codigo. */ 154 /** Atributo codigo. */
151 @Column(length = 30) 155 @Column(length = 30)
152 private String codigoAsi; 156 private String codigoAsi;
153 - 157 +
154 /** Atributo entrada concluida. */ 158 /** Atributo entrada concluida. */
155 @Column(name = "isentradaconcluida") 159 @Column(name = "isentradaconcluida")
156 @JsonView({ Views.EntradaListView.class }) 160 @JsonView({ Views.EntradaListView.class })
157 private Boolean isEntradaConcluida; 161 private Boolean isEntradaConcluida;
158 - 162 +
159 /** Atributo entrada contabilizada. */ 163 /** Atributo entrada contabilizada. */
160 @Column(name = "iscontabilizada") 164 @Column(name = "iscontabilizada")
161 @JsonView({ Views.EntradaListView.class }) 165 @JsonView({ Views.EntradaListView.class })
@@ -175,15 +179,19 @@ public class EntradaAlmoxarifado extends PersistentObjectAuditOrganizacao implem @@ -175,15 +179,19 @@ public class EntradaAlmoxarifado extends PersistentObjectAuditOrganizacao implem
175 @OneToMany(fetch = FetchType.LAZY, mappedBy = "entrada", cascade = CascadeType.ALL, orphanRemoval = true) 179 @OneToMany(fetch = FetchType.LAZY, mappedBy = "entrada", cascade = CascadeType.ALL, orphanRemoval = true)
176 @JsonView({ ViewsAdmMateriais.EntradaAlmoxarifadoEditView.class }) 180 @JsonView({ ViewsAdmMateriais.EntradaAlmoxarifadoEditView.class })
177 private Collection<EntradaAlmoxarifadoItem> entradasItem; 181 private Collection<EntradaAlmoxarifadoItem> entradasItem;
178 - 182 +
179 @ManyToOne(fetch = FetchType.LAZY, optional = false) 183 @ManyToOne(fetch = FetchType.LAZY, optional = false)
180 @JsonView({ ViewsAdmMateriais.EntradaAlmoxarifadoEditView.class }) 184 @JsonView({ ViewsAdmMateriais.EntradaAlmoxarifadoEditView.class })
181 private Dominio dominioFinalidade; 185 private Dominio dominioFinalidade;
182 - 186 +
183 @ManyToOne(fetch = FetchType.LAZY, optional = true) 187 @ManyToOne(fetch = FetchType.LAZY, optional = true)
184 @JsonView(ViewsAdmMateriais.EntradaAlmoxarifadoEditView.class) 188 @JsonView(ViewsAdmMateriais.EntradaAlmoxarifadoEditView.class)
185 private EstruturaOrganizacional unidadeRequisitante; 189 private EstruturaOrganizacional unidadeRequisitante;
186 190
  191 + @Transient
  192 + @JsonView({ ViewsAdmMateriais.EntradaAlmoxarifadoEditView.class })
  193 + private Long rascunho;
  194 +
187 /** 195 /**
188 * Retorna o valor do atributo <code>id</code> 196 * Retorna o valor do atributo <code>id</code>
189 * 197 *
@@ -433,17 +441,17 @@ public class EntradaAlmoxarifado extends PersistentObjectAuditOrganizacao implem @@ -433,17 +441,17 @@ public class EntradaAlmoxarifado extends PersistentObjectAuditOrganizacao implem
433 441
434 this.dataReferencia = dataReferencia; 442 this.dataReferencia = dataReferencia;
435 } 443 }
436 - 444 +
437 /** 445 /**
438 * Define o valor do atributo <code>isEntradaConcluida</code>. 446 * Define o valor do atributo <code>isEntradaConcluida</code>.
439 * 447 *
440 * @param isEntradaConcluida 448 * @param isEntradaConcluida
441 */ 449 */
442 public void setIsEntradaConcluida(Boolean isEntradaConcluida) { 450 public void setIsEntradaConcluida(Boolean isEntradaConcluida) {
443 - 451 +
444 this.isEntradaConcluida = isEntradaConcluida; 452 this.isEntradaConcluida = isEntradaConcluida;
445 } 453 }
446 - 454 +
447 /** 455 /**
448 * Retorna o valor do atributo <code>isEntradaConcluida</code> 456 * Retorna o valor do atributo <code>isEntradaConcluida</code>
449 * 457 *
@@ -453,24 +461,24 @@ public class EntradaAlmoxarifado extends PersistentObjectAuditOrganizacao implem @@ -453,24 +461,24 @@ public class EntradaAlmoxarifado extends PersistentObjectAuditOrganizacao implem
453 461
454 return isEntradaConcluida; 462 return isEntradaConcluida;
455 } 463 }
456 - 464 +
457 /** 465 /**
458 * Define o valor do atributo <code>isContabilizada</code>. 466 * Define o valor do atributo <code>isContabilizada</code>.
459 * 467 *
460 * @param isContabilizada 468 * @param isContabilizada
461 */ 469 */
462 public void setIsContabilizada(Boolean isContabilizada) { 470 public void setIsContabilizada(Boolean isContabilizada) {
463 - 471 +
464 this.isContabilizada = isContabilizada; 472 this.isContabilizada = isContabilizada;
465 } 473 }
466 - 474 +
467 /** 475 /**
468 * Retorna o valor do atributo <code>isContabilizada</code> 476 * Retorna o valor do atributo <code>isContabilizada</code>
469 * 477 *
470 * @return <code>IsContabilizada</code> 478 * @return <code>IsContabilizada</code>
471 */ 479 */
472 public Boolean getIsContabilizada() { 480 public Boolean getIsContabilizada() {
473 - 481 +
474 return isContabilizada; 482 return isContabilizada;
475 } 483 }
476 484
@@ -489,7 +497,7 @@ public class EntradaAlmoxarifado extends PersistentObjectAuditOrganizacao implem @@ -489,7 +497,7 @@ public class EntradaAlmoxarifado extends PersistentObjectAuditOrganizacao implem
489 return this; 497 return this;
490 } 498 }
491 } 499 }
492 - 500 +
493 /** 501 /**
494 * Retorna o valor do atributo <code>almoxarifado</code> 502 * Retorna o valor do atributo <code>almoxarifado</code>
495 * 503 *
@@ -565,5 +573,13 @@ public class EntradaAlmoxarifado extends PersistentObjectAuditOrganizacao implem @@ -565,5 +573,13 @@ public class EntradaAlmoxarifado extends PersistentObjectAuditOrganizacao implem
565 public void setUnidadeRequisitante(EstruturaOrganizacional unidadeRequisitante) { 573 public void setUnidadeRequisitante(EstruturaOrganizacional unidadeRequisitante) {
566 this.unidadeRequisitante = unidadeRequisitante; 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,7 +66,7 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize;
66 @Audited 66 @Audited
67 @Entity 67 @Entity
68 @Table(name = "alm_en_entradaitem") 68 @Table(name = "alm_en_entradaitem")
69 -@JsonIgnoreProperties({ "$quantidadeEntrada", "uuid", "$validarPrecoMedio" }) 69 +@JsonIgnoreProperties({ "$quantidadeEntrada", "uuid", "$validarPrecoMedio", "$checked" })
70 public class EntradaAlmoxarifadoItem extends PersistentObjectAudit { 70 public class EntradaAlmoxarifadoItem extends PersistentObjectAudit {
71 71
72 /** Atributo serialVersionUID. */ 72 /** Atributo serialVersionUID. */
cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/impl/EntradaAlmoxarifadoServiceImpl.java
1 package br.com.centralit.api.service.impl; 1 package br.com.centralit.api.service.impl;
2 2
  3 +import java.util.ArrayList;
3 import java.util.Calendar; 4 import java.util.Calendar;
4 import java.util.HashMap; 5 import java.util.HashMap;
5 import java.util.List; 6 import java.util.List;
6 import java.util.Map; 7 import java.util.Map;
7 8
  9 +import org.apache.commons.lang3.StringUtils;
8 import org.springframework.beans.factory.annotation.Autowired; 10 import org.springframework.beans.factory.annotation.Autowired;
9 import org.springframework.beans.factory.annotation.Qualifier; 11 import org.springframework.beans.factory.annotation.Qualifier;
10 import org.springframework.stereotype.Service; 12 import org.springframework.stereotype.Service;
11 import org.springframework.validation.Validator; 13 import org.springframework.validation.Validator;
12 14
  15 +import com.drew.lang.StringUtil;
  16 +
13 import br.com.centralit.api.dao.EntradaAlmoxarifadoDao; 17 import br.com.centralit.api.dao.EntradaAlmoxarifadoDao;
  18 +import br.com.centralit.api.model.BemAlmoxarifadoCaracteristica;
14 import br.com.centralit.api.model.ContaContabilMovimento; 19 import br.com.centralit.api.model.ContaContabilMovimento;
15 import br.com.centralit.api.model.EntradaAlmoxarifado; 20 import br.com.centralit.api.model.EntradaAlmoxarifado;
16 import br.com.centralit.api.model.EntradaAlmoxarifadoDocumento; 21 import br.com.centralit.api.model.EntradaAlmoxarifadoDocumento;
@@ -28,6 +33,7 @@ import br.com.centralit.api.service.MaterialCaracteristicaService; @@ -28,6 +33,7 @@ import br.com.centralit.api.service.MaterialCaracteristicaService;
28 import br.com.centralit.api.service.MaterialConsumoService; 33 import br.com.centralit.api.service.MaterialConsumoService;
29 import br.com.centralit.api.service.MovimentoEstoqueService; 34 import br.com.centralit.api.service.MovimentoEstoqueService;
30 import br.com.centralit.api.service.ParceiroService; 35 import br.com.centralit.api.service.ParceiroService;
  36 +import br.com.centralit.api.service.RascunhoService;
31 import br.com.centralit.api.service.UnidadeMedidaService; 37 import br.com.centralit.api.service.UnidadeMedidaService;
32 import br.com.centralit.api.service.UsuarioService; 38 import br.com.centralit.api.service.UsuarioService;
33 import br.com.centralit.api.service.validation.EntradaAlmoxarifadoAllValidator; 39 import br.com.centralit.api.service.validation.EntradaAlmoxarifadoAllValidator;
@@ -111,6 +117,9 @@ public class EntradaAlmoxarifadoServiceImpl extends GenericServiceImpl&lt;EntradaAl @@ -111,6 +117,9 @@ public class EntradaAlmoxarifadoServiceImpl extends GenericServiceImpl&lt;EntradaAl
111 @Autowired 117 @Autowired
112 private ConfiguracaoParametroSistemaService configuracaoParametroSistemaService; 118 private ConfiguracaoParametroSistemaService configuracaoParametroSistemaService;
113 119
  120 + @Autowired
  121 + private RascunhoService rascunhoService;
  122 +
114 private Validator validatorBasic; 123 private Validator validatorBasic;
115 124
116 private Validator validatorAll; 125 private Validator validatorAll;
@@ -150,6 +159,8 @@ public class EntradaAlmoxarifadoServiceImpl extends GenericServiceImpl&lt;EntradaAl @@ -150,6 +159,8 @@ public class EntradaAlmoxarifadoServiceImpl extends GenericServiceImpl&lt;EntradaAl
150 configurarNotaRecebimento(entradaAlmoxarifado); 159 configurarNotaRecebimento(entradaAlmoxarifado);
151 160
152 entrada.setCodigo(String.valueOf(entradaAlmoxarifado.getNotaRecebimento())); 161 entrada.setCodigo(String.valueOf(entradaAlmoxarifado.getNotaRecebimento()));
  162 +
  163 + rascunhoService.removeById(entrada.getRascunho());
153 164
154 return entradaAlmoxarifado; 165 return entradaAlmoxarifado;
155 } 166 }
@@ -232,16 +243,24 @@ public class EntradaAlmoxarifadoServiceImpl extends GenericServiceImpl&lt;EntradaAl @@ -232,16 +243,24 @@ public class EntradaAlmoxarifadoServiceImpl extends GenericServiceImpl&lt;EntradaAl
232 entradaAlmoxarifadoItem.setUnidadeMedidaEntrada(this.unidadeMedidaService.find(entradaAlmoxarifadoItem.getUnidadeMedidaEntrada().getId())); 243 entradaAlmoxarifadoItem.setUnidadeMedidaEntrada(this.unidadeMedidaService.find(entradaAlmoxarifadoItem.getUnidadeMedidaEntrada().getId()));
233 244
234 entradaAlmoxarifadoItem.setEntrada(entrada); 245 entradaAlmoxarifadoItem.setEntrada(entrada);
  246 +
  247 + List<BemAlmoxarifadoCaracteristica> caracteristicas = new ArrayList<BemAlmoxarifadoCaracteristica>();
235 248
236 //TODO Arrumar caracteristicas 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,6 +310,9 @@ public class StartupListenerAlmoxarifado extends UtilStartup implements Applicat
310 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.CONCLUIR_ENTRADA_BTN", "Concluir", dominio, modulo)); 310 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.CONCLUIR_ENTRADA_BTN", "Concluir", dominio, modulo));
311 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.CONCLUIR_E_CONTABILIZAR_ENTRADA", "Concluir e contabilizar", dominio, modulo)); 311 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.CONCLUIR_E_CONTABILIZAR_ENTRADA", "Concluir e contabilizar", dominio, modulo));
312 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.CONCLUIR_E_DESCONTABILIZAR_ENTRADA", "Concluir e descontabilizar", dominio, modulo)); 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 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.ATENDIMENTO_S", "Atendimento(s)", dominio, modulo)); 316 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.ATENDIMENTO_S", "Atendimento(s)", dominio, modulo));
314 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.BAIXA_S", "Baixa(s)", dominio, modulo)); 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,6 +363,8 @@ public class StartupListenerAlmoxarifado extends UtilStartup implements Applicat
360 363
361 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.ENTRADA_CONTABILIZADA", "Entrada contabilizada com sucesso!", dominio, modulo)); 364 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.ENTRADA_CONTABILIZADA", "Entrada contabilizada com sucesso!", dominio, modulo));
362 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.ENTRADA_DESCONTABILIZADA", "Entrada descontabilizada com sucesso!", dominio, modulo)); 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,10 +2,10 @@
2 2
3 citApp.controller('EntradaAlmoxarifadoController', ['$scope', '$filter', 'FileUploader', 'EntradaAlmoxarifadoRepository', 'EstruturaOrganizacionalAlmoxarifadoRepository', '$translate', '$timeout', 3 citApp.controller('EntradaAlmoxarifadoController', ['$scope', '$filter', 'FileUploader', 'EntradaAlmoxarifadoRepository', 'EstruturaOrganizacionalAlmoxarifadoRepository', '$translate', '$timeout',
4 'DominioRepository', 'FornecedorRepository', 'MaterialConsumoRepository', 'EntradaAlmoxarifadoItemRepository', 'MaterialLocalEstoqueRepository', 4 'DominioRepository', 'FornecedorRepository', 'MaterialConsumoRepository', 'EntradaAlmoxarifadoItemRepository', 'MaterialLocalEstoqueRepository',
5 - 'MovimentoEstoqueRepository', 5 + 'MovimentoEstoqueRepository','$q','MaterialRepository',
6 function EntradaAlmoxarifadoController($scope, $filter, FileUploader, EntradaAlmoxarifadoRepository, EstruturaOrganizacionalAlmoxarifadoRepository, 6 function EntradaAlmoxarifadoController($scope, $filter, FileUploader, EntradaAlmoxarifadoRepository, EstruturaOrganizacionalAlmoxarifadoRepository,
7 $translate, $timeout, DominioRepository , FornecedorRepository, MaterialConsumoRepository, EntradaAlmoxarifadoItemRepository, 7 $translate, $timeout, DominioRepository , FornecedorRepository, MaterialConsumoRepository, EntradaAlmoxarifadoItemRepository,
8 - MaterialLocalEstoqueRepository, MovimentoEstoqueRepository) { 8 + MaterialLocalEstoqueRepository, MovimentoEstoqueRepository, $q, MaterialRepository) {
9 9
10 var CODIGO_DOMINIO_TIPO_RECEBIMENTO_COMPRA_ORCAMENTARIA = 1; 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,6 +42,10 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp
42 42
43 $scope.atualizarListaSizeSelectEntradaItem(); 43 $scope.atualizarListaSizeSelectEntradaItem();
44 $scope.edit = true; 44 $scope.edit = true;
  45 +
  46 + $scope.workspace.objetoScope = $scope.entradaAlmoxarifado;
  47 + $scope.startTimerIntervalSaveDraft($scope.workspace, null, true);
  48 +
45 $timeout(function(){ 49 $timeout(function(){
46 $scope.entradaAlmoxarifadoForm.$submitted = false; 50 $scope.entradaAlmoxarifadoForm.$submitted = false;
47 $scope.entradaAlmoxarifadoForm.$setPristine(); 51 $scope.entradaAlmoxarifadoForm.$setPristine();
@@ -137,6 +141,7 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp @@ -137,6 +141,7 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp
137 $scope.calcularValorTotalMateriais(); 141 $scope.calcularValorTotalMateriais();
138 $scope.atualizarListaSizeSelectEntradaItem(); 142 $scope.atualizarListaSizeSelectEntradaItem();
139 $scope.edit = edit; 143 $scope.edit = edit;
  144 + $scope.stopTimerIntervalDraft($scope.workspace);
140 $scope.setLoading(false); 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,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 $scope.findAutoCompleteAlmoxarifado = function(value){ 168 $scope.findAutoCompleteAlmoxarifado = function(value){
153 return EstruturaOrganizacionalAlmoxarifadoRepository.listarEstruturasOrganizacionaisAlmoxarifadoPorOrganizacao(value, $scope.usuarioLogado.organizacao.id).then(function(result) { 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,6 +428,7 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp
412 428
413 $scope.entradaAlmoxarifado.isEntradaConcluida = true; 429 $scope.entradaAlmoxarifado.isEntradaConcluida = true;
414 $scope.entradaAlmoxarifadoOriginal.isEntradaConcluida = true; 430 $scope.entradaAlmoxarifadoOriginal.isEntradaConcluida = true;
  431 + $scope.entradaAlmoxarifado.rascunho = $scope.workspace.rascunho ? $scope.workspace.rascunho.id : null;
415 432
416 if (contabilizar) { 433 if (contabilizar) {
417 $scope.dataContabilFinal = $scope.entradaAlmoxarifado.dataContabil; 434 $scope.dataContabilFinal = $scope.entradaAlmoxarifado.dataContabil;
@@ -977,5 +994,132 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp @@ -977,5 +994,132 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp
977 } 994 }
978 return $scope.stepValid; 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 @@ @@ -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,6 +29,10 @@
29 <i class="fa fa-print"></i> 29 <i class="fa fa-print"></i>
30 <translate>LABEL.RELATORIO</translate> 30 <translate>LABEL.RELATORIO</translate>
31 </button> 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 <span class="divider-vertical"></span> 37 <span class="divider-vertical"></span>
34 38
cit-almoxarifado-web/src/main/webapp/html/entradaAlmoxarifado/entradaAlmoxarifadoPg2.html
@@ -52,6 +52,11 @@ @@ -52,6 +52,11 @@
52 <i class="fa fa-times red"></i> 52 <i class="fa fa-times red"></i>
53 <translate>LABEL.REMOVER</translate> 53 <translate>LABEL.REMOVER</translate>
54 </button> 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 </div><!-- .panel-heading --> 61 </div><!-- .panel-heading -->
57 <table class="table table-bordered table-striped"> 62 <table class="table table-bordered table-striped">
@@ -93,4 +98,8 @@ @@ -93,4 +98,8 @@
93 98
94 </fieldset> 99 </fieldset>
95 </div> <!-- /.page-content --> 100 </div> <!-- /.page-content -->
96 -</ng-form>  
97 \ No newline at end of file 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 \ No newline at end of file 107 \ No newline at end of file