Commit b523898e50a90c95f19606110e64890258de9296

Authored by joyfas.silva
2 parents a2b95f67 0ec9c5be
Exists in master

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

…/cit-grp-almoxarifado into tarefa-3943

# Conflicts:
#	cit-almoxarifado-web/src/main/webapp/assets/js/angular/custom/controller/EntradaAlmoxarifadoController.js
Showing 21 changed files with 332 additions and 52 deletions   Show diff stats
cit-almoxarifado-api/src/main/java/br/com/centralit/api/dao/BemAlmoxarifadoCaracteristicaDao.java
1 1 package br.com.centralit.api.dao;
2 2  
  3 +import java.util.List;
  4 +
  5 +import br.com.centralit.api.model.BemAlmoxarifadoCaracteristica;
3 6 import br.com.centralit.framework.dao.arquitetura.CitGenericDAO;
4 7  
5   -public interface BemAlmoxarifadoCaracteristicaDao extends CitGenericDAO {}
  8 +public interface BemAlmoxarifadoCaracteristicaDao extends CitGenericDAO {
  9 +
  10 + List<BemAlmoxarifadoCaracteristica> listaCaracteristicaPorEntradaAlmox(Long idAlm);}
... ...
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/BemAlmoxarifadoCaracteristicaDaoHibernate.java
1 1 package br.com.centralit.api.dao.impl;
2 2  
3   -import br.com.centralit.api.model.BemAlmoxarifadoCaracteristica;
4   -import br.com.centralit.api.dao.BemAlmoxarifadoCaracteristicaDao;
  3 +import java.util.List;
5 4  
6 5 import org.springframework.stereotype.Repository;
  6 +
  7 +import br.com.centralit.api.dao.BemAlmoxarifadoCaracteristicaDao;
  8 +import br.com.centralit.api.model.BemAlmoxarifadoCaracteristica;
7 9 import br.com.centralit.framework.dao.arquitetura.CitGenericDAOImpl;
  10 +import br.com.centralit.framework.dao.arquitetura.SearchSeven;
8 11  
9 12 @Repository("bemAlmoxarifadoCaracteristicaDao")
10 13 public class BemAlmoxarifadoCaracteristicaDaoHibernate extends CitGenericDAOImpl implements BemAlmoxarifadoCaracteristicaDao {
11 14 public BemAlmoxarifadoCaracteristicaDaoHibernate() {
12 15 super(BemAlmoxarifadoCaracteristica.class);
13 16 }
  17 +
  18 + @Override
  19 + public List<BemAlmoxarifadoCaracteristica> listaCaracteristicaPorEntradaAlmox(Long idAlm) {
  20 + SearchSeven search = new SearchSeven();
  21 +
  22 + search.addFilterEqual("entradaItem.entrada.id", idAlm);
  23 +
  24 + return this.search(search);
  25 + }
14 26 }
... ...
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/BemAlmoxarifadoCaracteristica.java
... ... @@ -11,6 +11,7 @@ import javax.persistence.Table;
11 11 import org.hibernate.envers.Audited;
12 12  
13 13 import br.com.centralit.api.framework.json.ViewsAdmMateriais;
  14 +import br.com.centralit.framework.json.Views;
14 15 import br.com.centralit.framework.model.arquitetura.PersistentObjectAuditOrganizacao;
15 16  
16 17 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
... ... @@ -59,6 +60,7 @@ public class BemAlmoxarifadoCaracteristica extends PersistentObjectAuditOrganiza
59 60  
60 61 /** Atributo id. */
61 62 @Id
  63 + @JsonView({ Views.GenericView.class })
62 64 @GeneratedValue(strategy = GenerationType.AUTO)
63 65 private Long id;
64 66  
... ...
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/BemAlmoxarifadoCaracteristicaService.java
1 1 package br.com.centralit.api.service;
2 2  
  3 +import java.util.List;
  4 +
3 5 import br.com.centralit.api.model.BemAlmoxarifadoCaracteristica;
4 6 import br.com.centralit.framework.service.arquitetura.GenericService;
5 7  
6   -public interface BemAlmoxarifadoCaracteristicaService extends GenericService<BemAlmoxarifadoCaracteristica, Long> {}
  8 +public interface BemAlmoxarifadoCaracteristicaService extends GenericService<BemAlmoxarifadoCaracteristica, Long> {
  9 +
  10 + List<BemAlmoxarifadoCaracteristica> listaCaracteristicaPorEntradaAlmox (Long idAlmx);
  11 +
  12 +}
... ...
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/MovimentoEstoqueService.java
... ... @@ -11,6 +11,7 @@ import br.com.centralit.api.model.BaixaAlmoxarifado;
11 11 import br.com.centralit.api.model.Devolucao;
12 12 import br.com.centralit.api.model.DevolucaoItem;
13 13 import br.com.centralit.api.model.EntradaAlmoxarifado;
  14 +import br.com.centralit.api.model.EntradaAlmoxarifadoItem;
14 15 import br.com.centralit.api.model.EstruturaOrganizacional;
15 16 import br.com.centralit.api.model.MaterialConsumo;
16 17 import br.com.centralit.api.model.MovimentoEstoque;
... ... @@ -239,4 +240,18 @@ public interface MovimentoEstoqueService extends GenericService&lt;MovimentoEstoque
239 240 */
240 241 List<MovimentoEstoque> findAllByEntrada(EntradaAlmoxarifado entradaAlmoxarifado);
241 242  
  243 + /**
  244 + * <p><b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a></p>
  245 + *
  246 + * <p><b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a></p>
  247 + *
  248 + * Método responsável por buscar todos os movimentos ocorridos de um determinado item da entrada
  249 + *
  250 + * @author geovane.filho
  251 + *
  252 + * @param entradaAlmoxarifadoItem
  253 + * @return
  254 + */
  255 + Collection<MovimentoEstoque> findAllByEntradaItem(EntradaAlmoxarifadoItem entradaAlmoxarifadoItem);
  256 +
