Subversion Repositories DevTools

Rev

Blame | Last modification | View Log | RSS feed

CREATE FUNCTION "RELEASE_MANAGER"."CAN_EDIT_PKG_IN_PROJECT" ( nPvId IN NUMBER, nRtagId IN NUMBER ) RETURN NUMBER IS

/* ---------------------------------------------------------------------------
    Version: 3.0.0
   --------------------------------------------------------------------------- */

    VExt PACKAGE_VERSIONS.V_EXT%TYPE;
        ProjId NUMBER;
        RowCount NUMBER;
        cReleaseMode CHAR(1);

BEGIN
        
        --RETURN 1;
        
        
        /*--------------- Business Rules Here -------------------*/
        IF (nRtagId IS NULL)  OR  (nRtagId < 1)THEN
                RETURN 0;
        END IF;
        /*-------------------------------------------------------*/
        
         
         
         
        
        
        /*-- First Check. See if package is used through release reference --*/
        SELECT COUNT(rc.PV_ID) INTO RowCount
          FROM (
                        SELECT rl.REF_RTAG_ID
                          FROM RELEASE_LINKS rl
                         WHERE rl.RTAG_ID = nRtagId
                        ) rl,
                        RELEASE_CONTENT rc
          WHERE rc.RTAG_ID = rl.REF_RTAG_ID
            AND rc.PV_ID = nPvId;                       
        
        
        -- Decide if package can be edited  
        IF RowCount > 0 THEN
                -- Package is referenced from other release, hence cannot be edited
                RETURN 0;       
                
        ELSE
        
                -- Check is only done for releases in restrictive mode
                SELECT rt.OFFICIAL INTO cReleaseMode
                  FROM RELEASE_TAGS rt
                 WHERE rt.RTAG_ID = nRtagId;
                
                IF cReleaseMode = 'N'OR cReleaseMode = 'R' THEN
                        -- Do not do any firther checking,
                        -- Package is editable here
                        RETURN 1;
                END IF; 
                
        END IF;
        
        
        
        
        /*-- Further checking --*/
        -- Get proj_id
        SELECT rt.PROJ_ID  INTO  ProjId
          FROM RELEASE_TAGS rt
         WHERE rt.RTAG_ID = nRtagId;
           
        
         
        BEGIN

                -- Get v_ext
                SELECT pv.V_EXT  INTO  Vext
                  FROM PACKAGE_VERSIONS pv
                 WHERE pv.PV_ID = nPvId;  

                EXCEPTION
                WHEN NO_DATA_FOUND THEN
                        Vext := NULL;

        END;     
         
        
        --Temp Hack for Step Project
        IF ProjId != 281 THEN
                -- Find if package can be edited in this project
                        SELECT COUNT(pe.EXT_NAME) INTO RowCount
                        FROM PROJECT_EXTENTIONS pe
                        WHERE pe.PROJ_ID != ProjId  
                        AND pe.EXT_NAME = VExt;
        END IF;         
          
          
        -- Decide if package can be edited  
        IF RowCount > 0 THEN
                -- Package extension is found in other projects, hece NOT EDITABLE
                RETURN 0;
        ELSE
                RETURN 1;       
        END IF;

        
END CAN_EDIT_PKG_IN_PROJECT;
/