Esempio n. 1
0
    /// <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
    }
Esempio n. 2
0
    /// <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);
    }