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 + '';
END ELSE BEGIN
defaultOptionsText := defaultOptionsText + '';
END;
UNTIL ItemAttributeValues.NEXT=0;
END;
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 + '';
END ELSE BEGIN
optionsText := optionsText + '';
END;
UNTIL ItemAttributeValues.NEXT=0;
END;
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.
}
}