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; } }
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); }