Commit b523898e50a90c95f19606110e64890258de9296
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<EntradaAl |
134 | 135 | * @return Valor monetário da quantidade movimentada na devolução. |
135 | 136 | */ |
136 | 137 | public BigDecimal realizaMovimentoDevolucao(MaterialConsumo materialConsumo, BigDecimal quantidadeMovimentada); |
138 | + | |
139 | + public List<EntradaAlmoxarifadoItem> findItensPorEntradaId(Long idEntrada); | |
137 | 140 | } | ... | ... |
cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/MaterialLocalEstoqueService.java
1 | 1 | package br.com.centralit.api.service; |
2 | 2 | |
3 | +import java.math.BigDecimal; | |
3 | 4 | import java.util.List; |
4 | 5 | |
5 | 6 | import br.com.centralit.api.model.EstruturaOrganizacional; |
... | ... | @@ -23,4 +24,6 @@ public interface MaterialLocalEstoqueService extends GenericService<MaterialLoca |
23 | 24 | List<MaterialLocalEstoque> buscarLocaisEstoquePorIdMaterialIdAlmoxarifado(Long idMaterial, Long idAlmoxarifado); |
24 | 25 | |
25 | 26 | Boolean enderecoJaVinculadoAoMaterial(Long idMaterial, Long idEndereco); |
27 | + | |
28 | + BigDecimal buscarQuantidadeLocalEstoquePorIdMaterialIdEndereco(Long idMaterial, Long idEndereco); | |
26 | 29 | } | ... | ... |
cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/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<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<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<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<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<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<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<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<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<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<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<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<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<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<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('EntradaAlmoxarifadoController', ['$scope', '$filter', '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('EntradaAlmoxarifadoController', ['$scope', '$filter', '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('EntradaAlmoxarifadoController', ['$scope', '$filter', '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('EntradaAlmoxarifadoController', ['$scope', '$filter', '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('EntradaAlmoxarifadoController', ['$scope', '$filter', '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('EntradaAlmoxarifadoController', ['$scope', '$filter', '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('EntradaAlmoxarifadoController', ['$scope', '$filter', '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('EntradaAlmoxarifadoController', ['$scope', '$filter', '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('EntradaAlmoxarifadoController', ['$scope', '$filter', '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('EntradaAlmoxarifadoController', ['$scope', '$filter', '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('EntradaAlmoxarifadoController', ['$scope', '$filter', '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('EntradaAlmoxarifadoController', ['$scope', '$filter', '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('EntradaAlmoxarifadoListController', ['$scope', '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" | ... | ... |