static
void
demo_CRT_GetSalesPrice(Args _args)
{
//To test this code, use the AX 2012 R3 CU8, and use the USRT company
Microsoft.Dynamics.Commerce.Runtime.Data.IPricingDataManagerV2 pricingManager;
Microsoft.Dynamics.Commerce.Runtime.Services.PricingEngine.DiscountParameters priceParameters;
Microsoft.Dynamics.Commerce.Runtime.DataModel.SalesLine crtSalesLine;
Microsoft.Dynamics.Commerce.Runtime.DataModel.SalesTransaction crtSalesTransaction;
System.Object roundingRule, currencyConverter;
CLRObject clrSalesLines, enumeratorSalesLine;
CLRObject clrObjectSalesLines;
System.DateTimeOffset activeDateTimeOffset;
System.String lineIdString;
System.String customerPriceGroup =
""
;
Price price;
Qty qty;
InventDim inventdim;
RetailStoreTable storeTable = RetailStoreTable::find(
"HOUSTON"
);
//Lets use houston as an example here
RetailChannelRecId channelId = storeTable.RecId;
//This is the recid for a retail channel. A retail store is an extension of a retail channel.
CurrencyCode currencyCode = storeTable.Currency;
appl.setDefaultCompany(storeTable.company(),
false
);
//Setting default company to houstons company
//Creating a unique line ID
lineIdString = System.Guid::NewGuid().toString();
InventDim.InventLocationId = storeTable.inventLocation;
InventDim.InventSiteId = InventLocation::find(storeTable.inventLocation).InventSiteId;
InventDim = InventDim::findOrCreate(InventDim);
//Pricing manager : Encapsulates data access to pricing information.
pricingManager = Microsoft.Dynamics.Commerce.Headquarters.RetailProxy.AxPricingDataManager::BuildDataManager(channelId);
//Price parameters : types of AX discounts (aka trade agreement discounts, aka not Retail Periodic Discounts) are currently activated and should be allowed on the transaction
priceParameters = Microsoft.Dynamics.Commerce.Runtime.Services.PricingEngine.DiscountParameters::CreateAndInitialize(pricingManager);
roundingRule = Microsoft.Dynamics.Commerce.Headquarters.RetailProxy.ServiceHelpers::GetRoundingMethod(currencyCode);
currencyConverter = Microsoft.Dynamics.Commerce.Headquarters.RetailProxy.ServiceHelpers::GetCurrencyConverter(currencyCode);
activeDateTimeOffset = RetailPricingEngineHelper::getSessionDateTimeInChannelTimeZone(channelId);
//Next we create a crtSalesLine, that represents a channel agnostic sales line.
crtSalesLine =
new
Microsoft.Dynamics.Commerce.Runtime.DataModel.SalesLine();
crtSalesLine.set_ItemId(
"0001"
);
//Lets use product 0001 as our example
crtSalesLine.set_InventoryDimensionId(InventDim.inventDimId);
crtSalesLine.set_Quantity(10);
//Lets use quantity 10 as our example
crtSalesLine.set_LineId(lineIdString);
//Let give this line a uniqe ID
crtSalesLine.set_UnitOfMeasureSymbol(
"ea"
);
//Let use 'ea' as the unit
//We then create a sales transaction, and add the salesline to this.
crtSalesTransaction =
new
Microsoft.Dynamics.Commerce.Runtime.DataModel.SalesTransaction();
clrObjectSalesLines = crtSalesTransaction.get_SalesLines();
clrObjectSalesLines.Add(crtSalesLine);
//This is where the we add the salesLine to the sales transaction
//Lets calculate the prices
Microsoft.Dynamics.Commerce.Runtime.Services.PricingEngine.PricingEngine::CalculatePricesForTransaction(
crtSalesTransaction,
pricingManager,
roundingRule,
currencyConverter,
customerPriceGroup,
currencyCode,
false
,
activeDateTimeOffset);
//Lets calculate the discounts
Microsoft.Dynamics.Commerce.Runtime.Services.PricingEngine.PricingEngine::CalculateDiscountsForLines(
pricingManager,
crtSalesTransaction,
roundingRule,
currencyConverter,
currencyCode,
''
,
''
,
''
,
true
,
Microsoft.Dynamics.Commerce.Runtime.DataModel.DiscountCalculationMode::CalculateAll,
activeDateTimeOffset);
//And, let's show what the CRT can give us.
qty = crtSalesLine.get_Quantity();
Price = crtSalesLine.get_Price();
info(strFmt(
"Normal sales price is %1 when buying %2"
, price, qty ));
Price = crtSalesLine.get_DiscountAmount();
info(strFmt(
"Discount amount pr unit is %1, when buying %2"
, price/qty, qty ));
Price = crtSalesLine.get_NetAmountPerUnit();
info(strFmt(
"Net amount pr unit is %1, when buying %2"
, price, qty ));
Price = crtSalesLine.get_TotalAmount();
info(strFmt(
"Total amount is %1 when buying %2"
, price, qty ));
}
Reference :- Thanks Mr. Kurt Hatlevik for sharing knowledge
https://kurthatlevik.com/2015/05/21/dax2012-r3-playing-with-retail-crt/