예제 #1
0
        private static async Task <TSDESADV> BuildDespatchAdviceForOrder(TSORDERS ediItem, IEnumerable <string> serialNumbers, string controlNumber)
        {
            switch (ediItem.BGM.Messagefunctioncoded_03)
            {
            case "9":
            case "4":
                return(await DespatchAdviceShipmentBuilder.BuildDespatchAdvice(controlNumber, ediItem, serialNumbers));

            case "38":
                return(DespatchAdviceGRBuilder.BuildDespatchAdvice(controlNumber, ediItem, serialNumbers));
            }

            throw new ArgumentException("Unknown order type " + ediItem.BGM.Messagefunctioncoded_03);
        }
예제 #2
0
        private static void BuildOrderData(InventoryRecoBuilder builder, TSORDERS item)
        {
            var loc      = item.FTX?.FirstOrDefault()?.TEXTLITERAL_04?.Freetext_01?.Split(';');
            var plant    = (loc != null && loc.Length >= 2) ? loc[1] : null;
            var location = (loc != null && loc.Length >= 2) ? loc[0] : null;

            foreach (var lin in item.LINLoop)
            {
                builder.WithMaterial(lin.LIN.ITEMNUMBERIDENTIFICATION_03.Itemnumber_01,
                                     plant,
                                     location ?? "CA01",
                                     lin.QTY.Sum(q => Convert.ToInt32(q.QUANTITYDETAILS_01.Quantity_02)));
            }
        }
        public static TSDESADV BuildDespatchAdvice(string controlNumber, TSORDERS adv, IEnumerable <string> serialNumbers)
        {
            var serialNumberQueue = new Queue <string>(serialNumbers);

            var result = new TSDESADV();

            result.UNH = new UNH();
            result.UNH.MessageReferenceNumber_01                      = controlNumber.PadLeft(14, '0');
            result.UNH.MessageIdentifier_02                           = new S009();
            result.UNH.MessageIdentifier_02.MessageType_01            = "DESADV";
            result.UNH.MessageIdentifier_02.MessageVersionNumber_02   = "D";
            result.UNH.MessageIdentifier_02.MessageReleaseNumber_03   = "97A";
            result.UNH.MessageIdentifier_02.ControllingAgencyCoded_04 = "UN";

            result.BGM = new BGM();
            result.BGM.DOCUMENTMESSAGENAME_01 = new C002();
            result.BGM.DOCUMENTMESSAGENAME_01.Documentmessagenamecoded_01 = "631";
            result.BGM.Messagefunctioncoded_03 = "6";

            result.RFFLoop = new List <Loop_RFF_DESADV>
            {
                new Loop_RFF_DESADV
                {
                    RFF = new RFF
                    {
                        REFERENCE_01 = new C506
                        {
                            Referencequalifier_01 = "ALQ",
                            Referencenumber_02    = adv.RFFLoop
                                                    .First(r => r.RFF.REFERENCE_01.Referencequalifier_01 == "AAJ")
                                                    .RFF.REFERENCE_01.Referencenumber_02
                        }
                    },
                    DTM = new DTM
                    {
                        DATETIMEPERIOD_01 = new C507
                        {
                            Datetimeperiodqualifier_01 = "3",
                            Datetimeperiod_02          = DateTime.Now.Date.ToString("yyyyMMdd")
                        }
                    }
                },
            };

            var loc      = adv.FTX?.FirstOrDefault()?.TEXTLITERAL_04?.Freetext_01?.Split(';');
            var plant    = (loc != null && loc.Length >= 2) ? loc[1] : null;
            var location = (loc != null && loc.Length >= 2) ? loc[0] : null;

            result.NADLoop = new List <Loop_NAD_DESADV>
            {
                new Loop_NAD_DESADV
                {
                    NAD = new NAD
                    {
                        Partyqualifier_01             = "WH",
                        PARTYIDENTIFICATIONDETAILS_02 = new C082
                        {
                            Partyididentification_01 = "recon group" //TODO: what is a correct one?
                        }
                    },
                    LOC = new List <LOC>
                    {
                        new LOC
                        {
                            Placelocationqualifier_01 = "4",
                            LOCATIONIDENTIFICATION_02 = new C517
                            {
                                Placelocation_04 = plant,
                                Placelocationidentification_01 = location
                            }
                        }
                    }
                }
            };


            result.CPSLoop = new List <Loop_CPS_DESADV>
            {
                new Loop_CPS_DESADV
                {
                    CPS = new CPS
                    {
                        Hierarchicalidnumber_01 = "1",
                        //  Packaginglevelcoded_03 = "1"
                    },
                    LINLoop = adv.LINLoop.Select(ln =>

                                                 new Loop_LIN_DESADV
                    {
                        LIN = new LIN
                        {
                            Lineitemnumber_01           = ln.LIN.Lineitemnumber_01,
                            ITEMNUMBERIDENTIFICATION_03 = new C212
                            {
                                Itemnumber_01          = ln.LIN.ITEMNUMBERIDENTIFICATION_03.Itemnumber_01,
                                Itemnumbertypecoded_02 = "VN"
                            }
                        },
                        QTY = ln.QTY.Select(q => new QTY
                        {
                            QUANTITYDETAILS_01 = new C186
                            {
                                Quantityqualifier_01    = "21",
                                Quantity_02             = q.QUANTITYDETAILS_01.Quantity_02,
                                Measureunitqualifier_03 = "12"
                            }
                        }).ToList(),
                        ALI = new List <ALI>
                        {
                            new ALI {
                                Countryoforigincoded_01 = "US"
                            }
                        },
                        GIN = new List <GIN>
                        {
                            new GIN
                            {
                                Identitynumberqualifier_01 = "ML",
                                IDENTITYNUMBERRANGE_02     = new C208
                                {
                                    Identitynumber_01 = "DUMMYPALLETID"
                                }
                            },
                        },

                        /*  LOCLoop = ln.LOCLoop?.Select(lc => new Loop_LOC_DESADV_2
                         * {
                         *    LOC = new LOC
                         *    {
                         *        Placelocationqualifier_01 = "4",
                         *        LOCATIONIDENTIFICATION_02 = new C517
                         *        {
                         *            Placelocation_04 = plant,
                         *            Placelocationidentification_01 =
                         *                string.IsNullOrEmpty(lc.LOC?.LOCATIONIDENTIFICATION_02?.Placelocation_04)
                         *                    ? location
                         *                    : lc.LOC.LOCATIONIDENTIFICATION_02.Placelocation_04
                         *        }
                         *    }
                         * }).ToList(),*/
                        PCILoop = Enumerable.Range(1,
                                                   ln.QTY.Sum(q => Convert.ToInt32(
                                                                  q.QUANTITYDETAILS_01.Quantity_02))
                                                   ).Select(i => new Loop_PCI_DESADV_2
                        {
                            PCI = new PCI
                            {
                                Markinginstructionscoded_01 = "ZZZ",
                                MARKSLABELS_02 = new C210
                                {
                                    Shippingmarks_01 = serialNumberQueue.Dequeue()
                                }
                            }
                        }).ToList()
                    }

                                                 ).ToList()
                }
            };

            return(result);
        }
