コード例 #1
0
        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));
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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");
        }
コード例 #4
0
        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);
        }