public void Process(DataSet content, int ImportVendorID, ILog log) { if (content != null) { int totalProducts = content.Tables[0].AsEnumerable().Count(); log.DebugFormat("Start ProcessBSCStock for {0}, {1} productlines", ImportVendorID, totalProducts); using (ConcentratorDataContext context = new ConcentratorDataContext()) { VendorDataParser util = new VendorDataParser(context, ImportVendorID, log); foreach (DataRow p in content.Tables[0].AsEnumerable()) { util.LoadProduct(p, log); util.UpdateBSCStockLevels(p, log); } } log.DebugFormat("Finish ProcessBSCStock for {0}", ImportVendorID); } else { log.DebugFormat("Empty dataset for vendor {0} processing assorment failed", ImportVendorID); } }
public void Process(DataSet content, Vendor vendor, ILog log, bool processStock) { using (var unit = ServiceLocator.Current.GetInstance <IKernel>().Get <IUnitOfWork>()) { if (content != null) { long start = DateTime.Now.Ticks; int totalProducts = content.Tables[0].AsEnumerable().Count(); var stockRepo = unit.Scope.Repository <VendorStock>(); //TODO: Load options //var options = new DataLoadOptions(); // options.LoadWith<VendorAssortment>(v => v.VendorPrice); // options.LoadWith<VendorAssortment>(v => v.Product); // context.LoadOptions = options; int couterProduct = 0; int logCount = 0; log.DebugFormat("Start ProcessBSCStockAssortment for {0}, {1} productlines", vendor.Name, totalProducts); List <string> vendorItemsInResultSet = stockRepo.GetAll(vs => vs.VendorID == vendor.VendorID).Select(c => c.Product.VendorItemNumber.Trim().ToUpper()).Distinct().ToList(); List <double> customItemNumbers = new List <double>(); VendorDataParser util = new VendorDataParser(unit, vendor, log); foreach (DataRow p in content.Tables[0].AsEnumerable()) { if (!customItemNumbers.Contains(p.Field <double>("ShortItemNumber"))) { couterProduct++; logCount++; if (logCount == 250) { log.DebugFormat("Procces product {0}/{1} for vendor {2}", couterProduct, totalProducts, vendor.Name); logCount = 0; } if (processStock) { util.UpdateBSCStockLevels(p, log); } else { // util.LoadProduct(p, log); //util.ParseAssortment(log); } customItemNumbers.Add(p.Field <double>("ShortItemNumber")); string vendorItemNumber = p.Field <string>("VendorItemNumber").Trim().ToUpper(); vendorItemsInResultSet.Remove(vendorItemNumber); } else { log.DebugFormat("Product {0} already importerted for {1}", p.Field <double>("ShortItemNumber"), vendor.Name); } } unit.Save(); log.DebugFormat("Start cleanup ProcessBSCStockAssortment for {0}", vendor.Name); foreach (var vendorItemNumber in vendorItemsInResultSet) { string vin = vendorItemNumber; var records = stockRepo.GetAllAsQueryable(vs => vs.VendorID == vendor.VendorID //&& vs.VendorStockTypeID == 1//(int)VendorStockType.VendorStockRegularID && vs.Product.VendorItemNumber.Trim().ToUpper() == vin); stockRepo.Delete(records); } unit.Save(); //VendorParserUtility util1 = new VendorParserUtility(unit, vendor.VendorID, log); //util1.SyncUneeded(content, vendor.VendorID); //unit.Save(); log.DebugFormat("Finish cleanup ProcessBSCStockAssortment for {0}", vendor.Name); long finish = DateTime.Now.Ticks - start; log.DebugFormat("Finish ProcessBSCStockAssortment for {0}, {1} productlines in {2} minutes", vendor.Name, totalProducts, TimeSpan.FromTicks(finish).Minutes); } else { log.DebugFormat("Empty dataset for vendor {0} processing assorment failed", vendor.Name); } } }