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)); }