Commit 069e12d2ea4e95679709248d4184592c0bcbae26

Authored by THIAGO VIEIRA DI COIMBRA ROCHA
2 parents 287a85a0 2cfcf34d
Exists in master

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

…cit-grp-almoxarifado into adm-1.12.0
cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/impl/AtendimentoRequisicaoConsumoItemServiceImpl.java
... ... @@ -45,9 +45,9 @@ import br.com.centralit.framework.util.UtilObjeto;
45 45 @Service("atendimentoRequisicaoConsumoItemService")
46 46 public class AtendimentoRequisicaoConsumoItemServiceImpl extends GenericServiceImpl<AtendimentoRequisicaoConsumoItem, Long> implements AtendimentoRequisicaoConsumoItemService {
47 47  
48   - private static final String VALIDACAO_DATA_ATENDIMENTO_FORA_REFERENCIA = "VALIDACAO.DATA_ATENDIMENTO_FORA_REFERENCIA";
  48 + private static final String VALIDACAO_DATA_ATENDIMENTO_FORA_REFERENCIA = "ALMOXARIFADO.VALIDACAO.DATA_ATENDIMENTO_FORA_REFERENCIA";
49 49  
50   - private static final String VALIDACAO_ERRO_EXCLUSAO_EXISTE_MOVIMENTACAO = "VALIDACAO.ERRO_EXCLUSAO_EXISTE_MOVIMENTACAO";
  50 + private static final String VALIDACAO_ERRO_EXCLUSAO_EXISTE_MOVIMENTACAO = "ALMOXARIFADO.VALIDACAO.ERRO_EXCLUSAO_EXISTE_MOVIMENTACAO";
51 51  
52 52 /** Atributo atendimentoRequisicaoConsumoItemDao. */
53 53 private AtendimentoRequisicaoConsumoItemDao atendimentoRequisicaoConsumoItemDao;
... ... @@ -63,7 +63,7 @@ public class AtendimentoRequisicaoConsumoItemServiceImpl extends GenericServiceI
63 63  
64 64 @Autowired
65 65 private RequisicaoConsumoService requisicaoConsumoService;
66   -
  66 +
67 67 @Autowired
68 68 private ContaContabilMovimentoService contaContabilMovimentoService;
69 69  
... ... @@ -123,7 +123,7 @@ public class AtendimentoRequisicaoConsumoItemServiceImpl extends GenericServiceI
123 123  
124 124 throw new BusinessException(VALIDACAO_ERRO_EXCLUSAO_EXISTE_MOVIMENTACAO, CodigoErro.REGRA_NEGOCIO.getValue());
125 125 }
126   -
  126 +
127 127 //Remove movimentos do estoque
128 128 this.movimentoEstoqueService.removerMovimentosAtendimentoItem(entity);
129 129 //Remove movimentos contacontabil
... ...
cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/impl/AtendimentoRequisicaoConsumoServiceImpl.java
... ... @@ -60,13 +60,13 @@ import br.com.centralit.framework.util.UtilString;
60 60 @Service("atendimentoRequisicaoConsumoService")
61 61 public class AtendimentoRequisicaoConsumoServiceImpl extends GenericServiceImpl<AtendimentoRequisicaoConsumo, Long> implements AtendimentoRequisicaoConsumoService {
62 62  
63   - private static final String VALIDACAO_QUANTIDADE_ZERADA_NEGATIVA = "VALIDACAO.QUANTIDADE_ZERADA_NEGATIVA";
  63 + private static final String VALIDACAO_QUANTIDADE_ZERADA_NEGATIVA = "ALMOXARIFADO.VALIDACAO.QUANTIDADE_ZERADA_NEGATIVA";
64 64  
65   - private static final String VALIDACAO_ERRO_EXCLUSAO_EXISTE_MOVIMENTACAO = "VALIDACAO.ERRO_EXCLUSAO_EXISTE_MOVIMENTACAO";
  65 + private static final String VALIDACAO_ERRO_EXCLUSAO_EXISTE_MOVIMENTACAO = "ALMOXARIFADO.VALIDACAO.ERRO_EXCLUSAO_EXISTE_MOVIMENTACAO";
66 66  
67   - private static final String VALIDACAO_ERRO_EDICAO_EXISTE_MOVIMENTACAO = "VALIDACAO.ERRO_EDICAO_EXISTE_MOVIMENTACAO";
  67 + private static final String VALIDACAO_ERRO_EDICAO_EXISTE_MOVIMENTACAO = "ALMOXARIFADO.VALIDACAO.ERRO_EDICAO_EXISTE_MOVIMENTACAO";
68 68  
69   - private static final String VALIDACAO_DATA_ATENDIMENTO_FORA_REFERENCIA = "VALIDACAO.DATA_ATENDIMENTO_FORA_REFERENCIA";
  69 + private static final String VALIDACAO_DATA_ATENDIMENTO_FORA_REFERENCIA = "ALMOXARIFADO.VALIDACAO.DATA_ATENDIMENTO_FORA_REFERENCIA";
70 70  
71 71 private static final String VALIDACAO_QUANTIDADE_A_ATENDER_SUPERIOR_A_QTD_ESTOQUE = "ALMOXARIFADO.VALIDACAO.QUANTIDADE_A_ATENDER_SUPERIOR_A_QTD_ESTOQUE";
72 72  
... ... @@ -95,7 +95,7 @@ public class AtendimentoRequisicaoConsumoServiceImpl extends GenericServiceImpl&lt;
95 95  
96 96 @Autowired
97 97 private ConfiguracaoParametroSistemaService configuracaoParametroSistemaService;
98   -
  98 +
99 99 @Autowired
100 100 private ContaContabilMovimentoService contaContabilMovimentoService;
101 101  
... ... @@ -181,13 +181,13 @@ public class AtendimentoRequisicaoConsumoServiceImpl extends GenericServiceImpl&lt;
181 181  
182 182 //Apaga movimentos de estoque
183 183 this.movimentoEstoqueService.removerMovimentosAtendimento(atendimentoRequisicaoConsumo);
184   -
  184 +
185 185 //Apaga movimentos contabeis
186   - for (AtendimentoRequisicaoConsumoItem atendimentoItem : entity.getAtendimentoRequisicaoConsumoItems()){
  186 + for (AtendimentoRequisicaoConsumoItem atendimentoItem : atendimento.getAtendimentoRequisicaoConsumoItems()){
187 187 this.contaContabilMovimentoService.removerMovimentosAtendimento(atendimentoItem.getId());
188 188 }
189 189 this.movimentoEstoqueService.gerarMovimentoAtendimento(atendimentoRequisicaoConsumo);
190   - }
  190 + }
