Commit c3f40fa6e94b2198c0e8d5c6980283ec41700fc9
Exists in
master
Merge branch 'tarefa-3943' of http://ferramentasgo.centralit.com.br:8080/scm/git…
…/cit-grp-almoxarifado into tarefa-3943
Showing
8 changed files
with
363 additions
and
34 deletions
Show diff stats
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<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<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<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('EntradaAlmoxarifadoController', ['$scope', '$filter', '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('EntradaAlmoxarifadoController', ['$scope', '$filter', '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('EntradaAlmoxarifadoController', ['$scope', '$filter', '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('EntradaAlmoxarifadoController', ['$scope', '$filter', '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('EntradaAlmoxarifadoController', ['$scope', '$filter', '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 | ... | ... |