public async Task ProcessDroppedFile(string fileName, string fileType, AsycudaDocumentSet docSet, bool overWriteExisting) { //get the text var wStr = Core.Common.PDF2TXT.Pdf2Txt.Instance.ExtractTextFromPdf(fileName); var elst = await GetEntryData(wStr).ConfigureAwait(false); await ImportInventory(elst).ConfigureAwait(false); var flst = FixExistingEntryData(elst); var exceptions = new ConcurrentQueue <Exception>(); flst.AsParallel(new ParallelLinqOptions() { MaxDegreeOfParallelism = Environment.ProcessorCount }).ForAll(itm => { try { using (var ctx = new EntryDataDSContext()) { ctx.ApplyChanges(itm); ctx.SaveChanges(); } } catch (Exception ex) { exceptions.Enqueue(ex); } }); if (exceptions.Count > 0) { throw new AggregateException(exceptions); } }
private async Task SaveEntryData(IEnumerable <EntryData> flst) { var exceptions = new ConcurrentQueue <Exception>(); flst.AsParallel(new ParallelLinqOptions() { MaxDegreeOfParallelism = Environment.ProcessorCount }).ForAll(itm => { try { using (var ctx = new EntryDataDSContext()) { ctx.ApplyChanges(itm); ctx.SaveChanges(); } } catch (Exception ex) { exceptions.Enqueue(ex); } }); if (exceptions.Count > 0) { throw new AggregateException(exceptions); } }
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"); }