예제 #4
0
파일: Examples.cs 프로젝트: mrtinkz/Sdk
 private static void ProcessPurchaseOrder(UNB unb, UNG ung, TSORDERS purchaseOrder)
 {
     //  Do something with the purchase order
 }
예제 #5
0
        private static string ExportToCsv(TSORDERS po)
        {
            var result = new StringBuilder();

            result.AppendLine("LINE_NUMBER,UPC_NUMBER,QUANTITY,PRICE,UOM,PO_NUMBER,PO_DATE,CUSTOMER_NAME,CUSTOMER_NUMBER,ADDRESS,CITY,STATE,POSTAL_CODE");

            var orderNr   = po.BGM.Documentmessagenumber_02;
            var orderDate = "";
            var dtm       = po.DTM.Where(d => d.DATETIMEPERIOD_01.Datetimeperiodqualifier_01 == "137").FirstOrDefault();

            if (dtm != null)
            {
                orderDate = dtm.DATETIMEPERIOD_01.Datetimeperiod_02;
            }

            var customer   = "";
            var customerNr = "";
            var address    = "";
            var city       = "";
            var state      = "";
            var postCode   = "";
            var nadLoop    = po.NADLoop.Where(nl => nl.NAD.Partyqualifier_01 == "BY").FirstOrDefault();

            if (nadLoop != null)
            {
                customer   = nadLoop.NAD.PARTYNAME_04.Partyname_01;
                customerNr = nadLoop.NAD.PARTYIDENTIFICATIONDETAILS_02.Partyididentification_01;
                address    = nadLoop.NAD.STREET_05.Streetandnumberpobox_01;
                city       = nadLoop.NAD.Cityname_06;
                state      = nadLoop.NAD.Countrysubentityidentification_07;
                postCode   = nadLoop.NAD.Postcodeidentification_08;
            }

            foreach (var linLoop in po.LINLoop)
            {
                //  Add line number
                var line = linLoop.LIN.Lineitemnumber_01 + ",";
                //  Add item number
                line += linLoop.LIN.ITEMNUMBERIDENTIFICATION_03.Itemnumber_01 + ",";

                string quantity = "";
                string uom      = "";
                var    qty      = linLoop.QTY.Where(q => q.QUANTITYDETAILS_01.Quantityqualifier_01 == "21").FirstOrDefault();
                if (qty != null)
                {
                    quantity = qty.QUANTITYDETAILS_01.Quantity_02;
                    uom      = qty.QUANTITYDETAILS_01.Measureunitqualifier_03;
                }

                //  Add quantity
                line += quantity + ",";

                string price   = "";
                var    priLoop = linLoop.PRILoop.Where(pl => pl.PRI.PRICEINFORMATION_01.Pricequalifier_01 == "AAA").FirstOrDefault();
                if (priLoop != null)
                {
                    price = priLoop.PRI.PRICEINFORMATION_01.Price_02;
                }
                //  Add price
                line += price + ",";
                //  Add uom
                line += uom + ",";
                //  Add po number
                line += orderNr + ",";
                //  Add po date
                line += orderDate + ",";
                //  Add customer name
                line += customer + ",";
                //  Add customer number
                line += customerNr + ",";
                //  Add address line 1
                line += address + ",";
                //  Add city
                line += city + ",";
                //  Add state
                line += state + ",";
                //  Add postal code
                line += postCode + ",";

                result.AppendLine(line.TrimEnd(new[] { ',' }));
            }

            return(result.ToString());
        }
예제 #6
0
        private static void WriteLenovoOrder(TSORDERS order, FieldWriter writer)
        {
            writer.WL("MessageReferenceNumber_01", order.UNH.MessageReferenceNumber_01);
            foreach (var dtm in order.DTM)
            {
                writer.WL(MapLenovoDate.TryGetValue(dtm.DATETIMEPERIOD_01.Datetimeperiodqualifier_01, out var d) ? d :
                          dtm.DATETIMEPERIOD_01.Datetimeperiodqualifier_01 + " search here http://www.stylusstudio.com/edifact/D97A/2380.htm"
                          , dtm.DATETIMEPERIOD_01.Datetimeperiod_02);
            }

            writer.WL(" ", "");
            if (order.FTX != null)
            {
                foreach (var ftx in order.FTX)
                {
                    writer.WL("delivery instruction", ftx.TEXTLITERAL_04.Freetext_01);
                }
            }
            writer.WL(" ", "");
            foreach (var rff in order.RFFLoop)
            {
                writer.WL(
                    MapLenovoRff.TryGetValue(rff.RFF.REFERENCE_01.Referencequalifier_01, out var rffn) ? rffn :
                    rff.RFF.REFERENCE_01.Referencequalifier_01 + " search here http://www.stylusstudio.com/edifact/D97A/1153.htm"
                    , rff.RFF.REFERENCE_01.Referencenumber_02);
            }
            writer.WL(" ", "");

            foreach (var nad in order.NADLoop)
            {
                writer.WL(MapLenovoParty.TryGetValue(nad.NAD.Partyqualifier_01, out var d) ? d :
                          nad.NAD.Partyqualifier_01 + " search here http://www.stylusstudio.com/edifact/D97A/2380.htm"
                          , nad.NAD.PARTYIDENTIFICATIONDETAILS_02?.Partyididentification_01);

                writer.WL("Nameandaddressline_01", nad.NAD.NAMEANDADDRESS_03?.Nameandaddressline_01);
                writer.WL("Nameandaddressline_02", nad.NAD.NAMEANDADDRESS_03?.Nameandaddressline_02);
                writer.WL("Nameandaddressline_03", nad.NAD.NAMEANDADDRESS_03?.Nameandaddressline_03);

                writer.WL("Streetandnumberpobox_01", nad.NAD.STREET_05?.Streetandnumberpobox_01);
                writer.WL("Streetandnumberpobox_02", nad.NAD.STREET_05?.Streetandnumberpobox_02);
                writer.WL("Streetandnumberpobox_03", nad.NAD.STREET_05?.Streetandnumberpobox_03);

                writer.WL("Cityname_06", nad.NAD.Cityname_06);
                writer.WL("Postcodeidentification_08", nad.NAD.Postcodeidentification_08);
                writer.WL("Countrycoded_09", nad.NAD.Countrycoded_09);
                writer.WL(" ", "");
            }

            foreach (var tdt in order.TDTLoop)
            {
                writer.WL("Carrieridentification_01", tdt.TDT.CARRIER_05?.Carrieridentification_01);
                writer.WL("Carriername_04", tdt.TDT.CARRIER_05?.Carriername_04);
                writer.WL("Idofmeansoftransportidentification_01", tdt.TDT.TRANSPORTIDENTIFICATION_08?.Idofmeansoftransportidentification_01);
            }

            writer.WL("------ lines -----", "");
            foreach (var lin in order.LINLoop)
            {
                writer.WL("Lineitemnumber_01", lin.LIN.Lineitemnumber_01);
                writer.WL("item type", lin.LIN.ITEMNUMBERIDENTIFICATION_03.Itemnumber_01);
                foreach (var qty in lin.QTY)
                {
                    writer.WL("despatch quantity", qty.QUANTITYDETAILS_01.Quantity_02);
                }

                foreach (var loc in lin.LOCLoop)
                {
                    writer.WL("Storage Location", loc.LOC.LOCATIONIDENTIFICATION_02.Placelocation_04);
                }

                if (lin.GIN != null)
                {
                    foreach (var gin in lin.GIN)
                    {
                        writer.WL("serial number", gin.IDENTITYNUMBERRANGE_02.Identitynumber_01);
                    }
                }

                if (lin.GIR != null)
                {
                    foreach (var gir in lin.GIR)
                    {
                        writer.WL("package", gir.IDENTIFICATIONNUMBER_02.Identitynumber_01);
                    }
                }
                writer.WL(" ", "");
            }
        }
