Showing posts with label HRMS. Show all posts
Showing posts with label HRMS. Show all posts

Oracle HRMS API: Update Employee Assignment API

/* Formatted on 12-Mar-18 3:40:47 PM (QP5 v5.114.809.3010) */

DECLARE
   l_object_version_number          NUMBER;
   l_special_ceiling_step_id        NUMBER;
   l_people_group_id                NUMBER;
   l_soft_coding_keyflex_id         NUMBER;
   l_supervisor_id                  NUMBER;
   l_assg_id                        NUMBER;
   l_group_name                     VARCHAR2 (200);
   l_effective_start_date           DATE;
   l_effective_end_date             DATE;
   l_org_now_no_manager_warning     BOOLEAN;
   l_other_manager_warning          BOOLEAN;
   l_no_managers_warning            BOOLEAN;
   l_spp_delete_warning             BOOLEAN;
   l_entries_changed_warning        VARCHAR2 (200);
   l_tax_district_changed_warning   BOOLEAN;
   l_concatenated_segments          VARCHAR2 (200);
   l_gsp_post_process_warning       VARCHAR2 (200);
   l_job_id                         VARCHAR2 (30);
   l_position_id                    VARCHAR2 (30);
   l_grade_id                       VARCHAR2 (30);
   l_org_id                         VARCHAR2 (30);
   l_loc_id                         VARCHAR2 (30);
   l_assg_cat                       VARCHAR2 (100);
   l_assg_start_date                DATE;
   l_pf_flag                        CHAR (1);
   l_segment1                       VARCHAR2 (100);
   l_segment2                       VARCHAR2 (100);
   l_segment3                       VARCHAR2 (100);
   l_person_id                      NUMBER;
   --
   v_emp_num                        VARCHAR2 (50);
   l_assign_date                    DATE;
   l_sup_hire_date                  DATE;
   l_emp_hire_date                  DATE;
   l_payroll_id                     NUMBER;
   l_paybasis_id                    NUMBER;
   l_comment_id                     NUMBER;
   l_count                          NUMBER := 0;
   l_error                          NUMBER;
   l_error_msg                      VARCHAR2 (4000);

   CURSOR c1
   IS
/* Formatted on 13-Mar-18 8:41:02 PM (QP5 v5.114.809.3010) */
SELECT   EMPLOYEE_ID,
         HIRE_DATE,
         (SELECT   DISTINCT PERSON_ID
            FROM   PER_ALL_PEOPLE_F
           WHERE   EMPLOYEE_NUMBER = t.EMPLOYEE_ID AND BUSINESS_GROUP_ID = 82)
            PERSON_ID,
         (SELECT   paf.EFFECTIVE_START_DATE
            FROM   PER_ALL_PEOPLE_F paf
           WHERE   paf.employee_number = t.EMPLOYEE_ID
                   AND BUSINESS_GROUP_ID = 82
                   AND SYSDATE BETWEEN paf.effective_start_date
                                   AND  paf.effective_end_date)
            effective_date,
         ORGANIZATION,
         (SELECT   organization_id
            FROM   hr_all_organization_units
           WHERE   UPPER (NAME) LIKE UPPER (ORGANIZATION)
                   AND business_group_id = 82)
            org_id,
         JOB,
         (SELECT   pj.job_id
            FROM   per_jobs pj, per_job_definitions pjd
           WHERE       pj.job_definition_id = pjd.job_definition_id
                   AND BUSINESS_GROUP_ID = 82
                   AND pj.NAME = JOB)
            job_id,
         POSITION,
         (SELECT   LOOKUP_CODE
            FROM   FND_LOOKUP_VALUES
           WHERE       LOOKUP_TYPE = 'HR_POSITION_NAME'
                   AND language = 'US'
                   AND MEANING = POSITION)
            POSITION_CODE,
         GRADE,
         SALARY_BASIS,
         PAYROLL_NAME,
         (SELECT   payroll_id
            FROM   pay_all_payrolls_f
           WHERE   1 = 1 AND UPPER (payroll_name) LIKE UPPER (t.PAYROLL_NAME)
                   AND TRUNC (SYSDATE) BETWEEN effective_start_date
                                           AND  effective_end_date)
            payroll_id,
         PROBATION_PERIOD,
         TO_CHAR (TO_DATE (PROBATION_END_DATE, 'mm/dd/yyyy'), 'DD-MON-YYYY')
            PROBATION_END_DATE,
         SUPERVISOR_LINE_MANAGER_NAME,
         SUPERVISOR_EMPLOYEE_NUMBER,
         TAX_UNIT_ENTITY_NAME,
         ASS_PROCESS_FLAG,
         ASS_PROCESS_MESSAGE
  FROM   XXHRL_MY_ASSIGNMENTS t;
      -- WHERE   NVL (ASS_PROCESS_MESSAGE, 'N') = 'N';