242 257 }
... ...
cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/impl/BemAlmoxarifadoCaracteristicaServiceImpl.java
1 1 package br.com.centralit.api.service.impl;
2 2  
  3 +import java.util.List;
  4 +
3 5 import org.springframework.beans.factory.annotation.Autowired;
4 6 import org.springframework.beans.factory.annotation.Qualifier;
5 7 import org.springframework.stereotype.Service;
6 8 import org.springframework.validation.Validator;
7   -
8   -import br.com.centralit.api.service.BemAlmoxarifadoCaracteristicaService;
  9 +
9 10 import br.com.centralit.api.dao.BemAlmoxarifadoCaracteristicaDao;
10 11 import br.com.centralit.api.model.BemAlmoxarifadoCaracteristica;
11   -import br.com.centralit.api.model.BemAlmoxarifadoCaracteristica;
  12 +import br.com.centralit.api.service.BemAlmoxarifadoCaracteristicaService;
12 13 import br.com.centralit.framework.service.arquitetura.GenericServiceImpl;
13 14  
14 15 @Service("bemAlmoxarifadoCaracteristicaService")
... ... @@ -22,5 +23,10 @@ public class BemAlmoxarifadoCaracteristicaServiceImpl extends GenericServiceImpl
22 23 this.bemAlmoxarifadoCaracteristicaDao = bemAlmoxarifadoCaracteristicaDao;
23 24 this.validator = validator;
24 25 }
  26 +
  27 + @Override
  28 + public List<BemAlmoxarifadoCaracteristica> listaCaracteristicaPorEntradaAlmox(Long idAlm) {
  29 + return this.bemAlmoxarifadoCaracteristicaDao.listaCaracteristicaPorEntradaAlmox(idAlm);
  30 + }
25 31  
26 32 }
... ...
cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/impl/EntradaAlmoxarifadoItemServiceImpl.java
1 1 package br.com.centralit.api.service.impl;
2 2  
3 3 import java.math.BigDecimal;
4   -
  4 +import java.util.ArrayList;
5 5 import java.util.Calendar;
6 6 import java.util.Collection;
7 7 import java.util.List;
... ... @@ -11,13 +11,17 @@ import org.springframework.security.core.context.SecurityContextHolder;
11 11 import org.springframework.stereotype.Service;
12 12  
13 13 import br.com.centralit.api.dao.EntradaAlmoxarifadoItemDao;
  14 +import br.com.centralit.api.model.ContaContabilMovimento;
14 15 import br.com.centralit.api.model.EntradaAlmoxarifadoItem;
15 16 import br.com.centralit.api.model.EstruturaOrganizacional;
16 17 import br.com.centralit.api.model.MaterialConsumo;
  18 +import br.com.centralit.api.model.MovimentoEstoque;
17 19 import br.com.centralit.api.service.ConfiguracaoParametroSistemaService;
  20 +import br.com.centralit.api.service.ContaContabilMovimentoAlmoxarifadoService;
18 21 import br.com.centralit.api.service.EntradaAlmoxarifadoItemService;
19 22 import br.com.centralit.api.service.EstruturaOrganizacionalService;
20 23 import br.com.centralit.api.service.MaterialConsumoService;
  24 +import br.com.centralit.api.service.MovimentoEstoqueService;
21 25 import br.com.centralit.framework.exception.BusinessException;
22 26 import br.com.centralit.framework.exception.CodigoErro;
23 27 import br.com.centralit.framework.model.ConfiguracaoParametroSistema;
... ... @@ -66,6 +70,12 @@ public class EntradaAlmoxarifadoItemServiceImpl extends GenericServiceImpl&lt;Entra
66 70  
67 71 @Autowired
68 72 private ConfiguracaoParametroSistemaService configuracaoParametroSistemaService;
  73 +
  74 + @Autowired
  75 + private MovimentoEstoqueService movimentoEstoqueService;
  76 +
  77 + @Autowired
  78 + private ContaContabilMovimentoAlmoxarifadoService contaContabilMovimentoAlmoxarifadoService;
69 79  
70 80 /**
71 81 * Responsável pela criação de novas instâncias desta classe.
... ... @@ -94,6 +104,12 @@ public class EntradaAlmoxarifadoItemServiceImpl extends GenericServiceImpl&lt;Entra
94 104 */
95 105 @Override
96 106 public boolean remove(EntradaAlmoxarifadoItem entity) {
  107 +
  108 + ContaContabilMovimento movimentoContabil = this.contaContabilMovimentoAlmoxarifadoService.findByEntradaItem(entity.getId());
  109 + this.contaContabilMovimentoAlmoxarifadoService.remove(movimentoContabil);
  110 +
  111 + Collection<MovimentoEstoque> movimentosEstoque = this.movimentoEstoqueService.findAllByEntradaItem(entity);
  112 + this.movimentoEstoqueService.removeList((ArrayList<MovimentoEstoque>) movimentosEstoque);
97 113  
98 114 entity.setEntradaInativo(entity.getEntrada());
99 115  
... ... @@ -259,4 +275,9 @@ public class EntradaAlmoxarifadoItemServiceImpl extends GenericServiceImpl&lt;Entra
259 275 return retorno;
260 276 }
261 277  
  278 + @Override
  279 + public List<EntradaAlmoxarifadoItem> findItensPorEntradaId(Long idEntrada) {
  280 + return (List) this.entradaAlmoxarifadoItemDao.buscarPorAtributo("entrada.id", idEntrada);
  281 + }
  282 +