191 191  
192 192 }
193 193  
... ... @@ -336,7 +336,7 @@ public class AtendimentoRequisicaoConsumoServiceImpl extends GenericServiceImpl&lt;
336 336  
337 337 prontaParaAtendimento = Boolean.FALSE;
338 338 }
339   -
  339 +
340 340 //Remove movimentos contacontabil
341 341 this.contaContabilMovimentoService.removerMovimentosAtendimento(atendimentoRequisicaoConsumoItem.getId());
342 342 }
... ...
cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/impl/MaterialEstoqueSaldoMedioServiceImpl.java
... ... @@ -20,38 +20,38 @@ import br.com.centralit.framework.util.UtilObjeto;
20 20 * <p>
21 21 * <img src="http://centralit.com.br/images/logo_central.png">
22 22 * </p>
23   - *
  23 + *
24 24 * <p>
25 25 * <b>Company: </b> Central IT - Governança Corporativa -
26 26 * </p>
27   - *
  27 + *
28 28 * <p>
29 29 * <b>Title: </b>
30 30 * </p>
31   - *
  31 + *
32 32 * <p>
33 33 * <b>Description: </b>
34 34 * </p>
35   - *
  35 + *
36 36 * @since 23/06/2015 - 17:53:30
37   - *
  37 + *
38 38 * @version 1.0.0
39   - *
  39 + *
40 40 * @author geovane.filho
41   - *
  41 + *
42 42 */
43 43 @Service("materialEstoqueSaldoMedioService")
44 44 public class MaterialEstoqueSaldoMedioServiceImpl extends GenericServiceImpl<MaterialEstoqueSaldoMedio, Long> implements MaterialEstoqueSaldoMedioService {
45 45  
46 46 @Autowired
47 47 private MaterialEstoqueSaldoMedioDao materialEstoqueSaldoMedioDao;
48   -
  48 +
49 49 @Autowired
50 50 private MaterialConsumoService materialConsumoService;
51   -
  51 +
52 52 /**
53 53 * Responsável pela criação de novas instâncias desta classe.
54   - *
  54 + *
55 55 * @param entradaAlmoxarifadoDao
56 56 * @param validator
57 57 */
... ... @@ -61,7 +61,7 @@ public class MaterialEstoqueSaldoMedioServiceImpl extends GenericServiceImpl&lt;Mat
61 61 this.materialEstoqueSaldoMedioDao = materialEstoqueSaldoMedioDao;
62 62 this.validator = validator;
63 63 }
64   -
  64 +
65 65 /**
66 66 * {@inheritDoc}
67 67 */
... ... @@ -71,29 +71,29 @@ public class MaterialEstoqueSaldoMedioServiceImpl extends GenericServiceImpl&lt;Mat
71 71 if (saldoMedio == null) {
72 72 saldoMedio = new MaterialEstoqueSaldoMedio(material);
73 73 }
74   -
  74 +
75 75 BigDecimal qntAtual = saldoMedio.getQuantidadeAtual();
76 76 BigDecimal valorTotalAtual = BigDecimal.ZERO;
77 77 if(UtilObjeto.isReferencia(saldoMedio.getValorUnitarioMedio()) && UtilObjeto.isReferencia(saldoMedio.getRestoMedio())) {
78 78 valorTotalAtual = saldoMedio.getValorUnitarioMedio().multiply(saldoMedio.getQuantidadeAtual()).add(saldoMedio.getRestoMedio());
79 79 }
80   -
  80 +
81 81 BigDecimal qntNova = qntAtual.add(quantidade);
82 82 BigDecimal valorTotalNovo = valorTotalAtual.add(valorTotal);
83   -
  83 +
84 84 BigDecimal valorUnitarioNovo = valorTotalNovo.divide(qntNova, 4, BigDecimal.ROUND_HALF_UP);
85   -
  85 +
86 86 BigDecimal valorUnitXquantidade = qntNova.multiply(valorUnitarioNovo);
87 87 BigDecimal valorRestoNovo = valorTotalNovo.subtract(valorUnitXquantidade);
88   -
89   -
  88 +
  89 +
90 90 saldoMedio.setQuantidadeAtual(qntNova);
91 91 saldoMedio.setValorUnitarioMedio(valorUnitarioNovo);
92 92 saldoMedio.setRestoMedio(valorRestoNovo);
93   -
  93 +
94 94 this.materialEstoqueSaldoMedioDao.save(saldoMedio);
95 95 }
96   -
  96 +
