Commit 1083fbffa0d43602c18a32413b2e45bc4af593ee
Exists in
master
Merge branch 'tarefa-3943' of http://ferramentasgo.centralit.com.br:8080/scm/git…
…/cit-grp-almoxarifado into tarefa-3943
Showing
9 changed files
with
106 additions
and
1 deletions
Show diff stats
cit-almoxarifado-api/src/main/java/br/com/centralit/api/dao/MaterialLocalEstoqueDao.java
1 | 1 | package br.com.centralit.api.dao; |
2 | 2 | |
3 | +import java.math.BigDecimal; | |
3 | 4 | import java.util.List; |
4 | 5 | |
5 | 6 | import br.com.centralit.api.model.EstruturaOrganizacional; |
... | ... | @@ -23,4 +24,6 @@ public interface MaterialLocalEstoqueDao extends CitGenericDAO { |
23 | 24 | List<MaterialLocalEstoque> buscarLocaisEstoquePorIdMaterialIdAlmoxarifado(Long idMaterial, Long idAlmoxarifado); |
24 | 25 | |
25 | 26 | Boolean enderecoJaVinculadoAoMaterial(Long idMaterial, Long idEndereco); |
27 | + | |
28 | + BigDecimal buscarQuantidadeLocalEstoquePorIdMaterialIdEndereco(Long idMaterial, Long idEndereco); | |
26 | 29 | } | ... | ... |
cit-almoxarifado-api/src/main/java/br/com/centralit/api/dao/impl/MaterialLocalEstoqueDaoHibernate.java
1 | 1 | package br.com.centralit.api.dao.impl; |
2 | 2 | |
3 | +import java.math.BigDecimal; | |
3 | 4 | import java.util.List; |
4 | 5 | |
5 | 6 | import org.springframework.stereotype.Repository; |
6 | 7 | |
8 | +import com.googlecode.genericdao.search.Search; | |
9 | + | |
7 | 10 | import br.com.centralit.api.dao.MaterialLocalEstoqueDao; |
8 | 11 | import br.com.centralit.api.model.EstruturaOrganizacional; |
9 | 12 | import br.com.centralit.api.model.MaterialLocalEstoque; |
... | ... | @@ -90,4 +93,28 @@ public class MaterialLocalEstoqueDaoHibernate extends CitGenericDAOImpl implemen |
90 | 93 | |
91 | 94 | return this.count(search) > 0 ? Boolean.TRUE : Boolean.FALSE; |
92 | 95 | } |
96 | + | |
97 | + @Override | |
98 | + public BigDecimal buscarQuantidadeLocalEstoquePorIdMaterialIdEndereco(Long idMaterial, Long idEndereco) { | |
99 | + | |
100 | + SearchSeven search = new SearchSeven(); | |
101 | + | |
102 | + search.setResultMode(Search.RESULT_SINGLE); | |
103 | + search.addField("quantidade"); | |
104 | + search.addFilterEqual("materialEstoque.material.id", idMaterial); | |
105 | + search.addFilterEqual("endereco.id", idEndereco); | |
106 | + | |
107 | + BigDecimal quantidadeTotal = new BigDecimal("0"); | |
108 | + | |
109 | + List<BigDecimal> consulta = this.search(search); | |
110 | + | |
111 | + if(consulta == null || consulta.size() == 0){ | |
112 | + return quantidadeTotal; | |
113 | + }else{ | |
114 | + for (BigDecimal qt : consulta) { | |
115 | + quantidadeTotal = quantidadeTotal.add(qt); | |
116 | + } | |
117 | + } | |
118 | + return quantidadeTotal; | |
119 | + } | |
93 | 120 | } | ... | ... |
cit-almoxarifado-api/src/main/java/br/com/centralit/api/model/MaterialLocalEstoque.java
... | ... | @@ -89,7 +89,7 @@ public class MaterialLocalEstoque extends PersistentObjectAuditOrganizacao { |
89 | 89 | |
90 | 90 | /** Atributo quantidade. */ |
91 | 91 | @JsonView({ Views.MaterialLocalEstoqueView.class, ViewsAdmMateriais.TransferenciaEnderecoEstoqueView.class }) |
92 | - private BigDecimal quantidade; | |
92 | + private BigDecimal quantidade = BigDecimal.ZERO; | |
93 | 93 | |
94 | 94 | /** Atributo unidadeMedidaEntrada. */ |
95 | 95 | @JsonView({ ViewsAdmMateriais.TransferenciaEnderecoEstoqueView.class }) | ... | ... |
cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/EntradaAlmoxarifadoItemService.java
... | ... | @@ -3,6 +3,7 @@ package br.com.centralit.api.service; |
3 | 3 | import java.math.BigDecimal; |
4 | 4 | import java.util.Calendar; |
5 | 5 | import java.util.Collection; |
6 | +import java.util.List; | |
6 | 7 | |
7 | 8 | import br.com.centralit.api.model.EntradaAlmoxarifadoItem; |
8 | 9 | import br.com.centralit.api.model.EstruturaOrganizacional; |
... | ... | @@ -134,4 +135,6 @@ public interface EntradaAlmoxarifadoItemService extends GenericService<EntradaAl |
134 | 135 | * @return Valor monetário da quantidade movimentada na devolução. |
135 | 136 | */ |
136 | 137 | public BigDecimal realizaMovimentoDevolucao(MaterialConsumo materialConsumo, BigDecimal quantidadeMovimentada); |
138 | + | |
139 | + public List<EntradaAlmoxarifadoItem> findItensPorEntradaId(Long idEntrada); | |
137 | 140 | } | ... | ... |
cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/MaterialLocalEstoqueService.java
1 | 1 | package br.com.centralit.api.service; |
2 | 2 | |
3 | +import java.math.BigDecimal; | |
3 | 4 | import java.util.List; |
4 | 5 | |
5 | 6 | import br.com.centralit.api.model.EstruturaOrganizacional; |
... | ... | @@ -23,4 +24,6 @@ public interface MaterialLocalEstoqueService extends GenericService<MaterialLoca |
23 | 24 | List<MaterialLocalEstoque> buscarLocaisEstoquePorIdMaterialIdAlmoxarifado(Long idMaterial, Long idAlmoxarifado); |
24 | 25 | |
25 | 26 | Boolean enderecoJaVinculadoAoMaterial(Long idMaterial, Long idEndereco); |
27 | + | |
28 | + BigDecimal buscarQuantidadeLocalEstoquePorIdMaterialIdEndereco(Long idMaterial, Long idEndereco); | |
26 | 29 | } | ... | ... |
cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/impl/EntradaAlmoxarifadoItemServiceImpl.java
... | ... | @@ -259,4 +259,9 @@ public class EntradaAlmoxarifadoItemServiceImpl extends GenericServiceImpl<Entra |
259 | 259 | return retorno; |
260 | 260 | } |
261 | 261 | |
262 | + @Override | |
263 | + public List<EntradaAlmoxarifadoItem> findItensPorEntradaId(Long idEntrada) { | |
264 | + return (List)this.entradaAlmoxarifadoItemDao.buscarPorAtributo("entrada.id", idEntrada); | |
265 | + } | |
266 | + | |
262 | 267 | } | ... | ... |
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.math.BigDecimal; | |
3 | 4 | import java.util.ArrayList; |
4 | 5 | import java.util.Calendar; |
5 | 6 | import java.util.Collection; |
... | ... | @@ -16,12 +17,14 @@ import org.springframework.validation.Validator; |
16 | 17 | import br.com.centralit.api.dao.EntradaAlmoxarifadoDao; |
17 | 18 | import br.com.centralit.api.model.BemAlmoxarifadoCaracteristica; |
18 | 19 | import br.com.centralit.api.model.ContaContabilMovimento; |
20 | +import br.com.centralit.api.model.EnderecoEstoque; | |
19 | 21 | import br.com.centralit.api.model.EntradaAlmoxarifado; |
20 | 22 | import br.com.centralit.api.model.EntradaAlmoxarifadoDocumento; |
21 | 23 | import br.com.centralit.api.model.EntradaAlmoxarifadoItem; |
22 | 24 | import br.com.centralit.api.model.EntradaAlmoxarifadoObservacao; |
23 | 25 | import br.com.centralit.api.model.MaterialCaracteristica; |
24 | 26 | import br.com.centralit.api.model.MaterialConsumo; |
27 | +import br.com.centralit.api.model.MaterialLocalEstoque; | |
25 | 28 | import br.com.centralit.api.model.MovimentoEstoque; |
26 | 29 | import br.com.centralit.api.service.BemAlmoxarifadoCaracteristicaService; |
27 | 30 | import br.com.centralit.api.service.ConfiguracaoParametroSistemaService; |
... | ... | @@ -34,6 +37,7 @@ import br.com.centralit.api.service.EstruturaOrganizacionalService; |
34 | 37 | import br.com.centralit.api.service.InternacionalizacaoService; |
35 | 38 | import br.com.centralit.api.service.MaterialCaracteristicaService; |
36 | 39 | import br.com.centralit.api.service.MaterialConsumoService; |
40 | +import br.com.centralit.api.service.MaterialLocalEstoqueService; | |
37 | 41 | import br.com.centralit.api.service.MovimentoEstoqueService; |
38 | 42 | import br.com.centralit.api.service.ParceiroService; |
39 | 43 | import br.com.centralit.api.service.RascunhoService; |
... | ... | @@ -131,6 +135,9 @@ public class EntradaAlmoxarifadoServiceImpl extends GenericServiceImpl<EntradaAl |
131 | 135 | @Autowired |
132 | 136 | private InternacionalizacaoService internacionalizacaoService; |
133 | 137 | |
138 | + @Autowired | |
139 | + private MaterialLocalEstoqueService materialLocalEstoqueService; | |
140 | + | |
134 | 141 | private Dominio idioma; |
135 | 142 | |
136 | 143 | private Validator validatorBasic; |
... | ... | @@ -173,6 +180,8 @@ public class EntradaAlmoxarifadoServiceImpl extends GenericServiceImpl<EntradaAl |
173 | 180 | |
174 | 181 | this.validarCaracteristicasObrigatorias(entrada); |
175 | 182 | |
183 | + this.validarQuantidadeMaterialEstoque(entrada); | |
184 | + | |
176 | 185 | EntradaAlmoxarifado entradaAlmoxarifado = (EntradaAlmoxarifado) this.entradaAlmoxarifadoDao.save(entrada); |
177 | 186 | |
178 | 187 | configurarNotaRecebimento(entradaAlmoxarifado); |
... | ... | @@ -231,8 +240,12 @@ public class EntradaAlmoxarifadoServiceImpl extends GenericServiceImpl<EntradaAl |
231 | 240 | public EntradaAlmoxarifado merge(EntradaAlmoxarifado entrada) { |
232 | 241 | |
233 | 242 | this.validarEntidade(entrada, this.validatorBasic); |
243 | + for (EntradaAlmoxarifadoItem entradaAlmoxarifadoItem : entrada.getEntradasItem()) { | |
244 | + buscaCaracteristicaItem(entradaAlmoxarifadoItem); | |
245 | + } | |
234 | 246 | this.montarEntidade(entrada); |
235 | 247 | this.validarCaracteristicasObrigatorias(entrada); |
248 | + this.validarQuantidadeMaterialEstoque(entrada); | |
236 | 249 | return (EntradaAlmoxarifado) this.entradaAlmoxarifadoDao.merge(entrada); |
237 | 250 | } |
238 | 251 | |
... | ... | @@ -474,5 +487,49 @@ public class EntradaAlmoxarifadoServiceImpl extends GenericServiceImpl<EntradaAl |
474 | 487 | } |
475 | 488 | |
476 | 489 | } |
490 | + | |
491 | + private void validarQuantidadeMaterialEstoque(EntradaAlmoxarifado entrada){ | |
492 | + | |
493 | + StringBuilder mensagem = new StringBuilder(); | |
494 | + HashMap<MaterialLocalEstoque, BigDecimal> hashMaterialLocalEstoque = new HashMap<MaterialLocalEstoque, BigDecimal>(); | |
495 | + | |
496 | + for (EntradaAlmoxarifadoItem entradaAlmoxarifadoItem : entrada.getEntradasItem()) { | |
497 | + if(hashMaterialLocalEstoque.get(entradaAlmoxarifadoItem.getMaterialLocalEstoque()) != null){ | |
498 | + hashMaterialLocalEstoque.put(entradaAlmoxarifadoItem.getMaterialLocalEstoque(), hashMaterialLocalEstoque.get(entradaAlmoxarifadoItem.getMaterialLocalEstoque()).add(entradaAlmoxarifadoItem.getQuantidade())); | |
499 | + }else{ | |
500 | + hashMaterialLocalEstoque.put(entradaAlmoxarifadoItem.getMaterialLocalEstoque(), entradaAlmoxarifadoItem.getQuantidade()); | |
501 | + } | |
502 | + } | |
503 | + | |
504 | + if(UtilObjeto.isReferencia(entrada)){ | |
505 | + List<EntradaAlmoxarifadoItem> itensSalvos = this.entradaAlmoxarifadoItemService.findItensPorEntradaId(entrada.getId()); | |
506 | + for (EntradaAlmoxarifadoItem entradaAlmoxarifadoItem : itensSalvos) { | |
507 | + if(hashMaterialLocalEstoque.get(entradaAlmoxarifadoItem.getMaterialLocalEstoque()) != null){ | |
508 | + hashMaterialLocalEstoque.put(entradaAlmoxarifadoItem.getMaterialLocalEstoque(), hashMaterialLocalEstoque.get(entradaAlmoxarifadoItem.getMaterialLocalEstoque()).subtract(entradaAlmoxarifadoItem.getQuantidade())); | |
509 | + }else{ | |
510 | + hashMaterialLocalEstoque.put(entradaAlmoxarifadoItem.getMaterialLocalEstoque(), entradaAlmoxarifadoItem.getQuantidade()); | |
511 | + } | |
512 | + } | |
513 | + } | |
514 | + | |
515 | + for (Map.Entry<MaterialLocalEstoque,BigDecimal> materialLocQt : hashMaterialLocalEstoque.entrySet()) { | |
516 | + | |
517 | + MaterialLocalEstoque localEstoque = this.materialLocalEstoqueService.find(materialLocQt.getKey().getId()); | |
518 | + MaterialConsumo material = localEstoque.getMaterialEstoque().getMaterial(); | |
519 | + EnderecoEstoque enderecoEstoque = localEstoque.getEndereco(); | |
520 | + | |
521 | + | |
522 | + if(materialLocQt.getValue().add(localEstoque.getQuantidade()).doubleValue() > localEstoque.getCapacidade().doubleValue()){ | |
523 | + String validacao = this.internacionalizacaoService.getTranslate("ALMOXARIFADO.MSG.VALIDACAO_QUANTIDADE_SUPERIOR_CAPACIDADE_ENDERECO_ESTOQUE", this.getIdioma()); | |
524 | + validacao = String.format(validacao, material.getDescricao(), enderecoEstoque.getDescricao()); | |
525 | + validacao += "</br></br>"; | |
526 | + mensagem.append(validacao); | |
527 | + } | |
528 | + } | |
529 | + | |
530 | + if(StringUtils.isNotBlank(mensagem.toString())){ | |
531 | + throw new BusinessException(mensagem.toString(), CodigoErro.REGRA_NEGOCIO.getValue()); | |
532 | + } | |
533 | + } | |
477 | 534 | |
478 | 535 | } | ... | ... |
cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/impl/MaterialLocalEstoqueServiceImpl.java
1 | 1 | package br.com.centralit.api.service.impl; |
2 | 2 | |
3 | +import java.math.BigDecimal; | |
3 | 4 | import java.util.List; |
4 | 5 | |
5 | 6 | import org.springframework.beans.factory.annotation.Autowired; |
... | ... | @@ -124,5 +125,10 @@ public class MaterialLocalEstoqueServiceImpl extends GenericServiceImpl<Material |
124 | 125 | public Boolean enderecoJaVinculadoAoMaterial(Long idMaterial, Long idEndereco) { |
125 | 126 | return this.materailLocalEstoqueDao.enderecoJaVinculadoAoMaterial(idMaterial, idEndereco); |
126 | 127 | } |
128 | + | |
129 | + @Override | |
130 | + public BigDecimal buscarQuantidadeLocalEstoquePorIdMaterialIdEndereco(Long idMaterial, Long idEndereco) { | |
131 | + return this.materailLocalEstoqueDao.buscarQuantidadeLocalEstoquePorIdMaterialIdEndereco(idMaterial, idEndereco); | |
132 | + } | |
127 | 133 | |
128 | 134 | } | ... | ... |
cit-almoxarifado-web/src/main/java/br/com/centralit/listener/StartupListenerAlmoxarifado.java
... | ... | @@ -384,6 +384,7 @@ public class StartupListenerAlmoxarifado extends UtilStartup implements Applicat |
384 | 384 | internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.ACAO_COM_SAIDAS_POSTERIORES", "Você não pode realizar esta ação pois existem as seguintes saídas com materiais desta entrada: ", dominio, modulo)); |
385 | 385 | internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.VALIDACAO_PRECO_MEDIO_MATERIAL_CONSUMO", "Valor médio do material é superior a ", dominio, modulo)); |
386 | 386 | internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.VALIDACAO_CARACTERISTICA_OBRIGATORIA", "No item %s, há caracteristicas obrigatórias que devem ser preenchidas.", dominio, modulo)); |
387 | + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.VALIDACAO_QUANTIDADE_SUPERIOR_CAPACIDADE_ENDERECO_ESTOQUE", "O material %s ultrapassa a capacidade suportada do material no endereço de estoque %s.", dominio, modulo)); | |
387 | 388 | } |
388 | 389 | } |
389 | 390 | ... | ... |