262 283 }
... ...
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,13 +17,16 @@ 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;
  29 +import br.com.centralit.api.service.BemAlmoxarifadoCaracteristicaService;
26 30 import br.com.centralit.api.service.ConfiguracaoParametroSistemaService;
27 31 import br.com.centralit.api.service.ContaContabilMovimentoAlmoxarifadoService;
28 32 import br.com.centralit.api.service.ContaContabilMovimentoService;
... ... @@ -30,8 +34,10 @@ import br.com.centralit.api.service.DominioService;
30 34 import br.com.centralit.api.service.EntradaAlmoxarifadoItemService;
31 35 import br.com.centralit.api.service.EntradaAlmoxarifadoService;
32 36 import br.com.centralit.api.service.EstruturaOrganizacionalService;
  37 +import br.com.centralit.api.service.InternacionalizacaoService;
33 38 import br.com.centralit.api.service.MaterialCaracteristicaService;
34 39 import br.com.centralit.api.service.MaterialConsumoService;
  40 +import br.com.centralit.api.service.MaterialLocalEstoqueService;
35 41 import br.com.centralit.api.service.MovimentoEstoqueService;
36 42 import br.com.centralit.api.service.ParceiroService;
37 43 import br.com.centralit.api.service.RascunhoService;
... ... @@ -123,6 +129,17 @@ public class EntradaAlmoxarifadoServiceImpl extends GenericServiceImpl&lt;EntradaAl
123 129 @Autowired
124 130 private RascunhoService rascunhoService;
125 131  
  132 + @Autowired
  133 + private BemAlmoxarifadoCaracteristicaService bemAlmoxarifadoCaracteristicaService;
  134 +
  135 + @Autowired
  136 + private InternacionalizacaoService internacionalizacaoService;
  137 +
  138 + @Autowired
  139 + private MaterialLocalEstoqueService materialLocalEstoqueService;
  140 +
  141 + private Dominio idioma;
  142 +
126 143 private Validator validatorBasic;
127 144  
128 145 private Validator validatorAll;
... ... @@ -153,24 +170,36 @@ public class EntradaAlmoxarifadoServiceImpl extends GenericServiceImpl&lt;EntradaAl
153 170 @Override
154 171 public EntradaAlmoxarifado save(EntradaAlmoxarifado entrada) {
155 172  
  173 + for (EntradaAlmoxarifadoItem entradaAlmoxarifadoItem : entrada.getEntradasItem()) {
  174 + buscaCaracteristicaItem(entradaAlmoxarifadoItem);
  175 + }
  176 +
156 177 this.validarEntidade(entrada, this.validatorBasic);
157 178  
158 179 this.montarEntidade(entrada);
159   -
  180 +
  181 + this.validarCaracteristicasObrigatorias(entrada);
  182 +
  183 + this.validarQuantidadeMaterialEstoque(entrada);
  184 +
160 185 EntradaAlmoxarifado entradaAlmoxarifado = (EntradaAlmoxarifado) this.entradaAlmoxarifadoDao.save(entrada);
161 186  
162 187 configurarNotaRecebimento(entradaAlmoxarifado);
163 188  
164 189 entrada.setCodigo(String.valueOf(entradaAlmoxarifado.getNotaRecebimento()));
165 190  
166   - rascunhoService.removeById(entrada.getRascunho());
  191 + try {
  192 + if(entrada.getRascunho() != null){
  193 + rascunhoService.removeById(entrada.getRascunho());
  194 + }
  195 + } catch (Exception e) {}
167 196  
168 197 return entradaAlmoxarifado;
169 198 }
170 199  
171 200 @Override
172 201 public EntradaAlmoxarifado concluir(EntradaAlmoxarifado entradaAlmoxarifado) {
173   -
  202 +
174 203 this.validarEntidade(entradaAlmoxarifado, this.validatorAll);
175 204  
176 205 this.montarEntidade(entradaAlmoxarifado);
... ... @@ -209,9 +238,14 @@ public class EntradaAlmoxarifadoServiceImpl extends GenericServiceImpl&lt;EntradaAl
209 238 */
210 239 @Override
211 240 public EntradaAlmoxarifado merge(EntradaAlmoxarifado entrada) {
  241 +
212 242 this.validarEntidade(entrada, this.validatorBasic);
  243 + for (EntradaAlmoxarifadoItem entradaAlmoxarifadoItem : entrada.getEntradasItem()) {
  244 + buscaCaracteristicaItem(entradaAlmoxarifadoItem);
  245 + }
213 246 this.montarEntidade(entrada);
214   -
  247 + this.validarCaracteristicasObrigatorias(entrada);
  248 + this.validarQuantidadeMaterialEstoque(entrada);
215 249 return (EntradaAlmoxarifado) this.entradaAlmoxarifadoDao.merge(entrada);
216 250 }
217 251  
... ... @@ -263,8 +297,6 @@ public class EntradaAlmoxarifadoServiceImpl extends GenericServiceImpl&lt;EntradaAl
263 297  
264 298 entradaAlmoxarifadoItem.setEntrada(entrada);
265 299  
266   - List<BemAlmoxarifadoCaracteristica> caracteristicas = new ArrayList<BemAlmoxarifadoCaracteristica>();
267   -
268 300 if (!UtilObjeto.isReferencia(entradaAlmoxarifadoItem.getCaracteristicas()) || entradaAlmoxarifadoItem.getCaracteristicas().isEmpty()) {
269 301 MaterialConsumo material = this.materialConsumoService.find(entradaAlmoxarifadoItem.getMaterial().getId());
270 302 Collection<MaterialCaracteristica> caracs = material.getMaterialCaracteristicas();
... ... @@ -277,20 +309,15 @@ public class EntradaAlmoxarifadoServiceImpl extends GenericServiceImpl&lt;EntradaAl
277 309 }
278 310 entradaAlmoxarifadoItem.setCaracteristicas(matCarac);
279 311 }
280   -
  312 +
