// 'Luis Gachuz, 29/Mar/2003 // 'Modificaciòn para recibir el nuevo paràmetro ic_Trad public final RespuestaFondosVO calculaMontoFondos( final ParFondosVO fondosVO, final SantanderSecurityContext sc) throws Exception { /* * '15032002 GSP. * Calcula el monto de la operación si se proporcionan los títulos * 'Se regresa una cadena con el monto calculado */ String rateCode = ""; String strCountry = ""; String strFundPrice = ""; String icCon = ""; String branch = ""; String ctaContrato = ""; String user = ""; String vatrate = ""; double dblComision = 0.0; double dblIva = 0.0; double dblMontoBruto = 0.0; double dblMontoNeto = 0.0; double dblCalcQty = 0.0; ValidaContratoVO contratoVO = new ValidaContratoVO(); RespuestaFondosVO clientInformationVO = new RespuestaFondosVO(); RespuestaFondosVO issuingVO = new RespuestaFondosVO(); RespuestaFondosVO commRateVO = new RespuestaFondosVO(); RespuestaFondosVO respFondosVO = new RespuestaFondosVO(); /* * Se llama al método de validaContrato para obtener * valores que se necesitan * pasar como parametros para otros metodos. */ branch = fondosVO.getBranch(); ctaContrato = fondosVO.getContrato(); user = sc.getPrivilegiosUsuario().getTrad(); contratoVO = commonDAO.validaContrato(branch, ctaContrato, user); icCon = contratoVO.getCno(); /*===================================================================*/ /* Obtenemos la información del cliente. */ /*===================================================================*/ clientInformationVO = capturaFondosDAO.readClientInformation(icCon.trim()); if (clientInformationVO != null) { if (clientInformationVO.getStatus() != 0) { respFondosVO.setError(String.valueOf(clientInformationVO.getStatus())); if (!fondosVO.isBlError()) { return respFondosVO; } } } else { respFondosVO.setError( "Error al ejecutar el Store Procedure:" + "\n" + "SPS_READ_CLIENT_INFORMATION. "); if (!fondosVO.isBlError()) { return respFondosVO; } } log.debug("clientInformationVO[0]" + clientInformationVO.getStrClientInfo()[0]); log.debug("clientInformationVO[1]" + clientInformationVO.getStrClientInfo()[1]); /*===================================================================*/ /* Obtenemos la ciudad a la que corresponde el branch. */ /*===================================================================*/ strCountry = capturaFondosDAO.readBranchCountry(branch); if (strCountry.trim().equals("Error")) { respFondosVO.setError("Error al obtener la ciudad del branch."); if (!fondosVO.isBlError()) { return respFondosVO; } } else if (strCountry == null) { strCountry = ""; } else { strCountry = strCountry.trim(); } log.debug("strCountry " + strCountry); /*===================================================================*/ /* Valida la moneda de la emisora. */ /*===================================================================*/ issuingVO = validateIssuing(fondosVO.getEmisora(), fondosVO.getMoneda()); DatosTabulares dt = null; if (issuingVO.getError() == null || issuingVO.getError().trim().length() == 0) { dt = issuingVO.getResp(); } else { respFondosVO.setError(issuingVO.getError()); if (!fondosVO.isBlError()) { return respFondosVO; } } /*===================================================================*/ /* Se obtiene el precio del fondo de inversión. */ /*===================================================================*/ strFundPrice = capturaFondosDAO.readFundPrice(fondosVO.getBranch(), fondosVO.getEmisora()); if (strFundPrice.trim().equals("Error")) { log.debug("No se encontro el precio del Fondo de Inversión."); respFondosVO.setError(ErrorKeys.ERR_NO_ENCONTRO_PRECIO_FONDO); if (!fondosVO.isBlError()) { return respFondosVO; } } else if (strFundPrice == null) { strFundPrice = ""; } log.debug("strFundPrice " + strFundPrice); String ccode = ""; if (clientInformationVO.getStrClientInfo()[1] != null) { ccode = clientInformationVO.getStrClientInfo()[1].trim(); } /*===================================================================*/ /* Obtenemos el IVA */ /*===================================================================*/ vatrate = capturaFondosDAO.getClientesVatRate( fondosVO.getBranch(), fondosVO.getContrato(), contratoVO.getCno(), ccode, strCountry); log.debug("==== vatrate " + vatrate); if (vatrate == null) { vatrate = ""; // vatrate = "10"; } else if (vatrate.trim().equals("Error")) { respFondosVO.setError("Error al ejecutar el Store Procedure SPS_OBTIENE_IVA."); if (!fondosVO.isBlError()) { return respFondosVO; } } // 'Luis Gachuz, 29/Mar/2003 // 'Se le envìan nuevos paràmetros ic_Secid, ic_Trad /*===================================================================*/ /* Obtenemos la comision. */ /*===================================================================*/ String product; String prodType; if (dt == null) { product = ""; prodType = ""; } else { product = dt.get(0, colProduct).toString().trim(); prodType = dt.get(0, colProdType).toString().trim(); } log.debug("product " + product); log.debug("prodType " + prodType); log.debug("Vatrate " + vatrate); commRateVO = capturaFondosDAO.getClientCommission( sc, fondosVO.getBranch(), fondosVO.getContrato(), product, prodType, rateCode, fondosVO.getTitulos(), fondosVO.getMonto(), vatrate, fondosVO.getCompraVenta(), fondosVO.getEmisora(), fondosVO.getPromotor()); if (commRateVO != null) { if (commRateVO.getStatus() != 0 || commRateVO.getError() != null) { respFondosVO.setError(commRateVO.getError()); if (!fondosVO.isBlError()) { return respFondosVO; } } } else { commRateVO.setOnCommrate(null); } log.debug("IVA " + commRateVO.getOnCommrate()); /*===================================================================*/ /* Se calcula el monto */ /*===================================================================*/ double fundPrice = 0; double dblCommrate = 0; double dblVatrate = 0; if (!strFundPrice.equals("") && !strFundPrice.equals("Error")) { fundPrice = Double.parseDouble(strFundPrice); } if (commRateVO.getOnCommrate() != null) { dblCommrate = Double.parseDouble(commRateVO.getOnCommrate()); } if (!vatrate.equals("") && !vatrate.equals("Error")) { dblVatrate = Double.parseDouble(vatrate); } if (fondosVO.getTitulos() != 0) { dblComision = Math.abs((fondosVO.getTitulos() * fundPrice * dblCommrate) / 100); dblComision = Formateador.formatoDouble(dblComision, fondosVO.getDecimalsMoneda()) * (-1); dblIva = ((dblComision * dblVatrate) / 100); dblIva = Formateador.formatoDouble(dblIva, fondosVO.getDecimalsMoneda()); dblMontoBruto = Formateador.formatoDouble( (fondosVO.getTitulos() * fundPrice), fondosVO.getDecimalsMoneda()); dblMontoNeto = dblMontoBruto + dblComision + dblIva; dblCalcQty = fondosVO.getTitulos(); log.debug("dblComision " + dblComision); log.debug("dblIva " + dblIva); log.debug("dblMontoBruto " + dblMontoBruto); log.debug("dblCalcQty " + dblCalcQty); } else if (fondosVO.getMonto() != 0) { if (fondosVO.getCompraVenta().equals("P")) { dblCalcQty = (fondosVO.getMonto() / (fundPrice * (1 + dblCommrate / 100 + dblCommrate / 100 * dblVatrate / 100))) * (-1); } else { dblCalcQty = (fondosVO.getMonto() / (fundPrice * (1 - dblCommrate / 100 - dblCommrate / 100 * dblVatrate / 100)) * (-1)); } dblComision = Math.abs((dblCalcQty * fundPrice * dblCommrate) / 100); dblComision = Formateador.formatoDouble(dblComision, fondosVO.getDecimalsMoneda()) * (-1); dblIva = (dblComision * dblVatrate) / 100; dblIva = Formateador.formatoDouble(dblIva, fondosVO.getDecimalsMoneda()); dblMontoBruto = (dblCalcQty * fundPrice) * (-1); dblMontoBruto = Formateador.formatoDouble(dblMontoBruto, fondosVO.getDecimalsMoneda()); dblMontoNeto = dblMontoBruto + dblComision + dblIva; } dblComision = Math.abs(dblComision); /* Se debe formatear dblMontoNeto al * número de decimales de la moneda. */ respFondosVO.setDblMontoNeto( Formateador.formatoDouble(dblMontoNeto, fondosVO.getDecimalsMoneda())); log.debug("dblMontoNeto VO " + respFondosVO.getDblMontoNeto()); return respFondosVO; }
/** * Valida la emisora capturada. * * @param fondosVO Parametros para filtrar la consulta. * @throws Exception En caso que ocurra un error. */ public final RespuestaFondosVO validaEmisoras(final ParFondosVO fondosVO) throws Exception { RespuestaFondosVO respFondos = new RespuestaFondosVO(); RespuestaFondosVO respDAOFon = new RespuestaFondosVO(); Date strFecha = null; long interv = 0; respDAOFon = capturaFondosDAO.validaEmisora(fondosVO.getEmisora()); if (respDAOFon.getError() != null) { respFondos.setError(ErrorKeys.ERR_EMISORA_INVALIDA); return respFondos; } else { int dias = respDAOFon.getDias(); DatosTabulares dt = capturaFondosDAO.validaEmisoraFondos(fondosVO); Date fechaFormateada = fondosVO.getFechaProc(); if (!dt.isEmpty()) { log.debug("colFsettdate " + dt.get(0, colFsettdate)); if (dt.get(0, colFsettdate) == null || dt.get(0, colFsettdate).toString().trim().length() == 0) { if (respDAOFon.getDias() == 0) { respFondos.setFechaValor(fechaFormateada); } else { respFondos.setSettDate( commonDAO.sumaDiasHabiles(fechaFormateada, fondosVO.getMoneda().trim(), dias)); respFondos.setFechaValor(respFondos.getSettDate()); log.debug("respFondos.getSettDate" + respFondos.getSettDate()); log.debug("respFondos.getFechaValor" + respFondos.getFechaValor()); } } else { strFecha = commonDAO.sumaDiasHabiles(fechaFormateada, fondosVO.getMoneda().trim(), dias); if (strFecha == null) { strFecha = fondosVO.getFechaProc(); } interv = commonDAO.diffDates(strFecha, (Date) dt.get(0, colFsettdate), "Fondos"); log.debug("Valor de interv " + interv); if (interv < 0) { respFondos.setError(ErrorKeys.ERR_FECHA_EMISORA_MAL_ACTUALIZADA); return respFondos; } else { respFondos.setFechaValor((Date) dt.get(0, colFsettdate)); log.debug("Fecha valor " + respFondos.getFechaValor()); } } } else { /** * Se cambia la validacion de compraVenta a false porque el envio de compra venta se esta * haciendo de manera inversa, es decir, cuando es compra se esta enviando en false y venta * como true, se modifica aqui la validacion para no afectar otros procedimientos. Error * Interno 636 */ if (fondosVO.getCompraVenta().trim().equals("false")) { respFondos.setError(ErrorKeys.ERR_EMISORA_INVALIDA_SEMF); } else { respFondos.setError("-20113"); } return respFondos; } return respFondos; } }
/** * Método para hacer una operación de un fondo de inversión. * * @param fondosVO Parametros para hacer la validación de la operación que se desea realizar. * @param sc Contexto de seguridad. * @param efectivoVO Parametros para hacer operaciones de Efectivo * @return RespuestaFondosVO Regresa los valores que se muestran en la pantalla de confirmación ó * el número de operación. * @throws Exception Encaso de que ocurra un error. */ public final RespuestaFondosVO procesamientoDatosFondos( final ParFondosVO fondosVO, final SantanderSecurityContext sc, final ParametrosEfectivoVO efectivoVO) throws Exception { String brContrato = ""; String ctaContrato = ""; String user = ""; String contrapartesCom = ""; String contrapartesIva = ""; String perfil = ""; ValidaContratoVO contratoVO = new ValidaContratoVO(); RespuestaFondosVO respFondosVOConf = new RespuestaFondosVO(); RespuestaFondosVO respProcesaFondos = new RespuestaFondosVO(); RespuestaFondosVO respFondos = new RespuestaFondosVO(); brContrato = fondosVO.getBranch(); ctaContrato = fondosVO.getContrato(); user = sc.getPrivilegiosUsuario().getTrad(); contrapartesCom = getCommonService().contrapartes(brContrato, "COMM"); contrapartesIva = getCommonService().contrapartes(brContrato, "IVA"); /* if (contrapartesCom.equals("") || contrapartesIva.equals("")) { log.debug("No se encontrarón definiciones" + " de las contrapartes para el sistema."); } */ try { contratoVO = commonDAO.validaContrato(brContrato, ctaContrato, user); respFondosVOConf = capturaFondosDAO.procesaFondosConfirmacion( fondosVO.getBranch(), fondosVO.getContrato(), contratoVO.getCno(), fondosVO.getEmisora(), fondosVO.getMoneda(), fondosVO.getMonto(), fondosVO.getTitulos(), fondosVO.getCompraVenta(), fondosVO.getFechaProc(), fondosVO.getPromotor(), contratoVO.getNostrovostro(), sc); if (respFondosVOConf != null) { if ((respFondosVOConf.getError() == null || respFondosVOConf.getError().trim().length() == 0) && respFondosVOConf.getStatus() == 0) { int decimales = fondosVO.getDecimalsMoneda(); String strDec = ""; for (int iter = 0; iter < decimales; iter++) { strDec = strDec + "0"; } String pattern = "#,###,##0." + strDec; // Compra / Venta if (respFondosVOConf.getCompraVenta().equals("S")) { respFondos.setCompraVenta("Venta"); } else { respFondos.setCompraVenta("Compra"); } // Emisora respFondos.setEmisora(respFondosVOConf.getEmisora()); // Moneda respFondos.setMoneda(respFondosVOConf.getMoneda()); // Titulos respFondos.setStrCalcQty( Formateador.format(String.valueOf(respFondosVOConf.getDblCalcQty()), pattern)); // Precio String patternPrice = "#,###,##0.########"; respFondos.setStrFundPrice( Formateador.format(String.valueOf(respFondosVOConf.getStrFundPrice()), patternPrice)); // Monto Neto // Se valida regla: Importes inferiores a 100,000 Integer montoValue = Mensajes.MAX_MONTO_DEFAULT; if (capturaCapitalesDAO != null) { montoValue = capturaCapitalesDAO.getMontoInferior(); } if (fondosVO.getEjecucion() != null && Ejecucion.formatString(fondosVO.getEjecucion()) .equalsIgnoreCase(Ejecucion.formatString(Ejecucion.EXCEPCIONES.getName())) && (montoUnsigned(respFondosVOConf.getDblMontoNeto()) >= montoValue)) { if (fondosVO.getBranch() == null || fondosVO.getContrato() == null || !capturaCapitalesDAO.isContratoDiscrecional( fondosVO.getBranch(), fondosVO.getContrato())) { if (respFondos.getCompraVenta().equals("Venta") || respFondosVOConf.getEmisora() == null || respFondosVOConf.getEmisora().equals("") || !capturaCapitalesDAO.existEmisora(respFondosVOConf.getEmisora())) { String serr = Mensajes.ERR_EJECUCION; log.error(serr); respFondos.setError(serr); throw new CondicionesInconsistentesException(respFondos.getError()); } } } respFondos.setStrMontoNeto( Formateador.format(String.valueOf(respFondosVOConf.getDblMontoNeto()), pattern)); // Porcentaje Comisión. if (!respFondosVOConf.getOnCommrate().equals("")) { respFondos.setOnCommrate( Formateador.formatCCY(respFondosVOConf.getOnCommrate(), decimales)); } else { respFondos.setOnCommrate("0.00"); } // Comisión String strComision = String.valueOf(respFondosVOConf.getDblComision()); if (!strComision.equals("")) { respFondos.setStrComision(Formateador.formatCCY(strComision, decimales)); } else { respFondos.setStrComision("0.00"); } // IVA String strIva = Formateador.stringWithOutComma(String.valueOf(respFondosVOConf.getDblIva())); if (!strIva.equals("")) { respFondos.setStrIva(Formateador.formatCCY(strIva, decimales)); } else { respFondos.setStrIva("0.00"); } // Fecha de liquidación if (respFondosVOConf.getSettDate() != null) { respFondos.setFechaLiq( Formateador.formateaFechaDisplay(respFondosVOConf.getSettDate())); } else { respFondos.setFechaLiq(""); } // Plazo de permanencia respFondos.setOcMinTerms(respFondosVOConf.getOcMinTerms()); // Fecha de recompra if (respFondosVOConf.getExpirdate() != null) { respFondos.setFechaExpira(FechaUtils.dateToString(respFondosVOConf.getExpirdate())); } else { respFondos.setFechaExpira(""); } // Producto. if (respFondosVOConf.getOcProduct() != null) { respFondos.setOcProduct(respFondosVOConf.getOcProduct()); } else { respFondos.setOcProduct(""); } // Tipo de Producto. if (respFondosVOConf.getOcProdType() != null) { respFondos.setOcProdType(respFondosVOConf.getOcProdType()); } else { respFondos.setOcProdType(""); } /* * Perfil. */ perfil = getCommonService() .validaPerfilContrato( fondosVO.getBranch(), fondosVO.getContrato(), getCommonService().MDO_FONDOS, fondosVO.getMoneda(), fondosVO.getEmisora(), fondosVO.getMonto(), "", // Producto "", // TipoProducto getCommonService().CICLO_ANTES_DE_VALIDAR, null); log.debug("Perfil '" + perfil + "'"); respFondos.setPerfil(perfil); } else if (respFondosVOConf.getStatus() != 0) { log.debug("Status en respFondosVOConf"); respFondos.setStatus(respFondosVOConf.getStatus()); return respFondos; // ANZ OCT 2011 // ANZ OCT 2011. Se comenta para que no mande Exception // throw new CondicionesInconsistentesException( // String.valueOf(respFondos.getStatus())); } else { log.debug("Mensaje de error en respFondosVOConf " + respFondosVOConf.getError()); respFondos.setError(respFondosVOConf.getError()); return respFondos; // ANZ OCT 2011 // ANZ OCT 2011. Se comenta para que no mande Exception // throw new CondicionesInconsistentesException( // respFondos.getError()); } /* * Se ejecuta cuando se le da click en aceptar * a la pantalla de Confirmación. */ if (fondosVO.isConfirmacion()) { respProcesaFondos = capturaFondosDAO.procesaFondos( fondosVO, contratoVO, respFondosVOConf, contrapartesCom, contrapartesIva, sc); if (respProcesaFondos != null) { if ((respProcesaFondos.getError() == null || respProcesaFondos.getError().trim().length() == 0) && respProcesaFondos.getStatus() == 0) { respFondos.setOperacion(respProcesaFondos.getOperacion()); log.info("Número de operación " + respProcesaFondos.getOperacion()); /** Bitacora */ log.debug("Bitacora " + fondosVO.getBitacora()); getBitacoraService() .registraFondos( respProcesaFondos.getOperacion(), fondosVO.getBranch(), fondosVO.getBitacora(), fondosVO.getEjecucion(), fondosVO.getFolio(), null, FCBitacoraService.MODO_NUEVA_OPERACION, sc); if (fondosVO.isEfectivo()) { RespuestaDepRet respbean = new RespuestaDepRet(); try { efectivoVO.setOperacion(respFondos.getOperacion().trim()); log.info( "Entre a la operacion de efectivo. Operacion=" + efectivoVO.getOperacion() + "; datos para efectivo =" + efectivoVO.getDataList()); log.info("COMENZANDO A PROCESAR EFECTIVO"); respbean = capturaEfectivoService.procesaEfectivo(efectivoVO, sc); respFondos.setOperacionEfe(respbean.getSemfyield()); } catch (Exception e) { String serr = "No se termino la operación " + "de fondos con efectivo"; if (e instanceof CondicionesInconsistentesException) { log.error(serr, e); respFondos.setError(e.getMessage()); throw new CondicionesInconsistentesException(respFondos.getError()); } else { log.error(serr, e); respFondos.setError(ErrorKeys.ERR_EFECTIVO); throw new CondicionesInconsistentesException(respFondos.getError()); } } } } else if (respProcesaFondos.getStatus() != 0) { respFondos.setStatus(respProcesaFondos.getStatus()); return respFondos; // ANZ OCT 2011 // ANZ OCT 2011. Se comenta para que no mande Exception // throw new CondicionesInconsistentesException( // String.valueOf(respFondos.getStatus())); } else { respFondos.setError(respProcesaFondos.getError()); return respFondos; // ANZ OCT 2011 // ANZ OCT 2011. Se comenta para que no mande Exception // throw new CondicionesInconsistentesException( // respFondos.getError()); } } } } } catch (Exception e) { log.error("ERROR", e); respFondos.setError(ErrorKeys.ERR_EFECTIVO); if (e instanceof CondicionesInconsistentesException) { throw e; } else { throw new CondicionesInconsistentesException(ErrorKeys.ERR_EFECTIVO); } } return respFondos; }