/// <summary> /// Servicio que permite AGREGAR la tabla GNB_CONVERSIONES con elementos dentro de un String de tipo XML /// </summary> /// <param name="mC">Cadena de caracteres de tipo XML</param> public void AgregarConversiones(string mC) { ServicioConversiones pServicioProductos = new ServicioConversiones(); //servicio que permite comunicar con BD XmlSerializer pSerializador = new XmlSerializer(typeof(ConversionesCollection)); //objeto que recibira los elementos serializados StringReader lector = new StringReader(mC); //se crea un lector el cual recibira los datos des-serializados ConversionesCollection pConversiones = (ConversionesCollection)pSerializador.Deserialize(lector); //se castea el des-serializador y se obtienen los elementos //PROVEEDOR DE SIGNO DECIMAL NumberFormatInfo proveedorDecimal = new NumberFormatInfo(); proveedorDecimal.NumberDecimalSeparator = "."; for (int indice = 0; indice < pConversiones.Count; indice++) { GNB_CONVERSIONES pDatos = new GNB_CONVERSIONES(); //se instancea la tabla que contiene los campos a modificar Conversiones pConversion = pConversiones.ElementAt(indice); //ALMACENAMIENTO DE VARIABLES DESERIALIZADAS pDatos.ID_CONVERSION = indice + 1; pDatos.FROM_CURRENCY = pConversion.From_Currency; pDatos.TO_CURRENCY = pConversion.To_Currency; pDatos.RATE = Convert.ToDecimal(pConversion.Rate, proveedorDecimal); //se agregan los productos al servicio pServicioProductos.AgregarConversiones(pDatos); } }
/// <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> /// Servicio que permite ACTUALIZAR la tabla GNB_CONVERSIONES con elementos dentro de un String de tipo XML /// </summary> /// <param name="mC">Cadena de caracteres de tipo XML</param> public void ActualizarConversiones(string mC) { XmlSerializer pSerializador = new XmlSerializer(typeof(Conversiones)); //objeto que recibira los elementos serializados StringReader lector = new StringReader(mC); //se crea un lector el cual recibira los datos des-serializados Conversiones pConversiones = (Conversiones)pSerializador.Deserialize(lector); //se castea el des-serializador y se obtienen los elementos ServicioConversiones pServicioConversiones = new ServicioConversiones(); //se crea un objeto de clase ServicioProductos GNB_CONVERSIONES pDatos = new GNB_CONVERSIONES(); //se instancea la tabla que contiene los campos a modificar //PROVEEDOR DE SIGNO DECIMAL NumberFormatInfo proveedorDecimal = new NumberFormatInfo(); proveedorDecimal.NumberDecimalSeparator = "."; //ALMACENAMIENTO DE VARIABLES DESERIALIZADAS pDatos.ID_CONVERSION = pConversiones.Id_Conversion; pDatos.FROM_CURRENCY = pConversiones.From_Currency; pDatos.TO_CURRENCY = pConversiones.To_Currency; pDatos.RATE = Convert.ToDecimal(pConversiones.Rate, proveedorDecimal); //se ACTUALIZAN las conversiones al servicio pServicioConversiones.ActualizarConversiones(pDatos); }
/// <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); }
/// <summary> /// elimina todos los elementos de la tabla GNB_CONVERSIONES /// </summary> public void LimpiarConversiones() { ServicioConversiones pServicioTrnasacciones = new ServicioConversiones(); pServicioTrnasacciones.LimpiarConversiones(); //limpia todos los campos de la tabla GNB_CONVERSIONES }