BEGIN
   FOR i IN c1
   LOOP
      DBMS_OUTPUT.put_line ('In Loop');

      l_object_version_number := NULL;
      l_special_ceiling_step_id := NULL;
      l_people_group_id := NULL;
      l_soft_coding_keyflex_id := NULL;
      l_group_name := NULL;
      l_effective_start_date := NULL;
      l_effective_end_date := NULL;
      l_org_now_no_manager_warning := FALSE;
      l_other_manager_warning := FALSE;
      l_spp_delete_warning := FALSE;
      l_entries_changed_warning := NULL;
      l_tax_district_changed_warning := FALSE;
      l_concatenated_segments := NULL;
      l_gsp_post_process_warning := NULL;
      l_assg_cat := NULL;
      l_job_id := NULL;
      l_position_id := NULL;
      l_grade_id := NULL;
      l_org_id := NULL;
      l_assign_date := NULL;
      l_sup_hire_date := NULL;
      l_emp_hire_date := NULL;

      l_soft_coding_keyflex_id := 61;
  
      -- AssignmentID
      BEGIN
         SELECT   paf.assignment_id
           INTO   l_assg_id
           FROM   per_assignments_f paf
          WHERE   paf.assignment_number = i.employee_id
                  AND BUSINESS_GROUP_ID = 82
                  AND SYSDATE BETWEEN paf.effective_start_date
                                  AND  paf.effective_end_date;
      EXCEPTION
         WHEN OTHERS
         THEN
            l_assg_id                  := NULL;
            l_error_msg := 'Assignment error';
            l_error := 1;
      END;

      -- Employee Hire Date Effective Date
      BEGIN
         SELECT   paf.start_date
           INTO   l_emp_hire_date
           FROM   per_all_people_f paf
          WHERE   paf.employee_number = i.employee_id
                  AND BUSINESS_GROUP_ID = 82
                  AND SYSDATE BETWEEN paf.effective_start_date
                                  AND  paf.effective_end_date;

         SELECT   TO_DATE (TO_CHAR (l_assign_date, 'RRRR/MM/DD HH24:MI:SS'),
                           'RRRR/MM/DD HH24:MI:SS')
           INTO   l_assign_date
           FROM   DUAL;
      EXCEPTION
         WHEN OTHERS
         THEN
            l_error_msg := 'Employee hire error';
            l_error := 1;
      END;

      -- Position ID
      BEGIN
         SELECT   pap.position_id
           INTO   l_position_id
           FROM   HR_ALL_POSITIONS_F pap, per_position_definitions ppd
          WHERE       pap.position_definition_id = ppd.position_definition_id
                  AND BUSINESS_GROUP_ID = 82
                  AND ORGANIZATION_ID = i.org_id
                  AND JOB_ID = I.JOB_ID
                  AND SUBSTR (pap.NAME, 7, LENGTH (NAME)) = i.POSITION;
      EXCEPTION
         WHEN OTHERS
         THEN
            -- l_position_id              := NULL;
            l_error_msg := 'Position error';
            l_error := 1;
      END;

      -- Grade ID
      BEGIN
         SELECT   pg.grade_id
           INTO   l_grade_id
           FROM   per_grades pg
          WHERE   BUSINESS_GROUP_ID = 82 AND name = i.grade;
      EXCEPTION
         WHEN OTHERS
         THEN
            l_grade_id := NULL;
      END;

      -- Location ID
      BEGIN
         SELECT   location_id
           INTO   l_loc_id
           FROM   hr_locations_all
          WHERE   UPPER (location_code) LIKE UPPER ('XXX');
      --i.LOCATION);
      EXCEPTION
         WHEN OTHERS
         THEN
            l_error_msg := 'Location ID error';
            l_error := 1;
      END;

      -- Object Version Number
      BEGIN
         SELECT   paaf.object_version_number
           INTO   l_object_version_number
           FROM   per_all_assignments_f paaf
          WHERE   SYSDATE BETWEEN paaf.effective_start_date
                              AND  paaf.effective_end_date
                  AND paaf.assignment_id = l_assg_id;
      EXCEPTION
         WHEN OTHERS
         THEN
            l_error_msg := 'Object Version error';
            l_error := 1;
      END;



      BEGIN
         hr_assignment_api.update_emp_asg_criteria (
            p_validate                       => FALSE,
            p_effective_date                 => TO_DATE (i.effective_date, 'DD-MON-RRRR'),
            p_datetrack_update_mode          => 'CORRECTION',
            p_assignment_id                  => l_assg_id,
            p_position_id                    => l_position_id,
            p_job_id                         => i.job_id,
            p_payroll_id                     => i.payroll_id,
            p_grade_id                       => l_grade_id,
            p_location_id                    => l_loc_id,
            p_organization_id                => i.org_id,
            p_pay_basis_id                   => l_paybasis_id,
            --Out parameters
            p_people_group_id                => l_people_group_id,
            p_object_version_number          => l_object_version_number,
            p_special_ceiling_step_id        => l_special_ceiling_step_id,
            p_group_name                     => l_group_name,
            p_effective_start_date           => l_effective_start_date,
            p_effective_end_date             => l_effective_end_date,
            p_org_now_no_manager_warning     => l_org_now_no_manager_warning,
            p_other_manager_warning          => l_other_manager_warning,
            p_spp_delete_warning             => l_spp_delete_warning,
            p_entries_changed_warning        => l_entries_changed_warning,
            p_tax_district_changed_warning   => l_tax_district_changed_warning,
            p_soft_coding_keyflex_id         => l_soft_coding_keyflex_id,
            p_concatenated_segments          => l_concatenated_segments
         );


         -- l_count := l_count + 1;

         DBMS_OUTPUT.put_line ('l_count: ' || l_count);

      EXCEPTION
         WHEN OTHERS
         THEN
            l_error := 1;
            l_error_msg := 'Assignmen Exception ' || SQLERRM;

