private static void SyncProducts(string initialDate)
        {
            int pResult = 0;

            log.Trace("Products");
            List <Product> lstProducts = new List <Product>();

            try
            {
                pResult = AdminPaqService.Instance.GetProductChanges(ref lstProducts, initialDate);
                log.Trace("Searching... Since: " + initialDate);
                if (pResult != 0)
                {
                    log.Info("No products found.");
                }
                else
                {
                    log.Debug("Products to sync: " + lstProducts.Count);
                    List <HandyProduct> products = new List <HandyProduct>();
                    foreach (Product oProduct in lstProducts)
                    {
                        try
                        {
                            HandyProduct hProduct = oProduct.ToHandyProduct();
                            products.Add(hProduct);
                        }
                        catch (Exception ex)
                        {
                            log.Error("Error processing product: " + oProduct.cCodigoProducto + "; Error: " + ex.Message);
                        }
                    }
                    log.Info("Products processed. Response: " + HandyService.Instance.SaveProducts(products));
                }
            }
            catch (Exception ex)
            {
                log.Error("Error processing products: " + ex.Message);
                throw ex;
            }
        }
Exemplo n.º 2
0
        public static HandyProduct ToHandyProduct(this Product value)
        {
            HandyProduct producto = new HandyProduct();

            producto.code        = value.cCodigoProducto;
            producto.barcode     = value.cCodaltern;
            producto.description = (value.cNombreProducto == " " || value.cNombreProducto == "") ? "--" : value.cNombreProducto; // se usa el nombre de producto de AdminPAQ para la descripción en Handy, al ser un campo obligatorio en Handy se pone un valor default
            producto.details     = (value.cDesccorta == " " || value.cDesccorta == "") ? "--" : value.cDesccorta;                // Se usa descripción corta porque no se pudo acceder a la descripción detallada de AdminPAQ
            producto.enabled     = (value.cStatusProducto == 1) ? true : false;

            Console.WriteLine(ConfigProxy.PriceId);
            Console.WriteLine(ConfigProxy.PriceId == "2");
            switch (ConfigProxy.PriceId)
            {
            case "1": producto.price = value.cPrecio1; break;

            case "2": producto.price = value.cPrecio2; break;

            case "3": producto.price = value.cPrecio3; break;

            case "4": producto.price = value.cPrecio4; break;

            case "5": producto.price = value.cPrecio5; break;

            case "6": producto.price = value.cPrecio6; break;

            case "7": producto.price = value.cPrecio7; break;

            case "8": producto.price = value.cPrecio8; break;

            case "9": producto.price = value.cPrecio9; break;

            case "10": producto.price = value.cPrecio10; break;

            default: producto.price = value.cPrecio2; break;
            }

            producto.product_family = "Generales";
            return(producto);
        }
        //NOT USED
        public List <HandyProduct> getProducts(string since)
        {
            log.Info("Obteniendo un listado de productos desde " + since);
            JObject             response = null;
            List <HandyProduct> products = null;

            //Si la fecha no se especifica o el formato de la fecha es incorrecto entonces el parámetro será ignorado y se regresará un listado de todos los productos
            if (since != null)
            {
                try
                {
                    //Se intenta convertir la fecha a milisegundos desde 1 Enero de 1970.
                    //La fecha se espera en formato dd/MM/yyyy HH:mm:ss.ff,
                    //por ello se especifica que la cultura es es-MX, para evitar que si la computadora tiene
                    //una configuración regional distinta la fecha se interprete de manera distinta y pueda llevar a errores.
                    DateTime date = DateTime.Parse(since, System.Globalization.CultureInfo.CreateSpecificCulture("es-MX"));
                    since = "&since=" + date.ToUniversalTime().Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds;
                }
                catch (Exception ex)
                {
                    //Si un error sucede se ignorará el parámetro.
                    since = "";
                }
            }
            try
            {
                string url = baseURL + "api/product/list?enabled=true" + since;
                //this work for read only, not for write
                var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
                httpWebRequest.Headers["Authorization"] = "Basic " + Convert.ToBase64String(Encoding.Default.GetBytes(username + ":" + password)); //Se agregan los datos de login a la cabezera HTTP.
                var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();                                                                  //Se realiza la petición.
                using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
                {
                    var result = streamReader.ReadToEnd();
                    products = new List <HandyProduct>();
                    response = JObject.Parse(result);
                    for (int i = 0; i < response["products"].Count(); i++)
                    {
                        HandyProduct p = new HandyProduct();
                        p.code            = (string)response["products"][i]["code"];
                        p.description     = (string)response["products"][i]["description"];
                        p.product_family  = (string)response["products"][i]["family"]["description"];
                        p.enabled         = (bool)response["products"][i]["enabled"];
                        p.price           = (double)response["products"][i]["price"];
                        p.apply_discounts = (bool)response["products"][i]["apply_discounts"];
                        p.details         = (string)response["products"][i]["details"];
                        //Se determina si el registro es nuevo o es una modificación, esto se logra comparando fechas de creación y actualización,
                        //si las fechas son iguales el cliente es nuevo, si no entonces fue editado.
                        if (((string)response["products"][i]["date_created"]) == ((string)response["products"][i]["last_updated"]))
                        {
                            p.isNew = true;
                        }
                        else
                        {
                            p.isNew = false;
                        }
                        products.Add(p);//Se agrega el objeto temporal al arreglo mayor antes de que sea eliminado.
                    }
                }
            }
            catch (Exception ex)
            {
                log.Error("Error obteniendo el listado de productos: Exception: " + ex);
                response = JObject.Parse("{error:true,message:\"Exception: see logs\"}");
            }
            if (((bool)response["error"]))
            {
                log.Error("Error obteniendo el listado de productos: " + (string)response["message"]);
            }

            return(products);
        }