protected override void AnimatedThreadWorkerDoWork(object sender, DoWorkEventArgs e) { _initialProductArray.Clear(); _resultProductArray.Clear(); _initialOrders.Clear(); _requestForQuotations.Clear(); AnimatedThreadWorker.ReportProgress(0, "load products"); try { _initialOrders.AddRange(GlobalObjects.CasEnvironment.NewLoader.GetObjectList <InitialOrderDTO, InitialOrder>(new Filter("Status", 1))); _requestForQuotations.AddRange(GlobalObjects.CasEnvironment.NewLoader.GetObjectList <RequestForQuotationDTO, RequestForQuotation>(new Filter("Status", 1))); _initialProductArray.AddRange(GlobalObjects.CasEnvironment.NewLoader.GetObjectList <AccessoryDescriptionDTO, Product>(new Filter("ModelingObjectTypeId", -1), loadChild: true)); _initialProductArray.AddRange(GlobalObjects.CasEnvironment.NewLoader.GetObjectList <AccessoryDescriptionDTO, ComponentModel>(new Filter("ModelingObjectTypeId", 5), loadChild: true)); var ids = _initialProductArray.SelectMany(i => i.SupplierRelations).Select(i => i.SupplierID).Distinct(); if (ids.Count() > 0) { var suppliers = GlobalObjects.CasEnvironment.NewLoader.GetObjectListAll <SupplierDTO, Supplier>(new Filter("ItemId", ids)); if (suppliers.Count > 0) { foreach (var product in _initialProductArray) { foreach (var relation in product.SupplierRelations) { var currentSup = suppliers.FirstOrDefault(i => i.ItemId == relation.SupplierID); if (currentSup != null) { relation.Supplier = currentSup; if (!product.Suppliers.Contains(currentSup)) { product.Suppliers.Add(currentSup); } } } } } } } catch (Exception ex) { Program.Provider.Logger.Log("Error while load documents", ex); } AnimatedThreadWorker.ReportProgress(70, "filter products"); FilterItems(_initialProductArray, _resultProductArray); AnimatedThreadWorker.ReportProgress(100, "Complete"); }