/// <summary> /// Permite la busqueda de las transacciones de un SKU /// </summary> /// <param name="mP">Cadena XML donde se encuentran los datos de la tabla GNB_TRANSAC</param> /// <param name="Busqueda">SKU A Buscar</param> /// <returns>TODAS LAS TRANSACCIONES REALIZADAS CON ESE SKU</returns> public string BuscarTransacciones(string mP, string Busqueda) { Transac TransaccionABuscar = new Transac(); TransaccionABuscar.Sku = Busqueda; XmlSerializer pSerializador = new XmlSerializer(typeof(TransacCollection)); StringReader lector = new StringReader(mP); TransacCollection pTransaccionesEncontradas = (TransacCollection)pSerializador.Deserialize(lector); TransacCollection pTransaccionesCoincidiencias = new TransacCollection(); NumberFormatInfo proveedorDecimal = new NumberFormatInfo(); proveedorDecimal.NumberDecimalSeparator = "."; //se asigna el punto como separador foreach (Transac indice in pTransaccionesEncontradas) { Transac iComun = new Transac(); if (TransaccionABuscar.Sku == indice.Sku) { iComun.Id_Product = indice.Id_Product; iComun.Sku = indice.Sku; iComun.Amount = Convert.ToDouble(indice.Amount, proveedorDecimal); iComun.Currency = indice.Currency; pTransaccionesCoincidiencias.Add(iComun); } } StringWriter escritor = new StringWriter(); pSerializador.Serialize(escritor, pTransaccionesCoincidiencias); return(escritor.ToString()); }
/// <summary> /// se OBTIENEN o RECUPERAN todos los elementos dentro de la tabla GNB_TRANSAC /// </summary> /// <returns>candena de caracteres XML que contienen los elementos dentro de la tabla</returns> public string ObtenerTransacciones() { ServicioTransacciones pServicioProductos = new ServicioTransacciones(); //se crea una instancia del servicio List <GNB_TRANSAC> pProductos = pServicioProductos.ObtenerTransaccion(); //se crea una lista que almacena los elementos dentro de la tabla TransacCollection pProductosCollection = new TransacCollection(); //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 asigna el punto como separador //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_TRANSAC indice in pProductos) { Transac iComun = new Transac(); iComun.Id_Product = indice.ID_PRODUCT; iComun.Sku = indice.SKU; iComun.Amount = Convert.ToDouble(indice.AMOUNT, proveedorDecimal); iComun.Currency = indice.CURRENCY; pProductosCollection.Add(iComun); } XmlSerializer pSerializador = new XmlSerializer(typeof(TransacCollection)); //se crea un serializador de tipo colection (lista) StringWriter escritor = new StringWriter(); //se instancia un nuevo escritor de cadenas pSerializador.Serialize(escritor, pProductosCollection); //se serializa la cadena return(escritor.ToString()); //se retorna el escritor de tipo string }
/// <summary> /// Consulta a un LINK de HEROKU por los parametros de SKU, AMOUNT y CURRENCY /// para luego crear una cadena de datos para trabajar con ella /// </summary> /// <param name="xmlLink">debe ser el link de heroku de las transacciones</param> /// <returns>Cadena de caracteres con el contenido del documento XML serializado</returns> public string ConsultaXMLTransac(string xmlLink) { XmlDocument DocumentoXml = new XmlDocument(); //variable para almacenar un link y abrirlo como XML DocumentoXml.Load(xmlLink); //carga el archivo XML XmlElement ElementoRaiz = DocumentoXml.DocumentElement; //elemento raiz principal XmlNodeList Nodos = ElementoRaiz.ChildNodes; //hijos de ese raiz NumberFormatInfo proveedorDecimal = new NumberFormatInfo(); //tipo de decimal proveedorDecimal.NumberDecimalSeparator = "."; //se asigna el punto como separador decimal TransacCollection pTransaccionesCollection = new TransacCollection(); for (int pNodos = 0; pNodos < Nodos.Count; pNodos++) { Transac pTransac = new Transac(); XmlNode NodoActual = Nodos.Item(pNodos); XmlElement Dato = (XmlElement)NodoActual; XmlAttribute Atributo1 = Dato.GetAttributeNode("sku"); XmlAttribute Atributo2 = Dato.GetAttributeNode("amount"); XmlAttribute Atributo3 = Dato.GetAttributeNode("currency"); pTransac.Id_Product = pNodos + 1; pTransac.Sku = Atributo1.InnerText.ToString(); pTransac.Amount = Convert.ToDouble(Atributo2.InnerText.ToString(), proveedorDecimal); pTransac.Currency = Atributo3.InnerText.ToString(); pTransaccionesCollection.Add(pTransac); } XmlSerializer pSerializador = new XmlSerializer(typeof(TransacCollection)); StringWriter escritor = new StringWriter(); pSerializador.Serialize(escritor, pTransaccionesCollection); return(escritor.ToString()); }
/// <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()); }