Exemplo n.º 1
0
    /// <summary>
    /// Obtiene una lista de transacciones (SKU) dentro de una cadena XML
    /// </summary>
    /// <param name="mTransaccionesXML">Una cadena XML que almacena datos de Transacciones</param>
    /// <returns>los elementos SKU dentro de la tabla</returns>
    public string ListaTransacciones(string mTransaccionesXML)
    {
        //segmento para deserializar la cadena de caracteres pasada como parametro
        XmlSerializer     pSerializador     = new XmlSerializer(typeof(TransacCollection));
        StringReader      lector            = new StringReader(mTransaccionesXML);
        TransacCollection pTransaccionesXML = (TransacCollection)pSerializador.Deserialize(lector);

        TransacCollection pTransaccionesExtraidas = new TransacCollection(); //elemento buffer de las transacciones solicitadas

        NumberFormatInfo proveedorDecimal = new NumberFormatInfo();

        proveedorDecimal.NumberDecimalSeparator = "."; //se asigna el punto como separador

        //ciclo para recorrer los elementos dentro del XML y crear un buffer con solo un SKU por elemento existente
        for (int index1 = 0; index1 < pTransaccionesXML.Count; index1++)
        {
            Transac Fila = pTransaccionesXML.ElementAt(index1);
            for (int index2 = 0; index2 <= pTransaccionesExtraidas.Count; index2++)
            {
                //si el objeto "pTransaccionesExtraidas esta vacio entonces guarda el primer elemento
                if (pTransaccionesExtraidas.Count == 0)
                {
                    Transac FilaAuxiliar = new Transac();
                    FilaAuxiliar.Id_Product = Fila.Id_Product;
                    FilaAuxiliar.Sku        = Fila.Sku;
                    FilaAuxiliar.Amount     = Fila.Amount;
                    FilaAuxiliar.Currency   = Fila.Currency;
                    pTransaccionesExtraidas.Add(FilaAuxiliar);
                    break;
                }
                else if (index2 == pTransaccionesExtraidas.Count)
                {
                    break;                                               //si el elemento a evaluar es el ultimo se salta (ya que el recorrido debe ser menor al .count del objeto ya que comienza en 0)
                }
                else
                {
                    Transac FilaInterna = new Transac();//objeto que servira de buffer momentaneo

                    //se pregunta con una consulta si el SKU existe dentro del buffer al menos una vez
                    //si no existe entonces se guarda
                    if (pTransaccionesExtraidas.Any(o => o.Sku == Fila.Sku))
                    {
                        break;
                    }
                    else
                    {
                        FilaInterna.Id_Product = Fila.Id_Product;
                        FilaInterna.Sku        = Fila.Sku;
                        FilaInterna.Amount     = Fila.Amount;
                        FilaInterna.Currency   = Fila.Currency;
                        pTransaccionesExtraidas.Add(FilaInterna);
                        break;
                    }
                }
            }
        }

        //segmento para serializar el resultado y enviarlo como cadena de caracteres
        StringWriter escritor = new StringWriter();

        pSerializador.Serialize(escritor, pTransaccionesExtraidas);
        return(escritor.ToString());
    }