97 97 /**
98 98 * {@inheritDoc}
99 99 */
... ... @@ -101,26 +101,28 @@ public class MaterialEstoqueSaldoMedioServiceImpl extends GenericServiceImpl&lt;Mat
101 101 public MaterialEstoqueSaldoMedio findByMaterial(Material idMaterial) {
102 102 return this.materialEstoqueSaldoMedioDao.findByMaterial(idMaterial);
103 103 }
104   -
  104 +
105 105 /**
106 106 * {@inheritDoc}
107 107 */
108 108 @Override
109 109 public BigDecimal realizaMovimentoSaida(MaterialConsumo materialConsumo, BigDecimal quantidadeMovimentada) {
110 110 BigDecimal retorno = BigDecimal.ZERO;
111   -
  111 +
112 112 MaterialEstoqueSaldoMedio estoqueMedio = this.findByMaterial(materialConsumo); //Busco o saldo de estoque baseado na média móvel
113   -
  113 +
114 114 if (estoqueMedio.getQuantidadeAtual().compareTo(quantidadeMovimentada) > 0) {
115 115 retorno = retorno.add(estoqueMedio.getValorUnitarioMedio().multiply(quantidadeMovimentada));
116 116 estoqueMedio.setQuantidadeAtual(estoqueMedio.getQuantidadeAtual().subtract(quantidadeMovimentada));
117 117 this.save(estoqueMedio);
118 118 } else {
119   - retorno = retorno.add((estoqueMedio.getValorUnitarioMedio().multiply(quantidadeMovimentada)).add(estoqueMedio.getRestoMedio()));
  119 + if(estoqueMedio.getValorUnitarioMedio() != null && estoqueMedio.getRestoMedio() != null){
  120 + retorno = retorno.add((estoqueMedio.getValorUnitarioMedio().multiply(quantidadeMovimentada)).add(estoqueMedio.getRestoMedio()));
  121 + }
120 122 estoqueMedio.setQuantidadeAtual(estoqueMedio.getQuantidadeAtual().subtract(quantidadeMovimentada));
121 123 this.save(estoqueMedio);
122 124 }
123   -
  125 +
124 126 return retorno;
125 127 }
126 128  
... ... @@ -130,30 +132,30 @@ public class MaterialEstoqueSaldoMedioServiceImpl extends GenericServiceImpl&lt;Mat
130 132 @Override
131 133 public BigDecimal realizaMovimentoDevolucao(MaterialConsumo materialConsumo, BigDecimal quantidadeMovimentada) {
132 134 BigDecimal retorno = BigDecimal.ZERO;
133   -
  135 +
134 136 MaterialEstoqueSaldoMedio estoqueMedio = this.findByMaterial(materialConsumo); //Busco o saldo de estoque baseado na média móvel
135   -
  137 +
136 138 retorno = retorno.add(estoqueMedio.getValorUnitarioMedio().multiply(quantidadeMovimentada)); //Gero o valor monetario da movimentação sendo realizada
137   -
  139 +
138 140 if (estoqueMedio.getQuantidadeAtual().equals(BigDecimal.ZERO)) { //Se o saldo atual da quantidade em estoque for zero eu adiciono o resto na movimentação
139 141 retorno = retorno.add(estoqueMedio.getRestoMedio());
140 142 }
141   -
  143 +
142 144 estoqueMedio.setQuantidadeAtual(estoqueMedio.getQuantidadeAtual().add(quantidadeMovimentada)); //Atualizo a quantidade atual do estoque
143 145 this.save(estoqueMedio);
144   -
  146 +
145 147 return retorno;
146 148 }
147   -
  149 +
148 150 public BigDecimal buscaValorUnitario(Long materialId){
149   - BigDecimal retorno = BigDecimal.ZERO;
  151 + BigDecimal retorno = BigDecimal.ZERO;
150 152 retorno = this.materialEstoqueSaldoMedioDao.buscaValorUnitario(materialId);
151 153 return retorno;
152 154 }
153   -
  155 +
154 156 public BigDecimal buscaValorResto(Long materialId){
155   - BigDecimal retorno = BigDecimal.ZERO;
  157 + BigDecimal retorno = BigDecimal.ZERO;
156 158 retorno = this.materialEstoqueSaldoMedioDao.buscaValorResto(materialId);
157 159 return retorno;
158   - }
  160 + }
159 161 }
... ...
cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/validation/MaterialEstoqueSaldoMedioValidator.java
... ... @@ -19,15 +19,15 @@ public class MaterialEstoqueSaldoMedioValidator implements Validator {
19 19  
20 20 @Override
21 21 public void validate(Object target, Errors errors) {
22   -
  22 +
23 23 ValidationUtils.rejectIfEmpty(errors, "material", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "LABEL.MATERIAL");
24   -
  24 +
25 25 ValidationUtils.rejectIfEmpty(errors, "quantidadeAtual", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "ALMOXARIFADO.LABEL.QUANTIDADE_ATUAL");
26   -
27   - ValidationUtils.rejectIfEmpty(errors, "valorUnitarioMedio", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "LABEL.VALORUNITARIOMEDIO");
28   -
29   - ValidationUtils.rejectIfEmpty(errors, "restoMedio", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "LABEL.RESTOMEDIO");
30   -
  26 +
  27 + ValidationUtils.rejectIfEmpty(errors, "valorUnitarioMedio", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "ALMOXARIFADO.LABEL.VALORUNITARIOMEDIO");
  28 +
  29 + ValidationUtils.rejectIfEmpty(errors, "restoMedio", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "ALMOXARIFADO.LABEL.RESTOMEDIO");
  30 +
31 31 }
32 32 }
33 33  
... ...
cit-almoxarifado-web/src/main/java/br/com/centralit/controller/AtendimentoRequisicaoConsumoController.java
1 1 package br.com.centralit.controller;
2 2  
3   -import java.util.List;
4   -
  3 +import org.apache.commons.lang3.SerializationUtils;
  4 +import org.hibernate.exception.ConstraintViolationException;
