Sunday, July 10, 2016

Organization Hierarchy Creation.

CREATE OR REPLACE PACKAGE  XX_HR_ORG_HIERARCHY_PKG 
/******************************************************************************
*     PACKAGE NAME :XX_HR_ORG_HIERARCHY_PKG                                    *
*     PURPOSE      : Create org hierachy for organization                     *
*                                                                             *
*                                                                             *
*                                                                             *
*******************************************************************************/
--
--

PROCEDURE XX_HR_CREATE_HIERARCHY_ELEMENT 
                                          ( l_validate                  IN BOOLEAN
                                           ,l_organization_id_parent    IN NUMBER
                                           ,l_org_structure_version_id  IN NUMBER
                                           ,l_organization_id_child     IN NUMBER
                                           ,l_business_group_id         IN NUMBER
                                           ,l_effective_date            IN DATE
                                           ,l_pos_control_enabled_flag  IN VARCHAR2
                                           ,x_inactive_org_warning      IN OUT BOOLEAN
                                           ,x_org_structure_element_id  IN OUT NUMBER
                                          ,x_object_version_number     IN OUT NUMBER);
 PROCEDURE MAIN(  p_errorbuf OUT VARCHAR2
                 ,p_retcode  OUT NUMBER
                 ,p_mode     IN VARCHAR2) ;

END XX_HR_ORG_HIERARCHY_PKG;
/
                                           
CREATE OR REPLACE PACKAGE BODY XX_HR_ORG_HIERARCHY_PKG 
IS
/******************************************************************************
*     PACKAGE NAME :XX_HR_ORG_HIERARCHY_PKG                                    *
*     PURPOSE      : Create org hierachy for organization                     *
*                                                                             *
*                                                                             *
*                                                                             *
*******************************************************************************/
--
--
gc_pkg_name  VARCHAR2(40) := 'XX_HR_ORG_HIERARCHY_PKG';
gc_module    VARCHAR2(20) := 'Oracle HRMS';
g_business_group_id      NUMBER(1)     := apps.fnd_profile.VALUE('PER_BUSINESS_GROUP_ID');
--
--
PROCEDURE XX_HR_CREATE_HIERARCHY_ELEMENT 
                                          ( l_validate                  IN BOOLEAN
                                           ,l_organization_id_parent    IN NUMBER
                                           ,l_org_structure_version_id  IN NUMBER
                                           ,l_organization_id_child     IN NUMBER
                                           ,l_business_group_id         IN NUMBER
                                           ,l_effective_date            IN DATE
                                           ,l_pos_control_enabled_flag  IN VARCHAR2
                                           ,x_inactive_org_warning      IN OUT BOOLEAN
                                           ,x_org_structure_element_id  IN OUT NUMBER
                                          ,x_object_version_number     IN OUT NUMBER
                                        ) IS
--
--
lcroutine CONSTANT VARCHAR2 (400)
                           := gc_pkg_name || '.XX_HR_CREATE_HIERARCHY_ELEMENT' ;



BEGIN
 --       
 FND_FILE.PUT_LINE(FND_FILE.LOG,'l_organization_id_parent -'||l_organization_id_parent||',l_org_structure_version_id -'||l_org_structure_version_id||',l_organization_id_child -'||l_organization_id_child||',l_business_group_id'||l_business_group_id||',l_effective_date -'||l_effective_date||',l_pos_control_enabled_flag-'||l_pos_control_enabled_flag);
 --      
 hr_hierarchy_element_api.create_hierarchy_element
                           (
                              p_validate                 => l_validate
                             ,p_organization_id_parent   => l_organization_id_parent
                             ,p_org_structure_version_id => l_org_structure_version_id
                             ,p_organization_id_child    => l_organization_id_child
                             ,p_business_group_id        => l_business_group_id
                             ,p_effective_date           => l_effective_date
                             ,p_pos_control_enabled_flag => l_pos_control_enabled_flag
                             ,p_inactive_org_warning     => x_inactive_org_warning
                             ,p_org_structure_element_id => x_org_structure_element_id
                             ,p_object_version_number    => x_object_version_number
                           );
--
--Debugging Message
      xx_fnd_utils_pkg.LOG (
                            p_debug_level => xx_fnd_utils_pkg.procedure_level
                            ,p_routine_name => lcroutine
                            ,p_debug_msg => 'Org Hierarchy Created Successfully '
                                              ||x_org_structure_element_id||' is Org Structure Element Id'
                            ,p_module => gc_module);
 --
 --
 EXCEPTION
   WHEN OTHERS THEN
 --
 FND_FILE.PUT_LINE(FND_FILE.LOG,'Error-'||SQLERRM);
