Commit 1083fbffa0d43602c18a32413b2e45bc4af593ee

Authored by geovane.filho
2 parents 8b156462 d17459e4
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/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&lt;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&lt;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&lt;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&lt;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&lt;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&lt;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&lt;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&lt;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  
... ...