5 5 import org.springframework.beans.factory.annotation.Autowired;
6   -import org.springframework.security.core.context.SecurityContextHolder;
7 6 import org.springframework.stereotype.Controller;
8 7 import org.springframework.web.bind.annotation.RequestBody;
9 8 import org.springframework.web.bind.annotation.RequestMapping;
... ... @@ -11,9 +10,6 @@ import org.springframework.web.bind.annotation.RequestMethod;
11 10 import org.springframework.web.bind.annotation.RequestParam;
12 11 import org.springframework.web.bind.annotation.ResponseBody;
13 12  
14   -import com.googlecode.genericdao.search.Search;
15   -import com.googlecode.genericdao.search.SearchResult;
16   -
17 13 import br.com.centralit.api.framework.json.ViewsAlmoxarifado;
18 14 import br.com.centralit.api.model.AtendimentoRequisicaoConsumo;
19 15 import br.com.centralit.api.model.RequisicaoConsumo;
... ... @@ -24,11 +20,12 @@ import br.com.centralit.framework.dao.arquitetura.SearchSeven;
24 20 import br.com.centralit.framework.json.ResponseBodyWrapper;
25 21 import br.com.centralit.framework.json.Views;
26 22 import br.com.centralit.framework.model.SearchParams;
27   -import br.com.centralit.framework.model.Usuario;
28   -import br.com.centralit.framework.model.arquitetura.PersistentObjectAuditOrganizacao;
29 23 import br.com.centralit.framework.view.GridVH;
30 24 import br.com.centralit.framework.view.ResultResponseVH;
31 25  
  26 +import com.googlecode.genericdao.search.Search;
  27 +import com.googlecode.genericdao.search.SearchResult;
  28 +
