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