public void MultpleRecordsWriteAsync() { engine = new MultiRecordEngine(new RecordTypeSelector(CustomSelector), typeof(OrdersVerticalBar), typeof(CustomersSemiColon), typeof(SampleType)); object[] records = engine.ReadFile(Common.TestPath(@"Good\MultiRecord1.txt")); engine.BeginWriteFile("tempoMulti.txt"); foreach (object o in records) { engine.WriteNext(o); } engine.Close(); File.Delete("tempoMulti.txt"); object[] res = engine.ReadFile(Common.TestPath(@"Good\MultiRecord1.txt")); Assert.AreEqual(12, res.Length); Assert.AreEqual(12, engine.TotalRecords); Assert.AreEqual(typeof(OrdersVerticalBar), res[0].GetType()); Assert.AreEqual(typeof(OrdersVerticalBar), res[1].GetType()); Assert.AreEqual(typeof(CustomersSemiColon), res[2].GetType()); Assert.AreEqual(typeof(SampleType), res[5].GetType()); }
static Type CustomSelector(MultiRecordEngine engine, string record) { if (Char.IsLetter(record[0])) return typeof(CustomersSemiColon); else return typeof(OrdersVerticalBar); }
private static Type CustomRecordSelector(MultiRecordEngine engine, string line) { line = line.ToLower(); if (line.StartsWith("carrier")) { return typeof(RawCarrier); } if (line.StartsWith("origin")) { return typeof(RawOrigin); } if (line.StartsWith("destination")) { return typeof(RawDestination); } if (line.StartsWith("shipment|")) { return typeof(RawShipment); } if (line.StartsWith("shipmentdetail|")) { return typeof(RawShipmentDetail); } return null; }
static void Main(string[] args) { MultiRecordEngine engine; engine = new MultiRecordEngine(typeof(OrdersVerticalBar), typeof(CustomersSemiColon)); engine.RecordSelector = new RecordTypeSelector(CustomSelector); object[] res = engine.ReadFile(@"C:\Documents and Settings\l0737860\Mis documentos\Multi.txt"); }
public void MultpleRecordsFileAsyncBad() { engine = new MultiRecordEngine(typeof(OrdersVerticalBar), typeof(CustomersSemiColon), typeof(SampleType)); engine.RecordSelector = new RecordTypeSelector(CustomSelector); foreach (object o in engine) { o.ToString(); } }
//-> /File //-> File:Selector.cs /// <summary> /// This is the selector that determines the record type based on /// whatever criteria you write /// </summary> /// <param name="engine">Engine that is processing file</param> /// <param name="record">Record read from input</param> /// <returns>Record to accept this record</returns> Type CustomSelector(MultiRecordEngine engine, string record) { if (record.Length == 0) return null; if (Char.IsLetter(record[0])) return typeof(Customer); else if (record.Length == 14) return typeof(SampleType); else return typeof(Orders); }
public void MultpleRecordsFile() { engine = new MultiRecordEngine(new RecordTypeSelector(CustomSelector), typeof(OrdersVerticalBar), typeof(CustomersSemiColon), typeof(SampleType)); object[] res = engine.ReadFile(FileTest.Good.MultiRecord1.Path); Assert.AreEqual(12, res.Length); Assert.AreEqual(12, engine.TotalRecords); Assert.AreEqual(typeof(OrdersVerticalBar), res[0].GetType()); Assert.AreEqual(typeof(OrdersVerticalBar), res[1].GetType()); Assert.AreEqual(typeof(CustomersSemiColon), res[2].GetType()); Assert.AreEqual(typeof(SampleType), res[5].GetType()); }
public void MultpleRecordsFileAsyncBad() { engine = new MultiRecordEngine(typeof (OrdersVerticalBar), typeof (CustomersSemiColon), typeof (SampleType)); engine.RecordSelector = new RecordTypeSelector(CustomSelector); Assert.Throws<FileHelpersException>( () => { foreach (var o in engine) { o.ToString(); } }); }
//-> File:Input.txt /*10248|VINET|5|04071996|01081996|16071996|3|32.38 10249|TOMSP|6|05071996|16081996|10071996|1|11.61 ALFKI;Alfreds Futterkiste;Maria Anders;Sales Representative;Obere Str. 57;Berlin;Germany ANATR;Ana Trujillo Emparedados y helados;Ana Trujillo;Owner;Avda. de la Constitución 2222;México D.F.;Mexico 10250|HANAR|4|08071996|05081996|12071996|2|65.83 10111314012345 11101314123456 10251|VICTE|3|08071996|05081996|15071996|1|41.34 11121314901234 10101314234567 ANTON;Antonio Moreno Taquería;Antonio Moreno;Owner;Mataderos 2312;México D.F.;Mexico BERGS;Berglunds snabbköp;Christina Berglund;Order Administrator;Berguvsvägen 8;Luleå;Sweden */ //-> /File //-> File:RunEngine.cs /// <summary> /// The idea of this engine is to parse files with different record types /// (this engine doesn't use any hierarical structure like the /// master-details, all the records are in linear relation for it). /// With the MultiRecordEngine you can parse also mixed delimited and /// fixed length records. /// </summary> public override void Run() { MultiRecordEngine engine; engine = new MultiRecordEngine(typeof(Orders), typeof(Customer), typeof(SampleType)); engine.RecordSelector = new RecordTypeSelector(CustomSelector); object[] res = engine.ReadFile("Input.txt"); foreach (var rec in res) this.Console.WriteLine(res.ToString()); }
public void MultpleRecordsAdvanced() { var myParserEngine = new MultiRecordEngine(typeof(RawCarrier), typeof(RawOrigin), typeof(RawDestination), typeof(RawShipment), typeof(RawShipmentDetail)) { RecordSelector = CustomRecordSelector }; var testString = @"Carrier|123123|117233|DA||| Origin|61|8120|Manufacturing A |Field Road||DALLAS|TX|9|US Destination|LO|0222|||ADINC| TURNPIKE||NT|NY|11003|US|56 Shipment|M00|| 9.00|Inches| 4.00|Inches| 7.00|Inches|2.000|lb|08/01/2010|15:43|U20|U0||90|1| 2|0001||| ShipmentDetail|LM000|805289078029|ORIGINAL|FR||NR| 2.000|0067|2001"; var result = myParserEngine.ReadString(testString); Check.That(result.Length).IsEqualTo(5); }
private void LoadDataButton_Click(object sender, EventArgs e) { openFileDialog1.Filter = "CINLIST|CINLIST"; if (openFileDialog1.ShowDialog() == DialogResult.OK) { dataFile = openFileDialog1.FileName; try { CopyrightRecordType = FixedLengthClassBuilder.ClassFromXmlFile("CinListCopyrightRecord.xml"); DetailRecordType = FixedLengthClassBuilder.ClassFromXmlFile("CinListDetailRecord.xml"); } catch (Exception ex) { MessageBox.Show( ex.Message, "Error loading RunTime Record Classes", MessageBoxButtons.OK, MessageBoxIcon.Error); dataFile = null; return; } try { engine = new MultiRecordEngine( new RecordTypeSelector(mySelector), CopyrightRecordType, DetailRecordType); engine.BeginReadFile(dataFile); } catch (Exception ex) { MessageBox.Show( ex.Message, "Error loading data file", MessageBoxButtons.OK, MessageBoxIcon.Error); dataFile = null; return; } } ToggleProcessButton(); }
//-> /File //-> To work with this engine you must create one instance of it in this way: public override void Run() { //-> File:RunEngine.cs var engine = new MultiRecordEngine(typeof (Orders), typeof (Customer), typeof (SampleType)); engine.RecordSelector = new RecordTypeSelector(CustomSelector); var res = engine.ReadFile("Input.txt"); foreach (var rec in res) Console.WriteLine(rec.ToString()); //-> /File }
public void MultpleRecordsFileAsync() { engine = new MultiRecordEngine(new RecordTypeSelector(CustomSelector), typeof(OrdersVerticalBar), typeof(CustomersSemiColon), typeof(SampleType)); var res = new ArrayList(); engine.BeginReadFile(FileTest.Good.MultiRecord1.Path); foreach (var o in engine) { res.Add(o); } Assert.AreEqual(12, res.Count); Assert.AreEqual(12, engine.TotalRecords); Assert.AreEqual(typeof(OrdersVerticalBar), res[0].GetType()); Assert.AreEqual(typeof(OrdersVerticalBar), res[1].GetType()); Assert.AreEqual(typeof(CustomersSemiColon), res[2].GetType()); Assert.AreEqual(typeof(SampleType), res[5].GetType()); }
private Type ABAFormatSelector(MultiRecordEngine engine, string recordLine) { if (recordLine.Length == 0) { return(null); } var type = Convert.ToInt32(recordLine[0]) - 48; // ascii 48 = '0' if (type == 0) { return(typeof(DescriptiveRecord)); } else if (type == 1) { return(typeof(DetailRecord)); } else if (type == 7) { return(typeof(FileTotalRecord)); } return(null); }
/// <summary> /// Read an external currency exchange file using MultiRecordEngine /// </summary> /// <param name="FullFilePath"></param> /// <returns>An single dimentional array with all the rows in the file</returns> public object[] ReadExternalCurrencyExchageFile(string FullFilePath) { try { FileInfo finfo = new FileInfo(FullFilePath); if (finfo.Length == 0) { throw new Exception($"The file <{FullFilePath}> is empty"); } using (FileStream fs = new FileStream(FullFilePath, FileMode.Open, FileAccess.Read)) { var engine = new MultiRecordEngine(typeof(CurrencyToConvert), typeof(CurrencyRate)); engine.RecordSelector = new RecordTypeSelector(CustomSelector); return(engine.ReadFile(FullFilePath)); } } catch (FileNotFoundException e) { throw new FileNotFoundException($"The file <{FullFilePath}> was not found: '{e.Message}'"); } catch (DirectoryNotFoundException e) { throw new DirectoryNotFoundException($"The directory was not found: '{e.Message}'"); } catch (IOException e) { throw new IOException($"The file <{FullFilePath}> could not be opened: '{e.Message}'"); } catch (Exception e) { throw new Exception($"An error in method ReadExternalCurrencyExchageFile : '{e.Message}'"); } }
/// <summary> /// Method to import file with the help of multi record engine /// </summary> /// <param name="filePath">path where file is located</param> /// <returns>list of data records in the file</returns> public List <DataRecord> EvaluateFileContents(string filePath) { List <DataRecord> results = new List <DataRecord>(); MultiRecordEngine file72ByteEngine = new MultiRecordEngine(typeof(DataRecord), typeof(ColumHeaderRecord), typeof(IgnoreRowRecord)) { RecordSelector = new RecordTypeSelector(CustomSelector), ErrorMode = ErrorMode.ThrowException }; var res = file72ByteEngine.ReadFile(filePath); foreach (var rec in res) { if (rec.GetType() == typeof(DataRecord)) { results.Add((DataRecord)rec); } else if (rec.GetType() == typeof(ColumHeaderRecord)) { var columnRecord = (ColumHeaderRecord)rec; if (!(ColumnHeader1.Equals(columnRecord.TeamName.ToLower(), StringComparison.OrdinalIgnoreCase) && ColumnHeader2.Equals(columnRecord.P.ToLower(), StringComparison.OrdinalIgnoreCase) && ColumnHeader3.Equals(columnRecord.W.ToLower(), StringComparison.OrdinalIgnoreCase) && ColumnHeader4.Equals(columnRecord.L.ToLower(), StringComparison.OrdinalIgnoreCase) && ColumnHeader5.Equals(columnRecord.D.ToLower(), StringComparison.OrdinalIgnoreCase) && ColumnHeader6.Equals(columnRecord.F.ToLower(), StringComparison.OrdinalIgnoreCase) && ColumnHeader7.Equals(columnRecord.A.ToLower(), StringComparison.OrdinalIgnoreCase) && ColumnHeader8.Equals(columnRecord.Pts.ToLower(), StringComparison.OrdinalIgnoreCase))) { throw new FormatException(ErrorMessageInvalidColumns); } } } return(results); }
public void readCSV(string fileName, string info) { var engine = new MultiRecordEngine(typeof(IP02_Boelo_CashIO), typeof(IP02_Boelo_CheckIO), typeof(IP02_Boelo_DepositIO)); engine.RecordSelector = new RecordTypeSelector(CustomSelector.CustomSelector); try { Console.WriteLine("File Opened"); //var res = engine.(fileName); ///// to Write use: //engine.WriteFile(fileName, res); //MessageBox.Show(res.ToString()); //foreach (var rec in res) //{ // Console.WriteLine(rec.ToString()); // MessageBox.Show(rec.ToString()); //} using (StreamWriter test = File.AppendText(fileName)) { test.WriteLine(info.ToString()); } } catch (FileNotFoundException ex) { //write error Console.WriteLine(ex); } }
private static Type CustomSelector(MultiRecordEngine engine, string recordString) { if (recordString.Length == 0) { return(null); } if (recordString.StartsWith(Constantes.TypeVendedor)) { return(typeof(VendedorViewModel)); } else if (recordString.StartsWith(Constantes.TypeCliente)) { return(typeof(ClienteViewModel)); } else if (recordString.StartsWith(Constantes.TypeVenda)) { return(typeof(VendaViewModel)); } else { return(null); } }
public void MultpleRecordsFileRW() { engine = new MultiRecordEngine(typeof(OrdersVerticalBar), typeof(CustomersSemiColon), typeof(SampleType)); engine.RecordSelector = new RecordTypeSelector(CustomSelector); object[] res2 = engine.ReadFile(Common.TestPath(@"Good\MultiRecord1.txt")); Assert.AreEqual(12, res2.Length); Assert.AreEqual(12, engine.TotalRecords); engine.WriteFile("tempMR.txt", res2); object[] res = engine.ReadFile("tempMR.txt"); File.Delete("tempMR.txt"); Assert.AreEqual(12, res.Length); Assert.AreEqual(12, engine.TotalRecords); Assert.AreEqual(typeof(OrdersVerticalBar), res[0].GetType()); Assert.AreEqual(typeof(OrdersVerticalBar), res[1].GetType()); Assert.AreEqual(typeof(CustomersSemiColon), res[2].GetType()); Assert.AreEqual(typeof(SampleType), res[5].GetType()); }
public bool WriteFileAddingSequence(string filename, Models.Files.PurchaseOrder.DataSequence.V3 data, bool checkseq) { List <object> writelist = new List <object>(); List <(string code, Type type)> used = new List <(string code, Type type)>(); bool success = false; short seqnum = 1; try { //build list data.FileHeaderRecord.SequenceNumber = seqnum++; writelist.Add(data.FileHeaderRecord); if ((from u in used where u.code == data.FileHeaderRecord.RecordCode select u.code).Count() == 0) { used.Add((data.FileHeaderRecord.RecordCode, typeof(Models.Files.PurchaseOrder.R00_ClientFileHeader))); } if (data.PurchaseOrders != null && data.PurchaseOrders.Count > 0) { foreach (Models.Files.PurchaseOrder.DataSequence.PurchaseOrder item in data.PurchaseOrders) { item.ClientHeaderRecord.SequenceNumber = seqnum++; writelist.Add(item.ClientHeaderRecord); if ((from u in used where u.code == item.ClientHeaderRecord.RecordCode select u.code).Count() == 0) { used.Add((item.ClientHeaderRecord.RecordCode, typeof(Models.Files.PurchaseOrder.R10_ClientHeader))); } if (Common.IsValid(item.FixedHandlingInstructionsRecord, checkseq) && !string.IsNullOrEmpty(item.FixedHandlingInstructionsRecord.PONumber)) { item.FixedHandlingInstructionsRecord.SequenceNumber = seqnum++; writelist.Add(item.FixedHandlingInstructionsRecord); if ((from u in used where u.code == item.FixedHandlingInstructionsRecord.RecordCode select u.code).Count() == 0) { used.Add((item.FixedHandlingInstructionsRecord.RecordCode, typeof(Models.Files.PurchaseOrder.R20_FixedSpecialHandlingInstructions))); } } if (Common.IsValid(item.PurchaseOrderOptionsRecord, checkseq)) { item.PurchaseOrderOptionsRecord.SequenceNumber = seqnum++; writelist.Add(item.PurchaseOrderOptionsRecord); if ((from u in used where u.code == item.PurchaseOrderOptionsRecord.RecordCode select u.code).Count() == 0) { used.Add((item.PurchaseOrderOptionsRecord.RecordCode, typeof(Models.Files.PurchaseOrder.R21_PurchaseOrderOptions))); } } if (item.PurchaseOrderDetails != null && item.PurchaseOrderDetails.Count > 0) { foreach (Models.Files.PurchaseOrder.DataSequence.PurchaseOrderDetail detail in item.PurchaseOrderDetails) { if (Common.IsValid(detail.LineItemDetail, checkseq)) { detail.LineItemDetail.SequenceNumber = seqnum++; writelist.Add(detail.LineItemDetail); if ((from u in used where u.code == detail.LineItemDetail.RecordCode select u.code).Count() == 0) { used.Add((detail.LineItemDetail.RecordCode, typeof(Models.Files.PurchaseOrder.R40_LineItemDetail))); } } if (Common.IsValid(detail.AdditionalLineItemDetail, checkseq)) { detail.AdditionalLineItemDetail.SequenceNumber = seqnum++; writelist.Add(detail.AdditionalLineItemDetail); if ((from u in used where u.code == detail.AdditionalLineItemDetail.RecordCode select u.code).Count() == 0) { used.Add((detail.AdditionalLineItemDetail.RecordCode, typeof(Models.Files.PurchaseOrder.R41_AdditionalLineItemDetail))); } } if (detail.Imprint != null && detail.Imprint.Count > 0) { foreach (Models.Files.PurchaseOrder.R45_Imprint imprint in detail.Imprint) { if (Common.IsValid(imprint, checkseq) && !string.IsNullOrEmpty(imprint.PONumber)) { imprint.SequenceNumber = seqnum++; writelist.Add(imprint); if ((from u in used where u.code == imprint.RecordCode select u.code).Count() == 0) { used.Add((imprint.RecordCode, typeof(Models.Files.PurchaseOrder.R45_Imprint))); } } } } if (Common.IsValid(detail.StickerBarcodeDataRecord, checkseq) && !string.IsNullOrEmpty(detail.StickerBarcodeDataRecord.PONumber)) { detail.StickerBarcodeDataRecord.SequenceNumber = seqnum++; writelist.Add(detail.StickerBarcodeDataRecord); if ((from u in used where u.code == detail.StickerBarcodeDataRecord.RecordCode select u.code).Count() == 0) { used.Add((detail.StickerBarcodeDataRecord.RecordCode, typeof(Models.Files.PurchaseOrder.R46_StickerBarcodeData))); } } if (detail.StickerTextLines != null && detail.StickerTextLines.Count > 0) { foreach (Models.Files.PurchaseOrder.R46_StickerTextLines text in detail.StickerTextLines) { if (Common.IsValid(text, checkseq) && !string.IsNullOrEmpty(text.PONumber)) { text.SequenceNumber = seqnum++; writelist.Add(text); if ((from u in used where u.code == text.RecordCode select u.code).Count() == 0) { used.Add((text.RecordCode, typeof(Models.Files.PurchaseOrder.R46_StickerBarcodeData))); } } } } } } } } if (Common.IsValid(data.PurchaseOrderTrailerRecord, checkseq)) { data.PurchaseOrderTrailerRecord.SequenceNumber = seqnum++; writelist.Add(data.PurchaseOrderTrailerRecord); if ((from u in used where u.code == data.PurchaseOrderTrailerRecord.RecordCode select u.code).Count() == 0) { used.Add((data.PurchaseOrderTrailerRecord.RecordCode, typeof(Models.Files.PurchaseOrder.R50_PurchaseOrderTrailer))); } } if (Common.IsValid(data.FileTrailerRecord, checkseq)) { data.FileTrailerRecord.SequenceNumber = seqnum++; writelist.Add(data.FileTrailerRecord); if ((from u in used where u.code == data.FileTrailerRecord.RecordCode select u.code).Count() == 0) { used.Add((data.FileTrailerRecord.RecordCode, typeof(Models.Files.PurchaseOrder.R90_FileTrailer))); } } MultiRecordEngine engine = new MultiRecordEngine ( (from u in used orderby u.code select u.type).Distinct().ToArray() ) { RecordSelector = new RecordTypeSelector(Models.Files.Invoice.Selectors.V3.Custom) }; engine.WriteFile(filename, writelist.ToArray()); success = true; } catch (Exception ex) { log.Error(ex); success = false; } return(success); }
public bool WriteFile(string filename, Models.Files.PurchaseOrder.DataSequence.V3 data, bool checkseq) { List <object> writelist = new List <object>(); bool success = false; try { //build list writelist.Add(data.FileHeaderRecord); if (data.PurchaseOrders != null && data.PurchaseOrders.Count > 0) { foreach (Models.Files.PurchaseOrder.DataSequence.PurchaseOrder item in data.PurchaseOrders) { writelist.Add(item.ClientHeaderRecord); if (Common.IsValid(item.FixedHandlingInstructionsRecord, checkseq)) { writelist.Add(item.FixedHandlingInstructionsRecord); } if (Common.IsValid(item.PurchaseOrderOptionsRecord, checkseq)) { writelist.Add(item.PurchaseOrderOptionsRecord); } if (item.PurchaseOrderDetails != null && item.PurchaseOrderDetails.Count > 0) { foreach (Models.Files.PurchaseOrder.DataSequence.PurchaseOrderDetail detail in item.PurchaseOrderDetails) { if (Common.IsValid(detail.LineItemDetail, checkseq)) { writelist.Add(detail.LineItemDetail); } if (Common.IsValid(detail.AdditionalLineItemDetail, checkseq)) { writelist.Add(detail.AdditionalLineItemDetail); } if (detail.Imprint != null && detail.Imprint.Count > 0) { foreach (Models.Files.PurchaseOrder.R45_Imprint imprint in detail.Imprint) { if (Common.IsValid(imprint, checkseq)) { writelist.Add(imprint); } } } if (Common.IsValid(detail.StickerBarcodeDataRecord, checkseq)) { writelist.Add(detail.StickerBarcodeDataRecord); } if (detail.StickerTextLines != null && detail.StickerTextLines.Count > 0) { foreach (Models.Files.PurchaseOrder.R46_StickerTextLines text in detail.StickerTextLines) { if (Common.IsValid(text, checkseq)) { writelist.Add(text); } } } } } } } if (Common.IsValid(data.PurchaseOrderTrailerRecord, checkseq)) { writelist.Add(data.PurchaseOrderTrailerRecord); } if (Common.IsValid(data.FileTrailerRecord, checkseq)) { writelist.Add(data.FileTrailerRecord); } MultiRecordEngine engine = new MultiRecordEngine ( typeof(Models.Files.PurchaseOrder.R00_ClientFileHeader), typeof(Models.Files.PurchaseOrder.R10_ClientHeader), typeof(Models.Files.PurchaseOrder.R20_FixedSpecialHandlingInstructions), typeof(Models.Files.PurchaseOrder.R21_PurchaseOrderOptions), typeof(Models.Files.PurchaseOrder.R40_LineItemDetail), typeof(Models.Files.PurchaseOrder.R41_AdditionalLineItemDetail), typeof(Models.Files.PurchaseOrder.R45_Imprint), typeof(Models.Files.PurchaseOrder.R46_StickerBarcodeData), typeof(Models.Files.PurchaseOrder.R46_StickerTextLines), typeof(Models.Files.PurchaseOrder.R50_PurchaseOrderTrailer), typeof(Models.Files.PurchaseOrder.R90_FileTrailer) ) { RecordSelector = new RecordTypeSelector(Models.Files.Invoice.Selectors.V3.Custom) }; engine.WriteFile(filename, writelist.ToArray()); success = true; } catch (Exception ex) { log.Error(ex); success = false; } return(success); }
public bool WriteFile(string filename, Models.Files.PurchaseAcknowledgement.DataSequence.V3 data) { List <object> writelist = new List <object>(); bool success = false; try { //build list writelist.Add(data.FileHeaderRecord); if (Common.IsValid(data.PurchaseOrderHeaderRecord)) { writelist.Add(data.PurchaseOrderHeaderRecord); } if (data.FreeFormVendor != null && data.FreeFormVendor.Count > 0) { foreach (Models.Files.PurchaseAcknowledgement.R21_FreeFormVendor item in data.FreeFormVendor) { if (Common.IsValid(item)) { writelist.Add(item); } } } if (Common.IsValid(data.RecipShipToNameAndAddressRecord)) { writelist.Add(data.RecipShipToNameAndAddressRecord); } if (data.RecipShipToAdditionalShippingInfo != null && data.RecipShipToAdditionalShippingInfo.Count > 0) { foreach (Models.Files.PurchaseAcknowledgement.R32_RecipientShipToAdditionalShippingInformation item in data.RecipShipToAdditionalShippingInfo) { if (Common.IsValid(item)) { writelist.Add(item); } } } if (Common.IsValid(data.RecipShipToCityStateAndZipRecord)) { writelist.Add(data.RecipShipToCityStateAndZipRecord); } if (data.LineItems != null && data.LineItems.Count > 0) { foreach (Models.Files.PurchaseAcknowledgement.DataSequence.LineItem item in data.LineItems) { if (Common.IsValid(item.LineItemRecord)) { writelist.Add(item.LineItemRecord); } if (Common.IsValid(item.AdditionalDetailRecord)) { writelist.Add(item.AdditionalDetailRecord); } if (Common.IsValid(item.AddtionalLineItemTitleRecord)) { writelist.Add(item.AddtionalLineItemTitleRecord); } if (Common.IsValid(item.AdditionalLineItemPublisherRecord)) { writelist.Add(item.AdditionalLineItemPublisherRecord); } if (Common.IsValid(item.ItemNumberOrPriceRecord)) { writelist.Add(item.ItemNumberOrPriceRecord); } } } if (Common.IsValid(data.PurchaseOrderControlTotalsRecord)) { writelist.Add(data.PurchaseOrderControlTotalsRecord); } if (Common.IsValid(data.FileTrailerRecord)) { writelist.Add(data.FileTrailerRecord); } MultiRecordEngine engine = new MultiRecordEngine ( typeof(Models.Files.PurchaseAcknowledgement.R02_FileHeader), typeof(Models.Files.PurchaseAcknowledgement.R11_PurchaseOrderHeader), typeof(Models.Files.PurchaseAcknowledgement.R21_FreeFormVendor), typeof(Models.Files.PurchaseAcknowledgement.R30_RecipientShipToNameAndAddress), typeof(Models.Files.PurchaseAcknowledgement.R32_RecipientShipToAdditionalShippingInformation), typeof(Models.Files.PurchaseAcknowledgement.R34_RecipientShipToCityStateAndZip), typeof(Models.Files.PurchaseAcknowledgement.R40_LineItem), typeof(Models.Files.PurchaseAcknowledgement.R41_AdditionalDetail), typeof(Models.Files.PurchaseAcknowledgement.R42_AdditionalLineItem), typeof(Models.Files.PurchaseAcknowledgement.R43_AdditionalLineItem), typeof(Models.Files.PurchaseAcknowledgement.R44_ItemNumberOrPrice), typeof(Models.Files.PurchaseAcknowledgement.R59_PurchaseOrderControlTotals), typeof(Models.Files.PurchaseAcknowledgement.R91_FileTrailer) ) { RecordSelector = new RecordTypeSelector(Models.Files.Invoice.Selectors.V3.Custom) }; engine.WriteFile(filename, writelist.ToArray()); success = true; } catch (Exception ex) { log.Error(ex); success = false; } return(success); }
public bool WriteFile(string filename, Models.Files.PurchaseOrder.DataSequence.V3 data) { List <object> writelist = new List <object>(); bool success = false; try { //build list writelist.Add(data.FileHeaderRecord); if (data.PurchaseOrders != null && data.PurchaseOrders.Count > 0) { foreach (Models.Files.PurchaseOrder.DataSequence.PurchaseOrder item in data.PurchaseOrders) { writelist.Add(item.ClientHeaderRecord); if (Common.IsValid(item.FixedHandlingInstructionsRecord)) { writelist.Add(item.FixedHandlingInstructionsRecord); } if (Common.IsValid(item.PurchaseOrderOptionsRecord)) { writelist.Add(item.PurchaseOrderOptionsRecord); } if (Common.IsValid(item.CustomerCostRecord)) { writelist.Add(item.CustomerCostRecord); } if (Common.IsValid(item.CustomerBillToNameRecord)) { writelist.Add(item.CustomerBillToNameRecord); } if (Common.IsValid(item.CustomerBillToPhoneNumberRecord)) { writelist.Add(item.CustomerBillToPhoneNumberRecord); } if (item.CustomerBillToAddressLine != null && item.CustomerBillToAddressLine.Count > 0) { foreach (Models.Files.PurchaseOrder.R27_CustomerBillToAddressLine detail in item.CustomerBillToAddressLine) { if (Common.IsValid(detail)) { writelist.Add(detail); } } } if (Common.IsValid(item.CustomerBillToCityStateZipRecord)) { writelist.Add(item.CustomerBillToCityStateZipRecord); } if (Common.IsValid(item.RecipientShipToNameRecord)) { writelist.Add(item.RecipientShipToNameRecord); } if (Common.IsValid(item.RecipientShipToPhoneRecord)) { writelist.Add(item.RecipientShipToPhoneRecord); } if (item.ShipRecordRecipientAddressLine != null && item.ShipRecordRecipientAddressLine.Count > 0) { foreach (Models.Files.PurchaseOrder.R32_ShippingRecordRecipientAddressLine detail in item.ShipRecordRecipientAddressLine) { if (Common.IsValid(detail)) { writelist.Add(detail); } } } if (Common.IsValid(item.RecipShippingRecordCityStateZipRecord)) { writelist.Add(item.RecipShippingRecordCityStateZipRecord); } if (Common.IsValid(item.DropShipDetailRecord)) { writelist.Add(item.DropShipDetailRecord); } if (item.SpecialDeliveryInstructions != null && item.SpecialDeliveryInstructions.Count > 0) { foreach (Models.Files.PurchaseOrder.R36_SpecialDeliveryInstructions detail in item.SpecialDeliveryInstructions) { if (Common.IsValid(detail)) { writelist.Add(detail); } } } if (item.MarketingMessage != null && item.MarketingMessage.Count > 0) { foreach (Models.Files.PurchaseOrder.R37_MarketingMessage detail in item.MarketingMessage) { if (Common.IsValid(detail)) { writelist.Add(detail); } } } if (item.GiftMessage != null && item.GiftMessage.Count > 0) { foreach (Models.Files.PurchaseOrder.R38_GiftMessage detail in item.GiftMessage) { if (Common.IsValid(detail)) { writelist.Add(detail); } } } if (item.Items != null && item.Items.Count > 0) { foreach (Models.Files.PurchaseOrder.DataSequence.Item lineitem in item.Items) { if (Common.IsValid(lineitem.LineItemRecord)) { writelist.Add(lineitem.LineItemRecord); } if (Common.IsValid(lineitem.AdditionalLineItemRecord)) { writelist.Add(lineitem.AdditionalLineItemRecord); } if (lineitem.LineItemGiftMessage != null && lineitem.LineItemGiftMessage.Count > 0) { foreach (Models.Files.PurchaseOrder.R42_LineItemGiftMessage detail in lineitem.LineItemGiftMessage) { if (Common.IsValid(detail)) { writelist.Add(detail); } } } if (lineitem.Imprint != null && lineitem.Imprint.Count > 0) { foreach (Models.Files.PurchaseOrder.R45_Imprint detail in lineitem.Imprint) { if (Common.IsValid(detail)) { writelist.Add(detail); } } } } } if (Common.IsValid(item.PurchaseOrderControlRecord)) { writelist.Add(item.PurchaseOrderControlRecord); } } } if (Common.IsValid(data.FileTrailerRecord)) { writelist.Add(data.FileTrailerRecord); } MultiRecordEngine engine = new MultiRecordEngine ( typeof(Models.Files.PurchaseOrder.R00_FileHeader), typeof(Models.Files.PurchaseOrder.R10_ClientHeader), typeof(Models.Files.PurchaseOrder.R20_FixedSpecialHandlingInstructions), typeof(Models.Files.PurchaseOrder.R21_PurchaseOrderOptions), typeof(Models.Files.PurchaseOrder.R24_CustomerCost), typeof(Models.Files.PurchaseOrder.R25_CustomerBillToName), typeof(Models.Files.PurchaseOrder.R26_CustomerBillToPhoneNumber), typeof(Models.Files.PurchaseOrder.R27_CustomerBillToAddressLine), typeof(Models.Files.PurchaseOrder.R29_CustomerBillToCityStateZip), typeof(Models.Files.PurchaseOrder.R30_RecipientShipToName), typeof(Models.Files.PurchaseOrder.R31_RecipientShipToPhone), typeof(Models.Files.PurchaseOrder.R32_ShippingRecordRecipientAddressLine), typeof(Models.Files.PurchaseOrder.R34_RecipientShippingRecordCityStateZip), typeof(Models.Files.PurchaseOrder.R35_DropShipDetail), typeof(Models.Files.PurchaseOrder.R36_SpecialDeliveryInstructions), typeof(Models.Files.PurchaseOrder.R37_MarketingMessage), typeof(Models.Files.PurchaseOrder.R38_GiftMessage), typeof(Models.Files.PurchaseOrder.R40_LineItem), typeof(Models.Files.PurchaseOrder.R41_AdditionalLineItem), typeof(Models.Files.PurchaseOrder.R42_LineItemGiftMessage), typeof(Models.Files.PurchaseOrder.R45_Imprint), typeof(Models.Files.PurchaseOrder.R50_PurchaseOrderControl), typeof(Models.Files.PurchaseOrder.R90_FileTrailer) ) { RecordSelector = new RecordTypeSelector(Models.Files.Invoice.Selectors.V3.Custom) }; engine.WriteFile(filename, writelist.ToArray()); success = true; } catch (Exception ex) { log.Error(ex); success = false; } return(success); }
public Models.Files.ShipNotice.DataSequence.V3 ReadFile(string filename, int batchnumber) { List <Models.Files.ShipNotice.CR_ASNCompany> cr = null; List <Models.Files.ShipNotice.OP_ASNPack> op = null; List <Models.Files.ShipNotice.OR_ASNShipment> or = null; List <Models.Files.ShipNotice.OD_ASNShipmentDetail> od = null; // Models.Files.ShipNotice.DataSequence.V3 file = null; List <Models.Files.ShipNotice.DataSequence.Shipment> allShipments = new List <Models.Files.ShipNotice.DataSequence.Shipment>(); Models.Files.ShipNotice.DataSequence.Shipment singleShipment = new Models.Files.ShipNotice.DataSequence.Shipment(); List <Models.Files.ShipNotice.OD_ASNShipmentDetail> details = new List <Models.Files.ShipNotice.OD_ASNShipmentDetail>(); // string typename = string.Empty; int shipmentsCount = 0; int detailsCount = 0; bool savedokay = false; try { MultiRecordEngine engine = new MultiRecordEngine ( typeof(Models.Files.ShipNotice.CR_ASNCompany), typeof(Models.Files.ShipNotice.OP_ASNPack), typeof(Models.Files.ShipNotice.OR_ASNShipment), typeof(Models.Files.ShipNotice.OD_ASNShipmentDetail) ) { RecordSelector = new RecordTypeSelector(Models.Files.ShipNotice.Selectors.V3.Custom) }; var res = engine.ReadFile(filename); if (res != null && res.Length > 0) { file = new Models.Files.ShipNotice.DataSequence.V3(); foreach (var rec in res) { typename = rec.GetType().Name.ToUpper(); switch (typename) { case "CR_ASNCOMPANY": Common.Initialize(ref cr); cr.Add((Models.Files.ShipNotice.CR_ASNCompany)rec); file.FileHeaderRecord = cr.LastItem(); break; case "OP_ASNPACK": Common.Initialize(ref op); op.Add((Models.Files.ShipNotice.OP_ASNPack)rec); file.PackRecord = op.LastItem(); break; case "OR_ASNSHIPMENT": Common.Initialize(ref or); or.Add((Models.Files.ShipNotice.OR_ASNShipment)rec); if (shipmentsCount > 0) { if (details != null) { singleShipment.LineItemDetailRecords.AddRange(details); details = null; detailsCount = 0; } if (file.Shipments == null) { file.Shipments = new List <Models.Files.ShipNotice.DataSequence.Shipment>(); } file.Shipments.Add(singleShipment); } shipmentsCount++; singleShipment = new Models.Files.ShipNotice.DataSequence.Shipment() { ShipmentRecord = new Models.Files.ShipNotice.OR_ASNShipment(), LineItemDetailRecords = new List <Models.Files.ShipNotice.OD_ASNShipmentDetail>() }; singleShipment.ShipmentRecord = or.LastItem(); break; case "OD_ASNSHIPMENTDETAIL": Common.Initialize(ref od); od.Add((Models.Files.ShipNotice.OD_ASNShipmentDetail)rec); if (detailsCount == 0) { details = new List <Models.Files.ShipNotice.OD_ASNShipmentDetail>(); } detailsCount++; details.Add(od.LastItem()); break; } } if (details != null) { singleShipment.LineItemDetailRecords.AddRange(details); details = null; detailsCount = 0; file.Shipments.Add(singleShipment); } using (SQL sql = new SQL(batchnumber, cr, od, op, or)) { savedokay = sql.Successful; } } } catch (Exception ex) { log.Error(ex); } return(file); }
public List <Models.Files.ShipNotice.DataSequence.V3> ReadFile(string filename, int batchnumber) { List <Models.Files.ShipNotice.CR_CompanyRecord> saveRCR = null; List <Models.Files.ShipNotice.OR_OrderRecord> saveROR = null; List <Models.Files.ShipNotice.OD_OrderDetailRecord> saveROD = null; // List <Models.Files.ShipNotice.DataSequence.V3> file = null; Models.Files.ShipNotice.DataSequence.V3 notice = null; Models.Files.ShipNotice.DataSequence.Shipment shipment = new Models.Files.ShipNotice.DataSequence.Shipment(); List <Models.Files.ShipNotice.OD_OrderDetailRecord> detail = new List <Models.Files.ShipNotice.OD_OrderDetailRecord>(); string typename = string.Empty; int shipmentCount = 0; int detailCount = 0; int noticeCount = 0; bool savedokay = false; try { MultiRecordEngine engine = new MultiRecordEngine ( typeof(Models.Files.ShipNotice.CR_CompanyRecord), typeof(Models.Files.ShipNotice.OD_OrderDetailRecord), typeof(Models.Files.ShipNotice.OR_OrderRecord) ) { RecordSelector = new RecordTypeSelector(Models.Files.ShipNotice.Selectors.V3.Custom) }; var res = engine.ReadFile(filename); if (res != null && res.Length > 0) { file = new List <Models.Files.ShipNotice.DataSequence.V3>(); foreach (var rec in res) { typename = rec.GetType().Name.ToUpper(); switch (typename) { case "CR_COMPANYRECORD": Common.Initialize(ref saveRCR); saveRCR.Add((Models.Files.ShipNotice.CR_CompanyRecord)rec); if (noticeCount > 0) { if (detailCount > 0) { if (detail != null) { shipment.OrderDetail = detail; shipment.OrderRecord = saveROR.LastItem(); detail = null; detailCount = 0; } } if (shipment != null) { if (notice.Shipments == null) { notice.Shipments = new List <Models.Files.ShipNotice.DataSequence.Shipment>(); } notice.Shipments.Add(shipment); shipment = null; shipmentCount = 0; } if (notice != null) { file.Add(notice); notice = null; } } noticeCount++; notice = new Models.Files.ShipNotice.DataSequence.V3() { CompanyRecord = saveRCR.LastItem() }; break; case "OR_ORDERRECORD": Common.Initialize(ref saveROR); saveROR.Add((Models.Files.ShipNotice.OR_OrderRecord)rec); shipmentCount++; if (shipment == null) { shipment = new Models.Files.ShipNotice.DataSequence.Shipment() { OrderRecord = new Models.Files.ShipNotice.OR_OrderRecord(), OrderDetail = new List <Models.Files.ShipNotice.OD_OrderDetailRecord>() }; } shipment.OrderRecord = saveROR.LastItem(); break; case "OD_ORDERDETAILRECORD": Common.Initialize(ref saveROD); saveROD.Add((Models.Files.ShipNotice.OD_OrderDetailRecord)rec); if (detailCount == 0) { detail = new List <Models.Files.ShipNotice.OD_OrderDetailRecord>(); } detailCount++; detail.Add(saveROD.LastItem()); break; } } if (detail != null) { shipment.OrderDetail.AddRange(detail); detail = null; detailCount = 0; notice.Shipments.Add(shipment); } if (notice != null) { file.Add(notice); notice = null; } } using (SQL sql = new SQL(batchnumber, saveRCR, saveROD, saveROR)) { savedokay = sql.Successful; } } catch (Exception ex) { log.Error(ex); } return(file); }
public AsyncEnumerator(MultiRecordEngine engine) { mEngine = engine; }
private Type CustomSelectorReturningBadType(MultiRecordEngine engine, string record) { return(typeof(string)); }
private Type mySelector(MultiRecordEngine unused, string record) { if (record[0] == 'C') return CopyrightRecordType; else if (record[0] == 'D') return DetailRecordType; else throw new Exception(); }
public bool WriteFile(string filename, Models.Files.Invoice.DataSequence.V3 data) { List <object> writelist = new List <object>(); bool success = false; try { //build list writelist.Add(data.InvoiceFileHeaderRecord); if (data.Invoices != null && data.Invoices.Count > 0) { foreach (Models.Files.Invoice.DataSequence.InvoiceItem item in data.Invoices) { if (Common.IsValid(item.InvoiceHeaderRecord)) { writelist.Add(item.InvoiceHeaderRecord); } foreach (Models.Files.Invoice.DataSequence.InvoiceDetail detail in item.InvoiceDetails) { if (Common.IsValid(detail.InvoiceDetailRecord)) { writelist.Add(detail.InvoiceDetailRecord); } if (Common.IsValid(detail.InvoiceDetail2Record)) { writelist.Add(detail.InvoiceDetail2Record); } if (Common.IsValid(detail.DetailTotalRecord)) { writelist.Add(detail.DetailTotalRecord); } if (Common.IsValid(detail.DetailTotalOrFreightAndFeesRecord)) { writelist.Add(detail.DetailTotalOrFreightAndFeesRecord); } } if (Common.IsValid(item.InvoiceTotalRecord)) { writelist.Add(item.InvoiceTotalRecord); } if (Common.IsValid(item.InvoiceTrailerRecord)) { writelist.Add(item.InvoiceTrailerRecord); } } } if (Common.IsValid(data.InvoiceFileTrailerRecord)) { writelist.Add(data.InvoiceFileTrailerRecord); } MultiRecordEngine engine = new MultiRecordEngine ( typeof(Models.Files.Invoice.R01_InvoiceFileHeader), typeof(Models.Files.Invoice.R15_InvoiceHeader), typeof(Models.Files.Invoice.R45_InvoiceDetail), typeof(Models.Files.Invoice.R46_InvoiceDetail), typeof(Models.Files.Invoice.R48_DetailTotal), typeof(Models.Files.Invoice.R49_DetailTotalOrFreightAndFees), typeof(Models.Files.Invoice.R55_InvoiceTotals), typeof(Models.Files.Invoice.R57_InvoiceTrailer), typeof(Models.Files.Invoice.R95_InvoiceFileTrailer) ) { RecordSelector = new RecordTypeSelector(Models.Files.Invoice.Selectors.V3.Custom) }; engine.WriteFile(filename, writelist.ToArray()); success = true; } catch (Exception ex) { log.Error(ex); success = false; } return(success); }
public bool PurchaseOrders(Concentrator.Objects.Models.Orders.Order order, List <Concentrator.Objects.Models.Orders.OrderLine> orderLines, Concentrator.Objects.Models.Vendors.Vendor administrativeVendor, Concentrator.Objects.Models.Vendors.Vendor vendor, bool directShipment, IUnitOfWork unit, ILog logger) { var filiaal890StockType = unit.Scope.Repository <VendorStockType>().GetSingle(x => x.StockType == "Filiaal890"); if (filiaal890StockType == null) { throw new Exception("Stocklocation Filiaal890 does not exists, skip order process"); } var cmStockType = unit.Scope.Repository <VendorStockType>().GetSingle(x => x.StockType == "CM"); if (cmStockType == null) { throw new Exception("Stocklocation CM does not exists, skip order process"); } var transferStockType = unit.Scope.Repository <VendorStockType>().GetSingle(x => x.StockType == "Transfer"); if (transferStockType == null) { throw new Exception("Stocklocation Transfer does not exists, skip order process"); } var webShopStockType = unit.Scope.Repository <VendorStockType>().GetSingle(x => x.StockType == "Webshop"); if (webShopStockType == null) { throw new Exception("Stocklocation Webshop does not exists, skip order process"); } var fileLocation = vendor.VendorSettings.GetValueByKey("casmutLocation", string.Empty); if (string.IsNullOrEmpty(fileLocation)) { throw new Exception("No camutlocation vendorsetting for vendor" + vendor.VendorID); } #region File Network Location NetworkExportUtility util = new NetworkExportUtility(); var userName = vendor.VendorSettings.GetValueByKey("CasMutLocationUserName", string.Empty); if (string.IsNullOrEmpty(userName)) { throw new Exception("No Casmutlocation UserName"); } var password = vendor.VendorSettings.GetValueByKey("CasMutLocationPassword", string.Empty); if (string.IsNullOrEmpty(password)) { throw new Exception("No Casmutlocation Password"); } #if DEBUG fileLocation = @"D:\tmp\CC"; #else fileLocation = util.ConnectorNetworkPath(fileLocation, "Y:", userName, password); #endif #endregion var triggerFilePath = Path.Combine(fileLocation, "kasmut.oke"); if (File.Exists(triggerFilePath)) { try { File.Delete(triggerFilePath); } catch (Exception) { } //in case in use by PFA process } using (var engine = new MultiRecordEngine(typeof(Casmut), typeof(DatColNormalSales))) { var file = Path.Combine(fileLocation, "kasmut"); if (!File.Exists(file)) { File.Create(file).Dispose(); } engine.BeginAppendToFile(file); orderLines.Where(c => (!c.Product.IsNonAssortmentItem.HasValue || (c.Product.IsNonAssortmentItem.HasValue && !c.Product.IsNonAssortmentItem.Value))).ToList().ForEach(line => { var filiaal890Stock = line.Product.VendorStocks.FirstOrDefault(x => x.VendorStockTypeID == filiaal890StockType.VendorStockTypeID && x.VendorID == 1); if (filiaal890Stock == null) { throw new Exception(string.Format("Stocklocation Filiaal890 does not exists for product {0}, skip order process", line.ProductID)); } var cmStock = line.Product.VendorStocks.FirstOrDefault(x => x.VendorStockTypeID == cmStockType.VendorStockTypeID && x.VendorID == 1); if (cmStock == null) { throw new Exception(string.Format("Stocklocation CM does not exists for product {0}, skip order process", line.ProductID)); } var transferStock = line.Product.VendorStocks.FirstOrDefault(x => x.VendorStockTypeID == transferStockType.VendorStockTypeID && x.VendorID == 1); if (transferStock == null) { throw new Exception(string.Format("Stocklocation Transfer does not exists for product {0}, skip order process", line.ProductID)); } var webshopStock = line.Product.VendorStocks.FirstOrDefault(x => x.VendorStockTypeID == webShopStockType.VendorStockTypeID && x.VendorID == 1); if (webshopStock == null) { throw new Exception(string.Format("Stocklocation Webshop does not exists for product {0}, skip order process", line.ProductID)); } try { logger.Info("For order " + order.WebSiteOrderNumber + " and orderline " + line.OrderLineID); logger.Info("Transfer quantity is " + transferStock.QuantityOnHand); logger.Info("CM quantity is " + cmStock.QuantityOnHand); logger.Info("WMS quantity is " + filiaal890Stock.QuantityOnHand); logger.Info("Desired qty is " + line.Quantity); } catch (Exception) { } int transferQuantity = (filiaal890Stock.QuantityOnHand + transferStock.QuantityOnHand) - line.Quantity; if (transferQuantity < 0) { int transferPrePickQuanity = cmStock.QuantityOnHand - Math.Abs(transferQuantity); int quantityToDispatch = Math.Abs(transferQuantity); if (transferPrePickQuanity < 0) { quantityToDispatch = Math.Abs(transferQuantity) - Math.Abs(transferPrePickQuanity); } if (quantityToDispatch < Math.Abs(transferQuantity)) { int quantityCancelled = Math.Abs(transferQuantity) - quantityToDispatch; line.SetStatus(OrderLineStatus.Cancelled, unit.Scope.Repository <OrderLedger>(), quantityCancelled); CancelLine(line, unit, quantityCancelled, "Out of stock, no CM stock availible"); } if (quantityToDispatch > 0) { var barcode = line.Product.ProductBarcodes.FirstOrDefault(x => x.BarcodeType.HasValue && x.BarcodeType.Value == 0); Casmut casmut = new Casmut() { EAN = barcode != null ? barcode.Barcode : string.Empty, PickTicketNumber = line.OrderLineID, PosNumber = 100, TicketNumber = line.OrderLineID, SalesDate = DateTime.Now, ShopNumber = 890, SKUCount = quantityToDispatch }; line.SetStatus(OrderLineStatus.ProcessedKasmut, unit.Scope.Repository <OrderLedger>(), quantityToDispatch); // If complete quantity is send if (quantityToDispatch == line.Quantity) { line.SetStatus(OrderLineStatus.ProcessedExportNotification, unit.Scope.Repository <OrderLedger>()); } casmut.SalesValue = (int)Math.Round((double)(line.UnitPrice.HasValue ? (int)Math.Round((((line.UnitPrice.Value - (line.LineDiscount.HasValue ? line.LineDiscount.Value : 0)) * quantityToDispatch) * 100)) : 0)); engine.WriteNext(casmut); #if DEBUG engine.Flush(); #endif cmStock.QuantityOnHand = cmStock.QuantityOnHand - quantityToDispatch; transferStock.QuantityOnHand = transferStock.QuantityOnHand + quantityToDispatch; unit.Save(); } } filiaal890Stock.QuantityOnHand = filiaal890Stock.QuantityOnHand - line.GetDispatchQuantity(); webshopStock.QuantityOnHand = cmStock.QuantityOnHand + transferStock.QuantityOnHand + filiaal890Stock.QuantityOnHand; line.SetStatus(OrderLineStatus.ReadyToOrder, unit.Scope.Repository <OrderLedger>()); try { logger.Info("After processing for order " + order.WebSiteOrderNumber + " and orderline " + line.OrderLineID); logger.Info("Transfer quantity is " + transferStock.QuantityOnHand); logger.Info("CM quantity is " + cmStock.QuantityOnHand); logger.Info("WMS quantity is " + filiaal890Stock.QuantityOnHand); } catch (Exception e) { logger.Debug(e); } }); engine.Flush(); #if !DEBUG util.DisconnectNetworkPath(fileLocation); #endif } if (!File.Exists(triggerFilePath)) { try { File.Create(triggerFilePath); } catch (Exception) { } } unit.Save(); return(false); }
public static Type Custom(MultiRecordEngine engine, string recordLine) { Console.WriteLine(recordLine); Type type = null; switch (recordLine.Substring(0, 2)) { case "02": type = typeof(R02_FileHeader); break; case "11": type = typeof(R11_PurchaseOrderHeader); break; case "21": type = typeof(R21_FreeFormVendor); break; case "30": type = typeof(R30_RecipientShipToNameAndAddress); break; case "32": type = typeof(R32_RecipientShipToAdditionalShippingInformation); break; case "34": type = typeof(R34_RecipientShipToCityStateAndZip); break; case "40": type = typeof(R40_LineItem); break; case "41": type = typeof(R41_AdditionalDetail); break; case "42": type = typeof(R42_AdditionalLineItem); break; case "43": type = typeof(R43_AdditionalLineItem); break; case "44": type = typeof(R44_ItemNumberOrPrice); break; case "59": type = typeof(R59_PurchaseOrderControlTotals); break; case "91": type = typeof(R91_FileTrailer); break; } return(type); }
private Program(IDictionary<string, Type> recordTypes) { this.recordTypes = recordTypes; engine = new MultiRecordEngine(recordTypes.Values.ToArray()); engine.RecordSelector = new RecordTypeSelector(CustomSelector); }
public Models.Files.Invoice.DataSequence.V3 ReadFile(string filename, int batchnumber) { List <Models.Files.Invoice.R01_InvoiceFileHeader> r01 = null; List <Models.Files.Invoice.R15_InvoiceHeader> r15 = null; List <Models.Files.Invoice.R45_InvoiceDetail> r45 = null; List <Models.Files.Invoice.R46_InvoiceDetail> r46 = null; List <Models.Files.Invoice.R48_DetailTotal> r48 = null; List <Models.Files.Invoice.R49_DetailTotalOrFreightAndFees> r49 = null; List <Models.Files.Invoice.R55_InvoiceTotals> r55 = null; List <Models.Files.Invoice.R57_InvoiceTrailer> r57 = null; List <Models.Files.Invoice.R95_InvoiceFileTrailer> r95 = null; // Models.Files.Invoice.DataSequence.V3 file = null; Models.Files.Invoice.DataSequence.InvoiceItem invoice = null; Models.Files.Invoice.DataSequence.InvoiceDetail detail = null; // string typename; int invoiceCount = 0; int detailCount = 0; bool savedokay = false; try { MultiRecordEngine engine = new MultiRecordEngine ( typeof(Models.Files.Invoice.R01_InvoiceFileHeader), typeof(Models.Files.Invoice.R15_InvoiceHeader), typeof(Models.Files.Invoice.R45_InvoiceDetail), typeof(Models.Files.Invoice.R46_InvoiceDetail), typeof(Models.Files.Invoice.R48_DetailTotal), typeof(Models.Files.Invoice.R49_DetailTotalOrFreightAndFees), typeof(Models.Files.Invoice.R55_InvoiceTotals), typeof(Models.Files.Invoice.R57_InvoiceTrailer), typeof(Models.Files.Invoice.R95_InvoiceFileTrailer) ) { RecordSelector = new RecordTypeSelector(Models.Files.Invoice.Selectors.V3.Custom) }; var res = engine.ReadFile(filename); if (res != null && res.Length > 0) { file = new Models.Files.Invoice.DataSequence.V3(); foreach (var rec in res) { typename = rec.GetType().Name.ToUpper(); switch (typename) { case "R01_INVOICEFILEHEADER": Common.Initialize(ref r01); r01.Add((Models.Files.Invoice.R01_InvoiceFileHeader)rec); file.InvoiceFileHeaderRecord = r01.LastItem(); break; case "R15_INVOICEHEADER": Common.Initialize(ref r15); r15.Add((Models.Files.Invoice.R15_InvoiceHeader)rec); if (invoiceCount > 0) { if (invoice != null) { file.Invoices.Add(invoice); invoice = null; } } invoiceCount++; if (invoice == null) { invoice = new Models.Files.Invoice.DataSequence.InvoiceItem(); } invoice.InvoiceHeaderRecord = r15.LastItem(); break; case "R45_INVOICEDETAIL": Common.Initialize(ref r45); r45.Add((Models.Files.Invoice.R45_InvoiceDetail)rec); if (detailCount > 0) { if (detail != null) { invoice.InvoiceDetails.Add(detail); detail = null; } } detailCount++; if (detail == null) { detail = new Models.Files.Invoice.DataSequence.InvoiceDetail(); } detail.InvoiceDetailRecord = r45.LastItem(); break; case "R46_INVOICEDETAIL": Common.Initialize(ref r46); r46.Add((Models.Files.Invoice.R46_InvoiceDetail)rec); detail.InvoiceDetail2Record = r46.LastItem(); break; case "R48_DETAILTOTAL": Common.Initialize(ref r48); r48.Add((Models.Files.Invoice.R48_DetailTotal)rec); detail.DetailTotalRecord = r48.LastItem(); break; case "R49_DETAILTOTALORFREIGHTANDFEES": Common.Initialize(ref r49); r49.Add((Models.Files.Invoice.R49_DetailTotalOrFreightAndFees)rec); detail.DetailTotalOrFreightAndFeesRecord = r49.LastItem(); break; case "R55_INVOICETOTALS": Common.Initialize(ref r55); r55.Add((Models.Files.Invoice.R55_InvoiceTotals)rec); invoice.InvoiceTotalRecord = r55.LastItem(); if (detail != null) { invoice.InvoiceDetails.Add(detail); detail = null; } break; case "R57_INVOICETRAILER": Common.Initialize(ref r57); r57.Add((Models.Files.Invoice.R57_InvoiceTrailer)rec); if (detail != null) { invoice.InvoiceDetails.Add(detail); detail = null; } invoice.InvoiceTrailerRecord = r57.LastItem(); break; case "R95_INVOICEFILETRAILER": Common.Initialize(ref r95); r95.Add((Models.Files.Invoice.R95_InvoiceFileTrailer)rec); file.InvoiceFileTrailerRecord = r95.LastItem(); break; } } if (invoice != null) { file.Invoices.Add(invoice); invoice = null; } using (SQL sql = new SQL(batchnumber, r01, r15, r45, r46, r48, r49, r55, r57, r95)) { savedokay = sql.Successful; } } } catch (Exception ex) { log.Error(ex); } return(file); }
public void NoSelector() { engine = new MultiRecordEngine(typeof(CustomersVerticalBar), typeof(CustomersTab)); }
public Models.Files.PurchaseOrder.DataSequence.V3 ReadFile(string filename, int batchnumber) { List <Models.Files.PurchaseOrder.R00_FileHeader> r00 = null; List <Models.Files.PurchaseOrder.R10_ClientHeader> r10 = null; List <Models.Files.PurchaseOrder.R20_FixedSpecialHandlingInstructions> r20 = null; List <Models.Files.PurchaseOrder.R21_PurchaseOrderOptions> r21 = null; List <Models.Files.PurchaseOrder.R24_CustomerCost> r24 = null; List <Models.Files.PurchaseOrder.R25_CustomerBillToName> r25 = null; List <Models.Files.PurchaseOrder.R26_CustomerBillToPhoneNumber> r26 = null; List <Models.Files.PurchaseOrder.R27_CustomerBillToAddressLine> r27 = null; List <Models.Files.PurchaseOrder.R29_CustomerBillToCityStateZip> r29 = null; List <Models.Files.PurchaseOrder.R30_RecipientShipToName> r30 = null; List <Models.Files.PurchaseOrder.R31_RecipientShipToPhone> r31 = null; List <Models.Files.PurchaseOrder.R32_ShippingRecordRecipientAddressLine> r32 = null; List <Models.Files.PurchaseOrder.R34_RecipientShippingRecordCityStateZip> r34 = null; List <Models.Files.PurchaseOrder.R35_DropShipDetail> r35 = null; List <Models.Files.PurchaseOrder.R36_SpecialDeliveryInstructions> r36 = null; List <Models.Files.PurchaseOrder.R37_MarketingMessage> r37 = null; List <Models.Files.PurchaseOrder.R38_GiftMessage> r38 = null; List <Models.Files.PurchaseOrder.R40_LineItem> r40 = null; List <Models.Files.PurchaseOrder.R41_AdditionalLineItem> r41 = null; List <Models.Files.PurchaseOrder.R42_LineItemGiftMessage> r42 = null; List <Models.Files.PurchaseOrder.R45_Imprint> r45 = null; List <Models.Files.PurchaseOrder.R50_PurchaseOrderControl> r50 = null; List <Models.Files.PurchaseOrder.R90_FileTrailer> r90 = null; // Models.Files.PurchaseOrder.DataSequence.V3 file = null; Models.Files.PurchaseOrder.DataSequence.PurchaseOrder order = null; Models.Files.PurchaseOrder.DataSequence.Item item = null; // string typename = string.Empty; int orderCount = 0; int itemCount = 0; bool savedokay = false; try { MultiRecordEngine engine = new MultiRecordEngine ( typeof(Models.Files.PurchaseOrder.R00_FileHeader), typeof(Models.Files.PurchaseOrder.R10_ClientHeader), typeof(Models.Files.PurchaseOrder.R20_FixedSpecialHandlingInstructions), typeof(Models.Files.PurchaseOrder.R21_PurchaseOrderOptions), typeof(Models.Files.PurchaseOrder.R24_CustomerCost), typeof(Models.Files.PurchaseOrder.R25_CustomerBillToName), typeof(Models.Files.PurchaseOrder.R26_CustomerBillToPhoneNumber), typeof(Models.Files.PurchaseOrder.R27_CustomerBillToAddressLine), typeof(Models.Files.PurchaseOrder.R29_CustomerBillToCityStateZip), typeof(Models.Files.PurchaseOrder.R30_RecipientShipToName), typeof(Models.Files.PurchaseOrder.R31_RecipientShipToPhone), typeof(Models.Files.PurchaseOrder.R32_ShippingRecordRecipientAddressLine), typeof(Models.Files.PurchaseOrder.R34_RecipientShippingRecordCityStateZip), typeof(Models.Files.PurchaseOrder.R35_DropShipDetail), typeof(Models.Files.PurchaseOrder.R36_SpecialDeliveryInstructions), typeof(Models.Files.PurchaseOrder.R37_MarketingMessage), typeof(Models.Files.PurchaseOrder.R38_GiftMessage), typeof(Models.Files.PurchaseOrder.R40_LineItem), typeof(Models.Files.PurchaseOrder.R41_AdditionalLineItem), typeof(Models.Files.PurchaseOrder.R42_LineItemGiftMessage), typeof(Models.Files.PurchaseOrder.R45_Imprint), typeof(Models.Files.PurchaseOrder.R50_PurchaseOrderControl), typeof(Models.Files.PurchaseOrder.R90_FileTrailer) ) { RecordSelector = new RecordTypeSelector(Models.Files.PurchaseOrder.Selectors.V3.Custom) }; var res = engine.ReadFile(filename); if (res != null && res.Length > 0) { file = new Models.Files.PurchaseOrder.DataSequence.V3(); foreach (var rec in res) { typename = rec.GetType().Name.ToUpper(); switch (typename) { case "R00_FILEHEADER": Common.Initialize(ref r00); r00.Add((Models.Files.PurchaseOrder.R00_FileHeader)rec); file.FileHeaderRecord = r00.LastItem(); break; case "R10_CLIENTHEADER": Common.Initialize(ref r10); r10.Add((Models.Files.PurchaseOrder.R10_ClientHeader)rec); if (orderCount > 0) { if (file.PurchaseOrders == null) { file.PurchaseOrders = new List <Models.Files.PurchaseOrder.DataSequence.PurchaseOrder>(); } if (order != null) { file.PurchaseOrders.Add(order); order = null; } } orderCount++; order = new Models.Files.PurchaseOrder.DataSequence.PurchaseOrder { ClientHeaderRecord = r10.LastItem() }; break; case "R20_FIXEDSPECIALHANDLINGINSTRUCTIONS": Common.Initialize(ref r20); r20.Add((Models.Files.PurchaseOrder.R20_FixedSpecialHandlingInstructions)rec); order.FixedHandlingInstructionsRecord = r20.LastItem(); break; case "R21_PURCHASEORDEROPTIONS": Common.Initialize(ref r21); r21.Add((Models.Files.PurchaseOrder.R21_PurchaseOrderOptions)rec); order.PurchaseOrderOptionsRecord = r21.LastItem(); break; case "R24_CUSTOMERCOST": Common.Initialize(ref r24); r24.Add((Models.Files.PurchaseOrder.R24_CustomerCost)rec); order.CustomerCostRecord = r24.LastItem(); break; case "R25_CUSTOMERBILLTONAME": Common.Initialize(ref r25); r25.Add((Models.Files.PurchaseOrder.R25_CustomerBillToName)rec); order.CustomerBillToNameRecord = r25.LastItem(); break; case "R26_CUSTOMERBILLTOPHONENUMBER": Common.Initialize(ref r26); r26.Add((Models.Files.PurchaseOrder.R26_CustomerBillToPhoneNumber)rec); order.CustomerBillToPhoneNumberRecord = r26.LastItem(); break; case "R27_CUSTOMERBILLTOADDRESSLINE": Common.Initialize(ref r27); r27.Add((Models.Files.PurchaseOrder.R27_CustomerBillToAddressLine)rec); if (order.CustomerBillToAddressLine == null) { order.CustomerBillToAddressLine = new List <Models.Files.PurchaseOrder.R27_CustomerBillToAddressLine>(); } if (order.CustomerBillToAddressLine.Count < file.Maxes[typename]) { order.CustomerBillToAddressLine.Add(r27.LastItem()); } break; case "R29_CUSTOMERBILLTOCITYSTATEZIP": Common.Initialize(ref r29); r29.Add((Models.Files.PurchaseOrder.R29_CustomerBillToCityStateZip)rec); order.CustomerBillToCityStateZipRecord = r29.LastItem(); break; case "R30_RECIPIENTSHIPTONAME": Common.Initialize(ref r30); r30.Add((Models.Files.PurchaseOrder.R30_RecipientShipToName)rec); order.RecipientShipToNameRecord = r30.LastItem(); break; case "R31_RECIPIENTSHIPTOPHONE": Common.Initialize(ref r31); r31.Add((Models.Files.PurchaseOrder.R31_RecipientShipToPhone)rec); order.RecipientShipToPhoneRecord = r31.LastItem(); break; case "R32_SHIPPINGRECORDRECIPIENTADDRESSLINE": Common.Initialize(ref r32); r32.Add((Models.Files.PurchaseOrder.R32_ShippingRecordRecipientAddressLine)rec); if (order.ShipRecordRecipientAddressLine == null) { order.ShipRecordRecipientAddressLine = new List <Models.Files.PurchaseOrder.R32_ShippingRecordRecipientAddressLine>(); } if (order.ShipRecordRecipientAddressLine.Count < file.Maxes[typename]) { order.ShipRecordRecipientAddressLine.Add(r32.LastItem()); } break; case "R34_RECIPIENTSHIPPINGRECORDCITYSTATEZIP": Common.Initialize(ref r34); r34.Add((Models.Files.PurchaseOrder.R34_RecipientShippingRecordCityStateZip)rec); order.RecipShippingRecordCityStateZipRecord = r34.LastItem(); break; case "R35_DROPSHIPDETAIL": Common.Initialize(ref r35); r35.Add((Models.Files.PurchaseOrder.R35_DropShipDetail)rec); order.DropShipDetailRecord = r35.LastItem(); break; case "R36_SPECIALDELIVERYINSTRUCTIONS": Common.Initialize(ref r36); r36.Add((Models.Files.PurchaseOrder.R36_SpecialDeliveryInstructions)rec); if (order.SpecialDeliveryInstructions == null) { order.SpecialDeliveryInstructions = new List <Models.Files.PurchaseOrder.R36_SpecialDeliveryInstructions>(); } if (order.SpecialDeliveryInstructions.Count < file.Maxes[typename]) { order.SpecialDeliveryInstructions.Add(r36.LastItem()); } break; case "R37_MARKETINGMESSAGE": Common.Initialize(ref r37); r37.Add((Models.Files.PurchaseOrder.R37_MarketingMessage)rec); if (order.MarketingMessage == null) { order.MarketingMessage = new List <Models.Files.PurchaseOrder.R37_MarketingMessage>(); } if (order.MarketingMessage.Count < file.Maxes[typename]) { order.MarketingMessage.Add(r37.LastItem()); } break; case "R38_GIFTMESSAGE": Common.Initialize(ref r38); r38.Add((Models.Files.PurchaseOrder.R38_GiftMessage)rec); if (order.GiftMessage == null) { order.GiftMessage = new List <Models.Files.PurchaseOrder.R38_GiftMessage>(); } if (order.GiftMessage.Count < file.Maxes[typename]) { order.GiftMessage.Add(r38.LastItem()); } break; case "R40_LINEITEM": Common.Initialize(ref r40); r40.Add((Models.Files.PurchaseOrder.R40_LineItem)rec); if (itemCount > 0) { if (order.Items == null) { order.Items = new List <Models.Files.PurchaseOrder.DataSequence.Item>(); } if (item != null) { order.Items.Add(item); item = null; } } itemCount++; item = new Models.Files.PurchaseOrder.DataSequence.Item { LineItemRecord = r40.LastItem() }; break; case "R41_ADDITIONALLINEITEM": Common.Initialize(ref r41); r41.Add((Models.Files.PurchaseOrder.R41_AdditionalLineItem)rec); item.AdditionalLineItemRecord = r41.LastItem(); break; case "R42_LINEITEMGIFTMESSAGE": Common.Initialize(ref r42); r42.Add((Models.Files.PurchaseOrder.R42_LineItemGiftMessage)rec); if (item.LineItemGiftMessage.Count < file.Maxes[typename]) { item.LineItemGiftMessage.Add(r42.LastItem()); } break; case "R45_IMPRINT": Common.Initialize(ref r45); r45.Add((Models.Files.PurchaseOrder.R45_Imprint)rec); if (item.Imprint == null) { item.Imprint = new List <Models.Files.PurchaseOrder.R45_Imprint>(); } if (item.Imprint.Count < file.Maxes[typename]) { item.Imprint.Add(r45.LastItem()); } break; case "R50_PURCHASEORDERCONTROL": Common.Initialize(ref r50); r50.Add((Models.Files.PurchaseOrder.R50_PurchaseOrderControl)rec); order.PurchaseOrderControlRecord = r50.LastItem(); file.PurchaseOrders.Add(order); if (item != null) { if (file.PurchaseOrders[file.PurchaseOrders.Count - 1].Items == null) { file.PurchaseOrders[file.PurchaseOrders.Count - 1].Items = new List <Models.Files.PurchaseOrder.DataSequence.Item>(); } file.PurchaseOrders[file.PurchaseOrders.Count - 1].Items.Add(item); item = null; } order = null; break; case "R90_FILETRAILER": Common.Initialize(ref r90); r90.Add((Models.Files.PurchaseOrder.R90_FileTrailer)rec); file.FileTrailerRecord = r90.LastItem(); break; } } if (order != null) { file.PurchaseOrders.Add(order); if (item != null) { if (file.PurchaseOrders[file.PurchaseOrders.Count - 1].Items == null) { file.PurchaseOrders[file.PurchaseOrders.Count - 1].Items = new List <Models.Files.PurchaseOrder.DataSequence.Item>(); } file.PurchaseOrders[file.PurchaseOrders.Count - 1].Items.Add(item); item = null; } order = null; } using (SQL sql = new SQL(batchnumber, r00, r10, r20, r21, r24, r25, r26, r27, r29, r30, r31, r32, r34, r35, r36, r37, r38, r40, r41, r42, r45, r50, r90)) { savedokay = sql.Successful; } } } catch (Exception ex) { log.Error(ex); } return(file); }
private Type CustomSelector(MultiRecordEngine e, string recordstring) { string recordType = recordstring.Substring(0, recordstring.IndexOf(',')); if (recordType.StartsWith("\"")) recordType = recordType.Substring(1, recordType.Length - 2); Type t; if (recordTypes.TryGetValue(recordType, out t)) return t; log.Warn("unable to decode record type {0}", recordType); return null; }
protected override void Process() { _monitoring.Notify(Name, 0); _atShipmentCostsProduct = PfaAmericaTodayConfiguration.Current.ShipmentCostsProduct; _atReturnCostsProduct = PfaAmericaTodayConfiguration.Current.ReturnCostsProduct; _atKialaShipmentCostsProduct = PfaAmericaTodayConfiguration.Current.KialaShipmentCostsProduct; _atKialaReturnCostsProduct = PfaAmericaTodayConfiguration.Current.KialaReturnCostsProduct; var config = GetConfiguration(); _connectorIDs = GetConfiguration().AppSettings.Settings["atConnectorID"].Value.Split(',').Select(int.Parse).ToList(); var vendorID = int.Parse(config.AppSettings.Settings["ATVendorID"].Value); //var connectorID = int.Parse(config.AppSettings.Settings["atConnectorID"].Value); var cjpCode = GetConfiguration().AppSettings.Settings["CJPDiscountCode"].Try(c => c.Value, "CJP"); NetworkExportUtility util = new NetworkExportUtility(); using (var unit = GetUnitOfWork()) { try { _returnCodes = (from c in unit.Scope.Repository <Connector>().GetAll().ToList() where _connectorIDs.Contains(c.ConnectorID) select new { c.ConnectorID, Code = c.ConnectorSettings.GetValueByKey <int?>("ReturnCodeOverride", null) }).Where(c => c.Code != null).ToDictionary(p => p.ConnectorID, p => p.Code.Value); var fileLocation = config.AppSettings.Settings["DatColLocationAT"].Value; if (string.IsNullOrEmpty(fileLocation)) { throw new Exception("No DatColLocation vendorsetting"); } #if DEBUG fileLocation = @"D:\Concentrator_TESTING"; #endif var userName = config.AppSettings.Settings["DatColLocationUserNameAT"].Value; if (string.IsNullOrEmpty(userName)) { throw new Exception("No DatColLocation UserName"); } var password = config.AppSettings.Settings["DatColLocationPasswordAT"].Value; if (string.IsNullOrEmpty(password)) { throw new Exception("No DatColLocation Password"); } #if !DEBUG fileLocation = util.ConnectorNetworkPath(fileLocation, "M:", userName, password); #endif var salesSlip = unit.Scope.Repository <VendorSetting>().GetAll(x => x.SettingKey == "SalesslipNumber" && x.VendorID == vendorID).FirstOrDefault(); var salesSlipNr = 0; if (salesSlip == null) { salesSlip = new VendorSetting() { SettingKey = "SalesslipNumber", Value = salesSlipNr.ToString(), VendorID = vendorID }; unit.Scope.Repository <VendorSetting>().Add(salesSlip); } else { salesSlipNr = int.Parse(salesSlip.Value); if (salesSlipNr == 9999) { salesSlipNr = 0; } } var ledgerRepo = unit.Scope.Repository <OrderLedger>(); var timeStamp = DateTime.Now.ToString("yyMMddhhmm"); var repositoryOL = unit.Scope.Repository <OrderLine>(); foreach (var connector in _connectorIDs) { LoadOrderLines(repositoryOL, connector); } if (!HasOrdersToProcess()) { util.DisconnectNetworkPath(fileLocation); //disconnect the path return; //shortcircuit here if there are no orders to process } using (var engine = new MultiRecordEngine(typeof(DatColReceiveRegular), typeof(DatColNormalSales), typeof(DatColReturn))) { var file = Path.Combine(fileLocation, string.Format("datcol.{0}", timeStamp)); var okFile = Path.Combine(fileLocation, string.Format("datcol.{0}.ok", timeStamp)); if (!File.Exists(file)) { File.Create(file).Dispose(); } engine.BeginAppendToFile(file); #region Orders ///contains all order lines linestoProcess.GroupBy(c => c.OrderID).ToList().ForEach(orderLinesCollection => { string shopOrderNumber = string.Empty; decimal totalAmount = 0; DateTime timeStampOrder = DateTime.Now; foreach (var line in orderLinesCollection) { var barcode = line.Product.ProductBarcodes.FirstOrDefault(x => x.BarcodeType.HasValue && x.BarcodeType.Value == 0); var pfaCode = line.Product.ProductBarcodes.Where(c => c.BarcodeType == (int)BarcodeTypes.PFA).FirstOrDefault(); var articleSizeColorArray = line.Product.VendorItemNumber.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); var va = line.Product.VendorAssortments.FirstOrDefault(x => x.VendorID == line.DispatchedToVendorID); var productPriceEnt = va.Try(c => c.VendorPrices.FirstOrDefault(), null); var productPrice = productPriceEnt != null ? va.VendorPrices.FirstOrDefault().Price.Value : (line.Price.HasValue ? Convert.ToDecimal(line.Price.Value) : 0); var specialPrice = (va != null && va.VendorPrices.FirstOrDefault() != null && va.VendorPrices.FirstOrDefault().SpecialPrice.HasValue ? va.VendorPrices.FirstOrDefault().SpecialPrice.Value : 0); var articleCode = string.Empty; var colorCode = string.Empty; if (articleSizeColorArray.Count() > 0) { articleCode = articleSizeColorArray[0].PadLeft(13, '0'); } if (articleSizeColorArray.Count() > 1) { colorCode = articleSizeColorArray[1].PadLeft(3, '0'); } var sizeCode = (pfaCode != null ? pfaCode.Barcode.PadLeft(4, '0') : string.Empty); if (line.OrderLedgers.Any(c => c.Status == (int)OrderLineStatus.ProcessedKasmut && c.Quantity.Value == line.Quantity)) { continue; } int quantityToProcess = 0; int quantityProcessed = 0; if (line.OrderLedgers.Any(c => c.Status == (int)OrderLineStatus.ProcessedKasmut)) { var ledg = line.OrderLedgers.FirstOrDefault(c => c.Status == (int)OrderLineStatus.ProcessedKasmut); quantityToProcess = line.Quantity - ledg.Quantity.Value; quantityProcessed = ledg.Quantity.Value; } var discount = DatcolHelper.GetDiscount(line, quantityToProcess); var lineRevenue = DatcolHelper.GetUnformattedRevenue(line, quantityProcessed, quantityToProcess); timeStampOrder = line.Order.ReceivedDate.ToLocalTime(); totalAmount += (decimal)lineRevenue; shopOrderNumber = getShopNumberByConnector(line.Order.Connector); DatColNormalSales sale = new DatColNormalSales() { ShopAndPosNr = string.Format("{0} 01", shopOrderNumber), SalesslipNumber = salesSlipNr, DateStamp = timeStampOrder, Quantity = quantityToProcess == 0 ? line.Quantity : quantityToProcess, ReceivedFrom = (int)Math.Round(line.BasePrice.Value * 100), MarkdownValue = (int)Math.Round((decimal)(line.BasePrice - line.UnitPrice) * 100), Discount = discount, Revenue = DatcolHelper.FormatRevenueForDatcol(lineRevenue), ArticleColorSize = String.Format("{0}{1}{2}", articleCode, colorCode, sizeCode), Barcode = barcode != null ? barcode.Barcode : string.Empty, VatCode = DatcolHelper.GetBTWCode(articleCode).ToString(), RecordType = GetRecordType(line), FixedField1 = GetDiscountCode(line, cjpCode, discount), FixedField2 = (int)Math.Round(GetDiscountFromSet(line) * 100), FixedField3 = GetRecordType(line) == "02" ? "101" : "000" }; line.SetStatus(OrderLineStatus.ProcessedExportNotification, ledgerRepo, useStatusOnNonAssortmentItems: true); engine.WriteNext(sale); } DatcolHelper.SaveDatcolLink(orderLinesCollection.First().Order, shopOrderNumber, timeStampOrder, totalAmount, salesSlipNr, "Sales order"); DatcolHelper.IncrementSalesSlipNumber(ref salesSlipNr); }); _monitoring.Notify(Name, 10); #endregion engine.Flush(); salesSlip.Value = salesSlipNr.ToString(); unit.Save(); #region Cancellations var cancelledStatus = (int)OrderLineStatus.Cancelled; //preliminary : check for cancellation of shipment //if at least one line was cancelled from an order foreach (var order in cancelledLinesToProcess.Select(c => c.Order).Distinct().ToList()) //unit.Scope.Repository<Order>().GetAll(c => cancelLines.Any(l => l.OrderID == c.OrderID)).ToList()) { //get its order lines without the ones that are non-assortment var originalOrderLines = order.OrderLines.Where(c => !c.Product.IsNonAssortmentItem.HasValue || (c.Product.IsNonAssortmentItem.HasValue && !c.Product.IsNonAssortmentItem.Value)).ToList(); bool cancelShipmentLine = true; //always include by default the shipment cost var cancelledLines = order.OrderLines.Where(c => c.OrderLedgers.Any(l => l.Status == cancelledStatus)).ToList(); if (originalOrderLines.Count() != cancelledLines.Count) //if not all lines have been cancelled -> move on { continue; } foreach (var line in originalOrderLines) { if (!line.OrderLedgers.Any(c => c.Status == cancelledStatus)) { continue; } if (line.OrderLedgers.FirstOrDefault(c => c.Status == cancelledStatus).Quantity != line.Quantity) { cancelShipmentLine = false; } } if (cancelShipmentLine) { var l = order.OrderLines.Where(c => c.Product.VendorItemNumber == _atShipmentCostsProduct || c.Product.VendorItemNumber == _atKialaShipmentCostsProduct).FirstOrDefault(); if (l != null) { l.SetStatus(OrderLineStatus.Cancelled, unit.Scope.Repository <OrderLedger>(), 1, true); cancelledLinesToProcess.Add(l); } } } unit.Save(); cancelledLinesToProcess.GroupBy(c => c.OrderID).ToList().ForEach(orderLinesCollection => { decimal totalAmount = 0; DateTime timeStampOrder = DateTime.Now; string orderShopNumber = string.Empty; foreach (var line in orderLinesCollection) { var barcode = line.Product.ProductBarcodes.FirstOrDefault(x => x.BarcodeType.HasValue && x.BarcodeType.Value == 0); var pfaCode = line.Product.ProductBarcodes.Where(c => c.BarcodeType == (int)BarcodeTypes.PFA).FirstOrDefault(); var articleSizeColorArray = line.Product.VendorItemNumber.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); var va = line.Product.VendorAssortments.FirstOrDefault(x => x.VendorID == line.DispatchedToVendorID); var productPrice = (va != null && va.VendorPrices.FirstOrDefault() != null ? va.VendorPrices.FirstOrDefault().Price.Value : (line.Price.HasValue ? Convert.ToDecimal(line.Price.Value) : 0)); var specialPrice = (va != null && va.VendorPrices.FirstOrDefault() != null && va.VendorPrices.FirstOrDefault().SpecialPrice.HasValue ? va.VendorPrices.FirstOrDefault().SpecialPrice.Value : 0); var productPriceEnt = va.Try(c => c.VendorPrices.FirstOrDefault(), null); var articleCode = string.Empty; var colorCode = string.Empty; if (articleSizeColorArray.Count() > 0) { articleCode = articleSizeColorArray[0].PadLeft(13, '0'); } if (articleSizeColorArray.Count() > 1) { colorCode = articleSizeColorArray[1].PadLeft(3, '0'); } var sizeCode = (pfaCode != null ? pfaCode.Barcode.PadLeft(4, '0') : string.Empty); var returnLedger = line.OrderLedgers.FirstOrDefault(x => x.Status == cancelledStatus); var returnQuantity = (returnLedger != null && returnLedger.Quantity.HasValue) ? returnLedger.Quantity.Value : line.Quantity; DatColReturn sale = null; var discount = DatcolHelper.GetDiscount(line, returnQuantity); timeStampOrder = returnLedger.Try(c => c.LedgerDate, DateTime.Now.ToLocalTime()); orderShopNumber = getShopNumberByConnector(line.Order.Connector); var lineRevenue = DatcolHelper.GetUnformatedNegativeRevenue(line, returnQuantity); totalAmount += (decimal)lineRevenue; sale = new DatColReturn() { ShopAndPosNr = string.Format("{0} 01", orderShopNumber), SalesslipNumber = salesSlipNr, DateStamp = timeStampOrder, Quantity = -returnQuantity, ReceivedFrom = -(int)Math.Round(line.BasePrice.Value * 100), MarkdownValue = -(int)Math.Round((decimal)(line.BasePrice - line.UnitPrice) * 100), Discount = discount, Revenue = DatcolHelper.FormatNegativeRevenueForDatcol(lineRevenue), ArticleColorSize = String.Format("{0}{1}{2}", articleCode, colorCode, sizeCode), Barcode = barcode != null ? barcode.Barcode : string.Empty, VatCode = DatcolHelper.GetBTWCode(articleCode).ToString(), RecordType = GetRecordType(line), FixedField1 = GetDiscountCode(line, cjpCode, discount), FixedField2 = (int)Math.Round(GetDiscountFromSet(line) * 100), FixedField3 = GetRecordType(line) == "02" ? "101" : "000" }; line.SetStatus(OrderLineStatus.ProcessedCancelExportNotification, ledgerRepo, useStatusOnNonAssortmentItems: true); engine.WriteNext(sale); } DatcolHelper.SaveDatcolLink(orderLinesCollection.First().Order, orderShopNumber, timeStampOrder, totalAmount, salesSlipNr, "Cancellation"); DatcolHelper.IncrementSalesSlipNumber(ref salesSlipNr); DatcolHelper.SaveDatcolLink(orderLinesCollection.First().Order, orderShopNumber, timeStampOrder, totalAmount, salesSlipNr, "Cancellation"); }); engine.Flush(); _monitoring.Notify(Name, 20); #endregion #region Returns var returnStatus = (int)OrderLineStatus.ProcessedReturnNotification; returnedLinesToProcess.GroupBy(c => c.OrderID).ToList().ForEach(orderLinesCollection => { decimal totalAmount = 0; DateTime timeStampOrder = DateTime.Now; string orderShopNumber = string.Empty; foreach (var line in orderLinesCollection) { var barcode = line.Product.ProductBarcodes.FirstOrDefault(x => x.BarcodeType.HasValue && x.BarcodeType.Value == 0); var pfaCode = line.Product.ProductBarcodes.Where(c => c.BarcodeType == (int)BarcodeTypes.PFA).FirstOrDefault(); var articleSizeColorArray = line.Product.VendorItemNumber.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); var va = line.Product.VendorAssortments.FirstOrDefault(x => x.VendorID == line.DispatchedToVendorID); var productPrice = (va != null && va.VendorPrices.FirstOrDefault() != null ? va.VendorPrices.FirstOrDefault().Price.Value : (line.Price.HasValue ? Convert.ToDecimal(line.Price.Value) : 0)); var specialPrice = (va != null && va.VendorPrices.FirstOrDefault() != null && va.VendorPrices.FirstOrDefault().SpecialPrice.HasValue ? va.VendorPrices.FirstOrDefault().SpecialPrice.Value : 0); var productPriceEnt = va.Try(c => c.VendorPrices.FirstOrDefault(), null); var articleCode = string.Empty; var colorCode = string.Empty; if (articleSizeColorArray.Count() > 0) { articleCode = articleSizeColorArray[0].PadLeft(13, '0'); } if (articleSizeColorArray.Count() > 1) { colorCode = articleSizeColorArray[1].PadLeft(3, '0'); } var sizeCode = (pfaCode != null ? pfaCode.Barcode.PadLeft(4, '0') : string.Empty); var returnLedger = line.OrderLedgers.FirstOrDefault(x => x.Status == returnStatus); var returnQuantity = (returnLedger != null && returnLedger.Quantity.HasValue) ? returnLedger.Quantity.Value : line.Quantity; DatColReturn sale = null; int returnOrComplaintCode = 4; var returnCode = getFixedReturnCode(line.Order.ConnectorID); if (returnCode.HasValue) { returnOrComplaintCode = returnCode.Value; } timeStampOrder = returnLedger.Try(c => c.LedgerDate, DateTime.Now.ToLocalTime()); orderShopNumber = getShopNumberByConnector(line.Order.Connector); if (line.Product.VendorItemNumber == _atReturnCostsProduct || line.Product.VendorItemNumber == _atKialaReturnCostsProduct) { var lineRevenue = line.Price == 0 ? 0 : (decimal)(line.Price - line.LineDiscount.Try(c => c.Value, 0)); var formattedRevenue = (int)Math.Round(lineRevenue * 100); totalAmount += (decimal)lineRevenue; sale = new DatColReturn() { ShopAndPosNr = string.Format("{0} 01", orderShopNumber), SalesslipNumber = salesSlipNr, DateStamp = timeStampOrder, Quantity = returnQuantity, ReceivedFrom = (int)Math.Round(line.BasePrice.Try(c => c.Value, 0) * 100), MarkdownValue = 0, Discount = line.LineDiscount.HasValue ? (int)Math.Round((line.LineDiscount.Value * 100)) : 0, Revenue = formattedRevenue, ArticleColorSize = String.Format("{0}{1}{2}", articleCode, colorCode, sizeCode), Barcode = barcode != null ? barcode.Barcode : string.Empty }; } else { var lineRevenue = DatcolHelper.GetUnformatedNegativeRevenue(line, returnQuantity); totalAmount += (decimal)lineRevenue; var discount = DatcolHelper.GetDiscount(line, returnQuantity); sale = new DatColReturn() { ShopAndPosNr = string.Format("{0} 01", orderShopNumber), SalesslipNumber = salesSlipNr, DateStamp = timeStampOrder, Quantity = -returnQuantity, ReceivedFrom = -(int)Math.Round(line.BasePrice.Value * 100), MarkdownValue = -(int)Math.Round((decimal)(line.BasePrice - line.UnitPrice) * 100), Discount = discount, Revenue = DatcolHelper.FormatNegativeRevenueForDatcol(lineRevenue), ArticleColorSize = String.Format("{0}{1}{2}", articleCode, colorCode, sizeCode), Barcode = barcode != null ? barcode.Barcode : string.Empty, VatCode = DatcolHelper.GetBTWCode(articleCode).ToString(), RecordType = GetRecordType(line), FixedField1 = GetDiscountCode(line, cjpCode, discount), FixedField2 = (int)Math.Round(GetDiscountFromSet(line) * 100), FixedField3 = GetRecordType(line) == "02" ? "101" : "000", FixedField6 = returnCode.HasValue ? returnCode.Value.ToString("D2") : "04" }; } line.SetStatus(OrderLineStatus.ProcessedReturnExportNotification, ledgerRepo, useStatusOnNonAssortmentItems: true); engine.WriteNext(sale); } DatcolHelper.SaveDatcolLink(orderLinesCollection.First().Order, orderShopNumber, timeStampOrder, totalAmount, salesSlipNr, "Refund"); DatcolHelper.IncrementSalesSlipNumber(ref salesSlipNr); }); _monitoring.Notify(Name, 30); #endregion if (!File.Exists(okFile)) { File.Create(okFile).Dispose(); } engine.Flush(); #if !DEBUG util.DisconnectNetworkPath(fileLocation); #endif } salesSlip.Value = salesSlipNr.ToString(); //add time stamp var vendor = unit.Scope.Repository <Vendor>().GetSingle(c => c.VendorID == vendorID); var datcolTimeStampSetting = vendor.VendorSettings.FirstOrDefault(c => c.SettingKey == "DatcolTimeStamp"); if (datcolTimeStampSetting == null) { datcolTimeStampSetting = new VendorSetting() { VendorID = vendorID, SettingKey = "DatcolTimeStamp" }; unit.Scope.Repository <VendorSetting>().Add(datcolTimeStampSetting); } datcolTimeStampSetting.Value = DateTime.Now.ToString(); unit.Save(); _monitoring.Notify(Name, 1); } catch (Exception e) { log.Debug("Something went wrong with the generation of the DATCOLS ", e); _monitoring.Notify(Name, -1); } } }
/// <summary> /// Constructor /// </summary> /// <param name="engine">File reader engine</param> internal Parser(MultiRecordEngine engine) { _engine = engine; }
public Models.Files.PurchaseAcknowledgement.DataSequence.V3 ReadFile(string filename, int batchnumber) { List <Models.Files.PurchaseAcknowledgement.R02_FileHeader> r02 = null; List <Models.Files.PurchaseAcknowledgement.R11_PurchaseOrderHeader> r11 = null; List <Models.Files.PurchaseAcknowledgement.R21_FreeFormVendor> r21 = null; List <Models.Files.PurchaseAcknowledgement.R30_RecipientShipToNameAndAddress> r30 = null; List <Models.Files.PurchaseAcknowledgement.R32_RecipientShipToAdditionalShippingInformation> r32 = null; List <Models.Files.PurchaseAcknowledgement.R34_RecipientShipToCityStateAndZip> r34 = null; List <Models.Files.PurchaseAcknowledgement.R40_LineItem> r40 = null; List <Models.Files.PurchaseAcknowledgement.R41_AdditionalDetail> r41 = null; List <Models.Files.PurchaseAcknowledgement.R42_AdditionalLineItem> r42 = null; List <Models.Files.PurchaseAcknowledgement.R43_AdditionalLineItem> r43 = null; List <Models.Files.PurchaseAcknowledgement.R44_ItemNumberOrPrice> r44 = null; List <Models.Files.PurchaseAcknowledgement.R59_PurchaseOrderControlTotals> r59 = null; List <Models.Files.PurchaseAcknowledgement.R91_FileTrailer> r91 = null; // Models.Files.PurchaseAcknowledgement.DataSequence.V3 file = null; Models.Files.PurchaseAcknowledgement.DataSequence.LineItem item = null; // string typename = string.Empty; int itemCount = 0; bool savedokay = false; try { MultiRecordEngine engine = new MultiRecordEngine ( typeof(Models.Files.PurchaseAcknowledgement.R02_FileHeader), typeof(Models.Files.PurchaseAcknowledgement.R11_PurchaseOrderHeader), typeof(Models.Files.PurchaseAcknowledgement.R21_FreeFormVendor), typeof(Models.Files.PurchaseAcknowledgement.R30_RecipientShipToNameAndAddress), typeof(Models.Files.PurchaseAcknowledgement.R32_RecipientShipToAdditionalShippingInformation), typeof(Models.Files.PurchaseAcknowledgement.R34_RecipientShipToCityStateAndZip), typeof(Models.Files.PurchaseAcknowledgement.R40_LineItem), typeof(Models.Files.PurchaseAcknowledgement.R41_AdditionalDetail), typeof(Models.Files.PurchaseAcknowledgement.R42_AdditionalLineItem), typeof(Models.Files.PurchaseAcknowledgement.R43_AdditionalLineItem), typeof(Models.Files.PurchaseAcknowledgement.R44_ItemNumberOrPrice), typeof(Models.Files.PurchaseAcknowledgement.R59_PurchaseOrderControlTotals), typeof(Models.Files.PurchaseAcknowledgement.R91_FileTrailer) ) { RecordSelector = new RecordTypeSelector(Models.Files.PurchaseAcknowledgement.Selectors.V3.Custom) }; var res = engine.ReadFile(filename); if (res != null && res.Length > 0) { file = new Models.Files.PurchaseAcknowledgement.DataSequence.V3(); foreach (var rec in res) { typename = rec.GetType().Name.ToUpper(); switch (typename) { case "R02_FILEHEADER": Common.Initialize(ref r02); r02.Add((Models.Files.PurchaseAcknowledgement.R02_FileHeader)rec); file.FileHeaderRecord = r02.LastItem(); break; case "R11_PURCHASEORDERHEADER": Common.Initialize(ref r11); r11.Add((Models.Files.PurchaseAcknowledgement.R11_PurchaseOrderHeader)rec); file.PurchaseOrderHeaderRecord = r11.LastItem(); break; case "R21_FREEFORMVENDOR": Common.Initialize(ref r21); r21.Add((Models.Files.PurchaseAcknowledgement.R21_FreeFormVendor)rec); if (file.FreeFormVendor == null) { file.FreeFormVendor = new List <Models.Files.PurchaseAcknowledgement.R21_FreeFormVendor>(); } if (file.FreeFormVendor.Count < file.Maxes[typename]) { file.FreeFormVendor.Add(r21.LastItem()); } break; case "R30_RECIPIENTSHIPTONAMEANDADDRESS": Common.Initialize(ref r30); r30.Add((Models.Files.PurchaseAcknowledgement.R30_RecipientShipToNameAndAddress)rec); file.RecipShipToNameAndAddressRecord = r30.LastItem(); break; case "R32_RECIPIENTSHIPTOADDITIONALSHIPPINGINFORMATION": Common.Initialize(ref r32); r32.Add((Models.Files.PurchaseAcknowledgement.R32_RecipientShipToAdditionalShippingInformation)rec); if (file.RecipShipToAdditionalShippingInfo == null) { file.RecipShipToAdditionalShippingInfo = new List <Models.Files.PurchaseAcknowledgement.R32_RecipientShipToAdditionalShippingInformation>(); } if (file.RecipShipToAdditionalShippingInfo.Count < file.Maxes[typename]) { file.RecipShipToAdditionalShippingInfo.Add(r32.LastItem()); } break; case "R34_RECIPIENTSHIPTOCITYSTATEANDZIP": Common.Initialize(ref r34); r34.Add((Models.Files.PurchaseAcknowledgement.R34_RecipientShipToCityStateAndZip)rec); file.RecipShipToCityStateAndZipRecord = r34.LastItem(); break; case "R40_LINEITEM": Common.Initialize(ref r40); r40.Add((Models.Files.PurchaseAcknowledgement.R40_LineItem)rec); if (itemCount > 0) { if (item != null) { file.LineItems.Add(item); item = null; } } if (file.LineItems == null) { file.LineItems = new List <Models.Files.PurchaseAcknowledgement.DataSequence.LineItem>(); } item = new Models.Files.PurchaseAcknowledgement.DataSequence.LineItem(); itemCount++; item.LineItemRecord = r40.LastItem(); break; case "R41_ADDITIONALDETAIL": Common.Initialize(ref r41); r41.Add((Models.Files.PurchaseAcknowledgement.R41_AdditionalDetail)rec); item.AdditionalDetailRecord = r41.LastItem(); break; case "R42_ADDITIONALLINEITEM": Common.Initialize(ref r42); r42.Add((Models.Files.PurchaseAcknowledgement.R42_AdditionalLineItem)rec); item.AddtionalLineItemTitleRecord = r42.LastItem(); break; case "R43_ADDITIONALLINEITEM": Common.Initialize(ref r43); r43.Add((Models.Files.PurchaseAcknowledgement.R43_AdditionalLineItem)rec); item.AdditionalLineItemPublisherRecord = r43.LastItem(); break; case "R44_ITEMNUMBERORPRICE": Common.Initialize(ref r44); r44.Add((Models.Files.PurchaseAcknowledgement.R44_ItemNumberOrPrice)rec); item.ItemNumberOrPriceRecord = r44.LastItem(); break; case "R59_PURCHASEORDERCONTROLTOTALS": Common.Initialize(ref r59); r59.Add((Models.Files.PurchaseAcknowledgement.R59_PurchaseOrderControlTotals)rec); file.PurchaseOrderControlTotalsRecord = r59.LastItem(); break; case "R91_FILETRAILER": Common.Initialize(ref r91); r91.Add((Models.Files.PurchaseAcknowledgement.R91_FileTrailer)rec); file.FileTrailerRecord = r91.LastItem(); break; } } if (item != null) { file.LineItems.Add(item); item = null; itemCount = 0; } using (SQL sql = new SQL(batchnumber, r02, r11, r21, r30, r32, r34, r40, r41, r42, r43, r44, r59, r91)) { savedokay = sql.Successful; } } } catch (Exception ex) { log.Error(ex); } return(file); }
public void NullTypes() { engine = new MultiRecordEngine(typeof(CustomersVerticalBar), null); engine.RecordSelector = new RecordTypeSelector(CustomSelector); }
public bool WriteFile(string filename, Models.Files.Invoice.DataSequence.V3 data) { List <object> writelist = new List <object>(); List <(string code, Type type)> used = new List <(string code, Type type)>(); bool success = false; try { //build list writelist.Add(data.InvoiceFileHeaderRecord); //++if((from u in used where u.code == data.InvoiceFileHeaderRecord.InvoiceFileHeader select u.code).Count() == 0) { used.Add((data.InvoiceFileHeaderRecord.InvoiceFileHeader,typeof(Models.Files.Invoice.R01_InvoiceFileHeader)); } if (data.Invoices != null && data.Invoices.Count > 0) { foreach (Models.Files.Invoice.DataSequence.InvoiceItem item in data.Invoices) { if (Common.IsValid(item.InvoiceHeaderRecord)) { writelist.Add(item.InvoiceHeaderRecord); } if (Common.IsValid(item.InvoiceVendorDetailRecord)) { writelist.Add(item.InvoiceVendorDetailRecord); } foreach (Models.Files.Invoice.DataSequence.InvoiceDetail detail in item.InvoiceDetails) { if (Common.IsValid(detail.InvoiceDetailRecord)) { writelist.Add(detail.InvoiceDetailRecord); } if (Common.IsValid(detail.DetailISBN13OrEANRecord)) { writelist.Add(detail.DetailISBN13OrEANRecord); } if (Common.IsValid(detail.DetailTotalRecord)) { writelist.Add(detail.DetailTotalRecord); } } if (Common.IsValid(item.InvoiceTotalRecord)) { writelist.Add(item.InvoiceTotalRecord); } if (Common.IsValid(item.InvoiceTrailerRecord)) { writelist.Add(item.InvoiceTrailerRecord); } } } if (Common.IsValid(data.InvoiceFileTrailer, false)) { writelist.Add(data.InvoiceFileTrailer); } MultiRecordEngine engine = new MultiRecordEngine ( typeof(Models.Files.Invoice.R01_InvoiceFileHeader), typeof(Models.Files.Invoice.R15_InvoiceHeader), typeof(Models.Files.Invoice.R16_InvoiceVendorDetail), typeof(Models.Files.Invoice.R45_InvoiceDetail), typeof(Models.Files.Invoice.R46_DetailISBN13OrEAN), typeof(Models.Files.Invoice.R48_DetailTotal), typeof(Models.Files.Invoice.R55_InvoiceTotals), typeof(Models.Files.Invoice.R57_InvoiceTrailer), typeof(Models.Files.Invoice.R95_InvoiceFileTrailer) ) { RecordSelector = new RecordTypeSelector(Models.Files.Invoice.Selectors.V3.Custom) }; engine.WriteFile(filename, writelist.ToArray()); success = true; } catch (Exception ex) { Console.WriteLine(ex.ToString()); success = false; } return(success); }
public Models.Files.PurchaseOrder.DataSequence.V3 ReadFile(string filename, int batchnumber) { List <Models.Files.PurchaseOrder.R00_ClientFileHeader> r00 = null; List <Models.Files.PurchaseOrder.R10_ClientHeader> r10 = null; List <Models.Files.PurchaseOrder.R20_FixedSpecialHandlingInstructions> r20 = null; List <Models.Files.PurchaseOrder.R21_PurchaseOrderOptions> r21 = null; List <Models.Files.PurchaseOrder.R40_LineItemDetail> r40 = null; List <Models.Files.PurchaseOrder.R41_AdditionalLineItemDetail> r41 = null; List <Models.Files.PurchaseOrder.R45_Imprint> r45 = null; List <Models.Files.PurchaseOrder.R46_StickerBarcodeData> r46barcode = null; List <Models.Files.PurchaseOrder.R46_StickerTextLines> r46text = null; List <Models.Files.PurchaseOrder.R50_PurchaseOrderTrailer> r50 = null; List <Models.Files.PurchaseOrder.R90_FileTrailer> r90 = null; // Models.Files.PurchaseOrder.DataSequence.V3 file = null; Models.Files.PurchaseOrder.DataSequence.PurchaseOrder order = null; Models.Files.PurchaseOrder.DataSequence.PurchaseOrderDetail orderdetail = null; // string typename = string.Empty; int orderdetailCount = 0; int orderCount = 0; bool savedokay = false; try { MultiRecordEngine engine = new MultiRecordEngine ( typeof(Models.Files.PurchaseOrder.R00_ClientFileHeader), typeof(Models.Files.PurchaseOrder.R10_ClientHeader), typeof(Models.Files.PurchaseOrder.R20_FixedSpecialHandlingInstructions), typeof(Models.Files.PurchaseOrder.R21_PurchaseOrderOptions), typeof(Models.Files.PurchaseOrder.R40_LineItemDetail), typeof(Models.Files.PurchaseOrder.R41_AdditionalLineItemDetail), typeof(Models.Files.PurchaseOrder.R45_Imprint), typeof(Models.Files.PurchaseOrder.R46_StickerBarcodeData), typeof(Models.Files.PurchaseOrder.R46_StickerTextLines), typeof(Models.Files.PurchaseOrder.R50_PurchaseOrderTrailer), typeof(Models.Files.PurchaseOrder.R90_FileTrailer) ) { RecordSelector = new RecordTypeSelector(Models.Files.PurchaseOrder.Selectors.V3.Custom) }; var res = engine.ReadFile(filename); if (res != null && res.Length > 0) { file = new Models.Files.PurchaseOrder.DataSequence.V3(); foreach (var rec in res) { typename = rec.GetType().Name.ToUpper(); switch (typename) { case "R00_CLIENTFILEHEADER": Common.Initialize(ref r00); r00.Add((Models.Files.PurchaseOrder.R00_ClientFileHeader)rec); file.FileHeaderRecord = r00.LastItem(); break; case "R10_CLIENTHEADER": Common.Initialize(ref r10); r10.Add((Models.Files.PurchaseOrder.R10_ClientHeader)rec); if (orderCount > 0) { if (file.PurchaseOrders == null) { file.PurchaseOrders = new List <Models.Files.PurchaseOrder.DataSequence.PurchaseOrder>(); } if (order != null) { file.PurchaseOrders.Add(order); } } orderCount++; order = new Models.Files.PurchaseOrder.DataSequence.PurchaseOrder { ClientHeaderRecord = r10.LastItem() }; break; case "R20_FIXEDSPECIALHANDLINGINSTRUCTIONS": Common.Initialize(ref r20); r20.Add((Models.Files.PurchaseOrder.R20_FixedSpecialHandlingInstructions)rec); order.FixedHandlingInstructionsRecord = r20.LastItem(); break; case "R21_PURCHASEORDEROPTIONS": Common.Initialize(ref r21); r21.Add((Models.Files.PurchaseOrder.R21_PurchaseOrderOptions)rec); order.PurchaseOrderOptionsRecord = r21.LastItem(); break; case "R40_LINEITEMDETAIL": Common.Initialize(ref r40); r40.Add((Models.Files.PurchaseOrder.R40_LineItemDetail)rec); if (orderdetailCount > 0) { if (order.PurchaseOrderDetails == null) { order.PurchaseOrderDetails = new List <Models.Files.PurchaseOrder.DataSequence.PurchaseOrderDetail>(); } if (orderdetail != null) { order.PurchaseOrderDetails.Add(orderdetail); } } orderdetailCount++; orderdetail = new Models.Files.PurchaseOrder.DataSequence.PurchaseOrderDetail { LineItemDetail = r40.LastItem() }; break; case "R41_ADDITIONALLINEITEMDETAIL": Common.Initialize(ref r41); r41.Add((Models.Files.PurchaseOrder.R41_AdditionalLineItemDetail)rec); orderdetail.AdditionalLineItemDetail = r41.LastItem(); break; case "R45_IMPRINT": Common.Initialize(ref r45); r45.Add((Models.Files.PurchaseOrder.R45_Imprint)rec); if (orderdetail.Imprint == null) { orderdetail.Imprint = new List <Models.Files.PurchaseOrder.R45_Imprint>(); } if (file.Maxes.ContainsKey(typename) && orderdetail.Imprint.Count < file.Maxes[typename]) { orderdetail.Imprint.Add(r45.LastItem()); } break; case "R46_STICKERBARCODEDATA": Common.Initialize(ref r46barcode); r46barcode.Add((Models.Files.PurchaseOrder.R46_StickerBarcodeData)rec); orderdetail.StickerBarcodeDataRecord = r46barcode.LastItem(); break; case "R46_STICKERTEXTLINES": Common.Initialize(ref r46text); r46text.Add((Models.Files.PurchaseOrder.R46_StickerTextLines)rec); if (orderdetail.StickerTextLines == null) { orderdetail.StickerTextLines = new List <Models.Files.PurchaseOrder.R46_StickerTextLines>(); } if (file.Maxes.ContainsKey(typename) && orderdetail.StickerTextLines.Count < file.Maxes[typename]) { orderdetail.StickerTextLines.Add(r46text.LastItem()); } break; case "R50_PURCHASEORDERTRAILER": Common.Initialize(ref r50); r50.Add((Models.Files.PurchaseOrder.R50_PurchaseOrderTrailer)rec); file.PurchaseOrderTrailerRecord = r50.LastItem(); if (orderdetail != null) { if (order.PurchaseOrderDetails == null) { order.PurchaseOrderDetails = new List <Models.Files.PurchaseOrder.DataSequence.PurchaseOrderDetail>(); } order.PurchaseOrderDetails.Add(orderdetail); } file.PurchaseOrders.Add(order); break; case "R90_FILETRAILER": Common.Initialize(ref r90); r90.Add((Models.Files.PurchaseOrder.R90_FileTrailer)rec); file.FileTrailerRecord = r90.LastItem(); break; } } using (SQL sql = new SQL(batchnumber, r00, r10, r20, r21, r40, r41, r45, r46barcode, r46text, r50, r90)) { savedokay = sql.Successful; } } } catch (Exception ex) { log.Error(ex); } return(file); }
Type CustomSelectorReturningBadType(MultiRecordEngine engine, string record) { return typeof (String); }
public static Type Custom(MultiRecordEngine engine, string recordLine) { Console.WriteLine(recordLine); Type type = null; switch (recordLine.Substring(0, 2)) { case "00": type = typeof(R00_ClientFileHeader); break; case "10": type = typeof(R10_ClientHeader); break; case "20": type = typeof(R20_FixedSpecialHandlingInstructions); break; case "21": type = typeof(R21_PurchaseOrderOptions); break; case "40": type = typeof(R40_LineItemDetail); break; case "41": type = typeof(R41_AdditionalLineItemDetail); break; case "45": type = typeof(R45_Imprint); break; case "46": List <string> barcodeformat = new List <string>() { "UP", "EN", "ZZ", "SK" }; if ((from f in barcodeformat.AsEnumerable() where f.Contains(recordLine.Substring(29, 2)) select f).Count() > 0) { // Sticker Barcode data type = typeof(R46_StickerBarcodeData); } else { type = typeof(R46_StickerTextLines); } break; case "50": type = typeof(R50_PurchaseOrderTrailer); break; case "90": type = typeof(R90_FileTrailer); break; } return(type); }
private void WriteOrders(IEnumerable <OrderLine> orderLines, WebOrderProcessType processType, OrderLineStatus newStatus, string ilnClientNumber) { using (var engine = new MultiRecordEngine(typeof(DatColEnvelope), typeof(DatColHeader), typeof(DatColDate), typeof(DatColOrderLine), typeof(DatColCount))) { orderLines.GroupBy(c => c.OrderID).ToList().ForEach(orderLinesCollection => { using (Stream memoryStream = new MemoryStream()) using (var streamWriter = new StreamWriter(memoryStream)) { var saveOrder = true; _magentoOrderNumber = orderLinesCollection.First().Order.WebSiteOrderNumber; engine.BeginWriteStream(streamWriter); var magentoOrderNumber = orderLinesCollection.First().Order.WebSiteOrderNumber; var envelope = new DatColEnvelope { ILNClientNumber = ilnClientNumber, ILNSapphNumber = ILNSapphNumber, MagentoOrderNumber = magentoOrderNumber }; engine.WriteNext(envelope); var header = new DatColHeader { MagentoOrderNumber = magentoOrderNumber, ILNSapphNumber = ILNSapphNumber, ILNClientNumber = ilnClientNumber, ILNClientNumber2 = ilnClientNumber }; engine.WriteNext(header); var date = new DatColDate(); engine.WriteNext(date); var orderLineCounter = 0; foreach (var line in orderLinesCollection) { if (line.Product == null) { saveOrder = false; continue; } var barcode = line.Product.ProductBarcodes.Where(x => x.BarcodeType.HasValue && x.BarcodeType.Value == 0).Select(x => x).FirstOrDefault(); if (barcode == null) { saveOrder = false; continue; } decimal totalUnitPriceToProcess; var quantityToProcess = 0; switch (processType) { case WebOrderProcessType.WebOrder: if (!line.Price.HasValue) { throw new ArgumentNullException(); } var discount = line.LineDiscount.HasValue ? line.LineDiscount.Value : 0; if (line.ProductID == _shipmentCostProductID) { totalUnitPriceToProcess = (decimal)(line.Price); } else { totalUnitPriceToProcess = (decimal)(line.Price.Value - discount); } if (line.OrderLedgers.Any(c => c.Status == (int)OrderLineStatus.ProcessedKasmut)) { var ledg = line.OrderLedgers.FirstOrDefault(c => c.Status == (int)OrderLineStatus.ProcessedKasmut); if (ledg != null) { if (ledg.Quantity != null) { quantityToProcess = line.Quantity - ledg.Quantity.Value; } } } break; case WebOrderProcessType.CancellationWebOrder: if (line.ProductID == _returnCostProductID) { quantityToProcess = line.Quantity; totalUnitPriceToProcess = (decimal)(line.UnitPrice.HasValue ? line.UnitPrice.Value : 0); } else { var returnLedger = line.OrderLedgers.FirstOrDefault(x => x.Status == CancelledStatus); quantityToProcess = -((returnLedger != null && returnLedger.Quantity.HasValue) ? returnLedger.Quantity.Value : line.Quantity); totalUnitPriceToProcess = (decimal)(Math.Abs(quantityToProcess) * line.UnitPrice); } break; case WebOrderProcessType.ReturnedWebOrder: if (line.ProductID == _returnCostProductID) { quantityToProcess = line.Quantity; totalUnitPriceToProcess = (decimal)(line.BasePrice.HasValue ? line.BasePrice.Value : 0); } else { // if product not ReturnCost // Quantity = Returned Quantity (if this not exists) // Shipped Quantity // Price = Paid price per Product (with discount) * Quantity var returnLedger = line.OrderLedgers.FirstOrDefault(x => x.Status == ReturnStatus); quantityToProcess = -((returnLedger != null && returnLedger.Quantity.HasValue) ? returnLedger.Quantity.Value : line.Quantity); totalUnitPriceToProcess = (decimal)(Math.Abs(quantityToProcess) * (line.Price / line.Quantity)); } break; default: throw new NotImplementedException(); } var orderLine = new DatColOrderLine { OrderLineNumber = ++orderLineCounter, Barcode = barcode.Barcode, Quantity = quantityToProcess == 0 ? line.Quantity : quantityToProcess, TotalUnitPrice = totalUnitPriceToProcess }; engine.WriteNext(orderLine); } var count = new DatColCount { TotalOrderLine = orderLinesCollection.Count(), TotalQuantity = 0 }; engine.WriteNext(count); engine.Flush(); streamWriter.Flush(); string webOrderFile; switch (processType) { case WebOrderProcessType.WebOrder: webOrderFile = WebOrderFileName; break; case WebOrderProcessType.CancellationWebOrder: case WebOrderProcessType.ReturnedWebOrder: webOrderFile = ReturnWebOrderFileName; break; default: throw new NotImplementedException(); } if (saveOrder) { var listOfOrderLines = orderLinesCollection.ToDictionary <OrderLine, int, int?>(line => line.OrderLineID, line => null); if (!_orderRepo.UpgradeOrderLinesStatus(listOfOrderLines, newStatus, true)) { _log.Info(string.Format("The system can not upgrade the status of order line {0} to {1}", listOfOrderLines.Keys, newStatus)); } else { var ftpManager = new FtpManager(_ftpSetting.FtpUri, null, false, true); ftpManager.Upload(memoryStream.Reset(), webOrderFile); } } else { //todo: log corrupt lines } } }); } }
public void NoTypes() { engine = new MultiRecordEngine(new Type[] {}); }
public void NullTypeArray() { engine = new MultiRecordEngine((Type[])null); }
public void WhenSelectorReturnsTypeThatIsNotInEngine_ShouldThrowBadUsageException_WhenReadingRecordAtATime() { engine = new MultiRecordEngine(new RecordTypeSelector(CustomSelectorReturningBadType), typeof(OrdersVerticalBar), typeof(CustomersSemiColon), typeof(SampleType)); engine.BeginReadFile(FileTest.Good.MultiRecord1.Path); Assert.Throws<BadUsageException>(() => engine.ReadNext()); }
public void OneType() { engine = new MultiRecordEngine(typeof(CustomersVerticalBar)); }
public static Type Custom(MultiRecordEngine engine, string recordLine) { Console.WriteLine(recordLine); Type type = null; switch (recordLine.Substring(0, 2)) { case "00": type = typeof(R00_FileHeader); break; case "10": type = typeof(R10_ClientHeader); break; case "20": type = typeof(R20_FixedSpecialHandlingInstructions); break; case "21": type = typeof(R21_PurchaseOrderOptions); break; case "24": type = typeof(R24_CustomerCost); break; case "25": type = typeof(R25_CustomerBillToName); break; case "26": type = typeof(R26_CustomerBillToPhoneNumber); break; case "27": type = typeof(R27_CustomerBillToAddressLine); break; case "29": type = typeof(R29_CustomerBillToCityStateZip); break; case "30": type = typeof(R30_RecipientShipToName); break; case "31": type = typeof(R31_RecipientShipToPhone); break; case "32": type = typeof(R32_ShippingRecordRecipientAddressLine); break; case "34": type = typeof(R34_RecipientShippingRecordCityStateZip); break; case "35": type = typeof(R35_DropShipDetail); break; case "36": type = typeof(R36_SpecialDeliveryInstructions); break; case "37": type = typeof(R37_MarketingMessage); break; case "38": type = typeof(R38_GiftMessage); break; case "40": type = typeof(R40_LineItem); break; case "41": type = typeof(R41_AdditionalLineItem); break; case "42": type = typeof(R42_LineItemGiftMessage); break; case "45": type = typeof(R45_Imprint); break; case "50": type = typeof(R50_PurchaseOrderControl); break; case "90": type = typeof(R90_FileTrailer); break; } return(type); }
/// <summary> /// Constructor /// </summary> /// <param name="engine">File reader engine</param> internal StationParser(MultiRecordEngine engine) { _engine = engine; }
protected override void Process() { try { var config = GetConfiguration(); NetworkExportUtility util = new NetworkExportUtility(); using (var unit = GetUnitOfWork()) { var fileLocation = config.AppSettings.Settings["DatColLocation"].Value; if (string.IsNullOrEmpty(fileLocation)) { throw new Exception("No DatColLocation vendorsetting"); } var userName = config.AppSettings.Settings["DatColLocationUserName"].Value; if (string.IsNullOrEmpty(userName)) { throw new Exception("No DatColLocation UserName"); } var password = config.AppSettings.Settings["DatColLocationPassword"].Value; if (string.IsNullOrEmpty(password)) { throw new Exception("No DatColLocation Password"); } fileLocation = util.ConnectorNetworkPath(fileLocation, "Z:", userName, password); var vendorID = int.Parse(config.AppSettings.Settings["ccVendorID"].Value); #if DEBUG fileLocation = @"E:\Concentrator_TESTING"; #endif var ledgerRepo = unit.Scope.Repository <OrderLedger>(); using (var engine = new MultiRecordEngine(typeof(DatColTransfer), typeof(DatColNormalSales))) { var file = Path.Combine(fileLocation, "datcol"); if (!File.Exists(file)) { File.Create(file).Dispose(); } engine.BeginAppendToFile(file); #region Orders var orderlinesReady = unit.Scope.Repository <OrderLine>().GetAll(x => x.isDispatched && x.OrderLedgers.Any(y => y.Status == (int)OrderLineStatus.ReadyToOrder) && x.Order.PaymentTermsCode == "Shop").ToList(); var orderlinesExport = unit.Scope.Repository <OrderLine>().GetAll(x => x.isDispatched && x.OrderLedgers.Any(y => y.Status == (int)OrderLineStatus.ProcessedExportNotification && x.Order.PaymentTermsCode == "Shop")).ToList(); var lines = orderlinesReady.Except(orderlinesExport).ToList(); lines.GroupBy(c => c.OrderID).ToList().ForEach(orderLinesCollection => { var order = unit.Scope.Repository <Order>().GetSingle(c => c.OrderID == orderLinesCollection.Key); var salesSlipNr = order.WebSiteOrderNumber.Split(new char[] { '_' }, StringSplitOptions.RemoveEmptyEntries)[1]; int counter = 1; foreach (var line in orderLinesCollection) { var barcode = line.Product.ProductBarcodes.FirstOrDefault(x => x.BarcodeType.HasValue && x.BarcodeType.Value == 0); var pfaCode = line.Product.ProductBarcodes.Where(c => c.BarcodeType == (int)BarcodeTypes.PFA).FirstOrDefault(); var articleSizeColorArray = line.Product.VendorItemNumber.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); var va = line.Product.VendorAssortments.FirstOrDefault(x => x.VendorID == line.DispatchedToVendorID); var productPrice = (va != null && va.VendorPrices.FirstOrDefault() != null ? va.VendorPrices.FirstOrDefault().Price.Value : (line.Price.HasValue ? Convert.ToDecimal(line.Price.Value) : 0)); var specialPrice = (va != null && va.VendorPrices.FirstOrDefault() != null && va.VendorPrices.FirstOrDefault().SpecialPrice.HasValue ? va.VendorPrices.FirstOrDefault().SpecialPrice.Value : 0); var articleCode = string.Empty; var colorCode = string.Empty; if (articleSizeColorArray.Count() > 0) { articleCode = articleSizeColorArray[0].PadLeft(13, '0'); } if (articleSizeColorArray.Count() > 1) { colorCode = articleSizeColorArray[1].PadLeft(3, '0'); } var sizeCode = (pfaCode != null ? pfaCode.Barcode.PadLeft(4, '0') : string.Empty); var shopNumber = line.Order.ShippedToCustomer.CompanyName.Replace("X", string.Empty); DatColTransfer sale = new DatColTransfer() { ShopAndPosNr = string.Format("{0} 01", shopNumber), SalesslipNumber = int.Parse(salesSlipNr), DateStamp = DateTime.Now, Quantity = line.Quantity, ReceivedFrom = 890, TransferNumber = string.Format("00{0}{1}", shopNumber, salesSlipNr), ArticleColorSize = String.Format("{0}{1}{2}", articleCode, colorCode, sizeCode), Barcode = barcode != null ? barcode.Barcode : string.Empty, MarkdownValue = (int)Math.Round((decimal)(line.BasePrice - line.UnitPrice) * 100), OriginalRetailValue = (int)(Math.Round((decimal)(line.Price * 100))), RecordSequence = counter * 100 }; line.SetStatus(OrderLineStatus.ProcessedExportNotification, ledgerRepo); engine.WriteNext(sale); counter++; } }); #endregion engine.Flush(); #if !DEBUG util.DisconnectNetworkPath(fileLocation); #endif unit.Save(); } } } catch (Exception ex) { log.AuditError("Sales order export failed", ex); } }
private Type CustomSelector(MultiRecordEngine engine, string record) { if (Char.IsLetter(record[0])) return typeof (CustomersSemiColon); else if (record.Length == 14) return typeof (SampleType); else return typeof (OrdersVerticalBar); }