private void add_line(HierarchicalLevelLoopWrapper hl, ShippedLine line, IEnumerable <DocumentLineItemEntity> linesFromOriginalOrder) { var lineFromOriginalOrder = linesFromOriginalOrder.Find(l => l.LineIdentifier == line.LineNumber); var parts = lineFromOriginalOrder.GetResponseElementsMatching("PO1"); if (parts.Count > 0) { line.CustomerPartNo = parts[0].Value; } var itemLevel = hl.AddLevel("I"); itemLevel.AddSegment(_segmentFactory.GetShipmentLineItem(line.LineNumber, line.CustomerPartNo.Trim(), line.ItemID)); itemLevel.AddSegment(_segmentFactory.GetLineItemShipmentDetail(line.LineNumber, line.QtyShipped, line.QtyOrdered, line.QtyShippedToDate, line.GetStatus())); itemLevel.AddSegment(_segmentFactory.GetRoutingCarrierDetails("", "", "", "P", BusinessPartner.Initech.Code, "")); if (line.QtyShipped != line.TrackingNumbers.Count()) { throw new InvalidOperationException(string.Format("Count of tracking numbers for line {0} did not match qty shipped", line.LineNumber)); } line.TrackingNumbers.ForEach(tn => itemLevel.AddSegment(_segmentFactory.GetReferenceIDSegment(Qualifier.AirBillNumber.Value.Replace(" ", ""), tn))); lineFromOriginalOrder.GetResponseElementsMatching("REF02").ForEach(r => add_ref_segment(itemLevel, r)); if (line.DateShipped == DateTime.MinValue) { line.DateShipped = DateTime.Today.AddDays(1); } itemLevel.AddSegment(_segmentFactory.GetDateTimeSegment(EDIDateQualifiers.Shipped, line.DateShipped)); }
public void can_add_segments() { var hll = HierarchicalLevelLoopWrapper.BuildWrapper("O", _resolver.GetSegmentFactoryFor(BusinessPartner.Initech), false); var child = hll.AddLevel("I"); var grandchild = hll.AddLevel("X", child); hll.SegmentCount.ShouldEqual(3); child.Count(EdiStructureNameConstants.Segment).ShouldEqual(2); grandchild.Count(EdiStructureNameConstants.Segment).ShouldEqual(1); grandchild.AddSegment(new EDIXmlSegment("", new EdiXmlBuildValues())); hll.SegmentCount.ShouldEqual(4); }
public void can_add_levels() { var hll = HierarchicalLevelLoopWrapper.BuildWrapper("O", _resolver.GetSegmentFactoryFor(BusinessPartner.VandalayIndustries), false); var child = hll.AddLevel("I"); var grandchild = hll.AddLevel("X", child); var grandchild2 = hll.AddLevel("X", child); hll.GetId().ShouldEqual("1"); hll.GetParent().ShouldEqual(""); child.GetId().ShouldEqual("2"); child.GetParent().ShouldEqual("1"); grandchild.GetId().ShouldEqual("3"); grandchild.GetParent().ShouldEqual("2"); grandchild2.GetId().ShouldEqual("4"); hll.Value.ShouldEqual("HL~1~~O\nHL~2~1~I\nHL~3~2~X\nHL~4~2~X\n"); }
protected EDIXmlTransactionSet CreateTransactionSet(OrderShippingInfo message) { if (message.Lines.Count() == 0) { throw new Exception("Shipped order contains no line items!"); } var originalDoc = _docsRepo.GetByDocumentControlNumberAndPartnerID(message.ControlNumber.CastToInt(), BusinessPartner.Initech.Number); if (originalDoc == null) { throw new Exception(string.Format("Control number {0} not found for business partner {1}.", message.ControlNumber, message.BusinessPartnerNumber)); } var orderTypeElement = originalDoc.ResponseElements.Find(e => e.ElementName == "REF02" && (e.Qualifier == Qualifier.MutuallyAssignedCode.Value)); var priorityElement = originalDoc.ResponseElements.Find(e => e.ElementName == "REF02" && (e.Qualifier == Qualifier.ServiceLevelNumber.Value)); var doc = new EDIXmlTransactionSet(_segmentFactory) { ISA = _repo.GetNextISA(GroupTypeConstants.AdvanceShipNotice, BusinessPartner.Initech.Number) }; var docDef = _repo.GetNextDocument(doc.ISA, 856); doc.SetHeader("856", docDef.ControlNumber); docDef.ERPID = message.BOL; _repo.Save(docDef.ISAEntity); doc.AddSegment(get_begin_segment(message)); if (message.MaxDateShipped() > DateTime.MinValue) { doc.AddSegment(_segmentFactory.GetDateTimeSegment(EDIDateQualifiers.Shipped, message.MaxDateShipped())); } var hl = HierarchicalLevelLoopWrapper.BuildWrapper("O", _segmentFactory, true); hl.AddSegment(_segmentFactory.GetPurchaseOrderReference(message.CustomerPO.Trim())); if (orderTypeElement != null) { hl.AddSegment(_segmentFactory.GetReferenceIDSegment(orderTypeElement.Qualifier, orderTypeElement.Value)); } if (priorityElement != null) { hl.AddSegment(_segmentFactory.GetReferenceIDSegment(priorityElement.Qualifier, priorityElement.Value)); } var addrs = new AddressLoop(_segmentFactory); if (message.ShipToAddress.AddressName.IsNullOrEmpty()) { message.ShipToAddress.AddressName = "FEDERAL EXPRESS"; } addrs.AddAddress(message.ShipToAddress, Qualifier.EmptyQualifier); addrs.AddAddress(message.ShipFromAddress, Qualifier.EmptyQualifier); hl.AddLoop(addrs); message.Lines.ForEach(l => add_line(hl, l, originalDoc.LineItems)); hl.AddTo(doc); doc.AddSegment(_segmentFactory.GetTransactionTotal(message.Lines.Count())); doc.SetFooter(); return(doc); }