Attached Files | M_PRODUCTION_RUN2 (1).diff [^] (5,339 bytes) 2014-09-08 07:25 [Show Content] [Hide Content]--- libelium/actualizaciones/08_Agosto_14/Cambios_01082014/M_PRODUCTION_RUN_OLD.xml 2014-07-30 16:41:47.273460000 +0200
+++ desarrollos/openbravo/src-db/database/model/functions/M_PRODUCTION_RUN.xml 2014-09-03 12:11:48.426763317 +0200
@@ -33,7 +33,11 @@
************************************************************************/
-- Logistice
v_ResultStr VARCHAR2(2000):='';
+ v_ProductOutOfStock VARCHAR2(2000):='';
+ v_ProductMCheckStock VARCHAR2(2000):='';
v_Message VARCHAR2(2000):='';
+ v_IndentTitle varchar(2000):='';
+ v_IndentChange varchar(2000):='';
v_Record_ID VARCHAR2(32);
v_Result NUMBER:=1;
v_is_included NUMBER:=0;
@@ -218,7 +222,7 @@
BEGIN
FOR CUR_BOM IN (
SELECT pb.*,
- p.C_UOM_ID, p.IsStocked, pp.M_LOCATOR_ID, pp.AD_Org_ID AS ORG_ID,
+ p.C_UOM_ID, p.IsStocked, pp.M_LOCATOR_ID, pp.AD_Org_ID AS ORG_ID, p.PRODUCTTYPE as PRODUCTTYPE,
pp.ProductionQty, pp.M_ProductionPlan_ID, pp.AD_Client_ID AS Client_ID, p.name as pname,
l.m_warehouse_id
FROM M_PRODUCT_BOM pb
@@ -351,14 +355,17 @@
END IF;
v_Line:=v_Line;
IF (v_QtyAcumulated < CUR_BOM.BOMQTY*CUR_BOM.ProductionQty) AND MustBeStocked='Y' THEN
- v_Message := '@NotEnoughStocked@: ' || CUR_BOM.pname || ' ' || v_QtyAcumulated || ' / '|| CUR_BOM.BOMQTY*CUR_BOM.ProductionQty;
- RAISE_APPLICATION_ERROR(-20000, v_Message);
+ v_ProductOutOfStock:='<i>'||v_ProductOutOfStock||' '|| CUR_BOM.pname ||' - {' || v_QtyAcumulated || ' / '|| CUR_BOM.BOMQTY*CUR_BOM.ProductionQty||'}</i><br>';
END IF;
- IF (CUR_BOM.ProductionQty <= 0) THEN
+ IF CUR_BOM.ProductionQty <= 0 AND CUR_BOM.PRODUCTTYPE='I' THEN
v_Message := '@NegativeBOMProductionQty@';
RAISE_APPLICATION_ERROR(-20000, v_Message);
END IF;
END LOOP;
+ --If the product doesn't have enough materials to be creaed
+ IF v_ProductOutOfStock<>'' AND CUR_BOM.PRODUCTTYPE='I' THEN
+ RAISE_APPLICATION_ERROR(-20000, '@NotEnoughStocked@ <br>'||v_ProductOutOfStock);
+ END IF;
IF (CUR_STOCK_ISOPEN) THEN
CLOSE CUR_STOCK;
CUR_STOCK_ISOPEN := false;
@@ -531,7 +538,7 @@
-- All Production Lines
FOR CUR_PL_Post IN (
SELECT pl.M_ProductionLine_ID, pl.AD_Client_ID, pl.AD_Org_ID, p.MovementDate,
- pl.M_Product_ID, pl.M_AttributeSetInstance_ID, pl.MovementQty, pl.M_Locator_ID,
+ pl.M_Product_ID, pl.M_AttributeSetInstance_ID, pl.MovementQty,pp.m_product_id as m_productionplan_id, pl.M_Locator_ID,
pl.M_Product_UOM_ID, pl.QuantityOrder, pl.C_UOM_ID, pl.LINE
FROM M_PRODUCTION p, M_PRODUCTIONLINE pl, M_PRODUCTIONPLAN pp
WHERE p.M_Production_ID=pp.M_Production_ID
@@ -544,11 +551,11 @@
-- DBMS_OUTPUT.PUT_LINE(' Qty=' || pl.MovementQty || ', OnHand=' || M_BOM_Qty_OnHand(pl.M_Product_ID, NULL, pl.M_Locator_ID));
-- Check Stock levels for reductions
IF (CUR_PL_Post.MovementQty<0 AND MustBeStocked<>'N' AND M_BOM_Qty_OnHand(CUR_PL_Post.M_Product_ID, NULL, CUR_PL_Post.M_Locator_ID) +CUR_PL_Post.MovementQty<0) THEN
- SELECT '@NotEnoughStocked@: ' || Name INTO v_Message
+ SELECT Name INTO v_Message
FROM M_PRODUCT
WHERE M_Product_ID=CUR_PL_Post.M_Product_ID;
- RAISE_APPLICATION_ERROR(-20000, v_Message);
- END IF;
+ v_ProductOutOfStock:=v_ProductOutOfStock||'<i> @Inline@ ' || CUR_PL_Post.line||': '||v_Message||'</i><br> ';
+ END IF;
-- Create Transaction Entry
v_ResultStr:='CreateTransaction';
INSERT INTO M_TRANSACTION (
@@ -566,12 +573,31 @@
CUR_PL_Post.MovementDate, CUR_PL_Post.MovementQty, CUR_PL_Post.M_Product_UOM_ID, CUR_PL_Post.QuantityOrder,
CUR_PL_Post.C_UOM_ID
);
- M_Check_Stock(CUR_PL_Post.M_Product_ID, v_Client_ID, v_Org_ID, v_Result, v_Message) ;
- IF (v_Result = 0) THEN
- v_Message:=v_Message || ' @Inline@ ' || CUR_PL_Post.line;
- RAISE_APPLICATION_ERROR(-20000, v_Message);
- END IF;
+ --If the product is a service, probably haven
+ IF ((select producttype from m_product where m_product_id=CUR_PL_Post.M_Product_ID)='I') THEN
+ M_Check_Stock(CUR_PL_Post.M_Product_ID, v_Client_ID, v_Org_ID, v_Result, v_Message) ;
+ IF (v_Result = 0) THEN
+ SELECT Name INTO v_IndentTitle
+ FROM M_PRODUCT
+ WHERE M_Product_ID=CUR_PL_Post.m_productionplan_id;
+ if v_IndentTitle<>v_IndentChange THEN
+ v_ProductMCheckStock:=v_ProductMCheckStock||' '||v_IndentTitle||'<br>';
+ v_IndentChange:=v_IndentTitle;
+ END IF;
+ SELECT Name INTO v_Message
+ FROM M_PRODUCT
+ WHERE M_Product_ID=CUR_PL_Post.M_Product_ID;
+ v_ProductMCheckStock:=v_ProductMCheckStock||'<i>        @Inline@ ' || CUR_PL_Post.line||': '||v_Message||'</i><br> ';
+ END IF;
+ END IF;
END LOOP;
+ -- If any product is out of stock
+ IF v_ProductOutOfStock<>'' THEN
+ RAISE_APPLICATION_ERROR(-20000, '@NotEnoughStocked@ <br>'||v_ProductOutOfStock);
+ END IF;
+ IF v_ProductMCheckStock<>'' THEN
+ RAISE_APPLICATION_ERROR(-20000, '@NotEnoughStocked@ <br>'||v_ProductMCheckStock);
+ END IF;
-- Indicate that we are done
UPDATE M_PRODUCTION
SET Processed='Y',
|