예제 #7
0
        /// <summary>
        /// Build purchase order.
        /// Original from https://www.gs1.org/standards/edi-xml-gs1-eancom/eancom-orders-s4/syntax-4
        /// </summary>
        public static TSORDERS BuildPurchaseOrder(string controlNumber)
        {
            var result = new TSORDERS();

            //  Message header
            result.UNH = new UNH();
            result.UNH.MessageReferenceNumber_01                      = controlNumber.PadLeft(14, '0');
            result.UNH.MessageIdentifier_02                           = new S009();
            result.UNH.MessageIdentifier_02.MessageType_01            = "ORDERS";
            result.UNH.MessageIdentifier_02.MessageVersionNumber_02   = "D";
            result.UNH.MessageIdentifier_02.MessageReleaseNumber_03   = "96A";
            result.UNH.MessageIdentifier_02.ControllingAgencyCoded_04 = "UN";

            //  Order number 128576
            result.BGM = new BGM();
            result.BGM.DOCUMENTMESSAGENAME_01 = new C002();
            result.BGM.DOCUMENTMESSAGENAME_01.Documentmessagenamecoded_01 = "220";
            result.BGM.Documentmessagenumber_02 = "128576";
            result.BGM.Messagefunctioncoded_03  = "9";

            //  Repeating DTM
            result.DTM = new List <DTM>();

            //  Message date 30th of August 2002
            var dtm = new DTM();

            dtm.DATETIMEPERIOD_01 = new C507();
            dtm.DATETIMEPERIOD_01.Datetimeperiodqualifier_01       = "137";
            dtm.DATETIMEPERIOD_01.Datetimeperiod_02                = "20020830";
            dtm.DATETIMEPERIOD_01.Datetimeperiodformatqualifier_03 = "102";
            result.DTM.Add(dtm);

            //  Instruction to pay in Bank Account
            result.PAI = new PAI();
            result.PAI.PAYMENTINSTRUCTIONDETAILS_01 = new C534();
            result.PAI.PAYMENTINSTRUCTIONDETAILS_01.Paymentmeanscoded_03 = "42";

            //  Repeating FTX
            result.FTX = new List <FTX>();

            //  Free text mutually defined
            var ftx = new FTX();

            ftx.Textsubjectqualifier_01           = "ZZZ";
            ftx.Textfunctioncoded_02              = "1";
            ftx.TEXTREFERENCE_03                  = new C107();
            ftx.TEXTREFERENCE_03.Freetextcoded_01 = "001";
            ftx.TEXTREFERENCE_03.Codelistresponsibleagencycoded_03 = "91";
            result.FTX.Add(ftx);

            //  Repeating RFF Groups
            result.RFFLoop = new List <Loop_RFF_ORDERS>();

            //  Begin RFF Group
            var rffLoop = new Loop_RFF_ORDERS();

            //  Order is based on contract number 652744
            rffLoop.RFF = new RFF();
            rffLoop.RFF.REFERENCE_01 = new C506();
            rffLoop.RFF.REFERENCE_01.Referencequalifier_01 = "CT";
            rffLoop.RFF.REFERENCE_01.Referencenumber_02    = "652744";

            //  Repeating DTM
            rffLoop.DTM = new List <DTM>();

            //  Date of contract 25th of August 2002
            var rffDtm1 = new DTM();

            rffDtm1.DATETIMEPERIOD_01 = new C507();
            rffDtm1.DATETIMEPERIOD_01.Datetimeperiodqualifier_01       = "171";
            rffDtm1.DATETIMEPERIOD_01.Datetimeperiod_02                = "20020825";
            rffDtm1.DATETIMEPERIOD_01.Datetimeperiodformatqualifier_03 = "102";
            rffLoop.DTM.Add(rffDtm1);

            //  End RFF Group
            result.RFFLoop.Add(rffLoop);

            //  Repeating NAD Groups
            result.NADLoop = new List <Loop_NAD_ORDERS>();

            //  Begin NAD Group 1
            var nadLoop1 = new Loop_NAD_ORDERS();

            //  Buyer is identified by GLN 5412345000013
            nadLoop1.NAD = new NAD();
            nadLoop1.NAD.Partyqualifier_01             = "BY";
            nadLoop1.NAD.PARTYIDENTIFICATIONDETAILS_02 = new C082();
            nadLoop1.NAD.PARTYIDENTIFICATIONDETAILS_02.Partyididentification_01          = "5412345000013";
            nadLoop1.NAD.PARTYIDENTIFICATIONDETAILS_02.Codelistresponsibleagencycoded_03 = "9";

            //  Repeating RFF Groups
            nadLoop1.RFFLoop = new List <Loop_RFF_ORDERS>();

            //  Begin RFF Group
            var rffLoopNad = new Loop_RFF_ORDERS();

            //  Buyer’s VAT number is 87765432
            rffLoopNad.RFF = new RFF();
            rffLoopNad.RFF.REFERENCE_01 = new C506();
            rffLoopNad.RFF.REFERENCE_01.Referencequalifier_01 = "VA";
            rffLoopNad.RFF.REFERENCE_01.Referencenumber_02    = "87765432";

            //  End RFF Group
            nadLoop1.RFFLoop.Add(rffLoopNad);

            //  Repeating CTA Groups
            nadLoop1.CTALoop = new List <Loop_CTA_ORDERS>();

            //  Begin CTA Group
            var ctaLoop = new Loop_CTA_ORDERS();

            //  Order contact is PForget
            ctaLoop.CTA = new CTA();
            ctaLoop.CTA.Contactfunctioncoded_01        = "OC";
            ctaLoop.CTA.DEPARTMENTOREMPLOYEEDETAILS_02 = new C056();
            ctaLoop.CTA.DEPARTMENTOREMPLOYEEDETAILS_02.Departmentoremployee_02 = "P FORGET";

            //  Repeating COM
            ctaLoop.COM = new List <COM>();

            //  Telephone number of order contact
            var com = new COM();

            com.COMMUNICATIONCONTACT_01 = new C076();
            com.COMMUNICATIONCONTACT_01.Communicationnumber_01           = "0044715632478";
            com.COMMUNICATIONCONTACT_01.Communicationchannelqualifier_02 = "TE";
            ctaLoop.COM.Add(com);

            //  End CTA Group
            nadLoop1.CTALoop.Add(ctaLoop);

            //  End NAD Group 1
            result.NADLoop.Add(nadLoop1);

            //  Begin NAD Group 2
            var nadLoop2 = new Loop_NAD_ORDERS();

            //  Supplier is identified by GLN 4012345500004
            nadLoop2.NAD = new NAD();
            nadLoop2.NAD.Partyqualifier_01             = "SU";
            nadLoop2.NAD.PARTYIDENTIFICATIONDETAILS_02 = new C082();
            nadLoop2.NAD.PARTYIDENTIFICATIONDETAILS_02.Partyididentification_01          = "4012345500004";
            nadLoop2.NAD.PARTYIDENTIFICATIONDETAILS_02.Codelistresponsibleagencycoded_03 = "9";

            //  Repeating RFF Groups
            nadLoop2.RFFLoop = new List <Loop_RFF_ORDERS>();

            //  Begin RFF Group
            var rffLoopNad2 = new Loop_RFF_ORDERS();

            //  Supplier’s VAT number is 56225432
            rffLoopNad2.RFF = new RFF();
            rffLoopNad2.RFF.REFERENCE_01 = new C506();
            rffLoopNad2.RFF.REFERENCE_01.Referencequalifier_01 = "VA";
            rffLoopNad2.RFF.REFERENCE_01.Referencenumber_02    = "56225432";

            //  End RFF Group
            nadLoop2.RFFLoop.Add(rffLoopNad2);

            //  End NAD Group 2
            result.NADLoop.Add(nadLoop2);

            //  Repeating CUX Groups
            result.CUXLoop = new List <Loop_CUX_ORDERS>();

            //  Begin CUX Group
            var cuxLoop = new Loop_CUX_ORDERS();

            //  Ordering currency is Pounds Sterling with the invoicing currency identified as Euros
            //  The exchange rate between them is 1 Pound Sterling equals 1.67 Euros
            cuxLoop.CUX = new CUX();
            cuxLoop.CUX.CURRENCYDETAILS_01 = new C504();
            cuxLoop.CUX.CURRENCYDETAILS_01.Currencydetailsqualifier_01 = "2";
            cuxLoop.CUX.CURRENCYDETAILS_01.Currencycoded_02            = "GBP";
            cuxLoop.CUX.CURRENCYDETAILS_01.Currencyqualifier_03        = "9";
            cuxLoop.CUX.CURRENCYDETAILS_02 = new C504();
            cuxLoop.CUX.CURRENCYDETAILS_02.Currencydetailsqualifier_01 = "3";
            cuxLoop.CUX.CURRENCYDETAILS_02.Currencycoded_02            = "EUR";
            cuxLoop.CUX.CURRENCYDETAILS_02.Currencyqualifier_03        = "4";
            cuxLoop.CUX.Rateofexchange_03 = "1.67";

            //  Repeating DTM
            cuxLoop.DTM = new List <DTM>();

            //  Period on which rate of exchange date is based is the
            //  1st of August 2002 - 31st of August 2002
            var dtmCux = new DTM();

            dtmCux.DATETIMEPERIOD_01 = new C507();
            dtmCux.DATETIMEPERIOD_01.Datetimeperiodqualifier_01       = "134";
            dtmCux.DATETIMEPERIOD_01.Datetimeperiod_02                = "2002080120020831";
            dtmCux.DATETIMEPERIOD_01.Datetimeperiodformatqualifier_03 = "718";
            cuxLoop.DTM.Add(dtmCux);

            //  End CUX Group
            result.CUXLoop.Add(cuxLoop);

            //  Repeating TDT Groups
            result.TDTLoop = new List <Loop_TDT_ORDERS>();

            //  Begin TDT Group
            var tdtLoop = new Loop_TDT_ORDERS();

            //  Order requests that the main carriage transport used to deliver the goods is a truck
            tdtLoop.TDT = new TDT();
            tdtLoop.TDT.Transportstagequalifier_01 = "20";
            tdtLoop.TDT.MODEOFTRANSPORT_03         = new C220();
            tdtLoop.TDT.MODEOFTRANSPORT_03.Modeoftransportcoded_01 = "30";
            tdtLoop.TDT.TRANSPORTMEANS_04 = new C228();
            tdtLoop.TDT.TRANSPORTMEANS_04.Typeofmeansoftransportidentification_01 = "31";

            //  End TDT Group
            result.TDTLoop.Add(tdtLoop);

            //  Repeating TOD Groups
            result.TODLoop = new List <Loop_TOD_ORDERS>();

            //  Begin TOD Group
            var todLoop = new Loop_TOD_ORDERS();

            //  Terms of delivery are to be Cost, Insurance and Freight
            todLoop.TOD = new TOD();
            todLoop.TOD.Termsofdeliveryortransportfunctioncoded_01 = "3";
            todLoop.TOD.TERMSOFDELIVERYORTRANSPORT_03 = new C100();
            todLoop.TOD.TERMSOFDELIVERYORTRANSPORT_03.Termsofdeliveryortransportcoded_01 = "CIF";
            todLoop.TOD.TERMSOFDELIVERYORTRANSPORT_03.Codelistqualifier_02 = "23";
            todLoop.TOD.TERMSOFDELIVERYORTRANSPORT_03.Codelistresponsibleagencycoded_03 = "9";

            //  Repeating LOC Group
            todLoop.LOC = new List <LOC>();

            //  The named port is Brussels
            var loc = new LOC();

            loc.Placelocationqualifier_01 = "1";
            loc.LOCATIONIDENTIFICATION_02 = new C517();
            loc.LOCATIONIDENTIFICATION_02.Placelocationidentification_01 = "BE-BRU";
            todLoop.LOC.Add(loc);

            //  End TOD Group
            result.TODLoop.Add(todLoop);

            //  Repeating LIN Groups
            result.LINLoop = new List <Loop_LIN_ORDERS>();

            //  Begin LIN Group 1
            var linLoop1 = new Loop_LIN_ORDERS();

            //  First product order is identified by GTIN 4000862141404
            linLoop1.LIN = new LIN();
            linLoop1.LIN.Lineitemnumber_01           = "1";
            linLoop1.LIN.ITEMNUMBERIDENTIFICATION_03 = new C212();
            linLoop1.LIN.ITEMNUMBERIDENTIFICATION_03.Itemnumber_01          = "4000862141404";
            linLoop1.LIN.ITEMNUMBERIDENTIFICATION_03.Itemnumbertypecoded_02 = "SRS";

            //  Repeating PIA
            linLoop1.PIA = new List <PIA>();

            //  In addition the buyer’s part number ABC1234 is provided
            var pia = new PIA();

            pia.Productidfunctionqualifier_01                      = "1";
            pia.ITEMNUMBERIDENTIFICATION_02                        = new C212();
            pia.ITEMNUMBERIDENTIFICATION_02.Itemnumber_01          = "ABC1234";
            pia.ITEMNUMBERIDENTIFICATION_02.Itemnumbertypecoded_02 = "IN";
            linLoop1.PIA.Add(pia);

            //  Repeating IMD
            linLoop1.IMD = new List <IMD>();

            //  The ordered item is a traded unit
            var imd = new IMD();

            imd.Itemdescriptiontypecoded_01 = "C";
            imd.ITEMDESCRIPTION_03          = new C273();
            imd.ITEMDESCRIPTION_03.Itemdescriptionidentification_01  = "TU";
            imd.ITEMDESCRIPTION_03.Codelistresponsibleagencycoded_03 = "9";
            linLoop1.IMD.Add(imd);

            //  Repeating QTY
            linLoop1.QTY = new List <QTY>();

            //  Ordered quantity is 48 units
            var qty = new QTY();

            qty.QUANTITYDETAILS_01 = new C186();
            qty.QUANTITYDETAILS_01.Quantityqualifier_01 = "21";
            qty.QUANTITYDETAILS_01.Quantity_02          = "48";
            linLoop1.QTY.Add(qty);

            //  Repeating MOA
            linLoop1.MOA = new List <MOA>();

            //  Value of order line is 699.84 Pounds Sterling
            var moa = new MOA();

            moa.MONETARYAMOUNT_01 = new C516();
            moa.MONETARYAMOUNT_01.Monetaryamounttypequalifier_01 = "203";
            moa.MONETARYAMOUNT_01.Monetaryamount_02 = "699.84";
            linLoop1.MOA.Add(moa);

            //  Repeating PRI Groups
            linLoop1.PRILoop = new List <Loop_PRI_ORDERS>();

            //  Begin PRI Group
            var priLoop = new Loop_PRI_ORDERS();

            //  Fixed net calculation price is 14.58 Pounds Sterling
            priLoop.PRI = new PRI();
            priLoop.PRI.PRICEINFORMATION_01 = new C509();
            priLoop.PRI.PRICEINFORMATION_01.Pricequalifier_01       = "AAA";
            priLoop.PRI.PRICEINFORMATION_01.Price_02                = "14.58";
            priLoop.PRI.PRICEINFORMATION_01.Pricetypecoded_03       = "CT";
            priLoop.PRI.PRICEINFORMATION_01.Pricetypequalifier_04   = "AAE";
            priLoop.PRI.PRICEINFORMATION_01.Unitpricebasis_05       = "1";
            priLoop.PRI.PRICEINFORMATION_01.Measureunitqualifier_06 = "KGM";

            //  End PRI Group
            linLoop1.PRILoop.Add(priLoop);

            //  Repeating RFF Groups
            linLoop1.RFFLoop = new List <Loop_RFF_ORDERS>();

            //  Begin RFF Group
            var rffLoopLin = new Loop_RFF_ORDERS();

            //  Price is taken from the price list AUG93RNG04
            rffLoopLin.RFF = new RFF();
            rffLoopLin.RFF.REFERENCE_01 = new C506();
            rffLoopLin.RFF.REFERENCE_01.Referencequalifier_01 = "PL";
            rffLoopLin.RFF.REFERENCE_01.Referencenumber_02    = "AUG93RNG04";

            //  Repeating DTM
            rffLoopLin.DTM = new List <DTM>();

            //  Price list date 1st of August 2002
            var dtmRff = new DTM();

            dtmRff.DATETIMEPERIOD_01 = new C507();
            dtmRff.DATETIMEPERIOD_01.Datetimeperiodqualifier_01       = "171";
            dtmRff.DATETIMEPERIOD_01.Datetimeperiod_02                = "20020801";
            dtmRff.DATETIMEPERIOD_01.Datetimeperiodformatqualifier_03 = "102";
            rffLoopLin.DTM.Add(dtmRff);

            //  End RFF Group
            linLoop1.RFFLoop.Add(rffLoopLin);

            //  Repeating PAC Groups
            linLoop1.PACLoop = new List <Loop_PAC_ORDERS_2>();

            //  Begin PAC Group
            var pacLoop = new Loop_PAC_ORDERS_2();

            //  Two packages (cases) barcoded with ITF14
            pacLoop.PAC = new PAC();
            pacLoop.PAC.Numberofpackages_01 = "2";
            pacLoop.PAC.PACKAGINGDETAILS_02 = new C531();
            pacLoop.PAC.PACKAGINGDETAILS_02.Packagingrelatedinformationcoded_02 = "51";
            pacLoop.PAC.PACKAGETYPE_03 = new C202();
            pacLoop.PAC.PACKAGETYPE_03.Typeofpackagesidentification_01 = "CS";

            //  Repeating PCI Groups
            pacLoop.PCILoop = new List <Loop_PCI_ORDERS>();

            //  Begin PCI Group
            var pciLoop = new Loop_PCI_ORDERS();

            //  The expiry date of the product is to be marked on it's packaging
            pciLoop.PCI = new PCI();
            pciLoop.PCI.Markinginstructionscoded_01 = "14";

            //  End PCI Group
            pacLoop.PCILoop.Add(pciLoop);

            //  End PAC Group
            linLoop1.PACLoop.Add(pacLoop);

            //  Repeating LOC Groups
            linLoop1.LOCLoop = new List <Loop_LOC_ORDERS_2>();

            //  Begin LOC Group 1
            var locLoop1 = new Loop_LOC_ORDERS_2();

            //  The second place to which the product is to be delivered is identified by GLN 3312345502000
            locLoop1.LOC = new LOC();
            locLoop1.LOC.Placelocationqualifier_01 = "7";
            locLoop1.LOC.LOCATIONIDENTIFICATION_02 = new C517();
            locLoop1.LOC.LOCATIONIDENTIFICATION_02.Placelocationidentification_01    = "3312345502000";
            locLoop1.LOC.LOCATIONIDENTIFICATION_02.Codelistresponsibleagencycoded_03 = "9";

            //  The quantity to be delivered at this location is 24
            locLoop1.QTY = new QTY();
            locLoop1.QTY.QUANTITYDETAILS_01 = new C186();
            locLoop1.QTY.QUANTITYDETAILS_01.Quantityqualifier_01 = "11";
            locLoop1.QTY.QUANTITYDETAILS_01.Quantity_02          = "24";

            //  Repeating DTM
            locLoop1.DTM = new List <DTM>();

            //  The quantity should be delivered on the 15th of September 2002
            var dtmLoc = new DTM();

            dtmLoc.DATETIMEPERIOD_01 = new C507();
            dtmLoc.DATETIMEPERIOD_01.Datetimeperiodqualifier_01       = "2";
            dtmLoc.DATETIMEPERIOD_01.Datetimeperiod_02                = "20020915";
            dtmLoc.DATETIMEPERIOD_01.Datetimeperiodformatqualifier_03 = "102";
            locLoop1.DTM.Add(dtmLoc);

            //  End LOC Group 1
            linLoop1.LOCLoop.Add(locLoop1);

            //  Begin LOC Group 2
            var locLoop2 = new Loop_LOC_ORDERS_2();

            //  The first place to which the product is to be delivered is identified by GLN 3312345501003
            locLoop2.LOC = new LOC();
            locLoop2.LOC.Placelocationqualifier_01 = "7";
            locLoop2.LOC.LOCATIONIDENTIFICATION_02 = new C517();
            locLoop2.LOC.LOCATIONIDENTIFICATION_02.Placelocationidentification_01    = "3312345501003";
            locLoop2.LOC.LOCATIONIDENTIFICATION_02.Codelistresponsibleagencycoded_03 = "9";

            //  The quantity to be delivered at this location is 24
            locLoop2.QTY = new QTY();
            locLoop2.QTY.QUANTITYDETAILS_01 = new C186();
            locLoop2.QTY.QUANTITYDETAILS_01.Quantityqualifier_01 = "11";
            locLoop2.QTY.QUANTITYDETAILS_01.Quantity_02          = "24";

            //  Repeating DTM
            locLoop2.DTM = new List <DTM>();

            //  The quantity should be delivered on the 13th of September 2002
            var dtmLoc2 = new DTM();

            dtmLoc2.DATETIMEPERIOD_01 = new C507();
            dtmLoc2.DATETIMEPERIOD_01.Datetimeperiodqualifier_01       = "2";
            dtmLoc2.DATETIMEPERIOD_01.Datetimeperiod_02                = "20020913";
            dtmLoc2.DATETIMEPERIOD_01.Datetimeperiodformatqualifier_03 = "102";
            locLoop2.DTM.Add(dtmLoc2);

            //  End LOC Group 2
            linLoop1.LOCLoop.Add(locLoop2);

            //  Repeating TAX Groups
            linLoop1.TAXLoop = new List <Loop_TAX_ORDERS>();

            //  Begin TAX Group
            var taxLoop = new Loop_TAX_ORDERS();

            //  The product is subject to the standard VAT rate of 17.5%
            taxLoop.TAX = new TAX();
            taxLoop.TAX.Dutytaxfeefunctionqualifier_01 = "7";
            taxLoop.TAX.DUTYTAXFEETYPE_02 = new C241();
            taxLoop.TAX.DUTYTAXFEETYPE_02.Dutytaxfeetypecoded_01 = "VAT";
            taxLoop.TAX.DUTYTAXFEEDETAIL_05 = new C243();
            taxLoop.TAX.DUTYTAXFEEDETAIL_05.Dutytaxfeerate_04 = "17.5";
            taxLoop.TAX.Dutytaxfeecategorycoded_06            = "S";

            //  End TAX Group
            linLoop1.TAXLoop.Add(taxLoop);

            //  End LIN Group 1
            result.LINLoop.Add(linLoop1);

            //  Message detail/summary separator
            result.UNS = new UNS();
            result.UNS.Sectionidentification_01 = "S";

            //  Repeating CNT
            result.CNT = new List <CNT>();

            //  Count of the number of LIN segments in the message
            var cnt = new CNT();

            cnt.CONTROL_01 = new C270();
            cnt.CONTROL_01.Controlqualifier_01 = "2";
            cnt.CONTROL_01.Controlvalue_02     = "1";
            result.CNT.Add(cnt);

            return(result);
        }
