#35767
Javier Ader
Participante

Que tal Fede. En teoria deberias correr los scripts y nada mas; lo que hacen simplemente es redefinir (usando un CREATE O REPLACE FUNCTION ) las funciones hechas en PL/Java para que ahora usen la definición en PGSql, pero manteniendo el mismo nombre y los mismo parametros y tipos.
Pongo como ejemplo solo para las funciones BOMPrice:

NOTA: ahi mire y el parece me falto poner en el repostitorio bomPriceStd (estaba bomPriceStd.txt pero era incorrecta); ahi subi el nuevo bomPriceStd-2int , lo puede bajar dese aca http://pgsqllib.hg.sourceforge.net/hgweb/pgsqllib/pgsqllib/raw-file/cc64eff3e474/BOM/BOMPriceStd-2int.sql ; simplemente copiar y pegar)

1) Ejecutar ROUND.sql : crea una nueva funcion requerida por las demas funciones PGSQL
(todos los siguientes estan bajo dir BOM)
2) PriceLimit:
2.1) Correr BOMPriceLimit-2int-conCorreccionNull.sql y BOMPriceLimit-3int.sql (esto redefine la actuales funciones PL/java libertya.bompricelimit(m_product_id integer, m_pricelist_version_id integer) y libertya.bompricelimit(m_product_id integer, m_pricelist_version_id integer, m_attributesetinstance_id integer). La cnatidad de funiones en este este punto es identica a la anterior.
3) PriceList: idem anterior pero corriendo BOMPriceList-2int.sql y BOMPriceList-3int.sql
4) PriceStd: correr http://pgsqllib.hg.sourceforge.net/hgweb/pgsqllib/pgsqllib/raw-file/cc64eff3e474/BOM/BOMPriceStd-2int.sql (ya que no esta en el zip que postie antes) y BOMPriceStd-3int.sql

En este punto podes correr este test:

Code:
set search_path to libertya;

select
P.M_Product_ID,p.Name,PP.M_PriceList_Version_ID,
bomPriceStd(P.M_product_ID,PP.M_PriceList_Version_ID),
bomPriceLimit(P.M_product_ID,PP.M_PriceList_Version_ID),
bomPriceList(P.M_product_ID,PP.M_PriceList_Version_ID),
P.AD_Client_ID
from
M_Product P inner join M_ProductPrice PP on (p.M_Product_ID = PP.M_Product_ID);

o (los precios de todos los productos en todas las versiones de lista activas)

Code:
select
P.M_Product_ID,p.Name,PLV.M_PriceList_Version_ID,
bomPriceStd(P.M_product_ID,PLV.M_PriceList_Version_ID),
bomPriceLimit(P.M_product_ID,PLV.M_PriceList_Version_ID),
bomPriceList(P.M_product_ID,PLV.M_PriceList_Version_ID),
P.AD_Client_ID
from M_Product P inner join M_PriceList_Version PLV
on ( P.AD_Client_ID = PLV.AD_Client_ID)
where P.AD_CLient_ID = 1010016
AND PLV.IsActive = ‘Y’

En este punto, logueandote en libertya y abriendo la ventana de información de productos, estarías testeano de otra manera las mismas funciones. Esta ventana también usa las BOMQty, que tambien estan hechas actualmente en PL/Java, asi si queres, que para migrarla totalmente deberias correr los siguientes scripts:

5) BOMQty
-BOMQtyReserved-3-int.sql, BOMQtyOrdered-3-int.sql,BOMQtyOnHand-3-int.sql, BOMQtyAvailable-3-int.sql

Después de esto, todas la funciones PL/Java relativas a precios y stock estarían migradas.


Aprovecho y planteo una cosa sobre los productos BOM, que actualmente hace que las funciones BOMPrice sean muy costosas (tambien en PGSql) cuando no encuentran el precio de manera directa: M_Product.IsBOM actualmente no se esta teniendo en cuenta en algoritmo (tampoco en PL/Java), por lo tanto a veces se cae en una llamada recursiva innecesaria. Dicho esto, pregunto, si un product es BOM, tiene que tener este flag en ‘Y’ no?