281 313 for (BemAlmoxarifadoCaracteristica bemAlmoxarifadoCaracteristica : entradaAlmoxarifadoItem.getCaracteristicas()) {
282 314  
283   - bemAlmoxarifadoCaracteristica.setMaterialCaracteristica(this.materialCaracteristicaService.find(bemAlmoxarifadoCaracteristica.getMaterialCaracteristica().getId()));
284   -
285 315 bemAlmoxarifadoCaracteristica.setCaracteristica(bemAlmoxarifadoCaracteristica.getMaterialCaracteristica().getCaracteristica());
286 316  
287 317 bemAlmoxarifadoCaracteristica.setEntradaItem(entradaAlmoxarifadoItem);
288   - caracteristicas.add(bemAlmoxarifadoCaracteristica);
289 318  
290 319 }
291 320  
292   - entradaAlmoxarifadoItem.setCaracteristicas(caracteristicas);
293   -
294 321 }
295 322  
296 323 for (EntradaAlmoxarifadoObservacao entradaObservacao : entrada.getObservacoes()) {
... ... @@ -313,6 +340,7 @@ public class EntradaAlmoxarifadoServiceImpl extends GenericServiceImpl&lt;EntradaAl
313 340 entradaDocumento.setEntrada(entrada);
314 341 }
315 342  
  343 +
316 344 if (UtilObjeto.isReferencia(entrada.getDataContabil())) {
317 345 entrada.setIsContabilizada(Boolean.TRUE);
318 346 } else {
... ... @@ -320,6 +348,23 @@ public class EntradaAlmoxarifadoServiceImpl extends GenericServiceImpl&lt;EntradaAl
320 348 }
321 349 }
322 350  
  351 + private void buscaCaracteristicaItem(EntradaAlmoxarifadoItem entradaAlmoxarifadoItem) {
  352 +
  353 + if (!UtilObjeto.isReferencia(entradaAlmoxarifadoItem.getEntrada()) && !UtilObjeto.isReferencia(entradaAlmoxarifadoItem.getCaracteristicas()) || entradaAlmoxarifadoItem.getCaracteristicas().isEmpty()) {
  354 + MaterialConsumo material = this.materialConsumoService.find(entradaAlmoxarifadoItem.getMaterial().getId());
  355 + Collection<MaterialCaracteristica> caracs = material.getMaterialCaracteristicas();
  356 + Collection<BemAlmoxarifadoCaracteristica> matCarac = new ArrayList<BemAlmoxarifadoCaracteristica>();
  357 +
  358 + for (MaterialCaracteristica materialCaracteristica : caracs) {
  359 + BemAlmoxarifadoCaracteristica carac = new BemAlmoxarifadoCaracteristica();
  360 + carac.setMaterialCaracteristica(materialCaracteristica);
  361 + matCarac.add(carac);
  362 + }
  363 + entradaAlmoxarifadoItem.setCaracteristicas(matCarac);
  364 + }
  365 +
  366 + }
  367 +
323 368 /**
324 369 * {@inheritDoc}
325 370 */
... ... @@ -411,5 +456,80 @@ public class EntradaAlmoxarifadoServiceImpl extends GenericServiceImpl&lt;EntradaAl
411 456 public String buscarMovimentosSaidaComMateriaisDaEntrada(Long idEntrada) {
412 457 return this.movimentoEstoqueService.buscarMovimentosSaidaComMateriaisDaEntrada(idEntrada);
413 458 }
  459 +
  460 + private Dominio getIdioma() {
  461 + if(!UtilObjeto.isReferencia(idioma)){
  462 + idioma = this.dominioService.findByChaveAndCodigo("tipoIdioma", Dominio.TIPO_IDIOMA_PT_BR_CODIGO);
  463 + }
  464 + return idioma;
  465 + }
  466 +
  467 + private void validarCaracteristicasObrigatorias(EntradaAlmoxarifado entrada){
  468 +
  469 + StringBuilder mensagem = new StringBuilder();
  470 + int countItem = 1;
  471 + for (EntradaAlmoxarifadoItem entradaAlmoxarifadoItem : entrada.getEntradasItem()) {
  472 + if(!UtilColecao.isVazio(entradaAlmoxarifadoItem.getCaracteristicas())){
  473 + for (BemAlmoxarifadoCaracteristica bemAlmoxarifadoCaracteristica : entradaAlmoxarifadoItem.getCaracteristicas()) {
  474 + if(bemAlmoxarifadoCaracteristica.getMaterialCaracteristica().getObrigatorio() != null && bemAlmoxarifadoCaracteristica.getMaterialCaracteristica().getObrigatorio() && StringUtils.isBlank(bemAlmoxarifadoCaracteristica.getValorCaracteristica())){
  475 + String validacao = this.internacionalizacaoService.getTranslate("ALMOXARIFADO.MSG.VALIDACAO_CARACTERISTICA_OBRIGATORIA", this.getIdioma());
  476 + validacao = String.format(validacao, countItem + " " + bemAlmoxarifadoCaracteristica.getMaterialCaracteristica().getMaterial().getDescricao());
  477 + validacao += "</br></br>";
  478 + mensagem.append(validacao);
  479 + break;
  480 + }
  481 + }
  482 + }
  483 + countItem ++;
  484 + }
  485 + if(StringUtils.isNotBlank(mensagem.toString())){
  486 + throw new BusinessException(mensagem.toString(), CodigoErro.REGRA_NEGOCIO.getValue());
  487 + }
  488 +
  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 + BigDecimal quantidadeEmEstoque = this.materialLocalEstoqueService.buscarQuantidadeLocalEstoquePorIdMaterialIdEndereco(material.getId(), enderecoEstoque.getId());
  521 +
  522 + if(materialLocQt.getValue().add(quantidadeEmEstoque).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(), localEstoque.getCapacidade());
  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 + }