예제 #8
0
        private static TSORDERS Import(string[] lines)
        {
            var result = new TSORDERS();

            if (lines.Length < 2)
            {
                throw new Exception("Insufficient number of lines");
            }

            //  line[0] is the header
            var firstLine = lines[1];

            //  UNH
            result.UNH = new Core.Model.Edi.Edifact.UNH();
            result.UNH.MessageReferenceNumber_01                      = "000000101";
            result.UNH.MessageIdentifier_02                           = new Core.Model.Edi.Edifact.S009();
            result.UNH.MessageIdentifier_02.MessageType_01            = "ORDERS";
            result.UNH.MessageIdentifier_02.MessageVersionNumber_02   = "D";
            result.UNH.MessageIdentifier_02.MessageReleaseNumber_03   = "96A";
            result.UNH.MessageIdentifier_02.ControllingAgencyCoded_04 = "UN";

            var firstLineItems = firstLine.Split(new[] { ',' });

            if (firstLineItems.Count() < 13)
            {
                throw new Exception("Insufficient number of columns");
            }

            //  BGM
            result.BGM = new BGM();
            result.BGM.DOCUMENTMESSAGENAME_01 = new C002();
            result.BGM.DOCUMENTMESSAGENAME_01.Documentmessagenamecoded_01 = "220";
            result.BGM.Documentmessagenumber_02 = firstLineItems[5];
            result.BGM.Messagefunctioncoded_03  = "9";

            //  Repeating DTM
            result.DTM = new List <DTM>();

            //  DTM
            var dtm = new DTM();

            dtm.DATETIMEPERIOD_01 = new C507();
            dtm.DATETIMEPERIOD_01.Datetimeperiodqualifier_01       = "137";
            dtm.DATETIMEPERIOD_01.Datetimeperiod_02                = firstLineItems[6];
            dtm.DATETIMEPERIOD_01.Datetimeperiodformatqualifier_03 = "102";
            result.DTM.Add(dtm);

            //  Repeating NAD Loops
            result.NADLoop = new List <Loop_NAD_ORDERS>();

            //  Begin NAD Loop
            var nadLoop = new Loop_NAD_ORDERS();

            //  NAD
            nadLoop.NAD = new NAD();
            nadLoop.NAD.Partyqualifier_01             = "BY";
            nadLoop.NAD.PARTYIDENTIFICATIONDETAILS_02 = new C082();
            nadLoop.NAD.PARTYIDENTIFICATIONDETAILS_02.Partyididentification_01          = firstLineItems[8];
            nadLoop.NAD.PARTYIDENTIFICATIONDETAILS_02.Codelistresponsibleagencycoded_03 = "9";
            nadLoop.NAD.PARTYNAME_04 = new C080();
            nadLoop.NAD.PARTYNAME_04.Partyname_01 = firstLineItems[7];
            nadLoop.NAD.STREET_05 = new C059();
            nadLoop.NAD.STREET_05.Streetandnumberpobox_01 = firstLineItems[9];
            nadLoop.NAD.Cityname_06 = firstLineItems[10];
            nadLoop.NAD.Countrysubentityidentification_07 = firstLineItems[11];
            nadLoop.NAD.Postcodeidentification_08         = firstLineItems[12];

            //  End NAD Loop
            result.NADLoop.Add(nadLoop);

            //  Repeating PO1 Loops
            result.LINLoop = new List <Loop_LIN_ORDERS>();

            foreach (var line in lines.Skip(1))
            {
                var lineItems = line.Split(new[] { ',' });
                if (lineItems.Count() < 13)
                {
                    throw new Exception("Insufficient number of columns");
                }

                //  Begin LIN Loop
                var linLoop = new Loop_LIN_ORDERS();

                //  LIN
                linLoop.LIN = new LIN();
                linLoop.LIN.Lineitemnumber_01           = lineItems[0];
                linLoop.LIN.ITEMNUMBERIDENTIFICATION_03 = new C212();
                linLoop.LIN.ITEMNUMBERIDENTIFICATION_03.Itemnumber_01          = lineItems[1];
                linLoop.LIN.ITEMNUMBERIDENTIFICATION_03.Itemnumbertypecoded_02 = "SRS";

                //  Repeating QTY
                linLoop.QTY = new List <QTY>();

                //  QTY
                var qty = new QTY();
                qty.QUANTITYDETAILS_01 = new C186();
                qty.QUANTITYDETAILS_01.Quantityqualifier_01    = "21";
                qty.QUANTITYDETAILS_01.Quantity_02             = lineItems[2];
                qty.QUANTITYDETAILS_01.Measureunitqualifier_03 = lineItems[4];
                linLoop.QTY.Add(qty);

                //  Repeating PRI Loops
                linLoop.PRILoop = new List <Loop_PRI_ORDERS>();

                //  Begin PRI Loop
                var priLoop = new Loop_PRI_ORDERS();

                //  PRI
                priLoop.PRI = new PRI();
                priLoop.PRI.PRICEINFORMATION_01 = new C509();
                priLoop.PRI.PRICEINFORMATION_01.Pricequalifier_01 = "AAA";
                priLoop.PRI.PRICEINFORMATION_01.Price_02          = lineItems[3];

                //  End PRI Loop
                linLoop.PRILoop.Add(priLoop);

                //  End LIN Loop
                result.LINLoop.Add(linLoop);
            }

            result.UNS = new UNS();
            result.UNS.Sectionidentification_01 = "S";

            return(result);
        }
