Beispiel #1
0
        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);
        }
Beispiel #2
0
        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());
        }
Beispiel #5
0
        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));
        }
Beispiel #7
0
        public void ConvertingASegmentToAString()
        {
            var segment = new EdiSegment("SEG");

            segment[02] = "1234";
            segment[04] = "5678";

            Assert.AreEqual("SEG**1234**5678\r", segment.ToString());
        }
        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));
        }
Beispiel #9
0
        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));
        }
Beispiel #10
0
        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);
        }
Beispiel #11
0
        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));
        }
Beispiel #12
0
        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);
        }
Beispiel #13
0
        public void ConvertingAUnaSegmentToAString()
        {
            var segment = new EdiSegment("UNA");
            var options = new EdiOptions
            {
                ComponentSeparator = ':',
                ElementSeparator = '+',
                ReleaseCharacter = '?',
                SegmentTerminator = '\''
            };

            Assert.AreEqual("UNA:+.? '", segment.ToString(options));
        }
Beispiel #14
0
        public void ConvertingAUnaSegmentToAString()
        {
            var segment = new EdiSegment("UNA");
            var options = new EdiOptions
            {
                ComponentSeparator = ':',
                ElementSeparator   = '+',
                ReleaseCharacter   = '?',
                SegmentTerminator  = '\''
            };

            Assert.AreEqual("UNA:+.? '", segment.ToString(options));
        }
Beispiel #15
0
        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);
        }
Beispiel #16
0
        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);
        }
Beispiel #17
0
        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);
        }
Beispiel #18
0
        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));
        }
Beispiel #19
0
        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));
        }
Beispiel #20
0
        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);
        }
Beispiel #22
0
        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);
        }
Beispiel #23
0
        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]);
        }
Beispiel #24
0
        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);
        }
Beispiel #25
0
        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]);
        }
Beispiel #26
0
        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);
        }
Beispiel #27
0
        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);
                    }
                }
            }
        }
Beispiel #28
0
        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);
        }
Beispiel #29
0
        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);
        }
Beispiel #31
0
        /// <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);
        }
Beispiel #32
0
        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);
        }
Beispiel #33
0
        /// <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);
 }
Beispiel #35
0
        public override void Write(EdiSegment ediSegment)
        {
            var segment = new Segment(ediSegment.GetStandardType(), ediSegment);

            Write(segment.Generate(Pad));
        }
Beispiel #36
0
 /// <summary>
 /// Write a segment to the destination.
 /// </summary>
 /// <param name="ediSegment">The segment.</param>
 public abstract void Write(EdiSegment ediSegment);
Beispiel #37
0
        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);
        }