414 534  
415 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-api/src/main/java/br/com/centralit/api/service/impl/MovimentoEstoqueServiceImpl.java
... ... @@ -639,13 +639,22 @@ public class MovimentoEstoqueServiceImpl extends GenericServiceImpl&lt;MovimentoEst
639 639 public List<MovimentoEstoque> findAllByEntrada(EntradaAlmoxarifado entradaAlmoxarifado) {
640 640  
641 641 List<MovimentoEstoque> movimentos = new ArrayList<MovimentoEstoque>();
642   - Dominio classeReferenciaEntradaItem = this.dominioService.findByChaveAndCodigo(DominioMaterial.CLASSE_REFERENCIA, DominioMaterial.REFERENCIA_ENTRADA_ALMOXARIFADO_ITEM);
643 642  
644 643 for (EntradaAlmoxarifadoItem entradaItem : entradaAlmoxarifado.getEntradasItem()) {
645   - movimentos.addAll(this.findAllByClasseReferencia(classeReferenciaEntradaItem, entradaItem.getId()));
  644 + movimentos.addAll(this.findAllByEntradaItem(entradaItem));
646 645 }
647 646  
648 647 return movimentos;
649 648 }
  649 +
  650 + /**
  651 + * {@inheritDoc}
  652 + */
  653 + @Override
  654 + public Collection<MovimentoEstoque> findAllByEntradaItem(EntradaAlmoxarifadoItem entradaAlmoxarifadoItem) {
  655 + Dominio classeReferenciaEntradaItem = this.dominioService.findByChaveAndCodigo(DominioMaterial.CLASSE_REFERENCIA, DominioMaterial.REFERENCIA_ENTRADA_ALMOXARIFADO_ITEM);
  656 +
  657 + return this.findAllByClasseReferencia(classeReferenciaEntradaItem, entradaAlmoxarifadoItem.getId());
  658 + }
650 659  
651 660 }
... ...
cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/validation/EntradaAlmoxarifadoAllValidator.java
... ... @@ -5,7 +5,6 @@ import java.math.BigDecimal;
5 5 import org.springframework.beans.factory.annotation.Autowired;
6 6 import org.springframework.stereotype.Component;
7 7 import org.springframework.validation.Errors;
8   -import org.springframework.validation.ValidationUtils;
9 8 import org.springframework.validation.Validator;
10 9  
11 10 import br.com.centralit.api.model.EntradaAlmoxarifado;
... ... @@ -56,11 +55,15 @@ public class EntradaAlmoxarifadoAllValidator implements Validator {
56 55 }
57 56  
58 57 if (alteracaoData && !codigosMovimentos.isEmpty()) {
59   - errors.rejectValue("dataContabil", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "ALMOXARIFADO.VALIDACAO.DATA_CONTABIL_ALTERADA_SAIDAS");
  58 + errors.rejectValue("dataContabil", CodigoErro.VALIDACAO_CAMPOS.getValue().toString(), "ALMOXARIFADO.VALIDACAO.DATA_CONTABIL_ALTERADA_SAIDAS");
60 59 }
61 60 }
62 61  
63 62 if (UtilObjeto.isReferencia(entrada.getDataContabil())) {
  63 +
  64 + if (entrada.getDataContabil().before(entrada.getDataRecebimento())) {
  65 + errors.rejectValue("dataContabil", CodigoErro.VALIDACAO_CAMPOS.getValue().toString(), "ALMOXARIFADO.VALIDACAO.DATA_CONTABIL_DATA_RECEBIMENTO");
  66 + }
64 67  
65 68 if (UtilColecao.isVazio(entrada.getDocumentos())) {
66 69 errors.rejectValue("documentos", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "CORPORATIVO.LABEL.ASSOCIAR_DOCUMENTOS");
... ...
cit-almoxarifado-web/src/main/java/br/com/centralit/listener/StartupListenerAlmoxarifado.java
... ... @@ -351,6 +351,9 @@ public class StartupListenerAlmoxarifado extends UtilStartup implements Applicat
351 351 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.VALIDACAO.ENDERECO_ESTOQUE_VINCULO_CICLICO", "Não é permitido vincular o endereço de estoque superior, pois este endereço tem como endereço superior o registro que está sendo alterado. Favor remover ou escolher outro endereço de estoque superior.", dominio, modulo));
352 352 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.VALIDACAO.ENTRADA_DESCONTABILIZACAO_COM_SAIDAS", "Você não pode descontabilizar esta entrada pois existem as seguintes saídas com materiais da mesma: ", dominio, modulo));
353 353 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.VALIDACAO.DATA_CONTABIL_ALTERADA_SAIDAS", "Você não pode alterar a data de contabilização após realizar atendimentos e baixas em materiais desta entrada!", dominio, modulo));
  354 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.VALIDACAO.DATA_CONTABIL_DATA_RECEBIMENTO", "A data de contabilização não pode ser menor que a data de recebimento!", dominio, modulo));
  355 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.VALIDACAO.EDITAR_ENTRADA_CONTABIL", "Você só pode editar entradas sem data contabil ou com data maior ou igual ao do mês de referência!", dominio, modulo));
  356 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.VALIDACAO.EDITAR_ENTRADA_COM_SAIDAS", "Você não pode editar esta entrada pois existem as seguintes saídas com materiais da mesma: ", dominio, modulo));
354 357 }
355 358  
356 359 private void gerarMensagem(Dominio dominio, Modulo modulo, List<Internacionalizacao> internacionalizacaoList) {
... ... @@ -380,6 +383,8 @@ public class StartupListenerAlmoxarifado extends UtilStartup implements Applicat
380 383 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.MATERIAL_NAO_POSSUI_CARACTERISTICAS", "Material não possui características cadastradas.", dominio, modulo));
381 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));
382 385 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.VALIDACAO_PRECO_MEDIO_MATERIAL_CONSUMO", "Valor médio do material é superior a ", dominio, modulo));
  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. Capacidade suportada: %s", dominio, modulo));
