Пример #1
0
        private EDIXmlTransactionSet create_transaction_set(InvoicedOrderMessage orderMessage)
        {
            if (orderMessage.Customer == null)
            {
                throw new ApplicationException("There is no customer associated with invoiced order message "
                                               + orderMessage.ControlNumber + ".  Cannot build 810.");
            }


            var orderDoc = _docsRepo.GetByDocumentControlNumberAndPartnerID(orderMessage.ControlNumber.CastToInt(), BusinessPartner.Initech.Number);

            if (orderDoc == null)
            {
                throw new Exception(string.Format("Control number {0} not found for business partner {1}.",
                                                  orderMessage.ControlNumber, orderMessage.BusinessPartnerNumber));
            }
            var responseElements = orderDoc.ResponseElements.Where(e => e.ElementName == "REF02");

            var isa = _repo.GetNextISA(GroupTypeConstants.Invoice, BusinessPartner.Initech.Number);

            if (orderMessage.LineCount() == 0)
            {
                throw new Exception("Invoiced order contains no line items!");
            }

            var doc = new EDIXmlTransactionSet(_segmentFactory)
            {
                ISA = isa
            };

            var docDef = _repo.GetNextDocument(isa, 810);

            doc.SetHeader("810", docDef.ControlNumber);

            docDef.ERPID = orderMessage.BOL;

            _repo.Save(docDef.ISAEntity);

            doc.AddSegment(get_begin_segment(orderMessage));

            //doc.AddSegment(_segmentFactory.GetCurrencySegment("II",orderMessage.CurrencyCode));

            if (responseElements != null)
            {
                responseElements.ForEach(r => doc.AddSegment(_segmentFactory.GetReferenceIDSegment(r.Qualifier,
                                                                                                   r.Value)));
            }

            doc.AddLoop(get_address_loop(orderMessage));

            // doc.AddSegment(get_terms(orderMessage));

            doc.AddLoop(get_detail_loop(orderMessage, orderDoc.LineItems));

            doc.AddSegment(_segmentFactory.GetTotalMonetaryValue(orderMessage.GetTotal()));

            doc.AddSegment(_segmentFactory.GetTaxInformationSegment("SU", orderMessage.SalesTax));

            doc.AddSegment(_segmentFactory.GetCarrierDetail("P", "Initech"));

            doc.AddSegment(_segmentFactory.GetTransactionTotal(orderMessage.LineCount()));


            doc.SetFooter();

            return(doc);
        }