/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.rjconsultores.ventaboletos.service.impl; import java.util.Calendar; import java.util.List; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.zkoss.util.resource.Labels; import com.rjconsultores.ventaboletos.dao.EstacionDAO; import com.rjconsultores.ventaboletos.entidad.Estacion; import com.rjconsultores.ventaboletos.entidad.EstacionImpresora; import com.rjconsultores.ventaboletos.entidad.EstacionSitef; import com.rjconsultores.ventaboletos.entidad.PuntoVenta; import com.rjconsultores.ventaboletos.enums.TipoImpressora; import com.rjconsultores.ventaboletos.exception.BusinessException; import com.rjconsultores.ventaboletos.service.AutorizaFolioService; import com.rjconsultores.ventaboletos.service.EstacionService; import com.rjconsultores.ventaboletos.utilerias.ApplicationProperties; import com.rjconsultores.ventaboletos.utilerias.CustomEnum; import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado; /** * * @author Administrador */ @Service("estacionService") public class EstacionServiceImpl implements EstacionService { @Autowired private EstacionDAO estacionDAO; @Autowired private AutorizaFolioService autorizaFolioService; public List obtenerTodos() { return estacionDAO.obtenerTodos(); } public Estacion obtenerID(Integer id) { return estacionDAO.obtenerID(id); } @Transactional(rollbackFor = BusinessException.class) public Estacion suscribirActualizar(Estacion estacion) throws BusinessException { validarEstoqueUpdate(estacion); if (estacion.getDescmac() != null && !estacion.getDescmac().isEmpty()) validarDuplicidade(estacionDAO.buscarEstacionDuplicadaPorMAC(estacion.getDescmac(), estacion.getEstacionId())); if (estacion.getImei() != null && !estacion.getImei().isEmpty()) validarDuplicidade(estacionDAO.buscarEstacionDuplicadaPorIMEI(estacion.getImei(), estacion.getEstacionId())); boolean esCajaDuplicado = false; List lsEstacion = estacionDAO.buscar(estacion.getNumcaja(), estacion.getPuntoVenta()); if (!lsEstacion.isEmpty()) { if (estacion.getEstacionId() == null) { esCajaDuplicado = true; } else { esCajaDuplicado = !lsEstacion.get(0).getEstacionId().equals(estacion.getEstacionId()); } } if (esCajaDuplicado) { throw new BusinessException("estacionServiceImpl.msg.cajaDuplicado"); } estacion.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId()); estacion.setFecmodif(Calendar.getInstance().getTime()); estacion.setActivo(Boolean.TRUE); boolean isNuevaFiscal = validacionNuevaImpressoraFiscal(estacion); if (estacion.getEstacionId() == null) { estacion = estacionDAO.suscribir(estacion); } else { estacion = estacionDAO.actualizacion(estacion); } String errorNoChequeFolio = null; for (EstacionImpresora ei : estacion.getLsEstacionImpresora()) { boolean isImpressoraFiscal = validacionImpressoraFiscal(ei); if (ApplicationProperties.getInstance().isCustomHabilitado(CustomEnum.GENERAR_ROTINA_FOLIOS.getDescricao())) { errorNoChequeFolio = autorizaFolioService.noChequeFolioPreimpresos(ei, false); } else if ((isImpressoraFiscal && isNuevaFiscal) || (estacion.getIndStockCentral() != null && estacion.getIndStockCentral() && isImpressoraFiscal)) { errorNoChequeFolio = autorizaFolioService.noChequeFolioPreimpresos(ei, true); } } if (StringUtils.isNotBlank(errorNoChequeFolio)) { throw new BusinessException(errorNoChequeFolio); } return estacion; } private void validarDuplicidade(Estacion estacionValidacao) throws BusinessException { Boolean esMacDuplicado = Boolean.FALSE; String nomeEstacao = ""; Long numeroCaixa = 0l; if (estacionValidacao != null) { nomeEstacao = estacionValidacao.getDescestacion(); numeroCaixa = estacionValidacao.getNumcaja(); esMacDuplicado = Boolean.TRUE; } if (esMacDuplicado) { StringBuilder msg = new StringBuilder(); msg.append( Labels.getLabel("estacionServiceImpl.msg.macDuplicado") ); msg.append( "\n" ); msg.append( Labels.getLabel("estacionServiceImpl.msg.macDuplicado.descricaoEstacao") ); msg.append( nomeEstacao ); msg.append( "\n" ); msg.append( Labels.getLabel("estacionServiceImpl.msg.macDuplicado.numeroCaixa") ); msg.append( numeroCaixa.toString() ); throw new BusinessException( msg.toString()); } } private boolean validacionNuevaImpressoraFiscal(final Estacion e) { for (EstacionImpresora ei : e.getLsEstacionImpresora()) { if(TipoImpressora.getTipoImpressoraFiscal(ei.getTipoImpressora())!=null && ei.getEstacionImpresoraId() == null){ return true; } } return false; } private boolean validacionImpressoraFiscal(final EstacionImpresora ei) { if(TipoImpressora.getTipoImpressoraFiscal(ei.getTipoImpressora())!=null){ return true; }else{ return false; } } @Override public void devolverFoliosAutomaticosImpressoraFiscal(final EstacionImpresora ei) { if(TipoImpressora.getTipoImpressoraFiscal(ei.getTipoImpressora())!=null){ autorizaFolioService.devolverFoliosAutomaticosImpressoraFiscal(ei); } } private void validarEstoqueUpdate(Estacion estacion) throws BusinessException { if (estacion.getEstacionId() == null) { return; } if (!ApplicationProperties.getInstance().isCustomHabilitado(CustomEnum.GENERAR_ROTINA_FOLIOS.getDescricao())) { Estacion estacionPuntoVentaAnterior = estacionDAO.obtenerID(estacion.getEstacionId()); if (estacionPuntoVentaAnterior.getPuntoVenta() != null) if (!estacionPuntoVentaAnterior.getPuntoVenta().equals(estacion.getPuntoVenta())) { if (estacionDAO.temEstoque(estacionPuntoVentaAnterior.getPuntoVenta(), estacion)) { throw new BusinessException("estacionServiceImpl.msg.hayStock"); } } } } private void validarEstoqueBorrar(Estacion estacion) throws BusinessException { if (!ApplicationProperties.getInstance().isCustomHabilitado(CustomEnum.GENERAR_ROTINA_FOLIOS.getDescricao())) { if (estacionDAO.temEstoque(estacion.getPuntoVenta(), estacion)) { throw new BusinessException("estacionServiceImpl.msg.hayStock.borrar"); } } } @Transactional public void borrar(Estacion entidad) throws BusinessException { validarEstoqueBorrar(entidad); entidad.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId()); entidad.setFecmodif(Calendar.getInstance().getTime()); entidad.setActivo(Boolean.FALSE); if (entidad.getEstacionSitefList() != null) { for (EstacionSitef es : entidad.getEstacionSitefList()) { es.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId()); es.setFecmodif(Calendar.getInstance().getTime()); es.setActivo(Boolean.FALSE); } } estacionDAO.actualizacion(entidad); } public List buscar(String descEstacion, String descMac, Long nunCaja, PuntoVenta pv) { return estacionDAO.buscar(descEstacion, descMac, nunCaja, pv); } public List buscar(String descMac) { return estacionDAO.buscar(descMac); } public Estacion buscarPorIMEI(String imei) { return estacionDAO.buscarPorIMEI(imei); } @Override public Long getDecimalMAC(String mac) { mac = mac.trim(); mac = mac.replace("-", ""); return Long.parseLong(mac, 16); } @Override public List buscarEstaciones(PuntoVenta puntoVenta) { List estaciones = estacionDAO.buscarEstaciones(puntoVenta); return estaciones; } @Override public List buscarEstaciones(List lsPuntoVenta) { return estacionDAO.buscarEstaciones(lsPuntoVenta); } @Override public List buscarEstacionesStockCentral(PuntoVenta puntoVenta) { List estaciones = estacionDAO.buscarEstacionesStockCentral(puntoVenta); return estaciones; } }