--Debugging Message
      xx_fnd_utils_pkg.LOG (
                            p_debug_level => xx_fnd_utils_pkg.procedure_level
                            ,p_routine_name => lcroutine
                            ,p_debug_msg => SQLERRM
                            ,p_module => gc_module);
--
END XX_HR_CREATE_HIERARCHY_ELEMENT;
--
--
PROCEDURE XX_HR_DELETE_HIERARCHY_ELEMENT (l_validate                     IN BOOLEAN
                                         ,l_org_structure_element_id     IN NUMBER
                                         ,l_object_version_number        IN NUMBER
  ) IS
--
--
  lcroutine   CONSTANT VARCHAR2 (100)
                           := gc_pkg_name || '.XX_HR_DELETE_HIERARCHY_ELEMENT' ;
  BEGIN
  --
  --
    hr_hierarchy_element_api.delete_hierarchy_element
                                          (p_validate                 => l_validate
                                          ,p_org_structure_element_id => l_org_structure_element_id
                                          ,p_object_version_number    => l_object_version_number);
         xx_fnd_utils_pkg.LOG (
                               p_debug_level  => xx_fnd_utils_pkg.procedure_level
                              ,p_routine_name => lcroutine
                              ,p_debug_msg    => 'deleted the organization hierarchy element : '||l_org_structure_element_id
                              ,p_module       => gc_module);
 END XX_HR_DELETE_HIERARCHY_ELEMENT;
--
--
PROCEDURE XX_UPDATE_HIERARCHY_ELEMENT
                                  (l_validate                      IN     BOOLEAN 
                                  ,l_effective_date                IN     DATE
                                  ,l_org_structure_element_id      IN     NUMBER
                                  ,l_organization_id_parent        IN     NUMBER
                                  ,l_organization_id_child         IN     NUMBER
                                  ,l_pos_control_enabled_flag      IN     VARCHAR2
                                  ,l_object_version_number         IN OUT NOCOPY NUMBER
  ) IS
x_object_version_number          NUMBER;
lcroutine  CONSTANT VARCHAR2 (100)
                           := gc_pkg_name || '.XX_UPDATE_HIERARCHY_ELEMENT' ;
 --
 --
  BEGIN
     hr_hierarchy_element_api.update_hierarchy_element
                                    (p_validate                     => l_validate
                                    ,p_effective_date               => l_effective_date
                                    ,p_org_structure_element_id     => l_org_structure_element_id
                                    ,p_organization_id_parent       => l_organization_id_parent
                                    ,p_organization_id_child        => l_organization_id_child
                                    ,p_pos_control_enabled_flag     => l_pos_control_enabled_flag
                                    ,p_object_version_number        => l_object_version_number
                                   );
                                  
  EXCEPTION
     WHEN OTHERS THEN
       xx_fnd_utils_pkg.LOG (
         p_debug_level  => xx_fnd_utils_pkg.procedure_level
        ,p_routine_name => lcroutine
        ,p_debug_msg    => 'Unable to update the organization hierarchy element : '||SQLERRM
        ,p_module       => gc_module);

  END XX_UPDATE_HIERARCHY_ELEMENT;
--
--
FUNCTION XX_GET_ORG_ID( p_organization_name IN VARCHAR2) RETURN NUMBER IS
--
--
l_org_id     NUMBER;
lcroutine CONSTANT VARCHAR2 (100)
                           := gc_pkg_name || '.XX_GET_ORG_ID' ;
--
BEGIN
BEGIN
    SELECT organization_id
    INTO l_org_id
    FROM hr_all_organization_units 
    WHERE NAME= p_organization_name;

EXCEPTION
  WHEN OTHERS THEN
      l_org_id:=0;
END;
xx_fnd_utils_pkg.LOG (
                            p_debug_level => xx_fnd_utils_pkg.procedure_level
                            ,p_routine_name => lcroutine
                            ,p_debug_msg => 'Organization Id : '||l_org_id
                            ,p_module => gc_module);

RETURN l_org_id;
--
--
END XX_GET_ORG_ID;
--
--
FUNCTION IS_PARENT_EXISTS (p_organization_id         IN   NUMBER
                         ,p_check_org                IN   NUMBER
                         ,p_org_strct_version_id     IN   NUMBER
                         )