32 29 /**
33 30 * <p><img src="http://centralit.com.br/images/logo_central.png"></p>
34 31 *
... ... @@ -124,6 +121,37 @@ public class AtendimentoRequisicaoConsumoController extends GenericController&lt;At
124 121  
125 122 return responseBody;
126 123 }
  124 +
  125 + @RequestMapping(method = RequestMethod.POST, value = "")
  126 + @ResponseBody
  127 + public ResponseBodyWrapper save(@RequestBody AtendimentoRequisicaoConsumo entity) throws Exception{
  128 + boolean uniqueConstraintViolate = true;
  129 +
  130 + AtendimentoRequisicaoConsumo atendimentoRequisicaoConsumo = new AtendimentoRequisicaoConsumo();
  131 +
  132 + //TODO Solução temporária para evitar que sejam criados registros com o código duplicado. Alterar solução quando for implementado o cache compartilhado
  133 + for(int i = 5; i > 0 && uniqueConstraintViolate; i--){
  134 + try{
  135 + atendimentoRequisicaoConsumo = this.atendimentoRequisicaoConsumoService.save(SerializationUtils.clone(entity));
  136 + uniqueConstraintViolate = false;
  137 + }catch(Throwable e){
  138 + if(e.getCause() instanceof ConstraintViolationException){
  139 + ConstraintViolationException ex = (ConstraintViolationException) e.getCause();
  140 + if(ex.getSQLException().getMessage().contains("codigo_unico")){
  141 + uniqueConstraintViolate = true;
  142 + }else{
  143 + throw e;
  144 + }
  145 + }else{
  146 + throw e;
  147 + }
  148 + }
  149 + }
  150 +
  151 + ResponseBodyWrapper responseBody = new ResponseBodyWrapper(atendimentoRequisicaoConsumo, getEditView());
  152 +
  153 + return responseBody;
  154 + }
127 155  
128 156  
129 157 @RequestMapping(value = "/getPage", method = RequestMethod.POST)
... ...
cit-almoxarifado-web/src/main/java/br/com/centralit/controller/BaixaAlmoxarifadoController.java
1 1 package br.com.centralit.controller;
2 2  
  3 +import org.apache.commons.lang3.SerializationUtils;
  4 +import org.hibernate.exception.ConstraintViolationException;
3 5 import org.springframework.beans.factory.annotation.Autowired;
4 6 import org.springframework.stereotype.Controller;
5 7 import org.springframework.web.bind.annotation.RequestBody;
... ... @@ -52,6 +54,37 @@ public class BaixaAlmoxarifadoController extends GenericController&lt;BaixaAlmoxari
52 54 this.baixaAlmoxarifadoService.verificarVinculoRequisicaoPosteriorRemocao(Long.parseLong(idBaixa));
53 55  
54 56 }
  57 +
  58 + @RequestMapping(method = RequestMethod.POST, value = "")
  59 + @ResponseBody
  60 + public ResponseBodyWrapper save(@RequestBody BaixaAlmoxarifado entity) throws Exception{
  61 + boolean uniqueConstraintViolate = true;
  62 +
  63 + BaixaAlmoxarifado baixaAlmoxarifado = new BaixaAlmoxarifado();
  64 +
  65 + //TODO Solução temporária para evitar que sejam criados registros com o código duplicado. Alterar solução quando for implementado o cache compartilhado
  66 + for(int i = 5; i > 0 && uniqueConstraintViolate; i--){
  67 + try{
  68 + baixaAlmoxarifado = this.baixaAlmoxarifadoService.save(SerializationUtils.clone(entity));
  69 + uniqueConstraintViolate = false;
  70 + }catch(Throwable e){
  71 + if(e.getCause() instanceof ConstraintViolationException){
  72 + ConstraintViolationException ex = (ConstraintViolationException) e.getCause();
  73 + if(ex.getSQLException().getMessage().contains("codigo_unico")){
  74 + uniqueConstraintViolate = true;
  75 + }else{
  76 + throw e;
  77 + }
  78 + }else{
  79 + throw e;
  80 + }
  81 + }
  82 + }
  83 +
  84 + ResponseBodyWrapper responseBody = new ResponseBodyWrapper(baixaAlmoxarifado, getEditView());
  85 +
  86 + return responseBody;
  87 + }
55 88  
56 89 /**
57 90 * <p>
... ...
cit-almoxarifado-web/src/main/java/br/com/centralit/controller/DevolucaoController.java
1 1 package br.com.centralit.controller;
2 2  
  3 +import org.apache.commons.lang3.SerializationUtils;
  4 +import org.hibernate.exception.ConstraintViolationException;
3 5 import org.springframework.beans.factory.annotation.Autowired;
4 6 import org.springframework.stereotype.Controller;
5 7 import org.springframework.web.bind.annotation.RequestBody;
... ... @@ -94,6 +96,37 @@ public class DevolucaoController extends GenericController&lt;Devolucao&gt; {
94 96  
95 97 return responseBody;
96 98 }
  99 +
  100 + @RequestMapping(method = RequestMethod.POST, value = "")
  101 + @ResponseBody
  102 + public ResponseBodyWrapper save(@RequestBody Devolucao entity) throws Exception{
  103 + boolean uniqueConstraintViolate = true;
  104 +
  105 + Devolucao devolucao = new Devolucao();
  106 +
  107 + //TODO Solução temporária para evitar que sejam criados registros com o código duplicado. Alterar solução quando for implementado o cache compartilhado
  108 + for(int i = 5; i > 0 && uniqueConstraintViolate; i--){
  109 + try{
  110 + devolucao = this.devolucaoService.save(SerializationUtils.clone(entity));
  111 + uniqueConstraintViolate = false;
  112 + }catch(Throwable e){
  113 + if(e.getCause() instanceof ConstraintViolationException){
  114 + ConstraintViolationException ex = (ConstraintViolationException) e.getCause();
  115 + if(ex.getSQLException().getMessage().contains("codigo_unico")){
  116 + uniqueConstraintViolate = true;
  117 + }else{
  118 + throw e;
  119 + }
  120 + }else{
  121 + throw e;
  122 + }
  123 + }
  124 + }
  125 +
  126 + ResponseBodyWrapper responseBody = new ResponseBodyWrapper(devolucao, getEditView());
  127 +
  128 + return responseBody;
  129 + }
97 130  
98 131 @RequestMapping(value = "/listaDevolucaoPorRequisicaoConsumo", method = RequestMethod.GET, produces = "application/json")
99 132 @ResponseBody
... ...
cit-almoxarifado-web/src/main/java/br/com/centralit/controller/EntradaAlmoxarifadoController.java
1 1 package br.com.centralit.controller;
2 2  
  3 +import org.apache.commons.lang3.SerializationUtils;
  4 +import org.hibernate.exception.ConstraintViolationException;
3 5 import org.springframework.beans.factory.annotation.Autowired;
4 6 import org.springframework.stereotype.Controller;
  7 +import org.springframework.web.bind.annotation.RequestBody;
5 8 import org.springframework.web.bind.annotation.RequestMapping;
  9 +import org.springframework.web.bind.annotation.RequestMethod;
  10 +import org.springframework.web.bind.annotation.ResponseBody;
6 11  
7 12 import br.com.centralit.api.framework.json.ViewsAdmMateriais;
8 13 import br.com.centralit.api.model.EntradaAlmoxarifado;
9 14 import br.com.centralit.api.service.EntradaAlmoxarifadoService;
10 15 import br.com.centralit.framework.controller.GenericController;
  16 +import br.com.centralit.framework.json.ResponseBodyWrapper;
11 17  
12 18 /**
13 19 * <p>
... ... @@ -36,7 +42,9 @@ import br.com.centralit.framework.controller.GenericController;
36 42 @Controller
37 43 @RequestMapping("/rest/entradaAlmoxarifado")
38 44 public class EntradaAlmoxarifadoController extends GenericController<EntradaAlmoxarifado> {
39   -
  45 +
  46 + private EntradaAlmoxarifadoService entradaAlmoxarifadoService;
  47 +
40 48 /**
41 49 * Responsável pela criação de novas instâncias desta classe.
42 50 *
... ... @@ -46,6 +54,8 @@ public class EntradaAlmoxarifadoController extends GenericController&lt;EntradaAlmo
46 54 public EntradaAlmoxarifadoController( EntradaAlmoxarifadoService entradaAlmoxarifadoService ) {
47 55  
48 56 super(entradaAlmoxarifadoService);
  57 +
  58 + this.entradaAlmoxarifadoService = entradaAlmoxarifadoService;
49 59 }
50 60  
51 61 /**
... ... @@ -65,4 +75,36 @@ public class EntradaAlmoxarifadoController extends GenericController&lt;EntradaAlmo
65 75  
66 76 return ViewsAdmMateriais.EntradaAlmoxarifadoListView.class;
67 77 }
  78 +
  79 + @RequestMapping(method = RequestMethod.POST, value = "")
  80 + @ResponseBody
  81 + public ResponseBodyWrapper save(@RequestBody EntradaAlmoxarifado entity) throws Exception{
  82 + boolean uniqueConstraintViolate = true;
  83 +
  84 + EntradaAlmoxarifado entradaAlmoxarifado = new EntradaAlmoxarifado();
  85 +
  86 + //TODO Solução temporária para evitar que sejam criados registros com o código duplicado. Alterar solução quando for implementado o cache compartilhado
  87 + for(int i = 5; i > 0 && uniqueConstraintViolate; i--){
  88 + try{
  89 + entradaAlmoxarifado = this.entradaAlmoxarifadoService.save(SerializationUtils.clone(entity));
  90 + uniqueConstraintViolate = false;
  91 + }catch(Throwable e){
  92 + if(e.getCause() instanceof ConstraintViolationException){
  93 + ConstraintViolationException ex = (ConstraintViolationException) e.getCause();
  94 + if(ex.getSQLException().getMessage().contains("codigo_unico")){
  95 + uniqueConstraintViolate = true;
  96 + }else{
  97 + throw e;
  98 + }
  99 + }else{
  100 + throw e;
  101 + }
  102 + }
  103 + }
  104 +
  105 + ResponseBodyWrapper responseBody = new ResponseBodyWrapper(entradaAlmoxarifado, getEditView());
  106 +
  107 + return responseBody;
  108 + }
  109 +
68 110 }
... ...
cit-almoxarifado-web/src/main/java/br/com/centralit/controller/RequisicaoConsumoController.java
... ... @@ -3,6 +3,8 @@ package br.com.centralit.controller;
3 3 import java.util.Collection;
4 4 import java.util.List;
5 5  
  6 +import org.apache.commons.lang3.SerializationUtils;
  7 +import org.hibernate.exception.ConstraintViolationException;
6 8 import org.springframework.beans.factory.annotation.Autowired;
7 9 import org.springframework.stereotype.Controller;
8 10 import org.springframework.web.bind.annotation.RequestBody;
... ... @@ -120,6 +122,37 @@ public class RequisicaoConsumoController extends GenericController&lt;RequisicaoCon
120 122  
121 123 return responseBody;
122 124 }
  125 +
  126 + @RequestMapping(method = RequestMethod.POST, value = "")
  127 + @ResponseBody
  128 + public ResponseBodyWrapper save(@RequestBody RequisicaoConsumo entity) throws Exception{
  129 + boolean uniqueConstraintViolate = true;
  130 +
  131 + RequisicaoConsumo requisicaoConsumo = new RequisicaoConsumo();
  132 +
  133 + //TODO Solução temporária para evitar que sejam criados registros com o código duplicado. Alterar solução quando for implementado o cache compartilhado
  134 + for(int i = 5; i > 0 && uniqueConstraintViolate; i--){
  135 + try{
  136 + requisicaoConsumo = this.requisicaoConsumoService.save(SerializationUtils.clone(entity));
  137 + uniqueConstraintViolate = false;
  138 + }catch(Throwable e){
  139 + if(e.getCause() instanceof ConstraintViolationException){
  140 + ConstraintViolationException ex = (ConstraintViolationException) e.getCause();
  141 + if(ex.getSQLException().getMessage().contains("codigo_unico")){
  142 + uniqueConstraintViolate = true;
  143 + }else{
  144 + throw e;
  145 + }
  146 + }else{
  147 + throw e;
  148 + }
  149 + }
  150 + }
  151 +
  152 + ResponseBodyWrapper responseBody = new ResponseBodyWrapper(requisicaoConsumo, getEditView());
  153 +
  154 + return responseBody;
  155 + }
123 156  
124 157 /**
125 158 * Método responsável por
... ...
cit-almoxarifado-web/src/main/java/br/com/centralit/listener/StartupListenerAlmoxarifado.java
... ... @@ -55,16 +55,16 @@ public class StartupListenerAlmoxarifado extends UtilStartup implements Applicat
55 55  
56 56 @Autowired
57 57 private ConfiguracaoNotificacaoRessuprimentoService configuracaoNotificacaoRessuprimentoService;
58   -
  58 +
59 59 @Autowired
60 60 private DominioService dominioService;
61   -
  61 +
62 62 @Autowired
63 63 private InternacionalizacaoService internacionalizacaoService;
64   -
  64 +
65 65 @Autowired
66 66 private ModuloService moduloService;
67   -
  67 +
68 68 /**
69 69 *
70 70 */
... ... @@ -100,9 +100,9 @@ public class StartupListenerAlmoxarifado extends UtilStartup implements Applicat
100 100 list.add(new Dominio(Dominio.TIPO_STATUS_BAIXA_ESTORNO, Dominio.TIPO_STATUS_ESTORNO_TOTAL_DESC, Dominio.TIPO_STATUS_ESTORNO_TOTAL_NOME, Dominio.TIPO_STATUS_ESTORNO_TOTAL, Boolean.FALSE));
101 101 list.add(new Dominio(Dominio.TIPO_STATUS_BAIXA_ESTORNO, Dominio.TIPO_STATUS_SEM_ESTORNO_DESC, Dominio.TIPO_STATUS_SEM_ESTORNO_NOME, Dominio.TIPO_STATUS_SEM_ESTORNO, Boolean.FALSE));
102 102 list.add(new Dominio(Dominio.TIPO_STATUS_BAIXA_ESTORNO, Dominio.TIPO_STATUS_ESTORNO_PARCIAL_DESC, Dominio.TIPO_STATUS_ESTORNO_PARCIAL_NOME, Dominio.TIPO_STATUS_ESTORNO_PARCIAL, Boolean.FALSE));
103   - list.add(new Dominio(Dominio.TIPO_STATUS_BAIXA_ESTORNO, Dominio.TIPO_STATUS_ESTORNO_TOTAL_DESC, Dominio.TIPO_STATUS_ESTORNO_TOTAL_NOME, Dominio.TIPO_STATUS_ESTORNO_TOTAL, Boolean.FALSE));
  103 + list.add(new Dominio(Dominio.TIPO_STATUS_BAIXA_ESTORNO, Dominio.TIPO_STATUS_ESTORNO_TOTAL_DESC, Dominio.TIPO_STATUS_ESTORNO_TOTAL_NOME, Dominio.TIPO_STATUS_ESTORNO_TOTAL, Boolean.FALSE));
