private async Task SaveToDataBase(IEnumerable <SalesReceiptRet> trackableCollection, AsycudaDocumentSet currentAsycudaDocumentSet) { var salesReceiptRets = trackableCollection as IList <SalesReceiptRet> ?? trackableCollection.ToList(); StatusModel.StartStatusUpdate("Importing Sales Data", salesReceiptRets.Count()); using (var ctx = new EntryDataDSContext()) { foreach (var saleReceipt in salesReceiptRets) { StatusModel.StatusUpdate(); SalesReceiptRet receipt = saleReceipt; var s = ctx.EntryData.OfType <Sales>().FirstOrDefault(x => x.EntryDataId == receipt.SalesReceiptNumber); if (s == null) { s = new Sales(true) { TrackingState = TrackingState.Added }; } // RemoveExistingDbReceipts(db, saleReceipt); s.INVNumber = saleReceipt.SalesReceiptNumber; s.EntryDataId = saleReceipt.SalesReceiptNumber; s.EntryDataDate = saleReceipt.TxnDate; s.TaxAmount = Convert.ToDouble(saleReceipt.TaxAmount); s.AsycudaDocumentSets.Add(new AsycudaDocumentSetEntryData(true) { AsycudaDocumentSetId = currentAsycudaDocumentSet.AsycudaDocumentSetId, EntryDataId = s.EntryDataId, TrackingState = TrackingState.Added }); // do details if (saleReceipt.SalesReceiptItems == null) { continue; } //foreach (var ed in s.EntryDataDetails.ToList()) //{ // s.EntryDataDetails.Remove(ed); // db.DeleteObject(ed); //} for (var i = 0; i < saleReceipt.SalesReceiptItems.Count(); i++) { var saleReceiptDetail = saleReceipt.SalesReceiptItems[i]; var itm = s.EntryDataDetails.FirstOrDefault(x => x.LineNumber == i); if (itm == null) { itm = new EntryDataDetails(true) { EntryDataId = s.EntryDataId, ItemNumber = saleReceiptDetail.ItemNumber, ItemDescription = saleReceiptDetail.Desc1 + "|" + saleReceiptDetail.Desc2 + "|" + saleReceiptDetail.Attribute, Cost = Convert.ToSingle(saleReceiptDetail.Cost), LineNumber = i, UnitWeight = Convert.ToSingle(saleReceiptDetail.Weight), Units = saleReceiptDetail.UnitOfMeasure, TrackingState = TrackingState.Added }; } else { itm.ItemNumber = saleReceiptDetail.ItemNumber; itm.ItemDescription = saleReceiptDetail.Desc1 + "|" + saleReceiptDetail.Desc2 + "|" + saleReceiptDetail.Attribute; itm.Cost = Convert.ToSingle(saleReceiptDetail.Cost); itm.LineNumber = i; itm.UnitWeight = Convert.ToSingle(saleReceiptDetail.Weight); itm.Units = saleReceiptDetail.UnitOfMeasure; } InventoryItem inv = null; using (var ictx = new InventoryDSContext()) { inv = await ictx.InventoryItems.FindAsync(saleReceiptDetail.ItemNumber).ConfigureAwait(false); if (inv == null) { inv = new InventoryItem(true) { ItemNumber = saleReceiptDetail.ItemNumber, Description = GetQBSaleItemDescription(saleReceiptDetail), TrackingState = TrackingState.Added }; ictx.ApplyChanges(inv); await ictx.SaveChangesAsync().ConfigureAwait(false); } } itm.ItemDescription = inv.Description; switch (saleReceipt.SalesReceiptType) { case "srtReturn": itm.Quantity = Convert.ToSingle(saleReceiptDetail.Qty) * -1; break; case "srtSales": itm.Quantity = Convert.ToSingle(saleReceiptDetail.Qty); break; default: throw new Exception("Unknown SalesType"); break; } s.EntryDataDetails.Add(itm); } ctx.ApplyChanges(s); await ctx.SaveChangesAsync().ConfigureAwait(false); } } StatusModel.StopStatusUpdate(); MessageBox.Show(@"Sale Receipt Import Complete"); }