RETURN VARCHAR2
  IS
         l_flag   VARCHAR2 (2);
    --
    --
   BEGIN
    --
    --
      l_flag := 'Y';
      --
      --
      BEGIN
          SELECT DECODE (COUNT (organization_id_parent), 0, 'N', 'Y') INTO l_flag
          FROM
               (SELECT LEVEL, pose.organization_id_parent, pose.organization_id_child
                FROM per_org_structure_elements pose
                WHERE org_structure_version_id= p_org_strct_version_id
                START WITH organization_id_child =  p_organization_id
                CONNECT BY PRIOR pose.organization_id_parent = pose.organization_id_child
                 -- ORDER BY 1 commented by mahesh
                 )
           WHERE organization_id_parent = p_check_org;
       --
       --
      EXCEPTION
          WHEN OTHERS THEN
             RETURN 'N';
      END;
      --
      --
    
   RETURN l_flag;

 END IS_PARENT_EXISTS;
--
--
FUNCTION IS_CHILD_EXISTS(p_pernt_org_id IN NUMBER
                        ,p_child_org_id IN NUMBER,p_org_strct_version_id IN NUMBER
                        )
RETURN VARCHAR2 IS
--
--
l_flag  VARCHAR2(3);
--
--
BEGIN
--
--
  BEGIN
  --
  --
    SELECT
        DECODE(COUNT(*),0,'N','Y') INTO l_flag  FROM
        (  SELECT
        level, pose.organization_id_parent , pose.organization_id_child
   FROM per_org_structure_elements pose 
   where org_structure_version_id= p_org_strct_version_id
    START WITH organization_id_parent=p_pernt_org_id
   CONNECT BY PRIOR pose.organization_id_child = pose.organization_id_parent 
   -- ORDER BY 1 commented by mahesh
   ) where organization_id_child = p_child_org_id ;
 EXCEPTION
    WHEN OTHERS THEN
      RETURN 'N';
 END;
--
--
RETURN l_flag;
--
--
END IS_CHILD_EXISTS;
--
--
FUNCTION GET_STRUCTURE_ELEMENT_ID(p_parent_org_id IN NUMBER ,p_organization_id IN NUMBER,p_org_structure_version_id IN NUMBER
 ,p_version_num IN NUMBER)
RETURN NUMBER IS
--
--
l_org_struc_element_id    NUMBER;
--
--
 BEGIN
   --
   --
   BEGIN
    --
     SELECT org_structure_element_id INTO l_org_struc_element_id FROM per_org_structure_elements pose
     ,PER_ORG_STRUCTURE_VERSIONS posv
      WHERE organization_id_child = p_organization_id
      AND   organization_id_parent = p_parent_org_id
      AND pose.org_structure_version_id=posv.org_structure_version_id
      AND VERSION_NUMBER=p_version_num
      AND pose.org_structure_version_id= p_org_structure_version_id;
   EXCEPTION
      WHEN OTHERS THEN
        l_org_struc_element_id :=0;
  END;
 --
 --
 RETURN l_org_struc_element_id;
--
END GET_STRUCTURE_ELEMENT_ID;
--
--
FUNCTION IS_ORG_EXIST(p_org_id IN NUMBER,p_org_struct_version_id IN NUMBER)  RETURN VARCHAR2  IS
  l_flag           VARCHAR2(3);
  --
  --
     BEGIN
       l_flag :='N';
         BEGIN
           SELECT decode(count(*),0,'N','Y') INTO l_flag  FROM per_org_structure_elements
            WHERE organization_id_parent = p_org_id
            AND  org_structure_version_id=p_org_struct_version_id;
          EXCEPTION
            WHEN OTHERS THEN
              l_flag:='N';
        END;
     --
     --
      Return l_flag;
END;
--
--
FUNCTION IS_USER_ACTIVE (p_org_id IN NUMBER) RETURN VARCHAR2 IS
l_flag        VARCHAR2(20);
  BEGIN
     l_flag:='N';
       BEGIN
        SELECT DECODE(COUNT(*),0,'N','Y') INTO l_flag FROM per_all_assignments_f WHERE organization_id=p_org_id
        AND TRUNC(SYSDATE) BETWEEN effective_start_date AND effective_end_date;
       EXCEPTION
          WHEN OTHERS THEN
             l_flag :='N';
      END;
    --
    --
    RETURN l_flag;
END;
--
--
PROCEDURE MAIN(  p_errorbuf OUT VARCHAR2
                ,p_retcode  OUT NUMBER
                ,p_mode     IN VARCHAR2) IS