104 104 list.add(new Dominio(Dominio.TIPO_FECHAMENTO_ALMOXARIFADO, Dominio.TIPO_FECHAMENTO_ALMOXARIFADO_DESC_FIFO, Dominio.TIPO_FECHAMENTO_ALMOXARIFADO_NOME_FIFO, Dominio.TIPO_FECHAMENTO_ALMOXARIFADO_FIFO_CODIGO, Boolean.FALSE));
105   - list.add(new Dominio(Dominio.TIPO_FECHAMENTO_ALMOXARIFADO, Dominio.TIPO_FECHAMENTO_ALMOXARIFADO_DESC_MEDIA, Dominio.TIPO_FECHAMENTO_ALMOXARIFADO_NOME_MEDIA, Dominio.TIPO_FECHAMENTO_ALMOXARIFADO_MEDIA_CODIGO, Boolean.FALSE));
  105 + list.add(new Dominio(Dominio.TIPO_FECHAMENTO_ALMOXARIFADO, Dominio.TIPO_FECHAMENTO_ALMOXARIFADO_DESC_MEDIA, Dominio.TIPO_FECHAMENTO_ALMOXARIFADO_NOME_MEDIA, Dominio.TIPO_FECHAMENTO_ALMOXARIFADO_MEDIA_CODIGO, Boolean.FALSE));