DBMS_OUTPUT.put_line (l_error_msg);
END;

      BEGIN
         -- Update Employee Assignment only for probation details
         hr_assignment_api.update_emp_asg (
            p_effective_date           => TO_DATE (i.effective_date, 'DD-MON-RRRR'),
            p_datetrack_update_mode    => 'CORRECTION',   --// 'UPDATE',
            p_assignment_id            => l_assg_id,
           p_change_reason            => NULL,
            p_manager_flag             => 'Y',
            --  Output parameters
            p_probation_period         => i.PROBATION_PERIOD,
            p_probation_unit           => 'M',
            p_date_probation_end       => TO_DATE (i.PROBATION_END_DATE, 'DD-MON-RRRR'),
            p_object_version_number    => l_object_version_number,
            p_soft_coding_keyflex_id   => l_soft_coding_keyflex_id,
            p_concatenated_segments    => l_concatenated_segments,
            p_comment_id               => l_comment_id,
            p_effective_start_date     => l_effective_start_date,
            p_effective_end_date       => l_effective_end_date,
            p_no_managers_warning      => l_no_managers_warning,
            p_other_manager_warning    => l_other_manager_warning
         );

         l_count := l_count + 1;

         DBMS_OUTPUT.put_line ('l_count: ' || l_count);

         UPDATE   XXHRL_MY_ASSIGNMENTS
            SET   ASS_PROCESS_FLAG = 'Y', ASS_PROCESS_MESSAGE = 'Loaded'
          WHERE   employee_id = i.employee_id;
      EXCEPTION
         WHEN OTHERS
         THEN
            l_error := 1;
            l_error_msg := 'Probation API ' || SQLERRM;
      DBMS_OUTPUT.put_line (SQLERRM);

END;

      IF l_error = 1
      THEN
         UPDATE   XXHRL_MY_ASSIGNMENTS
            SET   ASS_PROCESS_FLAG = 'N', ASS_PROCESS_MESSAGE = l_error_msg
          WHERE   employee_id = i.employee_id;
      END IF;

      l_error := 0;
      l_error_msg := NULL;
   END LOOP;
EXCEPTION
   WHEN OTHERS
   THEN
      DBMS_OUTPUT.put_line (SQLERRM);
END;
 

How to - Oracle HRMS API: Create Positions API



Oracle HRMS Employee Create API Script




