ALTER PROC [dbo].[TR_REQ_GOOD_BYCONTRACT] @p_REF_ID VARCHAR(150) AS BEGIN DECLARE @l_LST_REF_ID TABLE ( [REF_ID] VARCHAR(15)) --LAY THONG TIN SO SERI --INSERT INTO @l_LSTSERI SELECT ROW_NUMBER() OVER (ORDER BY VALUE), VALUE FROM WSISPLIT(@l_ASSET_SERIAL_NO,',') INSERT INTO @l_LST_REF_ID SELECT VALUE FROM WSISPLIT(@p_REF_ID,',') DECLARE @PYC_MS_ID VARCHAR(15) IF(EXISTS(SELECT * FROM TR_CONTRACT WHERE (CONTRACT_ID =@p_REF_ID OR CONTRACT_ID IN (SELECT * FROM @l_LST_REF_ID)))) BEGIN SET @PYC_MS_ID = (SELECT REQ_DOC_ID FROM TR_CONTRACT WHERE CONTRACT_ID =@p_REF_ID) --- BAT DAU LAY DU LIEU SELECT PM.PLAN_ID,PM.PLAN_CODE,PLDT.TRADE_ID,DT.GOODS_ID,CG.GD_CODE,CG.GD_NAME,PM.BRANCH_ID,PM.DEPT_ID, ISNULL(PLDT.QUANTITY,0) AS QUANTITY, ISNULL(DT.QUANTITY_EXE,0) AS QUANTITY_EXE, ISNULL(DT.QUANTITY_ETM,0) AS QUANTITY_ETM, ISNULL(DT.QUANTITY,0)- ISNULL(DT.QUANTITY_EXE,0) AS QUANTITY_REMAIN, ISNULL(DT.QUANTITY,0)-ISNULL(DT.QUANTITY_ETM,0) AS QUANTITY_REMAIN_ETM, --ISNULL( PLDT.AMT_APP,0)+ ISNULL( DT.AMT_RECEIVE_TF,0) AS AMT_APP, ISNULL( PLDT.AMT_APP,0) AS AMT_APP, ISNULL( X.AMT_EXE,0) AS AMT_EXE, ISNULL( DT.AMT_ETM,0) AS AMT_ETM, --ISNULL(DT.AMT_APP,0) + ISNULL( DT.AMT_RECEIVE_TF,0)- ISNULL( DT.AMT_TF,0)- ISNULL(DT.AMT_EXE,0) AS AMT_REMAIN, ISNULL(DT.AMT_APP,0) + ISNULL( DT.AMT_RECEIVE_TF,0)- ISNULL( DT.AMT_TF,0)-ISNULL(DT.AMT_ETM,0) AS AMT_REMAIN_ETM, ISNULL(PLDT.AMT_APP,0) - ISNULL(X.AMT_EXE,0) AS AMT_REMAIN, @p_REF_ID AS REF_ID --FROM --( -- SELECT B.TRADE_ID,B.GOODS_ID,A.REQ_DOC_ID,CT.CONTRACT_ID, SUM(CT.QUANTITY) AS QUANTITY,SUM( CT.QUANTITY * CT.PRICE) AS AMT_APP -- FROM TR_REQUEST_DOC_DT A -- LEFT JOIN PL_REQUEST_DOC_DT B ON A.PL_REQDT_ID=B.REQDT_ID -- LEFT JOIN TR_CONTRACT_DT CT ON A.HANGHOA_ID = CT.GOODS_ID -- GROUP BY B.TRADE_ID,B.GOODS_ID,A.REQ_DOC_ID,CT.CONTRACT_ID --) PLDT --LEFT JOIN --( -- SELECT A.TRADE_ID, SUM(A.AMT_EXE) AS AMT_EXE FROM TR_REQ_PAY_BUDGET A -- LEFT JOIN TR_REQ_PAYMENT B ON A.REQ_PAY_ID = B.REQ_PAY_ID -- --LEFT JOIN TR_REQ_PAY_SCHEDULE C ON B.REQ_PAY_ID = C.REQ_PAY_ID -- WHERE B.AUTH_STATUS_KT='A' -- AND A.REQ_PAY_ID IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@p_REF_ID) -- GROUP BY TRADE_ID --) --X ON PLDT.TRADE_ID = X.TRADE_ID FROM ( SELECT A.REQ_DOC_ID, B.TRADE_ID, B.PLAN_ID, B.GOODS_ID, SUM(A.QUANTITY) AS QUANTITY, SUM(A.TOTAL_AMT) AS AMT_APP FROM TR_REQUEST_DOC_DT A INNER JOIN PL_REQUEST_DOC_DT B ON A.PL_REQDT_ID = B.REQDT_ID WHERE A.REQ_DOC_ID =@PYC_MS_ID GROUP BY A.REQ_DOC_ID, B.TRADE_ID, B.PLAN_ID, B.GOODS_ID ) PLDT LEFT JOIN ( SELECT A.TRADE_ID, SUM(A.AMT_EXE) AS AMT_EXE FROM TR_REQ_PAY_BUDGET A LEFT JOIN TR_REQ_PAYMENT B ON A.REQ_PAY_ID = B.REQ_PAY_ID --LEFT JOIN TR_REQ_PAY_SCHEDULE C ON B.REQ_PAY_ID = C.REQ_PAY_ID WHERE B.AUTH_STATUS_KT='A' AND A.REQ_PAY_ID IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@p_REF_ID OR REF_ID IN (SELECT REF_ID FROM @l_LST_REF_ID)) GROUP BY TRADE_ID ) X ON PLDT.TRADE_ID = X.TRADE_ID INNER JOIN PL_TRADEDETAIL DT ON DT.TRADE_ID=PLDT.TRADE_ID INNER JOIN PL_MASTER PM ON DT.PLAN_ID= PM.PLAN_ID INNER JOIN CM_GOODS CG ON PLDT.GOODS_ID = CG.GD_ID WHERE PLDT.REQ_DOC_ID =@PYC_MS_ID --AND PLDT.CONTRACT_ID =@p_REF_ID END ELSE IF(EXISTS(SELECT * FROM TR_PO_MASTER WHERE PO_ID =@p_REF_ID)) BEGIN --SET @PYC_MS_ID = (SELECT REQ_DOC_ID FROM TR_PO_MASTER WHERE PO_ID =@p_REF_ID) -- BAT DAU LAY DU LIEU SELECT PM.PLAN_ID,PM.PLAN_CODE,PLDT.TRADE_ID,DT.GOODS_ID,CG.GD_CODE,CG.GD_NAME,PM.BRANCH_ID,PM.DEPT_ID, ISNULL(PLDT.QUANTITY,0) AS QUANTITY, ISNULL(DT.QUANTITY_EXE,0) AS QUANTITY_EXE, ISNULL(DT.QUANTITY_ETM,0) AS QUANTITY_ETM, ISNULL(DT.QUANTITY,0)- ISNULL(DT.QUANTITY_EXE,0) AS QUANTITY_REMAIN, ISNULL(DT.QUANTITY,0)-ISNULL(DT.QUANTITY_ETM,0) AS QUANTITY_REMAIN_ETM, --ISNULL( PLDT.AMT_APP,0) + ISNULL( DT.AMT_RECEIVE_TF,0) AS AMT_APP, ISNULL( PLDT.AMT_APP,0) AS AMT_APP, ISNULL( X.AMT_EXE,0) AS AMT_EXE, ISNULL( DT.AMT_ETM,0) AS AMT_ETM, --ISNULL(DT.AMT_APP,0) + ISNULL( DT.AMT_RECEIVE_TF,0)- ISNULL( DT.AMT_TF,0)- ISNULL(DT.AMT_EXE,0) AS AMT_REMAIN, ISNULL(DT.AMT_APP,0) + ISNULL( DT.AMT_RECEIVE_TF,0)- ISNULL( DT.AMT_TF,0)-ISNULL(DT.AMT_ETM,0) AS AMT_REMAIN_ETM, --ISNULL(PLDT.AMT_APP,0) - ISNULL(X.AMT_EXE,0) AS AMT_REMAIN ISNULL(PLDT.AMT_APP,0) - ISNULL(X.AMT_EXE,0) AS AMT_REMAIN , @p_REF_ID AS REF_ID FROM ( SELECT DISTINCT B.TRADE_ID,B.GOODS_ID,A.REQ_DOC_ID,CT.PO_ID, SUM(CT.QUANTITY) AS QUANTITY, SUM( CT.QUANTITY * (CT.PRICE+CT.PRICE_VAT) * ISNULL(RATE,1)) AS AMT_APP FROM TR_REQUEST_DOC_DT A LEFT JOIN PL_REQUEST_DOC_DT B ON A.PL_REQDT_ID=B.REQDT_ID LEFT JOIN TR_PO_DETAIL CT ON A.HANGHOA_ID = CT.GOODS_ID GROUP BY B.TRADE_ID,B.GOODS_ID,A.REQ_DOC_ID,CT.PO_ID,A.SUP_ID ) PLDT LEFT JOIN ( SELECT A.TRADE_ID, SUM(A.AMT_EXE) AS AMT_EXE FROM TR_REQ_PAY_BUDGET A LEFT JOIN TR_REQ_PAYMENT B ON A.REQ_PAY_ID = B.REQ_PAY_ID WHERE B.AUTH_STATUS_KT='A' AND A.REQ_PAY_ID IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@p_REF_ID) GROUP BY TRADE_ID ) X ON PLDT.TRADE_ID = X.TRADE_ID INNER JOIN PL_TRADEDETAIL DT ON DT.TRADE_ID=PLDT.TRADE_ID INNER JOIN PL_MASTER PM ON DT.PLAN_ID= PM.PLAN_ID INNER JOIN CM_GOODS CG ON PLDT.GOODS_ID = CG.GD_ID --WHERE PLDT.REQ_DOC_ID =@PYC_MS_ID AND PLDT.PO_ID =@p_REF_ID WHERE PLDT.REQ_DOC_ID IN(SELECT REQ_DOC_ID FROM TR_PO_MASTER WHERE PO_ID IN (SELECT REF_ID FROM @l_LST_REF_ID)) AND PLDT.PO_ID IN (SELECT REF_ID FROM @l_LST_REF_ID) END ELSE IF(EXISTS(SELECT * FROM PL_REQUEST_DOC WHERE REQ_ID =@p_REF_ID )) BEGIN --SET @PYC_MS_ID = (SELECT REQ_DOC_ID FROM TR_PO_MASTER WHERE PO_ID =@p_REF_ID) -- BAT DAU LAY DU LIEU SELECT PM.PLAN_ID,PM.PLAN_CODE,PL_DT.TRADE_ID,DT.GOODS_ID,CG.GD_CODE,CG.GD_NAME,PM.BRANCH_ID,PM.DEPT_ID, SUM(ISNULL(PL_DT.QUANTITY,0)) AS QUANTITY, SUM(ISNULL(DT.QUANTITY_EXE,0)) AS QUANTITY_EXE, SUM(ISNULL(DT.QUANTITY_ETM,0)) AS QUANTITY_ETM, SUM(ISNULL(DT.QUANTITY,0)- ISNULL(DT.QUANTITY_EXE,0)) AS QUANTITY_REMAIN, SUM(ISNULL(DT.QUANTITY,0)-ISNULL(DT.QUANTITY_ETM,0)) AS QUANTITY_REMAIN_ETM, SUM(ISNULL( PL_DT.TOTAL_AMT,0)) AS AMT_APP, SUM(ISNULL( X.AMT_EXE,0))/ISNULL(COUNT(*),1) AS AMT_EXE, SUM(ISNULL( DT.AMT_ETM,0)) AS AMT_ETM, --ISNULL(DT.AMT_APP,0) + ISNULL( DT.AMT_RECEIVE_TF,0)- ISNULL( DT.AMT_TF,0)- ISNULL(DT.AMT_EXE,0) AS AMT_REMAIN, SUM(ISNULL(DT.AMT_APP,0) + ISNULL( DT.AMT_RECEIVE_TF,0)- ISNULL( DT.AMT_TF,0)-ISNULL(DT.AMT_ETM,0)) AS AMT_REMAIN_ETM, --ISNULL(PLDT.AMT_APP,0) - ISNULL(X.AMT_EXE,0) AS AMT_REMAIN SUM(ISNULL(PL_DT.TOTAL_AMT,0)) - SUM(ISNULL(X.AMT_EXE,0))/ISNULL(COUNT(*),1) AS AMT_REMAIN , @p_REF_ID AS REF_ID FROM PL_REQUEST_DOC_DT PL_DT LEFT JOIN ( SELECT A.TRADE_ID, SUM(A.AMT_EXE) AS AMT_EXE FROM TR_REQ_PAY_BUDGET A LEFT JOIN TR_REQ_PAYMENT B ON A.REQ_PAY_ID = B.REQ_PAY_ID WHERE B.AUTH_STATUS_KT='A' AND A.REQ_PAY_ID IN (SELECT REQ_PAY_ID FROM TR_REQ_PAY_SERVICE WHERE EMP_ID =@p_REF_ID) GROUP BY TRADE_ID ) X ON PL_DT.TRADE_ID = X.TRADE_ID INNER JOIN PL_TRADEDETAIL DT ON DT.TRADE_ID=PL_DT.TRADE_ID INNER JOIN PL_MASTER PM ON DT.PLAN_ID= PM.PLAN_ID INNER JOIN CM_GOODS CG ON PL_DT.GOODS_ID = CG.GD_ID -- WHERE PL_DT.REQ_ID =@p_REF_ID GROUP BY PM.PLAN_ID,PM.PLAN_CODE,PL_DT.TRADE_ID,DT.GOODS_ID,CG.GD_CODE,CG.GD_NAME,PM.BRANCH_ID,PM.DEPT_ID END END