106 106 list.add(new Dominio("tipoMaterial", "Consumo", "CONSUMO", 1L, Boolean.FALSE));
107 107 list.add(new Dominio("tipoMaterial", "Permanente", "PERMANENTE", 2L, Boolean.FALSE));
108 108 list.add(new Dominio("tipoMaterial", "Serviço", "SERVICO", 3L, Boolean.FALSE));
... ... @@ -118,35 +118,35 @@ public class StartupListenerAlmoxarifado extends UtilStartup implements Applicat
118 118 list.add(new Dominio("tipoMovimentoEstoque", "Devolução requisição", "DEVOLUCAO", 4L, Boolean.FALSE));
119 119 list.add(new Dominio("tipoSaida", "Baixa", "ENTRADA", 1L, Boolean.FALSE));
120 120 list.add(new Dominio("tipoSaida", "Requisição", "REQUISICAO", 2L, Boolean.FALSE));
121   -
122   -
  121 +
  122 +
123 123 this.dominioService.saveListIfNotExist(list);
124 124 Logger.getLogger(StartupListenerAlmoxarifado.class).info("Domínios executados - StartupListenerAlmoxarifado!");
125 125 }
126 126  
127 127 /**
128   - *
  128 + *
129 129 * Método responsável por gerar internacionalização do módulo almoxarifado
130   - *
  130 + *
131 131 * @author rogerio.cassimiro
132   - *
  132 + *
133 133 */
134 134 private void gerarInternacionalizacao() {
135 135  
136 136 dominioPT_BR = this.dominioService.findByChaveAndCodigo(Dominio.TIPO_IDIOMA, Dominio.TIPO_IDIOMA_PT_BR_CODIGO);
137 137 moduloSelecionado = this.moduloService.getModuloPorBaseUrl(BASE_URL_ALMOXARIFADO, null);
138 138 List<Internacionalizacao> internacionalizacaoList = new ArrayList<Internacionalizacao>();
139   -
  139 +
140 140 this.gerarLabel(dominioPT_BR, moduloSelecionado, internacionalizacaoList);
141 141 this.gerarValidacao(dominioPT_BR, moduloSelecionado, internacionalizacaoList);
142 142 this.gerarMensagem(dominioPT_BR, moduloSelecionado, internacionalizacaoList);
143   -
  143 +
144 144 this.internacionalizacaoService.saveListIfNotExist(internacionalizacaoList);
145 145 Logger.getLogger(StartupListenerAlmoxarifado.class).info("Internacionalização executada - StartupListenerAlmoxarifado!");
146 146 }
147   -
  147 +
148 148 private void gerarLabel(Dominio dominio, Modulo modulo, List<Internacionalizacao> internacionalizacaoList) {
149   -
  149 +
150 150 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.TERMO_BAIXA_COM_RESUMO_CONTABIL", "Termo de Baixa com Resumo Contábil", dominio, modulo));
151 151 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.GERAR_RELATORIO_TERMO", "Termo de baixa", dominio, modulo));
152 152 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.ENTRADA_ALMOXARIFADO", "Entrada de materiais", dominio, modulo));
... ... @@ -288,9 +288,12 @@ public class StartupListenerAlmoxarifado extends UtilStartup implements Applicat
288 288 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.QUANTIDADE_REQUERIDA", "Quantidade requerida", dominio, modulo));
289 289 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.DADOS_ATENDIMENTO", "Dados do atendimento", dominio, modulo));
290 290 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.SITUACAO_ESTORNO", "Situação estorno", dominio, modulo));
291   -
  291 +
  292 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.VALORUNITARIOMEDIO", "Valor unitário médio", dominio, modulo));
  293 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.RESTOMEDIO", "Resto médio", dominio, modulo));
  294 +
292 295 }
293   -
  296 +