DECLARE

   l_eff_start_date            date;
   l_eff_end_date              date;
   l_effective_date            date := SYSDATE;
   l_job_id                    per_positions.job_id%TYPE;
   l_pos_org_id                per_positions.position_id%TYPE;
   l_validate_mode             boolean := FALSE;
   l_pos_type                  fnd_lookup_values.lookup_code%TYPE;
   l_avail_id                  per_shared_types.shared_type_id%TYPE;
   l_fte                       number;
   l_max_persons               number;
   l_probation_period          number;
   l_probation_unit_desc       varchar2 (500);
   l_business_group_id         number := 82;
   l_segment1                  varchar2 (20);
   l_orcl_pos_title_code       fnd_lookup_values.lookup_code%TYPE;
   l_orcl_pos_title_code_num   number;
   l_attribute8                hr_all_positions_f.attribute8%TYPE;
   l_attribute9                hr_all_positions_f.attribute9%TYPE;
   l_grade_id                  hr_all_positions_f.entry_grade_id%TYPE;
   l_barg_unit_cd              hr_all_positions_f.bargaining_unit_cd%TYPE;
   l_attribute6                hr_all_positions_f.attribute6%TYPE;
   l_working_hours             hr_all_positions_f.working_hours%TYPE;
   l_frequency                 hr_all_positions_f.frequency%TYPE;
   l_position_id               per_positions.position_id%TYPE;
   l_object_version_number     hr_all_positions_f.object_version_number%TYPE;
   l_position_definition_id    number;
   l_pos_name                  per_positions.name%TYPE;
   l_location_id               number;
   l_count                     NUMBER := 0;
   l_error                     NUMBER;
   l_error_msg                 VARCHAR2 (4000);

   CURSOR c1
   IS
      SELECT   DISTINCT
               POSITION,
               (SELECT   LOOKUP_CODE
                  FROM   FND_LOOKUP_VALUES
                 WHERE       LOOKUP_TYPE = 'HR_POSITION_NAME'
                         AND LANGUAGE = 'US'
                         AND MEANING = POSITION)
                  POSITION_1,
               JOB,
               (SELECT   pj.job_id
                  FROM   per_jobs pj, per_job_definitions pjd
                 WHERE       pj.job_definition_id = pjd.job_definition_id
                         AND BUSINESS_GROUP_ID = 82
                         AND pj.NAME = JOB)
                  job_id,
               ORGANIZATION,
               (SELECT   organization_id
                  FROM   hr_all_organization_units
                 WHERE   UPPER (NAME) LIKE UPPER (ORGANIZATION)
                         AND business_group_id = 82)
                  org_id
        FROM   XXHRL_MY_ASSIGNMENTS
       WHERE   NVL (pos_process_flag, 'N') = 'N';
BEGIN
   l_orcl_pos_title_code_num := 10001;

   FOR i IN c1
   LOOP
      BEGIN
         DBMS_OUTPUT.put_line ('In Loop');

         l_error := 0;
         l_pos_type := 'NONE';
         l_avail_id := 1;
         l_position_id := NULL;
         l_object_version_number := NULL;
         l_eff_start_date := NULL;
         l_eff_end_date := NULL;
         l_position_definition_id := NULL;
         l_pos_name := NULL;
         l_location_id := 145;                          --Location_code = XXXX

         hr_position_api.create_position (
            p_validate                 => FALSE,
            p_position_id              => l_position_id,
            p_effective_start_date     => l_eff_start_date,
            p_effective_end_date       => l_eff_end_date,
            p_position_definition_id   => l_position_definition_id,
            p_name                     => l_pos_name,
            p_object_version_number    => l_object_version_number,
            p_job_id                   => i.JOB_ID,
            p_organization_id          => i.ORG_ID,
            p_effective_date           => '01-Jan-1992',
            p_date_effective           => '01-Jan-1992',
            p_language_code            => 'US',
            p_availability_status_id   => l_avail_id,
            p_business_group_id        => 82,
            p_location_id              => l_location_id,
            p_position_type            => 'NONE',
            p_segment1                 => TO_CHAR (l_orcl_pos_title_code_num),
            p_segment2                 => i.POSITION_1
         );


         DBMS_OUTPUT.put_line ('l_pos_name: ' || l_pos_name);

         UPDATE   XXHRL_MY_ASSIGNMENTS
            SET   POS_PROCESS_FLAG = 'Y', POS_PROCESS_MESSAGE = 'Loaded'
          -- POS_SEQ_NO = l_orcl_pos_title_code_num
          WHERE   POSITION = i.POSITION;

         l_orcl_pos_title_code_num := l_orcl_pos_title_code_num + 1;
         l_count := l_count + 1;
      EXCEPTION
         WHEN OTHERS
         THEN
            l_error := 1;
            l_error_msg := 'Exception ' || SQLERRM;
      DBMS_OUTPUT.put_line (SQLERRM);

 END;

      IF l_error = 1
      THEN
         UPDATE   XXHRL_MY_ASSIGNMENTS
            SET   POS_PROCESS_FLAG = 'N', POS_PROCESS_MESSAGE = l_error_msg
          WHERE   POSITION = i.POSITION;
      END IF;

      l_error := 0;
      l_error_msg := NULL;
   END LOOP;
EXCEPTION
   WHEN OTHERS
   THEN
      DBMS_OUTPUT.put_line (SQLERRM);
END;