package com.rjconsultores.ventaboletos.service.impl; import java.util.Calendar; import java.util.Date; import org.apache.commons.lang.math.NumberUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.rjconsultores.ventaboletos.entidad.AbastoBoleto; import com.rjconsultores.ventaboletos.entidad.Aidf; import com.rjconsultores.ventaboletos.entidad.Articulo; import com.rjconsultores.ventaboletos.entidad.Clasificacion; import com.rjconsultores.ventaboletos.entidad.DetAbastoBoleto; import com.rjconsultores.ventaboletos.entidad.Empresa; import com.rjconsultores.ventaboletos.entidad.Estacion; import com.rjconsultores.ventaboletos.entidad.EstacionImpresora; import com.rjconsultores.ventaboletos.entidad.FolioPreimpreso; import com.rjconsultores.ventaboletos.entidad.PuntoVenta; import com.rjconsultores.ventaboletos.entidad.RequisicionBoleto; import com.rjconsultores.ventaboletos.entidad.TipoMovimentacion; import com.rjconsultores.ventaboletos.service.AbastoBoletoService; import com.rjconsultores.ventaboletos.service.ArticuloService; import com.rjconsultores.ventaboletos.service.AutorizaFolioService; import com.rjconsultores.ventaboletos.service.DetAbastoBoletoService; import com.rjconsultores.ventaboletos.service.FolioPreimpresoService; import com.rjconsultores.ventaboletos.service.RequisicionBoletoService; import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado; @Service("autorizaFolioService") public class AutorizaFolioServiceImpl implements AutorizaFolioService { // Numero max de folios por estacion public static final Integer MAX_CANT_FOLIOS = Integer.MAX_VALUE; public static final Integer INICIO_FOLIO = 1; @Autowired private ArticuloService articuloService; @Autowired private RequisicionBoletoService requisicionBoletoService; @Autowired private AbastoBoletoService abastoBoletoService; @Autowired private DetAbastoBoletoService detAbastoBoletoService; @Autowired private FolioPreimpresoService folioPreimpresoService; @Override public Boolean noChequeFolioPreimpresos(Aidf aidf, Estacion origem, Estacion destino, String numfolioinicial, String numfoliofinal, String numseriepreimpresa, Empresa empresaUsuario, TipoMovimentacion tipoMovimentacion) { if(TipoMovimentacion.TIPO_ENVIO == tipoMovimentacion.getTipomovimentacionId() || TipoMovimentacion.TIPO_TRANSFERENCIA == tipoMovimentacion.getTipomovimentacionId()){ FolioPreimpreso folio = folioPreimpresoService.buscaFolioPreImpressoEstacionImpresora(destino, empresaUsuario); RequisicionBoleto requisicionBoleto = geraRequisicionBoleto(aidf, destino, empresaUsuario); AbastoBoleto abastoBoleto = geraAbastoBoleto(requisicionBoleto); DetAbastoBoleto detAbastoBoleto = geraDetAbastoBoleto(abastoBoleto, numfolioinicial, numfoliofinal, numseriepreimpresa); actualizaStatusRequisicion(requisicionBoleto); if (folio == null) { FolioPreimpreso folioPreimpreso = geraFolioPreimpreso(detAbastoBoleto, numfolioinicial); if (folioPreimpreso.getFoliopreimpresoId() == null) return Boolean.FALSE; } else { actualizaFolioPreimpreso(folio, numseriepreimpresa, numfolioinicial); } } if(TipoMovimentacion.TIPO_TRANSFERENCIA == tipoMovimentacion.getTipomovimentacionId() || TipoMovimentacion.TIPO_VOLVER == tipoMovimentacion.getTipomovimentacionId() || TipoMovimentacion.TIPO_PERDIDO == tipoMovimentacion.getTipomovimentacionId()) detAbastoBoletoService.desabilitaDetAbastos(origem, numfolioinicial, numfoliofinal, numseriepreimpresa); return Boolean.TRUE; } private RequisicionBoleto geraRequisicionBoleto(Aidf aidf, Estacion estacion, Empresa empresa) { Articulo articulo = articuloService.obtenerID(aidf.getAidfTipo().getAidftipoId()); Clasificacion clasificacion = articulo.getClasificacion(); PuntoVenta puntoVenta = estacion.getPuntoVenta(); RequisicionBoleto requisicionBoleto = new RequisicionBoleto(); requisicionBoleto.setArticulo(articulo); requisicionBoleto.setCantfajilla(1L); requisicionBoleto.setClasificacion(clasificacion); requisicionBoleto.setEstacion(estacion); requisicionBoleto.setPuntoVenta(puntoVenta); requisicionBoleto.setStatusenvio(Boolean.TRUE); requisicionBoleto.setEmpresa(empresa); return requisicionBoletoService.suscribir(requisicionBoleto); } private DetAbastoBoleto geraDetAbastoBoleto(AbastoBoleto abastoBoleto, String numfolioinicial, String numfoliofinal, String numseriepreimpresa) { Integer statusoperacion = 1; // String numseriepreimpresa = abastoBoleto.getEstacion().getEstacionId().toString() + abastoBoleto.getEmpresa().getEmpresaId().toString(); // String numfolioinicial = INICIO_FOLIO.toString(); // String numfoliofinal = MAX_CANT_FOLIOS.toString(); Long nummovimiento = detAbastoBoletoService.getSecuencia(); DetAbastoBoleto detAbastoBoleto = new DetAbastoBoleto(); detAbastoBoleto.setAbastoBoleto(abastoBoleto); detAbastoBoleto.setNummovimiento(nummovimiento); detAbastoBoleto.setNumseriepreimpresa(numseriepreimpresa.trim()); detAbastoBoleto.setNumfolioinicial(numfolioinicial.trim()); detAbastoBoleto.setNumfoliofinal(numfoliofinal.trim()); detAbastoBoleto.setStatusfirma(Boolean.TRUE); detAbastoBoleto.setStatusoperacion(statusoperacion); detAbastoBoleto.setStatusenvio(Boolean.TRUE); return detAbastoBoletoService.suscribir(detAbastoBoleto); } private void actualizaStatusRequisicion(RequisicionBoleto requisicionBoleto) { requisicionBoleto.setStatusenvio(Boolean.FALSE); requisicionBoletoService.actualizacion(requisicionBoleto); } private FolioPreimpreso geraFolioPreimpreso(DetAbastoBoleto detAbastoBoleto, String numfoliopreimpreso) { AbastoBoleto abastoBoleto = detAbastoBoleto.getAbastoBoleto(); FolioPreimpreso folioPreimpreso = new FolioPreimpreso(); folioPreimpreso.setEmpresa(abastoBoleto.getEmpresa()); folioPreimpreso.setEstacion(abastoBoleto.getEstacion()); folioPreimpreso.setFoliopreimpreso(numfoliopreimpreso); folioPreimpreso.setNodoId(1); folioPreimpreso.setNumeserie(detAbastoBoleto.getNumseriepreimpresa()); folioPreimpreso.setPuntoVenta(abastoBoleto.getPuntoventa()); folioPreimpreso.setIndreplica(NumberUtils.LONG_ZERO); return folioPreimpresoService.suscribir(folioPreimpreso); } private FolioPreimpreso actualizaFolioPreimpreso(FolioPreimpreso folioPreimpreso, String serieFoliopreimpreso, String numfoliopreimpreso) { folioPreimpreso.setFoliopreimpreso(numfoliopreimpreso); folioPreimpreso.setNumeserie(serieFoliopreimpreso); return folioPreimpresoService.actualizacion(folioPreimpreso); } @Override public Boolean noChequeFolioPreimpresos(Estacion estacion) { for (EstacionImpresora estacionImpresora : estacion.getLsEstacionImpresora()) { Empresa empresa = estacionImpresora .getEmpresa(); FolioPreimpreso folio = folioPreimpresoService.buscaFolioPreImpressoEstacionImpresora(estacion, empresa); //condição para qd o folio foi gerado indevidamente pelo cliente de venda. Antes de a rotina abaixo ter sido executada //se o numserie é 0, é um folio inválido if ( (folio != null) && (folio.getNumeserie().equals("0"))) { folioPreimpresoService.borrar(folio); folio = null; } if ( folio == null ) { RequisicionBoleto requisicionBoleto = geraRequisicionBoleto(estacion, empresa); AbastoBoleto abastoBoleto = geraAbastoBoleto(requisicionBoleto); DetAbastoBoleto detAbastoBoleto = geraDetAbastoBoleto(abastoBoleto); actualizaStatusRequisicion(requisicionBoleto); FolioPreimpreso folioPreimpreso = geraFolioPreimpreso(detAbastoBoleto); if (folioPreimpreso.getFoliopreimpresoId() == null) { return Boolean.FALSE; } } } return Boolean.TRUE; } private RequisicionBoleto geraRequisicionBoleto(Estacion estacion, Empresa empresa) { Articulo articulo = articuloService.obtenerID(Articulo.TIPO_VENDA); Clasificacion clasificacion = articulo.getClasificacion(); PuntoVenta puntoVenta = estacion.getPuntoVenta(); RequisicionBoleto requisicionBoleto = new RequisicionBoleto(); requisicionBoleto.setArticulo(articulo); requisicionBoleto.setCantfajilla(1L); requisicionBoleto.setClasificacion(clasificacion); requisicionBoleto.setEstacion(estacion); requisicionBoleto.setPuntoVenta(puntoVenta); requisicionBoleto.setStatusenvio(Boolean.TRUE); requisicionBoleto.setEmpresa(empresa); return requisicionBoletoService.suscribir(requisicionBoleto); } private AbastoBoleto geraAbastoBoleto(RequisicionBoleto requisicionBoleto) { Date fechaHrReq = requisicionBoleto.getFecmodif(); Date now = Calendar.getInstance().getTime(); Long numRequisicion = Long.parseLong(requisicionBoleto.getRequisicionboletoId().toString()); AbastoBoleto abastoboleto = new AbastoBoleto(); abastoboleto.setNumservidor(1); abastoboleto.setNumrequisicion(numRequisicion); abastoboleto.setCantfajilla(requisicionBoleto.getCantfajilla()); abastoboleto.setEstacion(requisicionBoleto.getEstacion()); abastoboleto.setArticulo(requisicionBoleto.getArticulo()); abastoboleto.setClasificacion(requisicionBoleto.getClasificacion()); abastoboleto.setPuntoventa(requisicionBoleto.getPuntoVenta()); abastoboleto.setPuntoventacentral(requisicionBoleto.getPuntoVenta()); abastoboleto.setEmpresa(requisicionBoleto.getEmpresa()); abastoboleto.setFechorreq(fechaHrReq); abastoboleto.setStatusfirma(2); abastoboleto.setStatusEnvio(1); abastoboleto.setUsuarioreqId(UsuarioLogado.getUsuarioLogado().getUsuarioId()); abastoboleto.setFechorfirma(now); abastoboleto.setFechorgeneracion(now); abastoboleto.setUsuariogeneracionId(UsuarioLogado.getUsuarioLogado().getUsuarioId()); return abastoBoletoService.suscribir(abastoboleto); } private DetAbastoBoleto geraDetAbastoBoleto(AbastoBoleto abastoBoleto) { Integer statusoperacion = 1; String numseriepreimpresa = abastoBoleto.getEstacion().getEstacionId().toString() + abastoBoleto.getEmpresa().getEmpresaId().toString(); String numfolioinicial = INICIO_FOLIO.toString(); String numfoliofinal = MAX_CANT_FOLIOS.toString(); Long nummovimiento = detAbastoBoletoService.getSecuencia(); DetAbastoBoleto detAbastoBoleto = new DetAbastoBoleto(); detAbastoBoleto.setAbastoBoleto(abastoBoleto); detAbastoBoleto.setNummovimiento(nummovimiento); detAbastoBoleto.setNumseriepreimpresa(numseriepreimpresa.trim()); detAbastoBoleto.setNumfolioinicial(numfolioinicial.trim()); detAbastoBoleto.setNumfoliofinal(numfoliofinal.trim()); detAbastoBoleto.setStatusfirma(Boolean.TRUE); detAbastoBoleto.setStatusoperacion(statusoperacion); detAbastoBoleto.setStatusenvio(Boolean.TRUE); return detAbastoBoletoService.suscribir(detAbastoBoleto); } private FolioPreimpreso geraFolioPreimpreso(DetAbastoBoleto detAbastoBoleto) { AbastoBoleto abastoBoleto = detAbastoBoleto.getAbastoBoleto(); FolioPreimpreso folioPreimpreso = new FolioPreimpreso(); folioPreimpreso.setEmpresa(abastoBoleto.getEmpresa()); folioPreimpreso.setEstacion(abastoBoleto.getEstacion()); folioPreimpreso.setFoliopreimpreso(INICIO_FOLIO.toString()); folioPreimpreso.setNodoId(1); folioPreimpreso.setNumeserie(detAbastoBoleto.getNumseriepreimpresa()); folioPreimpreso.setPuntoVenta(abastoBoleto.getPuntoventa()); folioPreimpreso.setIndreplica(NumberUtils.LONG_ZERO); return folioPreimpresoService.suscribir(folioPreimpreso); } }