l_parent_org_id   NUMBER;
l_child_org_id   NUMBER;
lcroutine CONSTANT VARCHAR2 (100)
                           := gc_pkg_name || '.MAIN' ;
l_org_strct_version_id       NUMBER;
l_x_inactive_org_warn          BOOLEAN;
l_x_org_structure_id           NUMBER;
x_object_version_number         NUMBER;
l_x_object_version_num         NUMBER;
l_mode                       BOOLEAN;
l_parent_exist               VARCHAR2(3);
l_child_exist                VARCHAR2(3);
l_child_org_count            NUMBER;
l_process_flag               VARCHAR2(3);
l_org_struct_element_id      NUMBER;
l_error_msg                  VARCHAR2(4000);
l_trans_date                 DATE;
l_count                            NUMBER;
l_org_exist                  VARCHAR2(3);
l_user_active                VARCHAR2(3);
l_total_count                NUMBER;
l_process_count              NUMBER;
l_error_count                NUMBER;
--
--
CURSOR cur_org_struct IS
SELECT *
FROM XX_HR_ORG_HIER_STRUCT_STG
WHERE STATUS IN ('NEW','VALIDATED')
ORDER BY sequence_number ASC;

BEGIN
--
--
   IF UPPER(p_mode) ='VERIFY' THEN
      l_mode:=TRUE;
   ELSE
      l_mode:=FALSE;
  END IF;
  --
  FOR rec_org_struct in cur_org_struct LOOP
  --
  --
     l_parent_org_id:= NULL;
     l_child_org_id:= NULL;
     l_org_strct_version_id:=0;
     l_parent_exist:='Y';
     l_process_flag:='Y';
     l_org_struct_element_id:=0;
     l_error_msg    :=NULL;
     x_object_version_number :=0;
     l_child_org_count  :=0;
     l_trans_date   := NULL;
     l_count   :=0;
     l_org_exist   :='N';
     l_user_active  :='N';
     --
     --
    
       IF rec_org_struct.newmode NOT IN ('CREATE','DELETE') THEN
       
         --  l_process_flag :='E';
           l_error_msg := ' Invalid Mode.';
          
           UPDATE XX_HR_ORG_HIER_STRUCT_STG
           SET STATUS ='ERROR'
              ,ERROR_MESSAGE=l_error_msg
           WHERE  rec_org_struct.SEQUENCE_NUMBER=SEQUENCE_NUMBER;
          
        
        END IF;
        --
        --
        IF rec_org_struct.Hierarchy_Name IS NULL THEN
         --
         --
          l_error_msg:=l_error_msg||' - Invalid Hierarchy_Name';
          --      
           UPDATE XX_HR_ORG_HIER_STRUCT_STG
           SET STATUS ='ERROR'
               ,ERROR_MESSAGE=l_error_msg
           WHERE  rec_org_struct.SEQUENCE_NUMBER=SEQUENCE_NUMBER;
           --
           --
          ELSE
           BEGIN
                SELECT   posv.org_structure_version_id,decode(date_to,null,trunc(sysdate),date_to-1)
                INTO l_org_strct_version_id, l_trans_date
                FROM    per_organization_structures pos,
                          per_org_structure_versions posv
                WHERE pos.name = rec_org_struct.Hierarchy_Name
                AND pos.business_group_id = g_business_group_id
                AND VERSION_NUMBER=rec_org_struct.version_no
                AND pos.organization_structure_id = posv.organization_structure_id;
                    -- AND SYSDATE BETWEEN date_from AND nvl(date_to,SYSDATE) ;
           EXCEPTION
               WHEN OTHERS THEN
                   l_org_strct_version_id:=0;
           END;
           --
           --
        END IF;
        --
          --
          --
          /*  xx_fnd_utils_pkg.LOG (
                            p_debug_level => xx_fnd_utils_pkg.procedure_level
                            ,p_routine_name => lcroutine
                            ,p_debug_msg => 'l_org_strct_version_id: '||l_org_strct_version_id
                            ,p_module => gc_module);*/--- Removed by mahesh
        --
        IF l_org_strct_version_id = 0 or l_org_strct_version_id is NULL THEN
         l_error_msg:=l_error_msg||' - Invalid Hierarchy_Name Or Invalid Version Number';
           --
           UPDATE XX_HR_ORG_HIER_STRUCT_STG
           SET STATUS ='ERROR'
             ,ERROR_MESSAGE=l_error_msg
           WHERE  rec_org_struct.SEQUENCE_NUMBER=SEQUENCE_NUMBER;
           --
      END IF;
        --
        --
         l_parent_org_id:=XX_GET_ORG_ID(rec_org_struct.parent_organization_name);
         l_child_org_id:=XX_GET_ORG_ID(rec_org_struct.child_organization_name);
         --
         --
         --
         IF  l_parent_org_id IS NULL
           OR l_child_org_id IS NULL OR l_child_org_id=0 OR l_parent_org_id=0 THEN
              l_process_flag:='E';
            l_error_msg:=l_error_msg||' - Parent Or Child ORganization Doesnot exist.'; 
            UPDATE XX_HR_ORG_HIER_STRUCT_STG
            SET STATUS ='ERROR'
               ,ERROR_MESSAGE=l_error_msg
            WHERE  rec_org_struct.SEQUENCE_NUMBER=SEQUENCE_NUMBER;
          END IF;
          --
          --
           IF l_parent_org_id = l_child_org_id   THEN
            l_process_flag:='E';
            l_error_msg:=l_error_msg||' - Invalid Realation Ship between Parent and Child';
             UPDATE XX_HR_ORG_HIER_STRUCT_STG SET STATUS ='ERROR'
             ,ERROR_MESSAGE=l_error_msg
             WHERE  rec_org_struct.SEQUENCE_NUMBER=SEQUENCE_NUMBER;
           
          END IF;
         --
         --
         /* xx_fnd_utils_pkg.LOG (
                            p_debug_level => xx_fnd_utils_pkg.procedure_level
                            ,p_routine_name => lcroutine
                            ,p_debug_msg => 'rec_org_struct.newmode: '||rec_org_struct.newmode
                            ,p_module => gc_module);*/
                           
        l_org_struct_element_id:=GET_STRUCTURE_ELEMENT_ID(l_parent_org_id,l_child_org_id,l_org_strct_version_id,rec_org_struct.version_no);
      --                          
      IF rec_org_struct.newmode='CREATE' THEN
          IF l_parent_org_id <> 0
            AND l_child_org_id <>0 THEN
           
           l_parent_exist:=IS_PARENT_EXISTS(l_parent_org_id,l_child_org_id,l_org_strct_version_id);
           l_child_exist:=IS_CHILD_EXISTS(l_parent_org_id,l_child_org_id,l_org_strct_version_id);
          
           l_org_exist := IS_ORG_EXIST (l_parent_org_id,l_org_strct_version_id);
          --
          --
          /* xx_fnd_utils_pkg.LOG (
                            p_debug_level => xx_fnd_utils_pkg.procedure_level
                            ,p_routine_name => lcroutine
                            ,p_debug_msg => 'l_parent_exist: '||l_parent_exist
                            ,p_module => gc_module);*/
          --
          --
          /*  xx_fnd_utils_pkg.LOG (
                            p_debug_level => xx_fnd_utils_pkg.procedure_level
                            ,p_routine_name => lcroutine
                            ,p_debug_msg => 'l_child_exist: '||l_child_exist
                            ,p_module => gc_module);
            --
          --
            xx_fnd_utils_pkg.LOG (
                            p_debug_level => xx_fnd_utils_pkg.procedure_level
                            ,p_routine_name => lcroutine
                            ,p_debug_msg => 'l_process_flag: '||l_process_flag
                            ,p_module => gc_module);*/
          --
          select count(*) into l_count
          from PER_ORG_STRUCTURE_ELEMENTS
          where ORG_STRUCTURE_VERSION_ID=l_org_strct_version_id
          and ORGANIZATION_ID_PARENT = l_parent_org_id
          and ORGANIZATION_ID_CHILD =l_child_org_id;
          --
            IF l_count = 0 THEN
                  l_parent_exist :='N';
                  l_child_exist  :='N';
            END IF;
          --
           IF l_parent_exist ='Y'OR l_child_exist= 'Y' OR l_process_flag ='E'  THEN
            
            l_process_flag:='E';
            l_error_msg :=l_error_msg||' -  The organizations are Having exist parent child org relation ship';
          END IF;
      
      END IF;
             --
             --
          IF l_process_flag='Y' AND l_org_strct_version_id <>0
             and l_child_org_id <> 0 and l_parent_org_id <>0
             AND l_org_exist = 'Y' THEN
            --
              -- 
                --
                BEGIN
                 --
                /*   xx_fnd_utils_pkg.LOG (
                            p_debug_level => xx_fnd_utils_pkg.procedure_level
                            ,p_routine_name => lcroutine
                            ,p_debug_msg => 'l_parent_org_id : '||l_parent_org_id
                            ,p_module => gc_module);
          --
          --
            xx_fnd_utils_pkg.LOG (
                            p_debug_level => xx_fnd_utils_pkg.procedure_level
                            ,p_routine_name => lcroutine
                            ,p_debug_msg => 'l_child_org_id : '||l_child_org_id
                            ,p_module => gc_module);*/
                       --
                 
                         l_x_inactive_org_warn  := NULL;
                         l_x_org_structure_id   := NULL;
                         l_x_object_version_num := NULL;
                      --
                      --
         /*   BEGIN
                select decode(date_to,null,trunc(sysdate),date_to-1) INTO l_trans_date
                    from per_org_structure_versions where org_structure_version_id= l_org_strct_version_id;
                EXCEPTION WHEN OTHERS THEN
                 l_trans_date :=trunc(sysdate);
            END;*/
          
             XX_HR_CREATE_HIERARCHY_ELEMENT 
                                          ( l_validate                  => l_mode
                                           ,l_organization_id_parent    => l_parent_org_id
                                           ,l_org_structure_version_id  => l_org_strct_version_id
                                           ,l_organization_id_child     => l_child_org_id
                                           ,l_business_group_id         => g_business_group_id
                                           ,l_effective_date            => l_trans_date
                                           ,l_pos_control_enabled_flag  => 'N'
                                           ,x_inactive_org_warning      => l_x_inactive_org_warn
                                           ,x_org_structure_element_id  => l_x_org_structure_id
                                           ,x_object_version_number     => x_object_version_number
                                        );                                              
                --
                -- dbms_output.put_line(l_x_org_structure_id);
                   xx_fnd_utils_pkg.LOG (
                                       p_debug_level => xx_fnd_utils_pkg.procedure_level
                                       ,p_routine_name => lcroutine
                                       ,p_debug_msg => 'Hierarchy Created Successfully Org Structure Id : '||l_x_org_structure_id
                                       ,p_module => gc_module);
                  --
                  --
            
               IF (l_x_org_structure_id IS NOT NULL AND   l_mode = FALSE) AND l_process_flag='Y' THEN
                      --
                       UPDATE XX_HR_ORG_HIER_STRUCT_STG SET STATUS ='PROCESSED'
                        WHERE  rec_org_struct.SEQUENCE_NUMBER=SEQUENCE_NUMBER;
                        --
               ELSIF l_x_org_structure_id IS  NULL AND   l_mode=FALSE THEN
                      
                      UPDATE XX_HR_ORG_HIER_STRUCT_STG SET STATUS ='ERROR'
                      ,ERROR_MESSAGE = 'Unable to create the Org Hierarchy'
                      WHERE rec_org_struct.SEQUENCE_NUMBER=SEQUENCE_NUMBER;
                ELSIF l_process_flag='E' and l_mode=TRUE THEN
                     UPDATE XX_HR_ORG_HIER_STRUCT_STG SET STATUS ='ERROR'
                     ,ERROR_MESSAGE='Invalid Organization'
                      WHERE rec_org_struct.SEQUENCE_NUMBER=SEQUENCE_NUMBER;
                ELSIF l_process_flag='Y' and l_mode = TRUE THEN
                     UPDATE XX_HR_ORG_HIER_STRUCT_STG SET STATUS ='VALIDATED'
                    --  ,ERROR_MESSAGE = x_inactive_org_warn
                      WHERE rec_org_struct.SEQUENCE_NUMBER=SEQUENCE_NUMBER
                      AND STATUS='NEW';
                END IF;
                 
              EXCEPTION WHEN OTHERS THEN
                xx_fnd_utils_pkg.LOG (
                                       p_debug_level => xx_fnd_utils_pkg.procedure_level
                                       ,p_routine_name => lcroutine
                                       ,p_debug_msg => 'Error while creating the org hierarchy : '
                                       ,p_module => gc_module);
                   
               /* l_error_msg :=SQLERRM;
                 UPDATE XX_HR_ORG_HIER_STRUCT_STG SET STATUS ='ERROR'
                      ,ERROR_MESSAGE = l_error_msg
                      WHERE rec_org_struct.SEQUENCE_NUMBER=SEQUENCE_NUMBER
                      AND STATUS='NEW';
                */
               
        END;
        
         --
         --
        ELSIF l_org_exist = 'N'  THEN
          UPDATE XX_HR_ORG_HIER_STRUCT_STG SET STATUS ='ERROR'
                      ,ERROR_MESSAGE=substr(l_error_msg||' - Parent Org does not exist in the Hierarchy',1,400)
                 WHERE rec_org_struct.SEQUENCE_NUMBER=SEQUENCE_NUMBER
                 AND STATUS='NEW';
        ELSE
          UPDATE XX_HR_ORG_HIER_STRUCT_STG SET STATUS ='ERROR'
                      ,ERROR_MESSAGE=substr(l_error_msg||' - Invalid Hierarchy_Name',1,400)
                 WHERE rec_org_struct.SEQUENCE_NUMBER=SEQUENCE_NUMBER
                 AND STATUS='NEW';
        END IF;
         ELSIF rec_org_struct.newmode='DELETE' THEN
           --
           --
           BEGIN
             --
             SELECT COUNT(*) INTO l_child_org_count
             FROM per_org_structure_elements
             WHERE organization_id_parent = l_child_org_id
             AND org_structure_element_id=l_org_struct_element_id;
          EXCEPTION WHEN OTHERS THEN
             l_child_org_count :=0;
            END;
           
            --
            --
              IF l_child_org_count > 0 THEN
             
             UPDATE XX_HR_ORG_HIER_STRUCT_STG SET STATUS ='ERROR'
                      ,ERROR_MESSAGE='Unable to delete the Child Organization, It is parent of other Organization.'
                 WHERE rec_org_struct.SEQUENCE_NUMBER=SEQUENCE_NUMBER;
          ELSE
            dbms_output.put_line(l_org_struct_element_id);
            l_user_active    :=IS_USER_ACTIVE(l_child_org_id);
             --
             IF l_org_struct_element_id IS NOT NULL AND l_user_active='N' THEN
              BEGIN
             -- l_x_object_version_num    :=0;
               xx_fnd_utils_pkg.LOG (
                            p_debug_level => xx_fnd_utils_pkg.procedure_level
                            ,p_routine_name => lcroutine
                            ,p_debug_msg => 'Deleting Org Structure element : '||l_org_struct_element_id
                            ,p_module => gc_module);
                           
                  XX_HR_DELETE_HIERARCHY_ELEMENT (l_validate                   => l_mode
                                                 ,l_org_structure_element_id   => l_org_struct_element_id
                                                 ,l_object_version_number      => l_x_object_version_num );
                    --
                    if l_mode = FALSE THEN
                   
                    UPDATE XX_HR_ORG_HIER_STRUCT_STG
                    SET STATUS ='PROCESSED'
                    WHERE  rec_org_struct.SEQUENCE_NUMBER=SEQUENCE_NUMBER;
                    --
                    ELSE
                     --
                     UPDATE XX_HR_ORG_HIER_STRUCT_STG
             SET STATUS ='VALIDATED'
                     WHERE  rec_org_struct.SEQUENCE_NUMBER=SEQUENCE_NUMBER;
                     --
                    END IF;
                    --
                 EXCEPTION WHEN OTHERS THEN
                xx_fnd_utils_pkg.LOG (
                                       p_debug_level => xx_fnd_utils_pkg.procedure_level
                                       ,p_routine_name => lcroutine
                                       ,p_debug_msg => 'Error while deleting the org hierarchy : '||SQLERRM
                                       ,p_module => gc_module);
                   UPDATE XX_HR_ORG_HIER_STRUCT_STG SET STATUS ='ERROR'
                      ,ERROR_MESSAGE='Unable to Delete the Organization'
                 WHERE rec_org_struct.SEQUENCE_NUMBER=SEQUENCE_NUMBER
                 AND STATUS='NEW';
            END;
          ELSE  
             UPDATE XX_HR_ORG_HIER_STRUCT_STG SET STATUS ='ERROR',ERROR_MESSAGE='Unable To delete the Organization Invalid Version Number Or Organization have Active Employees'
                        WHERE  rec_org_struct.SEQUENCE_NUMBER=SEQUENCE_NUMBER;
          END IF;
      END IF;
            --
            --
      /*    ELSIF rec_org_struct.newmode='UPDATE' THEN
            IF l_org_struct_element_id IS NOT NULL THEN
      
          BEGIN
         
             XX_UPDATE_HIERARCHY_ELEMENT
                                  (l_validate                      => l_mode
                                  ,l_effective_date                => trunc(sysdate)
                                  ,l_org_structure_element_id      => l_org_struct_element_id
                                  ,l_organization_id_parent        => l_parent_org_id
                                  ,l_organization_id_child         => l_child_org_id
                                  ,l_pos_control_enabled_flag      => 'N'
                                  ,l_object_version_number         => rec_org_struct.version_no
                               
                                );
                 UPDATE XX_HR_ORG_HIER_STRUCT_STG SET STATUS ='PROCESSED'
                    WHERE  rec_org_struct.SEQUENCE_NUMBER=SEQUENCE_NUMBER;
              EXCEPTION WHEN OTHERS THEN
                  UPDATE XX_HR_ORG_HIER_STRUCT_STG SET STATUS ='ERROR'   --,ERROR_MESSAGE=SQLERRM
                        WHERE  rec_org_struct.SEQUENCE_NUMBER=SEQUENCE_NUMBER;
          END;
          --
          --
          ELSE
           UPDATE XX_HR_ORG_HIER_STRUCT_STG SET STATUS ='ERROR',ERROR_MESSAGE='Invalid org structure element id'
                        WHERE  rec_org_struct.SEQUENCE_NUMBER=SEQUENCE_NUMBER;
          --
          --
      END IF;
    --
    --*/
    COMMIT;
    END IF;
   --
   END LOOP;
     
      UPDATE XX_HR_ORG_HIER_STRUCT_STG
      SET STATUS ='ERROR',ERROR_MESSAGE='Invalid Mode'
      WHERE NEWMODE IS NULL;
      --     
        COMMIT;
       
        SELECT count(*) into l_total_count FROM XX_HR_ORG_HIER_STRUCT_STG;
        --
        SELECT count(*) into l_error_count FROM XX_HR_ORG_HIER_STRUCT_STG WHERE STATUS ='ERROR' ;
        --
        IF l_mode = FALSE THEN
        SELECT count(*) into l_process_count FROM XX_HR_ORG_HIER_STRUCT_STG WHERE STATUS ='PROCESSED' ;
        ELSE
        SELECT count(*) into l_process_count FROM XX_HR_ORG_HIER_STRUCT_STG WHERE STATUS ='VALIDATED' ;
        END IF;
        --
        --
         xx_fnd_utils_pkg.LOG (
                            p_debug_level => xx_fnd_utils_pkg.procedure_level
                            ,p_routine_name => lcroutine
                            ,p_debug_msg => '***********************************************  '
                            ,p_module => gc_module);
         xx_fnd_utils_pkg.LOG (
                            p_debug_level => xx_fnd_utils_pkg.procedure_level
                            ,p_routine_name => lcroutine
                            ,p_debug_msg => '******* Record Summery ************************  '
                            ,p_module => gc_module);
         xx_fnd_utils_pkg.LOG (
                            p_debug_level => xx_fnd_utils_pkg.procedure_level
                            ,p_routine_name => lcroutine
                            ,p_debug_msg => '**** Total Records :  '||l_total_count
                            ,p_module => gc_module);
        xx_fnd_utils_pkg.LOG (
                            p_debug_level => xx_fnd_utils_pkg.procedure_level
                            ,p_routine_name => lcroutine
                            ,p_debug_msg => '**** Total Processed Records :  '||l_process_count
                            ,p_module => gc_module);
        xx_fnd_utils_pkg.LOG (
                            p_debug_level => xx_fnd_utils_pkg.procedure_level
                            ,p_routine_name => lcroutine
                            ,p_debug_msg => '**** Total Errored Records :  '||l_error_count
                            ,p_module => gc_module);
END MAIN;
--    
END XX_HR_ORG_HIERARCHY_PKG;

1 comment:

  1. I'm  here to share my testimony of what a good trusted loan company did for me. My name is Nikita Tanya, from Russian and I’m a lovely mother of 3 kids I lost my funds on trying to get a loan it was so hard for me and my children, I went online to seek for a loan assistance  all hope was lost until one faithful day when I met this friend of mine who recently secured a loan from a very honest man Mr, Benjamin. She introduced me to this honest loan officer Mr, Benjamin  who helped me get a loan in within 5 working days, I will forever be grateful to Mr Benjamin, for helping me get back on feet again. You can contact Mr Benjamin via email: 247officedept@gmail.com    they do not know I’m doing this for them, but i just have to do it because a lot of people are out there who are in need of a loan assistance  please come to this honest man  and  you can be save as well .WhatsApp:(+1 989-394-3740)

    ReplyDelete