383 388 }
384 389 }
385 390  
... ...
cit-almoxarifado-web/src/main/webapp/assets/js/angular/custom/controller/EntradaAlmoxarifadoController.js
... ... @@ -131,7 +131,9 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp
131 131  
132 132 if($scope.entradaAlmoxarifado.fornecedor){
133 133 $scope.entradaAlmoxarifado.fornecedor['pessoa.nome'] = $scope.entradaAlmoxarifado.fornecedor.pessoa.nome;
  134 + $scope.entradaAlmoxarifado.fornecedor['cpfCnpj'] = $scope.entradaAlmoxarifado.fornecedor.pessoa.cpfCnpj;
134 135 $scope.entradaAlmoxarifadoOriginal.fornecedor['pessoa.nome'] = $scope.entradaAlmoxarifadoOriginal.fornecedor.pessoa.nome;
  136 + $scope.entradaAlmoxarifadoOriginal.fornecedor['cpfCnpj'] = $scope.entradaAlmoxarifadoOriginal.fornecedor.pessoa.cpfCnpj;
135 137 }
136 138  
137 139 $scope.dominiosTipoRecebimento.forEach(function(item){
... ... @@ -175,6 +177,16 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp
175 177  
176 178 $scope.findAutoCompleteFornecedor = function(value){
177 179 return FornecedorRepository.listarFornecedoresBusca(value).then(function(result) {
  180 + for (var i = 0; i < result.length; i++) {
  181 + if (result[i]['pessoa.pessoaFisica.cpf']) {
  182 + result[i].cpfCnpj = aplicarCpfCnpj(result[i]['pessoa.pessoaFisica.cpf']);
  183 + result[i].originalElement.cpfCnpj = aplicarCpfCnpj(result[i]['pessoa.pessoaFisica.cpf']);
  184 + }
  185 + if (result[i]['pessoa.pessoaJuridica.cnpj']) {
  186 + result[i].cpfCnpj = aplicarCpfCnpj(result[i]['pessoa.pessoaJuridica.cnpj']);
  187 + result[i].originalElement.cpfCnpj = aplicarCpfCnpj(result[i]['pessoa.pessoaJuridica.cnpj']);
  188 + }
  189 + }
178 190 return result;
179 191 });
180 192 };
... ... @@ -523,6 +535,7 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp
523 535  
524 536 if ($scope.entradaAlmoxarifado.fornecedor) {
525 537 $scope.entradaAlmoxarifado.fornecedor['pessoa.nome'] = $scope.entradaAlmoxarifado.fornecedor.pessoa.nome;
  538 + $scope.entradaAlmoxarifado.fornecedor['cpfCnpj'] = $scope.entradaAlmoxarifado.fornecedor.pessoa.cpfCnpj;
526 539 }
527 540  
528 541 // depois de salvar a entrada ja tendo uma referencia do id, esse metodo ira salvar os documentos se existir
... ... @@ -565,6 +578,7 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp
565 578 $scope.entradaAlmoxarifado.dataReferencia = $filter('date')($scope.entradaAlmoxarifado.dataReferencia, "dd/MM/yyyy");
566 579 if ($scope.entradaAlmoxarifado.fornecedor) {
567 580 $scope.entradaAlmoxarifado.fornecedor['pessoa.nome'] = $scope.entradaAlmoxarifado.fornecedor.pessoa.nome;
  581 + $scope.entradaAlmoxarifado.fornecedor['cpfCnpj'] = $scope.entradaAlmoxarifado.fornecedor.pessoa.cpfCnpj;
568 582 }
569 583 $scope.setLoading(false);
570 584 if (dataContabil) {
... ... @@ -573,6 +587,7 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp
573 587 } else {
574 588 $scope.showAlert("success", $translate.instant('ALMOXARIFADO.MSG.ENTRADA_DESCONTABILIZADA'));
575 589 }
  590 + $scope.atualizaPaginaPesquisa();
576 591 });
577 592  
578 593 $timeout(function() {
... ... @@ -1051,7 +1066,7 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp
1051 1066 var deferred = $q.defer();
1052 1067 MaterialRepository.getMaterialTransferencia(material.id).then(function(result) {
1053 1068 $scope.caracteristicas = [];
1054   - $scope.caracteristicasGenericas = [];
  1069 + $scope.entradaItem.caracteristicas = [];
1055 1070 var materialCaracteristicas = [];
1056 1071  
1057 1072 materialCaracteristicas = result.materialCaracteristicas.filter(function(caracteristica) {
... ... @@ -1072,7 +1087,7 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp
1072 1087 tempMateriais.push(materialCaracteristicaTemp);
1073 1088  
1074 1089 } else {
1075   - $scope.caracteristicasGenericas.push({
  1090 + $scope.entradaItem.caracteristicas.push({
1076 1091 materialCaracteristica: angular.copy(materialCaracteristicaTemp)
1077 1092 });
1078 1093  
... ... @@ -1090,7 +1105,7 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp
1090 1105 if(result && result[0]){
1091 1106 tempMateriais.forEach(function(item){
1092 1107 if(result[0].originalElement.chave === item.caracteristica.chaveDominio) {
1093   - $scope.caracteristicasGenericas.push({
  1108 + $scope.entradaItem.caracteristicas.push({
1094 1109 materialCaracteristica: angular.copy(item),
1095 1110 listaDominios: angular.copy(result)
1096 1111 });
... ... @@ -1118,18 +1133,16 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp
1118 1133  
1119 1134 function buscaCaracteristicas(){
1120 1135 if($scope.entradaItem.caracteristicas){
1121   - $scope.carregarCaracteristicasGenericasMaterial($scope.entradaItem.material).then(function(){
1122   - $scope.setLoadingGet(true);
1123   - angular.forEach($scope.caracteristicasGenericas, function(caracteristicaGenerica){
1124   - angular.forEach($scope.entradaItem.caracteristicas, function(caracteristicaSalva){
1125   - if(caracteristicaGenerica.materialCaracteristica.id == caracteristicaSalva.materialCaracteristica.id){
1126   - caracteristicaGenerica.valorCaracteristica = caracteristicaSalva.valorCaracteristica;
1127   - }
1128   - });
1129   - });
1130   -
1131   - abrirModalCaracteristicas();
1132   - });
  1136 + angular.forEach($scope.entradaItem.caracteristicas, function(caracteristica){
  1137 + if (caracteristica.caracteristica.chaveDominio) {
  1138 + DominioRepository.findAllDominio(caracteristica.caracteristica.chaveDominio).then(function(result) {
  1139 + if(result && result[0]){
  1140 + caracteristica.listaDominios = angular.copy(result);
  1141 + }
  1142 + });
  1143 + }
  1144 + });
  1145 + abrirModalCaracteristicas();
1133 1146 }else{
1134 1147 $scope.carregarCaracteristicasGenericasMaterial($scope.entradaItem.material).then(function(){
1135 1148 $scope.setLoadingGet(true);
... ... @@ -1140,7 +1153,7 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp
1140 1153  
1141 1154 function abrirModalCaracteristicas(){
1142 1155 $scope.editEntrada = $scope.edit;
1143   - if ($scope.caracteristicasGenericas && $scope.caracteristicasGenericas.length > 0){
  1156 + if ($scope.entradaItem.caracteristicas && $scope.entradaItem.caracteristicas.length > 0){
1144 1157 $timeout(function(){
1145 1158 $scope.$openModal('modal-caracteristicas.html', 'lg');
1146 1159 $scope.setLoading(false);
... ... @@ -1151,15 +1164,15 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp
1151 1164 }
1152 1165 };
1153 1166  
1154   - $scope.salvaCaracteristicasTemp = function(formDialogCaracteristicas) {
  1167 + $scope.salvaCaracteristicasTemp = function(formDialogCaracteristicas, caracteristicas) {
1155 1168 formDialogCaracteristicas.$submitted = true;
1156 1169 if (formDialogCaracteristicas.$valid) {
1157 1170 angular.forEach($scope.entradaAlmoxarifado.entradasItem, function(entradaItem){
1158 1171 if (entradaItem.$checked) {
1159   - entradaItem.caracteristicas = $scope.caracteristicasGenericas;
  1172 + entradaItem.caracteristicas = angular.copy($scope.entradaItem.caracteristicas);
1160 1173 }
1161 1174 });
1162   - $scope.caracteristicasGenericas = [];
  1175 + $scope.entradaItem.caracteristicas = [];
1163 1176 $scope.$modalInstance.dismiss('cancel');
1164 1177 } else {
1165 1178 $scope.showAlert('error', $translate.instant('VALIDACAO.ALERTA_OBRIGATORIOS'));
... ... @@ -1178,7 +1191,11 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp
1178 1191 });
1179 1192 };
1180 1193  
1181   - $scope.defineTipoNumerico = function(){
  1194 + $scope.atualizaPaginaPesquisa = function () {
  1195 + $scope.$showPageSearchWorkspace($scope.workspace);
  1196 + angular.element('#searchEntradaAlmoxarifado').scope().fetchResult();
  1197 + };
  1198 +$scope.defineTipoNumerico = function(){
1182 1199 $scope.showInteiro= false;
1183 1200 $scope.showDecimal= false;
1184 1201 switch($scope.entradaItem.unidadeMedidaEntrada.tipoNumerico.codigo){
... ...
cit-almoxarifado-web/src/main/webapp/assets/js/angular/custom/controller/EntradaAlmoxarifadoListController.js
1 1 'use strict';
2 2  
3   -citApp.controller('EntradaAlmoxarifadoListController', ['$scope', 'EntradaAlmoxarifadoRepository', '$translate', '$timeout', 'DominioRepository', function EntradaAlmoxarifadoListController($scope, EntradaAlmoxarifadoRepository, $translate, $timeout, DominioRepository) {
  3 +citApp.controller('EntradaAlmoxarifadoListController', ['$scope', 'EntradaAlmoxarifadoRepository', '$translate', '$timeout', 'DominioRepository', 'MovimentoEstoqueRepository',
  4 + function EntradaAlmoxarifadoListController($scope, EntradaAlmoxarifadoRepository, $translate, $timeout, DominioRepository,
  5 + MovimentoEstoqueRepository) {
4 6 $scope.$showAdvancedFilters = false;
5 7  
6 8 $scope.resetForm = function() {
... ... @@ -42,8 +44,23 @@ citApp.controller(&#39;EntradaAlmoxarifadoListController&#39;, [&#39;$scope&#39;, &#39;EntradaAlmoxa
42 44 $scope.showAlert('warning', !edit ? $translate.instant('MSG.SELECIONE_UM_ITEM_PARA_VISUALIZACAO') : $translate.instant('MSG.SELECIONE_UM_ITEM_PARA_EDICAO'));
43 45 return;
44 46 }
45   - angular.element('#entradaAlmoxarifadoControllerId').scope().getEntradaAlmoxarifado(entradaAlmoxarifado, edit);
46   - $scope.$showPageEditWorkspace($scope.workspace);
  47 +
  48 + var dtContabil = entradaAlmoxarifado.dataContabil;
  49 +
  50 + if (edit && (dtContabil && !$scope.isDataUSMaiorOuIgualReferenciaVigente(converterStringUSemDate(dtContabil)))) {
  51 + $scope.showAlert('warning', $translate.instant('ALMOXARIFADO.VALIDACAO.EDITAR_ENTRADA_CONTABIL'));
  52 + return;
  53 + }
  54 +
  55 + MovimentoEstoqueRepository.buscarMovimentosSaidaComMateriaisDaEntrada(entradaAlmoxarifado.id).then(function(result) {
  56 + if (result.saidas) {
  57 + $scope.showAlert('warning', $translate.instant('ALMOXARIFADO.VALIDACAO.EDITAR_ENTRADA_COM_SAIDAS') + result.saidas);
  58 + return;
  59 + } else {
  60 + angular.element('#entradaAlmoxarifadoControllerId').scope().getEntradaAlmoxarifado(entradaAlmoxarifado, edit);
  61 + $scope.$showPageEditWorkspace($scope.workspace);
  62 + }
  63 + });
47 64 };
48 65  
49 66 $scope.gerarRelatorio = function(){
... ...
cit-almoxarifado-web/src/main/webapp/html/entradaAlmoxarifado/dialog_associar_caracteristicas.html
1 1 <ng-form name="formDialogCaracteristicas" autocomplete="off">
2 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)">
  3 + <button class="btn btn-clear" type="button" ng-disabled="!editEntrada" ng-show="{{editEntrada}}" ng-if="editEntrada" ng-click="salvaCaracteristicasTemp(formDialogCaracteristicas, entradaItem.caracteristicas)">
4 4 <i class="fa fa-save green"></i>
5 5 <translate>LABEL.SALVAR</translate>
6 6 </button>
... ... @@ -12,7 +12,7 @@
12 12  
13 13 </div>
14 14  
15   - <div style="overflow-y:scroll; height: {{caracteristicasGenericas.length > 3 ? 500 : initial}}px; overflow-x: hidden;" class="modal-body">
  15 + <div style="overflow-y:scroll; height: {{entradaItem.caracteristicas.length > 3 ? 500 : initial}}px; overflow-x: hidden;" class="modal-body">
16 16 <h2 class="title-modal"><translate>ALMOXARIFADO.LABEL.CARACTERISTICAS_GENERICAS</translate></h2>
17 17 <p ng-show="editEntrada">
18 18 <small>( <span class="red">*</span> ) <translate>LABEL.CAMPOS_OBRIGATORIOS</translate>
... ... @@ -20,7 +20,7 @@
20 20 </p>
21 21 <fieldset>
22 22 <div class="scrollbar-inner">
23   - <div class="col-sm-12" ng-repeat="materialCaract in caracteristicasGenericas" ng-if="editEntrada">
  23 + <div class="col-sm-12" ng-repeat="materialCaract in entradaItem.caracteristicas" ng-if="editEntrada">
24 24  
25 25 <div class="row" ng-show="materialCaract.materialCaracteristica.generico" ng-if="materialCaract.materialCaracteristica.caracteristica.dominioTipoDado.nome == 'TEXT_FIELD'">
26 26 <div class="col-sm-12">
... ...
cit-almoxarifado-web/src/main/webapp/html/entradaAlmoxarifado/entradaAlmoxarifadoPg1.html
... ... @@ -12,7 +12,7 @@
12 12 </div>
13 13 <div class="col-md-4">
14 14 <auto-complete ng-id="entradaAlmoxarifado.fornecedor" ng-label="LABEL.FORNECEDOR" ng-model="entradaAlmoxarifado.fornecedor" form="dadosEntradaForm"
15   - ng-obrigatorio="{{edit}}" ng-disabled="!edit" ng-find="findAutoCompleteFornecedor(value)" ng-item="item['pessoa.nome']" />
  15 + ng-obrigatorio="{{edit}}" ng-disabled="!edit" ng-find="findAutoCompleteFornecedor(value)" ng-item="item['pessoa.nome'] + ' - ' + item.cpfCnpj" />
16 16 </div>
17 17 <div class="col-md-3">
18 18 <label-input-number ng-id="entradaAlmoxarifado.notaRecebimento" ng-label="ALMOXARIFADO.LABEL.NOTA_RECEBIMENTO" ng-model="entradaAlmoxarifado.notaRecebimento"
... ...