/// <summary> /// se OBTIENEN o RECUPERAN todos los elementos dentro de la tabla GNB_CONVERSIONES /// </summary> /// <returns>candena de caracteres XML que contienen los elementos dentro de la tabla</returns> public string ObtenerConversiones() { ServicioConversiones pServicioConversiones = new ServicioConversiones(); //se crea una instancia del servicio List <GNB_CONVERSIONES> pConversiones = pServicioConversiones.ObtenerConversiones(); //se crea una lista que almacena los elementos dentro de la tabla ConversionesCollection pConversionesCollection = new ConversionesCollection(); //se crea una instancia del la lista donde deberan estar los elementos de la base de datos //PROVEEDOR DE SIGNO DECIMAL NumberFormatInfo proveedorDecimal = new NumberFormatInfo(); proveedorDecimal.NumberDecimalSeparator = "."; //se realiza un ciclo donde cada elemento se traspasara desde la base de datos hasta el objeto que lo contendra //este objeto es la instancia de tipo "collection" foreach (GNB_CONVERSIONES indice in pConversiones) { Conversiones iComun = new Conversiones(); iComun.Id_Conversion = indice.ID_CONVERSION; iComun.From_Currency = indice.FROM_CURRENCY; iComun.To_Currency = indice.TO_CURRENCY; iComun.Rate = Convert.ToDouble(indice.RATE, proveedorDecimal); pConversionesCollection.Add(iComun); } XmlSerializer pSerializador = new XmlSerializer(typeof(ConversionesCollection)); //se crea un serializador de tipo colection (lista) StringWriter escritor = new StringWriter(); //se instancia un nuevo escritor de cadenas pSerializador.Serialize(escritor, pConversionesCollection); //se serializa la cadena return(escritor.ToString()); //se retorna el escritor de tipo string }
/// <summary> /// Permite totalizar todos los elementos en la transaccion del campo "AMOUNT" en EUR haciendo /// las conversiones respectivas segun la tabla HEROKU de conversiones /// </summary> /// <param name="pTransaccionesXML"> cadena de caracteres de tipo XML que contenga transacciones</param> /// <returns>el total en formato redondeado "AwayFromZero"</returns> public double TotalizadoEUR(string pTransaccionesXML) { //segmento para deserializar el XML entrante como parametro XmlSerializer pSerializadorTransac = new XmlSerializer(typeof(TransacCollection)); StringReader LectorTransac = new StringReader(pTransaccionesXML); TransacCollection pTransacciones = (TransacCollection)pSerializadorTransac.Deserialize(LectorTransac); //PROVEEDOR DECIMAL NumberFormatInfo proveedorDecimal = new NumberFormatInfo(); proveedorDecimal.NumberDecimalSeparator = "."; //se asigna el punto como separador //Servicios necesarios para consultar las conversiones almacenadas en la BD ServicioConversiones ServicioConversiones = new ServicioConversiones(); List <GNB_CONVERSIONES> ListaConversiones = new List <GNB_CONVERSIONES>(); ListaConversiones = ServicioConversiones.ObtenerConversiones(); //se obtienen las conversiones de la BD ArrayList TasasDeConeversiones = new ArrayList(); //Arreglo para almacenar solo los RATE de conversiones double Totalizar = 0; //variable de totalizado try { //por cada elemento en la tabla de conversion se extraera el campo "RATE" foreach (GNB_CONVERSIONES mConversion in ListaConversiones) { TasasDeConeversiones.Add(Convert.ToDouble(mConversion.RATE, proveedorDecimal)); } //se almacenan las conversiones necesarias /* segun el XML HEROKU * 0 CAD - EUR * 1 EUR - CAD * 2 CAD - USD * 3 USD - CAD * 4 EUR - AUD * 5 AUD - EUR */ double USD_CAD = (double)TasasDeConeversiones[3]; double CAD_EUR = (double)TasasDeConeversiones[0]; double AUD_EUR = (double)TasasDeConeversiones[5]; //por cada elemento en las transacciones seleccionadas se revisara el campo "CURRENCY" foreach (Transac pTransaccion in pTransacciones) { //SI EL CURRENCY ES DISTINTO DE EUR SE APLICA UNA CONVERSION switch (pTransaccion.Currency.ToString()) { case "USD": //pasa por CAD primero luego a EUR Totalizar += (pTransaccion.Amount * USD_CAD) * CAD_EUR; break; case "CAD": //directo a EUR Totalizar += (pTransaccion.Amount * USD_CAD) * CAD_EUR; break; case "AUD": //directo a EUR Totalizar += pTransaccion.Amount * AUD_EUR; break; case "EUR": Totalizar += pTransaccion.Amount; break; default: break; } } } catch (Exception Ex) { } //se realiza un redondeo de tipo "bank" o Gaussiano Totalizar = Math.Round(Totalizar, 1, MidpointRounding.AwayFromZero); return(Totalizar); }