private EdiSegment CreateAk5Segment(MapLoop map, EdiTrans t) { var sDef = (MapSegment)map.Content.First(s => s.Name == "AK5"); var status = "A"; var seg = new EdiSegment(sDef); switch (_settings.AckValidationErrorBehavour) { case AckValidationErrorBehavour.AcceptButNoteErrors: if (t.ValidationErrors.Any()) { status = "E"; } break; case AckValidationErrorBehavour.RejectValidationErrors: if (t.ValidationErrors.Any()) { status = "R"; } break; } seg.Content.Add(new EdiSimpleDataElement((MapSimpleDataElement)sDef.Content[0], status)); if (status == "R") { seg.Content.Add(new EdiSimpleDataElement((MapSimpleDataElement)sDef.Content[1], "5")); //AK502 = One or more segments in error } return(seg); }
protected virtual void ParseTree(EdiIntermediateEntity intermediateStructure) { foreach (EdiIntermediateEntity ent in intermediateStructure.Children) { switch (ent.EntityType) { case TokenContextType.Loop: SetMapContext(ent.Name); ParseTree(ent); break; case TokenContextType.Segment: SetMapContext(ent.Name); if (ent.Parent != null && !ent.Parent.Name.Equals(CurrentLoopDef.Name)) { ValidationError err = new ValidationError() { Message = $"Unexpected Segment at {ent.Parent.Name} > {ent.Name}." }; Trans.ValidationErrors.Add(err); } List <string> segParts = new List <string> { ent.Name }; segParts.AddRange(ent.Children.Select(el => el.ToString())); EdiSegment seg = ProcessSegment(CurrentEntityDef, segParts.ToArray(), -1, EdiInterchange.DefaultCompositeSeparator, Trans); CurrentLoopInstance.Content.Add(seg); break; } } }
public void TestSegmentGroupAddGroup() { var ediUnaConfig = new EdiUnaConfiguration(); var rffSegment = new EdiSegment("RFF", 1, ediUnaConfig); rffSegment.Add(new[] { "ON", "5" }); var dtmSegment = new EdiSegment("DTM", 1, ediUnaConfig); dtmSegment.Add(new[] { "171", "20170101", "102" }); var moaSegment = new EdiSegment("MOA", 1, ediUnaConfig); moaSegment.Add(new[] { "86", "218.39" }); var group49 = new EdiSegmentGroup(49, new EdiBaseSegment[] { moaSegment }); var group48Segments = new EdiBaseSegment[] { rffSegment, dtmSegment, group49 }; var segmentGroup48 = new EdiSegmentGroup(48, group48Segments); var groupString = segmentGroup48.ToString(); var compareString = "RFF+ON:5\'\r\nDTM+171:20170101:102\'\r\nMOA+86:218.39\'\r\n"; Assert.AreEqual(compareString, groupString); }
public void ConvertingASegmentToAString() { var segment = new EdiSegment("SEG"); segment[02] = "1234"; segment[04] = "5678"; Assert.AreEqual("SEG**1234**5678\r", segment.ToString()); }
public EdiSegment SegmentRead(double ediOutId, double nextRowNumber) { EdiSegment result = null; if (sp_SegmentRead == null) { CreateSP_SegmentRead(); } sp_SegmentRead.Transaction = connectionProvider.CurrentTransaction; lock (syncLock) { currentCommand = sp_SegmentRead; } // Set In Parameters (sp_SegmentRead.Parameters["EDIOUTID_I"] as IDbDataParameter).Value = (Decimal)ediOutId; (sp_SegmentRead.Parameters["LASTREAD_IO"] as IDbDataParameter).Value = (Decimal)nextRowNumber; // Execute stored procedure sp_SegmentRead.Prepare(); sp_SegmentRead.ExecuteNonQuery(); // Set Out Parameters string ediData; if ((sp_SegmentRead.Parameters["EDIDATA_O"] as IDbDataParameter).Value == DBNull.Value) { ediData = null; } else { ediData = Convert <string>((sp_SegmentRead.Parameters["EDIDATA_O"] as IDbDataParameter).Value); } if (!string.IsNullOrEmpty(ediData)) { result = new EdiSegment(); result.EdiOutId = ediOutId; result.EdiData = ediData; if ((sp_SegmentRead.Parameters["LASTREAD_IO"] as IDbDataParameter).Value == DBNull.Value) { result.NextRowNumber = 0D; } else { result.NextRowNumber = Convert <double>((sp_SegmentRead.Parameters["LASTREAD_IO"] as IDbDataParameter).Value); } } return(result); }
public void ConvertingASegmentToAStringWithSpecificSeparators() { var segment = new EdiSegment("SEG"); segment[02] = "1234"; segment[04] = "5678"; var options = new EdiOptions {SegmentTerminator = '~'}; Assert.AreEqual("SEG**1234**5678~", segment.ToString(options)); }
public void MappingBlankEdiWithBlankMapping() { var segments = new EdiSegment[0]; EdiMapping mapping = EdiMapping.Parse("<mapping/>"); XDocument actual = mapping.Map(segments); XDocument expected = XDocument.Parse("<mapping/>"); Assert.IsTrue(XNode.DeepEquals(expected, actual)); }
public void EdiWriter_WriteComposite() { //nonexisting map with just SLN segment to test composites M_001 map = new M_001(); EdiTrans t = new EdiTrans(map); var sDef = (MapSegment)map.Content.First(s => s.Name == "SLN"); var seg = new EdiSegment(sDef); //create composite var c001 = new EdiCompositeDataElement(sDef.Content[4], null); c001.Content.AddRange(new[] { new EdiSimpleDataElement(c001.Definition.Content[0], "PC"), new EdiSimpleDataElement(c001.Definition.Content[1], "21.1"), new EdiSimpleDataElement(c001.Definition.Content[2], "22.2"), new EdiSimpleDataElement(c001.Definition.Content[3], "EA"), new EdiSimpleDataElement(c001.Definition.Content[4], "23.3"), new EdiSimpleDataElement(c001.Definition.Content[5], "24.4") }); //create segment seg.Content.AddRange(new DataElementBase[] { new EdiSimpleDataElement(sDef.Content[0], "1.1"), new EdiSimpleDataElement(sDef.Content[1], null), new EdiSimpleDataElement(sDef.Content[2], "I"), new EdiSimpleDataElement(sDef.Content[3], "10000"), c001, new EdiSimpleDataElement(sDef.Content[5], "1.56"), new EdiSimpleDataElement(sDef.Content[6], "TP"), new EdiSimpleDataElement(sDef.Content[7], null), new EdiSimpleDataElement(sDef.Content[8], "VC"), new EdiSimpleDataElement(sDef.Content[9], "P-875OS") }); t.Content.Add(seg); string data = TestUtils.WriteEdiEnvelope(t, "ZZ"); EdiDataReader r = new EdiDataReader("EdiEngine.Tests"); EdiBatch b = r.FromString(data); EdiTrans t2 = b.Interchanges[0].Groups[0].Transactions[0]; //1 error - unknown map Assert.AreEqual(1, t2.ValidationErrors.Count); var sln = (EdiSegment)t.Content.First(); Assert.IsTrue(sln.Content[4] is EdiCompositeDataElement); Assert.AreEqual(6, ((EdiCompositeDataElement)sln.Content[4]).Content.Count); }
public void ConvertingASegmentToAStringWithSpecificSeparators() { var segment = new EdiSegment("SEG"); segment[02] = "1234"; segment[04] = "5678"; var options = new EdiOptions { SegmentTerminator = '~' }; Assert.AreEqual("SEG**1234**5678~", segment.ToString(options)); }
private EdiSegment CreateAk1Segment(MapLoop map, EdiGroup g) { var sDef = (MapSegment)map.Content.First(s => s.Name == "AK1"); var seg = new EdiSegment(sDef); seg.Content.AddRange(new[] { new EdiSimpleDataElement((MapSimpleDataElement)sDef.Content[0], g.FunctionalCode), new EdiSimpleDataElement((MapSimpleDataElement)sDef.Content[1], g.GS.Content[5].Val), }); return(seg); }
public void ConvertingAUnaSegmentToAString() { var segment = new EdiSegment("UNA"); var options = new EdiOptions { ComponentSeparator = ':', ElementSeparator = '+', ReleaseCharacter = '?', SegmentTerminator = '\'' }; Assert.AreEqual("UNA:+.? '", segment.ToString(options)); }
private EdiSegment CreateAk2Segment(MapLoop map, EdiTrans t) { var sDef = (MapSegment)map.Content.First(s => s.Name == "AK2"); var seg = new EdiSegment(sDef); seg.Content.AddRange(new[] { new EdiSimpleDataElement((MapSimpleDataElement)sDef.Content[0], t.ST.Content[0].Val), new EdiSimpleDataElement((MapSimpleDataElement)sDef.Content[1], t.ST.Content[1].Val), }); return(seg); }
public void AckBuilder_AcceptAll_WithAk2() { EdiBatch b; using (Stream s = GetType().Assembly.GetManifestResourceStream("EdiEngine.Tests.TestData.AckTest.edi")) { EdiDataReader r = new EdiDataReader(); b = r.FromStream(s); } AckBuilderSettings ackSettings = new AckBuilderSettings(AckValidationErrorBehavour.AcceptAll, true, 100, 200); var ack = new AckBuilder(ackSettings); EdiBatch ackBatch = ack.GetnerateAcknowledgment(b); //string data = ack.WriteToString(b); EdiTrans ack1 = ackBatch.Interchanges[0].Groups[0].Transactions[0]; EdiTrans ack2 = ackBatch.Interchanges[0].Groups[1].Transactions[0]; EdiSegment ak1 = (EdiSegment)ack1.Content.FirstOrDefault(l => l.Definition.GetType() == typeof(AK1)); EdiLoop loopAk2_1 = (EdiLoop)ack1.Content.FirstOrDefault(l => l.Definition.GetType() == typeof(M_997.L_AK2)); EdiLoop loopAk2_2 = (EdiLoop)ack1.Content.LastOrDefault(l => l.Definition.GetType() == typeof(M_997.L_AK2)); EdiSegment ak5_1 = (EdiSegment)loopAk2_1.Content.FirstOrDefault(l => l.Definition.GetType() == typeof(AK5)); EdiSegment ak5_2 = (EdiSegment)loopAk2_2.Content.FirstOrDefault(l => l.Definition.GetType() == typeof(AK5)); EdiSegment ak9 = (EdiSegment)ack1.Content.FirstOrDefault(l => l.Definition.GetType() == typeof(AK9)); Assert.IsNotNull(ak1); Assert.IsNotNull(loopAk2_1); Assert.AreEqual("A", ak5_1.Content[0].Val); Assert.AreEqual("A", ak5_2.Content[0].Val); Assert.IsNotNull(loopAk2_2); Assert.IsNotNull(ak9); Assert.AreEqual("A", ak9.Content[0].Val); Assert.AreEqual("2", ak9.Content[1].Val); Assert.AreEqual("2", ak9.Content[2].Val); Assert.AreEqual("2", ak9.Content[3].Val); ak1 = (EdiSegment)ack2.Content.FirstOrDefault(l => l.Definition.GetType() == typeof(AK1)); loopAk2_1 = (EdiLoop)ack1.Content.FirstOrDefault(l => l.Definition.GetType() == typeof(M_997.L_AK2)); ak5_1 = (EdiSegment)loopAk2_1.Content.FirstOrDefault(l => l.Definition.GetType() == typeof(AK5)); ak9 = (EdiSegment)ack2.Content.FirstOrDefault(l => l.Definition.GetType() == typeof(AK9)); Assert.IsNotNull(ak1); Assert.IsNotNull(loopAk2_1); Assert.AreEqual("A", ak5_1.Content[0].Val); Assert.IsNotNull(ak9); Assert.AreEqual("A", ak9.Content[0].Val); Assert.AreEqual("1", ak9.Content[1].Val); Assert.AreEqual("1", ak9.Content[2].Val); Assert.AreEqual("1", ak9.Content[3].Val); }
public void SavingAValueContainingASeparator() { var options = new EdiOptions { SegmentTerminator = '~', ElementSeparator = '*' }; var document = new EdiDocument(options); var segment = new EdiSegment("SEG"); segment[01] = document.Options.ElementSeparator.ToString(); document.Segments.Add(segment); var buffer = new StringWriter(); document.Save(buffer); }
public void CreatingASegment() { var seg = new EdiSegment("SEG"); seg[02] = "1234"; seg.Element(04, new EdiElement("5678")); Assert.IsNull(seg[01]); Assert.AreEqual("1234", seg[02]); Assert.IsNull(seg[03]); Assert.AreEqual("5678", seg[04]); Assert.IsNull(seg[05]); Assert.AreEqual(1234, seg.Element(02).RealValue); Assert.IsNull(seg.Element(03)); }
public static EdiSegment ProcessSegment(MapBaseEntity definition, string[] content, int rowPos, IValidatedEntity validationScope) { MapSegment segDef = (MapSegment)definition; EdiSegment seg = new EdiSegment(segDef); int i = 0; foreach (string val in content.Skip(1)) { MapDataElement elDef = null; if (i < segDef.Content.Count) { elDef = segDef.Content[i]; } if (elDef == null) { ValidationError err = new ValidationError() { SegmentPos = rowPos, SegmentName = content[0], ElementPos = i + 1, Message = $"Unexpected element '{val}'" }; validationScope.ValidationErrors.Add(err); } EdiDataElement el = new EdiDataElement(elDef, val); if (elDef != null && !el.IsValid(elDef)) { ValidationError err = new ValidationError() { SegmentPos = rowPos, SegmentName = content[0], ElementPos = i + 1, Message = $"Invalid value '{val}'" }; validationScope.ValidationErrors.Add(err); } i++; seg.Content.Add(el); } return(seg); }
public static EdiSegment ProcessSegment(MapBaseEntity definition, string[] content, int rowPos, string compositeSeparator, IValidatedEntity validationScope) { MapSegment segDef = (MapSegment)definition; EdiSegment seg = new EdiSegment(segDef); int i = 0; foreach (string val in content.Skip(1)) { MapSimpleDataElement elDef = null; MapCompositeDataElement cDef = null; if (i < segDef.Content.Count) { if (segDef.Content[i] is MapSimpleDataElement) { elDef = (MapSimpleDataElement)segDef.Content[i]; } else if (segDef.Content[i] is MapCompositeDataElement) { cDef = (MapCompositeDataElement)segDef.Content[i]; } } //if cDef is null - create simple element. Even if elDef is null // validation will add error of unknown element later on if (cDef == null) { EdiSimpleDataElement el = new EdiSimpleDataElement(elDef, val); seg.Content.Add(el); } else { EdiCompositeDataElement composite = new EdiCompositeDataElement(cDef); string[] compositeContent = val.Split(new[] { compositeSeparator }, StringSplitOptions.None); ProcessComposite(composite, compositeContent); seg.Content.Add(composite); } i++; } SegmentValidator.ValidateSegment(seg, rowPos, validationScope); return(seg); }
public void TestUnbMessage() { var segment = new EdiSegment("UNB", 11, new EdiUnaConfiguration()); segment.Add(new[] { "UNOC", "3" }); segment.Add(new[] { "4123...", "14" }); segment.Add(new[] { "4260...", "14" }); segment.Add(new[] { "070101", "1321" }); segment.Add(new[] { "31" }); segment.Add(new string[0]); segment.Add(new[] { "SGH-DUO" }); segment.Add(new string[0]); segment.Add(new string[0]); segment.Add(new string[0]); segment.Add(new[] { "1" }); var segmentString = segment.ToString(); Assert.AreEqual("UNB+UNOC:3+4123...:14+4260...:14+070101:1321+31++SGH-DUO++++1\'\r\n", segmentString); }
public void UpdatingElements() { var seg = new EdiSegment("SEG"); seg[01] = "ORIGINAL01"; seg[02] = "ORIGINAL02"; seg[03] = "ORIGINAL03"; seg[04] = "ORIGINAL04"; seg[05] = "ORIGINAL05"; seg[01] = "UPDATE01"; seg.Element(02, new EdiElement("UPDATE02")); seg.Element(03).Value = "UPDATE03"; seg[04] = null; seg.Element(05, null); Assert.AreEqual("UPDATE01", seg[01]); Assert.AreEqual("UPDATE02", seg[02]); Assert.AreEqual("UPDATE03", seg[03]); Assert.IsNull(seg[04]); Assert.IsNull(seg[05]); }
private EdiSegment CreateAk9Segment(MapLoop map, EdiGroup g, int includedTranCount, int receivedTranCount) { var sDef = (MapSegment)map.Content.First(s => s.Name == "AK9"); var seg = new EdiSegment(sDef); var status = "A"; int acceptedTranCount = g.Transactions.Count(t => !t.ValidationErrors.Any()); var reportedAcceptedTranCount = g.Transactions.Count; switch (_settings.AckValidationErrorBehavour) { case AckValidationErrorBehavour.AcceptButNoteErrors: if (receivedTranCount > acceptedTranCount) { status = "E"; //Accepted but errors were noted. } break; case AckValidationErrorBehavour.RejectValidationErrors: if (acceptedTranCount == 0) { status = "R"; //Rejected - no accepted trans } else if (receivedTranCount > acceptedTranCount) { status = "P"; //Partially accepted, at least one transaction set was rejected } reportedAcceptedTranCount = acceptedTranCount; break; } seg.Content.AddRange(new[] { new EdiSimpleDataElement((MapSimpleDataElement)sDef.Content[0], status), new EdiSimpleDataElement((MapSimpleDataElement)sDef.Content[1], includedTranCount.ToString()), new EdiSimpleDataElement((MapSimpleDataElement)sDef.Content[2], receivedTranCount.ToString()), new EdiSimpleDataElement((MapSimpleDataElement)sDef.Content[3], reportedAcceptedTranCount.ToString()), }); return(seg); }
public void TestSegmentGroupAddTags() { var ediUnaConfig = new EdiUnaConfiguration(); var subSegments = new EdiBaseSegment[2]; var rffSegment = new EdiSegment("RFF", 1, ediUnaConfig); rffSegment.Add(new[] { "ON", "5" }); var dtmSegment = new EdiSegment("DTM", 1, ediUnaConfig); dtmSegment.Add(new[] { "171", "20170101", "102" }); subSegments[0] = rffSegment; subSegments[1] = dtmSegment; var segmentGroup = new EdiSegmentGroup(1, subSegments); var groupString = segmentGroup.ToString(); var compareString = "RFF+ON:5'\r\nDTM+171:20170101:102'\r\n"; Assert.AreEqual(compareString, groupString); }
public static void ValidateSegment(EdiSegment seg, int rowPos, IValidatedEntity validationScope) { int i = 0; foreach (var dataElement in seg.Content) { if (dataElement is EdiSimpleDataElement) { EdiSimpleDataElement el = (EdiSimpleDataElement)dataElement; ValidateSimpleDataElement(el, seg.Name, rowPos, i + 1, validationScope); } else if (dataElement is EdiCompositeDataElement) { EdiCompositeDataElement c = (EdiCompositeDataElement)dataElement; foreach (EdiSimpleDataElement el in c.Content) { ValidateSimpleDataElement(el, seg.Name, rowPos, i + 1, validationScope); } } i++; } var syntaxNotes = ((MapSegment)seg.Definition).SyntaxNotes; if (syntaxNotes != null && syntaxNotes.Count > 0) { foreach (var sn in syntaxNotes) { var syntaxNote = SyntaxNoteFactory.GetSyntaxNote(sn); if (!syntaxNote.IsValid(seg.Content.Select(e => e.Val).ToArray())) { AddError(seg.Name, rowPos, null, $"Syntax note violation '{syntaxNote}'", validationScope); } } } }
public EdiDocument GenerateEDIUPRD(bool IsOacy, bool IsUnsc, bool IsSwnt, bool IsTest, string pipeDuns, PipelineEDISettingDTO pipelineEdiSetting, bool sendManu) { string number = String.Format("{0:d9}", (DateTime.Now.Ticks / 10) % 1000000000); string path = Path.GetRandomFileName(); path = path.Replace(".", ""); var ediDocument = new EdiDocument(); var isa = new EdiSegment("ISA"); isa[01] = "00"; isa[02] = "".PadRight(10); isa[03] = "00"; isa[04] = "".PadRight(10); isa[05] = "01"; isa[06] = pipelineEdiSetting.ISA06_Segment.Trim().PadRight(15);// service requester duns isa[07] = pipelineEdiSetting.ISA08_segment.Trim().All(char.IsDigit) == true ? "01" : "14"; isa[08] = pipelineEdiSetting.ISA08_segment.Trim().PadRight(15); isa[09] = EdiValue.Date(6, DateTime.Now); isa[10] = EdiValue.Time(4, DateTime.Now); isa[11] = pipelineEdiSetting.ISA11_Segment.Trim(); //"U";// UPRD setting ISA11_seg isa[12] = pipelineEdiSetting.ISA12_Segment.Trim(); //"00304";//Release/version*******PipelineUprdSetting_ISA12_Seg isa[13] = number; isa[14] = "0"; isa[15] = IsTest ? "T" : "P"; //Convert.ToBoolean(ConfigurationManager.AppSettings["EDIForTest"]) ? "T" : "P";//"P";//configuration setting for Test and Prod isa[16] = pipelineEdiSetting.ISA16_Segment.Trim(); //">";//uprd setting ISA16 ediDocument.Segments.Add(isa); var gs = new EdiSegment("GS"); gs[01] = pipelineEdiSetting.GS01_Segment.Trim(); //"IB"; //GS01_segment in edisetting gs[02] = pipelineEdiSetting.GS02_Segment.Trim(); //"078711334";//service requester duns gs[03] = pipelineEdiSetting.GS03_Segment.Trim(); //"RECEIVER";//GS03_Segment UPRD setting gs[04] = (pipeDuns.Trim() == "006958581" || pipeDuns.Trim() == "046077343" || pipeDuns.Trim() == "007933021" || pipeDuns.Trim() == "116025180" || pipeDuns.Trim() == "094992187" || pipeDuns.Trim() == "784158214" || pipeDuns.Trim() == "876833500" || pipeDuns.Trim() == "808168645" || pipeDuns.Trim() == "006912885" || pipeDuns.Trim() == "021632583" || pipeDuns.Trim() == "030353283" || pipeDuns.Trim() == "961777229" || pipeDuns.Trim() == "013081810" || pipeDuns.Trim() == "017738746") ? EdiValue.Date(6, DateTime.Now) : EdiValue.Date(8, DateTime.Now); gs[05] = EdiValue.Time(4, DateTime.Now); gs[06] = number.Substring(number.Length - 4, 4); gs[07] = pipelineEdiSetting.GS07_Segment.Trim(); //"X"; //GS07 segmnet in EDI setting gs[08] = pipelineEdiSetting.GS08_Segment.Trim(); //"004010"; //GS08 segment in EDI setting ediDocument.Segments.Add(gs); var st = new EdiSegment("ST"); st[01] = pipelineEdiSetting.ST01_Segment.Trim();//"846"; //ST01 Segment in EDI setting st[02] = gs[06]; ediDocument.Segments.Add(st); var bia = new EdiSegment("BIA"); bia[01] = "00"; bia[02] = "PS"; bia[03] = path.ToString(); bia[04] = EdiValue.Date(6, DateTime.Now); ediDocument.Segments.Add(bia); //var searchCri = DateTime.Parse("9/9/2017"); var dtm = new EdiSegment("DTM"); dtm[01] = "007"; if (pipeDuns.Trim() == "116025180" || pipeDuns.Trim() == "876833500") { dtm[06] = "RD8"; if (sendManu) { dtm[07] = EdiValue.Date(8, pipelineEdiSetting.StartDate) + "-" + EdiValue.Date(8, pipelineEdiSetting.EndDate); } else { dtm[07] = EdiValue.Date(8, DateTime.Now) + "-" + EdiValue.Date(8, DateTime.Now); } } else { dtm[06] = "DTS"; if (sendManu) { dtm[07] = (pipeDuns.Trim() == "094992187") ? EdiValue.Date(14, pipelineEdiSetting.StartDate.Date) : EdiValue.Date(14, pipelineEdiSetting.StartDate.AddSeconds(1));// + "-" + EdiValue.Date(14, pipelineEdiSetting.EndDate);//EdiValue.Date(8, searchCri) + "-" + EdiValue.Date(8, searchCri.AddDays(1)); } else { dtm[07] = (pipeDuns.Trim() == "094992187") ? EdiValue.Date(14, DateTime.Now.Date) : EdiValue.Date(14, DateTime.Now.Date.AddSeconds(1));// + "-" + EdiValue.Date(14, DateTime.Now);//EdiValue.Date(8, searchCri) + "-" + EdiValue.Date(8, searchCri.AddDays(1)); } } ediDocument.Segments.Add(dtm); var n1SvcPvdr = new EdiSegment("N1"); n1SvcPvdr[01] = "SJ"; n1SvcPvdr[03] = "1"; n1SvcPvdr[04] = pipeDuns.Trim();//"Receiver"; ediDocument.Segments.Add(n1SvcPvdr); var n1SvcRq = new EdiSegment("N1"); n1SvcRq[01] = "41"; n1SvcRq[03] = "1"; n1SvcRq[04] = "078711334";//Sender ediDocument.Segments.Add(n1SvcRq); if (IsOacy) { var lin = new EdiSegment("LIN"); lin[01] = "1"; lin[02] = "OA"; lin[03] = "8";//uprd_DataRequestCode.RequestCode.Trim();//"8";//oacy(8),UNSC(9),SWNT(6); ediDocument.Segments.Add(lin); } if (IsUnsc) { var lin = new EdiSegment("LIN"); lin[01] = "1"; lin[02] = "OA"; lin[03] = "9";//uprd_DataRequestCode.RequestCode.Trim();//"8";//oacy(8),UNSC(9),SWNT(6); ediDocument.Segments.Add(lin); } if (IsSwnt) { var lin = new EdiSegment("LIN"); lin[01] = "1"; lin[02] = "OA"; lin[03] = "6";//uprd_DataRequestCode.RequestCode.Trim();//"8";//oacy(8),UNSC(9),SWNT(6); ediDocument.Segments.Add(lin); } var ctt = new EdiSegment("CTT"); ctt[01] = "1"; ediDocument.Segments.Add(ctt); var se = new EdiSegment("SE"); se[01] = "8"; se[02] = st[02]; ediDocument.Segments.Add(se); var ge = new EdiSegment("GE"); ge[01] = "1"; ge[02] = gs[06]; ediDocument.Segments.Add(ge); var iea = new EdiSegment("IEA"); iea[01] = "1"; iea[02] = number; ediDocument.Segments.Add(iea); // more segments... // ediDocument.Options.SegmentTerminator = pipeDuns.Trim()== "094992187" ? Convert.ToChar("\n"): Convert.ToChar(pipelineEdiSetting.SegmentSeperator);//Segment Separator from edi setting ediDocument.Options.SegmentTerminator = !string.IsNullOrEmpty(pipelineEdiSetting.SegmentSeperator) ? Convert.ToChar(pipelineEdiSetting.SegmentSeperator) : EdiOptions.DefaultSegmentTerminator; ediDocument.Options.ElementSeparator = Convert.ToChar(pipelineEdiSetting.DataSeparator);//'*';// data separator from edi setting return(ediDocument); }
public void WriteInvoiceEdi(Invoice invoice) { var ediDocument = new EdiDocument(); var isa = new EdiSegment("ISA"); isa[01] = "00"; isa[02] = "".PadRight(10); isa[03] = "00"; isa[04] = "".PadRight(10); isa[05] = "ZZ"; isa[06] = "SENDER".PadRight(15); isa[07] = "ZZ"; isa[08] = "RECEIVER".PadRight(15); isa[09] = EdiValue.Date(6, DateTime.Now); isa[10] = EdiValue.Time(4, DateTime.Now); isa[11] = "U"; isa[12] = "00400"; isa[13] = 1.ToString("d9"); isa[14] = "0"; isa[15] = "P"; isa[16] = ">"; ediDocument.Segments.Add(isa); var gs = new EdiSegment("GS"); gs[01] = "IN"; gs[02] = "SENDER"; gs[03] = "RECEIVER"; gs[04] = EdiValue.Date(8, DateTime.Now); gs[05] = EdiValue.Time(4, DateTime.Now); gs[06] = EdiValue.Numeric(0, 1); gs[07] = "X"; gs[08] = "004010"; ediDocument.Segments.Add(gs); var st = new EdiSegment("ST"); st[01] = "810"; st[02] = "166061414"; ediDocument.Segments.Add(st); var big = new EdiSegment("BIG"); big[01] = invoice.BIG01_Date != null ? invoice.BIG01_Date.Value.ToString("yyyyMMdd") : ""; big[02] = invoice.BIG02_InvoiceNumber; big[03] = invoice.BIG03_Date != null ? invoice.BIG01_Date.Value.ToString("yyyyMMdd") : ""; big[04] = invoice.BIG04_PurchaseOrderNumber; big[07] = invoice.BIG04_TransactionTypeCode; big[08] = invoice.BIG08_TransactionSetPurposeCode; ediDocument.Segments.Add(big); foreach (var note in invoice.Notes) { var nte = new EdiSegment("NTE"); nte[01] = note.NTE01_NoteReferenceCode; nte[02] = note.NTE02_NoteDescription; ediDocument.Segments.Add(nte); } if (!(String.IsNullOrEmpty(invoice.CUR01_CurrencyEntityIdentifierCode) && String.IsNullOrEmpty(invoice.CUR02_CurrencyCode) && String.IsNullOrEmpty(invoice.CUR03_ExchangeRate))) { var cur = new EdiSegment("CUR"); cur[01] = invoice.CUR01_CurrencyEntityIdentifierCode; cur[02] = invoice.CUR02_CurrencyCode; ediDocument.Segments.Add(cur); } foreach (var invoiceRef in invoice.Refs) { var refinv = new EdiSegment("REF"); refinv[01] = invoiceRef.REF01_ReferenceIdentificationQualifier; refinv[02] = invoiceRef.REF02_ReferenceIdentification; refinv[03] = invoiceRef.REF03_Description; ediDocument.Segments.Add(refinv); } foreach (var name in invoice.Names) { var n1 = new EdiSegment("N1"); n1[01] = name.N101_EntityIdentifierCode; n1[02] = name.N102_Name; n1[03] = name.N103_IdentificationCodeQualifier; n1[04] = name.N104_IdentificationCode; ediDocument.Segments.Add(n1); if (!(String.IsNullOrEmpty(name.N201_Name) && String.IsNullOrEmpty(name.N202_Name))) { var n2 = new EdiSegment("N2"); n2[01] = name.N201_Name; n2[02] = name.N202_Name; ediDocument.Segments.Add(n2); } if (!(String.IsNullOrEmpty(name.N301_Address) && String.IsNullOrEmpty(name.N302_Address))) { var n3 = new EdiSegment("N3"); n3[01] = name.N301_Address; n3[02] = name.N302_Address; ediDocument.Segments.Add(n3); } if (!(String.IsNullOrEmpty(name.N401_City) && String.IsNullOrEmpty(name.N402_State) && String.IsNullOrEmpty(name.N403_PostalCode) && String.IsNullOrEmpty(name.N404_Country))) { var n4 = new EdiSegment("N4"); n4[01] = name.N401_City; n4[02] = name.N402_State; n4[03] = name.N403_PostalCode; n4[04] = name.N404_Country; ediDocument.Segments.Add(n4); } } var itd = new EdiSegment("ITD"); itd[01] = invoice.ITD01_TermsTypeCode; itd[02] = invoice.ITD02_TermsBasisDateCode; itd[07] = invoice.ITD07_TermsNetDays != null ? invoice.ITD07_TermsNetDays.Value.ToString() : ""; itd[12] = invoice.ITD12_Description; ediDocument.Segments.Add(itd); var dtm = new EdiSegment("DTM"); dtm[01] = invoice.DTM01_DateTimeQualifier; dtm[02] = invoice.DTM02_ShipDate != null ? invoice.DTM02_ShipDate.Value.ToString("yyyyMMdd") : ""; ediDocument.Segments.Add(dtm); foreach (var item in invoice.Items) { var it1 = new EdiSegment("IT1"); it1[01] = item.IT101_AssignedIdentification; it1[02] = item.IT102_QuantityInvoiced != null ? item.IT102_QuantityInvoiced.ToString() : ""; it1[03] = item.IT103_UnitOfMeasurement; it1[04] = item.IT104_UnitPrice != null ? item.IT104_UnitPrice.Value.ToString("0.00") : ""; it1[05] = item.IT105_BasisOfUnitPriceCode; it1[06] = item.IT106_ProductIdQualifier; it1[07] = item.IT107_ProductID; it1[08] = item.IT108_ProductIdQualifier; it1[09] = item.IT109_ProductID; it1[10] = item.IT110_ProductIdQualifier; it1[11] = item.IT111_ProductID; ediDocument.Segments.Add(it1); var pid = new EdiSegment("PID"); pid[01] = item.PID01_ItemDescriptionType; pid[05] = item.PID05_ItemDescription; ediDocument.Segments.Add(pid); } var tds = new EdiSegment("TDS"); tds[01] = invoice.TDS01_Amount != null ? invoice.TDS01_Amount.Value.ToString("0.00") : ""; ediDocument.Segments.Add(tds); var ctt = new EdiSegment("CTT"); ctt[01] = invoice.CTT01_TransactionTotals != null ? invoice.CTT01_TransactionTotals.ToString() : ""; var se = new EdiSegment("SE"); se[01] = (ediDocument.Segments.Count - 1).ToString(); se[02] = st[02]; ediDocument.Segments.Add(se); var ge = new EdiSegment("GE"); ge[01] = EdiValue.Numeric(0, 1); ge[02] = gs[06]; ediDocument.Segments.Add(ge); var iea = new EdiSegment("IEA"); iea[01] = EdiValue.Numeric(0, 1); iea[02] = isa[13]; ediDocument.Segments.Add(iea); ediDocument.Options.SegmentTerminator = '~'; ediDocument.Options.ElementSeparator = '*'; ediDocument.Save(@"..\..\..\Invoice.txt"); }
public string X12_855(Edi_SalesOrder_855 sapSalesOrder, string mode, string receiver) { M_855 map = new M_855(); EdiTrans t = new EdiTrans(map); var sDef = (MapSegment)map.Content.First(s => s.Name == "BAK"); var seg = new EdiSegment(sDef); seg.Content.AddRange(new[] { new EdiSimpleDataElement((MapSimpleDataElement)sDef.Content[0], "00"), new EdiSimpleDataElement((MapSimpleDataElement)sDef.Content[1], sapSalesOrder.Header.Status), //AD:No change AC:with change RD:rejected new EdiSimpleDataElement((MapSimpleDataElement)sDef.Content[2], sapSalesOrder.Header.PURCH_NO_C), //set 850 order number new EdiSimpleDataElement((MapSimpleDataElement)sDef.Content[3], sapSalesOrder.Header.PURCH_DATE), new EdiSimpleDataElement((MapSimpleDataElement)sDef.Content[7], sapSalesOrder.Header.OrderNumber), new EdiSimpleDataElement((MapSimpleDataElement)sDef.Content[8], sapSalesOrder.Header.DateTime) }); t.Content.Add(seg); //create segment var lDef = (MapLoop)map.Content.First(s => s.Name == "L_PO1"); sDef = (MapSegment)lDef.Content.First(s => s.Name == "PO1"); EdiLoop p01 = new EdiLoop(lDef, null); t.Content.Add(p01); //get sap order price? foreach (Edi_SalesItem_855 i in sapSalesOrder.ItemList) { seg = new EdiSegment(sDef); seg.Content.AddRange(new[] { new EdiSimpleDataElement((MapSimpleDataElement)sDef.Content[0], i.CustomerItemNumber), new EdiSimpleDataElement((MapSimpleDataElement)sDef.Content[1], i.TARGET_QTY), new EdiSimpleDataElement((MapSimpleDataElement)sDef.Content[2], i.CustomerUnit), //ok new EdiSimpleDataElement((MapSimpleDataElement)sDef.Content[3], i.Price), new EdiSimpleDataElement((MapSimpleDataElement)sDef.Content[4], i.CustomerUnitOfPrice), //ok new EdiSimpleDataElement((MapSimpleDataElement)sDef.Content[5], "BP"), new EdiSimpleDataElement((MapSimpleDataElement)sDef.Content[6], i.CUST_MAT35), new EdiSimpleDataElement((MapSimpleDataElement)sDef.Content[7], "VP"), new EdiSimpleDataElement((MapSimpleDataElement)sDef.Content[8], i.MATERIAL) }); p01.Content.Add(seg); var lDef_L_ACK = (MapLoop)lDef.Content.First(s => s.Name == "L_ACK"); var sDef_ACK = (MapSegment)lDef_L_ACK.Content.First(s => s.Name == "ACK"); EdiLoop w = new EdiLoop(lDef_L_ACK, p01); p01.Content.Add(w); foreach (Edi_SalesSchedule_855 j in sapSalesOrder.ScheduleList) { if (i.ITM_NUMBER == j.ITM_NUMBER) { seg = new EdiSegment(sDef_ACK); seg.Content.AddRange(new[] { new EdiSimpleDataElement((MapSimpleDataElement)sDef.Content[0], j.Status), //IA:accept IR:reject new EdiSimpleDataElement((MapSimpleDataElement)sDef.Content[1], j.REQ_QTY), new EdiSimpleDataElement((MapSimpleDataElement)sDef.Content[2], i.CustomerUnit), //ok new EdiSimpleDataElement((MapSimpleDataElement)sDef.Content[2], j.DateTimeCode), new EdiSimpleDataElement((MapSimpleDataElement)sDef.Content[2], j.DateTime) }); w.Content.Add(seg); } } } string data = writeEdiEnvelope(t, "PR", mode, receiver); //read produced results and check for errors. EdiDataReader r = new EdiDataReader(); EdiBatch batch = r.FromString(data); EdiTrans trans = batch.Interchanges[0].Groups[0].Transactions[0]; return(data); }
/// <summary> /// for mouser /// </summary> /// <param name="b"></param> /// <returns></returns> public override string Parse(EdiBatch b, Edi_Customer c, string parserFile) { int _ItemNumber = 1; string _CustomerName = ""; string _Log = ""; SapSalesOrder _SapSalesOrder = new SapSalesOrder(); List <SalesItem> _ItemList = new List <SalesItem>(); List <SalesPartner> _PartnerList = new List <SalesPartner>(); List <SalesSchedule> _ScheduleList = new List <SalesSchedule>(); SalesHeader _Header = new SalesHeader(); _Header.DOC_TYPE = c.DOC_TYPE; //need to discuss _Header.SALES_ORG = c.SALES_ORG; //need to discuss _Header.DISTR_CHAN = c.DISTR_CHAN; //need to discuss _Header.DIVISION = c.DIVISION; //need to discuss try { EdiTrans _PO = b.Interchanges[0].Groups[0].Transactions[0]; EdiSegment _BEG = (EdiSegment)_PO.Content.FirstOrDefault(l => l.Definition.Name == "BEG"); if (_BEG != null) { _Header.PURCH_NO_C = _BEG.Content[2].ToString(); _Header.PURCH_DATE = _BEG.Content[4].ToString(); } _SapSalesOrder.Header = _Header; var listL_N1 = _PO.Content.Where(l => l.Definition.GetType() == typeof(M_850.L_N1)).Select(l => l).ToList(); foreach (EdiLoop n1 in listL_N1) { SalesPartner _Partner = new SalesPartner(); // var _N1Loop = (EdiLoop)n1; EdiSegment _N1 = (EdiSegment)n1.Content.FirstOrDefault(l => l.Definition.Name == "N1"); if (_N1 != null) { if ((_N1.Content[0].ToString() == "BT") || (_N1.Content[0].ToString() == "BY")) { _Partner.PARTN_ROLE = "AG"; } else if (_N1.Content[0].ToString() == "ST") { _Partner.PARTN_ROLE = "WE"; } if (c.EdiType == 1) { _Partner.PARTN_NUMB = c.SapCustomerId; //how to know what code in altw sap ,loop edi table } else { _Partner.PARTN_NUMB = _N1.Content[3].ToString(); } _CustomerName = _N1.Content[1].ToString(); } EdiSegment _N3 = (EdiSegment)n1.Content.FirstOrDefault(l => l.Definition.Name == "N3"); if (_N3 != null) { _Partner.STREET = _N3.Content[0].ToString(); } EdiSegment _N4 = (EdiSegment)n1.Content.FirstOrDefault(l => l.Definition.Name == "N4"); if (_N4 != null) { _Partner.CITY = _N4.Content[0].ToString(); _Partner.POSTL_CODE = _N4.Content[2].ToString(); _Partner.COUNTRY = _N4.Content[3].ToString(); _Partner.REGION = _N4.Content[1].ToString(); } EdiSegment _PER = (EdiSegment)n1.Content.FirstOrDefault(l => l.Definition.Name == "PER"); if (_PER != null) { _Partner.NAME = _PER.Content[1].ToString(); _Partner.TELEPHONE = _PER.Content[3].ToString(); } _PartnerList.Add(_Partner); } _SapSalesOrder.PartnerList = _PartnerList; var listL_PO1 = _PO.Content.Where(l => l.Definition.GetType() == typeof(M_850.L_PO1)).Select(l => l).ToList(); foreach (EdiLoop po1 in listL_PO1) { int _SchedLine = 1; SalesItem _Item = new SalesItem(); // var _PO1Loop = (EdiLoop)po1; EdiSegment _PO1 = (EdiSegment)po1.Content.FirstOrDefault(l => l.Definition.Name == "PO1"); if (_PO1 != null) { _Item.ITM_NUMBER = (_ItemNumber * 10).ToString().PadLeft(6, '0'); //need use altw rule 000010 //mouser special logic PO111 is part number // if(c.SapCustomerId== "0010000136") _Item.MATERIAL = _PO1.Content[10].ToString(); //else _Item.MATERIAL = _PO1.Content[8].ToString(); _Item.MATERIAL = _PO1.Content[Convert.ToInt32(c.PartNumberIndex)].ToString(); _Item.TARGET_QTY = _PO1.Content[1].ToString(); _Item.CUST_MAT35 = _PO1.Content[6].ToString(); _Item.CustomerItemNumber = _PO1.Content[0].ToString(); _Item.CustomerPrice = _PO1.Content[3].ToString(); _Item.CustomerUnit = _PO1.Content[2].ToString(); _Item.CustomerUnitOfPrice = _PO1.Content[4].ToString(); } _ItemList.Add(_Item); var listL_SCH = po1.Content.Where(l => l.Definition.GetType() == typeof(M_850.L_SCH)).Select(l => l).ToList(); foreach (EdiLoop sch in listL_SCH) { SalesSchedule _Schedule = new SalesSchedule(); // var _SCHLoop = (EdiLoop)sch; EdiSegment _SCH = (EdiSegment)sch.Content.FirstOrDefault(l => l.Definition.Name == "SCH"); if (_SCH != null) { _Schedule.REQ_QTY = _SCH.Content[0].ToString(); _Schedule.ITM_NUMBER = _Item.ITM_NUMBER; _Schedule.SCHED_LINE = _SchedLine.ToString().PadLeft(4, '0'); _Schedule.REQ_DATE = _SCH.Content[5].ToString(); } _ScheduleList.Add(_Schedule); _SchedLine++; } _ItemNumber++; } _SapSalesOrder.ItemList = _ItemList; _SapSalesOrder.ScheduleList = _ScheduleList; _SapSalesOrder.CustomerName = _CustomerName; _SapSalesOrder.CreateBy = "Edi"; _SapSalesOrder.SalesEmail = c.SalesEmail; edi.SapSalesOrder = _SapSalesOrder; } catch (Exception ex) { _Log = "\r\n" + DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss") + " setSalesOrderByEdi: Customer Id:" + c.SapCustomerId + " File :" + parserFile + "\r\n" + ex.Message; logger.Error(_Log); edi.Log = _Log; } return(_Log); }
public void EdiWriter_CreateEdi940() { M_940 map = new M_940(); EdiTrans t = new EdiTrans(map); // W05 var sDef = (MapSegment)map.Content.First(s => s.Name == "W05"); var seg = new EdiSegment(sDef); seg.Content.AddRange(new[] { new EdiDataElement(sDef.Content[0], "N"), new EdiDataElement(sDef.Content[1], "538686"), new EdiDataElement(sDef.Content[2], null), new EdiDataElement(sDef.Content[3], "001001"), new EdiDataElement(sDef.Content[4], "538686") }); t.Content.Add(seg); //LX*1 var lDef = (MapLoop)map.Content.First(s => s.Name == "L_LX"); sDef = (MapSegment)lDef.Content.First(s => s.Name == "LX"); EdiLoop lx = new EdiLoop(lDef, null); t.Content.Add(lx); seg = new EdiSegment(sDef); seg.Content.Add(new EdiDataElement(sDef.Content[0], "1")); lx.Content.Add(seg); //LX > W01 loop lDef = (MapLoop)lDef.Content.First(s => s.Name == "L_W01"); sDef = (MapSegment)lDef.Content.First(s => s.Name == "W01"); EdiLoop w01 = new EdiLoop(lDef, null); lx.Content.Add(w01); seg = new EdiSegment(sDef); seg.Content.AddRange(new[] { new EdiDataElement(sDef.Content[0], "12"), new EdiDataElement(sDef.Content[1], "CA"), new EdiDataElement(sDef.Content[1], "000100033330") }); w01.Content.Add(seg); //LX*2 lDef = (MapLoop)map.Content.First(s => s.Name == "L_LX"); sDef = (MapSegment)lDef.Content.First(s => s.Name == "LX"); lx = new EdiLoop(lDef, null); t.Content.Add(lx); seg = new EdiSegment(sDef); seg.Content.Add(new EdiDataElement(sDef.Content[0], "2")); lx.Content.Add(seg); //LX > W01 loop lDef = (MapLoop)lDef.Content.First(s => s.Name == "L_W01"); sDef = (MapSegment)lDef.Content.First(s => s.Name == "W01"); w01 = new EdiLoop(lDef, null); lx.Content.Add(w01); seg = new EdiSegment(sDef); seg.Content.AddRange(new[] { new EdiDataElement(sDef.Content[0], "10"), new EdiDataElement(sDef.Content[1], "CA"), new EdiDataElement(sDef.Content[1], "000100033332") }); w01.Content.Add(seg); //write test envelope string data = TestUtils.WriteEdiEnvelope(t, "OW"); //read produced results and check for errors. EdiDataReader r = new EdiDataReader(); EdiBatch batch = r.FromString(data); Assert.AreEqual(1, batch.Interchanges.Count); Assert.AreEqual(0, batch.Interchanges[0].ValidationErrors.Count); Assert.AreEqual(1, batch.Interchanges[0].Groups.Count); Assert.AreEqual(0, batch.Interchanges[0].Groups[0].ValidationErrors.Count); EdiTrans trans = batch.Interchanges[0].Groups[0].Transactions[0]; Assert.AreEqual(0, trans.ValidationErrors.Count); }
/// <summary> /// Write a segment to the destination. /// </summary> /// <param name="ediSegment">The segment.</param> public override void Write(EdiSegment ediSegment) { var segment = new Segment(ediSegment.GetStandardType(), ediSegment); Write(segment.Generate(_separators, PreserveWhitespace)); }
public void SavingAValueContainingASeparator() { var options = new EdiOptions {SegmentTerminator = '~', ElementSeparator = '*'}; var document = new EdiDocument(options); var segment = new EdiSegment("SEG"); segment[01] = document.Options.ElementSeparator.ToString(); document.Segments.Add(segment); var buffer = new StringWriter(); document.Save(buffer); }
public override void Write(EdiSegment ediSegment) { var segment = new Segment(ediSegment.GetStandardType(), ediSegment); Write(segment.Generate(Pad)); }
/// <summary> /// Write a segment to the destination. /// </summary> /// <param name="ediSegment">The segment.</param> public abstract void Write(EdiSegment ediSegment);
public string WritePurchaseOrderEdi(PurchaseOrder purchaseOrder, int customerId) { string custId = customerId.ToString(); while (custId.Length < 8) { custId = "0" + custId; } var ediDocument = new EdiDocument(); var isa = new EdiSegment("ISA"); isa[01] = "00"; isa[02] = "".PadRight(10); isa[03] = "00"; isa[04] = "".PadRight(10); isa[05] = "ZZ"; isa[06] = custId.PadRight(15); isa[07] = "ZZ"; isa[08] = "RECEIVER".PadRight(15); isa[09] = EdiValue.Date(6, DateTime.Now); isa[10] = EdiValue.Time(4, DateTime.Now); isa[11] = "U"; isa[12] = "00401"; isa[13] = 1.ToString("d9"); isa[14] = "0"; isa[15] = "P"; isa[16] = ">"; ediDocument.Segments.Add(isa); var gs = new EdiSegment("GS"); gs[01] = "PO"; gs[02] = "SENDER".PadRight(15); gs[03] = "RECEIVER".PadRight(15); gs[04] = EdiValue.Date(8, DateTime.Now); gs[05] = EdiValue.Time(4, DateTime.Now); gs[06] = EdiValue.Numeric(0, 1); gs[07] = "X"; gs[08] = "004010"; ediDocument.Segments.Add(gs); var st = new EdiSegment("ST"); st[01] = "850"; st[02] = "166061414"; ediDocument.Segments.Add(st); var beg = new EdiSegment("BEG"); beg[01] = purchaseOrder.BEG01_TransactionSetPurposeCode; beg[02] = purchaseOrder.BEG02_PurchaseOrderTypeCode; beg[03] = purchaseOrder.BEG03_PurchaseOrderNumber; beg[04] = ""; beg[05] = purchaseOrder.BEG05_Date != null ? purchaseOrder.BEG05_Date.Value.ToString("yyyyMMdd") : ""; ediDocument.Segments.Add(beg); if (!(String.IsNullOrEmpty(purchaseOrder.CUR01_CurrencyEntityIdentifierCode) && String.IsNullOrEmpty(purchaseOrder.CUR02_CurrencyCode))) { var cur = new EdiSegment("CUR"); cur[01] = purchaseOrder.CUR01_CurrencyEntityIdentifierCode; cur[02] = purchaseOrder.CUR02_CurrencyCode; ediDocument.Segments.Add(cur); } foreach (var poRef in purchaseOrder.Refs) { var refpo = new EdiSegment("REF"); refpo[01] = poRef.REF01_ReferenceIdentificationQualifier; refpo[02] = poRef.REF02_ReferenceIdentification; refpo[03] = poRef.REF03_Description; ediDocument.Segments.Add(refpo); } foreach (var dtm in purchaseOrder.Dtms) { var dtmpo = new EdiSegment("DTM"); dtmpo[01] = dtm.DTM01_DateTimeQualifier; dtmpo[02] = dtm.DTM02_PurchaseOrderDate != null ? dtm.DTM02_PurchaseOrderDate.Value.ToString("yyyyMMdd") : ""; ediDocument.Segments.Add(dtmpo); } foreach (var name in purchaseOrder.Names) { var n1 = new EdiSegment("N1"); n1[01] = name.N101_EntityIdentifierCode; n1[02] = name.N102_Name; n1[03] = name.N103_IdentificationCodeQualifier; n1[04] = name.N104_IdentificationCode; ediDocument.Segments.Add(n1); if (!(String.IsNullOrEmpty(name.N201_Name) && String.IsNullOrEmpty(name.N202_Name))) { var n2 = new EdiSegment("N2"); n2[01] = name.N201_Name; n2[02] = name.N202_Name; ediDocument.Segments.Add(n2); } if (!(String.IsNullOrEmpty(name.N301_Address) && String.IsNullOrEmpty(name.N302_Address))) { var n3 = new EdiSegment("N3"); n3[01] = name.N301_Address; n3[02] = name.N302_Address; ediDocument.Segments.Add(n3); } if (!(String.IsNullOrEmpty(name.N401_City) && String.IsNullOrEmpty(name.N402_State) && String.IsNullOrEmpty(name.N403_PostalCode) && String.IsNullOrEmpty(name.N404_Country))) { var n4 = new EdiSegment("N4"); n4[01] = name.N401_City; n4[02] = name.N402_State; n4[03] = name.N403_PostalCode; n4[04] = name.N404_Country; ediDocument.Segments.Add(n4); } foreach (var nameRef in name.Refs) { var refname = new EdiSegment("REF"); refname[01] = nameRef.REF01_ReferenceIdentificationQualifier; refname[02] = nameRef.REF02_ReferenceIdentification; refname[03] = nameRef.REF03_Description; ediDocument.Segments.Add(refname); } } foreach (var item in purchaseOrder.Items) { var po1 = new EdiSegment("PO1"); po1[01] = item.PO101_AssignedIdentification; po1[02] = item.PO102_QuantityOrdered != null ? item.PO102_QuantityOrdered.ToString() : ""; po1[03] = item.PO103_UnitOfMeasurement; po1[04] = item.PO104_UnitPrice != null ? item.PO104_UnitPrice.Value.ToString("0.00") : ""; po1[05] = item.PO105_BasisOfUnitPriceCode; po1[06] = item.PO106_ProductIdQualifier; po1[07] = item.PO107_ProductID; po1[08] = item.PO108_ProductIdQualifier; po1[09] = item.PO109_ProductID; ediDocument.Segments.Add(po1); var cur = new EdiSegment("CUR"); cur[01] = item.CUR01_CurrencyEntityIdentifierCode; cur[02] = item.CUR02_CurrencyCode; ediDocument.Segments.Add(cur); var itref = new EdiSegment("REF"); itref[01] = item.REF01_ReferenceIdentificationQualifier; itref[02] = item.REF02_ReferenceIdentification; ediDocument.Segments.Add(itref); foreach (var dtm in item.Dtms) { var dtmit = new EdiSegment("DTM"); dtmit[01] = dtm.DTM01_DateTimeQualifier; dtmit[02] = dtm.DTM02_PurchaseOrderDate != null ? dtm.DTM02_PurchaseOrderDate.Value.ToString("yyyyMMdd") : ""; ediDocument.Segments.Add(dtmit); } foreach (var name in purchaseOrder.Names) { var n1 = new EdiSegment("N1"); n1[01] = name.N101_EntityIdentifierCode; n1[02] = name.N102_Name; n1[03] = name.N103_IdentificationCodeQualifier; n1[04] = name.N104_IdentificationCode; ediDocument.Segments.Add(n1); if (!(String.IsNullOrEmpty(name.N201_Name) && String.IsNullOrEmpty(name.N202_Name))) { var n2 = new EdiSegment("N2"); n2[01] = name.N201_Name; n2[02] = name.N202_Name; ediDocument.Segments.Add(n2); } if (!(String.IsNullOrEmpty(name.N301_Address) && String.IsNullOrEmpty(name.N302_Address))) { var n3 = new EdiSegment("N3"); n3[01] = name.N301_Address; n3[02] = name.N302_Address; ediDocument.Segments.Add(n3); } if (!(String.IsNullOrEmpty(name.N401_City) && String.IsNullOrEmpty(name.N402_State) && String.IsNullOrEmpty(name.N403_PostalCode) && String.IsNullOrEmpty(name.N404_Country))) { var n4 = new EdiSegment("N4"); n4[01] = name.N401_City; n4[02] = name.N402_State; n4[03] = name.N403_PostalCode; n4[04] = name.N404_Country; ediDocument.Segments.Add(n4); } foreach (var nameRef in name.Refs) { var refname = new EdiSegment("REF"); refname[01] = nameRef.REF01_ReferenceIdentificationQualifier; refname[02] = nameRef.REF02_ReferenceIdentification; refname[03] = nameRef.REF03_Description; ediDocument.Segments.Add(refname); } } } var ctt = new EdiSegment("CTT"); ctt[01] = purchaseOrder.CTT01_NumberofLineItems != null ? purchaseOrder.CTT01_NumberofLineItems.ToString() : ""; ediDocument.Segments.Add(ctt); var amt = new EdiSegment("AMT"); amt[01] = purchaseOrder.AMT01_AmountQualifierCode; amt[02] = purchaseOrder.AMT02_Amount != null ? purchaseOrder.AMT02_Amount.Value.ToString("0.00") : ""; ediDocument.Segments.Add(amt); var se = new EdiSegment("SE"); se[01] = (ediDocument.Segments.Count - 1).ToString(); se[02] = st[02]; ediDocument.Segments.Add(se); var ge = new EdiSegment("GE"); ge[01] = EdiValue.Numeric(0, 1); ge[02] = gs[06]; ediDocument.Segments.Add(ge); var iea = new EdiSegment("IEA"); iea[01] = EdiValue.Numeric(0, 1); iea[02] = isa[13]; ediDocument.Segments.Add(iea); ediDocument.Options.SegmentTerminator = '~'; ediDocument.Options.ElementSeparator = '*'; var filename = Path.Combine(Settings.EdiTextFileDirectory, "SENDER_" + DateTime.Now.ToString("yyyy-mm-dd_hh.mm.ss") + ".txt"); ediDocument.Save(filename); return(filename); }