public async Task <IActionResult> SyncProducts() { var errorList = new List <string>(); var productsCreated = 0; var productsUpdated = 0; try { if (_db.Connection.State == System.Data.ConnectionState.Closed) { await _db.Connection.OpenAsync(); } var query = new ProductQueries(_db); var products = await query.GetAllProducts(); foreach (var product in products) { decimal price = 0; if (!string.IsNullOrEmpty(product._price)) { decimal.TryParse(product._price, out price); } int typeId = 0; if (!string.IsNullOrEmpty(product._cat_id)) { int.TryParse(product._cat_id, out typeId); } var found = await _context.Product.FindAsync(int.Parse(product.id.ToString())); if (found == null) { productsCreated++; var newProduct = new Product { AllowOutOfStockPurchase = true, Barcode = product._sku, ChargeTaxes = true, ModifiedDate = DateTime.Now, ProductCode = product._sku, ProductDescription = "", ProductId = int.Parse(product.id.ToString()), ProductName = product.post_title, ProductTypeId = typeId, PurchasePrice = 0, Sku = product._sku, SalesPrice = price }; if (typeId > 0) { var existingProductType = await _context.ProductType.FindAsync(typeId); if (existingProductType == null) { newProduct.ProductType = new ProductType { ProductTypeId = typeId, ModifiedDate = DateTime.Now, ProductTypeName = product._category }; } } else { newProduct.ProductType = null; } await _context.Product.AddAsync(newProduct); await _context.SaveChangesAsync(); } else { productsUpdated++; found.ModifiedDate = DateTime.Now; found.SalesPrice = price; await _context.SaveChangesAsync(); } } _db.Connection.Close(); } catch (Exception ex) { errorList.Add("order taxes:" + ex.ToString()); } await _emailSender.SendEmailAsync("*****@*****.**", "Sync Finished: Products", $"Sync Finished: Products. \n Products Created: {productsCreated}. \n Products Updated: {productsUpdated}. \n Errors: {string.Join(",", errorList)}"); return(Ok(errorList)); }
public async Task <IActionResult> SyncProducts() { var stopWatch = new Stopwatch(); stopWatch.Start(); var errorList = new List <string>(); var productsCreated = 0; var productsUpdated = 0; try { if (_db.Connection.State == System.Data.ConnectionState.Closed) { await _db.Connection.OpenAsync(); } var query = new ProductQueries(_db); var products = await query.GetAllProducts(); foreach (var product in products) { try { decimal price = 0; if (!string.IsNullOrEmpty(product._price)) { decimal.TryParse(product._price, out price); } var found = await _context.Product.FindAsync(int.Parse(product.id.ToString())); if (found == null) { productsCreated++; var newProduct = new Product { AllowOutOfStockPurchase = true, Barcode = product._sku, ChargeTaxes = true, ModifiedDate = DateTime.Now, ProductCode = product._sku, ProductDescription = "", ProductId = int.Parse(product.id.ToString()), ProductName = product.post_title, ProductTypeId = 0, PurchasePrice = 0, Sku = product._sku, SalesPrice = price }; newProduct.ProductType = null; await _context.Product.AddAsync(newProduct); await _context.ProductInventory.AddAsync(new ProductInventory { Balance = 0, BinCode = "", LocationId = 1, ModifiedDate = newProduct.ModifiedDate, ProductId = newProduct.ProductId, }); await _context.ProductInventory.AddAsync(new ProductInventory { Balance = 0, BinCode = "", LocationId = 2, ModifiedDate = newProduct.ModifiedDate, ProductId = newProduct.ProductId, }); await _context.ProductInventory.AddAsync(new ProductInventory { Balance = 0, BinCode = "", LocationId = 3, ModifiedDate = newProduct.ModifiedDate, ProductId = newProduct.ProductId, }); await _context.SaveChangesAsync(); } else { productsUpdated++; found.ModifiedDate = DateTime.Now; found.ProductName = product.post_title; found.SalesPrice = price; found.Barcode = product._sku; found.ProductCode = product._sku; await _context.SaveChangesAsync(); } } catch (Exception e) { Console.WriteLine(e.ToString()); errorList.Add("products error:" + e.ToString()); } } _db.Connection.Close(); } catch (Exception ex) { Console.WriteLine(ex.ToString()); errorList.Add("products error:" + ex.ToString()); } stopWatch.Stop(); var timeTook = $"Products Sync Took: {TimeSpan.FromMilliseconds(stopWatch.ElapsedMilliseconds).Minutes} minutes."; var message = $"Products Sync Finished. \n Products Created: {productsCreated}. \n Products Updated: {productsUpdated}. {timeTook}\n Errors: {string.Join(",", errorList)}"; _emailSender.SendEmailAsync("*****@*****.**", "Sync Finished: Products", message, null, null, true); return(Ok(message)); }