¿Necesitas obtener el precio de un artículo que tiene un acuerdo comercial, ya sea de compra o de venta? ¡Pues aquí tenemos a nuestra amiga la clase PriceDisc para salvarnos!
Esto es uno de esos post referencia que escribo para el Adrià del futuro, porque es algo que olvido con una facilidad pasmosa.
¡La magia del PriceDisc!
Existe un método obsoleto, creo que el findItemPriceAgreement, para obtener el precio, pero está obsoleto como acabo de decir. Así que lo más sencillo es usar la clase PriceDisc que sustituye al método obsoleto.
Para usarlo sólo tenemos que instanciar un objeto de tipo PriceDiscParameters y llamar a sus métodos parm. Luego creamos otro objeto de tipo PriceDisc usando el método newFromPriceDiscParameters y pasándole el de tipo PriceDiscParameters, y… bueno, mejor echa un ojo al código:
public static Amount getPrice(AccountNum _accountNum,
CurrencyCode _currencyCode,
InventDim _inventDim,
ItemId _itemId,
ModuleInventPurchSales _module,
TransDate _date,
Qty _qty,
UnitId _unitId,
PriceGroupId _priceGroupId)
{
PriceDiscParameters priceDiscParameters = PriceDiscParameters::construct();
priceDiscParameters.parmAccountNum(_accountNum);
priceDiscParameters.parmCurrencyCode(_currencyCode);
priceDiscParameters.parmInventDim(_inventDim);
priceDiscParameters.parmItemId(_itemId);
priceDiscParameters.parmModuleType(_module);
priceDiscParameters.parmPriceDiscDate(_date);
priceDiscParameters.parmQty(_qty);
priceDiscParameters.parmUnitId(_unitId);
PriceDisc priceDisc = PriceDisc::newFromPriceDiscParameters(priceDiscParameters);
priceDisc.findPrice(_priceGroupId);
return priceDisc.price();
}
Y nada, ya está, eso es todo. Sé que es una entrada bastante estúpida, pero yo también lo soy y se me olvidan estas cosas.