Commit e8b19b41a42a7ab56eabd6f414858fd0acc6c00c
1 parent
bcbf6614
Exists in
master
Redmine #4783 Alterações no serviço de salvamento da entrada
Showing
14 changed files
with
451 additions
and
138 deletions
Show diff stats
cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/EntradaAlmoxarifadoService.java
1 | 1 | package br.com.centralit.api.service; |
2 | 2 | |
3 | -import java.util.List; | |
4 | 3 | import java.util.Map; |
5 | 4 | |
6 | 5 | import br.com.centralit.api.model.EntradaAlmoxarifado; |
... | ... | @@ -10,6 +9,20 @@ public interface EntradaAlmoxarifadoService extends GenericService<EntradaAlmoxa |
10 | 9 | |
11 | 10 | Map<String, String> buscaValoresDocumentoEntrada(Long idEntrada); |
12 | 11 | |
12 | + /** | |
13 | + * <p><b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a></p> | |
14 | + * | |
15 | + * <p><b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a></p> | |
16 | + * | |
17 | + * Método responsável por concluir uma entrada do almoxarifado | |
18 | + * | |
19 | + * @author geovane.filho | |
20 | + * | |
21 | + * @param entradaAlmoxarifado | |
22 | + * @return | |
23 | + */ | |
24 | + EntradaAlmoxarifado concluir(EntradaAlmoxarifado entradaAlmoxarifado); | |
25 | + | |
13 | 26 | } |
14 | 27 | |
15 | 28 | ... | ... |
cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/MovimentoEstoqueService.java
... | ... | @@ -209,4 +209,18 @@ public interface MovimentoEstoqueService extends GenericService<MovimentoEstoque |
209 | 209 | */ |
210 | 210 | public Collection<MovimentoEstoque> findAllByClasseReferencia(Dominio classeReferencia, Long idReferencia); |
211 | 211 | |
212 | + /** | |
213 | + * <p><b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a></p> | |
214 | + * | |
215 | + * <p><b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a></p> | |
216 | + * | |
217 | + * Método responsável por buscar todos os códigos das operações de atendimentos e baixas que ocorreram com materiais da entrada passada como referência | |
218 | + * | |
219 | + * @author geovane.filho | |
220 | + * | |
221 | + * @param idEntrada | |
222 | + * @return | |
223 | + */ | |
224 | + String buscarMovimentosSaidaComMateriaisDaEntrada(Long idEntrada); | |
225 | + | |
212 | 226 | } | ... | ... |
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.util.Calendar; | |
3 | 4 | import java.util.HashMap; |
4 | 5 | import java.util.Map; |
5 | 6 | |
... | ... | @@ -9,7 +10,6 @@ import org.springframework.stereotype.Service; |
9 | 10 | import org.springframework.validation.Validator; |
10 | 11 | |
11 | 12 | import br.com.centralit.api.dao.EntradaAlmoxarifadoDao; |
12 | -import br.com.centralit.api.model.BemAlmoxarifadoCaracteristica; | |
13 | 13 | import br.com.centralit.api.model.EntradaAlmoxarifado; |
14 | 14 | import br.com.centralit.api.model.EntradaAlmoxarifadoDocumento; |
15 | 15 | import br.com.centralit.api.model.EntradaAlmoxarifadoItem; |
... | ... | @@ -27,6 +27,7 @@ import br.com.centralit.api.service.MovimentoEstoqueService; |
27 | 27 | import br.com.centralit.api.service.ParceiroService; |
28 | 28 | import br.com.centralit.api.service.UnidadeMedidaService; |
29 | 29 | import br.com.centralit.api.service.UsuarioService; |
30 | +import br.com.centralit.api.service.validation.EntradaAlmoxarifadoAllValidator; | |
30 | 31 | import br.com.centralit.framework.exception.BusinessException; |
31 | 32 | import br.com.centralit.framework.exception.CodigoErro; |
32 | 33 | import br.com.centralit.framework.model.Dominio; |
... | ... | @@ -68,12 +69,6 @@ public class EntradaAlmoxarifadoServiceImpl extends GenericServiceImpl<EntradaAl |
68 | 69 | /** Atributo VALIDACAO_DATA_FORA_REFERENCIA_EXCLUSAO_ENTRADA. */ |
69 | 70 | private static final String VALIDACAO_DATA_FORA_REFERENCIA_EXCLUSAO_ENTRADA = "VALIDACAO.DATA_FORA_REFERENCIA_EXCLUSAO_ENTRADA"; |
70 | 71 | |
71 | - /** Atributo VALIDACAO_DATA_RECEBIMENTO. */ | |
72 | - private static final String VALIDACAO_DATA_RECEBIMENTO = "VALIDACAO.DATA_RECEBIMENTO"; | |
73 | - | |
74 | - /** Atributo MSG_MN019. */ | |
75 | - private static final String MSG_MN019 = "MSG.MN019"; | |
76 | - | |
77 | 72 | /** Atributo entradaAlmoxarifadoDao. */ |
78 | 73 | private EntradaAlmoxarifadoDao entradaAlmoxarifadoDao; |
79 | 74 | |
... | ... | @@ -109,42 +104,53 @@ public class EntradaAlmoxarifadoServiceImpl extends GenericServiceImpl<EntradaAl |
109 | 104 | |
110 | 105 | @Autowired |
111 | 106 | private ConfiguracaoParametroSistemaService configuracaoParametroSistemaService; |
107 | + | |
108 | + private Validator validatorBasic; | |
109 | + | |
110 | + private Validator validatorAll; | |
112 | 111 | |
113 | 112 | /** |
114 | 113 | * Responsável pela criação de novas instâncias desta classe. |
115 | 114 | * |
116 | 115 | * @param entradaAlmoxarifadoDao |
117 | - * @param validator | |
116 | + * @param validatorBasic | |
118 | 117 | */ |
119 | 118 | @Autowired |
120 | - public EntradaAlmoxarifadoServiceImpl( EntradaAlmoxarifadoDao entradaAlmoxarifadoDao, @Qualifier("entradaAlmoxarifadoValidator") Validator validator ) { | |
119 | + public EntradaAlmoxarifadoServiceImpl( EntradaAlmoxarifadoDao entradaAlmoxarifadoDao, @Qualifier("entradaAlmoxarifadoBasicValidator") Validator validatorBasic ) { | |
121 | 120 | |
122 | 121 | this.dao = entradaAlmoxarifadoDao; |
123 | 122 | this.entradaAlmoxarifadoDao = entradaAlmoxarifadoDao; |
124 | - this.validator = validator; | |
123 | + this.validatorBasic = validatorBasic; | |
124 | + | |
125 | + EntradaAlmoxarifadoAllValidator entradaAlmoxarifadoAllValidator = new EntradaAlmoxarifadoAllValidator(this, movimentoEstoqueService); | |
126 | + | |
127 | + this.validatorAll = entradaAlmoxarifadoAllValidator; | |
128 | + | |
129 | + this.validator = entradaAlmoxarifadoAllValidator; | |
125 | 130 | } |
126 | 131 | |
127 | 132 | /** |
128 | 133 | * |
129 | 134 | */ |
130 | 135 | @Override |
131 | - public EntradaAlmoxarifado save(EntradaAlmoxarifado entity) { | |
132 | - | |
133 | - this.validarEntidade(entity, this.validator); | |
134 | - | |
135 | - this.montarEntidade(entity); | |
136 | - | |
137 | - this.validarDataContabil(entity); | |
138 | - | |
139 | - this.validarDataRecebimento(entity); | |
136 | + public EntradaAlmoxarifado save(EntradaAlmoxarifado entrada) { | |
137 | + | |
138 | + this.validarEntidade(entrada, this.validatorBasic); | |
139 | + | |
140 | + // validação de se a data contabil esta dentro do mes referencia | |
141 | + Calendar dataContabil = null; | |
142 | + if(UtilObjeto.isReferencia(entrada.getDataContabil())){ | |
143 | + dataContabil = Calendar.getInstance(); | |
144 | + dataContabil.setTime(entrada.getDataContabil().getTime()); | |
145 | + } | |
146 | + | |
147 | + this.montarEntidade(entrada); | |
140 | 148 | |
141 | - EntradaAlmoxarifado entradaAlmoxarifado = (EntradaAlmoxarifado) this.entradaAlmoxarifadoDao.save(entity); | |
149 | + EntradaAlmoxarifado entradaAlmoxarifado = (EntradaAlmoxarifado) this.entradaAlmoxarifadoDao.save(entrada); | |
142 | 150 | |
143 | 151 | configurarNotaRecebimento(entradaAlmoxarifado); |
144 | 152 | |
145 | - entity.setCodigo(String.valueOf(entradaAlmoxarifado.getNotaRecebimento())); | |
146 | - | |
147 | - this.movimentoEstoqueService.gerarMovimento(entradaAlmoxarifado); | |
153 | + entrada.setCodigo(String.valueOf(entradaAlmoxarifado.getNotaRecebimento())); | |
148 | 154 | |
149 | 155 | return entradaAlmoxarifado; |
150 | 156 | } |
... | ... | @@ -154,54 +160,55 @@ public class EntradaAlmoxarifadoServiceImpl extends GenericServiceImpl<EntradaAl |
154 | 160 | * |
155 | 161 | * @author wilker.machado |
156 | 162 | * |
157 | - * @param entity | |
163 | + * @param entrada | |
158 | 164 | */ |
159 | - private void montarEntidade(EntradaAlmoxarifado entity) { | |
165 | + private void montarEntidade(EntradaAlmoxarifado entrada) { | |
160 | 166 | |
161 | - entity.setAlmoxarifado(this.estruturaOrganizacionalService.find(entity.getAlmoxarifado().getId())); | |
167 | + entrada.setAlmoxarifado(this.estruturaOrganizacionalService.find(entrada.getAlmoxarifado().getId())); | |
162 | 168 | |
163 | - entity.setFornecedor((Fornecedor) this.parceiroService.find(entity.getFornecedor().getId())); | |
169 | + entrada.setFornecedor((Fornecedor) this.parceiroService.find(entrada.getFornecedor().getId())); | |
164 | 170 | |
165 | - entity.setDominioTipoEntrada(this.dominioService.find(entity.getDominioTipoEntrada().getId())); | |
171 | + entrada.setDominioTipoEntrada(this.dominioService.find(entrada.getDominioTipoEntrada().getId())); | |
166 | 172 | |
167 | - entity.setDominioTipoRecebimento(this.dominioService.find(entity.getDominioTipoRecebimento().getId())); | |
173 | + entrada.setDominioTipoRecebimento(this.dominioService.find(entrada.getDominioTipoRecebimento().getId())); | |
168 | 174 | |
169 | - entity.setDominioFinalidade(this.dominioService.findByChaveAndCodigo("tipoFinalidadeMaterial", entity.getDominioFinalidade().getCodigo())); | |
175 | + entrada.setDominioFinalidade(this.dominioService.findByChaveAndCodigo("tipoFinalidadeMaterial", entrada.getDominioFinalidade().getCodigo())); | |
170 | 176 | |
171 | - if(UtilObjeto.isReferencia(entity.getUnidadeRequisitante()) && UtilObjeto.isReferencia(entity.getUnidadeRequisitante().getId())){ | |
177 | + if(UtilObjeto.isReferencia(entrada.getUnidadeRequisitante()) && UtilObjeto.isReferencia(entrada.getUnidadeRequisitante().getId())){ | |
172 | 178 | |
173 | - entity.setUnidadeRequisitante(this.estruturaOrganizacionalService.find(entity.getUnidadeRequisitante().getId())); | |
179 | + entrada.setUnidadeRequisitante(this.estruturaOrganizacionalService.find(entrada.getUnidadeRequisitante().getId())); | |
174 | 180 | |
175 | 181 | } |
176 | 182 | |
177 | - for (EntradaAlmoxarifadoItem entradaAlmoxarifadoItem : entity.getEntradasItem()) { | |
183 | + for (EntradaAlmoxarifadoItem entradaAlmoxarifadoItem : entrada.getEntradasItem()) { | |
178 | 184 | |
179 | 185 | entradaAlmoxarifadoItem.setMaterial(this.materialConsumoService.find(entradaAlmoxarifadoItem.getMaterial().getId())); |
180 | 186 | |
181 | 187 | entradaAlmoxarifadoItem.setUnidadeMedidaEntrada(this.unidadeMedidaService.find(entradaAlmoxarifadoItem.getUnidadeMedidaEntrada().getId())); |
182 | 188 | |
183 | - entradaAlmoxarifadoItem.setEntrada(entity); | |
189 | + entradaAlmoxarifadoItem.setEntrada(entrada); | |
184 | 190 | |
185 | - for (BemAlmoxarifadoCaracteristica bemAlmoxarifadoCaracteristica : entradaAlmoxarifadoItem.getCaracteristicas()) { | |
191 | + //TODO Arrumar caracteristicas | |
192 | + /*for (BemAlmoxarifadoCaracteristica bemAlmoxarifadoCaracteristica : entradaAlmoxarifadoItem.getCaracteristicas()) { | |
186 | 193 | |
187 | 194 | bemAlmoxarifadoCaracteristica.setMaterialCaracteristica(this.materialCaracteristicaService.find(bemAlmoxarifadoCaracteristica.getMaterialCaracteristica().getId())); |
188 | 195 | |
189 | 196 | bemAlmoxarifadoCaracteristica.setCaracteristica(bemAlmoxarifadoCaracteristica.getMaterialCaracteristica().getCaracteristica()); |
190 | 197 | |
191 | 198 | bemAlmoxarifadoCaracteristica.setEntradaItem(entradaAlmoxarifadoItem); |
192 | - } | |
199 | + }*/ | |
193 | 200 | |
194 | 201 | } |
195 | 202 | |
196 | - for (EntradaAlmoxarifadoObservacao entradaObservacao : entity.getObservacoes()) { | |
203 | + for (EntradaAlmoxarifadoObservacao entradaObservacao : entrada.getObservacoes()) { | |
197 | 204 | |
198 | 205 | entradaObservacao.setAutor(this.usuarioService.find(entradaObservacao.getAutor().getId())); |
199 | 206 | |
200 | - entradaObservacao.setEntrada(entity); | |
207 | + entradaObservacao.setEntrada(entrada); | |
201 | 208 | |
202 | 209 | } |
203 | 210 | |
204 | - for (EntradaAlmoxarifadoDocumento entradaDocumento : entity.getDocumentos()) { | |
211 | + for (EntradaAlmoxarifadoDocumento entradaDocumento : entrada.getDocumentos()) { | |
205 | 212 | |
206 | 213 | entradaDocumento.setDominioTipoDocumento(this.dominioService.find(entradaDocumento.getDominioTipoDocumento().getId())); |
207 | 214 | |
... | ... | @@ -210,38 +217,13 @@ public class EntradaAlmoxarifadoServiceImpl extends GenericServiceImpl<EntradaAl |
210 | 217 | entradaDocumento.setEmitente(this.parceiroService.find(entradaDocumento.getEmitente().getId())); |
211 | 218 | } |
212 | 219 | |
213 | - entradaDocumento.setEntrada(entity); | |
220 | + entradaDocumento.setEntrada(entrada); | |
214 | 221 | } |
215 | - | |
216 | - } | |
217 | - | |
218 | - /** | |
219 | - * Método responsável por validar se a data de recebimento e menor que a data de cadastro da entrada | |
220 | - * | |
221 | - * @author wilker.machado | |
222 | - * | |
223 | - * @param entrada | |
224 | - */ | |
225 | - private void validarDataRecebimento(EntradaAlmoxarifado entrada) { | |
226 | - | |
227 | - if (UtilDate.isPrimeiraDataMenorSegundaData(entrada.getDataReferencia(), entrada.getDataRecebimento())) { | |
228 | - | |
229 | - throw new BusinessException(VALIDACAO_DATA_RECEBIMENTO, CodigoErro.REGRA_NEGOCIO.getValue()); | |
230 | - } | |
231 | - } | |
232 | - | |
233 | - /** | |
234 | - * Método responsável por validação de se a data contabil esta dentro do mes referencia | |
235 | - * | |
236 | - * @author wilker.machado | |
237 | - * | |
238 | - * @param entrada | |
239 | - */ | |
240 | - private void validarDataContabil(EntradaAlmoxarifado entrada) { | |
241 | - | |
242 | - if (!UtilDate.isDentroMes(entrada.getDataContabil(), entrada.getAlmoxarifado().getOrganizacao().getDataReferenciaVigente())) { | |
243 | - | |
244 | - throw new BusinessException(MSG_MN019, CodigoErro.REGRA_NEGOCIO.getValue()); | |
222 | + | |
223 | + if (UtilObjeto.isReferencia(entrada.getDataContabil())) { | |
224 | + entrada.setIsContabilizada(Boolean.TRUE); | |
225 | + } else { | |
226 | + entrada.setIsContabilizada(Boolean.FALSE); | |
245 | 227 | } |
246 | 228 | } |
247 | 229 | |
... | ... | @@ -332,4 +314,11 @@ public class EntradaAlmoxarifadoServiceImpl extends GenericServiceImpl<EntradaAl |
332 | 314 | return listaValoresDocumento; |
333 | 315 | } |
334 | 316 | |
317 | + @Override | |
318 | + public EntradaAlmoxarifado concluir(EntradaAlmoxarifado entradaAlmoxarifado) { | |
319 | + | |
320 | + // TODO Auto-generated method stub | |
321 | + return null; | |
322 | + } | |
323 | + | |
335 | 324 | } | ... | ... |
cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/impl/MovimentoEstoqueServiceImpl.java
... | ... | @@ -8,6 +8,7 @@ import java.util.HashMap; |
8 | 8 | import java.util.List; |
9 | 9 | import java.util.Map; |
10 | 10 | |
11 | +import org.apache.commons.lang.NotImplementedException; | |
11 | 12 | import org.springframework.beans.factory.annotation.Autowired; |
12 | 13 | import org.springframework.beans.factory.annotation.Qualifier; |
13 | 14 | import org.springframework.security.core.context.SecurityContextHolder; |
... | ... | @@ -577,4 +578,9 @@ public class MovimentoEstoqueServiceImpl extends GenericServiceImpl<MovimentoEst |
577 | 578 | return this.movimentoEstoqueDao.findAllByClasseReferencia(classeReferencia, idReferencia); |
578 | 579 | } |
579 | 580 | |
581 | + @Override | |
582 | + public String buscarMovimentosSaidaComMateriaisDaEntrada(Long idEntrada) { | |
583 | + throw new NotImplementedException(); | |
584 | + } | |
585 | + | |
580 | 586 | } | ... | ... |
cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/validation/EntradaAlmoxarifadoAllValidator.java
0 → 100644
... | ... | @@ -0,0 +1,97 @@ |
1 | +package br.com.centralit.api.service.validation; | |
2 | + | |
3 | +import java.math.BigDecimal; | |
4 | + | |
5 | +import org.springframework.beans.factory.annotation.Autowired; | |
6 | +import org.springframework.stereotype.Component; | |
7 | +import org.springframework.validation.Errors; | |
8 | +import org.springframework.validation.ValidationUtils; | |
9 | +import org.springframework.validation.Validator; | |
10 | + | |
11 | +import br.com.centralit.api.model.EntradaAlmoxarifado; | |
12 | +import br.com.centralit.api.model.EntradaAlmoxarifadoItem; | |
13 | +import br.com.centralit.api.service.EntradaAlmoxarifadoService; | |
14 | +import br.com.centralit.api.service.MovimentoEstoqueService; | |
15 | +import br.com.centralit.framework.exception.CodigoErro; | |
16 | +import br.com.centralit.framework.util.UtilColecao; | |
17 | +import br.com.centralit.framework.util.UtilDate; | |
18 | +import br.com.centralit.framework.util.UtilObjeto; | |
19 | + | |
20 | +@Component("entradaAlmoxarifadoAllValidator") | |
21 | +public class EntradaAlmoxarifadoAllValidator implements Validator { | |
22 | + | |
23 | + @Autowired | |
24 | + private EntradaAlmoxarifadoService entradaAlmoxarifadoService; | |
25 | + | |
26 | + @Autowired | |
27 | + private MovimentoEstoqueService movimentoEstoqueService; | |
28 | + | |
29 | + public EntradaAlmoxarifadoAllValidator() { | |
30 | + | |
31 | + super(); | |
32 | + } | |
33 | + | |
34 | + public EntradaAlmoxarifadoAllValidator(EntradaAlmoxarifadoService entradaAlmoxarifadoService, MovimentoEstoqueService movimentoEstoqueService ) { | |
35 | + super(); | |
36 | + this.entradaAlmoxarifadoService = entradaAlmoxarifadoService; | |
37 | + this.movimentoEstoqueService = movimentoEstoqueService; | |
38 | + } | |
39 | + | |
40 | + @Override | |
41 | + public boolean supports(Class<?> clazz) { | |
42 | + | |
43 | + return EntradaAlmoxarifado.class.isAssignableFrom(clazz); | |
44 | + } | |
45 | + | |
46 | + @Override | |
47 | + public void validate(Object target, Errors errors) { | |
48 | + | |
49 | + ValidationUtils.rejectIfEmpty(errors, "dataContabil", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "LABEL.DATA_CONTABILIZACAO"); | |
50 | + | |
51 | + EntradaAlmoxarifado entrada = (EntradaAlmoxarifado) target; | |
52 | + | |
53 | + EntradaAlmoxarifado entradaOld = this.entradaAlmoxarifadoService.find(entrada.getId()); | |
54 | + | |
55 | + if (UtilObjeto.isReferencia(entradaOld.getDataContabil())) { | |
56 | + String codigosMovimentos = this.movimentoEstoqueService.buscarMovimentosSaidaComMateriaisDaEntrada(entradaOld.getId()); | |
57 | + boolean alteracaoData = false; | |
58 | + | |
59 | + if (!UtilObjeto.isReferencia(entrada.getDataContabil())) { | |
60 | + alteracaoData = true; | |
61 | + } else if (!UtilDate.compareCalendar(entrada.getDataContabil(), entradaOld.getDataContabil())) { | |
62 | + alteracaoData = true; | |
63 | + } | |
64 | + | |
65 | + if (alteracaoData && !codigosMovimentos.isEmpty()) { | |
66 | + errors.rejectValue("dataContabil", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "ALMOXARIFADO.VALIDACAO.DATA_CONTABIL_ALTERADA_SAIDAS"); | |
67 | + } | |
68 | + } | |
69 | + | |
70 | + if (UtilObjeto.isReferencia(entrada.getDataContabil())) { | |
71 | + | |
72 | + if (UtilColecao.isVazio(entrada.getDocumentos())) { | |
73 | + errors.rejectValue("documentos", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "CORPORATIVO.LABEL.ASSOCIAR_DOCUMENTOS"); | |
74 | + } | |
75 | + | |
76 | + BigDecimal valorTotalItens = new BigDecimal(0L); | |
77 | + | |
78 | + // repetição para verificar a soma de todos os itens da entrada e igual ao valor da nota | |
79 | + int item = 1; | |
80 | + for (EntradaAlmoxarifadoItem entradaItem : entrada.getEntradasItem()) { | |
81 | + if(entradaItem.getQuantidade() == null || entradaItem.getQuantidade() == BigDecimal.ZERO){ | |
82 | + errors.rejectValue("entradasItem", CodigoErro.VALIDACAO_CAMPOS.getValue().toString(),"VALIDACAO.QUANTIDADE_MAIOR_ZERO"); | |
83 | + } | |
84 | + //TODO validacaoBensCaracteristicasObrigatorias(errors, entradaItem, item); | |
85 | + valorTotalItens = valorTotalItens.add(entradaItem.getValorTotal()); | |
86 | + item++; | |
87 | + } | |
88 | + | |
89 | + // verificar se os valores da nota e da soma dos itens sao iguais, caso nao seja e lançada uma exceção | |
90 | + if (UtilObjeto.isReferencia(entrada.getValorTotalNota()) && valorTotalItens.compareTo(entrada.getValorTotalNota()) != 0) { | |
91 | + errors.rejectValue("valorTotalNota", CodigoErro.VALIDACAO_CAMPOS.getValue().toString(), "ALMOXARIFADO.VALIDACAO.NOTA_FISCAL_IGUAL_VALOR_INFORMADO"); | |
92 | + } | |
93 | + } | |
94 | + | |
95 | + } | |
96 | +} | |
97 | + | ... | ... |
cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/validation/EntradaAlmoxarifadoBasicValidator.java
0 → 100644
... | ... | @@ -0,0 +1,61 @@ |
1 | +package br.com.centralit.api.service.validation; | |
2 | + | |
3 | +import org.springframework.stereotype.Component; | |
4 | +import org.springframework.validation.Errors; | |
5 | +import org.springframework.validation.ValidationUtils; | |
6 | +import org.springframework.validation.Validator; | |
7 | + | |
8 | +import br.com.centralit.api.model.EntradaAlmoxarifado; | |
9 | +import br.com.centralit.api.model.EntradaAlmoxarifadoItem; | |
10 | +import br.com.centralit.framework.exception.CodigoErro; | |
11 | +import br.com.centralit.framework.util.UtilColecao; | |
12 | +import br.com.centralit.framework.util.UtilDate; | |
13 | +import br.com.centralit.framework.util.UtilObjeto; | |
14 | + | |
15 | +@Component("entradaAlmoxarifadoBasicValidator") | |
16 | +public class EntradaAlmoxarifadoBasicValidator implements Validator { | |
17 | + | |
18 | + @Override | |
19 | + public boolean supports(Class<?> clazz) { | |
20 | + | |
21 | + return EntradaAlmoxarifado.class.isAssignableFrom(clazz); | |
22 | + } | |
23 | + | |
24 | + @Override | |
25 | + public void validate(Object target, Errors errors) { | |
26 | + | |
27 | + ValidationUtils.rejectIfEmpty(errors, "almoxarifado", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "ALMOXARIFADO.LABEL.ALMOXARIFADO"); | |
28 | + | |
29 | + ValidationUtils.rejectIfEmpty(errors, "fornecedor", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "LABEL.FORNECEDOR"); | |
30 | + | |
31 | + ValidationUtils.rejectIfEmpty(errors, "dominioTipoEntrada", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "LABEL.TIPO_ENTRADA"); | |
32 | + | |
33 | + ValidationUtils.rejectIfEmpty(errors, "dominioTipoRecebimento", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "LABEL.TIPO_RECEBIMENTO"); | |
34 | + | |
35 | + ValidationUtils.rejectIfEmpty(errors, "dataRecebimento", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "ALMOXARIFADO.LABEL.DATA_RECEBIMENTO"); | |
36 | + | |
37 | + ValidationUtils.rejectIfEmpty(errors, "valorTotalNota", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "ALMOXARIFADO.LABEL.VALOR_TOTAL_NOTA"); | |
38 | + | |
39 | + ValidationUtils.rejectIfEmpty(errors, "dominioFinalidade", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "LABEL.FINALIDADE"); | |
40 | + | |
41 | + EntradaAlmoxarifado entrada = (EntradaAlmoxarifado) target; | |
42 | + | |
43 | + if (UtilDate.isPrimeiraDataMenorSegundaData(entrada.getDataReferencia(), entrada.getDataRecebimento())) { | |
44 | + errors.rejectValue("dataRecebimento", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "VALIDACAO.DATA_RECEBIMENTO"); | |
45 | + } | |
46 | + | |
47 | + if (UtilObjeto.isReferencia(entrada.getDataContabil())) { | |
48 | + if (!UtilDate.isDentroMes(entrada.getDataContabil(), entrada.getAlmoxarifado().getOrganizacao().getDataReferenciaVigente())) { | |
49 | + errors.rejectValue("dataContabil", CodigoErro.REGRA_NEGOCIO.getValue().toString(), "MSG.MN019"); | |
50 | + } | |
51 | + } | |
52 | + | |
53 | + ValidationUtils.rejectIfEmpty(errors, "valorTotalNota", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "LABEL.VALOR_TOTAL_NOTA"); | |
54 | + | |
55 | + if (UtilColecao.isVazio(entrada.getEntradasItem())) { | |
56 | + errors.rejectValue("entradasItem", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "LABEL.MATERIAIS"); | |
57 | + } | |
58 | + | |
59 | + } | |
60 | +} | |
61 | + | ... | ... |
cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/validation/EntradaAlmoxarifadoValidator.java
... | ... | @@ -1,39 +0,0 @@ |
1 | -package br.com.centralit.api.service.validation; | |
2 | - | |
3 | -import org.springframework.stereotype.Component; | |
4 | -import org.springframework.validation.Errors; | |
5 | -import org.springframework.validation.ValidationUtils; | |
6 | -import org.springframework.validation.Validator; | |
7 | - | |
8 | -import br.com.centralit.api.model.EntradaAlmoxarifado; | |
9 | -import br.com.centralit.framework.exception.CodigoErro; | |
10 | - | |
11 | -@Component("entradaAlmoxarifadoValidator") | |
12 | -public class EntradaAlmoxarifadoValidator implements Validator { | |
13 | - | |
14 | - @Override | |
15 | - public boolean supports(Class<?> clazz) { | |
16 | - | |
17 | - return EntradaAlmoxarifado.class.isAssignableFrom(clazz); | |
18 | - } | |
19 | - | |
20 | - @Override | |
21 | - public void validate(Object target, Errors errors) { | |
22 | - | |
23 | - ValidationUtils.rejectIfEmpty(errors, "almoxarifado", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "ALMOXARIFADO.LABEL.ALMOXARIFADO"); | |
24 | - | |
25 | - ValidationUtils.rejectIfEmpty(errors, "dataRecebimento", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "ALMOXARIFADO.LABEL.DATA_RECEBIMENTO"); | |
26 | - | |
27 | - ValidationUtils.rejectIfEmpty(errors, "dataContabil", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "LABEL.DATA_CONTABILIZACAO"); | |
28 | - | |
29 | - ValidationUtils.rejectIfEmpty(errors, "dominioTipoEntrada", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "LABEL.TIPO_ENTRADA"); | |
30 | - | |
31 | - ValidationUtils.rejectIfEmpty(errors, "dominioTipoRecebimento", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "LABEL.TIPO_RECEBIMENTO"); | |
32 | - | |
33 | - ValidationUtils.rejectIfEmpty(errors, "fornecedor", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "LABEL.FORNECEDOR"); | |
34 | - | |
35 | - ValidationUtils.rejectIfEmpty(errors, "valorTotalNota", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "ALMOXARIFADO.LABEL.VALOR_TOTAL_NOTA"); | |
36 | - | |
37 | - } | |
38 | -} | |
39 | - |
cit-almoxarifado-web/src/main/java/br/com/centralit/controller/EntradaAlmoxarifadoController.java
... | ... | @@ -106,5 +106,11 @@ public class EntradaAlmoxarifadoController extends GenericController<EntradaAlmo |
106 | 106 | |
107 | 107 | return responseBody; |
108 | 108 | } |
109 | + | |
110 | + @RequestMapping(method = RequestMethod.POST, value = "/concluir") | |
111 | + @ResponseBody | |
112 | + public ResponseBodyWrapper concluir(@RequestBody EntradaAlmoxarifado entradaAlmoxarifado) { | |
113 | + return new ResponseBodyWrapper(this.entradaAlmoxarifadoService.concluir(entradaAlmoxarifado), getEditView()); | |
114 | + } | |
109 | 115 | |
110 | 116 | } | ... | ... |
cit-almoxarifado-web/src/main/java/br/com/centralit/listener/StartupListenerAlmoxarifado.java
... | ... | @@ -306,6 +306,10 @@ public class StartupListenerAlmoxarifado extends UtilStartup implements Applicat |
306 | 306 | internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.DOCUMENTOS", "Documentos", dominio, modulo)); |
307 | 307 | internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.VALOR_TOTAL_MATERIAL_SUBTOTAL", "Valor total do material (Subtotal)", dominio, modulo)); |
308 | 308 | internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.UN_MEDIDA", "Un. medida", dominio, modulo)); |
309 | + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.CONCLUIR_ENTRADA", "Concluir entrada", dominio, modulo)); | |
310 | + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.CONCLUIR_ENTRADA_BTN", "Concluir", dominio, modulo)); | |
311 | + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.CONCLUIR_E_CONTABILIZAR_ENTRADA", "Concluir e contabilizar", dominio, modulo)); | |
312 | + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.CONCLUIR_E_DESCONTABILIZAR_ENTRADA", "Concluir e descontabilizar", dominio, modulo)); | |
309 | 313 | } |
310 | 314 | |
311 | 315 | private void gerarValidacao(Dominio dominio, Modulo modulo, List<Internacionalizacao> internacionalizacaoList) { |
... | ... | @@ -333,6 +337,8 @@ public class StartupListenerAlmoxarifado extends UtilStartup implements Applicat |
333 | 337 | internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.VALIDACAO.ENDERECO_ESTOQUE_IS_SUPERIOR_REMOVER", "O endereço de estoque a ser removido, foi vinculado como superior a outros endereço. Caso prossiga com a operação, também será removido todos os endereços vinculados a este. Deseja continuar?", dominio, modulo)); |
334 | 338 | internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.VALIDACAO.ENDERECO_ESTOQUE_TODOS_MATERIAIS", "A definição de endereço de estoque para todos os materias não poderá ser desfeita após salvar o registro. Deseja realmente adicionar este endereço para todos os materiais?", dominio, modulo)); |
335 | 339 | 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)); |
340 | + 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)); | |
341 | + 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)); | |
336 | 342 | } |
337 | 343 | |
338 | 344 | private void gerarMensagem(Dominio dominio, Modulo modulo, List<Internacionalizacao> internacionalizacaoList) { |
... | ... | @@ -349,6 +355,9 @@ public class StartupListenerAlmoxarifado extends UtilStartup implements Applicat |
349 | 355 | internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.DATA_BAIXA_FORA_REFERENCIA_VIGENTE", "Data de conclusão tem que estar dentro da referência vigente", dominio, modulo)); |
350 | 356 | internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.REQUISICAO_DIFERENTE_NAO_CONCLUIDA_PRONTA_ATENDIMENTO", "Somente requisições de consumo com status Não concluída e Pronta para atendimento pode ser editada!", dominio, modulo)); |
351 | 357 | internacionalizacaoList.add(new Internacionalizacao("MSG.EXISTE_REQUISICAO_DISPONIVEL_CENTROCUSTO_ALMOXARIFADO_UR", "Centro de custo, almoxarifado, unidade requisitante e materiais de consumo estão presentes na requisição: ", dominio, modulo)); |
358 | + | |
359 | + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.ENTRADA_CONTABILIZADA", "Entrada contabilizada com sucesso!", dominio, modulo)); | |
360 | + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.ENTRADA_DESCONTABILIZADA", "Entrada descontabilizada com sucesso!", dominio, modulo)); | |
352 | 361 | } |
353 | 362 | } |
354 | 363 | ... | ... |
cit-almoxarifado-web/src/main/webapp/assets/js/angular/custom/controller/EntradaAlmoxarifadoController.js
... | ... | @@ -2,13 +2,16 @@ |
2 | 2 | |
3 | 3 | citApp.controller('EntradaAlmoxarifadoController', ['$scope', '$filter', 'FileUploader', 'EntradaAlmoxarifadoRepository', 'EstruturaOrganizacionalAlmoxarifadoRepository', '$translate', '$timeout', |
4 | 4 | 'DominioRepository', 'FornecedorRepository', 'MaterialConsumoRepository', 'EntradaAlmoxarifadoItemRepository', 'MaterialLocalEstoqueRepository', |
5 | + 'MovimentoEstoqueRepository', | |
5 | 6 | function EntradaAlmoxarifadoController($scope, $filter, FileUploader, EntradaAlmoxarifadoRepository, EstruturaOrganizacionalAlmoxarifadoRepository, |
6 | 7 | $translate, $timeout, DominioRepository , FornecedorRepository, MaterialConsumoRepository, EntradaAlmoxarifadoItemRepository, |
7 | - MaterialLocalEstoqueRepository) { | |
8 | + MaterialLocalEstoqueRepository, MovimentoEstoqueRepository) { | |
8 | 9 | |
9 | 10 | var CODIGO_DOMINIO_TIPO_RECEBIMENTO_COMPRA_ORCAMENTARIA = 1; |
10 | 11 | |
11 | 12 | $scope.entradaAlmoxarifado = {}; |
13 | + | |
14 | + $scope.entradaAlmoxarifadoOriginal = {}; | |
12 | 15 | $scope.edit = true; |
13 | 16 | |
14 | 17 | /** |
... | ... | @@ -116,8 +119,12 @@ citApp.controller('EntradaAlmoxarifadoController', ['$scope', '$filter', 'FileUp |
116 | 119 | |
117 | 120 | EntradaAlmoxarifadoRepository.get(entradaAlmoxarifado.id).then(function(result) { |
118 | 121 | $scope.entradaAlmoxarifado = result.originalElement; |
122 | + | |
123 | + $scope.entradaAlmoxarifadoOriginal = angular.copy($scope.entradaAlmoxarifado); | |
124 | + | |
119 | 125 | if($scope.entradaAlmoxarifado.fornecedor){ |
120 | 126 | $scope.entradaAlmoxarifado.fornecedor['pessoa.nome'] = $scope.entradaAlmoxarifado.fornecedor.pessoa.nome; |
127 | + $scope.entradaAlmoxarifadoOriginal.fornecedor['pessoa.nome'] = $scope.entradaAlmoxarifadoOriginal.fornecedor.pessoa.nome; | |
121 | 128 | } |
122 | 129 | |
123 | 130 | $scope.dominiosTipoRecebimento.forEach(function(item){ |
... | ... | @@ -130,6 +137,14 @@ citApp.controller('EntradaAlmoxarifadoController', ['$scope', '$filter', 'FileUp |
130 | 137 | $scope.edit = edit; |
131 | 138 | $scope.setLoading(false); |
132 | 139 | }); |
140 | + | |
141 | + MovimentoEstoqueRepository.buscarMovimentosSaidaComMateriaisDaEntrada($scope.entradaAlmoxarifado.id).then(function(result) { | |
142 | + if (result.saidas) { | |
143 | + $scope.bloquearDataContabil = true; | |
144 | + } else { | |
145 | + $scope.bloquearDataContabil = false; | |
146 | + } | |
147 | + }); | |
133 | 148 | }; |
134 | 149 | |
135 | 150 | $scope.findAutoCompleteAlmoxarifado = function(value){ |
... | ... | @@ -390,10 +405,28 @@ citApp.controller('EntradaAlmoxarifadoController', ['$scope', '$filter', 'FileUp |
390 | 405 | $scope.valorTotalMateriais = converterMoedaToNumber(entradaItem.valorTotal) + $scope.valorTotalMateriais; |
391 | 406 | }); |
392 | 407 | }; |
408 | + | |
409 | + $scope.saveOrUpdateContabilizar = function(contabilizar) { | |
410 | + | |
411 | + $scope.entradaAlmoxarifado.isEntradaConcluida = true; | |
412 | + $scope.entradaAlmoxarifadoOriginal.isEntradaConcluida = true; | |
413 | + | |
414 | + if (contabilizar) { | |
415 | + $scope.dataContabilFinal = $scope.entradaAlmoxarifado.dataContabil; | |
416 | + $scope.dataContabilFinalBloqueada = $scope.entradaAlmoxarifado.dataContabil; | |
417 | + $scope.$openModal('modal-contabilizar-entrada.html', 'lg'); | |
418 | + } else { | |
419 | + $scope.saveOrUpdate(null); | |
420 | + } | |
421 | + }; | |
393 | 422 | |
394 | 423 | // SALVA O EntradaAlmoxarifado |
395 | - $scope.saveOrUpdate = function(){ | |
424 | + $scope.saveOrUpdate = function(dataContabil){ | |
396 | 425 | $scope.entradaAlmoxarifadoForm.$submitted = true; |
426 | + $scope.entradaAlmoxarifadoForm.dadosEntradaForm.$submitted = true; | |
427 | + $scope.entradaAlmoxarifadoForm.materiaisForm.$submitted = true; | |
428 | + $scope.entradaAlmoxarifadoForm.documentosForm.$submitted = true; | |
429 | + $scope.entradaAlmoxarifadoForm.observacoesForm.$submitted = true; | |
397 | 430 | |
398 | 431 | // validar o formulario, retorna true se o formulario e as regras estiverem OK |
399 | 432 | var formularioValido = validarFormulario($scope.entradaAlmoxarifadoForm); |
... | ... | @@ -418,15 +451,69 @@ citApp.controller('EntradaAlmoxarifadoController', ['$scope', '$filter', 'FileUp |
418 | 451 | |
419 | 452 | EntradaAlmoxarifadoRepository.save($scope.entradaAlmoxarifado).then(function(result) { |
420 | 453 | $scope.entradaAlmoxarifado = result.originalElement; |
454 | + | |
455 | + if ($scope.entradaAlmoxarifado.fornecedor) { | |
456 | + $scope.entradaAlmoxarifado.fornecedor['pessoa.nome'] = $scope.entradaAlmoxarifado.fornecedor.pessoa.nome; | |
457 | + } | |
458 | + | |
421 | 459 | $scope.showAlert("success", $translate.instant('MSG.REGISTRO_SALVO')); |
422 | 460 | |
423 | 461 | // depois de salvar a entrada ja tendo uma referencia do id, esse metodo ira salvar os documentos se existir |
424 | 462 | salvarListaDocumentos(entradaTemp); |
425 | - $scope.resetForm(); | |
426 | 463 | $scope.setLoading(false); |
464 | + | |
465 | + var dataContabilAntiga = angular.copy($scope.entradaAlmoxarifado.dataContabil); | |
466 | + | |
467 | + $scope.setLoadingSalva(true); | |
468 | + | |
469 | + if (dataContabilAntiga && !dataContabil) { | |
470 | + MovimentoEstoqueRepository.buscarMovimentosSaidaComMateriaisDaEntrada($scope.entradaAlmoxarifado.id).then(function(result) { | |
471 | + if (result.saidas) { | |
472 | + $scope.setLoading(false); | |
473 | + $scope.showAlert('warning', $translate.instant('ALMOXARIFADO.VALIDACAO.ENTRADA_DESCONTABILIZACAO_COM_SAIDAS') + result.saidas); | |
474 | + } else { | |
475 | + concluir(dataContabil); | |
476 | + } | |
477 | + }); | |
478 | + } else { | |
479 | + concluir(dataContabil); | |
480 | + } | |
427 | 481 | }); |
428 | 482 | } |
429 | 483 | }; |
484 | + | |
485 | + var concluir = function(dataContabil) { | |
486 | + var dataContabilAntiga = angular.copy($scope.entradaAlmoxarifado.dataContabil); | |
487 | + var error = true; | |
488 | + $scope.entradaAlmoxarifado.dataContabil = dataContabil; | |
489 | + | |
490 | + $scope.entradaAlmoxarifado.valorTotalNota = converterMoedaToNumber($scope.entradaAlmoxarifado.valorTotalNota); | |
491 | + | |
492 | + EntradaAlmoxarifadoRepository.concluir($scope.entradaAlmoxarifado).then(function(result) { | |
493 | + $scope.resetForm(); | |
494 | + error = false; | |
495 | + $scope.entradaAlmoxarifado = result.originalElement; | |
496 | + $scope.entradaAlmoxarifado.dataRecebimento = $filter('date')($scope.entradaAlmoxarifado.dataRecebimento, "dd/MM/yyyy"); | |
497 | + $scope.entradaAlmoxarifado.dataContabil = $filter('date')($scope.entradaAlmoxarifado.dataContabil, "dd/MM/yyyy"); | |
498 | + $scope.entradaAlmoxarifado.dataReferencia = $filter('date')($scope.entradaAlmoxarifado.dataReferencia, "dd/MM/yyyy"); | |
499 | + if ($scope.entradaAlmoxarifado.fornecedor) { | |
500 | + $scope.entradaAlmoxarifado.fornecedor['pessoa.nome'] = $scope.entradaAlmoxarifado.fornecedor.pessoa.nome; | |
501 | + } | |
502 | + $scope.setLoading(false); | |
503 | + if (dataContabil) { | |
504 | + $scope.showAlert("success", $translate.instant('ALMOXARIFADO.MSG.ENTRADA_CONTABILIZADA')); | |
505 | + $scope.contabilizado = true; | |
506 | + } else { | |
507 | + $scope.showAlert("success", $translate.instant('ALMOXARIFADO.MSG.ENTRADA_DESCONTABILIZADA')); | |
508 | + } | |
509 | + }); | |
510 | + | |
511 | + $timeout(function() { | |
512 | + if (error) { | |
513 | + $scope.entradaAlmoxarifado.dataContabil = dataContabilAntiga; | |
514 | + } | |
515 | + }, 1000); | |
516 | + }; | |
430 | 517 | |
431 | 518 | // metodo utilizado para percorrer a lista de documentos persistidos e verificar com a lista de documentos temporarios para verificacao de qual anexo pertence a qual documento |
432 | 519 | var salvarListaDocumentos = function(entradaTemp){ |
... | ... | @@ -655,7 +742,7 @@ citApp.controller('EntradaAlmoxarifadoController', ['$scope', '$filter', 'FileUp |
655 | 742 | $scope.enderecosMaterial = []; |
656 | 743 | } |
657 | 744 | |
658 | - if ($scope.entradaItem.material) { | |
745 | + if ($scope.entradaItem && $scope.entradaItem.material) { | |
659 | 746 | $scope.unidadesMedidasEntrada = $scope.entradaItem.material.tiposUnidadeMedidaEntrada.map(function(item){ |
660 | 747 | if (item.isPadrao && !$scope.entradaItem.unidadeMedidaEntrada) { |
661 | 748 | $scope.entradaItem.unidadeMedidaEntrada = item.unidadeMedida; |
... | ... | @@ -680,15 +767,17 @@ citApp.controller('EntradaAlmoxarifadoController', ['$scope', '$filter', 'FileUp |
680 | 767 | //Watch para controlar as mudanças da quantidade na entrada de materiais |
681 | 768 | $scope.$watch('entradaItem.$quantidadeEntrada', function() { |
682 | 769 | $timeout(function(){ |
683 | - if($scope.entradaItem.$quantidadeEntrada && $scope.entradaItem.unidadeMedidaEntrada){ | |
684 | - $scope.entradaItem.quantidade = $scope.entradaItem.$quantidadeEntrada * $scope.entradaItem.unidadeMedidaEntrada.quantidadePadrao; | |
685 | - } else { | |
686 | - delete $scope.entradaItem.quantidade; | |
687 | - } | |
688 | - if($scope.entradaItem.quantidade && $scope.entradaItem.valorTotal){ | |
689 | - $scope.entradaItem.valorUnitario = $scope.entradaItem.valorTotal / $scope.entradaItem.quantidade; | |
690 | - } else { | |
691 | - delete $scope.entradaItem.valorUnitario; | |
770 | + if ($scope.entradaItem) { | |
771 | + if($scope.entradaItem.$quantidadeEntrada && $scope.entradaItem.unidadeMedidaEntrada){ | |
772 | + $scope.entradaItem.quantidade = $scope.entradaItem.$quantidadeEntrada * $scope.entradaItem.unidadeMedidaEntrada.quantidadePadrao; | |
773 | + } else { | |
774 | + delete $scope.entradaItem.quantidade; | |
775 | + } | |
776 | + if($scope.entradaItem.quantidade && $scope.entradaItem.valorTotal){ | |
777 | + $scope.entradaItem.valorUnitario = $scope.entradaItem.valorTotal / $scope.entradaItem.quantidade; | |
778 | + } else { | |
779 | + delete $scope.entradaItem.valorUnitario; | |
780 | + } | |
692 | 781 | } |
693 | 782 | }); |
694 | 783 | }); |
... | ... | @@ -696,10 +785,12 @@ citApp.controller('EntradaAlmoxarifadoController', ['$scope', '$filter', 'FileUp |
696 | 785 | //Watch para controlar as mudanças da unidade de medida na entrada de materiais |
697 | 786 | $scope.$watch('entradaItem.unidadeMedidaEntrada', function() { |
698 | 787 | $timeout(function(){ |
699 | - if($scope.entradaItem.$quantidadeEntrada && $scope.entradaItem.unidadeMedidaEntrada){ | |
700 | - $scope.entradaItem.quantidade = $scope.entradaItem.$quantidadeEntrada * $scope.entradaItem.unidadeMedidaEntrada.quantidadePadrao; | |
701 | - } else { | |
702 | - delete $scope.entradaItem.quantidade; | |
788 | + if ($scope.entradaItem) { | |
789 | + if($scope.entradaItem.$quantidadeEntrada && $scope.entradaItem.unidadeMedidaEntrada){ | |
790 | + $scope.entradaItem.quantidade = $scope.entradaItem.$quantidadeEntrada * $scope.entradaItem.unidadeMedidaEntrada.quantidadePadrao; | |
791 | + } else { | |
792 | + delete $scope.entradaItem.quantidade; | |
793 | + } | |
703 | 794 | } |
704 | 795 | }); |
705 | 796 | }); |
... | ... | @@ -707,10 +798,12 @@ citApp.controller('EntradaAlmoxarifadoController', ['$scope', '$filter', 'FileUp |
707 | 798 | //Watch para controlar as mudanças do valor total da entrada de materiais |
708 | 799 | $scope.$watch('entradaItem.valorTotal', function() { |
709 | 800 | $timeout(function(){ |
710 | - if($scope.entradaItem.quantidade && $scope.entradaItem.valorTotal){ | |
711 | - $scope.entradaItem.valorUnitario = $scope.entradaItem.valorTotal / $scope.entradaItem.quantidade; | |
712 | - } else { | |
713 | - delete $scope.entradaItem.valorUnitario; | |
801 | + if ($scope.entradaItem) { | |
802 | + if($scope.entradaItem.quantidade && $scope.entradaItem.valorTotal){ | |
803 | + $scope.entradaItem.valorUnitario = $scope.entradaItem.valorTotal / $scope.entradaItem.quantidade; | |
804 | + } else { | |
805 | + delete $scope.entradaItem.valorUnitario; | |
806 | + } | |
714 | 807 | } |
715 | 808 | }); |
716 | 809 | }); | ... | ... |
cit-almoxarifado-web/src/main/webapp/assets/js/angular/custom/repository/EntradaAlmoxarifadoRepository.js
... | ... | @@ -4,6 +4,10 @@ citApp.factory('EntradaAlmoxarifadoRepository', ['RestangularAlmoxarifado', 'Abs |
4 | 4 | |
5 | 5 | function EntradaAlmoxarifadoRepository() { |
6 | 6 | AbstractRepository.call(this, restangularAlmoxarifado, 'rest/entradaAlmoxarifado'); |
7 | + | |
8 | + this.concluir = function(entrada) { | |
9 | + return restangularAlmoxarifado.all(this.route + '/concluir').post(entrada); | |
10 | + }; | |
7 | 11 | } |
8 | 12 | |
9 | 13 | AbstractRepository.extend(EntradaAlmoxarifadoRepository); | ... | ... |
cit-almoxarifado-web/src/main/webapp/html/entradaAlmoxarifado/dialog_contabilizar_entrada.html
0 → 100644
... | ... | @@ -0,0 +1,35 @@ |
1 | +<ng-form name="formContabilizacao" autocomplete="off"> | |
2 | + <div class="modal-header"> | |
3 | + <button class="btn btn-clear" type="button" ng-click="contabilizar(formContabilizacao, dataContabilFinal);"> | |
4 | + <i class="fa fa-save green"></i> | |
5 | + <translate>ALMOXARIFADO.LABEL.CONCLUIR_E_CONTABILIZAR_ENTRADA</translate> | |
6 | + </button> | |
7 | + | |
8 | + <button title="{{$translate.instant('LABEL.CANCELAR')}}" alt="{{$translate.instant('LABEL.CANCELAR')}}" ng-click="$dismiss('cancel');" class="btn btn-clear" type="button"> | |
9 | + <i class="fa fa-times red"></i> | |
10 | + <translate>LABEL.CANCELAR</translate> | |
11 | + </button> | |
12 | + </div> | |
13 | + | |
14 | + <div class="modal-body"> | |
15 | + <fieldset> | |
16 | + <div class="scrollbar-inner"> | |
17 | + <legend style="font-size: 20px"> | |
18 | + <translate>LABEL.DATA_CONTABILIZACAO</translate> | |
19 | + </legend> | |
20 | + <fieldset> | |
21 | + <div class="row"> | |
22 | + <div ng-if="bloquearDataContabil" class="col-sm-4"> | |
23 | + <label-input-data ng-id="entrada.dataContabil" ng-obrigatorio="true" ng-model="dataContabilFinalBloqueada" ng-label="LABEL.DATA_CONTABILIZACAO" | |
24 | + ng-disabled="bloquearDataContabil" ng-form="formContabilizacao" label-info-tooltip="{{$translate.instant('ALMOXARIFADO.VALIDACAO.DATA_CONTABIL_ALTERADA_SAIDAS')}}"/> | |
25 | + </div> | |
26 | + <div ng-show="!bloquearDataContabil" class="col-sm-4"> | |
27 | + <label-input-data ng-id="dataContabilFinal" ng-obrigatorio="true" ng-model="dataContabilFinal" ng-label="LABEL.DATA_CONTABILIZACAO" ng-disabled="bloquearDataContabil" | |
28 | + ng-form="formContabilizacao" /> | |
29 | + </div> | |
30 | + </div> | |
31 | + </fieldset> | |
32 | + </div> | |
33 | + </fieldset> | |
34 | + </div> | |
35 | +</ng-form> | ... | ... |
cit-almoxarifado-web/src/main/webapp/html/entradaAlmoxarifado/entradaAlmoxarifadoEdit.html
... | ... | @@ -2,10 +2,25 @@ |
2 | 2 | <div class="bar-buttons-action fixed" > |
3 | 3 | <div class="row"> |
4 | 4 | <div class="col-sm-9 text-left"> |
5 | - <button title="{{$translate.instant('LABEL.SALVAR')}}" alt="{{$translate.instant('LABEL.SALVAR')}}" class="btn btn-clear" ng-click="saveOrUpdate()" ng-if="edit" type="button"> | |
6 | - <i class="fa fa-save green"></i> <translate>LABEL.SALVAR</translate> | |
7 | - </button> | |
8 | - <button title="{{$translate.instant('LABEL.LIMPAR')}}" alt="{{$translate.instant('LABEL.LIMPAR')}}" class="btn btn-clear" type="button" ng-show="entradaAlmoxarifado.id === undefined" ng-click="resetForm();" > | |
5 | + <div ng-show="edit" class="btn-group dropdown" role="group" dropdown> | |
6 | + <button class="btn btn-clear" ng-if="edit" title="{{$translate.instant('ALMOXARIFADO.LABEL.CONCLUIR_ENTRADA')}}" | |
7 | + alt="{{$translate.instant('ALMOXARIFADO.LABEL.CONCLUIR_ENTRADA')}}" dropdown-toggle type="button"> | |
8 | + <i class="fa fa-save green"></i> <translate>ALMOXARIFADO.LABEL.CONCLUIR_ENTRADA</translate><span class="fa fa-caret-down icon-on-right"></span> | |
9 | + </button> | |
10 | + <ul class="dropdown-menu-center dropdown-menu dropdown-caret" role="menu"> | |
11 | + <li ng-show="entradaAlmoxarifado.dataContabil === null"> | |
12 | + <a href="#void" ng-click="saveOrUpdateContabilizar(false)" ><i class="fa fa-save orange"></i> <translate>ALMOXARIFADO.LABEL.CONCLUIR_ENTRADA_BTN</translate></a> | |
13 | + </li> | |
14 | + <li> | |
15 | + <a href="#void" ng-click="saveOrUpdateContabilizar(true)" ><i class="fa fa-save green"></i> <translate>ALMOXARIFADO.LABEL.CONCLUIR_E_CONTABILIZAR_ENTRADA</translate></a> | |
16 | + </li> | |
17 | + <li ng-show="entradaAlmoxarifado.dataContabil !== null"> | |
18 | + <a href="#void" ng-click="saveOrUpdateContabilizar(false)" ><i class="fa fa-save orange"></i> <translate>ALMOXARIFADO.LABEL.CONCLUIR_E_DESCONTABILIZAR_ENTRADA</translate></a> | |
19 | + </li> | |
20 | + </ul> | |
21 | + </div> | |
22 | + <button title="{{$translate.instant('LABEL.LIMPAR')}}" alt="{{$translate.instant('LABEL.LIMPAR')}}" class="btn btn-clear" type="button" ng-show="entradaAlmoxarifado.id === undefined" | |
23 | + ng-click="resetForm();" > | |
9 | 24 | <i class="fa fa-eraser yellow-dark"></i> <translate>LABEL.LIMPAR</translate> |
10 | 25 | </button> |
11 | 26 | <button |
... | ... | @@ -16,7 +31,8 @@ |
16 | 31 | <i class="fa fa-print"></i> |
17 | 32 | <translate>LABEL.GERAR_RELATORIO</translate> |
18 | 33 | </button> |
19 | - <button title="{{$translate.instant('LABEL.PESQUISAR')}}" alt="{{$translate.instant('LABEL.PESQUISAR')}}" class="btn btn-clear" type="button" ng-click="$showPageSearchWorkspace(workspace); atualizarLista('EntradaAlmoxarifadoListControllerId');"> | |
34 | + <button title="{{$translate.instant('LABEL.PESQUISAR')}}" alt="{{$translate.instant('LABEL.PESQUISAR')}}" class="btn btn-clear" type="button" | |
35 | + ng-click="$showPageSearchWorkspace(workspace); atualizarLista('searchEntradaAlmoxarifado');"> | |
20 | 36 | <i class="fa fa-search"></i> <translate>LABEL.PESQUISAR</translate> |
21 | 37 | </button> |
22 | 38 | </div> |
... | ... | @@ -34,6 +50,10 @@ |
34 | 50 | <!-- .row --> |
35 | 51 | </div> |
36 | 52 | |
53 | + <script type="text/ng-template" id="modal-contabilizar-entrada.html"> | |
54 | + <div ng-include src="'/cit-almoxarifado-web/html/entrada/dialog_contabilizar_entrada.html'" /> | |
55 | + </script> | |
56 | + | |
37 | 57 | <breadcrumb ng-workspace="workspace"></breadcrumb> |
38 | 58 | |
39 | 59 | <p> | ... | ... |
cit-almoxarifado-web/src/main/webapp/html/entradaAlmoxarifado/entradaAlmoxarifadoList.html
... | ... | @@ -14,6 +14,11 @@ |
14 | 14 | <translate>LABEL.VISUALIZAR</translate> |
15 | 15 | </button> |
16 | 16 | |
17 | + <button title="{{$translate.instant('LABEL.EDITAR')}}" alt="{{$translate.instant('LABEL.EDITAR')}}" class="btn btn-clear" ng-click="abrirVisualizar(true);" type="button"> | |
18 | + <i class="fa fa-pencil blue"></i> | |
19 | + <translate>LABEL.EDITAR</translate> | |
20 | + </button> | |
21 | + | |
17 | 22 | <button class="btn btn-clear" ng-click="remove();"> |
18 | 23 | <i class="fa fa-times red"></i> |
19 | 24 | <translate>LABEL.REMOVER</translate> |
... | ... | @@ -43,6 +48,6 @@ |
43 | 48 | |
44 | 49 | <breadcrumb ng-workspace="workspace"></breadcrumb> |
45 | 50 | |
46 | - <list-view ng-lista="entradaAlmoxarifadoList" ng-repository="EntradaAlmoxarifadoRepository" ng-use-custom-remove="false" ng-headers="headers" ng-filter-criteria="filterCriteria" ng-item-selecionado="entradaAlmoxarifadoChecked"></list-view> | |
47 | - | |
51 | + <list-view ng-lista="entradaAlmoxarifadoList" ng-repository="EntradaAlmoxarifadoRepository" ng-use-custom-remove="false" ng-headers="headers" ng-filter-criteria="filterCriteria" | |
52 | + ng-item-selecionado="entradaAlmoxarifadoChecked"></list-view> | |
48 | 53 | </div><!-- .page-content --> | ... | ... |