OBJECT Codeunit 50100 DW WebService { OBJECT-PROPERTIES { Date=17-08-20; Time=12:50:13; Modified=Yes; Version List=1.2.0.8_NAV2018; } PROPERTIES { OnRun=VAR webservices@1000000000 : Record 2000000076; BEGIN CLEAR(webservices); IF NOT webservices.GET(webservices."Object Type"::Codeunit,'DWWebService') THEN BEGIN webservices.INIT; webservices."Object Type" := webservices."Object Type"::Codeunit; webservices."Service Name" := 'DWWebService'; webservices."Object ID" := 50100; webservices.Published := TRUE; webservices.INSERT; END; Add_DynamicwebShippingItemCharge(); END; } CODE { VAR NormalCaseMode@1000000000 : Boolean; Text000@1000000002 : TextConst 'DAN=Det er ikke muligt at oprette element %1.;ENU=Could not create element %1.'; Text001@1000000001 : TextConst 'DAN=Det er ikke muligt at oprette attribut %1.;ENU=Could not create attribute %1.'; FoundSalesPrice@1000000003 : Boolean; AllowLineDisc@1000000004 : Boolean; AllowInvDisc@1000000005 : Boolean; QtyPerUOM@1000000006 : Decimal; Qty@1000000007 : Decimal; Text010@1000000008 : TextConst 'DAN=Priser inkl. moms kan ikke beregnes, n†r %1 er %2.;ENU=Prices including VAT cannot be calculated when %1 is %2.'; VATCalcType@1000000009 : 'Normal VAT,Reverse Charge VAT,Full VAT,Sales Tax'; PricesInclVAT@1000000010 : Boolean; VATBusPostingGr@1000000011 : Code[10]; VATPerCent@1000000012 : Decimal; PricesInCurrency@1000000013 : Boolean; ExchRateDate@1000000014 : Date; Currency@1000000015 : Record 4; GLSetup@1000000017 : Record 98; LineDiscPerCent@1000000018 : Decimal; CurrencyFactor@1000000016 : Decimal; Order_OrderPriceWithVAT@1000000020 : Decimal; Order_OrderPriceWithoutVAT@1000000021 : Decimal; Order_OrderPriceVAT@1000000022 : Decimal; Order_OrderSalesDiscount@1000000023 : Decimal; DefaultLanguageId@1000000024 : Text; DynamicwebShippingItemChargeNo@1000000019 : TextConst 'ENU=DW-SHIP'; Version@1000000025 : Text; [External] PROCEDURE Process@1000000012(VAR Request@1000000000 : BigText); VAR xmlrootnode@1000000002 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; XMLdocIn@1000000001 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlDocument"; language@1000000003 : Record 8; BEGIN DefaultLanguageId := language.GetUserLanguage; ConvertBigTestToXml(XMLdocIn,Request); // The version number of this codeunit/app is reserved for Dynamicweb's standard code. // If you intend to customize this codeunit/app, you must append your version number. // Your version must be 1.2.0.0.xxxxx, where 'xxxxx' is your appended version. // Failure to append your version will invalidate your license. Version := '1.2.0.8'; xmlrootnode := XMLdocIn.DocumentElement; CASE xmlrootnode.LocalName OF 'GetEcomData': GetEcomData(Request,XMLdocIn); 'GetAllEcomData': GetAllEcomData(Request, XMLdocIn); 'PutEcomOrders': PutEcomOrders(Request,XMLdocIn); 'CalculateOrder': PutEcomOrdersLiveOld(Request,XMLdocIn);//Old Live integration 1 'tables': BEGIN IF (Get_TextFromNode(XMLdocIn,'/tables/@submitType') = 'LiveOrderOrCart') OR (Get_TextFromNode(XMLdocIn,'/tables/@submitType') = 'ManualSubmit') OR (Get_TextFromNode(XMLdocIn,'/tables/@submitType') = 'ScheduledTask') THEN PutEcomOrdersLive(Request,XMLdocIn); END; 'PutEcomUsers': PutEcomUsers(Request,XMLdocIn); 'GetPDFForItem': BEGIN CLEAR(Request); CASE Get_TextFromNode(XMLdocIn,'/GetPDFForItem/@type') OF 'OpenOrder': Request.ADDTEXT(PrintReportasPDF(1,Get_TextFromNode(XMLdocIn,'/GetPDFForItem/@id'), Get_TextFromNode(XMLdocIn,'/GetPDFForItem/@externalUserID'))); 'Invoice': Request.ADDTEXT(PrintReportasPDF(2,Get_TextFromNode(XMLdocIn,'/GetPDFForItem/@id'), Get_TextFromNode(XMLdocIn,'/GetPDFForItem/@externalUserID'))); 'Credit': Request.ADDTEXT(PrintReportasPDF(3,Get_TextFromNode(XMLdocIn,'/GetPDFForItem/@id'), Get_TextFromNode(XMLdocIn,'/GetPDFForItem/@externalUserID'))); ELSE ERROR(STRSUBSTNO('Report %1 NOT FOUND',xmlrootnode.LocalName)); END; END; 'GetList': BEGIN CLEAR(Request); CASE Get_TextFromNode(XMLdocIn,'/GetList/@type') OF 'OpenOrder': GetList(1,Get_TextFromNode(XMLdocIn,'/GetList/@customerID'),Request,XMLdocIn); 'Invoice': GetList(2,Get_TextFromNode(XMLdocIn,'/GetList/@customerID'),Request,XMLdocIn); 'Credit': GetList(3,Get_TextFromNode(XMLdocIn,'/GetList/@customerID'),Request,XMLdocIn); ELSE ERROR(STRSUBSTNO('table %1 NOT FOUND',xmlrootnode.LocalName)); END; END; 'GetItem': BEGIN CLEAR(Request); CASE Get_TextFromNode(XMLdocIn,'/GetItem/@type') OF 'OpenOrder': GetItem(1,Request,XMLdocIn); 'Invoice': GetItem(2,Request,XMLdocIn); 'Credit': GetItem(3,Request,XMLdocIn); ELSE ERROR(STRSUBSTNO('table %1 NOT FOUND',xmlrootnode.LocalName)); END; END; 'GetCustomerStatementPDF': BEGIN CLEAR(Request); Request.ADDTEXT(PrintCustomerStatementAsPDF(Get_TextFromNode(XMLdocIn,'/GetCustomerStatementPDF/@customerID'), Get_TextFromNode(XMLdocIn,'/GetCustomerStatementPDF/@startDate'), Get_TextFromNode(XMLdocIn,'/GetCustomerStatementPDF/@endDate'))); END; ELSE ERROR(STRSUBSTNO('METHOD %1 NOT FOUND',xmlrootnode.LocalName)); END; END; LOCAL PROCEDURE GetEcomData@1000000009(VAR Request@1000000000 : BigText;XMLdocIn@1000000005 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlDocument"); VAR Header@1000000004 : Text[1000]; XMLCurrNode@1000000003 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; XMLNewChild@1000000002 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; XMLdocOut@1000000001 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlDocument"; XMLFilterNode@1000000006 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNodeList"; BEGIN XMLdocOut := XMLdocOut.XmlDocument; Header := ''; XMLdocOut.LoadXml(Header); XMLCurrNode := XMLdocOut.DocumentElement; IF (Get_TextFromNode(XMLdocIn,'/GetEcomData/@ExternalUserID') <> '') OR (Get_TextFromNode(XMLdocIn,'/GetEcomData/@AccessUserCustomerNumber') <> '') THEN BEGIN //Old Live integration 1 IF (Get_TextFromNode(XMLdocIn,'/GetEcomData/@ExternalUserID') <> '') THEN BEGIN IF (Get_TextFromNode(XMLdocIn,'/GetEcomData/tables/Products/@type') = 'all') THEN BEGIN Add_EcomProductsCustomer(XMLCurrNode,TRUE,Get_TextFromNode(XMLdocIn,'/GetEcomData/@ExternalUserID'),XMLFilterNode, FALSE); END; IF (Get_TextFromNode(XMLdocIn,'/GetEcomData/tables/Products/@type') = 'filter') THEN BEGIN XMLFilterNode := XMLdocIn.SelectNodes('/GetEcomData/tables/Products/Product'); Add_EcomProductsCustomer(XMLCurrNode,FALSE,Get_TextFromNode(XMLdocIn,'/GetEcomData/@ExternalUserID'),XMLFilterNode, FALSE); END; //End Old Live integration 1 END ELSE BEGIN IF (Get_TextFromNode(XMLdocIn,'/GetEcomData/tables/Products/@type') = 'all') THEN BEGIN Add_EcomProductsCustomer(XMLCurrNode,TRUE,Get_TextFromNode(XMLdocIn,'/GetEcomData/@AccessUserCustomerNumber'),XMLFilterNode, FALSE); END; IF (Get_TextFromNode(XMLdocIn,'/GetEcomData/tables/Products/@type') = 'filter') THEN BEGIN XMLFilterNode := XMLdocIn.SelectNodes('/GetEcomData/tables/Products/Product'); Add_EcomProductsCustomer(XMLCurrNode,FALSE,Get_TextFromNode(XMLdocIn,'/GetEcomData/@AccessUserCustomerNumber'),XMLFilterNode, Get_BoolFromNode(XMLdocIn, '/GetEcomData/tables/Products/@unitPrices')); END; END; END ELSE BEGIN //Users IF (Get_TextFromNode(XMLdocIn,'/GetEcomData/tables/Users/@type') = 'all') OR (Get_TextFromNode(XMLdocIn,'/GetEcomData/tables/Contacts/@type') = 'all') THEN Add_AccessUser(XMLCurrNode,TRUE,XMLFilterNode,TRUE); IF (Get_TextFromNode(XMLdocIn,'/GetEcomData/tables/Users/@type') = 'filter') THEN BEGIN XMLFilterNode := XMLdocIn.SelectNodes('/GetEcomData/tables/Users/userName'); Add_AccessUser(XMLCurrNode,FALSE,XMLFilterNode,TRUE); END; IF (Get_TextFromNode(XMLdocIn,'/GetEcomData/tables/Contacts/@type') = 'filter') THEN BEGIN XMLFilterNode := XMLdocIn.SelectNodes('/GetEcomData/tables/Contacts/ContactId'); Add_AccessUser(XMLCurrNode,FALSE,XMLFilterNode,TRUE); END; IF (Get_TextFromNode(XMLdocIn,'/GetEcomData/tables/Customers/@type') = 'all') THEN BEGIN Add_AccessUser(XMLCurrNode,TRUE,XMLFilterNode,Get_BoolFromNode(XMLdocIn,'/GetEcomData/tables/Customers/@importSalesPeople')); Add_AccessUserAddress(XMLCurrNode,TRUE,XMLFilterNode); END; IF (Get_TextFromNode(XMLdocIn,'/GetEcomData/tables/Addresses/@type') = 'all') THEN Add_AccessUserAddress(XMLCurrNode,TRUE,XMLFilterNode); IF (Get_TextFromNode(XMLdocIn,'/GetEcomData/tables/Addresses/@type') = 'filter') THEN BEGIN XMLFilterNode := XMLdocIn.SelectNodes('/GetEcomData/tables/Addresses/ContactId'); Add_AccessUserAddress(XMLCurrNode,FALSE,XMLFilterNode); END; //End Users IF (Get_TextFromNode(XMLdocIn,'/GetEcomData/tables/Countries/@type') = 'all') THEN Add_EcomCountries(XMLCurrNode,TRUE,XMLFilterNode); IF (Get_TextFromNode(XMLdocIn,'/GetEcomData/tables/Countries/@type') = 'filter') THEN BEGIN XMLFilterNode := XMLdocIn.SelectNodes('/GetEcomData/tables/Countries/Country/countryCode'); Add_EcomCountries(XMLCurrNode,FALSE,XMLFilterNode); END; IF (Get_TextFromNode(XMLdocIn,'/GetEcomData/tables/Currencies/@type') = 'all') THEN Add_EcomCurrencies(XMLCurrNode,TRUE,XMLFilterNode); IF (Get_TextFromNode(XMLdocIn,'/GetEcomData/tables/Currencies/@type') = 'filter') THEN BEGIN XMLFilterNode := XMLdocIn.SelectNodes('/GetEcomData/tables/Countries/Currencies/currencyCode'); Add_EcomCurrencies(XMLCurrNode,FALSE,XMLFilterNode); END; IF (Get_TextFromNode(XMLdocIn,'/GetEcomData/tables/Languages/@type') = 'all') THEN Add_EcomLanguages(XMLCurrNode,TRUE,XMLFilterNode); IF (Get_TextFromNode(XMLdocIn,'/GetEcomData/tables/Languages/@type') = 'filter') THEN BEGIN XMLFilterNode := XMLdocIn.SelectNodes('/GetEcomData/tables/Languages/languageID'); Add_EcomLanguages(XMLCurrNode,FALSE,XMLFilterNode); END; IF (Get_TextFromNode(XMLdocIn,'/GetEcomData/tables/Manufacturers/@type') = 'all') THEN Add_EcomManufacturers(XMLCurrNode,TRUE,XMLFilterNode); IF (Get_TextFromNode(XMLdocIn,'/GetEcomData/tables/Manufacturers/@type') = 'filter') THEN BEGIN XMLFilterNode := XMLdocIn.SelectNodes('/GetEcomData/tables/Manufacturers/manufacturerId'); Add_EcomManufacturers(XMLCurrNode,FALSE,XMLFilterNode); END; IF (Get_TextFromNode(XMLdocIn,'/GetEcomData/tables/Products/@type') = 'all') THEN Add_EcomProducts(XMLdocIn,XMLCurrNode, Get_BoolFromNode(XMLdocIn,'/GetEcomData/tables/Products/@importProductProperties')); IF (Get_TextFromNode(XMLdocIn,'/GetEcomData/tables/ProductGroups/@type') = 'all') THEN Add_EcomGroups(XMLdocIn,XMLCurrNode); IF (Get_TextFromNode(XMLdocIn,'/GetEcomData/tables/ProductStock/@type') = 'all') THEN BEGIN IF Get_BoolFromNode(XMLdocIn,'/GetEcomData/tables/ProductStock/@importStockLocations') THEN BEGIN Add_Locations(XMLCurrNode); Add_StockUnits(XMLCurrNode); END ELSE BEGIN Add_ProductsStock(XMLCurrNode); END; END; IF (Get_TextFromNode(XMLdocIn,'/GetEcomData/tables/Units/@type') = 'all') THEN BEGIN Add_Units(XMLCurrNode); END; IF (Get_TextFromNode(XMLdocIn, '/GetEcomData/tables/ProductPrices/@type') = 'all') THEN BEGIN GetProductPrices(XMLCurrNode, Get_TextFromNode(XMLdocIn, '/GetEcomData/tables/ProductPrices/@salesType'), Get_TextFromNode(XMLdocIn, '/GetEcomData/tables/ProductPrices/@salesCode'), Get_TextFromNode(XMLdocIn, '/GetEcomData/tables/ProductPrices/@setLanguage'), Get_TextFromNode(XMLdocIn, '/GetEcomData/tables/ProductPrices/@setCurrency'), Get_TextFromNode(XMLdocIn, '/GetEcomData/tables/ProductPrices/@setUnitOfMeasure')); END; END; ConvertXmlToBigText(XMLdocOut,Request); END; LOCAL PROCEDURE PutEcomOrders@1000000010(VAR Request@1000000000 : BigText;XMLdocIn@1000000006 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlDocument"); VAR XMLNodeList@1000000002 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNodeList"; i@1000000003 : Integer; XMLNode@1000000004 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; salesheader@1000000005 : Record 36; salesline@1000000010 : Record 37; XMLdocOut@1000000001 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlDocument"; Header@1000000007 : Text[1000]; XMLCurrNode@1000000008 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; XMLNewChild@1000000009 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; pXmlNode@1000000011 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; message@1000000012 : Text; BEGIN XMLdocOut := XMLdocOut.XmlDocument; Header := ''; XMLdocOut.LoadXml(Header); XMLCurrNode := XMLdocOut.DocumentElement; XMLNodeList := XMLdocIn.SelectNodes('/PutEcomOrders/table[@tableName=''EcomOrders'']/item'); FOR i := 0 TO XMLNodeList.Count -1 DO BEGIN XMLNode := XMLNodeList.ItemOf(i); message := PutEcomOrder(XMLdocIn, XMLNode, XMLdocOut, XMLCurrNode); IF message <> '' THEN BEGIN Add_Element(XMLCurrNode,'failedOrder','','',XMLNewChild,''); Add_Element(XMLNewChild,'OrderID',Get_TextFromNode(XMLNode,'column[@columnName=''OrderID'']'),'',XMLNewChild,''); XMLNewChild := XMLNewChild.ParentNode; Add_Element(XMLNewChild, 'error', message, '', XMLNewChild, ''); END; END; ConvertXmlToBigText(XMLdocOut,Request); END; LOCAL PROCEDURE PutEcomOrdersLiveOld@1000000014(VAR Request@1000000000 : BigText;XMLdocIn@1000000006 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlDocument"); VAR XMLNodeList@1000000002 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNodeList"; XMLNodeListLines@1000000015 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNodeList"; XMLNodeListDiscount@1000000012 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNodeList"; i@1000000003 : Integer; u@1000000013 : Integer; XMLNode@1000000004 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; XMLNodeDiscount@1000000014 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; salesheader@1000000005 : Record 36; salesline@1000000010 : Record 37; XMLdocOut@1000000001 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlDocument"; Header@1000000007 : Text[1000]; XMLCurrNode@1000000008 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; XMLNewChild@1000000009 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; lineno@1000000011 : Integer; pricemgt@1000000021 : Codeunit 7000; TempSalesPrice@1000000020 : TEMPORARY Record 7002; TempSalesLineDisc@1000000019 : TEMPORARY Record 7004; TempSalesHeader@1000000018 : TEMPORARY Record 36; TempSalesLine@1000000017 : TEMPORARY Record 37; VATPostingSetup@1000000016 : Record 325; customer@1000000022 : Record 18; item@1000000023 : Record 27; Discount@1000000024 : Decimal; Total@1000000025 : Decimal; PriceCalcMgt@1000000026 : Codeunit 7000; CurrExchRate@1000000027 : Record 330; BEGIN XMLdocOut := XMLdocOut.XmlDocument; Header := ''; XMLdocOut.LoadXml(Header); XMLCurrNode := XMLdocOut.DocumentElement; XMLNodeList := XMLdocIn.SelectNodes('/CalculateOrder/Orders/Order'); FOR i := 0 TO XMLNodeList.Count -1 DO BEGIN XMLNode := XMLNodeList.ItemOf(i); GetCustomer(Get_TextFromNode(XMLNode,'column[@columnName=''OrderCustomerAccessUserExternalId'']'), customer); IF (Get_TextFromNode(XMLNode,'column[@columnName=''CreateOrder'']') = 'True') THEN BEGIN Total := 0; Discount := 0; CLEAR(salesheader); salesheader.INIT; salesheader."Document Type" := salesheader."Document Type"::Order; salesheader."No." := ''; salesheader.INSERT(TRUE); salesheader.VALIDATE("Sell-to Customer No.", customer."No."); salesheader.VALIDATE("Sell-to Address" ,Get_TextFromNode(XMLNode,'column[@columnName=''OrderCustomerAddress'']')); salesheader.VALIDATE("Sell-to Address 2", Get_TextFromNode(XMLNode,'column[@columnName=''OrderCustomerAddress2'']')); salesheader.VALIDATE("Sell-to Post Code" ,Get_TextFromNode(XMLNode,'column[@columnName=''OrderCustomerZip'']')); salesheader.VALIDATE("Sell-to City" ,Get_TextFromNode(XMLNode,'column[@columnName=''OrderCustomerCity'']')); salesheader.VALIDATE("Ship-to Name" ,Get_TextFromNode(XMLNode,'column[@columnName=''OrderDeliveryName'']')); salesheader.VALIDATE("Ship-to Address" ,Get_TextFromNode(XMLNode,'column[@columnName=''OrderDeliveryAddress'']')); salesheader.VALIDATE("Ship-to Address 2", Get_TextFromNode(XMLNode,'column[@columnName=''OrderDeliveryAddress2'']')); salesheader.VALIDATE("Ship-to Post Code" , Get_TextFromNode(XMLNode,'column[@columnName=''OrderDeliveryZip'']')); salesheader.VALIDATE("Ship-to City" , Get_TextFromNode(XMLNode,'column[@columnName=''OrderDeliveryCity'']')); IF Currency.GET(Get_TextFromNode(XMLNode,'column[@columnName=''OrderCurrencyCode'']')) THEN BEGIN salesheader.VALIDATE("Currency Code" , Get_TextFromNode(XMLNode,'column[@columnName=''OrderCurrencyCode'']')); END; salesheader.MODIFY(TRUE); lineno := 10000; XMLNodeListLines := XMLdocIn.SelectNodes('/CalculateOrder/OrderLines/OrderLine'); XMLNodeListDiscount := XMLdocIn.SelectNodes('/CalculateOrder/OrderLines/OrderLine'); Add_Element(XMLCurrNode,'table','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'tableName','EcomOrderLines'); FOR u := 0 TO XMLNodeListLines.Count() -1 DO BEGIN XMLNode := XMLNodeListLines.ItemOf(u); salesline.INIT; salesline."Document Type" := salesheader."Document Type"; salesline."Document No." := salesheader."No."; salesline."Line No." := lineno; salesline.Type := salesline.Type::Item; salesline.VALIDATE("No.",DELCHR(Get_TextFromNode(XMLNode,'column[@columnName=''OrderLineProductID'']'), '=','(|)')); salesline.VALIDATE(Quantity,Get_DecimalFromNode(XMLNode,'column[@columnName=''OrderLineQuantity'']')); salesline.INSERT(TRUE); Add_SalesLine(salesheader, salesline,XMLNewChild,'',FALSE,FALSE,'',''); IF (salesline."Line Discount Amount" <> 0) THEN Add_SalesLine(salesheader,salesline,XMLNewChild,salesline."No.",FALSE,FALSE,'',''); lineno += 10000; END; Add_Element(XMLCurrNode,'table','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'tableName','EcomOrders'); Add_SalesHeaderXml(salesheader,XMLNewChild,FALSE,Total,Discount,FALSE,FALSE); END ELSE BEGIN salesheader.INIT; salesheader."Document Type" := salesheader."Document Type"::Order; salesheader."No." := ''; salesheader."Sell-to Customer No." := customer."No."; salesheader."Sell-to Customer Name" := Get_TextFromNode(XMLNode,'column[@columnName=''OrderCustomerName'']'); salesheader."Sell-to Address" := Get_TextFromNode(XMLNode,'column[@columnName=''OrderCustomerAddress'']'); salesheader."Sell-to Address 2" := Get_TextFromNode(XMLNode,'column[@columnName=''OrderCustomerAddress2'']'); salesheader."Sell-to Post Code" := Get_TextFromNode(XMLNode,'column[@columnName=''OrderCustomerZip'']'); salesheader."Sell-to City" := Get_TextFromNode(XMLNode,'column[@columnName=''OrderCustomerCity'']'); salesheader."Ship-to Name" := Get_TextFromNode(XMLNode,'column[@columnName=''OrderDeliveryName'']'); salesheader."Ship-to Address" := Get_TextFromNode(XMLNode,'column[@columnName=''OrderDeliveryAddress'']'); salesheader."Ship-to Address 2" := Get_TextFromNode(XMLNode,'column[@columnName=''OrderDeliveryAddress2'']'); salesheader."Ship-to Post Code" := Get_TextFromNode(XMLNode,'column[@columnName=''OrderDeliveryZip'']'); salesheader."Ship-to City" := Get_TextFromNode(XMLNode,'column[@columnName=''OrderDeliveryCity'']'); IF Currency.GET(Get_TextFromNode(XMLNode,'column[@columnName=''OrderCurrencyCode'']')) THEN BEGIN salesheader."Currency Code" := Get_TextFromNode(XMLNode,'column[@columnName=''OrderCurrencyCode'']'); END; salesheader."Prices Including VAT" := customer."Prices Including VAT"; lineno := 10000; XMLNodeListLines := XMLdocIn.SelectNodes('/CalculateOrder/OrderLines/OrderLine'); Add_Element(XMLCurrNode,'table','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'tableName','EcomOrderLines'); FOR u := 0 TO XMLNodeListLines.Count() -1 DO BEGIN XMLNode := XMLNodeListLines.ItemOf(u); item.GET(Get_TextFromNode(XMLNode,'column[@columnName=''OrderLineProductID'']')); salesline.INIT; salesline."Document Type" := salesheader."Document Type"; salesline."Document No." := salesheader."No."; salesline."Line No." := lineno; salesline.Type := salesline.Type::Item; salesline."No." := item."No."; salesline.Quantity := Get_DecimalFromNode(XMLNode,'column[@columnName=''OrderLineQuantity'']'); salesline."Qty. per Unit of Measure" := 1; item.GET(salesline."No."); VATPostingSetup.GET(customer."VAT Bus. Posting Group",item."VAT Prod. Posting Group"); AllowLineDisc := customer."Allow Line Disc."; AllowInvDisc := FALSE; Qty := salesline.Quantity; QtyPerUOM := 1; VATCalcType := VATPostingSetup."VAT Calculation Type"; PricesInclVAT := customer."Prices Including VAT"; VATBusPostingGr := customer."VAT Bus. Posting Group"; VATPerCent := VATPostingSetup."VAT %"; PricesInCurrency := TRUE; salesline."VAT %" := VATPostingSetup."VAT %"; ExchRateDate := TODAY; GLSetup.GET; IF Currency.GET(salesheader."Currency Code") THEN BEGIN Currency.SETRECFILTER(); CurrencyFactor := CurrExchRate.ExchangeRate(ExchRateDate,Currency.Code); END ELSE BEGIN CurrencyFactor := 1 END; CLEAR(TempSalesPrice); CLEAR(TempSalesLineDisc); TempSalesPrice.DELETEALL; TempSalesLineDisc.DELETEALL; pricemgt.FindSalesLineDisc(TempSalesLineDisc, customer."No.",'',customer."Customer Disc. Group",'',item."No.",item."Item Disc. Group",'',item."Base Unit of Measure",Currency.Code,ExchRateDate,FALSE); CalcBestLineDisc(TempSalesLineDisc); LineDiscPerCent := TempSalesLineDisc."Line Discount %"; salesline."Line Discount %" := TempSalesLineDisc."Line Discount %"; pricemgt.FindSalesPrice(TempSalesPrice,customer."No.",'',customer."Customer Price Group",'',item."No.",'',item."Base Unit of Measure",Currency.Code,ExchRateDate,FALSE); CalcBestUnitPrice(TempSalesPrice,item); LineDiscPerCent := 0; salesline."Unit Price" := CalcLineAmount(TempSalesPrice); LineDiscPerCent := TempSalesLineDisc."Line Discount %"; salesline."Line Discount Amount" := ROUND( ROUND(salesline.Quantity * TempSalesPrice."Unit Price",Currency."Amount Rounding Precision") * LineDiscPerCent / 100,Currency."Amount Rounding Precision"); Add_SalesLine(salesheader,salesline, XMLNewChild,'',FALSE,FALSE,'',''); IF (salesline."Line Discount Amount" <> 0) THEN Add_SalesLine(salesheader,salesline,XMLNewChild,salesline."No.",FALSE,FALSE,'',''); lineno += 10000; END; Add_Element(XMLCurrNode,'table','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'tableName','EcomOrders'); Add_SalesHeaderXml(salesheader,XMLNewChild,TRUE,Total,Discount,FALSE,FALSE); END; END; ConvertXmlToBigText(XMLdocOut,Request); END; LOCAL PROCEDURE PutEcomOrdersLive@1000000042(VAR Request@1000000000 : BigText;XMLdocIn@1000000006 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlDocument"); VAR XMLNodeList@1000000002 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNodeList"; XMLNodeListLines@1000000015 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNodeList"; XMLNodeListDiscount@1000000012 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNodeList"; i@1000000003 : Integer; u@1000000013 : Integer; XMLNode@1000000004 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; XMLNodeDiscount@1000000014 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; salesheader@1000000005 : Record 36; salesline@1000000010 : Record 37; XMLdocOut@1000000001 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlDocument"; Header@1000000007 : Text[1000]; XMLCurrNode@1000000008 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; XMLNewChild@1000000009 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; lineno@1000000011 : Integer; pricemgt@1000000021 : Codeunit 7000; TempSalesPrice@1000000020 : TEMPORARY Record 7002; TempSalesLineDisc@1000000019 : TEMPORARY Record 7004; TempSalesHeader@1000000018 : TEMPORARY Record 36; TempSalesLine@1000000017 : TEMPORARY Record 37; VATPostingSetup@1000000016 : Record 325; customer@1000000022 : Record 18; item@1000000023 : Record 27; Discount@1000000024 : Decimal; Total@1000000025 : Decimal; PriceCalcMgt@1000000026 : Codeunit 7000; CurrExchRate@1000000027 : Record 330; useDynamicwebDiscount@1000000028 : Boolean; dynamicwebDiscountAmount@1000000030 : Decimal; j@1000000031 : Integer; totalDynamicwebDiscountAmount@1000000032 : Decimal; dwProductDiscountSalesLine@1000000029 : Record 37; dwOrderLineIds@1000000033 : ARRAY [10000,2] OF Text; arrayCounter@1000000034 : Integer; XMLOrderNode@1000000040 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; orderDiscountPercent@1000000035 : Decimal; orderCurrencyCode@1000000036 : Text; productOrderLinesCount@1000000037 : Integer; uom@1000000038 : Text; itemUOM@1000000039 : Record 5404; firstOrderLineItem@1000000041 : Record 27; BEGIN XMLdocOut := XMLdocOut.XmlDocument; Header := ''; XMLdocOut.LoadXml(Header); XMLCurrNode := XMLdocOut.DocumentElement; XMLNodeList := XMLdocIn.SelectNodes('/tables/table[@tableName=''EcomOrders'']/item'); FOR i := 0 TO XMLNodeList.Count - 1 DO BEGIN XMLOrderNode := XMLNodeList.ItemOf(i); GetCustomer(Get_TextFromNode(XMLOrderNode, 'column[@columnName=''OrderCustomerNumber'']'), customer); useDynamicwebDiscount := NOT Get_BoolFromNode(XMLOrderNode,'column[@columnName=''ErpControlsDiscount'']'); IF useDynamicwebDiscount THEN BEGIN XMLNodeListDiscount := XMLdocIn.SelectNodes('/tables/table[@tableName=''EcomOrderLines'']/item'); END; orderCurrencyCode := Get_TextFromNode(XMLOrderNode,'column[@columnName=''OrderCurrencyCode'']'); IF (Get_TextFromNode(XMLOrderNode,'column[@columnName=''CreateOrder'']') = 'True') THEN BEGIN CreateOrder(XMLOrderNode, XMLdocIn, XMLCurrNode, useDynamicwebDiscount, XMLNodeListDiscount, orderCurrencyCode, customer, TRUE); END ELSE BEGIN salesheader.INIT; salesheader."Document Type" := salesheader."Document Type"::Order; salesheader."No." := ''; salesheader."Sell-to Customer No." := customer."No."; salesheader."Sell-to Customer Name" := Get_TextFromNode(XMLOrderNode,'column[@columnName=''OrderCustomerName'']'); salesheader."Sell-to Address" := Get_TextFromNode(XMLOrderNode,'column[@columnName=''OrderCustomerAddress'']'); salesheader."Sell-to Address 2" := Get_TextFromNode(XMLOrderNode,'column[@columnName=''OrderCustomerAddress2'']'); salesheader."Sell-to Post Code" := Get_TextFromNode(XMLOrderNode,'column[@columnName=''OrderCustomerZip'']'); salesheader."Sell-to City" := Get_TextFromNode(XMLOrderNode,'column[@columnName=''OrderCustomerCity'']'); salesheader."Ship-to Name" := Get_TextFromNode(XMLOrderNode,'column[@columnName=''OrderDeliveryName'']'); salesheader."Ship-to Address" := Get_TextFromNode(XMLOrderNode,'column[@columnName=''OrderDeliveryAddress'']'); salesheader."Ship-to Address 2" := Get_TextFromNode(XMLOrderNode,'column[@columnName=''OrderDeliveryAddress2'']'); salesheader."Ship-to Post Code" := Get_TextFromNode(XMLOrderNode,'column[@columnName=''OrderDeliveryZip'']'); salesheader."Ship-to City" := Get_TextFromNode(XMLOrderNode,'column[@columnName=''OrderDeliveryCity'']'); IF Currency.GET(orderCurrencyCode) THEN BEGIN salesheader."Currency Code" := orderCurrencyCode; END; salesheader."Prices Including VAT" := customer."Prices Including VAT"; lineno := 10000; XMLNodeListLines := XMLdocIn.SelectNodes('/tables/table[@tableName=''EcomOrderLines'']/item'); Add_Element(XMLCurrNode,'table','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'tableName','EcomOrderLines'); FOR u := 0 TO XMLNodeListLines.Count() -1 DO BEGIN XMLNode := XMLNodeListLines.ItemOf(u); IF (NOT useDynamicwebDiscount) OR (useDynamicwebDiscount AND (Get_TextFromNode(XMLNode,'column[@columnName=''OrderLineType'']') <> '3')) THEN IF Get_TextFromNode(XMLNode,'column[@columnName=''OrderLineProductId'']') <> '' THEN BEGIN item.GET(Get_TextFromNode(XMLNode,'column[@columnName=''OrderLineProductId'']')); IF u = 0 THEN firstOrderLineItem := item; salesline.INIT; salesline."Document Type" := salesheader."Document Type"; salesline."Document No." := salesheader."No."; salesline."Line No." := lineno; salesline.Type := salesline.Type::Item; salesline."No." := item."No."; salesline.Quantity := Get_DecimalFromNode(XMLNode,'column[@columnName=''OrderLineQuantity'']'); uom := GetUOMCode(Get_TextFromNode(XMLNode,'column[@columnName=''OrderLineUnitId'']')); IF uom <> '' THEN BEGIN itemUOM.GET(item."No.", uom); salesline."Unit of Measure" := uom; salesline."Unit of Measure Code" := uom; QtyPerUOM := itemUOM."Qty. per Unit of Measure"; END ELSE BEGIN uom := item."Base Unit of Measure"; QtyPerUOM := 1; END; salesline."Qty. per Unit of Measure" := 1; item.GET(salesline."No."); VATPostingSetup.GET(customer."VAT Bus. Posting Group",item."VAT Prod. Posting Group"); AllowLineDisc := customer."Allow Line Disc."; AllowInvDisc := FALSE; Qty := salesline.Quantity; VATCalcType := VATPostingSetup."VAT Calculation Type"; PricesInclVAT := customer."Prices Including VAT"; VATBusPostingGr := customer."VAT Bus. Posting Group"; VATPerCent := VATPostingSetup."VAT %"; PricesInCurrency := TRUE; salesline."VAT %" := VATPostingSetup."VAT %"; ExchRateDate := TODAY; GLSetup.GET; IF Currency.GET(salesheader."Currency Code") THEN BEGIN Currency.SETRECFILTER(); CurrencyFactor := CurrExchRate.ExchangeRate(ExchRateDate,Currency.Code); END ELSE BEGIN CurrencyFactor := 1 END; CLEAR(TempSalesPrice); CLEAR(TempSalesLineDisc); TempSalesPrice.DELETEALL; TempSalesLineDisc.DELETEALL; IF NOT useDynamicwebDiscount THEN BEGIN pricemgt.FindSalesLineDisc(TempSalesLineDisc, customer."No.",'',customer."Customer Disc. Group",'',item."No.",item."Item Disc. Group",'',uom,Currency.Code,ExchRateDate,FALSE); CalcBestLineDisc(TempSalesLineDisc); LineDiscPerCent := TempSalesLineDisc."Line Discount %"; salesline."Line Discount %" := TempSalesLineDisc."Line Discount %"; END; pricemgt.FindSalesPrice(TempSalesPrice,customer."No.",'',customer."Customer Price Group",'',item."No.",'',uom,Currency.Code,ExchRateDate,FALSE); CalcBestUnitPrice(TempSalesPrice,item); LineDiscPerCent := 0; salesline."Unit Price" := CalcLineAmount(TempSalesPrice); LineDiscPerCent := TempSalesLineDisc."Line Discount %"; IF NOT useDynamicwebDiscount THEN BEGIN salesline."Line Discount Amount" := ROUND( ROUND(salesline.Quantity * TempSalesPrice."Unit Price",Currency."Amount Rounding Precision") * LineDiscPerCent / 100,Currency."Amount Rounding Precision"); END; Add_SalesLine(salesheader,salesline, XMLNewChild,'',FALSE,TRUE,'',''); IF useDynamicwebDiscount THEN BEGIN FOR j := 0 TO XMLNodeListDiscount.Count - 1 DO BEGIN XMLNodeDiscount := XMLNodeListDiscount.ItemOf(j); //handle DW product discount order line IF (Get_TextFromNode(XMLNode,'column[@columnName=''OrderLineId'']') = Get_TextFromNode(XMLNodeDiscount,'column[@columnName=''OrderLineParentLineId'']')) AND (Get_TextFromNode(XMLNodeDiscount,'column[@columnName=''OrderLineType'']') = '3') AND (Get_TextFromNode(XMLNodeDiscount,'column[@columnName=''OrderLineProductId'']') <> '') THEN BEGIN dwProductDiscountSalesLine.INIT(); dwProductDiscountSalesLine."No." := Get_TextFromNode(XMLNodeDiscount,'column[@columnName=''OrderLineProductId'']'); dwProductDiscountSalesLine."Variant Code" := Get_TextFromNode(XMLNodeDiscount,'column[@columnName=''OrderLineProductVariantId'']'); dwProductDiscountSalesLine."Line No." := salesline."Line No."; Add_SalesLine(salesheader,dwProductDiscountSalesLine,XMLNewChild,FORMAT(dwProductDiscountSalesLine."Line No."),FALSE,TRUE, Get_TextFromNode(XMLNodeDiscount,'column[@columnName=''OrderLineDiscountId'']'),Get_TextFromNode(XMLNodeDiscount,'column[@columnName=''OrderLineProductName'']')); END; END; END ELSE BEGIN IF (salesline."Line Discount Amount" <> 0) THEN Add_SalesLine(salesheader,salesline,XMLNewChild,salesline."No.",FALSE,TRUE,'',''); END; lineno += 10000; END; END; IF NOT useDynamicwebDiscount THEN BEGIN salesheader."Invoice Disc. Code" := customer."Invoice Disc. Code"; orderDiscountPercent := GetInvoiceDiscountPercent(salesheader); IF orderDiscountPercent > 0 THEN BEGIN Add_NavOrderDiscountSalesLine(XMLNewChild, orderDiscountPercent, VATPostingSetup."VAT %", salesheader); END; END; Add_Element(XMLCurrNode,'table','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'tableName','EcomOrders'); Add_Element(XMLNewChild,'item','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'table','EcomOrders'); Add_Shipping(XMLNewChild, XMLOrderNode, lineno, salesheader, FALSE, firstOrderLineItem); Add_SalesHeader(salesheader,XMLNewChild,FALSE,Total,Discount,FALSE,TRUE); END; END; ConvertXmlToBigText(XMLdocOut,Request); END; LOCAL PROCEDURE PutEcomUsers@1000000011(VAR Request@1000000000 : BigText;XMLdocIn@1000000011 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlDocument"); VAR XMLNodeList@1000000003 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNodeList"; i@1000000002 : Integer; XMLNode@1000000001 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; customer@1000000005 : Record 18; Header@1000000009 : Text[1000]; XMLCurrNode@1000000008 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; XMLNewChild@1000000007 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; XMLdocOut@1000000006 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlDocument"; XMLRootNode@1000000004 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; contact@1000000010 : Record 5050; BEGIN XMLdocOut := XMLdocOut.XmlDocument(); Header := ''; XMLdocOut.LoadXml(Header); XMLCurrNode := XMLdocOut.DocumentElement; XMLNodeList := XMLdocIn.SelectNodes('/PutEcomUsers/table[@tableName=''AccessUser'']/item'); FOR i := 0 TO XMLNodeList.Count() -1 DO BEGIN XMLNode := XMLNodeList.ItemOf(i); IF NOT customer.GET(Get_TextFromNode(XMLNode,'column[@columnName=''AccessUserExternalID'']')) THEN BEGIN customer.INIT; customer."No." := ''; customer.INSERT(TRUE); END; Add_Element(XMLCurrNode,'user','','',XMLNewChild,''); Add_Element(XMLNewChild,'userId',Get_TextFromNode(XMLNode,'column[@columnName=''AccessUserID'']'),'',XMLNewChild,''); XMLNewChild := XMLNewChild.ParentNode; Add_Element(XMLNewChild,'externalUserId',customer."No.",'',XMLNewChild,''); customer.VALIDATE(Name,Get_TextFromNode(XMLNode,'column[@columnName=''AccessUserName'']')); customer.VALIDATE("E-Mail",Get_TextFromNode(XMLNode,'column[@columnName=''AccessUserEmail'']')); customer.VALIDATE("Phone No.",Get_TextFromNode(XMLNode,'column[@columnName=''AccessUserPhone'']')); customer.VALIDATE("Fax No.",Get_TextFromNode(XMLNode,'column[@columnName=''AccessUserFax'']')); customer.VALIDATE(Address,Get_TextFromNode(XMLNode,'column[@columnName=''AccessUserAddress'']')); customer.VALIDATE("Address 2",Get_TextFromNode(XMLNode,'column[@columnName=''AccessUserAddress2'']')); customer.VALIDATE(customer."Post Code",Get_TextFromNode(XMLNode,'column[@columnName=''AccessUserZip'']')); customer.VALIDATE(City,Get_TextFromNode(XMLNode,'column[@columnName=''AccessUserCity'']')); customer.VALIDATE("Gen. Bus. Posting Group",Get_TextFromNode(XMLdocIn.DocumentElement, '/PutEcomUsers/@GeneralBusinessPostingGroup')); customer.VALIDATE("VAT Bus. Posting Group",Get_TextFromNode(XMLdocIn.DocumentElement, '/PutEcomUsers/@VatBusinessPostingGroup')); customer.VALIDATE(customer."Customer Posting Group",Get_TextFromNode(XMLdocIn.DocumentElement, '/PutEcomUsers/@CustomerPostingGroup')); customer.MODIFY(); END; ConvertXmlToBigText(XMLdocOut,Request); END; LOCAL PROCEDURE Add_AccessUser@1000000000(XMLCurrNode@1000000000 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";GetAll@1000000004 : Boolean;FilterNodes@1000000005 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNodeList";importSales@1000000010 : Boolean); VAR XMLNewChild@1000000002 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; Customer@1000000001 : Record 18; Contact@1000000003 : Record 5050; bigtext@1000000006 : BigText; i@1000000008 : Integer; glsetup@1000 : Record 98; SalesPerson@1001 : Record 13; ContactBusiness@1000000009 : Record 5054; CompanyContact@1000000007 : Record 5050; BEGIN glsetup.GET; Add_Element(XMLCurrNode,'table','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'tableName','AccessUserGroup'); IF importSales THEN BEGIN Add_Element(XMLNewChild,'item','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'table','AccessUserGroup'); Add_Field(XMLNewChild,'AccessGroupGroupName','Sales'); Add_Field(XMLNewChild,'AccessGroupName','Sales'); XMLNewChild := XMLNewChild.ParentNode; END; Add_Element(XMLNewChild,'item','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'table','AccessUserGroup'); Add_Field(XMLNewChild,'AccessGroupGroupName','Customers'); Add_Field(XMLNewChild,'AccessGroupName','Customers'); XMLNewChild := XMLNewChild.ParentNode; Add_Element(XMLCurrNode,'table','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'tableName','AccessUser'); IF importSales THEN BEGIN IF (SalesPerson.FINDSET(FALSE, FALSE)) THEN BEGIN REPEAT Add_Element(XMLNewChild,'item','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'table','AccessUser'); Add_Field(XMLNewChild,'AccessUserUserName',SalesPerson."E-Mail"); Add_Field(XMLNewChild,'AccessUserExternalID',SalesPerson.Code); Add_Field(XMLNewChild,'AccessUserCustomerNumber',SalesPerson.Code); Add_Field(XMLNewChild,'AccessUserName',SalesPerson.Name); Add_Field(XMLNewChild,'AccessUserEmail',SalesPerson."E-Mail"); Add_Field(XMLNewChild,'AccessUserPhone',SalesPerson."Phone No."); Add_Field(XMLNewChild,'AccessUserFax',''); Add_Field(XMLNewChild,'AccessUserAddress',''); Add_Field(XMLNewChild,'AccessUserAddress2',''); Add_Field(XMLNewChild,'AccessUserZip',''); Add_Field(XMLNewChild,'AccessUserCity',''); Add_Field(XMLNewChild,'AccessUserCountry',''); Add_Field(XMLNewChild,'AccessUserAddressTitle',''); Add_Field(XMLNewChild,'AccessUserCompany',''); Add_Field(XMLNewChild,'AccessUserCurrencyCharacter',''); Add_Field(XMLNewChild,'AccessUserActive','true'); Add_Field(XMLNewChild,'AccessUserWeb',''); Add_Field(XMLNewChild,'AccessUserGroups','Sales'); XMLNewChild := XMLNewChild.ParentNode; UNTIL SalesPerson.NEXT = 0; END; END; Contact.SETRANGE(Type, Contact.Type::Person); CompanyContact.SETRANGE(Type, Contact.Type::Company); IF Contact.FINDSET(FALSE,FALSE) THEN BEGIN REPEAT //Find Customer/Company ContactBusiness.SETRANGE("Contact No.", Contact."Company No."); IF ContactBusiness.FINDFIRST THEN BEGIN IF Customer.GET(ContactBusiness."No.") AND (Contact."Company Name" = Customer.Name) AND CompanyContact.GET(Contact."Company No.") THEN BEGIN Add_Element(XMLNewChild,'item','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'table','AccessUser'); Add_Field(XMLNewChild,'AccessUserUserName',Contact."E-Mail"); Add_Field(XMLNewChild,'AccessUserExternalID',Contact."No."); Add_Field(XMLNewChild,'AccessUserCustomerNumber',ContactBusiness."No."); Add_Field(XMLNewChild,'AccessUserName',Contact.Name); //Use company address Add_Field(XMLNewChild,'AccessUserEmail',CompanyContact."E-Mail"); Add_Field(XMLNewChild,'AccessUserPhone',Customer."Phone No."); Add_Field(XMLNewChild,'AccessUserFax',Customer."Fax No."); Add_Field(XMLNewChild,'AccessUserAddress',Customer.Address); Add_Field(XMLNewChild,'AccessUserAddress2',Customer."Address 2"); Add_Field(XMLNewChild,'AccessUserZip',Customer."Post Code"); Add_Field(XMLNewChild,'AccessUserCity',Customer.City); Add_Field(XMLNewChild,'AccessUserCountry',Customer."Country/Region Code"); Add_Field(XMLNewChild,'AccessUserAddressTitle','Company address'); Add_Field(XMLNewChild,'AccessUserCompany',Contact."Company Name"); // IF Customer."Currency Code" <> '' THEN Add_Field(XMLNewChild,'AccessUserCurrencyCharacter',Customer."Currency Code") ELSE Add_Field(XMLNewChild,'AccessUserCurrencyCharacter',glsetup."LCY Code"); Add_Field(XMLNewChild,'AccessUserActive','true'); Add_Field(XMLNewChild,'AccessUserWeb',Contact."Home Page"); Add_Field(XMLNewChild,'AccessUserGroups','Customers'); XMLNewChild := XMLNewChild.ParentNode; END ELSE BEGIN //Do not import Contact that doesn't belong to any Customer END; END; UNTIL Contact.NEXT=0; END; IF importSales THEN BEGIN Add_Impersonation(XMLCurrNode); END; END; LOCAL PROCEDURE Add_EcomCountries@1000000001(XMLCurrNode@1000000000 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";GetAll@1000000004 : Boolean;FilterNodes@1000000003 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNodeList"); VAR XMLNewChild@1000000002 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; country@1000000001 : Record 9; i@1000000005 : Integer; XmlCountryText@1000000006 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; BEGIN Add_Element(XMLCurrNode,'table','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'tableName','EcomCountries'); Add_Element(XMLCurrNode,'table','','',XmlCountryText,''); Add_Attribute(XmlCountryText,'tableName','EcomCountryText'); CLEAR(country); IF GetAll = FALSE THEN BEGIN FOR i := 0 TO FilterNodes.Count() - 1 DO BEGIN IF country.GET(FilterNodes.Item(i).InnerText) THEN country.MARK(TRUE) ELSE ERROR(STRSUBSTNO('country not found %1',FilterNodes.Item(i).InnerText)) END; country.MARKEDONLY(TRUE); END; IF country.FINDSET(FALSE,FALSE) THEN BEGIN REPEAT Add_Element(XMLNewChild,'item','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'table','EcomCountries'); Add_Field(XMLNewChild,'CountryCode2',country.Code); Add_Field(XMLNewChild,'CountryCultureInfo',country.Code); XMLNewChild := XMLNewChild.ParentNode; Add_Element(XmlCountryText,'item','','',XmlCountryText,''); Add_Attribute(XmlCountryText,'table','EcomCountryText'); Add_Field(XmlCountryText,'CountryTextCode2',country.Code); Add_Field(XmlCountryText,'CountryTextLanguageId',DefaultLanguageId); Add_Field(XmlCountryText,'CountryTextName',country.Name); XmlCountryText := XmlCountryText.ParentNode; UNTIL country.NEXT=0; END; END; LOCAL PROCEDURE Add_EcomCurrencies@1000000007(XMLCurrNode@1000000000 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";GetAll@1000000004 : Boolean;FilterNodes@1000000003 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNodeList"); VAR XMLNewChild@1000000002 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; currency@1000000001 : Record 4; currencyExchangeRate@1000000007 : Record 330; i@1000000005 : Integer; Language@1000000006 : Record 8; glsetup@1000000008 : Record 98; glCurrencyAdded@1000000009 : Boolean; BEGIN Add_Element(XMLCurrNode,'table','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'tableName','EcomCurrencies'); glsetup.GET; CLEAR(currency); IF GetAll = FALSE THEN BEGIN FOR i := 0 TO FilterNodes.Count() - 1 DO BEGIN IF currency.GET(FilterNodes.Item(i).InnerText) THEN currency.MARK(TRUE) ELSE ERROR(STRSUBSTNO('currency not found %1',FilterNodes.Item(i).InnerText)) END; currency.MARKEDONLY(TRUE); END; IF currency.FINDSET(FALSE,FALSE) THEN BEGIN REPEAT Add_Element(XMLNewChild,'item','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'table','EcomCurrencies'); Add_Field(XMLNewChild,'CurrencyCode',currency.Code); Add_Field(XMLNewChild,'CurrencyName',currency.Description); Add_Field(XMLNewChild,'CurrencyLanguageID',Language.GetUserLanguage); currencyExchangeRate.SETRANGE("Currency Code", currency.Code); currencyExchangeRate.SETRANGE("Starting Date", 0D, TODAY); currencyExchangeRate.SETFILTER("Exchange Rate Amount", '>0'); IF currencyExchangeRate.FIND('+') THEN BEGIN Add_Field(XMLNewChild,'CurrencyRate',FORMAT(100 / currencyExchangeRate.ExchangeRate(TODAY, currency.Code))); END; IF currency.Code = glsetup."LCY Code" THEN BEGIN glCurrencyAdded := TRUE; Add_Field(XMLNewChild,'IsLCY','true'); END ELSE BEGIN Add_Field(XMLNewChild,'IsLCY','false'); END; XMLNewChild := XMLNewChild.ParentNode; UNTIL currency.NEXT=0; END; IF NOT glCurrencyAdded THEN BEGIN Add_Element(XMLNewChild,'item','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'table','EcomCurrencies'); Add_Field(XMLNewChild,'CurrencyCode',glsetup."LCY Code"); Add_Field(XMLNewChild,'CurrencyName','Local'); Add_Field(XMLNewChild,'CurrencyLanguageID',Language.GetUserLanguage); Add_Field(XMLNewChild,'CurrencyRate','100'); Add_Field(XMLNewChild,'IsLCY','true'); END; END; LOCAL PROCEDURE Add_EcomLanguages@1000000002(XMLCurrNode@1000000000 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";GetAll@1000000004 : Boolean;FilterNodes@1000000003 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNodeList"); VAR XMLNewChild@1000000002 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; Language@1000000001 : Record 8; i@1000000005 : Integer; BEGIN Add_Element(XMLCurrNode,'table','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'tableName','EcomLanguages'); CLEAR(Language); IF GetAll = FALSE THEN BEGIN FOR i := 0 TO FilterNodes.Count() - 1 DO BEGIN IF Language.GET(FilterNodes.Item(i).InnerText) THEN Language.MARK(TRUE) ELSE ERROR(STRSUBSTNO('Language not found %1',FilterNodes.Item(i).InnerText)) END; Language.MARKEDONLY(TRUE); END; IF Language.FINDSET(FALSE,FALSE) THEN BEGIN REPEAT Add_Element(XMLNewChild,'item','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'table','EcomLanguages'); Add_Field(XMLNewChild,'LanguageID',Language.Code); Add_Field(XMLNewChild,'LanguageCode2',Language.Code); Add_Field(XMLNewChild,'LanguageName',Language.Name); //IF Language.Code = DefaultLanguageId THEN //Add_Field(XMLNewChild,'LanguageIsDefault','true') //ELSE //Add_Field(XMLNewChild,'LanguageIsDefault','false'); XMLNewChild := XMLNewChild.ParentNode; UNTIL Language.NEXT=0; END; END; LOCAL PROCEDURE Add_EcomManufacturers@1000000003(XMLCurrNode@1000000000 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";GetAll@1000000004 : Boolean;FilterNodes@1000000003 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNodeList"); VAR XMLNewChild@1000000002 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; vendor@1000000001 : Record 23; i@1000000005 : Integer; BEGIN Add_Element(XMLCurrNode,'table','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'tableName','EcomManufacturers'); CLEAR(vendor); IF GetAll = FALSE THEN BEGIN FOR i := 0 TO FilterNodes.Count() - 1 DO BEGIN IF vendor.GET(FilterNodes.Item(i).InnerText) THEN vendor.MARK(TRUE) ELSE ERROR(STRSUBSTNO('vendor not found %1',FilterNodes.Item(i).InnerText)) END; vendor.MARKEDONLY(TRUE); END; IF vendor.FINDSET(FALSE,FALSE) THEN BEGIN REPEAT Add_Element(XMLNewChild,'item','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'table','EcomManufacturers'); Add_Field(XMLNewChild,'ManufacturerID',vendor."No."); Add_Field(XMLNewChild,'ManufacturerName',vendor.Name); Add_Field(XMLNewChild,'ManufacturerAddress',vendor.Address); Add_Field(XMLNewChild,'ManufacturerZipCode',vendor."Post Code"); Add_Field(XMLNewChild,'ManufacturerCity',vendor.City); Add_Field(XMLNewChild,'ManufacturerCountry',vendor."Country/Region Code"); Add_Field(XMLNewChild,'ManufacturerPhone',vendor."Phone No."); Add_Field(XMLNewChild,'ManufacturerFax',vendor."Fax No."); Add_Field(XMLNewChild,'ManufacturerEmail',vendor."E-Mail"); Add_Field(XMLNewChild,'ManufacturerWeb',vendor."Home Page"); XMLNewChild := XMLNewChild.ParentNode; UNTIL vendor.NEXT=0; END; END; LOCAL PROCEDURE Add_EcomProducts@1000000004(XMLdocIn@1000000020 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlDocument";VAR XMLCurrNode@1000000000 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";importProperties@1000000023 : Boolean); VAR XMLNewChild@1000000001 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; item@1000000002 : Record 27; i@1000000014 : Integer; DynamicwebCounter@1000000003 : Record 50099; pageSize@1000000009 : Integer; CustomModifier@1000000004 : Text; itemAttributesList@1000000017 : DotNet "'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Collections.Generic.List`1"; XMLNewChildProductCategoryFieldValue@1000000012 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; XMLNewChildProductCategoryField@1000000011 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; XMLNewChildProductCategoryFieldTranslation@1000000010 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; XMLNewChildProductCategoryFieldOption@1000000008 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; XMLNewChildProductCategoryFieldOptionTranslation@1000000007 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; XMLNewChildProductCategory@1000000006 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; XMLNewChildProductCategoryTranslation@1000000005 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; languagesList@1000000013 : DotNet "'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Collections.Generic.List`1"; setLanguage@1000000015 : Text; groupId@1000000016 : Text; shopId@1000000018 : Text; XMLNewChildGroupProductRelation@1000000019 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; XMLNewChildShopGroupRelation@1000000021 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; BEGIN setLanguage := Get_TextFromNode(XMLdocIn,'/GetEcomData/tables/Products/@setLanguage'); IF setLanguage = '' THEN setLanguage := Get_TextFromNode(XMLdocIn, '/GetAllEcomData/@setLanguage'); IF setLanguage = '' THEN ERROR('setLanguage attribute must be set in the request'); Add_Element(XMLCurrNode,'table','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'tableName','EcomProducts'); IF importProperties THEN BEGIN itemAttributesList := itemAttributesList.List(); END; Get_RequestLanguages(Get_TextFromNode(XMLdocIn,'/GetEcomData/tables/Products/@languages'), languagesList); groupId := Get_TextFromNode(XMLdocIn,'/GetEcomData/@groupID'); shopId := Get_TextFromNode(XMLdocIn,'/GetEcomData/@shopID'); IF shopId = '' THEN shopId := Get_TextFromNode(XMLdocIn, '/GetAllEcomData/@shopID'); IF groupId <> '' THEN BEGIN Add_Element(XMLCurrNode,'table','','',XMLNewChildGroupProductRelation,''); Add_Attribute(XMLNewChildGroupProductRelation,'tableName','EcomGroupProductRelation'); IF shopId <> '' THEN BEGIN Add_Element(XMLCurrNode,'table','','',XMLNewChildShopGroupRelation,''); Add_Attribute(XMLNewChildShopGroupRelation,'tableName','EcomShopGroupRelation'); Add_Element(XMLNewChildShopGroupRelation,'item','','',XMLNewChildShopGroupRelation,''); Add_Attribute(XMLNewChildShopGroupRelation,'table','EcomShopGroupRelation'); Add_Field(XMLNewChildShopGroupRelation,'ShopGroupShopID',shopId); Add_Field(XMLNewChildShopGroupRelation,'ShopGroupGroupID',groupId); END; END; IF Get_TextFromNode(XMLdocIn.DocumentElement,'/GetEcomData/@Qty') <> '' THEN BEGIN pageSize := TextToInteger(Get_TextFromNode(XMLdocIn.DocumentElement,'/GetEcomData/@Qty')); IF pageSize > 0 THEN BEGIN CustomModifier := Get_TextFromNode(XMLdocIn.DocumentElement,'/GetEcomData/@CustomModifier'); DynamicwebCounter.SETRANGE(MethodIdentifier, 'Add_EcomProducts'); DynamicwebCounter.SETRANGE(CustomIdentifier, CustomModifier); IF DynamicwebCounter.FIND('-') THEN BEGIN IF Get_BoolFromNode(XMLdocIn,'/GetEcomData/@ReimportTable') THEN BEGIN DynamicwebCounter.LastId := ''; END; DynamicwebCounter.BatchSize := pageSize; DynamicwebCounter.LastRequest := CURRENTDATETIME; DynamicwebCounter.MODIFY; END ELSE BEGIN DynamicwebCounter.MethodIdentifier := 'Add_EcomProducts'; DynamicwebCounter.CustomIdentifier := CustomModifier; DynamicwebCounter.BatchSize := pageSize; DynamicwebCounter.LastRequest := CURRENTDATETIME; DynamicwebCounter.LastId := ''; DynamicwebCounter.INSERT; END; IF DynamicwebCounter.LastId <> '' THEN BEGIN item.SETFILTER("No.", '>%1', FORMAT(DynamicwebCounter.LastId)); END; IF item.FINDSET(FALSE,FALSE) THEN BEGIN REPEAT i := i + 1; DynamicwebCounter.LastId := item."No."; Add_EcomProduct(item, XMLNewChild, languagesList, setLanguage); IF importProperties THEN BEGIN Add_ProductProperties(item, XMLNewChild, itemAttributesList, XMLCurrNode, XMLNewChildProductCategoryFieldValue, XMLNewChildProductCategoryField, XMLNewChildProductCategoryFieldTranslation, XMLNewChildProductCategoryFieldOption, XMLNewChildProductCategoryFieldOptionTranslation, XMLNewChildProductCategory, XMLNewChildProductCategoryTranslation, languagesList, setLanguage); END; IF groupId <> '' THEN Add_ProductDefaultGroup(groupId, item."No.", XMLNewChildGroupProductRelation); UNTIL (item.NEXT = 0) OR (i >= pageSize); DynamicwebCounter.MODIFY; END; END; END ELSE BEGIN IF item.FINDSET(FALSE,FALSE) THEN BEGIN REPEAT Add_EcomProduct(item, XMLNewChild, languagesList, setLanguage); IF importProperties THEN BEGIN Add_ProductProperties(item, XMLNewChild, itemAttributesList, XMLCurrNode, XMLNewChildProductCategoryFieldValue, XMLNewChildProductCategoryField, XMLNewChildProductCategoryFieldTranslation, XMLNewChildProductCategoryFieldOption, XMLNewChildProductCategoryFieldOptionTranslation, XMLNewChildProductCategory, XMLNewChildProductCategoryTranslation, languagesList, setLanguage); END; IF groupId <> '' THEN Add_ProductDefaultGroup(groupId, item."No.", XMLNewChildGroupProductRelation); UNTIL item.NEXT=0; END; END; END; LOCAL PROCEDURE Add_EcomProduct@1000000045(item@1000000002 : Record 27;XMLNewChild@1000000001 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";languagesList@1000000000 : DotNet "'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Collections.Generic.List`1";setLanguage@1000000003 : Text); VAR itemvariants@1000000006 : Record 5401; itemtranslations@1000000007 : Record 30; numberofvariants@1000000005 : Integer; i@1000000004 : Integer; BEGIN itemvariants.SETFILTER(itemvariants."Item No.",'=%1',item."No."); IF itemvariants.FINDSET(FALSE,FALSE) THEN BEGIN numberofvariants := itemvariants.COUNT; END ELSE BEGIN numberofvariants := 0; END; itemtranslations.SETFILTER("Item No.",'=%1',item."No."); itemtranslations.SETFILTER("Language Code",'=%1',setLanguage); itemtranslations.SETRANGE("Variant Code",''); IF itemtranslations.FINDFIRST THEN BEGIN Add_Item(item,XMLNewChild,setLanguage,'',numberofvariants,itemtranslations.Description,itemtranslations."Description 2"); END ELSE BEGIN Add_Item(item,XMLNewChild,setLanguage,'',numberofvariants,item.Description,item."Description 2"); END; IF languagesList.Count > 0 THEN BEGIN FOR i := 0 TO languagesList.Count - 1 DO BEGIN IF LOWERCASE(FORMAT(languagesList.Item(i))) <> LOWERCASE(setLanguage) THEN BEGIN itemtranslations.SETFILTER("Language Code", languagesList.Item(i)); IF itemtranslations.FINDFIRST() THEN BEGIN Add_Item(item,XMLNewChild,itemtranslations."Language Code",'',numberofvariants,itemtranslations.Description,itemtranslations."Description 2"); END; END; END; END; IF numberofvariants > 0 THEN BEGIN REPEAT CLEAR(itemtranslations); itemtranslations.SETFILTER("Item No.",'=%1', item."No."); itemtranslations.SETFILTER("Language Code",'=%1', setLanguage); itemtranslations.SETFILTER("Variant Code",'=%1', itemvariants.Code); IF itemtranslations.FINDFIRST THEN BEGIN Add_Item(item,XMLNewChild,setLanguage,itemvariants.Code,numberofvariants,itemtranslations.Description,itemtranslations."Description 2"); END ELSE BEGIN Add_Item(item,XMLNewChild,setLanguage,itemvariants.Code,numberofvariants,itemvariants.Description,itemvariants."Description 2"); END; IF languagesList.Count > 0 THEN BEGIN FOR i := 0 TO languagesList.Count - 1 DO BEGIN IF LOWERCASE(FORMAT(languagesList.Item(i))) <> LOWERCASE(setLanguage) THEN BEGIN itemtranslations.SETFILTER("Language Code", languagesList.Item(i)); IF itemtranslations.FINDFIRST() THEN BEGIN Add_Item(item,XMLNewChild,itemtranslations."Language Code",itemvariants.Code,numberofvariants,itemtranslations.Description,itemtranslations."Description 2"); END; END; END; END; UNTIL itemvariants.NEXT=0; END; END; LOCAL PROCEDURE Add_ProductCategoryAndFieldsXmlNodes@1000000047(XMLCurrNode@1000000000 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";XMLNewChildProductCategory@1000000005 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";XMLNewChildProductCategoryTranslation@1000000006 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";XMLNewChildProductCategoryField@1000000007 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";XMLNewChildProductCategoryFieldTranslation@1000000008 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";XMLNewChildProductCategoryFieldOption@1000000011 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";XMLNewChildProductCategoryFieldOptionTranslation@1000000012 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";XMLNewChildProductCategoryFieldValue@1000000001 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";languagesList@1000000002 : DotNet "'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Collections.Generic.List`1";setLanguage@1000000004 : Text); VAR i@1000000003 : Integer; BEGIN Add_Element(XMLCurrNode,'table','','',XMLNewChildProductCategory,''); Add_Attribute(XMLNewChildProductCategory,'tableName','EcomProductCategory'); Add_Element(XMLCurrNode,'table','','',XMLNewChildProductCategoryTranslation,''); Add_Attribute(XMLNewChildProductCategoryTranslation,'tableName','EcomProductCategoryTranslation'); Add_Element(XMLNewChildProductCategory,'item','','',XMLNewChildProductCategory,''); Add_Attribute(XMLNewChildProductCategory,'table','EcomProductCategory'); Add_Field(XMLNewChildProductCategory,'CategoryId', 'ImportedNAVItemAttributes'); Add_Field(XMLNewChildProductCategory,'CategoryType', '1'); Add_Field(XMLNewChildProductCategory,'CategoryProductProperties', 'true'); Add_Element(XMLCurrNode,'table','','',XMLNewChildProductCategoryField,''); Add_Attribute(XMLNewChildProductCategoryField,'tableName','EcomProductCategoryField'); Add_Element(XMLCurrNode,'table','','',XMLNewChildProductCategoryFieldTranslation,''); Add_Attribute(XMLNewChildProductCategoryFieldTranslation,'tableName','EcomProductCategoryFieldTranslation'); Add_Element(XMLCurrNode,'table','','',XMLNewChildProductCategoryFieldOption,''); Add_Attribute(XMLNewChildProductCategoryFieldOption,'tableName','EcomFieldOption'); Add_Element(XMLCurrNode,'table','','',XMLNewChildProductCategoryFieldOptionTranslation,''); Add_Attribute(XMLNewChildProductCategoryFieldOptionTranslation,'tableName','EcomFieldOptionTranslation'); Add_Element(XMLCurrNode,'table','','',XMLNewChildProductCategoryFieldValue,''); Add_Attribute(XMLNewChildProductCategoryFieldValue,'tableName','EcomProductCategoryFieldValue'); Add_Element(XMLNewChildProductCategoryTranslation,'item','','',XMLNewChildProductCategoryTranslation,''); Add_Attribute(XMLNewChildProductCategoryTranslation,'table','EcomProductCategoryTranslation'); Add_Field(XMLNewChildProductCategoryTranslation,'CategoryTranslationCategoryId', 'ImportedNAVItemAttributes'); Add_Field(XMLNewChildProductCategoryTranslation,'CategoryTranslationLanguageId', setLanguage); Add_Field(XMLNewChildProductCategoryTranslation,'CategoryTranslationCategoryName', 'Imported NAV Item Attributes'); XMLNewChildProductCategoryTranslation := XMLNewChildProductCategoryTranslation.ParentNode; IF languagesList.Count > 0 THEN BEGIN FOR i := 0 TO languagesList.Count - 1 DO BEGIN IF LOWERCASE(FORMAT(languagesList.Item(i))) <> LOWERCASE(setLanguage) THEN BEGIN Add_Element(XMLNewChildProductCategoryTranslation,'item','','',XMLNewChildProductCategoryTranslation,''); Add_Attribute(XMLNewChildProductCategoryTranslation,'table','EcomProductCategoryTranslation'); Add_Field(XMLNewChildProductCategoryTranslation,'CategoryTranslationCategoryId', 'ImportedNAVItemAttributes'); Add_Field(XMLNewChildProductCategoryTranslation,'CategoryTranslationLanguageId', languagesList.Item(i)); Add_Field(XMLNewChildProductCategoryTranslation,'CategoryTranslationCategoryName', 'Imported NAV Item Attributes'); XMLNewChildProductCategoryTranslation := XMLNewChildProductCategoryTranslation.ParentNode; END; END; END; END; LOCAL PROCEDURE Add_EcomGroups@1000000043(XMLdocIn@1000000020 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlDocument";XMLCurrNode@1000000000 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"); VAR XMLNewChildGroupProductRelation@1000000010 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; item@1000000002 : Record 27; shopId@1000000001 : Text; BEGIN shopId := Get_TextFromNode(XMLdocIn.DocumentElement, '/GetEcomData/@shopID'); IF shopId = '' THEN shopId := Get_TextFromNode(XMLdocIn.DocumentElement, '/GetAllEcomData/@shopID'); Add_EcomProductCategories(XMLdocIn, XMLCurrNode, shopId); Add_Element(XMLCurrNode,'table','','',XMLNewChildGroupProductRelation,''); Add_Attribute(XMLNewChildGroupProductRelation,'tableName','EcomGroupProductRelation'); IF item.FINDSET(FALSE,FALSE) THEN BEGIN REPEAT IF item."Item Category Code" <> '' THEN BEGIN Add_Element(XMLNewChildGroupProductRelation,'item','','',XMLNewChildGroupProductRelation,''); Add_Attribute(XMLNewChildGroupProductRelation,'table','EcomGroupProductRelation'); Add_Field(XMLNewChildGroupProductRelation,'GroupProductRelationGroupID',item."Item Category Code"); Add_Field(XMLNewChildGroupProductRelation,'GroupProductRelationProductID',item."No."); Add_Field(XMLNewChildGroupProductRelation,'GroupProductRelationIsPrimary','True'); XMLNewChildGroupProductRelation := XMLNewChildGroupProductRelation.ParentNode; END; UNTIL item.NEXT=0; END; END; LOCAL PROCEDURE Add_EcomProductCategories@1000000026(XMLdocIn@1000000000 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlDocument";XMLCurrNode@1000000001 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";shopId@1000000004 : Text); VAR XMLNewChildGroupProductGroups@1000000018 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; XMLNewChildShopGroupRelation@1000000021 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; XMLNewChildGroupRelation@1000 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; ItemCategory@1001 : Record 5722; languagesList@1000000003 : DotNet "'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Collections.Generic.List`1"; i@1000000002 : Integer; setLanguage@1000000022 : Text; BEGIN setLanguage := Get_TextFromNode(XMLdocIn,'/GetEcomData/tables/ProductGroups/@setLanguage'); IF setLanguage = '' THEN setLanguage := Get_TextFromNode(XMLdocIn,'/GetAllEcomData/@setLanguage'); IF setLanguage = '' THEN ERROR('setLanguage attribute must be set in the request'); Add_Element(XMLCurrNode,'table','','',XMLNewChildGroupProductGroups,''); Add_Attribute(XMLNewChildGroupProductGroups,'tableName','EcomGroups'); Add_Element(XMLCurrNode,'table','','',XMLNewChildShopGroupRelation,''); Add_Attribute(XMLNewChildShopGroupRelation,'tableName','EcomShopGroupRelation'); Add_Element(XMLCurrNode,'table','','',XMLNewChildGroupRelation,''); Add_Attribute(XMLNewChildGroupRelation,'tableName','EcomGroupRelations'); Get_RequestLanguages(Get_TextFromNode(XMLdocIn,'/GetEcomData/tables/ProductGroups/@languages'), languagesList); //Add Item Categories as product groups IF ItemCategory.FINDSET(FALSE, FALSE) THEN REPEAT Add_Element(XMLNewChildShopGroupRelation,'item','','',XMLNewChildShopGroupRelation,''); Add_Attribute(XMLNewChildShopGroupRelation,'table','EcomShopGroupRelation'); Add_Field(XMLNewChildShopGroupRelation,'ShopGroupShopID', shopId); Add_Field(XMLNewChildShopGroupRelation,'ShopGroupGroupID', ItemCategory.Code); XMLNewChildShopGroupRelation := XMLNewChildShopGroupRelation.ParentNode; Add_Element(XMLNewChildGroupProductGroups,'item','','',XMLNewChildGroupProductGroups,''); Add_Attribute(XMLNewChildGroupProductGroups,'table','EcomGroups'); Add_Field(XMLNewChildGroupProductGroups,'GroupID',ItemCategory.Code); Add_Field(XMLNewChildGroupProductGroups,'GroupLanguageID',setLanguage); IF ItemCategory.Description = '' THEN BEGIN Add_Field(XMLNewChildGroupProductGroups,'GroupName', ItemCategory.Code); END ELSE BEGIN Add_Field(XMLNewChildGroupProductGroups,'GroupName', ItemCategory.Description); END; Add_Field(XMLNewChildGroupProductGroups,'GroupInheritCategoryFieldsFromParent','true'); XMLNewChildGroupProductGroups := XMLNewChildGroupProductGroups.ParentNode; IF languagesList.Count > 0 THEN BEGIN FOR i := 0 TO languagesList.Count - 1 DO BEGIN IF FORMAT(languagesList.Item(i)) <> setLanguage THEN BEGIN Add_Element(XMLNewChildGroupProductGroups,'item','','',XMLNewChildGroupProductGroups,''); Add_Attribute(XMLNewChildGroupProductGroups,'table','EcomGroups'); Add_Field(XMLNewChildGroupProductGroups,'GroupID',ItemCategory.Code); Add_Field(XMLNewChildGroupProductGroups,'GroupLanguageID',languagesList.Item(i)); Add_Field(XMLNewChildGroupProductGroups,'GroupName', STRSUBSTNO('%1_%2_NotTranslated', ItemCategory.Code, languagesList.Item(i))); Add_Field(XMLNewChildGroupProductGroups,'GroupInheritCategoryFieldsFromParent','true'); XMLNewChildGroupProductGroups := XMLNewChildGroupProductGroups.ParentNode; END; END; END; IF ItemCategory."Parent Category" <> '' THEN BEGIN Add_Element(XMLNewChildGroupRelation,'item','','',XMLNewChildGroupRelation,''); Add_Attribute(XMLNewChildGroupRelation,'table','EcomGroupRelations'); Add_Field(XMLNewChildGroupRelation,'GroupRelationsGroupID',ItemCategory.Code); Add_Field(XMLNewChildGroupRelation,'GroupRelationsParentID',ItemCategory."Parent Category"); Add_Field(XMLNewChildGroupRelation,'GroupRelationsSorting',FORMAT(ItemCategory."Presentation Order" - ItemCategory.Indentation)); XMLNewChildGroupRelation := XMLNewChildGroupRelation.ParentNode; END; UNTIL ItemCategory.NEXT=0; END; LOCAL PROCEDURE Add_EcomProductCategoryField@1000000028(VAR ItemAttributes@1000000026 : Record 7500;ItemAttributeValueMappingValueId@1000000030 : Integer;XMLNewChildProductCategoryField@1000000032 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";XMLNewChildProductCategoryFieldTranslation@1000000033 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";XMLNewChildProductCategoryFieldOption@1000000034 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";XMLNewChildProductCategoryFieldOptionTranslation@1000000035 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";ItemCategoryCode@100000000 : Text[1000];languagesList@1000000002 : DotNet "'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Collections.Generic.List`1";setLanguage@1000000004 : Text); VAR ItemAttributeValues@1000000027 : Record 7501; ItemAttributeTranslation@1000000028 : Record 7502; ItemAttributeValueTranslation@1000000029 : Record 7503; optionsText@1000000000 : Text; defaultOptionsText@1000000001 : Text; i@1000000003 : Integer; BEGIN IF NOT languagesList.Contains(setLanguage) THEN languagesList.Add(setLanguage); Add_Element(XMLNewChildProductCategoryField,'item','','',XMLNewChildProductCategoryField,''); Add_Attribute(XMLNewChildProductCategoryField,'table','EcomProductCategoryField'); Add_Field(XMLNewChildProductCategoryField,'FieldId', ItemCategoryCode + '_' + FORMAT(ItemAttributes.ID)); Add_Field(XMLNewChildProductCategoryField,'FieldCategoryId', ItemCategoryCode); Add_Field(XMLNewChildProductCategoryField,'FieldTemplateTag', ItemCategoryCode + '_' + FORMAT(ItemAttributes.ID)); CASE ItemAttributes.Type OF ItemAttributes.Type::Text: Add_Field(XMLNewChildProductCategoryField,'FieldType', '1'); ItemAttributes.Type::Integer: Add_Field(XMLNewChildProductCategoryField,'FieldType', '6'); ItemAttributes.Type::Decimal: Add_Field(XMLNewChildProductCategoryField,'FieldType', '7'); ItemAttributes.Type::Option: Add_Field(XMLNewChildProductCategoryField,'FieldType', '15'); ELSE Add_Field(XMLNewChildProductCategoryField,'FieldType', '1'); END; CLEAR(ItemAttributeValues); ItemAttributeValues.SETFILTER(ID, FORMAT(ItemAttributeValueMappingValueId)); ItemAttributeValues.SETFILTER("Attribute ID", FORMAT(ItemAttributes.ID)); IF ItemAttributeValues.FINDFIRST THEN BEGIN IF ItemAttributes.Type = ItemAttributes.Type::Option THEN Add_Field(XMLNewChildProductCategoryField,'FieldDefaultValue', FORMAT(ItemAttributeValues.ID)) ELSE Add_Field(XMLNewChildProductCategoryField,'FieldDefaultValue', ItemAttributeValues.Value); END ELSE BEGIN Add_Field(XMLNewChildProductCategoryField,'FieldDefaultValue', ''); END; Add_Field(XMLNewChildProductCategoryField,'FieldPresentationType','1'); Add_Field(XMLNewChildProductCategoryField,'FieldDoNotRender','false'); Add_Field(XMLNewChildProductCategoryField,'FieldHideEmpty','false'); XMLNewChildProductCategoryField := XMLNewChildProductCategoryField.ParentNode; IF ItemAttributes.Type = ItemAttributes.Type::Option THEN BEGIN CLEAR(ItemAttributeValues); ItemAttributeValues.SETFILTER("Attribute ID", FORMAT(ItemAttributes.ID)); // defaultOptionsText := ''; IF ItemAttributeValues.FINDSET(FALSE, FALSE) THEN BEGIN REPEAT Add_Element(XMLNewChildProductCategoryFieldOption,'item','','',XMLNewChildProductCategoryFieldOption,''); Add_Attribute(XMLNewChildProductCategoryFieldOption,'table','EcomFieldOption'); Add_Field(XMLNewChildProductCategoryFieldOption,'FieldOptionId',ItemCategoryCode + '_' + FORMAT(ItemAttributes.ID) + '_'+ FORMAT(ItemAttributeValues.ID)); Add_Field(XMLNewChildProductCategoryFieldOption,'FieldOptionFieldId',ItemCategoryCode + '_' + FORMAT(ItemAttributes.ID)); Add_Field(XMLNewChildProductCategoryFieldOption,'FieldOptionName',ItemAttributeValues.Value); Add_Field(XMLNewChildProductCategoryFieldOption,'FieldOptionValue',FORMAT(ItemAttributeValues.ID)); //FieldOptionIsDefault XMLNewChildProductCategoryFieldOption := XMLNewChildProductCategoryFieldOption.ParentNode; //add def language CLEAR(ItemAttributeValueTranslation); ItemAttributeValueTranslation.SETFILTER("Attribute ID", FORMAT(ItemAttributes.ID)); ItemAttributeValueTranslation.SETFILTER("Language Code", '=%1', setLanguage); ItemAttributeValueTranslation.SETFILTER(ID, FORMAT(ItemAttributeValues.ID)); IF NOT ItemAttributeValueTranslation.FINDFIRST THEN BEGIN Add_Element(XMLNewChildProductCategoryFieldOptionTranslation,'item','','',XMLNewChildProductCategoryFieldOptionTranslation,''); Add_Attribute(XMLNewChildProductCategoryFieldOptionTranslation,'table','EcomFieldOptionTranslation'); //Add_Field(XMLNewChildProductCategoryFieldOptionTranslation,'EcomFieldOptionTranslationID',FORMAT(ItemAttributeValueTranslation.ID)); Add_Field(XMLNewChildProductCategoryFieldOptionTranslation,'EcomFieldOptionTranslationOptionID',ItemCategoryCode + '_' + FORMAT(ItemAttributes.ID) + '_'+ FORMAT(ItemAttributeValues.ID)); Add_Field(XMLNewChildProductCategoryFieldOptionTranslation,'EcomFieldOptionTranslationLanguageID', setLanguage); Add_Field(XMLNewChildProductCategoryFieldOptionTranslation,'EcomFieldOptionTranslationName',ItemAttributeValues.Value); XMLNewChildProductCategoryFieldOptionTranslation := XMLNewChildProductCategoryFieldOptionTranslation.ParentNode; defaultOptionsText := defaultOptionsText + ''; CLEAR(ItemAttributeValueTranslation); ItemAttributeValueTranslation.SETFILTER("Attribute ID", FORMAT(ItemAttributes.ID)); IF ItemAttributeValueTranslation.FINDSET(FALSE, FALSE) THEN BEGIN REPEAT IF languagesList.Contains(ItemAttributeValueTranslation."Language Code") THEN BEGIN Add_Element(XMLNewChildProductCategoryFieldOptionTranslation,'item','','',XMLNewChildProductCategoryFieldOptionTranslation,''); Add_Attribute(XMLNewChildProductCategoryFieldOptionTranslation,'table','EcomFieldOptionTranslation'); //Add_Field(XMLNewChildProductCategoryFieldOptionTranslation,'EcomFieldOptionTranslationID',FORMAT(ItemAttributeValueTranslation.ID)); Add_Field(XMLNewChildProductCategoryFieldOptionTranslation,'EcomFieldOptionTranslationOptionID',ItemCategoryCode + '_' + FORMAT(ItemAttributes.ID) + '_'+ FORMAT(ItemAttributeValueTranslation.ID)); Add_Field(XMLNewChildProductCategoryFieldOptionTranslation,'EcomFieldOptionTranslationLanguageID',ItemAttributeValueTranslation."Language Code"); Add_Field(XMLNewChildProductCategoryFieldOptionTranslation,'EcomFieldOptionTranslationName',ItemAttributeValueTranslation.Name); XMLNewChildProductCategoryFieldOptionTranslation := XMLNewChildProductCategoryFieldOptionTranslation.ParentNode; END; UNTIL ItemAttributeValueTranslation.NEXT=0; END; FOR i := 0 TO languagesList.Count - 1 DO BEGIN CLEAR(ItemAttributeTranslation); ItemAttributeTranslation.SETFILTER("Attribute ID", FORMAT(ItemAttributes.ID)); ItemAttributeTranslation.SETFILTER("Language Code", '=%1', FORMAT(languagesList.Item(i))); IF ItemAttributeTranslation.FINDFIRST() THEN BEGIN optionsText := ''; IF ItemAttributeValues.FINDSET(FALSE, FALSE) THEN BEGIN REPEAT CLEAR(ItemAttributeValueTranslation); ItemAttributeValueTranslation.SETFILTER("Attribute ID", FORMAT(ItemAttributes.ID)); ItemAttributeValueTranslation.SETFILTER("Language Code", '=%1', FORMAT(languagesList.Item(i))); ItemAttributeValueTranslation.SETFILTER(ID, FORMAT(ItemAttributeValues.ID)); IF NOT ItemAttributeValueTranslation.FINDFIRST THEN BEGIN optionsText := optionsText + ''; Add_EcomProductCategoryFieldOptionTranslation(ItemAttributes,FORMAT(languagesList.Item(i)),XMLNewChildProductCategoryFieldTranslation,ItemCategoryCode,optionsText,ItemAttributeTranslation.Name); END ELSE BEGIN IF LOWERCASE(FORMAT(languagesList.Item(i))) = LOWERCASE(setLanguage) THEN Add_EcomProductCategoryFieldOptionTranslation(ItemAttributes,setLanguage,XMLNewChildProductCategoryFieldTranslation,ItemCategoryCode,defaultOptionsText,ItemAttributes.Name); END; END; END ELSE BEGIN defaultOptionsText := ''; //other language option translation FOR i := 0 TO languagesList.Count - 1 DO BEGIN CLEAR(ItemAttributeTranslation); ItemAttributeTranslation.SETFILTER("Attribute ID", FORMAT(ItemAttributes.ID)); ItemAttributeTranslation.SETFILTER("Language Code", '=%1', FORMAT(languagesList.Item(i))); IF ItemAttributeTranslation.FINDFIRST() THEN Add_EcomProductCategoryFieldOptionTranslation(ItemAttributes,FORMAT(languagesList.Item(i)),XMLNewChildProductCategoryFieldTranslation,ItemCategoryCode,defaultOptionsText,ItemAttributeTranslation.Name) ELSE IF LOWERCASE(FORMAT(languagesList.Item(i))) = LOWERCASE(setLanguage) THEN Add_EcomProductCategoryFieldOptionTranslation(ItemAttributes,setLanguage,XMLNewChildProductCategoryFieldTranslation,ItemCategoryCode,defaultOptionsText,ItemAttributes.Name); END; END; END; LOCAL PROCEDURE Add_EcomProductCategoryFieldOptionTranslation@1000000029(VAR ItemAttributes@1000000026 : Record 7500;languageId@1000000030 : Text[30];XMLNewChildProductCategoryFieldTranslation@1000000033 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";ItemCategoryCode@100000000 : Text[1000];options@100000001 : Text;label@1000000000 : Text); BEGIN Add_Element(XMLNewChildProductCategoryFieldTranslation,'item','','',XMLNewChildProductCategoryFieldTranslation,''); Add_Attribute(XMLNewChildProductCategoryFieldTranslation,'table','EcomProductCategoryFieldTranslation'); Add_Field(XMLNewChildProductCategoryFieldTranslation,'FieldTranslationFieldId',ItemCategoryCode + '_' + FORMAT(ItemAttributes.ID)); Add_Field(XMLNewChildProductCategoryFieldTranslation,'FieldTranslationFieldCategoryId',ItemCategoryCode); Add_Field(XMLNewChildProductCategoryFieldTranslation,'FieldTranslationLanguageId',languageId); Add_Field(XMLNewChildProductCategoryFieldTranslation,'FieldTranslationFieldLabel',label); Add_Field(XMLNewChildProductCategoryFieldTranslation,'FieldTranslationFieldOptions',options); XMLNewChildProductCategoryFieldTranslation := XMLNewChildProductCategoryFieldTranslation.ParentNode; END; LOCAL PROCEDURE Add_Item@1000000016(item@1000000000 : Record 27;VAR XMLNewChildProd@1000000002 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";language@1000000001 : Text[30];variant@1000000003 : Text[30];variantcount@1000000006 : Integer;description1@1000000004 : Text[255];description2@1000000005 : Text[255]); VAR Languages@1000000007 : Record 8; itemIdentifier@1000000008 : Record 7704; itemLedgerEntry@1000000009 : Record 32; BEGIN item."Variant Filter" := variant; item.CALCFIELDS(item.Inventory); Add_Element(XMLNewChildProd,'item','','',XMLNewChildProd,''); Add_Attribute(XMLNewChildProd,'table','EcomProducts'); Add_Field(XMLNewChildProd,'ProductID',item."No."); IF (language <> '') THEN Add_Field(XMLNewChildProd,'ProductLanguageID',language) ELSE Add_Field(XMLNewChildProd,'ProductLanguageID',Languages.GetUserLanguage); IF (variant <> '') THEN Add_Field(XMLNewChildProd,'ProductVariantID',variant) ELSE Add_Field(XMLNewChildProd,'ProductVariantID',''); Add_Field(XMLNewChildProd,'ProductNumber',item."No."); Add_Field(XMLNewChildProd,'ProductName',description1); Add_Field(XMLNewChildProd,'ProductShortDescription',description2); Add_Field(XMLNewChildProd,'ProductPrice',FORMAT(item."Unit Price")); IF (variant <> '') THEN BEGIN itemLedgerEntry.SETFILTER("Item No.", '=%1', item."No."); itemLedgerEntry.SETFILTER("Variant Code", '=%1', variant); itemLedgerEntry.CALCSUMS(Quantity); Add_Field(XMLNewChildProd,'ProductStock',FORMAT(itemLedgerEntry.Quantity)); END ELSE BEGIN Add_Field(XMLNewChildProd,'ProductStock',FORMAT(item.Inventory)); END; Add_Field(XMLNewChildProd,'ProductWeight',FORMAT(item."Net Weight")); Add_Field(XMLNewChildProd,'ProductVolume',FORMAT(item."Unit Volume")); Add_Field(XMLNewChildProd,'ProductManufacturerID',item."Vendor No."); IF (item.Blocked = TRUE) THEN Add_Field(XMLNewChildProd,'ProductActive','false') ELSE Add_Field(XMLNewChildProd,'ProductActive','true'); Add_Field(XMLNewChildProd,'ProductVariantCounter',FORMAT(variantcount)); //antal af vaianter; Add_Field(XMLNewChildProd,'ProductDefaultUnitID',STRSUBSTNO('Unit_%1',item."Base Unit of Measure")); itemIdentifier.SETFILTER("Item No.", '=%1', item."No."); itemIdentifier.SETFILTER("Variant Code", '=%1', variant); IF itemIdentifier.FINDFIRST() THEN BEGIN Add_Field(XMLNewChildProd,'ProductEAN',itemIdentifier.Code); END ELSE BEGIN Add_Field(XMLNewChildProd,'ProductEAN',item."Identifier Code"); END; XMLNewChildProd := XMLNewChildProd.ParentNode; END; LOCAL PROCEDURE Add_EcomProductsCustomer@1000000021(XMLCurrNode@1000000000 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";GetAll@1000000013 : Boolean;CustomerNo@1000000010 : Text;FilterNodes@1000000012 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNodeList";getUnitPrices@1000000021 : Boolean); VAR XMLNewChild@1000000001 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; item@1000000002 : Record 27; itemvariants@1000000006 : Record 5401; itemtranslations@1000000007 : Record 30; numberofitems@1000000003 : Integer; numberoftranslations@1000000004 : Integer; numberofvariants@1000000005 : Integer; UnitofMeasure@1000000008 : Record 204; unitofmeasuretranslation@1000000009 : Record 5402; i@1000000014 : Integer; ItemNode@1000000015 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; LanguageNode@1000000016 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; Language@1000000017 : Record 8; customer@1000000018 : Record 18; CurrExchRate@1000000019 : Record 330; XMLNewChildTemp@1000000020 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; XMLNewChildUOMPrices@1000000022 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; BEGIN Add_Element(XMLCurrNode,'table','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'tableName','EcomProducts'); IF getUnitPrices THEN BEGIN Add_Element(XMLCurrNode,'table','','',XMLNewChildUOMPrices,''); Add_Attribute(XMLNewChildUOMPrices,'tableName','EcomPrices'); END; GetCustomer(CustomerNo, customer); IF (FilterNodes.Count() >= 1) THEN BEGIN ExchRateDate := TODAY; GLSetup.GET; IF (Currency.GET(Get_TextFromNode(FilterNodes.Item(0),'CurrencyCode'))) THEN BEGIN Currency.SETRECFILTER(); CurrencyFactor := CurrExchRate.ExchangeRate(ExchRateDate,Currency.Code); END ELSE BEGIN CurrencyFactor := 1; END; END; IF GetAll = FALSE THEN BEGIN FOR i := 0 TO FilterNodes.Count() - 1 DO BEGIN IF ISNULL(FilterNodes.Item(i)) THEN ERROR ('Node not found'); XMLNewChildTemp := FilterNodes.Item(i).SelectSingleNode('ProductID'); IF ISNULL(XMLNewChildTemp) THEN XMLNewChildTemp := FilterNodes.Item(i).SelectSingleNode('ProductId'); IF ISNULL(XMLNewChildTemp) THEN ERROR ('ProductId node not found in the request'); IF XMLNewChildTemp.InnerText <> '' THEN BEGIN IF item.GET(XMLNewChildTemp.InnerText) THEN BEGIN Add_ItemCustomer(item,customer,XMLNewChild,FilterNodes.Item(i), XMLNewChildUOMPrices); END; END; END; END ELSE BEGIN IF item.FINDSET(FALSE,FALSE) THEN BEGIN REPEAT ERROR('Not Implemented all') UNTIL item.NEXT=0; END; END; END; LOCAL PROCEDURE Add_ItemCustomer@1000000032(item@1000000000 : Record 27;customer@1000000006 : Record 18;VAR XMLNewChildProd@1000000002 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";node@1000000011 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";XMLNewChildUOMPrices@1000000015 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"); VAR Languages@1000000007 : Record 8; itemvariants@1000000004 : Record 5401; pricemgt@1000000005 : Codeunit 7000; TempSalesPrice@1000000008 : TEMPORARY Record 7002; TempSalesLineDisc@1000000013 : TEMPORARY Record 7004; TempSalesHeader@1000000009 : TEMPORARY Record 36; TempSalesLine@1000000010 : TEMPORARY Record 37; VATPostingSetup@1000000012 : Record 325; variant@1000000001 : Text[30]; isOldVersion@1000000003 : Boolean; itemUOM@1000000014 : Record 5404; BEGIN item."Variant Filter" := variant; item.CALCFIELDS(item.Inventory); Add_Element(XMLNewChildProd,'item','','',XMLNewChildProd,''); Add_Attribute(XMLNewChildProd,'table','EcomProducts'); isOldVersion := (Get_TextFromNode(node,'ProductID') <> ''); //Old Live integration 1 IF isOldVersion THEN BEGIN Add_Field(XMLNewChildProd,'ProductID',item."No."); variant := Get_TextFromNode(node,'ProductVariantID'); Add_Field(XMLNewChildProd,'ProductVariantID',variant); END ELSE BEGIN Add_Field(XMLNewChildProd,'ProductId',item."No."); variant := Get_TextFromNode(node,'ProductVariantId'); Add_Field(XMLNewChildProd,'ProductVariantId',variant); Add_Field(XMLNewChildProd,'ProductIdentifier',Get_TextFromNode(node,'ProductIdentifier')); END; Add_Field(XMLNewChildProd,'ProductNumber',item."No."); IF (variant = '') THEN Add_Field(XMLNewChildProd,'ProductName',item.Description) ELSE BEGIN CLEAR(itemvariants); itemvariants.SETRANGE("Item No.",item."No."); itemvariants.SETRANGE(Code,variant); IF itemvariants.FINDFIRST THEN Add_Field(XMLNewChildProd,'ProductName',itemvariants.Description); END; VATPostingSetup.GET(customer."VAT Bus. Posting Group",item."VAT Prod. Posting Group"); AllowLineDisc := customer."Allow Line Disc."; AllowInvDisc := FALSE; Qty := 1; QtyPerUOM := 1; VATCalcType := VATPostingSetup."VAT Calculation Type"; PricesInclVAT := customer."Prices Including VAT"; VATBusPostingGr := customer."VAT Bus. Posting Group"; VATPerCent := VATPostingSetup."VAT %"; PricesInCurrency := TRUE; CLEAR(TempSalesPrice); CLEAR(TempSalesLineDisc); TempSalesPrice.DELETEALL; TempSalesLineDisc.DELETEALL; pricemgt.FindSalesLineDisc(TempSalesLineDisc, customer."No.",'',customer."Customer Disc. Group",'',item."No.",item."Item Disc. Group",variant,item."Base Unit of Measure",Currency.Code,ExchRateDate,FALSE); CalcBestLineDisc(TempSalesLineDisc); LineDiscPerCent := TempSalesLineDisc."Line Discount %"; pricemgt.FindSalesPrice(TempSalesPrice,customer."No.",'',customer."Customer Price Group",'',item."No.",variant,item."Base Unit of Measure",Currency.Code,ExchRateDate,FALSE); CalcBestUnitPrice(TempSalesPrice,item); Add_Field(XMLNewChildProd,'ProductPrice',FORMAT(CalcLineAmount(TempSalesPrice))); Add_Field(XMLNewChildProd,'ProductStock',FORMAT(item.Inventory)); Add_Field(XMLNewChildProd,'ProductCurrencyCode',Currency.Code); IF NOT ISNULL(XMLNewChildUOMPrices) THEN BEGIN Add_Field(XMLNewChildProd,'ProductDefaultUnitId',STRSUBSTNO('Unit_%1',item."Base Unit of Measure")); itemUOM.SETRANGE("Item No.", item."No."); IF itemUOM.FINDSET(FALSE,FALSE) THEN BEGIN REPEAT Add_Element(XMLNewChildUOMPrices,'item','','',XMLNewChildUOMPrices,''); Add_Attribute(XMLNewChildUOMPrices,'table','EcomPrices'); Add_Field(XMLNewChildUOMPrices,'PriceProductId',item."No."); Add_Field(XMLNewChildUOMPrices,'PriceUserCustomerNumber',customer."No."); Add_Field(XMLNewChildUOMPrices,'PriceProductUnitId',STRSUBSTNO('Unit_%1',itemUOM.Code)); Add_Field(XMLNewChildUOMPrices,'PriceQuantity',FORMAT(itemUOM."Qty. per Unit of Measure")); TempSalesPrice.DELETEALL; TempSalesLineDisc.DELETEALL; QtyPerUOM := itemUOM."Qty. per Unit of Measure"; pricemgt.FindSalesLineDisc(TempSalesLineDisc, customer."No.",'',customer."Customer Disc. Group",'',item."No.",item."Item Disc. Group",variant,itemUOM.Code,Currency.Code,ExchRateDate,FALSE); CalcBestLineDisc(TempSalesLineDisc); LineDiscPerCent := TempSalesLineDisc."Line Discount %"; pricemgt.FindSalesPrice(TempSalesPrice,customer."No.",'',customer."Customer Price Group",'',item."No.",variant,itemUOM.Code,Currency.Code,ExchRateDate,FALSE); CalcBestUnitPrice(TempSalesPrice,item); Add_Field(XMLNewChildUOMPrices,'PriceAmount',FORMAT(CalcLineAmount(TempSalesPrice))); XMLNewChildUOMPrices := XMLNewChildUOMPrices.ParentNode; UNTIL itemUOM.NEXT = 0; END; END; XMLNewChildProd := XMLNewChildProd.ParentNode; END; LOCAL PROCEDURE Add_SalesHeader@1000000027(salesheader@1000000000 : Record 36;VAR XMLNewChild@1000000001 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";tempoary@1000000003 : Boolean;VAR Total@1000000005 : Decimal;VAR Discount@1000000004 : Decimal;FromCustomerCenter@1000000006 : Boolean;calculateOrderIF2@1000000008 : Boolean); VAR prefix@1000000007 : Text; BEGIN IF (FromCustomerCenter = FALSE ) THEN BEGIN prefix := 'Order'; IF (tempoary = FALSE) THEN Add_Field(XMLNewChild,'OrderCreated','TRUE') ELSE Add_Field(XMLNewChild,'OrderCreated','FALSE'); END; IF calculateOrderIF2 THEN Add_Field(XMLNewChild,prefix+'Id',salesheader."No.") ELSE Add_Field(XMLNewChild,prefix+'ID',salesheader."No."); Add_Field(XMLNewChild,prefix+'CurrencyCode',salesheader."Currency Code"); Add_Field(XMLNewChild,prefix+'Date',FORMAT(salesheader."Order Date")); Add_Field(XMLNewChild,prefix+'PaymentMethodName',salesheader."Payment Method Code"); Add_Field(XMLNewChild,prefix+'CustomerName',salesheader."Sell-to Customer Name"); Add_Field(XMLNewChild,prefix+'CustomerAddress',salesheader."Sell-to Address"); Add_Field(XMLNewChild,prefix+'CustomerAddress2',salesheader."Sell-to Address 2"); Add_Field(XMLNewChild,prefix+'CustomerCity',salesheader."Sell-to City"); Add_Field(XMLNewChild,prefix+'CustomerCountryCode',salesheader."Sell-to Country/Region Code"); Add_Field(XMLNewChild,prefix+'CustomerEmail',''); Add_Field(XMLNewChild,prefix+'CustomerFax',''); Add_Field(XMLNewChild,prefix+'CustomerPhone',''); Add_Field(XMLNewChild,prefix+'CustomerZip',salesheader."Ship-to Post Code"); Add_Field(XMLNewChild,prefix+'DeliveryName',salesheader."Ship-to Name"); Add_Field(XMLNewChild,prefix+'DeliveryAddress',salesheader."Ship-to Address"); Add_Field(XMLNewChild,prefix+'DeliveryAddress2',salesheader."Ship-to Address 2"); Add_Field(XMLNewChild,prefix+'DeliveryCity',salesheader."Ship-to City"); Add_Field(XMLNewChild,prefix+'DeliveryCountryCode',salesheader."Ship-to Country/Region Code"); Add_Field(XMLNewChild,prefix+'DeliveryEmail',''); Add_Field(XMLNewChild,prefix+'DeliveryFax',''); Add_Field(XMLNewChild,prefix+'DeliveryPhone',''); Add_Field(XMLNewChild,prefix+'DeliveryZip',salesheader."Ship-to Post Code"); IF calculateOrderIF2 THEN BEGIN Add_Field(XMLNewChild,prefix+'PriceWithVat',FORMAT(Order_OrderPriceWithVAT)); Add_Field(XMLNewChild,prefix+'PriceWithoutVat',FORMAT(Order_OrderPriceWithoutVAT)); Add_Field(XMLNewChild,prefix+'PriceVat',FORMAT(Order_OrderPriceVAT)); END ELSE BEGIN Add_Field(XMLNewChild,prefix+'PriceWithVAT',FORMAT(Order_OrderPriceWithVAT)); Add_Field(XMLNewChild,prefix+'PriceWithoutVAT',FORMAT(Order_OrderPriceWithoutVAT)); Add_Field(XMLNewChild,prefix+'PriceVAT',FORMAT(Order_OrderPriceVAT)); END; Add_Field(XMLNewChild,prefix+'SalesDiscount',FORMAT(Order_OrderSalesDiscount)); END; LOCAL PROCEDURE Add_SalesLine@1000000031(salesheader@1000000000 : Record 36;salesLine@1000000003 : Record 37;VAR XMLNewChild@1000000002 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";Parent@1000000001 : Code[20];FromCustomerCenter@1000000008 : Boolean;calculateOrderIF2@1000000010 : Boolean;dynamicwebDiscountId@1000000013 : Text;dynamicwebDiscountName@1000000014 : Text); VAR price@1000000004 : Decimal; VATPostingSetup@1000000005 : Record 325; TempWithWAT@1000000006 : Decimal; TempWithoutWAT@1000000007 : Decimal; prefix@1000000009 : Text; idPrefix@1000000011 : Text; vatPrefix@1000000012 : Text; BEGIN IF (FromCustomerCenter = FALSE ) THEN BEGIN prefix := 'OrderLine'; END; IF calculateOrderIF2 THEN BEGIN idPrefix := 'Id'; vatPrefix := 'Vat'; END ELSE BEGIN idPrefix := 'ID'; vatPrefix := 'VAT'; END; IF salesheader."Currency Code" = '' THEN Currency.InitRoundingPrecision ELSE Currency.GET(salesheader."Currency Code"); Add_Element(XMLNewChild,'item','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'table','EcomOrderLines'); Add_Field(XMLNewChild,prefix+'ProductNumber',salesLine."No."); Add_Field(XMLNewChild,prefix+'ProductVariant'+idPrefix,salesLine."Variant Code"); IF calculateOrderIF2 AND (salesLine."Unit of Measure Code" <> '') THEN Add_Field(XMLNewChild,prefix+'UnitId',STRSUBSTNO('Unit_%1',salesLine."Unit of Measure Code")); IF (Parent <> '') THEN BEGIN Add_Field(XMLNewChild,prefix+'ParentLine'+idPrefix,FORMAT(salesLine."Line No.")); Add_Field(XMLNewChild,prefix+'Type','3'); Add_Field(XMLNewChild,prefix+'Quantity','1'); IF dynamicwebDiscountId <> '' THEN BEGIN Add_Field(XMLNewChild, prefix + 'DiscountId', dynamicwebDiscountId); Add_Field(XMLNewChild, prefix + 'ProductName', dynamicwebDiscountName); END; IF salesheader."Prices Including VAT" THEN BEGIN TempWithWAT := salesLine."Line Discount Amount"; Order_OrderSalesDiscount := Order_OrderSalesDiscount + salesLine."Line Discount Amount"; Add_Field(XMLNewChild,prefix+'PriceWith'+vatPrefix,FORMAT(salesLine."Line Discount Amount")); Add_Field(XMLNewChild,prefix+'UnitPriceWith'+vatPrefix,FORMAT(salesLine."Line Discount Amount")); TempWithoutWAT := ROUND(salesLine."Line Discount Amount"/ (1 + (salesLine."VAT %" / 100)), 0.01, '='); Add_Field(XMLNewChild,prefix+'PriceWithout'+vatPrefix,FORMAT(TempWithoutWAT)); Add_Field(XMLNewChild,prefix+'UnitPriceWithout'+vatPrefix,FORMAT(TempWithoutWAT)); END ELSE BEGIN TempWithoutWAT := salesLine."Line Discount Amount"; Order_OrderSalesDiscount := Order_OrderSalesDiscount + salesLine."Line Discount Amount"; Add_Field(XMLNewChild,prefix+'PriceWithout'+vatPrefix,FORMAT(salesLine."Line Discount Amount")); Add_Field(XMLNewChild,prefix+'UnitPriceWithout'+vatPrefix,FORMAT(salesLine."Line Discount Amount")); TempWithWAT := ROUND(salesLine."Line Discount Amount" * (1 + (salesLine."VAT %" / 100)), 0.01, '='); Add_Field(XMLNewChild,prefix+'PriceWith'+vatPrefix,FORMAT(TempWithWAT)); Add_Field(XMLNewChild,prefix+'UnitPriceWith'+vatPrefix,FORMAT(TempWithWAT)); END; Order_OrderPriceWithoutVAT := Order_OrderPriceWithoutVAT - TempWithoutWAT; Order_OrderPriceWithVAT := Order_OrderPriceWithVAT - TempWithWAT ; Add_Field(XMLNewChild,prefix+'DiscountPercentage',FORMAT(salesLine."Line Discount %")); Add_Field(XMLNewChild,prefix+'Price'+vatPrefix,FORMAT(TempWithWAT-TempWithoutWAT)); Add_Field(XMLNewChild,prefix+'UnitPrice'+vatPrefix,FORMAT(TempWithWAT-TempWithoutWAT)); Order_OrderPriceVAT := Order_OrderPriceVAT - (TempWithWAT-TempWithoutWAT); Add_Field(XMLNewChild,prefix+'Price'+vatPrefix+'Percent',FORMAT(salesLine."VAT %")); Add_Field(XMLNewChild,prefix+'UnitPrice'+vatPrefix+'Percent',FORMAT(salesLine."VAT %")); END ELSE BEGIN Add_Field(XMLNewChild,prefix+idPrefix,FORMAT(salesLine."Line No.")); Add_Field(XMLNewChild,prefix+'Quantity',FORMAT(salesLine.Quantity)); Add_Field(XMLNewChild,prefix+'Type','0'); IF (salesheader."Prices Including VAT" = TRUE) THEN BEGIN TempWithWAT := ROUND(salesLine."Unit Price" * salesLine.Quantity, 0.01, '='); Add_Field(XMLNewChild,prefix+'PriceWith'+vatPrefix,FORMAT(TempWithWAT)); Order_OrderPriceWithVAT := Order_OrderPriceWithVAT + TempWithWAT; Add_Field(XMLNewChild,prefix+'UnitPriceWith'+vatPrefix,FORMAT(salesLine."Unit Price")); TempWithoutWAT := ROUND((TempWithWAT/ (1 + (salesLine."VAT %" / 100))), 0.01, '='); Add_Field(XMLNewChild,prefix+'PriceWithout'+vatPrefix,FORMAT(TempWithoutWAT)); Order_OrderPriceWithoutVAT := Order_OrderPriceWithoutVAT + TempWithoutWAT; Add_Field(XMLNewChild,prefix+'UnitPriceWithout'+vatPrefix,FORMAT(ROUND(salesLine."Unit Price" / (1 + (salesLine."VAT %" / 100)), 0.01, '='))); END ELSE BEGIN TempWithoutWAT := ROUND(salesLine."Unit Price" * salesLine.Quantity, 0.01, '='); Add_Field(XMLNewChild,prefix+'PriceWithout'+vatPrefix,FORMAT(TempWithoutWAT)); Order_OrderPriceWithoutVAT := Order_OrderPriceWithoutVAT + TempWithoutWAT; Add_Field(XMLNewChild,prefix+'UnitPriceWithout'+vatPrefix,FORMAT(salesLine."Unit Price")); TempWithWAT := ROUND((TempWithoutWAT * (1 + (salesLine."VAT %" / 100))), 0.01, '='); Add_Field(XMLNewChild,prefix+'PriceWith'+vatPrefix,FORMAT(TempWithWAT)); Order_OrderPriceWithVAT := Order_OrderPriceWithVAT + TempWithWAT ; Add_Field(XMLNewChild,prefix+'UnitPriceWith'+vatPrefix,FORMAT(ROUND(salesLine."Unit Price" * (1 + (salesLine."VAT %" / 100)), 0.01, '='))); END; Add_Field(XMLNewChild,prefix+'Price'+vatPrefix,FORMAT(TempWithWAT-TempWithoutWAT)); Order_OrderPriceVAT := Order_OrderPriceVAT + (TempWithWAT-TempWithoutWAT); Add_Field(XMLNewChild,prefix+'UnitPrice'+vatPrefix,FORMAT(ROUND((TempWithWAT-TempWithoutWAT)/salesLine.Quantity, 0.01, '='))); Add_Field(XMLNewChild,prefix+'Price'+vatPrefix+'Percent',FORMAT(salesLine."VAT %")); Add_Field(XMLNewChild,prefix+'UnitPrice'+vatPrefix+'Percent',FORMAT(salesLine."VAT %")); END; XMLNewChild := XMLNewChild.ParentNode; END; LOCAL PROCEDURE Add_SalesInvHeader@1000000037(salesInvheader@1000000000 : Record 112;VAR XMLCurrNode@1000000002 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";VAR Total@1000000005 : Decimal;VAR Discount@1000000004 : Decimal); VAR XMLNewChild@1000000001 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; BEGIN Add_Element(XMLCurrNode,'item','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'table','EcomOrders'); Add_Field(XMLNewChild,'ID',salesInvheader."No."); Add_Field(XMLNewChild,'CurrencyCode',salesInvheader."Currency Code"); Add_Field(XMLNewChild,'Date',FORMAT(salesInvheader."Order Date")); Add_Field(XMLNewChild,'PaymentMethodName',salesInvheader."Payment Method Code"); Add_Field(XMLNewChild,'ShippingMethodName',salesInvheader."Shipment Method Code"); Add_Field(XMLNewChild,'CustomerName',salesInvheader."Sell-to Customer Name"); Add_Field(XMLNewChild,'CustomerAddress',salesInvheader."Sell-to Address"); Add_Field(XMLNewChild,'CustomerAddress2',salesInvheader."Sell-to Address 2"); Add_Field(XMLNewChild,'CustomerCity',salesInvheader."Sell-to City"); Add_Field(XMLNewChild,'CustomerCountryCode',salesInvheader."Sell-to Country/Region Code"); Add_Field(XMLNewChild,'CustomerEmail',''); Add_Field(XMLNewChild,'CustomerFax',''); Add_Field(XMLNewChild,'CustomerPhone',''); Add_Field(XMLNewChild,'CustomerZip',salesInvheader."Ship-to Post Code"); Add_Field(XMLNewChild,'DeliveryName',salesInvheader."Ship-to Name"); Add_Field(XMLNewChild,'DeliveryAddress',salesInvheader."Ship-to Address"); Add_Field(XMLNewChild,'DeliveryAddress2',salesInvheader."Ship-to Address 2"); Add_Field(XMLNewChild,'DeliveryCity',salesInvheader."Ship-to City"); Add_Field(XMLNewChild,'DeliveryCountryCode',salesInvheader."Ship-to Country/Region Code"); Add_Field(XMLNewChild,'DeliveryEmail',''); Add_Field(XMLNewChild,'DeliveryFax',''); Add_Field(XMLNewChild,'DeliveryPhone',''); Add_Field(XMLNewChild,'DeliveryZip',salesInvheader."Ship-to Post Code"); Add_Field(XMLNewChild,'PriceWithVAT',FORMAT(Order_OrderPriceWithVAT)); Add_Field(XMLNewChild,'PriceWithoutVAT',FORMAT(Order_OrderPriceWithoutVAT)); Add_Field(XMLNewChild,'PriceVAT',FORMAT(Order_OrderPriceVAT)); Add_Field(XMLNewChild,'SalesDiscount',FORMAT(Order_OrderSalesDiscount)); Add_Field(XMLNewChild,'ShippingFee',''); END; LOCAL PROCEDURE Add_SalesInvLine@1000000025(salesinvheader@1000000000 : Record 112;salesinvLine@1000000003 : Record 113;VAR XMLNewChild@1000000002 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";Parent@1000000001 : Code[20]); VAR price@1000000004 : Decimal; VATPostingSetup@1000000005 : Record 325; TempWithWAT@1000000006 : Decimal; TempWithoutWAT@1000000007 : Decimal; BEGIN IF salesinvheader."Currency Code" = '' THEN Currency.InitRoundingPrecision ELSE Currency.GET(salesinvheader."Currency Code"); Add_Element(XMLNewChild,'item','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'table','EcomOrderLines'); Add_Field(XMLNewChild,'ProductNumber',salesinvLine."No."); Add_Field(XMLNewChild,'ProductVariantID',salesinvLine."Variant Code"); IF (Parent <> '') THEN BEGIN Add_Field(XMLNewChild,'ParentLineID',FORMAT(salesinvLine."Line No.")); Add_Field(XMLNewChild,'Type','3'); Add_Field(XMLNewChild,'Quantity','1'); IF salesinvheader."Prices Including VAT" THEN BEGIN TempWithWAT := salesinvLine."Line Discount Amount"; Order_OrderSalesDiscount := Order_OrderSalesDiscount + salesinvLine."Line Discount Amount"; Add_Field(XMLNewChild,'PriceWithVAT',FORMAT(salesinvLine."Line Discount Amount")); TempWithoutWAT := salesinvLine."Line Discount Amount"/ (1 + (salesinvLine."VAT %" / 100)); Add_Field(XMLNewChild,'PriceWithoutVAT',FORMAT(TempWithoutWAT)); END ELSE BEGIN TempWithoutWAT := salesinvLine."Line Discount Amount"; Order_OrderSalesDiscount := Order_OrderSalesDiscount + salesinvLine."Line Discount Amount"; Add_Field(XMLNewChild,'PriceWithoutVAT',FORMAT(salesinvLine."Line Discount Amount")); TempWithWAT := salesinvLine."Line Discount Amount" * (1 + (salesinvLine."VAT %" / 100)); Add_Field(XMLNewChild,'PriceWithVAT',FORMAT(TempWithWAT)); END; Order_OrderPriceWithoutVAT := Order_OrderPriceWithoutVAT - TempWithoutWAT; Order_OrderPriceWithVAT := Order_OrderPriceWithVAT - TempWithWAT ; Add_Field(XMLNewChild,'DiscountPercentage',FORMAT(salesinvLine."Line Discount %")); Add_Field(XMLNewChild,'PriceVAT',FORMAT(TempWithWAT-TempWithoutWAT)); Order_OrderPriceVAT := Order_OrderPriceVAT - (TempWithWAT-TempWithoutWAT); Add_Field(XMLNewChild,'PriceVATPercent',FORMAT(salesinvLine."VAT %")); Add_Field(XMLNewChild,'UnitPriceVATPercent',FORMAT(salesinvLine."VAT %")); END ELSE BEGIN Add_Field(XMLNewChild,'ID',FORMAT(salesinvLine."Line No.")); Add_Field(XMLNewChild,'Quantity',FORMAT(salesinvLine.Quantity)); Add_Field(XMLNewChild,'Type','0'); IF (salesinvheader."Prices Including VAT" = TRUE) THEN BEGIN TempWithWAT := salesinvLine."Unit Price" * salesinvLine.Quantity; Add_Field(XMLNewChild,'PriceWithVAT',FORMAT(TempWithWAT)); Order_OrderPriceWithVAT := Order_OrderPriceWithVAT + TempWithWAT; Add_Field(XMLNewChild,'UnitPriceWithVAT',FORMAT(salesinvLine."Unit Price")); TempWithoutWAT := ((salesinvLine."Unit Price" * salesinvLine.Quantity)/ (1 + (salesinvLine."VAT %" / 100))); Add_Field(XMLNewChild,'PriceWithoutVAT',FORMAT(TempWithoutWAT)); Order_OrderPriceWithoutVAT := Order_OrderPriceWithoutVAT + TempWithoutWAT; Add_Field(XMLNewChild,'UnitPriceWithoutVAT',FORMAT(salesinvLine."Unit Price" / (1 + (salesinvLine."VAT %" / 100)))); END ELSE BEGIN TempWithoutWAT := salesinvLine."Unit Price" * salesinvLine.Quantity; Add_Field(XMLNewChild,'PriceWithoutVAT',FORMAT(TempWithoutWAT)); Order_OrderPriceWithoutVAT := Order_OrderPriceWithoutVAT + TempWithoutWAT; Add_Field(XMLNewChild,'UnitPriceWithoutVAT',FORMAT(salesinvLine."Unit Price")); TempWithWAT := ((salesinvLine."Unit Price" * salesinvLine.Quantity) * (1 + (salesinvLine."VAT %" / 100))); Add_Field(XMLNewChild,'PriceWithVAT',FORMAT(TempWithWAT)); Order_OrderPriceWithVAT := Order_OrderPriceWithVAT + TempWithWAT ; Add_Field(XMLNewChild,'UnitPriceWithVAT',FORMAT(salesinvLine."Unit Price" * (1 + (salesinvLine."VAT %" / 100)))); END; Add_Field(XMLNewChild,'PriceVAT',FORMAT(TempWithWAT-TempWithoutWAT)); Order_OrderPriceVAT := Order_OrderPriceVAT + (TempWithWAT-TempWithoutWAT); Add_Field(XMLNewChild,'UnitPriceVAT',FORMAT((TempWithWAT-TempWithoutWAT)/salesinvLine.Quantity)); Add_Field(XMLNewChild,'PriceVATPercent',FORMAT(salesinvLine."VAT %")); Add_Field(XMLNewChild,'UnitPriceVATPercent',FORMAT(salesinvLine."VAT %")); END; XMLNewChild := XMLNewChild.ParentNode; END; LOCAL PROCEDURE Add_SalesCrMemoHeader@1000000020(salescrmemoheader@1000000000 : Record 114;VAR XMLCurrNode@1000000002 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";VAR Total@1000000005 : Decimal;VAR Discount@1000000004 : Decimal); VAR XMLNewChild@1000000001 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; BEGIN Add_Element(XMLCurrNode,'item','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'table','EcomOrders'); Add_Field(XMLNewChild,'ID',salescrmemoheader."No."); Add_Field(XMLNewChild,'CurrencyCode',salescrmemoheader."Currency Code"); //Add_Field(XMLNewChild,'OrderDate',FORMAT(salescrmemoheader."Order Date")); Add_Field(XMLNewChild,'PaymentMethodName',salescrmemoheader."Payment Method Code"); Add_Field(XMLNewChild,'ShippingMethodName',salescrmemoheader."Shipment Method Code"); Add_Field(XMLNewChild,'CustomerName',salescrmemoheader."Sell-to Customer Name"); Add_Field(XMLNewChild,'CustomerAddress',salescrmemoheader."Sell-to Address"); Add_Field(XMLNewChild,'CustomerAddress2',salescrmemoheader."Sell-to Address 2"); Add_Field(XMLNewChild,'CustomerCity',salescrmemoheader."Sell-to City"); Add_Field(XMLNewChild,'CustomerCountryCode',salescrmemoheader."Sell-to Country/Region Code"); Add_Field(XMLNewChild,'CustomerEmail',''); Add_Field(XMLNewChild,'CustomerFax',''); Add_Field(XMLNewChild,'CustomerPhone',''); Add_Field(XMLNewChild,'CustomerZip',salescrmemoheader."Ship-to Post Code"); Add_Field(XMLNewChild,'DeliveryName',salescrmemoheader."Ship-to Name"); Add_Field(XMLNewChild,'DeliveryAddress',salescrmemoheader."Ship-to Address"); Add_Field(XMLNewChild,'DeliveryAddress2',salescrmemoheader."Ship-to Address 2"); Add_Field(XMLNewChild,'DeliveryCity',salescrmemoheader."Ship-to City"); Add_Field(XMLNewChild,'DeliveryCountryCode',salescrmemoheader."Ship-to Country/Region Code"); Add_Field(XMLNewChild,'DeliveryEmail',''); Add_Field(XMLNewChild,'DeliveryFax',''); Add_Field(XMLNewChild,'DeliveryPhone',''); Add_Field(XMLNewChild,'DeliveryZip',salescrmemoheader."Ship-to Post Code"); Add_Field(XMLNewChild,'PriceWithVAT',FORMAT(Order_OrderPriceWithVAT)); Add_Field(XMLNewChild,'PriceWithoutVAT',FORMAT(Order_OrderPriceWithoutVAT)); Add_Field(XMLNewChild,'PriceVAT',FORMAT(Order_OrderPriceVAT)); Add_Field(XMLNewChild,'SalesDiscount',FORMAT(Order_OrderSalesDiscount)); Add_Field(XMLNewChild,'ShippingFee',''); END; LOCAL PROCEDURE Add_SalesCrMemoLine@1000000034(salesCrMemoheader@1000000000 : Record 114;salesCrMemoLine@1000000003 : Record 115;VAR XMLNewChild@1000000002 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";Parent@1000000001 : Code[20]); VAR price@1000000004 : Decimal; VATPostingSetup@1000000005 : Record 325; TempWithWAT@1000000006 : Decimal; TempWithoutWAT@1000000007 : Decimal; BEGIN IF salesCrMemoheader."Currency Code" = '' THEN Currency.InitRoundingPrecision ELSE Currency.GET(salesCrMemoheader."Currency Code"); Add_Element(XMLNewChild,'item','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'table','EcomOrderLines'); Add_Field(XMLNewChild,'ProductNumber',salesCrMemoLine."No."); Add_Field(XMLNewChild,'ProductVariantID',salesCrMemoLine."Variant Code"); IF (Parent <> '') THEN BEGIN Add_Field(XMLNewChild,'ParentLineID',FORMAT(salesCrMemoLine."Line No.")); Add_Field(XMLNewChild,'Type','3'); Add_Field(XMLNewChild,'Quantity','1'); IF salesCrMemoheader."Prices Including VAT" THEN BEGIN TempWithWAT := salesCrMemoLine."Line Discount Amount"; Order_OrderSalesDiscount := Order_OrderSalesDiscount + salesCrMemoLine."Line Discount Amount"; Add_Field(XMLNewChild,'PriceWithVAT',FORMAT(salesCrMemoLine."Line Discount Amount")); TempWithoutWAT := salesCrMemoLine."Line Discount Amount"/ (1 + (salesCrMemoLine."VAT %" / 100)); Add_Field(XMLNewChild,'PriceWithoutVAT',FORMAT(TempWithoutWAT)); END ELSE BEGIN TempWithoutWAT := salesCrMemoLine."Line Discount Amount"; Order_OrderSalesDiscount := Order_OrderSalesDiscount + salesCrMemoLine."Line Discount Amount"; Add_Field(XMLNewChild,'PriceWithoutVAT',FORMAT(salesCrMemoLine."Line Discount Amount")); TempWithWAT := salesCrMemoLine."Line Discount Amount" * (1 + (salesCrMemoLine."VAT %" / 100)); Add_Field(XMLNewChild,'PriceWithVAT',FORMAT(TempWithWAT)); END; Order_OrderPriceWithoutVAT := Order_OrderPriceWithoutVAT - TempWithoutWAT; Order_OrderPriceWithVAT := Order_OrderPriceWithVAT - TempWithWAT ; Add_Field(XMLNewChild,'DiscountPercentage',FORMAT(salesCrMemoLine."Line Discount %")); Add_Field(XMLNewChild,'PriceVAT',FORMAT(TempWithWAT-TempWithoutWAT)); Order_OrderPriceVAT := Order_OrderPriceVAT - (TempWithWAT-TempWithoutWAT); Add_Field(XMLNewChild,'PriceVATPercent',FORMAT(salesCrMemoLine."VAT %")); Add_Field(XMLNewChild,'UnitPriceVATPercent',FORMAT(salesCrMemoLine."VAT %")); END ELSE BEGIN Add_Field(XMLNewChild,'ID',FORMAT(salesCrMemoLine."Line No.")); Add_Field(XMLNewChild,'Quantity',FORMAT(salesCrMemoLine.Quantity)); Add_Field(XMLNewChild,'Type','0'); IF (salesCrMemoheader."Prices Including VAT" = TRUE) THEN BEGIN TempWithWAT := salesCrMemoLine."Unit Price" * salesCrMemoLine.Quantity; Add_Field(XMLNewChild,'PriceWithVAT',FORMAT(TempWithWAT)); Order_OrderPriceWithVAT := Order_OrderPriceWithVAT + TempWithWAT; Add_Field(XMLNewChild,'UnitPriceWithVAT',FORMAT(salesCrMemoLine."Unit Price")); TempWithoutWAT := ((salesCrMemoLine."Unit Price" * salesCrMemoLine.Quantity)/ (1 + (salesCrMemoLine."VAT %" / 100))); Add_Field(XMLNewChild,'PriceWithoutVAT',FORMAT(TempWithoutWAT)); Order_OrderPriceWithoutVAT := Order_OrderPriceWithoutVAT + TempWithoutWAT; Add_Field(XMLNewChild,'UnitPriceWithoutVAT',FORMAT(salesCrMemoLine."Unit Price" / (1 + (salesCrMemoLine."VAT %" / 100)))); END ELSE BEGIN TempWithoutWAT := salesCrMemoLine."Unit Price" * salesCrMemoLine.Quantity; Add_Field(XMLNewChild,'PriceWithoutVAT',FORMAT(TempWithoutWAT)); Order_OrderPriceWithoutVAT := Order_OrderPriceWithoutVAT + TempWithoutWAT; Add_Field(XMLNewChild,'UnitPriceWithoutVAT',FORMAT(salesCrMemoLine."Unit Price")); TempWithWAT := ((salesCrMemoLine."Unit Price" * salesCrMemoLine.Quantity) * (1 + (salesCrMemoLine."VAT %" / 100))); Add_Field(XMLNewChild,'PriceWithVAT',FORMAT(TempWithWAT)); Order_OrderPriceWithVAT := Order_OrderPriceWithVAT + TempWithWAT ; Add_Field(XMLNewChild,'UnitPriceWithVAT',FORMAT(salesCrMemoLine."Unit Price" * (1 + (salesCrMemoLine."VAT %" / 100)))); END; Add_Field(XMLNewChild,'PriceVAT',FORMAT(TempWithWAT-TempWithoutWAT)); Order_OrderPriceVAT := Order_OrderPriceVAT + (TempWithWAT-TempWithoutWAT); Add_Field(XMLNewChild,'UnitPriceVAT',FORMAT((TempWithWAT-TempWithoutWAT)/salesCrMemoLine.Quantity)); Add_Field(XMLNewChild,'PriceVATPercent',FORMAT(salesCrMemoLine."VAT %")); Add_Field(XMLNewChild,'UnitPriceVATPercent',FORMAT(salesCrMemoLine."VAT %")); END; XMLNewChild := XMLNewChild.ParentNode; END; LOCAL PROCEDURE Add_Element@1060001(VAR XMLNode@1001 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlDocument";NodeName@1060002 : Text[250];NodeText@1060003 : Text[1024];NameSpace@1060004 : Text[1000];VAR CreatedXMLNode@1060005 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";prefix@1060006 : Text[30]); VAR NewChildNode@1060008 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; BEGIN IF NOT NormalCaseMode THEN IF prefix <> '' THEN NodeName := prefix + ':' + NodeName; NewChildNode := XMLNode.OwnerDocument.CreateNode('element', NodeName, NameSpace); IF ISNULL(NewChildNode ) THEN ERROR(Text000, NodeName); IF NodeText <> '' THEN NewChildNode.InnerText := NodeText; XMLNode.AppendChild(NewChildNode); CreatedXMLNode := NewChildNode; END; LOCAL PROCEDURE Add_CdataElement@1000000006(VAR XMLNode@1001 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlDocument";NodeText@1060003 : Text[1024]); VAR NewChildNode@1060008 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; BEGIN NewChildNode := XMLNode.OwnerDocument.CreateCDataSection(NodeText); XMLNode.AppendChild(NewChildNode); END; LOCAL PROCEDURE Add_Attribute@1060002(VAR XMLNode@1001 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";Name@1060003 : Text[260];NodeValue@1060004 : Text[260]); VAR XMLNewAttributeNode@1060006 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; BEGIN XMLNewAttributeNode := XMLNode.OwnerDocument.CreateAttribute(Name); IF ISNULL(XMLNewAttributeNode) THEN ERROR(Text001, Name); IF NodeValue <> '' THEN XMLNewAttributeNode.InnerText := NodeValue; XMLNode.Attributes.SetNamedItem(XMLNewAttributeNode); END; LOCAL PROCEDURE SetNormalCase@1060006(); BEGIN NormalCaseMode := TRUE; END; LOCAL PROCEDURE Add_Field@1000000005(VAR XMLNode@1000000002 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";Field@1000000003 : Text;Value@1000000000 : Text); VAR XmlNewChild@1000000001 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; BEGIN Add_Element(XMLNode,'column','','',XmlNewChild,''); Add_Attribute(XmlNewChild,'columnName',Field); Add_CdataElement(XmlNewChild,Value); XmlNewChild := XmlNewChild.ParentNode; END; LOCAL PROCEDURE ConvertXmlToBigText@1000000013(XMLdoc@1000000000 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlDocument";VAR bigtext@1000000001 : BigText); VAR xmlNode@1000000003 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; BEGIN CLEAR(bigtext); xmlNode := XMLdoc.DocumentElement; Add_Attribute(xmlNode,'version',GetVersion()); bigtext.ADDTEXT(XMLdoc.InnerXml); END; LOCAL PROCEDURE ConvertBigTestToXml@1000000017(VAR XMLdoc@1000000001 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlDocument";VAR bigtext@1000000000 : BigText); BEGIN IF ISNULL(XMLdoc) THEN XMLdoc := XMLdoc.XmlDocument; XMLdoc.LoadXml(FORMAT(bigtext)); END; LOCAL PROCEDURE Get_TextFromNode@1000000008(XMLnode@1000000002 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";xpath@1000000000 : Text[1024]) : Text[1024]; VAR SelectedXMLnode@1000000001 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; BEGIN SelectedXMLnode := XMLnode.SelectSingleNode(xpath); IF NOT ISNULL(SelectedXMLnode) THEN EXIT( SelectedXMLnode.InnerText) ELSE EXIT(''); END; LOCAL PROCEDURE Get_DecimalFromNode@1000000022(XMLnode@1000000002 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";xpath@1000000000 : Text[1024]) : Decimal; VAR SelectedXMLnode@1000000001 : Automation "{F5078F18-C551-11D3-89B9-0000F81FE221} 3.0:{2933BF80-7B36-11D2-B20E-00C04F983E60}:'Microsoft XML, v3.0'.IXMLDOMNode"; tempdecimal@1000000003 : Decimal; BEGIN IF NOT EVALUATE(tempdecimal,Get_TextFromNode(XMLnode,xpath)) THEN EXIT(0); EXIT(tempdecimal); END; LOCAL PROCEDURE CalcBestUnitPrice@1(VAR SalesPrice@1000 : Record 7002;item@1000000000 : Record 27); VAR BestSalesPrice@1002 : Record 7002; BEGIN WITH SalesPrice DO BEGIN FoundSalesPrice := FINDSET; IF FoundSalesPrice THEN REPEAT IF IsInMinQty("Unit of Measure Code","Minimum Quantity") THEN BEGIN ConvertPriceToVAT( "Price Includes VAT",item."VAT Prod. Posting Group", "VAT Bus. Posting Gr. (Price)","Unit Price"); ConvertPriceToUoM("Unit of Measure Code","Unit Price"); ConvertPriceLCYToFCY("Currency Code","Unit Price"); CASE TRUE OF ((BestSalesPrice."Currency Code" = '') AND ("Currency Code" <> '')) OR ((BestSalesPrice."Variant Code" = '') AND ("Variant Code" <> '')): BestSalesPrice := SalesPrice; ((BestSalesPrice."Currency Code" = '') OR ("Currency Code" <> '')) AND ((BestSalesPrice."Variant Code" = '') OR ("Variant Code" <> '')): IF (BestSalesPrice."Unit Price" = 0) OR (CalcLineAmount(BestSalesPrice) > CalcLineAmount(SalesPrice)) THEN BestSalesPrice := SalesPrice; END; END; UNTIL NEXT = 0; END; // No price found in agreement IF BestSalesPrice."Unit Price" = 0 THEN BEGIN ConvertPriceToVAT( item."Price Includes VAT",item."VAT Prod. Posting Group", item."VAT Bus. Posting Gr. (Price)",item."Unit Price"); ConvertPriceToUoM('',item."Unit Price"); ConvertPriceLCYToFCY('',item."Unit Price"); CLEAR(BestSalesPrice); BestSalesPrice."Unit Price" := item."Unit Price"; BestSalesPrice."Allow Line Disc." := AllowLineDisc; BestSalesPrice."Allow Invoice Disc." := AllowInvDisc; END; SalesPrice := BestSalesPrice; END; LOCAL PROCEDURE CalcBestLineDisc@11(VAR SalesLineDisc@1000 : Record 7004); VAR BestSalesLineDisc@1002 : Record 7004; BEGIN WITH SalesLineDisc DO BEGIN IF FINDSET THEN REPEAT IF IsInMinQty("Unit of Measure Code","Minimum Quantity") THEN CASE TRUE OF ((BestSalesLineDisc."Currency Code" = '') AND ("Currency Code" <> '')) OR ((BestSalesLineDisc."Variant Code" = '') AND ("Variant Code" <> '')): BestSalesLineDisc := SalesLineDisc; ((BestSalesLineDisc."Currency Code" = '') OR ("Currency Code" <> '')) AND ((BestSalesLineDisc."Variant Code" = '') OR ("Variant Code" <> '')): IF BestSalesLineDisc."Line Discount %" < "Line Discount %" THEN BestSalesLineDisc := SalesLineDisc; END; UNTIL NEXT = 0; END; SalesLineDisc := BestSalesLineDisc; END; LOCAL PROCEDURE IsInMinQty@7(UnitofMeasureCode@1003 : Code[10];MinQty@1000 : Decimal) : Boolean; BEGIN IF UnitofMeasureCode = '' THEN EXIT(MinQty <= QtyPerUOM * Qty); EXIT(MinQty <= Qty); END; LOCAL PROCEDURE ConvertPriceToVAT@4(FromPricesInclVAT@1006 : Boolean;FromVATProdPostingGr@1000 : Code[10];FromVATBusPostingGr@1002 : Code[10];VAR UnitPrice@1004 : Decimal); VAR VATPostingSetup@1007 : Record 325; BEGIN IF FromPricesInclVAT THEN BEGIN VATPostingSetup.GET(FromVATBusPostingGr,FromVATProdPostingGr); CASE VATPostingSetup."VAT Calculation Type" OF VATPostingSetup."VAT Calculation Type"::"Reverse Charge VAT": VATPostingSetup."VAT %" := 0; VATPostingSetup."VAT Calculation Type"::"Sales Tax": ERROR( Text010, VATPostingSetup.FIELDCAPTION("VAT Calculation Type"), VATPostingSetup."VAT Calculation Type"); END; CASE VATCalcType OF VATCalcType::"Normal VAT", VATCalcType::"Full VAT", VATCalcType::"Sales Tax": BEGIN IF PricesInclVAT THEN BEGIN IF VATBusPostingGr <> FromVATBusPostingGr THEN UnitPrice := UnitPrice * (100 + VATPerCent) / (100 + VATPostingSetup."VAT %"); END ELSE UnitPrice := UnitPrice / (1 + VATPostingSetup."VAT %" / 100); END; VATCalcType::"Reverse Charge VAT": UnitPrice := UnitPrice / (1 + VATPostingSetup."VAT %" / 100); END; END ELSE IF PricesInclVAT THEN UnitPrice := UnitPrice * (1 + VATPerCent / 100); END; LOCAL PROCEDURE ConvertPriceToUoM@5(UnitOfMeasureCode@1002 : Code[10];VAR UnitPrice@1001 : Decimal); BEGIN IF UnitOfMeasureCode = '' THEN UnitPrice := UnitPrice * QtyPerUOM; END; LOCAL PROCEDURE ConvertPriceLCYToFCY@6(CurrencyCode@1005 : Code[10];VAR UnitPrice@1001 : Decimal); VAR CurrExchRate@1000 : Record 330; BEGIN IF PricesInCurrency THEN BEGIN IF CurrencyCode = '' THEN UnitPrice := CurrExchRate.ExchangeAmtLCYToFCY(ExchRateDate,Currency.Code,UnitPrice,CurrencyFactor); UnitPrice := ROUND(UnitPrice,Currency."Unit-Amount Rounding Precision"); END ELSE UnitPrice := ROUND(UnitPrice,GLSetup."Unit-Amount Rounding Precision"); END; LOCAL PROCEDURE CalcLineAmount@15(SalesPrice@1000 : Record 7002) : Decimal; BEGIN WITH SalesPrice DO BEGIN IF "Allow Line Disc." THEN EXIT("Unit Price" * (1 - LineDiscPerCent / 100)); EXIT("Unit Price"); END; END; LOCAL PROCEDURE PrintReportasPDF@1000000018(ReportUsage@1000 : 'S.Quote,S.Order,S.Invoice,S.Cr.Memo,S.Test,P.Quote,P.Order,P.Invoice,P.Cr.Memo,P.Receipt,P.Ret.Shpt.,P.Test,B.Stmt,B.Recon.Test,B.Check,Reminder,Fin.Charge,Rem.Test,F.C.Test,Prod. Order,S.Blanket,P.Blanket,M1,M2,M3,M4,Inv1,Inv2,Inv3,SM.Quote,SM.Order,SM.Invoice,SM.Credit Memo,SM.Contract Quote,SM.Contract,SM.Test,S.Return,P.Return,S.Shipment,S.Ret.Rcpt.,S.Work Order,Invt. Period Test,SM.Shipment,S.Test Prepmt.,P.Test Prepmt.,S.Arch. Quote,S.Arch. Order,P.Arch. Quote,P.Arch. Order,S. Arch. Return Order,P. Arch. Return Order,Asm. Order,P.Assembly Order,S.Order Pick Instruction';DocumentNo@1000000000 : Code[20];ExternalUserId@1000000011 : Text) : Text; VAR SalesInvHeader@1000000001 : Record 112; SalesCrMemoHeader@1000000002 : Record 114; SalesHeader@1000000003 : Record 36; ReportSelection@1000000004 : Record 77; tempfile@1000000006 : File; filename@1000000005 : Text[1024]; Istream@1000000010 : InStream; memorystream@1000000009 : DotNet "'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.IO.MemoryStream"; bytes@1000000008 : DotNet "'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Array"; convert@1000000007 : DotNet "'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Convert"; customer@1000000012 : Record 18; BEGIN GetCustomer(ExternalUserId, customer); tempfile.CREATETEMPFILE; filename := tempfile.NAME; tempfile.CLOSE(); ReportSelection.RESET; ReportSelection.SETRANGE(Usage,ReportUsage); ReportSelection.FINDSET; REPEAT ReportSelection.TESTFIELD("Report ID"); CASE ReportUsage OF ReportSelection.Usage::"S.Invoice": BEGIN CLEAR(SalesInvHeader); SalesInvHeader.SETRANGE("No.",DocumentNo); SalesInvHeader.SETRANGE("Sell-to Customer No.", customer."No."); SalesInvHeader.FINDSET(FALSE,FALSE); REPORT.SAVEASPDF(ReportSelection."Report ID",filename,SalesInvHeader); END; ReportSelection.Usage::"S.Cr.Memo": BEGIN CLEAR(SalesCrMemoHeader); SalesCrMemoHeader.SETRANGE("No.",DocumentNo); SalesCrMemoHeader.SETRANGE("Sell-to Customer No.", customer."No."); SalesCrMemoHeader.FINDSET(FALSE,FALSE); REPORT.SAVEASPDF(ReportSelection."Report ID",filename,SalesCrMemoHeader); END; ReportSelection.Usage::"S.Order": BEGIN CLEAR(SalesHeader); SalesHeader.SETRANGE(SalesHeader."Document Type",SalesHeader."Document Type"::Order); SalesHeader.SETRANGE("No.",DocumentNo); SalesHeader.SETRANGE("Sell-to Customer No.", customer."No."); REPORT.SAVEASPDF(ReportSelection."Report ID",filename,SalesHeader); END; END; UNTIL ReportSelection.NEXT = 0; IF EXISTS(filename) THEN BEGIN tempfile.OPEN(filename); tempfile.CREATEINSTREAM(Istream); memorystream := memorystream.MemoryStream(); COPYSTREAM(memorystream,Istream); bytes := memorystream.GetBuffer(); tempfile.CLOSE; FILE.ERASE(filename); EXIT(convert.ToBase64String(bytes)); END; EXIT('fejl') END; LOCAL PROCEDURE GetList@1000000023(ReportUsage@1000000006 : Integer;CustomerID@1000000010 : Code[20];VAR Request@1000000001 : BigText;XMLdocIn@1000000000 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlDocument"); VAR SalesInvHeader@1000000009 : Record 112; SalesCrMemoHeader@1000000008 : Record 114; SalesHeader@1000000007 : Record 36; Header@1000000005 : Text[1000]; XMLCurrNode@1000000004 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; XMLNewChild@1000000003 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; XMLdocOut@1000000002 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlDocument"; i@1000000011 : Integer; pageSize@1000000012 : Integer; firstItem@1000000013 : Integer; customer@1000000014 : Record 18; BEGIN XMLdocOut := XMLdocOut.XmlDocument; Header := ''; XMLdocOut.LoadXml(Header); XMLCurrNode := XMLdocOut.DocumentElement; IF Get_TextFromNode(XMLdocIn.DocumentElement,'/GetList/@requestAmount') <> '' THEN BEGIN pageSize := TextToInteger(Get_TextFromNode(XMLdocIn.DocumentElement,'/GetList/@requestAmount')); firstItem := TextToInteger(Get_TextFromNode(XMLdocIn.DocumentElement,'/GetList/@firstItem')); END; GetCustomer(CustomerID, customer); CASE ReportUsage OF 1: BEGIN Add_Attribute(XMLCurrNode,'type','OpenOrder'); SalesHeader.SETRANGE("Document Type",SalesHeader."Document Type"::Order); SalesHeader.SETRANGE("Sell-to Customer No.",customer."No."); IF SalesHeader.FINDSET(FALSE,FALSE) THEN BEGIN IF pageSize > 0 THEN BEGIN Add_Attribute(XMLCurrNode, 'totalCount', FORMAT(SalesHeader.COUNT)); REPEAT i := i + 1; IF i >= firstItem THEN BEGIN SalesHeader.CALCFIELDS(SalesHeader.Amount,SalesHeader."Amount Including VAT"); FillOrderItem(XMLCurrNode, SalesHeader."No.", SalesHeader."Order Date", SalesHeader."Shipment Date", SalesHeader."Due Date", FORMAT(SalesHeader.Amount,0,''), FORMAT(SalesHeader."Amount Including VAT",0,''), SalesHeader."Posting Date", SalesHeader."Document Date"); END; UNTIL (SalesHeader.NEXT = 0) OR (i >= (firstItem + pageSize - 1)); END ELSE BEGIN REPEAT SalesHeader.CALCFIELDS(SalesHeader.Amount,SalesHeader."Amount Including VAT"); FillOrderItem(XMLCurrNode, SalesHeader."No.", SalesHeader."Order Date", SalesHeader."Shipment Date", SalesHeader."Due Date", FORMAT(SalesHeader.Amount,0,''), FORMAT(SalesHeader."Amount Including VAT",0,''), SalesHeader."Posting Date", SalesHeader."Document Date"); UNTIL SalesHeader.NEXT=0; END; END; END; 2: BEGIN Add_Attribute(XMLCurrNode,'type','Invoice'); SalesInvHeader.SETRANGE("Sell-to Customer No.", customer."No."); IF SalesInvHeader.FINDSET(FALSE,FALSE) THEN BEGIN IF pageSize > 0 THEN BEGIN Add_Attribute(XMLCurrNode, 'totalCount', FORMAT(SalesInvHeader.COUNT)); REPEAT i := i + 1; IF i >= firstItem THEN BEGIN SalesInvHeader.CALCFIELDS(SalesInvHeader.Amount,SalesInvHeader."Amount Including VAT"); FillOrderItem(XMLCurrNode, SalesInvHeader."No.", SalesInvHeader."Order Date", SalesInvHeader."Shipment Date", SalesInvHeader."Due Date", FORMAT(SalesInvHeader.Amount,0,''), FORMAT(SalesInvHeader."Amount Including VAT",0,''), SalesInvHeader."Posting Date", SalesInvHeader."Document Date"); END; UNTIL (SalesInvHeader.NEXT = 0) OR (i >= (firstItem + pageSize - 1)); END ELSE BEGIN REPEAT SalesInvHeader.CALCFIELDS(SalesInvHeader.Amount,SalesInvHeader."Amount Including VAT"); FillOrderItem(XMLCurrNode, SalesInvHeader."No.", SalesInvHeader."Order Date", SalesInvHeader."Shipment Date", SalesInvHeader."Due Date", FORMAT(SalesInvHeader.Amount,0,''), FORMAT(SalesInvHeader."Amount Including VAT",0,''), SalesInvHeader."Posting Date", SalesInvHeader."Document Date"); UNTIL SalesInvHeader.NEXT=0; END; END; END; 3: BEGIN Add_Attribute(XMLCurrNode,'type','Credit'); SalesCrMemoHeader.SETRANGE("Sell-to Customer No.", customer."No."); IF SalesCrMemoHeader.FINDSET(FALSE,FALSE) THEN BEGIN IF pageSize > 0 THEN BEGIN Add_Attribute(XMLCurrNode, 'totalCount', FORMAT(SalesCrMemoHeader.COUNT)); REPEAT i := i + 1; IF i >= firstItem THEN BEGIN SalesCrMemoHeader.CALCFIELDS(SalesCrMemoHeader.Amount,SalesCrMemoHeader."Amount Including VAT"); FillOrderItem(XMLCurrNode, SalesCrMemoHeader."No.", SalesCrMemoHeader."Document Date", SalesCrMemoHeader."Shipment Date", SalesCrMemoHeader."Due Date", FORMAT(SalesCrMemoHeader.Amount,0,''), FORMAT(SalesCrMemoHeader."Amount Including VAT",0,''), SalesCrMemoHeader."Posting Date", SalesCrMemoHeader."Document Date"); END; UNTIL (SalesCrMemoHeader.NEXT = 0) OR (i >= (firstItem + pageSize - 1)); END ELSE BEGIN REPEAT SalesCrMemoHeader.CALCFIELDS(SalesCrMemoHeader.Amount,SalesCrMemoHeader."Amount Including VAT"); FillOrderItem(XMLCurrNode, SalesCrMemoHeader."No.", SalesCrMemoHeader."Document Date", SalesCrMemoHeader."Shipment Date", SalesCrMemoHeader."Due Date", FORMAT(SalesCrMemoHeader.Amount,0,''), FORMAT(SalesCrMemoHeader."Amount Including VAT",0,''), SalesCrMemoHeader."Posting Date", SalesCrMemoHeader."Document Date"); UNTIL SalesCrMemoHeader.NEXT=0; END; END; END; END; ConvertXmlToBigText(XMLdocOut,Request); END; LOCAL PROCEDURE FillOrderItem@1000000046(XMLCurrNode@1000000001 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";No@1000000002 : Text;OrderDate@1000000003 : Date;ShippingDate@1000000004 : Date;DueDate@1000000005 : Date;TotalAmountWithoutVat@1000000006 : Text;TotalAmountWithVat@1000000007 : Text;PostingDate@1000000008 : Date;DocumentDate@1000000009 : Date); VAR XMLNewChild@1000000000 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; BEGIN Add_Element(XMLCurrNode,'item','','',XMLNewChild,''); Add_Field(XMLNewChild,'id',No); Add_Field(XMLNewChild,'orderDate',FORMAT(OrderDate,0,'//')); Add_Field(XMLNewChild,'shipDate',FORMAT(ShippingDate,0,'//')); Add_Field(XMLNewChild,'dueDate',FORMAT(DueDate,0,'//')); Add_Field(XMLNewChild,'postingDate',FORMAT(PostingDate,0,'//')); Add_Field(XMLNewChild,'documentDate',FORMAT(DocumentDate,0,'//')); Add_Field(XMLNewChild,'totalAmount',TotalAmountWithoutVat); Add_Field(XMLNewChild,'totalAmountIncVat',TotalAmountWithVat); END; LOCAL PROCEDURE GetItem@1000000015(ReportUsage@1000000003 : Integer;VAR Request@1000000001 : BigText;XMLdocIn@1000000000 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlDocument"); VAR DocumentNo@1000000002 : Code[20]; SalesInvHeader@1000000011 : Record 112; SalesCrMemoHeader@1000000010 : Record 114; SalesHeader@1000000009 : Record 36; Header@1000000008 : Text[1000]; XMLCurrNode@1000000007 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; XMLNewChild@1000000006 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; XMLdocOut@1000000005 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlDocument"; salesline@1000000012 : Record 37; SalesInvLine@1000000013 : Record 113; SalesCrMemoLine@1000000014 : Record 115; Discount@1000000016 : Decimal; Total@1000000015 : Decimal; BEGIN DocumentNo := Get_TextFromNode(XMLdocIn,'/GetItem/@documentNO'); XMLdocOut := XMLdocOut.XmlDocument; Header := ''; XMLdocOut.LoadXml(Header); XMLCurrNode := XMLdocOut.DocumentElement; CASE ReportUsage OF 1: BEGIN Total := 0; Discount := 0; Add_Attribute(XMLCurrNode,'type','OpenOrder'); Add_Element(XMLCurrNode,'table','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'tableName','EcomOrders'); CLEAR(SalesHeader); SalesHeader.SETRANGE("Document Type",SalesHeader."Document Type"::Order); SalesHeader.SETRANGE("No.",DocumentNo); IF SalesHeader.FINDSET(FALSE,FALSE) THEN BEGIN Add_SalesHeaderXml(SalesHeader,XMLNewChild,FALSE,Total,Discount,TRUE,FALSE); CLEAR(salesline); salesline.SETRANGE("Document Type",SalesHeader."Document Type"); salesline.SETRANGE(salesline."Document No.",SalesHeader."No."); Add_Element(XMLCurrNode,'table','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'tableName','EcomOrderLines'); IF salesline.FINDSET(FALSE,FALSE) THEN REPEAT Add_SalesLine(SalesHeader,salesline, XMLNewChild,'',TRUE,FALSE,'',''); IF (salesline."Line Discount Amount" <> 0) THEN Add_SalesLine(SalesHeader,salesline,XMLNewChild,salesline."No.",TRUE,FALSE,'',''); UNTIL salesline.NEXT=0; END; END; 2: BEGIN Total := 0; Discount := 0; Add_Attribute(XMLCurrNode,'type','Invoice'); Add_Element(XMLCurrNode,'table','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'tableName','EcomOrders'); CLEAR(SalesInvHeader); SalesInvHeader.SETRANGE("No.",DocumentNo); IF SalesInvHeader.FINDSET(FALSE,FALSE) THEN BEGIN Add_SalesInvHeader(SalesInvHeader,XMLNewChild,Total,Discount); CLEAR(SalesInvLine); SalesInvLine.SETRANGE(SalesInvLine."Document No.",SalesInvHeader."No."); Add_Element(XMLCurrNode,'table','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'tableName','EcomOrderLines'); IF SalesInvLine.FINDSET(FALSE,FALSE) THEN REPEAT Add_SalesInvLine(SalesInvHeader,SalesInvLine, XMLNewChild,''); IF (SalesInvLine."Line Discount Amount" <> 0) THEN Add_SalesInvLine(SalesInvHeader,SalesInvLine,XMLNewChild,SalesInvLine."No."); UNTIL SalesInvLine.NEXT=0; END; END; 3: BEGIN Total := 0; Discount := 0; Add_Attribute(XMLCurrNode,'type','Credit'); Add_Element(XMLCurrNode,'table','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'tableName','EcomOrders'); CLEAR(SalesCrMemoHeader); SalesCrMemoHeader.SETRANGE("No.",DocumentNo); IF SalesCrMemoHeader.FINDSET(FALSE,FALSE) THEN BEGIN Add_SalesCrMemoHeader(SalesCrMemoHeader,XMLNewChild,Total,Discount); CLEAR(SalesCrMemoLine); SalesCrMemoLine.SETRANGE(SalesCrMemoLine."Document No.",SalesCrMemoHeader."No."); Add_Element(XMLCurrNode,'table','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'tableName','EcomOrderLines'); IF SalesCrMemoLine.FINDSET(FALSE,FALSE) THEN REPEAT Add_SalesCrMemoLine(SalesCrMemoHeader,SalesCrMemoLine, XMLNewChild,''); IF (SalesCrMemoLine."Line Discount Amount" <> 0) THEN Add_SalesCrMemoLine(SalesCrMemoHeader,SalesCrMemoLine,XMLNewChild,SalesCrMemoLine."No."); UNTIL SalesCrMemoLine.NEXT=0; END; END; END; ConvertXmlToBigText(XMLdocOut,Request); END; LOCAL PROCEDURE Add_AccessUserContact@3(XMLCurrNode@1002 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";GetAll@1001 : Boolean;FilterNodes@1000 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNodeList"); VAR Customer@1003 : Record 18; Contact@1004 : Record 5050; ContactBusiness@1005 : Record 5054; XMLNewChild@1006 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; Addresses@1007 : Record 222; BEGIN IF Contact.FINDSET(FALSE, FALSE) THEN BEGIN REPEAT ContactBusiness.SETRANGE("Contact No.", Contact."No."); IF (ContactBusiness.FIND('-')) THEN BEGIN REPEAT Customer.SETRANGE("No.", ContactBusiness."No."); IF (Customer.FIND('-')) THEN BEGIN REPEAT Add_Element(XMLNewChild,'item','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'table','AccessUser'); Add_Field(XMLNewChild,'AccessUserExternalID',FORMAT(Contact."No.")); Add_Field(XMLNewChild,'AccessUserCustomerNumber', Customer."No."); Add_Field(XMLNewChild, 'AccessUserCompany', Customer.Name); Add_Field(XMLNewChild,'AccessUserName',Contact.Name); Add_Field(XMLNewChild,'AccessUserEmail',Contact."E-Mail"); Add_Field(XMLNewChild,'AccessUserPhone',Contact."Phone No."); Add_Field(XMLNewChild,'AccessUserFax',Contact."Fax No."); Add_Field(XMLNewChild,'AccessUserAddress',Contact.Address); Add_Field(XMLNewChild,'AccessUserAddress2',Contact."Address 2"); Add_Field(XMLNewChild,'AccessUserZip',Contact."Post Code"); Add_Field(XMLNewChild,'AccessUserCity',Contact.City); Add_Field(XMLNewChild,'AccessUserCountry',Contact.County); Add_Field(XMLNewChild,'AccessUserCurrency',Contact."Currency Code"); Add_Field(XMLNewChild,'AccessUserType', '2'); IF (Customer.Blocked = Customer.Blocked::" ") THEN Add_Field(XMLNewChild,'AccessUserActive','true') ELSE Add_Field(XMLNewChild,'AccessUserActive','false'); XMLNewChild := XMLNewChild.ParentNode; UNTIL Customer.NEXT = 0; END; UNTIL ContactBusiness.NEXT = 0; END; UNTIL Contact.NEXT=0; END; END; LOCAL PROCEDURE Add_AccessUserAddress@8(XMLCurrNode@1002 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";GetAll@1001 : Boolean;FilterNodes@1000 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNodeList"); VAR XMLNewChild@1003 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; Addresses@1004 : Record 222; ContactAltAddress@1000000000 : Record 5051; Contact@1000000001 : Record 5050; ContactBusiness@1000000002 : Record 5054; Customer@1000000003 : Record 18; BEGIN Add_Element(XMLCurrNode,'table','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'tableName','AccessUserAddress'); //Add Contact address Contact.SETRANGE(Type, Contact.Type::Person); IF Contact.FINDSET(FALSE,FALSE) THEN BEGIN REPEAT //Find Customer/Company number ContactBusiness.SETRANGE("Contact No.", Contact."Company No."); IF ContactBusiness.FINDFIRST AND Customer.GET(ContactBusiness."No.") AND (Contact."Company Name" = Customer.Name)THEN BEGIN Add_Element(XMLNewChild,'item','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'table','AccessUserAddress'); Add_Field(XMLNewChild,'AccessUserAddressUserID',FORMAT(Contact."No.")); Add_Field(XMLNewChild,'AccessUserAddressType', '1'); Add_Field(XMLNewChild,'AccessUserAddressCallName','Contact Address'); Add_Field(XMLNewChild,'AccessUserAddressCompany',Contact."Company Name"); Add_Field(XMLNewChild,'AccessUserAddressName', 'Contact Address'); Add_Field(XMLNewChild,'AccessUserAddressAddress',Contact.Address); Add_Field(XMLNewChild,'AccessUserAddressAddress2',Contact."Address 2"); Add_Field(XMLNewChild,'AccessUserAddressZip',Contact."Post Code"); Add_Field(XMLNewChild,'AccessUserAddressCity',Contact.City); Add_Field(XMLNewChild,'AccessUserAddressCountry',Contact."Country/Region Code"); Add_Field(XMLNewChild,'AccessUserAddressCell',Contact."Mobile Phone No."); Add_Field(XMLNewChild,'AccessUserAddressFax',Contact."Fax No."); Add_Field(XMLNewChild,'AccessUserAddressEmail',Contact."E-Mail"); Add_Field(XMLNewChild,'AccessUserAddressCustomerNumber',ContactBusiness."No."); Add_Field(XMLNewChild,'AccessUserAddressUID',Contact."No." + '_ContactAddress'); Add_Field(XMLNewChild,'AccessUserAddressState',Contact."Country/Region Code"); Add_Field(XMLNewChild,'AccessUserAddressPhoneBusiness', Contact."Phone No."); Add_Field(XMLNewChild,'AccessUserAddressCountryCode',Contact."Country/Region Code"); Add_Field(XMLNewChild,'AccessUserAddressDefaultAddressCustomFields','False'); XMLNewChild := XMLNewChild.ParentNode; ContactAltAddress.SETRANGE("Contact No.", Contact."No."); IF (ContactAltAddress.FINDSET(FALSE, FALSE)) THEN BEGIN REPEAT Add_Element(XMLNewChild,'item','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'table','AccessUserAddress'); Add_Field(XMLNewChild,'AccessUserAddressUserID', ContactAltAddress."Contact No."); Add_Field(XMLNewChild,'AccessUserAddressType', '1'); Add_Field(XMLNewChild,'AccessUserAddressCallName',ContactAltAddress.Code); Add_Field(XMLNewChild,'AccessUserAddressCompany',Contact."Company Name"); Add_Field(XMLNewChild,'AccessUserAddressName',ContactAltAddress.Code); Add_Field(XMLNewChild,'AccessUserAddressAddress',ContactAltAddress.Address); Add_Field(XMLNewChild,'AccessUserAddressAddress2',ContactAltAddress."Address 2"); Add_Field(XMLNewChild,'AccessUserAddressZip',ContactAltAddress."Post Code"); Add_Field(XMLNewChild,'AccessUserAddressCity',ContactAltAddress.City); Add_Field(XMLNewChild,'AccessUserAddressCountry',ContactAltAddress."Country/Region Code"); Add_Field(XMLNewChild,'AccessUserAddressCell',ContactAltAddress."Mobile Phone No."); Add_Field(XMLNewChild,'AccessUserAddressFax',ContactAltAddress."Fax No."); Add_Field(XMLNewChild,'AccessUserAddressEmail',ContactAltAddress."E-Mail"); Add_Field(XMLNewChild,'AccessUserAddressCustomerNumber',ContactBusiness."No."); Add_Field(XMLNewChild,'AccessUserAddressUID',ContactAltAddress.Code + '_' + ContactAltAddress."Contact No."); Add_Field(XMLNewChild,'AccessUserAddressState',ContactAltAddress."Country/Region Code"); Add_Field(XMLNewChild,'AccessUserAddressPhoneBusiness', ContactAltAddress."Phone No."); Add_Field(XMLNewChild,'AccessUserAddressCountryCode',ContactAltAddress."Country/Region Code"); Add_Field(XMLNewChild,'AccessUserAddressDefaultAddressCustomFields','False'); XMLNewChild := XMLNewChild.ParentNode; UNTIL ContactAltAddress.NEXT = 0; END; END ELSE BEGIN //Skip Contacts that do not belong to Customers END; UNTIL Contact.NEXT=0; END; CLEAR(Contact); CLEAR(ContactBusiness); //Ship-to Addresses IF (Addresses.FINDSET(FALSE, FALSE)) THEN BEGIN REPEAT //Add ship-to address to Company contacts ContactBusiness.SETRANGE("No.", Addresses."Customer No."); IF (ContactBusiness.FIND('-')) THEN BEGIN REPEAT Contact.SETRANGE("Company No.", ContactBusiness."Contact No."); Contact.SETRANGE(Type, Contact.Type::Person); IF (Contact.FIND('-')) THEN BEGIN REPEAT IF Customer.GET(ContactBusiness."No.") AND (Contact."Company Name" = Customer.Name) THEN BEGIN Add_Element(XMLNewChild,'item','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'table','AccessUserAddress'); Add_Field(XMLNewChild,'AccessUserAddressUserID',FORMAT(Contact."No.")); Add_Field(XMLNewChild,'AccessUserAddressType', '1'); Add_Field(XMLNewChild,'AccessUserAddressCallName',Addresses.Code); Add_Field(XMLNewChild,'AccessUserAddressCompany',Contact."Company Name"); Add_Field(XMLNewChild,'AccessUserAddressName',Addresses.Code); Add_Field(XMLNewChild,'AccessUserAddressAddress',Addresses.Address); Add_Field(XMLNewChild,'AccessUserAddressAddress2',Addresses."Address 2"); Add_Field(XMLNewChild,'AccessUserAddressZip',Addresses."Post Code"); Add_Field(XMLNewChild,'AccessUserAddressCity',Addresses.City); Add_Field(XMLNewChild,'AccessUserAddressCountry',Addresses."Country/Region Code"); Add_Field(XMLNewChild,'AccessUserAddressCell',Addresses."Phone No."); Add_Field(XMLNewChild,'AccessUserAddressFax',Addresses."Fax No."); Add_Field(XMLNewChild,'AccessUserAddressEmail',Addresses."E-Mail"); Add_Field(XMLNewChild,'AccessUserAddressCustomerNumber',ContactBusiness."No."); Add_Field(XMLNewChild,'AccessUserAddressUID',Contact."No." + '_' + Addresses.Code); Add_Field(XMLNewChild,'AccessUserAddressState',Addresses."Country/Region Code"); Add_Field(XMLNewChild,'AccessUserAddressPhoneBusiness', Addresses."Phone No."); Add_Field(XMLNewChild,'AccessUserAddressCountryCode',Addresses."Country/Region Code"); Add_Field(XMLNewChild,'AccessUserAddressDefaultAddressCustomFields','False'); XMLNewChild := XMLNewChild.ParentNode; END; UNTIL Contact.NEXT = 0; END; UNTIL ContactBusiness.NEXT = 0; END; UNTIL Addresses.NEXT = 0; END; END; LOCAL PROCEDURE Add_Impersonation@1000000030(XMLCurrNode@1000000000 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"); VAR XMLNewChild@1000000001 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; Customer@1000000002 : Record 18; Contact@1000000003 : Record 5050; bigtext@1000000004 : BigText; SalesPerson@1000000005 : Record 13; ContactBusiness@1000000006 : Record 5054; BEGIN Add_Element(XMLCurrNode,'table','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'tableName','AccessUserSecondaryRelation'); Contact.SETRANGE(Type, Contact.Type::Person); IF (SalesPerson.FINDSET(FALSE, FALSE)) THEN BEGIN REPEAT Contact.SETRANGE("Salesperson Code", SalesPerson.Code); IF Contact.FINDSET(FALSE,FALSE) THEN BEGIN REPEAT ContactBusiness.SETRANGE("Contact No.", Contact."Company No."); IF ContactBusiness.FINDFIRST AND Customer.GET(ContactBusiness."No.") AND (Contact."Company Name" = Customer.Name) THEN BEGIN Add_Element(XMLNewChild,'item','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'table','AccessUserSecondaryRelation'); Add_Field(XMLNewChild,'AccessUserSecondaryRelationUserId',SalesPerson.Code); Add_Field(XMLNewChild,'AccessUserSecondaryRelationSecondaryUserId',Contact."No."); XMLNewChild := XMLNewChild.ParentNode; END; UNTIL Contact.NEXT = 0; END; UNTIL SalesPerson.NEXT = 0; END; END; LOCAL PROCEDURE PrintCustomerStatementAsPDF@1000000024(CustomerID@1000000000 : Text;StrStartDate@1000000007 : Text;StrEndDate@1000000009 : Text) : Text; VAR tempfile@1000000001 : File; filename@1000000002 : Text[1024]; Istream@1000000003 : InStream; memorystream@1000000004 : DotNet "'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.IO.MemoryStream"; bytes@1000000005 : DotNet "'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Array"; convert@1000000006 : DotNet "'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Convert"; StandardStatementReport@1000000008 : Report 1316; Customer@1000000010 : Record 18; startDate@1000000011 : Date; endDate@1000000012 : Date; BEGIN tempfile.CREATETEMPFILE; filename := tempfile.NAME; tempfile.CLOSE(); IF (STRLEN(StrStartDate) < 1) OR (STRLEN(DELCHR(StrStartDate, '=','-')) < 8) THEN BEGIN ERROR('Start date must be in the YYYY-MM-DD format'); END; IF (STRLEN(StrEndDate) < 1) OR (STRLEN(DELCHR(StrEndDate, '=','-')) < 8) THEN BEGIN ERROR('End date must be in the YYYY-MM-DD format'); END; StrStartDate := DELCHR(StrStartDate, '=','-') + 'D'; StrEndDate := DELCHR(StrEndDate, '=','-') + 'D'; startDate := DMY2DATE(TextToInteger(COPYSTR(StrStartDate,7,2)),TextToInteger(COPYSTR(StrStartDate,5,2)),TextToInteger(COPYSTR(StrStartDate,1,4))); endDate := DMY2DATE(TextToInteger(COPYSTR(StrEndDate,7,2)),TextToInteger(COPYSTR(StrEndDate,5,2)),TextToInteger(COPYSTR(StrEndDate,1,4))); IF startDate > endDate THEN ERROR('Start date must be less than End date'); Customer.SETRANGE("No.", CustomerID); Customer.FINDSET(FALSE, FALSE); StandardStatementReport.InitializeRequest(TRUE,TRUE,TRUE,TRUE,TRUE,FALSE,'<1M+CM>',0,TRUE, startDate, endDate); StandardStatementReport.SETTABLEVIEW(Customer); StandardStatementReport.SAVEASPDF(filename); IF EXISTS(filename) THEN BEGIN tempfile.OPEN(filename); tempfile.CREATEINSTREAM(Istream); memorystream := memorystream.MemoryStream(); COPYSTREAM(memorystream,Istream); bytes := memorystream.GetBuffer(); tempfile.CLOSE; FILE.ERASE(filename); EXIT(convert.ToBase64String(bytes)); END; EXIT('Fail to get PDF from PrintCustomerStatementAsPDF') END; LOCAL PROCEDURE TextToInteger@1000000070(VarText@1000000000 : Text) : Integer; VAR VarInteger@1000000001 : Integer; BEGIN EVALUATE(VarInteger,VarText); EXIT(VarInteger); END; LOCAL PROCEDURE Get_BoolFromNode@1000000040(XmlNode@1000000000 : DotNet "'System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";xpath@1000000002 : Text[1024]) : Boolean; VAR tempbool@1000000001 : Boolean; tempstr@1000000003 : Text; BEGIN tempstr:=Get_TextFromNode(XmlNode,xpath); IF (LOWERCASE(tempstr) = 'true') OR (tempstr = '1') OR (LOWERCASE(tempstr) = 'on') THEN EXIT(TRUE) ELSE EXIT(FALSE); //EXIT(EVALUATE(tempbool,Get_TextFromNode(XmlNode,xpath))); END; LOCAL PROCEDURE Add_Locations@1000000035(XMLCurrNode@1000000000 : DotNet "'System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"); VAR Location@1000000001 : Record 14; XMLNewChild@1000000002 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; id@1000000003 : Integer; BEGIN Add_Element(XMLCurrNode,'table','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'tableName','EcomStockLocation'); IF Location.FINDSET(FALSE,FALSE) THEN BEGIN REPEAT Add_Element(XMLNewChild,'item','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'table','EcomStockLocation'); id := ConvertCodeToInt(Location.Code); Add_Field(XMLNewChild,'StockLocationId',FORMAT(id)); Add_Field(XMLNewChild,'StockLocationName',Location.Code); IF Location.Name <> '' THEN Add_Field(XMLNewChild,'StockLocationDescription',Location.Name) ELSE Add_Field(XMLNewChild,'StockLocationDescription',Location.Code); Add_Field(XMLNewChild,'StockLocationLanguageId',DefaultLanguageId); Add_Field(XMLNewChild,'StockLocationGroupId',FORMAT(id)); XMLNewChild := XMLNewChild.ParentNode; UNTIL Location.NEXT=0; END; END; LOCAL PROCEDURE ConvertCodeToInt@1000000036(code@1000000000 : Code[10]) : Integer; VAR i@1000000004 : Integer; dotNetString@1000000005 : DotNet "'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.String"; BEGIN dotNetString := code; i := dotNetString.GetHashCode(); EXIT(i); END; LOCAL PROCEDURE Add_StockUnits@1000000044(XMLCurrNode@1000000000 : DotNet "'System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"); VAR XMLNewChild@1000000001 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; item@1000000002 : Record 27; Location@1000000007 : Record 14; ItemAvailFormsMgt@1000000008 : Codeunit 353; GrossRequirement@1000000012 : Decimal; PlannedOrderRcpt@1000000013 : Decimal; ScheduledRcpt@1000000014 : Decimal; PlannedOrderReleases@1000000015 : Decimal; ProjAvailableBalance@1000000016 : Decimal; ExpectedInventory@1000000017 : Decimal; QtyAvailable@1000000018 : Decimal; unitId@1000000003 : Text; Calendar@1000000004 : Record 2000000007; BEGIN Add_Element(XMLCurrNode,'table','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'tableName','EcomStockUnit'); item.SETRANGE("Date Filter",Calendar."Period Start",Calendar."Period End"); IF Location.FINDSET(FALSE,FALSE) THEN BEGIN REPEAT item.SETRANGE("Location Filter",Location.Code); IF item.FINDSET(FALSE,FALSE) THEN BEGIN REPEAT unitId := item."Base Unit of Measure"; ItemAvailFormsMgt.CalcAvailQuantities( item, FALSE, GrossRequirement,PlannedOrderRcpt,ScheduledRcpt, PlannedOrderReleases,ProjAvailableBalance,ExpectedInventory,QtyAvailable); IF item.Inventory <> 0 THEN BEGIN Add_Element(XMLNewChild,'item','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'table','EcomStockUnit'); Add_Field(XMLNewChild,'StockUnitProductId',item."No."); Add_Field(XMLNewChild,'StockUnitVariantId',''); Add_Field(XMLNewChild,'StockUnitId',STRSUBSTNO('Unit_%1',unitId)); Add_Field(XMLNewChild,'StockUnitQuantity',FORMAT(item.Inventory)); Add_Field(XMLNewChild,'StockUnitStockLocationId',FORMAT(ConvertCodeToInt(Location.Code))); XMLNewChild := XMLNewChild.ParentNode; END; UNTIL item.NEXT=0; END; UNTIL Location.NEXT=0; END; END; LOCAL PROCEDURE Add_ProductsStock@1000000038(XMLCurrNode@1000000000 : DotNet "'System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"); VAR XMLNewChild@1000000001 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; item@1000000002 : Record 27; itemvariants@1000000003 : Record 5401; BEGIN Add_Element(XMLCurrNode,'table','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'tableName','EcomProducts'); IF item.FINDSET(FALSE,FALSE) THEN BEGIN REPEAT Add_ProductStock(XMLNewChild,item,''); CLEAR(itemvariants); itemvariants.SETFILTER(itemvariants."Item No.",'=%1', item."No."); IF itemvariants.FINDSET(FALSE,FALSE) THEN BEGIN REPEAT Add_ProductStock(XMLNewChild,item,itemvariants.Code); UNTIL itemvariants.NEXT=0; END; UNTIL item.NEXT=0; END; END; LOCAL PROCEDURE Add_ProductStock@1000000041(XMLNewChildProd@1000000006 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";item@1000000007 : Record 27;variant@1000000000 : Text[30]); VAR itemLedgerEntry@1000000001 : Record 32; BEGIN item."Variant Filter" := variant; item.CALCFIELDS(item.Inventory); Add_Element(XMLNewChildProd,'item','','',XMLNewChildProd,''); Add_Attribute(XMLNewChildProd,'table','EcomProducts'); Add_Field(XMLNewChildProd,'ProductID',item."No."); IF (variant <> '') THEN Add_Field(XMLNewChildProd,'ProductVariantID',variant) ELSE Add_Field(XMLNewChildProd,'ProductVariantID',''); Add_Field(XMLNewChildProd,'ProductNumber',item."No."); IF (variant <> '') THEN BEGIN itemLedgerEntry.SETFILTER("Item No.", '=%1', item."No."); itemLedgerEntry.SETFILTER("Variant Code", '=%1', variant); itemLedgerEntry.CALCSUMS(Quantity); Add_Field(XMLNewChildProd,'ProductStock',FORMAT(itemLedgerEntry.Quantity)); END ELSE BEGIN Add_Field(XMLNewChildProd,'ProductStock',FORMAT(item.Inventory)); END; XMLNewChildProd := XMLNewChildProd.ParentNode; END; LOCAL PROCEDURE Add_Units@1000000039(XMLCurrNode@1000000000 : DotNet "'System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"); VAR XMLNewChild@1000000002 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; Language@1000000017 : Record 8; UnitofMeasure@1000000008 : Record 204; unitofmeasuretranslation@1000000009 : Record 5402; BEGIN Add_Element(XMLCurrNode,'table','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'tableName','EcomVariantGroups'); IF Language.FINDSET(FALSE,FALSE) THEN BEGIN REPEAT Add_Element(XMLNewChild,'item','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'table','EcomVariantGroups'); Add_Field(XMLNewChild,'VariantGroupID','NavUnits'); Add_Field(XMLNewChild,'VariantGroupLanguageID',Language.Code); Add_Field(XMLNewChild,'VariantGroupName','DW_Units'); Add_Field(XMLNewChild,'VariantGroupLabel',''); Add_Field(XMLNewChild,'VariantGroupUnit','true'); XMLNewChild := XMLNewChild.ParentNode; UNTIL Language.NEXT=0; END ELSE BEGIN Add_Element(XMLNewChild,'item','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'table','EcomVariantGroups'); Add_Field(XMLNewChild,'VariantGroupID','NavUnits'); Add_Field(XMLNewChild,'VariantGroupLanguageID',''); Add_Field(XMLNewChild,'VariantGroupName','DW_Units'); Add_Field(XMLNewChild,'VariantGroupLabel',''); Add_Field(XMLNewChild,'VariantGroupUnit','true'); XMLNewChild := XMLNewChild.ParentNode; END; Add_Element(XMLCurrNode,'table','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'tableName','EcomVariantsOptions'); CLEAR(UnitofMeasure); IF UnitofMeasure.FINDSET(FALSE,FALSE) THEN BEGIN REPEAT CLEAR(unitofmeasuretranslation); unitofmeasuretranslation.SETRANGE(Code,UnitofMeasure.Code); unitofmeasuretranslation.SETFILTER("Language Code",'=%1', DefaultLanguageId); IF NOT unitofmeasuretranslation.FINDFIRST() THEN BEGIN Add_Element(XMLNewChild,'item','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'table','EcomVariantsOptions'); Add_Field(XMLNewChild,'VariantOptionID',STRSUBSTNO('Unit_%1',UnitofMeasure.Code)); Add_Field(XMLNewChild,'VariantOptionLanguageID',DefaultLanguageId); Add_Field(XMLNewChild,'VariantOptionGroupID','NavUnits'); Add_Field(XMLNewChild,'VariantOptionName',UnitofMeasure.Description); XMLNewChild := XMLNewChild.ParentNode; END; unitofmeasuretranslation.SETFILTER("Language Code",''); IF unitofmeasuretranslation.FINDSET(FALSE,FALSE) THEN BEGIN REPEAT Add_Element(XMLNewChild,'item','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'table','EcomVariantsOptions'); Add_Field(XMLNewChild,'VariantOptionID',STRSUBSTNO('Unit_%1',UnitofMeasure.Code)); Add_Field(XMLNewChild,'VariantOptionLanguageID',unitofmeasuretranslation."Language Code"); Add_Field(XMLNewChild,'VariantOptionGroupID','NavUnits'); Add_Field(XMLNewChild,'VariantOptionName',unitofmeasuretranslation.Description); XMLNewChild := XMLNewChild.ParentNode; UNTIL unitofmeasuretranslation.NEXT=0; END; UNTIL UnitofMeasure.NEXT=0; END; END; LOCAL PROCEDURE Add_ProductProperties@1000000088(VAR item@1000000002 : Record 27;XMLNewChild@1000000001 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";VAR itemAttributesList@1000000012 : DotNet "'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Collections.Generic.List`1";XMLCurrNode@1000000011 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";XMLNewChildProductCategoryFieldValue@1000000015 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";XMLNewChildProductCategoryField@1000000013 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";XMLNewChildProductCategoryFieldTranslation@1000000010 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";XMLNewChildProductCategoryFieldOption@1000000009 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";XMLNewChildProductCategoryFieldOptionTranslation@1000000008 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";XMLNewChildProductCategory@1000000004 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";XMLNewChildProductCategoryTranslation@1000000000 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";languagesList@1000000005 : DotNet "'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Collections.Generic.List`1";setLanguage@1000000006 : Text); VAR ItemAttributes@1000000026 : Record 7500; ItemAttributeValues@1000000027 : Record 7501; ItemAttributeValueMapping@1000000030 : Record 7505; itemCategoryCode@1000000018 : Text; ItemAttributeValueMapping1@1000000003 : Record 7505; BEGIN ItemAttributeValueMapping.SETRANGE("Table ID", DATABASE::Item); ItemAttributeValueMapping.SETFILTER("No.", '=%1',item."No."); IF ItemAttributeValueMapping.FINDSET(FALSE, FALSE) THEN BEGIN REPEAT CLEAR(ItemAttributeValues); ItemAttributeValues.SETFILTER("Attribute ID",FORMAT(ItemAttributeValueMapping."Item Attribute ID")); ItemAttributeValues.SETFILTER(ID, FORMAT(ItemAttributeValueMapping."Item Attribute Value ID")); ItemAttributeValues.SETFILTER(Value, '<>%1', ''); IF ItemAttributeValues.FINDFIRST THEN BEGIN IF ItemAttributes.GET(ItemAttributeValueMapping."Item Attribute ID") THEN BEGIN //Add category field definition tables IF NOT itemAttributesList.Contains(ItemAttributeValueMapping."Item Attribute ID") THEN BEGIN itemAttributesList.Add(ItemAttributeValueMapping."Item Attribute ID"); IF itemAttributesList.Count = 1 THEN BEGIN Add_ProductCategoryAndFieldsXmlNodes(XMLCurrNode,XMLNewChildProductCategory, XMLNewChildProductCategoryTranslation, XMLNewChildProductCategoryField ,XMLNewChildProductCategoryFieldTranslation, XMLNewChildProductCategoryFieldOption, XMLNewChildProductCategoryFieldOptionTranslation,XMLNewChildProductCategoryFieldValue, languagesList, setLanguage); END; CLEAR(ItemAttributeValueMapping1); ItemAttributeValueMapping1.SETRANGE("Table ID", DATABASE::"Item Category"); ItemAttributeValueMapping1.SETRANGE("Item Attribute ID", ItemAttributeValueMapping."Item Attribute ID"); IF ItemAttributeValueMapping1.FINDFIRST THEN BEGIN Add_EcomProductCategoryField(ItemAttributes,ItemAttributeValueMapping1."Item Attribute Value ID",XMLNewChildProductCategoryField,XMLNewChildProductCategoryFieldTranslation, XMLNewChildProductCategoryFieldOption,XMLNewChildProductCategoryFieldOptionTranslation, 'ImportedNAVItemAttributes', languagesList, setLanguage); END ELSE BEGIN Add_EcomProductCategoryField(ItemAttributes,0,XMLNewChildProductCategoryField,XMLNewChildProductCategoryFieldTranslation, XMLNewChildProductCategoryFieldOption,XMLNewChildProductCategoryFieldOptionTranslation, 'ImportedNAVItemAttributes', languagesList, setLanguage); END; END; itemCategoryCode := 'ImportedNAVItemAttributes'; Add_Element(XMLNewChildProductCategoryFieldValue,'item','','',XMLNewChildProductCategoryFieldValue,''); Add_Attribute(XMLNewChildProductCategoryFieldValue,'table','EcomProductCategoryFieldValue'); Add_Field(XMLNewChildProductCategoryFieldValue,'FieldValueFieldId',itemCategoryCode + '_' + FORMAT(ItemAttributeValueMapping."Item Attribute ID")); Add_Field(XMLNewChildProductCategoryFieldValue,'FieldValueFieldCategoryId',itemCategoryCode); Add_Field(XMLNewChildProductCategoryFieldValue,'FieldValueProductId',ItemAttributeValueMapping."No."); Add_Field(XMLNewChildProductCategoryFieldValue,'FieldValueProductVariantId',''); Add_Field(XMLNewChildProductCategoryFieldValue,'FieldValueProductLanguageId', setLanguage); IF ItemAttributes.Type = ItemAttributes.Type::Option THEN Add_Field(XMLNewChildProductCategoryFieldValue,'FieldValueValue', FORMAT(ItemAttributeValues.ID)) ELSE Add_Field(XMLNewChildProductCategoryFieldValue,'FieldValueValue',ItemAttributeValues.Value); XMLNewChildProductCategoryFieldValue := XMLNewChildProductCategoryFieldValue.ParentNode; END; END; UNTIL ItemAttributeValueMapping.NEXT=0; END; END; LOCAL PROCEDURE Get_RequestLanguages@1000000050(languages@1000000000 : Text;VAR languagesList@1000000001 : DotNet "'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Collections.Generic.List`1"); VAR Language@1000000017 : Record 8; strLanguages@1000000002 : DotNet "'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.String"; separator@1000000004 : DotNet "'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.String"; i@1000000005 : Integer; languagesArray@1000000006 : DotNet "'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Array"; strLanguage@1000000003 : DotNet "'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.String"; BEGIN languagesList := languagesList.List(); strLanguages := languages; IF strLanguages.Length > 0 THEN BEGIN separator := ','; languagesArray := strLanguages.Split(separator.ToCharArray()); FOR i := 0 TO languagesArray.Length - 1 DO BEGIN strLanguage := languagesArray.GetValue(i); strLanguage := strLanguage.Trim(); IF Language.GET(strLanguage) AND NOT languagesList.Contains(Language.Code) THEN BEGIN languagesList.Add(Language.Code); END; END; END; END; LOCAL PROCEDURE WriteNote@1000000051(NoteText@1001 : Text;salesHeader@1002 : Record 36); VAR LinkID@1240060000 : Integer; RecRef@1240060002 : RecordRef; RecordLink@1240060003 : Record 2000000068; typeHelper@1000000000 : Codeunit 10; BEGIN RecRef.GETTABLE(salesHeader); RecordLink.INIT; RecordLink."Link ID" := 0; RecordLink."Record ID" := RecRef.RECORDID; RecordLink.URL1 := GETURL(CLIENTTYPE::Current, COMPANYNAME, OBJECTTYPE::Page, PAGE::"Sales Order"); RecordLink.Type := RecordLink.Type::Note; RecordLink.Created := CURRENTDATETIME; RecordLink."User ID":= USERID; RecordLink.Company:= COMPANYNAME; RecordLink.Notify := TRUE; //NAV2018: typeHelper.WriteRecordLinkNote(RecordLink, NoteText); //Used in NAV2015: //SetText(NoteText,RecordLink); RecordLink.INSERT; END; LOCAL PROCEDURE SetText@1000000052(NoteText@1001 : Text;VAR RecordLink@1000 : Record 2000000068); VAR SystemUTF8Encoder@1011 : DotNet "'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Text.UTF8Encoding"; SystemByteArray@1010 : DotNet "'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Array"; OStr@1008 : OutStream; s@1007 : Text; lf@1006 : Text; c1@1005 : Char; c2@1004 : Char; x@1003 : Integer; y@1002 : Integer; i@1009 : Integer; BEGIN s := NoteText; SystemUTF8Encoder := SystemUTF8Encoder.UTF8Encoding; SystemByteArray := SystemUTF8Encoder.GetBytes(s); RecordLink.Note.CREATEOUTSTREAM(OStr); x := SystemByteArray.Length DIV 128; IF x > 1 THEN y := SystemByteArray.Length - 128 * (x - 1) ELSE y := SystemByteArray.Length; c1 := y; OStr.WRITE(c1); IF x > 0 THEN BEGIN c2 := x; OStr.WRITE(c2); END; FOR i := 0 TO SystemByteArray.Length - 1 DO BEGIN c1 := SystemByteArray.GetValue(i); OStr.WRITE(c1); END; END; LOCAL PROCEDURE GetSalesLineDiscountNoteText@1000000054(XMLNodeDiscount@1000000000 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";salesLineNo@1000000001 : Integer;VAR dwOrderLineIds@1000000008 : ARRAY [10000,2] OF Text;CurrencyCode@1000000007 : Text) : Text; VAR noteText@1000000002 : Text; i@1000000005 : Integer; arrayLength@1000000010 : Integer; str@1000000011 : Text; CRLF@1000000003 : Text[2]; discountValue@1000000004 : Text; discountType@1000000006 : Text; BEGIN IF (Get_TextFromNode(XMLNodeDiscount,'column[@columnName=''OrderLineDiscountType'']') = 'Product') THEN BEGIN str := Get_TextFromNode(XMLNodeDiscount,'column[@columnName=''OrderLineParentLineId'']'); IF (str <> '') THEN BEGIN arrayLength := ARRAYLEN(dwOrderLineIds, 1); FOR i := 1 TO arrayLength DO BEGIN IF dwOrderLineIds[i][1] = '' THEN i := arrayLength ELSE IF dwOrderLineIds[i][1] = str THEN BEGIN EVALUATE(salesLineNo,dwOrderLineIds[i][2]); i := arrayLength; END; END; END; END; CRLF := ' '; CRLF[1] := 13; CRLF[2] := 10; discountType := Get_TextFromNode(XMLNodeDiscount,'column[@columnName=''OrderLineDiscountType'']'); discountValue := Get_TextFromNode(XMLNodeDiscount,'column[@columnName=''OrderLineDiscountValue'']'); IF discountType = 'Percentage' THEN discountValue := discountValue + '%' ELSE IF discountType = 'Amount' THEN discountValue := discountValue + ' ' + CurrencyCode; noteText := STRSUBSTNO('Line: %1. Applied Dynamicweb Discount. %2Name: "%3" %2Campaign: "%4" %2Type: %5 %2Value: %6', salesLineNo, CRLF, Get_TextFromNode(XMLNodeDiscount,'column[@columnName=''OrderLineDiscountName'']'), Get_TextFromNode(XMLNodeDiscount,'column[@columnName=''OrderLineCampaignName'']'), discountType, discountValue); EXIT(noteText); END; LOCAL PROCEDURE HtmlEncode@1000000059(InText@1000000000 : Text) : Text; VAR SystemWebHttpUtility@1000000001 : DotNet "'System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.System.Web.HttpUtility"; BEGIN SystemWebHttpUtility := SystemWebHttpUtility.HttpUtility; EXIT(SystemWebHttpUtility.HtmlEncode(InText)); END; LOCAL PROCEDURE Add_ProductDefaultGroup@1000000048(groupId@1000000006 : Text;itemNo@1000000002 : Text;XMLNewChildGroupProductRelation@1000000001 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"); BEGIN Add_Element(XMLNewChildGroupProductRelation,'item','','',XMLNewChildGroupProductRelation,''); Add_Attribute(XMLNewChildGroupProductRelation,'table','EcomGroupProductRelation'); Add_Field(XMLNewChildGroupProductRelation,'GroupProductRelationGroupID',groupId); Add_Field(XMLNewChildGroupProductRelation,'GroupProductRelationProductID',itemNo); Add_Field(XMLNewChildGroupProductRelation,'GroupProductRelationIsPrimary','True'); XMLNewChildGroupProductRelation := XMLNewChildGroupProductRelation.ParentNode; END; LOCAL PROCEDURE Add_DynamicwebShippingItemCharge@1000000033(); VAR itemCharge@1000000000 : Record 5800; BEGIN IF NOT itemCharge.GET(DynamicwebShippingItemChargeNo) THEN BEGIN itemCharge.INIT; itemCharge."No." := DynamicwebShippingItemChargeNo; itemCharge.Description := 'Dynamicweb Ecommerce Shipping Charge'; itemCharge."Search Description" := UPPERCASE(itemCharge.Description); itemCharge.INSERT; END; END; LOCAL PROCEDURE Add_Shipping@1000000067(VAR XMLOrderNode@1000000000 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";VAR RequestXMLOrderNode@1000000001 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";lineNo@1000000002 : Integer;VAR salesHeader@1000000008 : Record 36;insertShippingOrderLine@1000000010 : Boolean;firstOrderLineItem@1000000014 : Record 27); VAR itemCharge@1000000007 : Record 5800; dynamicwebOrderShippingItemKey@1000000006 : Text; dynamicwebShippingFee@1000000005 : Decimal; dynamicwebShippingWarning@1000000004 : Text; dynamicwebControlsShipping@1000000003 : Boolean; salesLine@1000000009 : Record 37; dynamicwebShippingFeeWithoutVat@1000000011 : Decimal; itemChargeAssignment@1000000012 : Record 5809; BEGIN dynamicwebControlsShipping := NOT ISNULL(RequestXMLOrderNode.SelectSingleNode('column[@columnName=''OrderShippingItemKey'']')); IF dynamicwebControlsShipping THEN BEGIN dynamicwebShippingFee := Get_DecimalFromNode(RequestXMLOrderNode, 'column[@columnName=''OrderShippingFee'']'); IF dynamicwebShippingFee <> 0 THEN BEGIN dynamicwebShippingFeeWithoutVat := Get_DecimalFromNode(RequestXMLOrderNode, 'column[@columnName=''OrderShippingFeeWithoutVat'' or @columnName=''OrderShippingFeeWithoutVAT'']'); IF (dynamicwebShippingFeeWithoutVat = 0) THEN dynamicwebShippingFeeWithoutVat := dynamicwebShippingFee; Order_OrderPriceWithVAT := Order_OrderPriceWithVAT + dynamicwebShippingFee; Order_OrderPriceWithoutVAT := Order_OrderPriceWithoutVAT + dynamicwebShippingFeeWithoutVat; IF insertShippingOrderLine THEN BEGIN dynamicwebOrderShippingItemKey := Get_TextFromNode(RequestXMLOrderNode, 'column[@columnName=''OrderShippingItemKey'']'); IF dynamicwebOrderShippingItemKey <> '' THEN IF itemCharge.GET(dynamicwebOrderShippingItemKey) THEN BEGIN //Add Dynamicweb shipping fee order line salesLine.INIT; salesLine."Document Type" := salesHeader."Document Type"; salesLine."Document No." := salesHeader."No."; salesLine."Line No." := lineNo; salesLine.Type := salesLine.Type::"Charge (Item)"; salesLine."No." := itemCharge."No."; salesLine.Description := itemCharge.Description; salesLine."Qty. Assigned" := 1; IF salesHeader."Prices Including VAT" THEN BEGIN salesLine."Unit Price" := dynamicwebShippingFee; END ELSE BEGIN salesLine."Unit Price" := dynamicwebShippingFeeWithoutVat; END; salesLine.VALIDATE(Quantity, 1); IF salesHeader."Prices Including VAT" THEN BEGIN salesLine."Line Amount" := dynamicwebShippingFee; END ELSE BEGIN salesLine."Line Amount" := dynamicwebShippingFeeWithoutVat; salesLine."VAT Base Amount" := dynamicwebShippingFee - dynamicwebShippingFeeWithoutVat; salesLine."VAT Difference" := dynamicwebShippingFee - dynamicwebShippingFeeWithoutVat; END; salesLine.VALIDATE(Amount, dynamicwebShippingFeeWithoutVat); salesLine."Amount Including VAT" := dynamicwebShippingFee; salesLine."VAT Prod. Posting Group" := itemCharge."VAT Prod. Posting Group"; salesLine."Gen. Bus. Posting Group" := salesHeader."Gen. Bus. Posting Group"; salesLine."Gen. Prod. Posting Group" := firstOrderLineItem."Gen. Prod. Posting Group"; salesLine."VAT Bus. Posting Group" := salesHeader."VAT Bus. Posting Group"; salesLine."Dimension Set ID" := salesHeader."Dimension Set ID"; salesLine.INSERT(TRUE); itemChargeAssignment.INIT; itemChargeAssignment."Document Type" := itemChargeAssignment."Document Type"::Order; itemChargeAssignment."Document No." := salesHeader."No."; itemChargeAssignment."Applies-to Doc. No." := salesHeader."No."; itemChargeAssignment."Document Line No." := salesLine."Line No."; itemChargeAssignment."Line No." := 10000; itemChargeAssignment."Applies-to Doc. Line No." := 10000; itemChargeAssignment."Item Charge No." := itemCharge."No."; itemChargeAssignment."Unit Cost" := dynamicwebShippingFeeWithoutVat; itemChargeAssignment."Amount to Assign" := dynamicwebShippingFeeWithoutVat; itemChargeAssignment."Item No." := firstOrderLineItem."No."; itemChargeAssignment.Description := firstOrderLineItem.Description; itemChargeAssignment."Qty. to Assign" := 1; itemChargeAssignment.INSERT(); END ELSE BEGIN dynamicwebShippingWarning := STRSUBSTNO('Can not add Dynamicweb shipping cost to NAV Sales order due to missing item charge:"%1"', dynamicwebOrderShippingItemKey); Add_Field(XMLOrderNode,'OrderShippingWarning',dynamicwebShippingWarning); END; END; END; Add_Field(XMLOrderNode,'OrderShippingMethodName',Get_TextFromNode(RequestXMLOrderNode, 'column[@columnName=''OrderShippingMethodName'']')); Add_Field(XMLOrderNode,'OrderShippingMethodId',Get_TextFromNode(RequestXMLOrderNode, 'column[@columnName=''OrderShippingMethodId'']')); Add_Field(XMLOrderNode,'OrderShippingFee',FORMAT(dynamicwebShippingFee)) END ELSE BEGIN Add_Field(XMLOrderNode,'OrderShippingMethodName',salesHeader."Shipment Method Code"); END; END; LOCAL PROCEDURE Add_SalesHeaderXml@1000000058(salesheader@1000000000 : Record 36;VAR XMLCurrNode@1000000001 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";tempoary@1000000003 : Boolean;VAR Total@1000000005 : Decimal;VAR Discount@1000000004 : Decimal;FromCustomerCenter@1000000006 : Boolean;calculateOrderIF2@1000000008 : Boolean); VAR prefix@1000000007 : Text; XMLNewChild@1000000002 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; BEGIN Add_Element(XMLCurrNode,'item','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'table','EcomOrders'); Add_SalesHeader(salesheader, XMLNewChild, tempoary, Total, Discount, FromCustomerCenter, calculateOrderIF2); END; LOCAL PROCEDURE GetInvoiceDiscountPercent@1000000060(VAR SalesHeader@1000 : Record 36) : Decimal; VAR CurrencyDate@1000000002 : Date; CustInvDisc@1000000003 : Record 19; BEGIN IF SalesHeader."Posting Date" = 0D THEN CurrencyDate := WORKDATE ELSE CurrencyDate := SalesHeader."Posting Date"; CustInvDisc.GetRec(SalesHeader."Invoice Disc. Code",SalesHeader."Currency Code",CurrencyDate,Order_OrderPriceWithoutVAT); EXIT(CustInvDisc."Discount %"); END; LOCAL PROCEDURE Add_NavOrderDiscountSalesLine@1000000065(VAR XMLNewChild@1000000002 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";discountPercent@1000000001 : Decimal;VatPercent@1000000008 : Decimal;salesheader@1000000000 : Record 36); VAR TempWithWAT@1000000006 : Decimal; TempWithoutWAT@1000000007 : Decimal; BEGIN Add_Element(XMLNewChild,'item','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'table','EcomOrderLines'); Add_Field(XMLNewChild,'OrderLineProductNumber',''); Add_Field(XMLNewChild,'OrderLineProductVariantId',''); Add_Field(XMLNewChild,'OrderLineId',''); Add_Field(XMLNewChild,'OrderLineQuantity','1'); Add_Field(XMLNewChild,'OrderLineType','1'); IF (salesheader."Prices Including VAT" = TRUE) THEN BEGIN TempWithWAT := ROUND((Order_OrderPriceWithVAT * discountPercent / 100), 0.01, '='); Add_Field(XMLNewChild,'OrderLinePriceWithVat',FORMAT(TempWithWAT)); Add_Field(XMLNewChild,'OrderLineUnitPriceWithVat',FORMAT(TempWithWAT)); Order_OrderPriceWithVAT := Order_OrderPriceWithVAT - TempWithWAT; TempWithoutWAT := ROUND((Order_OrderPriceWithoutVAT * discountPercent / 100), 0.01, '='); Add_Field(XMLNewChild,'OrderLinePriceWithoutVat',FORMAT(TempWithoutWAT)); Add_Field(XMLNewChild,'OrderLineUnitPriceWithoutVat',FORMAT(TempWithoutWAT)); Order_OrderPriceWithoutVAT := Order_OrderPriceWithoutVAT - TempWithoutWAT; END ELSE BEGIN TempWithoutWAT := ROUND((Order_OrderPriceWithoutVAT * discountPercent / 100), 0.01, '='); Add_Field(XMLNewChild,'OrderLinePriceWithoutVat',FORMAT(TempWithoutWAT)); Add_Field(XMLNewChild,'OrderLineUnitPriceWithoutVat',FORMAT(TempWithoutWAT)); Order_OrderPriceWithoutVAT := Order_OrderPriceWithoutVAT - TempWithoutWAT; TempWithWAT := ROUND(Order_OrderPriceWithoutVAT * (VatPercent / 100), 0.01, '='); Add_Field(XMLNewChild,'OrderLinePriceWithVat',FORMAT(TempWithWAT)); Add_Field(XMLNewChild,'OrderLineUnitPriceWithVat',FORMAT(TempWithWAT)); Order_OrderPriceWithVAT := Order_OrderPriceWithoutVAT + TempWithWAT; END; Order_OrderPriceVAT := Order_OrderPriceWithVAT-Order_OrderPriceWithoutVAT; Add_Field(XMLNewChild,'OrderLinePriceVat',FORMAT(ROUND(Order_OrderPriceVAT, 0.01, '='))); Add_Field(XMLNewChild,'OrderLineUnitPriceVat',FORMAT(ROUND(Order_OrderPriceVAT, 0.01, '='))); Add_Field(XMLNewChild,'OrderLinePriceVatPercent',FORMAT(VatPercent)); Add_Field(XMLNewChild,'OrderLineUnitPriceVatPercent',FORMAT(VatPercent)); XMLNewChild := XMLNewChild.ParentNode; END; PROCEDURE CalculateIncDiscForHeader@1000000066(VAR TempSalesHeader@1000 : Record 36); VAR SalesCalcDiscount@1000000000 : Codeunit 60; SalesLine@1000000001 : Record 37; BEGIN //SalesSetup.GET; //IF NOT SalesSetup."Calc. Inv. Discount" THEN //EXIT; WITH TempSalesHeader DO BEGIN SalesLine."Document Type" := "Document Type"; SalesLine."Document No." := "No."; SalesCalcDiscount.CalculateWithSalesHeader(TempSalesHeader,SalesLine); END; END; LOCAL PROCEDURE Add_DynamicwebOrderDiscountSalesLine@1000000081(VAR XMLNewChild@1000000002 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";VAR XMLDiscountNode@1000000000 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";VatPercent@1000000001 : Decimal); VAR TempWithWAT@1000000006 : Decimal; TempWithoutWAT@1000000007 : Decimal; BEGIN Add_Element(XMLNewChild,'item','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'table','EcomOrderLines'); Add_Field(XMLNewChild,'OrderLineProductNumber',''); Add_Field(XMLNewChild,'OrderLineProductName',Get_TextFromNode(XMLDiscountNode, 'column[@columnName=''OrderLineProductName'']')); Add_Field(XMLNewChild,'OrderLineProductVariantId',''); Add_Field(XMLNewChild,'OrderLineProductName',Get_TextFromNode(XMLDiscountNode, 'column[@columnName=''OrderLineDiscountId'']')); Add_Field(XMLNewChild,'OrderLineQuantity','1'); Add_Field(XMLNewChild,'OrderLineType','1'); TempWithoutWAT := Get_DecimalFromNode(XMLDiscountNode, 'column[@columnName=''OrderLinePriceWithoutVat'' or @columnName=''OrderLinePriceWithoutVAT'']'); TempWithWAT := ROUND(TempWithoutWAT * (1 + (VatPercent / 100)), 0.01, '='); Add_Field(XMLNewChild,'OrderLinePriceWithoutVat',FORMAT(TempWithoutWAT)); Add_Field(XMLNewChild,'OrderLineUnitPriceWithoutVat',FORMAT(Get_DecimalFromNode(XMLDiscountNode, 'column[@columnName=''OrderLineUnitPriceWithoutVat'' or @columnName=''OrderLineUnitPriceWithoutVAT'']'))); Order_OrderPriceWithVAT := Order_OrderPriceWithVAT + TempWithWAT; Order_OrderPriceWithoutVAT := Order_OrderPriceWithoutVAT + TempWithoutWAT; Order_OrderPriceVAT := Order_OrderPriceWithVAT - Order_OrderPriceWithoutVAT; XMLNewChild := XMLNewChild.ParentNode; END; LOCAL PROCEDURE GetCustomer@1000000055(customerNo@1000000000 : Text;VAR customer@1000000002 : Record 18); BEGIN IF NOT customer.GET(customerNo) THEN BEGIN customer.SETFILTER(Name, '=%1', customerNo); IF NOT customer.FINDFIRST() THEN ERROR(STRSUBSTNO('Customer with name: %1 not found', customerNo)); END; END; LOCAL PROCEDURE GetVersion@1000000053() : Text; VAR appManagement@1000000002 : Codeunit 1; result@1000000006 : Text; pos@1000000000 : Integer; i@1000000001 : Integer; BEGIN result := appManagement.ApplicationVersion(); result := DELCHR(result,'=',DELCHR(result,'=',' 1234567890.')); pos := STRPOS(result, ' ') + 1; IF pos > 1 THEN BEGIN i := pos; WHILE i < STRLEN(result) DO BEGIN IF COPYSTR(result, i, 1) = ' ' THEN pos := i + 1; i := i + 1; END; result := COPYSTR(result, pos); END; result := Version + '_NAV' + result + '.' + appManagement.ApplicationBuild(); EXIT(result) END; LOCAL PROCEDURE GetUOMCode@1000000057(uom@1000000000 : Text) : Text; BEGIN IF uom <> '' THEN BEGIN IF STRPOS(uom, 'Unit_') = 1 THEN EXIT(COPYSTR(uom, 6)) ELSE EXIT(uom); END ELSE EXIT(''); END; LOCAL PROCEDURE GetProductPrices@1000000019(XMLCurrNode@1000000000 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";salesType@1000000001 : Text;salesCode@1000000002 : Text;language@1000000003 : Text;currency@1000000012 : Text;uom@1000000017 : Text); VAR XMLNewChild@1000000004 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; item@1000000005 : Record 27; itemvariants@1000000006 : Record 5401; SalesPrice@1000000007 : Record 7002; salesTypeOption@1000000008 : Option; unitPrice@1000000009 : Text; sPrice@1000000010 : Text; recordLanguage@1000000011 : Record 8; CurrExchRate@1000000013 : Record 330; glSetup@1000000014 : Record 98; currencyFactor@1000000015 : Decimal; CurencyRecord@1000000016 : Record 4; unitOfMeasure@1000000018 : Text; XmlPricesNode@1000000019 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; BEGIN IF (language = '') THEN language := recordLanguage.GetUserLanguage; IF (salesType <> '') THEN BEGIN salesTypeOption := GetSalesType(salesType); END; currencyFactor := 1; glSetup.GET; IF ((currency <> '') AND (currency <> glSetup."LCY Code")) THEN BEGIN CurencyRecord.GET(currency); currencyFactor := CurrExchRate.ExchangeRate(TODAY, CurencyRecord.Code); END; Add_Element(XMLCurrNode, 'table', '', '', XMLNewChild, ''); Add_Attribute(XMLNewChild, 'tableName', 'EcomProducts'); IF (salesType <> '') THEN BEGIN Add_Element(XMLCurrNode, 'table', '', '', XmlPricesNode, ''); Add_Attribute(XmlPricesNode, 'tableName', 'EcomPrices'); END; IF item.FINDSET(FALSE, FALSE) THEN BEGIN REPEAT IF ((currency <> '') AND (currency <> glSetup."LCY Code")) THEN BEGIN unitPrice := FORMAT(ROUND(CurrExchRate.ExchangeAmtLCYToFCY(TODAY, currency, item."Unit Price", currencyFactor), CurencyRecord."Unit-Amount Rounding Precision")); END ELSE unitPrice := FORMAT(item."Unit Price"); IF (salesType <> '') THEN BEGIN IF uom <> '' THEN unitOfMeasure := uom ELSE unitOfMeasure := item."Base Unit of Measure"; sPrice := GetSalesPrice(item."No.", '', salesTypeOption, salesCode, item."Base Unit of Measure", currency); AddProductPrice(item, XMLNewChild, language, '', (sPrice <> ''), unitPrice, sPrice); AddProductEcomPrice(XmlPricesNode, item."No.", '', language, currency, unitPrice, '1', TRUE, 0D, 0D, unitOfMeasure, '', '', ''); AddProductSalesPrices(XmlPricesNode, item."No.", '', unitOfMeasure, language, currency, salesTypeOption, salesCode); END ELSE BEGIN AddProductPrice(item, XMLNewChild, language, '', FALSE, unitPrice, ''); END; CLEAR(itemvariants); itemvariants.SETFILTER(itemvariants."Item No.", '=%1', item."No."); IF itemvariants.FINDSET(FALSE, FALSE) THEN BEGIN REPEAT IF (salesType <> '') THEN BEGIN sPrice := GetSalesPrice(item."No.", itemvariants.Code, salesTypeOption, salesCode, item."Base Unit of Measure", currency); AddProductPrice(item, XMLNewChild, language, itemvariants.Code, (sPrice <> ''), unitPrice, sPrice); AddProductEcomPrice(XmlPricesNode, item."No.", itemvariants.Code, language, currency, unitPrice, '1', TRUE, 0D, 0D, unitOfMeasure, '', '', ''); AddProductSalesPrices(XmlPricesNode, item."No.", itemvariants.Code, unitOfMeasure, language, currency, salesTypeOption, salesCode); END ELSE BEGIN AddProductPrice(item, XMLNewChild, language, itemvariants.Code, FALSE, unitPrice, ''); END; UNTIL itemvariants.NEXT = 0; END; UNTIL item.NEXT = 0; END; END; LOCAL PROCEDURE GetSalesType@1000000056(salesType@1000000000 : Text) : Integer; VAR SalesPrice@1000000001 : Record 7002; BEGIN CASE LOWERCASE(salesType) OF LOWERCASE('Customer'): EXIT(SalesPrice."Sales Type"::Customer); LOWERCASE('Customer Price Group'): EXIT(SalesPrice."Sales Type"::"Customer Price Group"); LOWERCASE('All Customers'): EXIT(SalesPrice."Sales Type"::"All Customers"); LOWERCASE('Campaign'): EXIT(SalesPrice."Sales Type"::Campaign); END; ERROR('Sales type %1 not found', salesType); END; LOCAL PROCEDURE GetSalesPrice@1000000061(itemNo@1000000000 : Text;variant@1000000001 : Text;salesType@1000000002 : Option;salesCode@1000000003 : Text;baseUOM@1000000004 : Text;currency@1000000009 : Text) : Text; VAR SalesPrice@1000000005 : Record 7002; languageUnit@1000000006 : Record 8; sPrice@1000000007 : Text; foundPrice@1000000008 : Decimal; BEGIN SalesPrice.SETFILTER("Item No.", '=%1', itemNo); SalesPrice.SETFILTER("Sales Type", '=%1', salesType); SalesPrice.SETFILTER("Sales Code", '=%1', salesCode); SalesPrice.SETFILTER("Variant Code", '=%1', variant); IF baseUOM <> '' THEN SalesPrice.SETFILTER("Unit of Measure Code", '%1|%2', baseUOM, ''); SalesPrice.SETFILTER("Ending Date", '%1|>=%2', 0D, DT2DATE(CURRENTDATETIME)); SalesPrice.SETFILTER("Starting Date", '%1|<=%2', 0D, DT2DATE(CURRENTDATETIME)); SalesPrice.SETFILTER("Minimum Quantity", '<=%1', 1); SalesPrice.SETFILTER("Currency Code", '=%1', currency); IF SalesPrice.FINDSET(FALSE, FALSE) THEN BEGIN REPEAT IF ((sPrice = '') OR (foundPrice > SalesPrice."Unit Price")) THEN BEGIN foundPrice := SalesPrice."Unit Price"; sPrice := FORMAT(foundPrice); END; UNTIL SalesPrice.NEXT = 0; EXIT(sPrice); END ELSE EXIT(''); END; LOCAL PROCEDURE AddProductPrice@1000000062(item@1000000000 : Record 27;VAR XMLNewChildProd@1000000001 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";language@1000000002 : Text;variant@1000000003 : Text;useCampaignsPrices@1000000004 : Boolean;basePrice@1000000005 : Text;salesPrice@1000000006 : Text); BEGIN Add_Element(XMLNewChildProd, 'item', '', '', XMLNewChildProd, ''); Add_Attribute(XMLNewChildProd, 'table', 'EcomProducts'); Add_Field(XMLNewChildProd, 'ProductID', item."No."); IF (variant <> '') THEN Add_Field(XMLNewChildProd, 'ProductVariantID', variant) ELSE Add_Field(XMLNewChildProd, 'ProductVariantID', ''); Add_Field(XMLNewChildProd, 'ProductLanguageID', language); Add_Field(XMLNewChildProd, 'ProductNumber', item."No."); IF useCampaignsPrices THEN BEGIN Add_Field(XMLNewChildProd, 'ProductPrice', salesPrice); Add_Field(XMLNewChildProd, 'ProductPriceBefore', basePrice); END ELSE BEGIN Add_Field(XMLNewChildProd, 'ProductPrice', basePrice); END; XMLNewChildProd := XMLNewChildProd.ParentNode; END; LOCAL PROCEDURE PutEcomOrder@1000000049(XMLdocIn@1000000000 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlDocument";XMLNode@1000000001 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";VAR XMLdocOut@1000000002 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlDocument";VAR XMLCurrNode@1000000003 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode") : Text; VAR XMLNodeListDiscount@1000000004 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNodeList"; customer@1000000005 : Record 18; useDynamicwebDiscount@1000000006 : Boolean; customerName@1000000007 : Text; message@1000000008 : Text; BEGIN useDynamicwebDiscount := NOT Get_BoolFromNode(XMLNode, 'column[@columnName=''ErpControlsDiscount'']'); IF useDynamicwebDiscount THEN BEGIN XMLNodeListDiscount := XMLdocIn.SelectNodes('/PutEcomOrders/table[@tableName=''EcomOrderLines'']/item[column[@columnName=''OrderLineOrderID''] = ''' + Get_TextFromNode(XMLNode, 'column[@columnName=''OrderID'']') + ''']'); END; customerName := Get_TextFromNode(XMLNode, 'column[@columnName=''OrderCustomerNumber'']'); IF (customerName <> '') THEN BEGIN GetCustomer(customerName, customer); message := CreateOrder(XMLNode, XMLdocIn, XMLCurrNode, useDynamicwebDiscount, XMLNodeListDiscount, Get_TextFromNode(XMLNode, 'column[@columnName=''OrderCurrencyCode'']'), customer, FALSE); IF message <> '' THEN EXIT(message); END ELSE EXIT('Customer name can not be empty'); EXIT(''); END; LOCAL PROCEDURE CreateOrder@1000000063(XMLOrderNode@1000000000 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";VAR XMLdocIn@1000000006 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlDocument";VAR XMLCurrNode@1000000042 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";useDynamicwebDiscount@1000000043 : Boolean;XMLNodeListDiscount@1000000012 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNodeList";orderCurrencyCode@1000000044 : Text;customer@1000000045 : Record 18;isLiveIntegrationRequest@1000000046 : Boolean) : Text; VAR XMLNodeListLines@1000000015 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNodeList"; XMLNode@1000000004 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; XMLNodeDiscount@1000000014 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; salesheader@1000000005 : Record 36; salesline@1000000010 : Record 37; XMLNewChild@1000000009 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; lineno@1000000011 : Integer; pricemgt@1000000021 : Codeunit 7000; TempSalesPrice@1000000020 : TEMPORARY Record 7002; TempSalesLineDisc@1000000019 : TEMPORARY Record 7004; TempSalesHeader@1000000018 : TEMPORARY Record 36; TempSalesLine@1000000017 : TEMPORARY Record 37; VATPostingSetup@1000000016 : Record 325; Discount@1000000024 : Decimal; Total@1000000025 : Decimal; PriceCalcMgt@1000000026 : Codeunit 7000; CurrExchRate@1000000027 : Record 330; dynamicwebDiscountAmount@1000000030 : Decimal; totalDynamicwebDiscountAmount@1000000032 : Decimal; dwProductDiscountSalesLine@1000000029 : Record 37; dwOrderLineIds@1000000033 : ARRAY [10000,2] OF Text; arrayCounter@1000000034 : Integer; orderDiscountPercent@1000000035 : Decimal; productOrderLinesCount@1000000037 : Integer; uom@1000000038 : Text; itemUOM@1000000039 : Record 5404; firstOrderLineItem@1000000041 : Record 27; u@1000000001 : Integer; j@1000000002 : Integer; itemNo@1000000003 : Text; item@1000000007 : Record 27; BEGIN Total := 0; Discount := 0; CLEAR(salesheader); salesheader.INIT; salesheader."Document Type" := salesheader."Document Type"::Order; salesheader."No." := ''; salesheader.INSERT(TRUE); salesheader.VALIDATE("Sell-to Customer No.", customer."No."); salesheader.VALIDATE("Sell-to Address" ,Get_TextFromNode(XMLOrderNode,'column[@columnName=''OrderCustomerAddress'']')); salesheader.VALIDATE("Sell-to Address 2", Get_TextFromNode(XMLOrderNode,'column[@columnName=''OrderCustomerAddress2'']')); salesheader.VALIDATE("Sell-to Post Code" ,Get_TextFromNode(XMLOrderNode,'column[@columnName=''OrderCustomerZip'']')); salesheader.VALIDATE("Sell-to City" ,Get_TextFromNode(XMLOrderNode,'column[@columnName=''OrderCustomerCity'']')); salesheader.VALIDATE("Ship-to Name" ,Get_TextFromNode(XMLOrderNode,'column[@columnName=''OrderDeliveryName'']')); salesheader.VALIDATE("Ship-to Address" ,Get_TextFromNode(XMLOrderNode,'column[@columnName=''OrderDeliveryAddress'']')); salesheader.VALIDATE("Ship-to Address 2", Get_TextFromNode(XMLOrderNode,'column[@columnName=''OrderDeliveryAddress2'']')); salesheader.VALIDATE("Ship-to Post Code" , Get_TextFromNode(XMLOrderNode,'column[@columnName=''OrderDeliveryZip'']')); salesheader.VALIDATE("Ship-to City" , Get_TextFromNode(XMLOrderNode,'column[@columnName=''OrderDeliveryCity'']')); IF Currency.GET(orderCurrencyCode) THEN BEGIN salesheader.VALIDATE("Currency Code" , orderCurrencyCode); END; salesheader.MODIFY(TRUE); lineno := 0; arrayCounter := 1; IF isLiveIntegrationRequest THEN XMLNodeListLines := XMLdocIn.SelectNodes('/tables/table[@tableName=''EcomOrderLines'']/item') ELSE XMLNodeListLines := XMLdocIn.SelectNodes('/PutEcomOrders/table[@tableName=''EcomOrderLines'']/item[column[@columnName=''OrderLineOrderID''] = ''' + Get_TextFromNode(XMLOrderNode, 'column[@columnName=''OrderID'']') + ''']'); IF useDynamicwebDiscount THEN BEGIN //Calculate number of product order lines FOR u := 0 TO XMLNodeListLines.Count() - 1 DO BEGIN XMLNode := XMLNodeListLines.ItemOf(u); IF (Get_TextFromNode(XMLNode,'column[@columnName=''OrderLineProductId'' or @columnName=''OrderLineProductID'']') <> '') AND ( (Get_TextFromNode(XMLNode,'column[@columnName=''OrderLineType'']') = '2') OR (Get_TextFromNode(XMLNode,'column[@columnName=''OrderLineType'']') = '0'))THEN productOrderLinesCount := productOrderLinesCount + 1; END; END; IF isLiveIntegrationRequest THEN BEGIN Add_Element(XMLCurrNode,'table','','',XMLNewChild,''); END ELSE BEGIN XMLNewChild := XMLCurrNode.OwnerDocument.CreateNode('element', 'dummy', ''); Add_Element(XMLNewChild, 'table', '', '', XMLNewChild, ''); END; Add_Attribute(XMLNewChild,'tableName','EcomOrderLines'); FOR u := 0 TO XMLNodeListLines.Count() - 1 DO BEGIN XMLNode := XMLNodeListLines.ItemOf(u); IF Get_TextFromNode(XMLNode,'column[@columnName=''OrderLineProductId'' or @columnName=''OrderLineProductID'']') <> '' THEN BEGIN salesline.INIT; salesline."Document Type" := salesheader."Document Type"; salesline."Document No." := salesheader."No."; lineno += 10000; salesline."Line No." := lineno; salesline.Type := salesline.Type::Item; itemNo := DELCHR(Get_TextFromNode(XMLNode, 'column[@columnName=''OrderLineProductId'' or @columnName=''OrderLineProductID'']'), '=', '(|)'); IF NOT item.GET(itemNo) THEN BEGIN IF isLiveIntegrationRequest THEN ERROR('Item %1 does not exists', itemNo) ELSE EXIT(STRSUBSTNO('Item %1 does not exists', itemNo)); END; salesline.VALIDATE("No.", itemNo); uom := GetUOMCode(Get_TextFromNode(XMLNode,'column[@columnName=''OrderLineUnitId'' or @columnName=''OrderLineUnitID'']')); IF uom <> '' THEN BEGIN salesline.VALIDATE("Unit of Measure Code", uom); END; salesline.VALIDATE(Quantity,Get_DecimalFromNode(XMLNode,'column[@columnName=''OrderLineQuantity'']')); IF u = 0 THEN firstOrderLineItem := item; VATPostingSetup.GET(customer."VAT Bus. Posting Group",item."VAT Prod. Posting Group"); IF useDynamicwebDiscount THEN BEGIN dynamicwebDiscountAmount := 0; totalDynamicwebDiscountAmount := 0; salesline.VALIDATE("Line Discount %", 0); IF Get_TextFromNode(XMLNode,'column[@columnName=''OrderLineType'']') <> '3' THEN BEGIN dwOrderLineIds[arrayCounter][1] := Get_TextFromNode(XMLNode,'column[@columnName=''OrderLineId'' or @columnName=''OrderLineID'']'); dwOrderLineIds[arrayCounter][2] := FORMAT(salesline."Line No."); arrayCounter := arrayCounter + 1; FOR j := 0 TO XMLNodeListDiscount.Count - 1 DO BEGIN XMLNodeDiscount := XMLNodeListDiscount.ItemOf(j); IF (Get_TextFromNode(XMLNode,'column[@columnName=''OrderLineId'' or @columnName=''OrderLineID'']') = Get_TextFromNode(XMLNodeDiscount,'column[@columnName=''OrderLineParentLineId'' or @columnName=''OrderLineParentLineID'']')) AND (Get_TextFromNode(XMLNodeDiscount,'column[@columnName=''OrderLineProductId'' or @columnName=''OrderLineProductID'']') = '') THEN BEGIN //handle orderline discount dynamicwebDiscountAmount := -Get_DecimalFromNode(XMLNodeDiscount,'column[@columnName=''OrderLineUnitPriceWithoutVat'' or @columnName=''OrderLineUnitPriceWithoutVAT'']'); IF dynamicwebDiscountAmount <> 0 THEN BEGIN totalDynamicwebDiscountAmount := totalDynamicwebDiscountAmount + dynamicwebDiscountAmount; salesline.VALIDATE("Line Discount %", ROUND((dynamicwebDiscountAmount / Get_DecimalFromNode(XMLNode,'column[@columnName=''OrderLinePriceWithoutVat'' or @columnName=''OrderLinePriceWithoutVAT'']')) * 100, 0.01, '=')); Add_SalesLine(salesheader,salesline,XMLNewChild,salesline."No.",FALSE,TRUE, Get_TextFromNode(XMLNodeDiscount,'column[@columnName=''OrderLineDiscountId'' or @columnName=''OrderLineDiscountID'']]'), Get_TextFromNode(XMLNodeDiscount,'column[@columnName=''OrderLineProductName'']')); WriteNote(GetSalesLineDiscountNoteText(XMLNodeDiscount, salesline."Line No.", dwOrderLineIds, orderCurrencyCode), salesheader); END; END ELSE IF (Get_TextFromNode(XMLNodeDiscount,'column[@columnName=''OrderLineType'']') = '1') THEN BEGIN //handle order discounts dynamicwebDiscountAmount := -Get_DecimalFromNode(XMLNodeDiscount,'column[@columnName=''OrderLineUnitPriceWithoutVat'' or @columnName=''OrderLineUnitPriceWithoutVAT'']'); IF productOrderLinesCount > 1 THEN dynamicwebDiscountAmount := ROUND(dynamicwebDiscountAmount / productOrderLinesCount, 0.01, '='); IF dynamicwebDiscountAmount <> 0 THEN BEGIN totalDynamicwebDiscountAmount := totalDynamicwebDiscountAmount + dynamicwebDiscountAmount; dynamicwebDiscountAmount := totalDynamicwebDiscountAmount; salesline.VALIDATE("Line Discount %", ROUND((dynamicwebDiscountAmount / Get_DecimalFromNode(XMLNode,'column[@columnName=''OrderLinePriceWithoutVat'' or @columnName=''OrderLinePriceWithoutVAT'']')) * 100, 0.01, '=')); WriteNote(GetSalesLineDiscountNoteText(XMLNodeDiscount, salesline."Line No.", dwOrderLineIds, orderCurrencyCode), salesheader); END; END; END; IF (totalDynamicwebDiscountAmount <> 0) AND (totalDynamicwebDiscountAmount <> dynamicwebDiscountAmount) THEN BEGIN salesline.VALIDATE("Line Discount %", ROUND((totalDynamicwebDiscountAmount / Get_DecimalFromNode(XMLNode,'column[@columnName=''OrderLinePriceWithoutVat'' or @columnName=''OrderLinePriceWithoutVAT'']')) * 100, 0.01, '=')); END; END ELSE BEGIN salesline.VALIDATE("Unit Price", 0); END; END; salesline.INSERT(TRUE); IF (Get_TextFromNode(XMLNode,'column[@columnName=''OrderLineType'']') <> '3') THEN BEGIN Add_SalesLine(salesheader, salesline,XMLNewChild,'',FALSE,TRUE,'',''); END ELSE BEGIN Add_SalesLine(salesheader, salesline,XMLNewChild,Get_TextFromNode(XMLNode,'column[@columnName=''OrderLineParentLineId'' or @columnName=''OrderLineParentLineID'']'),FALSE,TRUE, Get_TextFromNode(XMLNode,'column[@columnName=''OrderLineDiscountId'' or @columnName=''OrderLineDiscountID'']'),Get_TextFromNode(XMLNode,'column[@columnName=''OrderLineProductName'']')); IF useDynamicwebDiscount THEN BEGIN WriteNote(GetSalesLineDiscountNoteText(XMLNode, salesline."Line No.", dwOrderLineIds, orderCurrencyCode), salesheader); END; END; IF (salesline."Line Discount Amount" <> 0) THEN IF NOT useDynamicwebDiscount THEN Add_SalesLine(salesheader,salesline,XMLNewChild,salesline."No.",FALSE,TRUE, '',''); //ELSE //Add_SalesLine(salesheader,salesline,XMLNewChild,salesline."No.",FALSE,TRUE, 'empty','empty'); END ELSE IF (Get_TextFromNode(XMLNode,'column[@columnName=''OrderLineType'']') = '1') AND useDynamicwebDiscount THEN BEGIN //handle DW Order discount order lines Add_DynamicwebOrderDiscountSalesLine(XMLNewChild, XMLNode, VATPostingSetup."VAT %"); END; END; IF NOT useDynamicwebDiscount THEN BEGIN CalculateIncDiscForHeader(salesheader); orderDiscountPercent := salesheader."Invoice Discount Value"; IF orderDiscountPercent > 0 THEN BEGIN salesheader.MODIFY(); Add_NavOrderDiscountSalesLine(XMLNewChild, orderDiscountPercent, VATPostingSetup."VAT %", salesheader); END; END; IF (isLiveIntegrationRequest) THEN BEGIN Add_Element(XMLCurrNode,'table','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'tableName','EcomOrders'); Add_Element(XMLNewChild,'item','','',XMLNewChild,''); Add_Attribute(XMLNewChild,'table','EcomOrders'); lineno += 10000; Add_Shipping(XMLNewChild, XMLOrderNode, lineno, salesheader, TRUE, firstOrderLineItem); Add_SalesHeader(salesheader,XMLNewChild,FALSE,Total,Discount,FALSE,TRUE); END ELSE BEGIN Add_Element(XMLCurrNode, 'order', '', '', XMLNewChild,''); Add_Element(XMLNewChild, 'OrderID', Get_TextFromNode(XMLOrderNode, 'column[@columnName=''OrderID'']'), '', XMLNode,''); Add_Element(XMLNewChild, 'externalOrderId', salesheader."No.", '', XMLNode,''); END; END; LOCAL PROCEDURE AddProductSalesPrices@1000000069(VAR XmlPricesNode@1000000000 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";itemNo@1000000001 : Text;variant@1000000002 : Text;uom@1000000003 : Text;language@1000000004 : Text;currency@1000000007 : Text;salesType@1000000008 : Option;salesCode@1000000009 : Text); VAR SalesPrice@1000000005 : Record 7002; BEGIN SalesPrice.SETFILTER("Item No.", '=%1', itemNo); SalesPrice.SETFILTER("Variant Code", '=%1', variant); SalesPrice.SETFILTER("Sales Type", '=%1', salesType); SalesPrice.SETFILTER("Sales Code", '=%1', salesCode); IF uom <> '' THEN SalesPrice.SETFILTER("Unit of Measure Code", '%1|%2', uom, ''); IF currency <> '' THEN SalesPrice.SETFILTER("Currency Code", '=%1', currency); IF SalesPrice.FINDSET(FALSE, FALSE) THEN BEGIN REPEAT AddProductEcomPrice(XmlPricesNode, itemNo, variant, language, SalesPrice."Currency Code", FORMAT(SalesPrice."Unit Price"), FORMAT(SalesPrice."Minimum Quantity"), FALSE, SalesPrice."Starting Date", SalesPrice."Ending Date", uom, '', SalesPrice."Sales Code", FORMAT(SalesPrice."Sales Type")); UNTIL SalesPrice.NEXT = 0; END; END; LOCAL PROCEDURE AddProductEcomPrice@1000000071(VAR XmlPricesNode@1000000000 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";itemNo@1000000001 : Text;variant@1000000002 : Text;language@1000000003 : Text;currency@1000000004 : Text;price@1000000005 : Text;quantity@1000000006 : Text;isInformaive@1000000007 : Boolean;startDate@1000000008 : Date;endDate@1000000009 : Date;uom@1000000010 : Text;customerNumber@1000000011 : Text;salesCode@1000000012 : Text;salesType@1000000013 : Text); VAR glSetup@1000000014 : Record 98; pXmlNode@1000000015 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; BEGIN glSetup.GET; Add_Element(XmlPricesNode, 'item', '', '', pXmlNode, ''); Add_Attribute(pXmlNode, 'table', 'EcomPrices'); Add_Field(pXmlNode, 'PriceId', DELCHR( STRSUBSTNO('%1%2%3%4%5%6%7%8%9', itemNo, variant, language, currency, quantity, FORMAT(startDate, 0, ''), uom, salesCode, salesType), '=', '(|)|''')); Add_Field(pXmlNode, 'PriceProductId', itemNo); IF (variant <> '') THEN Add_Field(pXmlNode, 'PriceProductVariantId', variant) ELSE Add_Field(pXmlNode, 'PriceProductVariantId', ''); Add_Field(pXmlNode, 'PriceProductLanguageId', language); IF (currency = '') THEN Add_Field(pXmlNode, 'PriceCurrency', glSetup."LCY Code") ELSE Add_Field(pXmlNode, 'PriceCurrency', currency); Add_Field(pXmlNode, 'PriceQuantity', quantity); Add_Field(pXmlNode, 'PriceAmount', price); Add_Field(pXmlNode, 'PriceUnitId', uom); IF startDate = 0D THEN Add_Field(pXmlNode, 'PriceValidFrom', '') ELSE Add_Field(pXmlNode, 'PriceValidFrom', FORMAT(startDate, 0, '//')); IF endDate = 0D THEN Add_Field(pXmlNode, 'PriceValidTo', '') ELSE Add_Field(pXmlNode, 'PriceValidTo', FORMAT(endDate, 0, '//')); IF isInformaive THEN Add_Field(pXmlNode, 'PriceIsInformative', 'true') ELSE Add_Field(pXmlNode, 'PriceIsInformative', 'false'); Add_Field(pXmlNode, 'PriceUserCustomerNumber', customerNumber); END; LOCAL PROCEDURE GetAllEcomData@1000000064(VAR Request@1000000001 : BigText;XMLdocIn@1000000000 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlDocument"); VAR Header@1000000006 : Text[1000]; XMLCurrNode@1000000005 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; XMLNewChild@1000000004 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; XMLdocOut@1000000003 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlDocument"; pNode@1000000002 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; XMLFilterNode@1000000007 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNodeList"; BEGIN XMLdocOut := XMLdocOut.XmlDocument; Header := ''; XMLdocOut.LoadXml(Header); XMLCurrNode := XMLdocOut.DocumentElement; Add_Element(XMLCurrNode, 'response', '', '', pNode,''); Add_Attribute(pNode, 'name', 'Languages'); Add_Attribute(pNode, 'query', ''); Add_EcomLanguages(pNode, TRUE,XMLFilterNode); Add_Element(XMLCurrNode, 'response', '', '', pNode,''); Add_Attribute(pNode, 'name', 'Countries'); Add_Attribute(pNode, 'query', ''); Add_EcomCountries(pNode, TRUE,XMLFilterNode); Add_Element(XMLCurrNode, 'response', '', '', pNode,''); Add_Attribute(pNode, 'name', 'Currencies'); Add_Attribute(pNode, 'query', ''); Add_EcomCurrencies(pNode, TRUE,XMLFilterNode); Add_Element(XMLCurrNode, 'response', '', '', pNode,''); Add_Attribute(pNode, 'name', 'Users'); Add_Attribute(pNode, 'query', ''); //Users /GetEcomData/tables/Users/@type') = 'all' /GetEcomData/tables/Contacts/@type') = 'all' //'/GetEcomData/tables/Customers/@type') = 'all' Add_AccessUser(pNode, TRUE, XMLFilterNode, TRUE); Add_Element(XMLCurrNode, 'response', '', '', pNode,''); Add_Attribute(pNode, 'name', 'Addresses'); Add_Attribute(pNode, 'query', ''); Add_AccessUserAddress(pNode, TRUE, XMLFilterNode); Add_Element(XMLCurrNode, 'response', '', '', pNode,''); Add_Attribute(pNode, 'name', 'Manufacturers'); Add_Attribute(pNode, 'query', ''); Add_EcomManufacturers(pNode, TRUE,XMLFilterNode); Add_Element(XMLCurrNode, 'response', '', '', pNode,''); Add_Attribute(pNode, 'name', 'Units'); Add_Attribute(pNode, 'query', ''); Add_Units(pNode); //Products Add_Element(XMLCurrNode, 'response', '', '', pNode,''); Add_Attribute(pNode, 'name', 'ProductGroups'); Add_Attribute(pNode, 'query', ''); Add_EcomGroups(XMLdocIn, pNode); Add_Element(XMLCurrNode, 'response', '', '', pNode,''); Add_Attribute(pNode, 'name', 'Products'); Add_Attribute(pNode, 'query', ''); Add_EcomProducts(XMLdocIn, pNode, TRUE); Add_Element(XMLCurrNode, 'response', '', '', pNode,''); Add_Attribute(pNode, 'name', 'ProductStockAndUnitsAndLocations'); Add_Attribute(pNode, 'query', ''); Add_Locations(pNode); Add_StockUnits(pNode); Add_ProductsStock(pNode); // //End products Add_Element(XMLCurrNode, 'response', '', '', pNode,''); Add_Attribute(pNode, 'name', 'ProductPrices'); Add_Attribute(pNode, 'query', ''); GetProductPrices(pNode, 'All customers', '', Get_TextFromNode(XMLdocIn, '/GetAllEcomData/@setLanguage'),'', ''); ConvertXmlToBigText(XMLdocOut,Request); END; BEGIN END. } }