예제 #9
0
        public static async Task <TSDESADV> BuildDespatchAdvice(string controlNumber, TSORDERS ord, IEnumerable <string> serialNumbers)
        {
            var serialNumberQueue = new Queue <string>(serialNumbers);

            var result = new TSDESADV();

            result.UNH = new UNH();
            result.UNH.MessageReferenceNumber_01                      = controlNumber.PadLeft(14, '0');
            result.UNH.MessageIdentifier_02                           = new S009();
            result.UNH.MessageIdentifier_02.MessageType_01            = "DESADV";
            result.UNH.MessageIdentifier_02.MessageVersionNumber_02   = "D";
            result.UNH.MessageIdentifier_02.MessageReleaseNumber_03   = "97A";
            result.UNH.MessageIdentifier_02.ControllingAgencyCoded_04 = "UN";

            result.BGM = new BGM
            {
                DOCUMENTMESSAGENAME_01 = new C002 {
                    Documentmessagenamecoded_01 = "630"
                },
                DOCUMENTMESSAGEIDENTIFICATION_02 = new C106
                {
                    Documentmessagenumber_01 = RandomStringGenerator.RandomString(10)
                },//BOL here
                Messagefunctioncoded_03 = "8"
            };

            result.DTM = new List <DTM>
            {
                new DTM
                {
                    DATETIMEPERIOD_01 = new C507
                    {
                        Datetimeperiodqualifier_01       = "111",
                        Datetimeperiod_02                = DateTime.UtcNow.ToString("yyMMddHHmmss"),
                        Datetimeperiodformatqualifier_03 = "202"
                    }
                }
            };

            var orderMaterialNumbers = ord.LINLoop.Select(
                ln => ln.LIN.ITEMNUMBERIDENTIFICATION_03.Itemnumber_01
                )
                                       .Distinct()
                                       .ToArray();

            var loc      = ord.FTX?.FirstOrDefault()?.TEXTLITERAL_04?.Freetext_01?.Split(';');
            var plant    = (loc != null && loc.Length >= 2) ? loc[1] : null;
            var location = (loc != null && loc.Length >= 2) ? loc[0] : null;

            var materials = await LenovoApi.LenovoCatalogClient.GetLenovoMaterials(
                orderMaterialNumbers,
                plant);

            if (materials.Count != orderMaterialNumbers.Length)
            {
                throw new Exception("Materials not found");
            }

            var weight = ord.LINLoop.Sum(ln =>
            {
                var material = materials[ln.LIN.ITEMNUMBERIDENTIFICATION_03.Itemnumber_01];
                var qty      = ln.QTY.Sum(q => Convert.ToInt32(q.QUANTITYDETAILS_01.Quantity_02));
                return(material.material.grossWeight * qty);
            });

            materials.Sum(m => m.Value.material.grossWeight);
            var weightUnit = materials
                             .Select(m => m.Value.material.weightUnit)
                             .Distinct()
                             .ToArray();

            if (weightUnit.Length > 1)
            {
                throw new Exception("Different weight unit");
            }

            var volume = ord.LINLoop.Sum(ln =>
            {
                var material = materials[ln.LIN.ITEMNUMBERIDENTIFICATION_03.Itemnumber_01];
                var qty      = ln.QTY.Sum(q => Convert.ToInt32(q.QUANTITYDETAILS_01.Quantity_02));
                return(material.material.volume * qty);
            });

            var volumeUnit = materials
                             .Select(m => m.Value.material.volumeUnit)
                             .Distinct()
                             .ToArray();

            if (volumeUnit.Length > 1)
            {
                throw new Exception("Different volume unit");
            }

            result.MEA = new List <MEA>
            {
                new MEA
                {
                    Measurementpurposequalifier_01 = "AAI",
                    MEASUREMENTDETAILS_02          = new C502
                    {
                        Propertymeasuredcoded_01 = "AAD"
                    },
                    VALUERANGE_03 = new C174
                    {
                        Measurementvalue_02     = weight.ToString(),
                        Measureunitqualifier_01 = weightUnit[0]
                    }
                },
                new MEA
                {
                    Measurementpurposequalifier_01 = "VOL",
                    MEASUREMENTDETAILS_02          = new C502
                    {
                        Propertymeasuredcoded_01 = "AAW"
                    },
                    VALUERANGE_03 = new C174
                    {
                        Measurementvalue_02     = volume.ToString(),
                        Measureunitqualifier_01 = volumeUnit[0]
                    }
                }
            };

            result.RFFLoop = new List <Loop_RFF_DESADV>
            {
                new Loop_RFF_DESADV
                {
                    RFF = new RFF
                    {
                        REFERENCE_01 = new C506
                        {
                            Referencequalifier_01 = "SI",
                            Referencenumber_02    = "CMV" + RandomStringGenerator.RandomString(7)
                        }
                    }
                },
                new Loop_RFF_DESADV
                {
                    RFF = new RFF
                    {
                        REFERENCE_01 = new C506
                        {
                            Referencequalifier_01 = "AAQ",
                            Referencenumber_02    = "TRL" + RandomStringGenerator.RandomString(7)
                        }
                    }
                },
                new Loop_RFF_DESADV
                {
                    RFF = new RFF
                    {
                        REFERENCE_01 = new C506
                        {
                            Referencequalifier_01 = "ZZZ",
                            Referencenumber_02    = "1"
                        }
                    }
                }
            };

            result.CPSLoop = new List <Loop_CPS_DESADV>
            {
                new Loop_CPS_DESADV
                {
                    CPS = new CPS
                    {
                        Hierarchicalidnumber_01 = "1"
                    },
                    PACLoop = new List <Loop_PAC_DESADV>
                    {
                        new Loop_PAC_DESADV
                        {
                            PAC = new PAC
                            {
                                Numberofpackages_01 = "1"
                            },
                            MEA = new List <MEA>
                            {
                                new MEA
                                {
                                    Measurementpurposequalifier_01 = "AAI",
                                    MEASUREMENTDETAILS_02          = new C502
                                    {
                                        Propertymeasuredcoded_01 = "AAD"
                                    },
                                    VALUERANGE_03 = new C174
                                    {
                                        Measurementvalue_02     = weight.ToString(),
                                        Measureunitqualifier_01 = weightUnit[0]
                                    }
                                },
                                new MEA
                                {
                                    Measurementpurposequalifier_01 = "VOL",
                                    MEASUREMENTDETAILS_02          = new C502
                                    {
                                        Propertymeasuredcoded_01 = "AAW"
                                    },
                                    VALUERANGE_03 = new C174
                                    {
                                        Measurementvalue_02     = volume.ToString(),
                                        Measureunitqualifier_01 = volumeUnit[0]
                                    }
                                }
                            },
                            PCILoop = new List <Loop_PCI_DESADV>
                            {
                                new Loop_PCI_DESADV
                                {
                                    PCI = new PCI
                                    {
                                        Markinginstructionscoded_01 = "ZZZ"
                                    },
                                    RFF = new RFF
                                    {
                                        REFERENCE_01 = new C506
                                        {
                                            Referencequalifier_01 = "ACH",
                                            Referencenumber_02    = RandomStringGenerator.RandomString(15)
                                        }
                                    }
                                }
                            }
                        }
                    },
                    LINLoop = ord.LINLoop.Select(ln =>
                    {
                        return(new Loop_LIN_DESADV
                        {
                            LIN = new LIN
                            {
                                Lineitemnumber_01 = ln.LIN.Lineitemnumber_01,
                                ITEMNUMBERIDENTIFICATION_03 = new C212
                                {
                                    Itemnumber_01 = ln.LIN.ITEMNUMBERIDENTIFICATION_03.Itemnumber_01,
                                    Itemnumbertypecoded_02 = "VN"
                                }
                            },
                            QTY = ln.QTY.Select(q => new QTY
                            {
                                QUANTITYDETAILS_01 = new C186
                                {
                                    Quantityqualifier_01 = "12",
                                    Quantity_02 = q.QUANTITYDETAILS_01.Quantity_02
                                }
                            }).ToList(),
                            ALI = new List <ALI>
                            {
                                new ALI {
                                    Countryoforigincoded_01 = "US"
                                }
                            },

                            RFFLoop = new List <Loop_RFF_DESADV_2>
                            {
                                new Loop_RFF_DESADV_2
                                {
                                    RFF = new RFF
                                    {
                                        REFERENCE_01 = new C506
                                        {
                                            Referencequalifier_01 = "AAJ",
                                            Referencenumber_02 = ord.RFFLoop.FirstOrDefault(r =>
                                                                                            r.RFF.REFERENCE_01.Referencequalifier_01 == "AAJ")?.RFF.REFERENCE_01
                                                                 .Referencenumber_02
                                        }
                                    }
                                },
                                new Loop_RFF_DESADV_2
                                {
                                    RFF = new RFF
                                    {
                                        REFERENCE_01 = new C506
                                        {
                                            Referencequalifier_01 = "ZZZ",
                                            Referencenumber_02 = ord.UNH.MessageReferenceNumber_01
                                        }
                                    }
                                }
                            },
                            PCILoop = Enumerable.Range(1,
                                                       ln.QTY.Sum(q => Convert.ToInt32(
                                                                      q.QUANTITYDETAILS_01.Quantity_02))
                                                       ).Select(i => new Loop_PCI_DESADV_2
                            {
                                PCI = new PCI
                                {
                                    Markinginstructionscoded_01 = "ZZZ",
                                    MARKSLABELS_02 = new C210
                                    {
                                        Shippingmarks_01 = serialNumberQueue.Dequeue()
                                    }
                                }
                            }).ToList()
                        });
                    }).ToList()
                }
            };

            return(result);
        }