Commit 11abffc18a3f87188a022995580302cf4fce235d
1 parent
6ebbdd8b
Exists in
master
[Redmine Atendimento #4377] Correção Notificacao
Showing
2 changed files
with
100 additions
and
31 deletions
Show diff stats
cit-almoxarifado-api/src/main/java/br/com/centralit/api/job/NotificacaoRessuprimentoJob.java
1 | 1 | package br.com.centralit.api.job; |
2 | 2 | |
3 | 3 | import java.math.BigDecimal; |
4 | +import java.util.Arrays; | |
4 | 5 | import java.util.Collection; |
6 | +import java.util.List; | |
5 | 7 | |
6 | 8 | import org.apache.commons.logging.Log; |
7 | 9 | import org.apache.commons.logging.LogFactory; |
... | ... | @@ -10,6 +12,8 @@ import org.quartz.JobExecutionContext; |
10 | 12 | import org.quartz.JobExecutionException; |
11 | 13 | import org.quartz.SchedulerException; |
12 | 14 | |
15 | +import com.googlecode.genericdao.search.Field; | |
16 | + | |
13 | 17 | import br.com.centralit.api.model.ConfiguracaoNotificacaoRessuprimento; |
14 | 18 | import br.com.centralit.api.model.ConfiguracaoNotificacaoRessuprimentoGrupo; |
15 | 19 | import br.com.centralit.api.model.ConfiguracaoNotificacaoRessuprimentoUsuario; |
... | ... | @@ -19,9 +23,13 @@ import br.com.centralit.api.service.ConfiguracaoNotificacaoRessuprimentoUsuarioS |
19 | 23 | import br.com.centralit.api.service.MaterialConsumoService; |
20 | 24 | import br.com.centralit.api.service.NotificacaoUsuarioService; |
21 | 25 | import br.com.centralit.api.service.impl.NotificacaoGrupoService; |
26 | +import br.com.centralit.framework.dao.arquitetura.SearchSeven; | |
22 | 27 | import br.com.centralit.framework.mail.HTMLMail; |
28 | +import br.com.centralit.framework.model.Filter; | |
23 | 29 | import br.com.centralit.framework.model.NotificacaoGrupo; |
24 | 30 | import br.com.centralit.framework.model.NotificacaoUsuario; |
31 | +import br.com.centralit.framework.model.SearchParams; | |
32 | +import br.com.centralit.framework.util.ConstantsQuery; | |
25 | 33 | import br.com.centralit.framework.util.UtilColecao; |
26 | 34 | import br.com.centralit.framework.util.UtilObjeto; |
27 | 35 | |
... | ... | @@ -153,16 +161,42 @@ public class NotificacaoRessuprimentoJob implements Job { |
153 | 161 | |
154 | 162 | final Collection<ConfiguracaoNotificacaoRessuprimentoUsuario> listaUsuarios = this.configuracaoUsuarioService.findPorIdConfiguracaoNotificacao(configuracao.getId()); |
155 | 163 | |
164 | + String emailDestinatario = ""; | |
165 | + String nomeDestinatario = ""; | |
166 | + String mensagem = ""; | |
167 | + | |
156 | 168 | if (!UtilColecao.isVazio(listaGrupos)) { |
157 | 169 | |
158 | 170 | for (final ConfiguracaoNotificacaoRessuprimentoGrupo configuracaoGrupo : listaGrupos) { |
159 | 171 | |
160 | - final NotificacaoGrupo notificacaoGrupo = new NotificacaoGrupo(configuracaoGrupo.getGrupo(), configuracao.getNotificacao()); | |
172 | + NotificacaoGrupo notificacaoGrupo = null; | |
173 | + | |
174 | + SearchParams params = new SearchParams(); | |
175 | + params.setFilters(Arrays.asList(new Filter[]{new Filter("notificacao.id", ConstantsQuery.TYPE_NUMERIC, configuracao.getNotificacao().getId().toString(), ConstantsQuery.COMPARE_EQUALS)})); | |
176 | + params.setStart(0); | |
177 | + params.setLimit(Integer.MAX_VALUE); | |
178 | + | |
179 | + params.setFields(Arrays.asList(new String[]{"grupo.email", "grupo.nome", "notificacao.mensagem"})); | |
161 | 180 | |
162 | - this.notificacaoGrupoService.save(notificacaoGrupo); | |
181 | + List<Object> search = this.notificacaoGrupoService.search(new SearchSeven(params)); | |
182 | + | |
183 | + if(UtilColecao.isVazio(search)){ | |
184 | + notificacaoGrupo = new NotificacaoGrupo(configuracaoGrupo.getGrupo(), configuracao.getNotificacao()); | |
185 | + this.notificacaoGrupoService.save(notificacaoGrupo); | |
186 | + | |
187 | + emailDestinatario = notificacaoGrupo.getGrupo().getEmail(); | |
188 | + nomeDestinatario = notificacaoGrupo.getGrupo().getNome(); | |
189 | + mensagem = notificacaoGrupo.getNotificacao().getMensagem(); | |
190 | + | |
191 | + }else{ | |
192 | + Object[] values = (Object[]) search.get(0); | |
193 | + emailDestinatario = (String) values[0]; | |
194 | + nomeDestinatario = (String) values[1]; | |
195 | + mensagem = (String) values[2]; | |
196 | + } | |
163 | 197 | |
164 | 198 | if(HTMLMail.permiteEnvioEmail){ |
165 | - this.notificacaoUsuarioService.sendNotificacaoEmailGrupo(notificacaoGrupo); | |
199 | + this.notificacaoUsuarioService.sendNotificacaoEmailGrupo(emailDestinatario, nomeDestinatario, mensagem); | |
166 | 200 | } |
167 | 201 | |
168 | 202 | NotificacaoRessuprimentoJob.logger.info("Inclusão da Notificação para o grupo: " + configuracaoGrupo.getGrupo().getNome()); |
... | ... | @@ -174,12 +208,32 @@ public class NotificacaoRessuprimentoJob implements Job { |
174 | 208 | |
175 | 209 | for (final ConfiguracaoNotificacaoRessuprimentoUsuario configuracaoUsuario : listaUsuarios) { |
176 | 210 | |
177 | - final NotificacaoUsuario notificacaoUsuario = new NotificacaoUsuario(configuracao.getNotificacao(), configuracaoUsuario.getUsuario()); | |
211 | + NotificacaoUsuario notificacaoUsuario = null; | |
178 | 212 | |
179 | - this.notificacaoUsuarioService.save(notificacaoUsuario); | |
213 | + SearchParams params = new SearchParams(); | |
214 | + params.setFilters(Arrays.asList(new Filter[]{new Filter("notificacao.id", ConstantsQuery.TYPE_NUMERIC, configuracao.getNotificacao().getId().toString(), ConstantsQuery.COMPARE_EQUALS)})); | |
215 | + params.setStart(0); | |
216 | + params.setLimit(Integer.MAX_VALUE); | |
217 | + params.setFields(Arrays.asList(new String[]{"usuario.email", "usuario.username", "notificacao.mensagem"})); | |
218 | + List<Object> search = this.notificacaoUsuarioService.search(new SearchSeven(params)); | |
219 | + | |
220 | + if(UtilColecao.isVazio(search)){ | |
221 | + notificacaoUsuario = new NotificacaoUsuario(configuracao.getNotificacao(), configuracaoUsuario.getUsuario()); | |
222 | + this.notificacaoUsuarioService.save(notificacaoUsuario); | |
223 | + | |
224 | + emailDestinatario = notificacaoUsuario.getUsuario().getEmail(); | |
225 | + nomeDestinatario = notificacaoUsuario.getUsuario().getUsername(); | |
226 | + mensagem = notificacaoUsuario.getNotificacao().getMensagem(); | |
227 | + | |
228 | + }else{ | |
229 | + Object[] values = (Object[]) search.get(0); | |
230 | + emailDestinatario = (String) values[0]; | |
231 | + nomeDestinatario = (String) values[1]; | |
232 | + mensagem = (String) values[2]; | |
233 | + } | |
180 | 234 | |
181 | 235 | if(HTMLMail.permiteEnvioEmail){ |
182 | - this.notificacaoUsuarioService.sendNotificacaoEmail(notificacaoUsuario); | |
236 | + this.notificacaoUsuarioService.sendNotificacaoEmailGrupo(emailDestinatario, nomeDestinatario, mensagem); | |
183 | 237 | } |
184 | 238 | |
185 | 239 | NotificacaoRessuprimentoJob.logger.info("Inclusão da Notificação para o usuario:" + configuracaoUsuario.getUsuario().getUsername()); |
... | ... | @@ -197,13 +251,13 @@ public class NotificacaoRessuprimentoJob implements Job { |
197 | 251 | * |
198 | 252 | * @param context |
199 | 253 | * @param configuracao |
200 | - * | |
254 | + * | |
201 | 255 | * @return {@link Boolean} |
202 | 256 | */ |
203 | 257 | private Boolean validarQtdAtualMaterial(JobExecutionContext context, ConfiguracaoNotificacaoRessuprimento configuracao) { |
204 | 258 | |
205 | 259 | BigDecimal qtdMaterialEstoque = BigDecimal.ZERO; |
206 | - | |
260 | + | |
207 | 261 | try { |
208 | 262 | urlScheme = (String) context.getScheduler().getContext().get("scheme"); |
209 | 263 | urlHost = (String) context.getScheduler().getContext().get("host"); |
... | ... | @@ -212,7 +266,7 @@ public class NotificacaoRessuprimentoJob implements Job { |
212 | 266 | } catch (SchedulerException e) { |
213 | 267 | e.printStackTrace(); |
214 | 268 | } |
215 | - | |
269 | + | |
216 | 270 | return qtdMaterialEstoque.compareTo(BigDecimal.ZERO) > 0 && qtdMaterialEstoque.compareTo(configuracao.getLimiteEstoque()) <= 0; |
217 | 271 | } |
218 | 272 | ... | ... |
cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/impl/BaixaAlmoxarifadoServiceImpl.java
... | ... | @@ -20,6 +20,7 @@ import br.com.centralit.api.service.ConfiguracaoParametroSistemaService; |
20 | 20 | import br.com.centralit.api.service.DominioService; |
21 | 21 | import br.com.centralit.api.service.EntradaAlmoxarifadoItemService; |
22 | 22 | import br.com.centralit.api.service.EstruturaOrganizacionalService; |
23 | +import br.com.centralit.api.service.InternacionalizacaoService; | |
23 | 24 | import br.com.centralit.api.service.MaterialConsumoService; |
24 | 25 | import br.com.centralit.api.service.MaterialEstoqueSaldoMedioService; |
25 | 26 | import br.com.centralit.api.service.MovimentoEstoqueService; |
... | ... | @@ -106,15 +107,20 @@ public class BaixaAlmoxarifadoServiceImpl extends GenericServiceImpl<BaixaAlmoxa |
106 | 107 | /** Atributo baixaAlmoxarifadoItemService. */ |
107 | 108 | @Autowired |
108 | 109 | private BaixaAlmoxarifadoItemService baixaAlmoxarifadoItemService; |
109 | - | |
110 | + | |
110 | 111 | @Autowired |
111 | - private EntradaAlmoxarifadoItemService entradaAlmoxarifadoItemService; | |
112 | - | |
112 | + private EntradaAlmoxarifadoItemService entradaAlmoxarifadoItemService; | |
113 | + | |
113 | 114 | @Autowired |
114 | 115 | private MaterialEstoqueSaldoMedioService materialEstoqueSaldoMedioService; |
115 | 116 | |
116 | 117 | @Autowired |
117 | - private ConfiguracaoParametroSistemaService configuracaoParametroSistemaService; | |
118 | + private ConfiguracaoParametroSistemaService configuracaoParametroSistemaService; | |
119 | + | |
120 | + @Autowired | |
121 | + private InternacionalizacaoService internacionalizacaoService; | |
122 | + | |
123 | + private Dominio idioma; | |
118 | 124 | |
119 | 125 | @Autowired |
120 | 126 | public BaixaAlmoxarifadoServiceImpl( final BaixaAlmoxarifadoDao baixaAlmoxarifadoDao, @Qualifier("baixaAlmoxarifadoValidator") final Validator validator ) { |
... | ... | @@ -132,12 +138,12 @@ public class BaixaAlmoxarifadoServiceImpl extends GenericServiceImpl<BaixaAlmoxa |
132 | 138 | this.montarObjetoBaixa(entity); |
133 | 139 | |
134 | 140 | entity = super.save(entity); |
135 | - | |
141 | + | |
136 | 142 | configurarNumeroBaixa(entity); |
137 | - | |
143 | + | |
138 | 144 | salvaTotaisBaixaItem(entity); |
139 | - | |
140 | - entity = super.save(entity); | |
145 | + | |
146 | + entity = super.save(entity); | |
141 | 147 | |
142 | 148 | //Esse metodo gera os movimentos no estoque no contabil |
143 | 149 | this.movimentoEstoqueService.gerarMovimentoBaixa(entity); |
... | ... | @@ -152,11 +158,9 @@ public class BaixaAlmoxarifadoServiceImpl extends GenericServiceImpl<BaixaAlmoxa |
152 | 158 | |
153 | 159 | this.montarObjetoBaixa(entity); |
154 | 160 | |
155 | - entity = super.merge(entity); | |
156 | - | |
157 | 161 | salvaTotaisBaixaItem(entity); |
158 | - | |
159 | - entity = super.merge(entity); | |
162 | + | |
163 | + entity = super.merge(entity); | |
160 | 164 | |
161 | 165 | this.movimentoEstoqueService.atualizarMovimentoBaixa(entity); |
162 | 166 | |
... | ... | @@ -257,11 +261,15 @@ public class BaixaAlmoxarifadoServiceImpl extends GenericServiceImpl<BaixaAlmoxa |
257 | 261 | this.validarQtdItemAlmoxarifado(baixaItem); |
258 | 262 | |
259 | 263 | baixaItem.setBaixaAlmoxarifado(baixa); |
260 | - | |
264 | + | |
261 | 265 | baixaItem.setMaterialConsumo(this.materialConsumoService.getReference(baixaItem.getMaterialConsumo().getId())); |
262 | 266 | } |
263 | 267 | } |
264 | 268 | |
269 | + if(UtilObjeto.isReferencia(baixa.getId()) && baixa.getOrganizacao() == null){ | |
270 | + baixa.setOrganizacao(this.find(baixa.getId()).getOrganizacao()); | |
271 | + } | |
272 | + | |
265 | 273 | } |
266 | 274 | |
267 | 275 | /** |
... | ... | @@ -289,23 +297,23 @@ public class BaixaAlmoxarifadoServiceImpl extends GenericServiceImpl<BaixaAlmoxa |
289 | 297 | |
290 | 298 | if (itemAtual.getQuantidade().add(baixaItem.getQtdEstoque()).compareTo(baixaItem.getQuantidade()) > 0) { |
291 | 299 | |
292 | - throw new BusinessException(BaixaAlmoxarifadoServiceImpl.VALIDACAO_QUANTIDADE_SUPERIOR_SALDO, CodigoErro.REGRA_NEGOCIO.getValue()); | |
300 | + throw new BusinessException(this.internacionalizacaoService.getTranslate(BaixaAlmoxarifadoServiceImpl.VALIDACAO_QUANTIDADE_SUPERIOR_SALDO, this.getIdioma()), CodigoErro.REGRA_NEGOCIO.getValue()); | |
293 | 301 | |
294 | 302 | } else { |
295 | 303 | if (baixaItem.getQuantidade().compareTo(itemAtual.getQuantidade().add(baixaItem.getQtdEstoque())) > 0) { |
296 | 304 | |
297 | - throw new BusinessException(BaixaAlmoxarifadoServiceImpl.VALIDACAO_QUANTIDADE_SUPERIOR_SALDO, CodigoErro.REGRA_NEGOCIO.getValue()); | |
305 | + throw new BusinessException(this.internacionalizacaoService.getTranslate(BaixaAlmoxarifadoServiceImpl.VALIDACAO_QUANTIDADE_SUPERIOR_SALDO, this.getIdioma()), CodigoErro.REGRA_NEGOCIO.getValue()); | |
298 | 306 | } |
299 | 307 | } |
300 | 308 | } else if (baixaItem.getQuantidade().compareTo(baixaItem.getQtdEstoque()) > 0 && baixaItem.getQuantidade().compareTo(itemAtual.getQuantidade().add(baixaItem.getQtdEstoque())) > 0) { |
301 | 309 | |
302 | - throw new BusinessException(BaixaAlmoxarifadoServiceImpl.VALIDACAO_QUANTIDADE_SUPERIOR_SALDO, CodigoErro.REGRA_NEGOCIO.getValue()); | |
310 | + throw new BusinessException(this.internacionalizacaoService.getTranslate(BaixaAlmoxarifadoServiceImpl.VALIDACAO_QUANTIDADE_SUPERIOR_SALDO, this.getIdioma()), CodigoErro.REGRA_NEGOCIO.getValue()); | |
303 | 311 | } |
304 | 312 | } else { |
305 | 313 | |
306 | 314 | if (baixaItem.getQuantidade().compareTo(baixaItem.getQtdEstoque()) > 0) { |
307 | 315 | |
308 | - throw new BusinessException(BaixaAlmoxarifadoServiceImpl.VALIDACAO_QUANTIDADE_SUPERIOR_SALDO, CodigoErro.REGRA_NEGOCIO.getValue()); | |
316 | + throw new BusinessException(this.internacionalizacaoService.getTranslate(BaixaAlmoxarifadoServiceImpl.VALIDACAO_QUANTIDADE_SUPERIOR_SALDO, this.getIdioma()), CodigoErro.REGRA_NEGOCIO.getValue()); | |
309 | 317 | } |
310 | 318 | } |
311 | 319 | } |
... | ... | @@ -407,15 +415,15 @@ public class BaixaAlmoxarifadoServiceImpl extends GenericServiceImpl<BaixaAlmoxa |
407 | 415 | |
408 | 416 | entity.setNumeroBaixa(codigo); |
409 | 417 | } |
410 | - | |
418 | + | |
411 | 419 | private void salvaTotaisBaixaItem(BaixaAlmoxarifado baixa){ |
412 | 420 | if (!UtilColecao.isVazio(baixa.getBaixaItens())) { |
413 | 421 | |
414 | 422 | // salva os totais na baixa conforme metodo de avalicao monetaria |
415 | - for (final BaixaAlmoxarifadoItem baixaItem : baixa.getBaixaItens()) { | |
416 | - | |
423 | + for (final BaixaAlmoxarifadoItem baixaItem : baixa.getBaixaItens()) { | |
424 | + | |
417 | 425 | String tipoAvaliacao = this.configuracaoParametroSistemaService.getParametro("TIPO_AVALIACAO_MONETARIA_ESTOQUE", baixa.getOrganizacao().getId()).getValor(); |
418 | - | |
426 | + | |
419 | 427 | if (tipoAvaliacao.equals(DominioAlmoxarifado.TIPO_AVALIACAO_MONETARIA_FIFO_NOME)){ |
420 | 428 | BigDecimal valorMovimentoFIFO = this.entradaAlmoxarifadoItemService.realizaMovimentoSaida(baixaItem.getMaterialConsumo(), baixaItem.getQuantidade()); |
421 | 429 | baixaItem.setTotal(valorMovimentoFIFO); |
... | ... | @@ -424,7 +432,14 @@ public class BaixaAlmoxarifadoServiceImpl extends GenericServiceImpl<BaixaAlmoxa |
424 | 432 | baixaItem.setTotal(valorMovimentoMediaMovel); |
425 | 433 | } |
426 | 434 | } |
427 | - } | |
435 | + } | |
436 | + } | |
437 | + | |
438 | + public Dominio getIdioma() { | |
439 | + if(!UtilObjeto.isReferencia(idioma)){ | |
440 | + idioma = this.dominioService.findByChaveAndCodigo("tipoIdioma", Dominio.TIPO_IDIOMA_PT_BR_CODIGO); | |
441 | + } | |
442 | + return idioma; | |
428 | 443 | } |
429 | 444 | |
430 | 445 | } | ... | ... |