294 297 private void gerarValidacao(Dominio dominio, Modulo modulo, List<Internacionalizacao> internacionalizacaoList) {
295 298 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.VALIDACAO.EXISTE_MOVIMENTO_DEPOIS_ENTRADA", "Existe movimento após a entrada!", dominio, modulo));
296 299 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.VALIDACAO.DATA_DEVOLUCAO_DATA_FINALIZACAO", "Data de devolução não pode ser inferior a data de finalização da requisição!", dominio, modulo));
... ... @@ -304,9 +307,15 @@ public class StartupListenerAlmoxarifado extends UtilStartup implements Applicat
304 307 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.VALIDACAO.DATA_ESTORNO_MENOR_DATA_ALMOXARIFADO", "A data do estorno não pode ser menor que a data da baixa!", dominio, modulo));
305 308 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.VALIDACAO.PERIODO_INVALIDO_INFERIOR_DOZE_MESES", "Período inválido. O período da referência deve ser inferior a 12 meses", dominio, modulo));
306 309 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.VALIDACAO.QUANTIDADE_A_ATENDER_SUPERIOR_A_QTD_ESTOQUE", "Quantidade a atender superior a do estoque para o material:", dominio, modulo));
  310 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.VALIDACAO.DATA_ATENDIMENTO_FORA_REFERENCIA", "Data de atendimento fora da referência vigente!", dominio, modulo));
  311 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.VALIDACAO.ERRO_EXCLUSAO_EXISTE_MOVIMENTACAO", "Não foi possível realizar a exclusão pois existe movimentações após o atendimento.", dominio, modulo));
  312 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.VALIDACAO.ERRO_EDICAO_EXISTE_MOVIMENTACAO", "Não foi possível realizar a edição pois existe movimentações após o atendimento", dominio, modulo));
  313 +
  314 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.VALIDACAO.QUANTIDADE_ZERADA_NEGATIVA", "A quantidade a atender está zerada ou vazia do seguinte material: ", dominio, modulo));
  315 +
307 316  
308 317 }
309   -
  318 +
310 319 private void gerarMensagem(Dominio dominio, Modulo modulo, List<Internacionalizacao> internacionalizacaoList) {
311 320 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.ATENDA_AO_MENOS_UMA_REQUISICAO", "Por favor, atenda ao menos uma requisição antes de continuar.", dominio, modulo));
312 321 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.CATALOGOS_CADASTRADOS_OPCOES", "Os seguintes catálogos existem no sistema com a mesma lista de materiais que você selecionou no seu cadastro, você pode selecionar uma das opções ou continuar salvando o cadastro atual.", dominio, modulo));
... ...
cit-almoxarifado-web/src/main/webapp/assets/js/angular/custom/controller/AtendimentoRequisicaoConsumoController.js
... ... @@ -4,6 +4,7 @@ citApp.controller( &#39;AtendimentoRequisicaoConsumoController&#39;,
4 4 ['$scope',
5 5 '$translate',
6 6 '$timeout',
  7 + '$filter',
7 8 'AtendimentoRequisicaoConsumoRepository',
8 9 'AtendimentoRequisicaoConsumoItemRepository',
9 10 'RequisicaoConsumoRepository',
... ... @@ -12,6 +13,7 @@ citApp.controller( &#39;AtendimentoRequisicaoConsumoController&#39;,
12 13 function AtendimentoRequisicaoConsumoController($scope,
13 14 $translate,
14 15 $timeout,
  16 + $filter,
15 17 AtendimentoRequisicaoConsumoRepository,
16 18 AtendimentoRequisicaoConsumoItemRepository,
17 19 RequisicaoConsumoRepository,
... ... @@ -329,6 +331,11 @@ citApp.controller( &#39;AtendimentoRequisicaoConsumoController&#39;,
329 331 });
330 332 $scope.atendimentos.push(atendimento);
331 333 }
  334 +
  335 + if($scope.atendimentoRequisicaoConsumo && $scope.atendimentoRequisicaoConsumo.dataAtendimento){
  336 + $scope.atendimentoRequisicaoConsumo.dataAtendimento = $filter('date')($scope.atendimentoRequisicaoConsumo.dataAtendimento, "dd/MM/yyyy");
  337 + }
  338 +
332 339 };
333 340  
334 341 // SALVA O AtendimentoRequisicaoConsumo
... ... @@ -456,6 +463,7 @@ citApp.controller( &#39;AtendimentoRequisicaoConsumoController&#39;,
456 463 dataFinalizacao : atendimentoRequisicaoConsumo.$dataFinalizacao}).then(function() {
457 464 angular.element('#searchAtendimentoRequisicaoConsumo').scope().fetchResult();
458 465 $scope.$modalConfirmInstance.dismiss('cancel');
  466 + $scope.$modalInstance.dismiss('cancel');
459 467 $scope.listaSelecionados = [];
460 468 $scope.resetForm();
461 469 $scope.showAlert("success", $translate.instant('MSG.REGISTRO_SALVO'));
... ...