Pages

Sunday, February 8, 2015

API For Element Entry at Assignment Screen

API for Element Entry at Assignment Screen.

API TO Create Element Entry for Eligible Employees

DECLARE
   v_asg_id                 NUMBER         := NULL;
   v_effective_start_date   DATE           := NULL;
   v_effective_end_date     DATE           := NULL;
   v_element_entry_id       NUMBER         := NULL;
   v_ovn                    NUMBER         := NULL;
   v_asg_no                 NUMBER         := NULL;
   v_warning                BOOLEAN        := NULL;
   l_errm                   VARCHAR2 (500) := NULL;
   v_element_link_id        NUMBER         := NULL;

   CURSOR eligible_employee
   IS
      SELECT pasf.assignment_number, pasf.assignment_id,
             pasf.effective_start_date, pasf.effective_end_date
        FROM apps.per_all_assignments_f pasf,
             apps.per_all_people_f papf,
             apps.pay_people_groups ppg,
             apps.fnd_flex_value_sets ffvs,
             apps.fnd_flex_values ffv,
             apps.fnd_flex_values_tl ffvtl,
             apps.hr_lookups hl,
             apps.per_jobs pj,
             apps.per_grades pg,
             apps.per_grade_definitions pgd,
             apps.per_job_definitions pjd,
             apps.per_periods_of_service ppos
       WHERE pasf.person_id = papf.person_id
         AND '29-JAN-2015' BETWEEN pasf.effective_start_date
                               AND pasf.effective_end_date
         AND '29-JAN-2015' BETWEEN papf.effective_start_date
                               AND papf.effective_end_date
         AND pasf.primary_flag = 'Y'
         AND pasf.assignment_type = 'E'
         AND papf.person_type_id IN (66, 67)
         AND pasf.payroll_id IS NOT NULL
         AND pasf.payroll_id = 62
         AND pj.job_id = pasf.job_id
         AND pg.grade_id = pasf.grade_id
         AND pgd.grade_definition_id = pg.grade_definition_id
         AND pjd.job_definition_id = pj.job_definition_id
         AND ppos.period_of_service_id = pasf.period_of_service_id
         AND ppg.people_group_id = pasf.people_group_id
         AND ffvs.flex_value_set_name = 'CONTRACT_TYPE_D'
         AND ffv.flex_value_set_id = ffvs.flex_value_set_id
         AND ffvtl.flex_value_id = ffv.flex_value_id
         AND ffvtl.LANGUAGE = 'US'
         AND ppg.segment2 = ffv.flex_value
         AND hl.lookup_type(+) = 'NATIONALITY'
         AND hl.lookup_code(+) = papf.nationality
         AND (    ffvtl.description NOT IN
                      ('Locum', 'Employee on secondment (From the Hospital)')
              AND hl.meaning = 'Saudi Arabia'
              AND (   ppos.actual_termination_date IS NULL
                   OR ppos.actual_termination_date > '29-JAN-2015'
                  )
             )
         -- CHECK IF EMPLOYEE HAS TAKEN UNPAID LEAVE DURING THIS PERIOD THEN IT IS NOT ELIGIBLE
         AND papf.person_id NOT IN (
                SELECT papf.person_id
                  FROM per_all_people_f papf,
                       per_all_assignments_f paaf,
                       per_absence_attendances paa,
                       per_absence_attendance_types paat
                 WHERE papf.person_id = paaf.person_id
                   AND papf.current_employee_flag = 'Y'
                   AND TRUNC (SYSDATE) BETWEEN papf.effective_start_date
                                           AND papf.effective_end_date
                   AND TRUNC (SYSDATE) BETWEEN paaf.effective_start_date
                                           AND paaf.effective_end_date
                   AND paaf.primary_flag = 'Y'
                   AND paaf.assignment_type = 'E'
                   AND paaf.payroll_id = 62
                   AND paaf.assignment_status_type_id IN (1, 2)
                   AND papf.person_id = paa.person_id
                   AND paa.absence_attendance_type_id =
                                               paat.absence_attendance_type_id
                   AND paat.NAME = 'Unpaid / Unauthorized Leave'
                   AND (   (    paa.date_start <= TO_DATE ('21-JAN-2015')
                            AND paa.date_end >= TO_DATE ('19-FEB-2015')
                           )
                        OR (   paa.date_start BETWEEN TO_DATE ('21-JAN-2015')
                                                  AND TO_DATE ('19-FEB-2015')
                            OR paa.date_end BETWEEN TO_DATE ('21-JAN-2015')
                                                AND TO_DATE ('19-FEB-2015')
                           )
                       )
                UNION
                SELECT papf.person_id
                  FROM hr_api_transactions trn,
                       per_all_people_f papf,
                       per_all_assignments_f paaf
                 WHERE transaction_ref_table = 'PER_ABSENCE_ATTENDANCES'
                   AND selected_person_id = papf.person_id
                   AND trn.assignment_id = paaf.assignment_id
                   AND papf.current_employee_flag = 'Y'
                   AND paaf.primary_flag = 'Y'
                   AND paaf.assignment_type = 'E'
                   AND paaf.payroll_id = 62
                   AND paaf.assignment_status_type_id IN (1, 2)
                   AND TRUNC (SYSDATE) BETWEEN papf.effective_start_date
                                           AND papf.effective_end_date
                   AND TRUNC (SYSDATE) BETWEEN paaf.effective_start_date
                                           AND paaf.effective_end_date
                   AND status = 'Y'
                   AND transaction_identifier = 'ABSENCES'
                   AND apps.ameutil_pkg.get_trn_attr_value_f
                                                          (trn.transaction_id,
                                                           'AttributeCategory'
                                                          ) =
                                                 'Unpaid / Unauthorized Leave'
                   AND (   (    TO_DATE
                                   (apps.ameutil_pkg.get_trn_attr_value_f
                                                          (trn.transaction_id,
                                                           'DateStart'
                                                          ),
                                    'RRRR-MM-DD'
                                   ) <= TO_DATE ('21-JAN-2015')
                            AND TO_DATE
                                   (apps.ameutil_pkg.get_trn_attr_value_f
                                                          (trn.transaction_id,
                                                           'DateEnd'
                                                          ),
                                    'RRRR-MM-DD'
                                   ) >= TO_DATE ('19-FEB-2015')
                           )
                        OR (   TO_DATE
                                  (apps.ameutil_pkg.get_trn_attr_value_f
                                                          (trn.transaction_id,
                                                           'DateStart'
                                                          ),
                                   'RRRR-MM-DD'
                                  ) BETWEEN TO_DATE ('21-JAN-2015')
                                        AND TO_DATE ('19-FEB-2015')
                            OR TO_DATE
                                  (apps.ameutil_pkg.kfsh_get_trn_attr_value_f
                                                          (trn.transaction_id,
                                                           'DateEnd'
                                                          ),
                                   'RRRR-MM-DD'
                                  ) BETWEEN TO_DATE ('21-JAN-2015')
                                        AND TO_DATE ('19-FEB-2015')
                           )
                       ))
         -- CHECK IF EMPLOYEE HAS TAKEN Accompany Leave DURING THIS PERIOD THEN IT IS NOT ELIGIBLE
         AND papf.person_id NOT IN (
                SELECT papf.person_id
                  FROM per_all_people_f papf,
                       per_all_assignments_f paaf,
                       per_absence_attendances paa,
                       per_absence_attendance_types paat
                 WHERE papf.person_id = paaf.person_id
                   AND papf.current_employee_flag = 'Y'
                   AND TRUNC (SYSDATE) BETWEEN papf.effective_start_date
                                           AND papf.effective_end_date
                   AND TRUNC (SYSDATE) BETWEEN paaf.effective_start_date
                                           AND paaf.effective_end_date
                   AND paaf.primary_flag = 'Y'
                   AND paaf.assignment_type = 'E'
                   AND paaf.assignment_status_type_id IN (1, 2)
                   AND papf.person_id = paa.person_id
                   AND paaf.payroll_id = 62
                   AND paa.absence_attendance_type_id =
                                               paat.absence_attendance_type_id
                   AND paat.NAME = 'Accompany Leave - Paid'
                   AND (   (    paa.date_start <= TO_DATE ('21-JAN-2015')
                            AND paa.date_end >= TO_DATE ('19-FEB-2015')
                           )
                        OR (   paa.date_start BETWEEN TO_DATE ('21-JAN-2015')
                                                  AND TO_DATE ('19-FEB-2015')
                            OR paa.date_end BETWEEN TO_DATE ('21-JAN-2015')
                                                AND TO_DATE ('19-FEB-2015')
                           )
                       )
                UNION
                SELECT papf.person_id
                  FROM hr_api_transactions trn,
                       per_all_people_f papf,
                       per_all_assignments_f paaf
                 WHERE transaction_ref_table = 'PER_ABSENCE_ATTENDANCES'
                   AND selected_person_id = papf.person_id
                   AND trn.assignment_id = paaf.assignment_id
                   AND papf.current_employee_flag = 'Y'
                   AND paaf.primary_flag = 'Y'
                   AND paaf.assignment_type = 'E'
                   AND paaf.payroll_id = 62
                   AND paaf.assignment_status_type_id IN (1, 2)
                   AND TRUNC (SYSDATE) BETWEEN papf.effective_start_date
                                           AND papf.effective_end_date
                   AND TRUNC (SYSDATE) BETWEEN paaf.effective_start_date
                                           AND paaf.effective_end_date
                   AND status = 'Y'
                   AND transaction_identifier = 'ABSENCES'
                   AND apps.ameutil_pkg.kfsh_get_trn_attr_value_f
                                                          (trn.transaction_id,
                                                           'AttributeCategory'
                                                          ) =
                                                      'Accompany Leave - Paid'
                   AND (   (    TO_DATE
                                   (apps.ameutil_pkg.get_trn_attr_value_f
                                                          (trn.transaction_id,
                                                           'DateStart'
                                                          ),
                                    'RRRR-MM-DD'
                                   ) <= TO_DATE ('21-JAN-2015')
                            AND TO_DATE
                                   (apps.ameutil_pkg.kfsh_get_trn_attr_value_f
                                                          (trn.transaction_id,
                                                           'DateEnd'
                                                          ),
                                    'RRRR-MM-DD'
                                   ) >= TO_DATE ('19-FEB-2015')
                           )
                        OR (   TO_DATE
                                  (apps.ameutil_pkg.kfsh_get_trn_attr_value_f
                                                          (trn.transaction_id,
                                                           'DateStart'
                                                          ),
                                   'RRRR-MM-DD'
                                  ) BETWEEN TO_DATE ('21-JAN-2015')
                                        AND TO_DATE ('19-FEB-2015')
                            OR TO_DATE
                                  (apps.ameutil_pkg.kfsh_get_trn_attr_value_f
                                                          (trn.transaction_id,
                                                           'DateEnd'
                                                          ),
                                   'RRRR-MM-DD'
                                  ) BETWEEN TO_DATE ('21-JAN-2015')
                                        AND TO_DATE ('19-FEB-2015')
                           )
                       ));
BEGIN
   SELECT element_link_id
     INTO v_element_link_id
     FROM pay_element_links_f pelf, pay_element_types_f petf
    WHERE TRUNC (SYSDATE) BETWEEN pelf.effective_start_date
                              AND pelf.effective_end_date
      AND TRUNC (SYSDATE) BETWEEN petf.effective_start_date
                              AND petf.effective_end_date
      AND pelf.element_type_id = petf.element_type_id
      AND petf.element_name = 'KING_SALMAN_BONUS'
      AND pelf.payroll_id = 23;

   FOR i IN eligible_employee
   LOOP
      v_effective_start_date := NULL;
      v_effective_end_date := NULL;
      v_ovn := NULL;
      l_errm := NULL;

      BEGIN
         pay_element_entry_api.create_element_entry
                 (p_validate                   => FALSE,
                  p_effective_date             => '21-JAN-2015',
                                                     -- i.effective_start_date
                  p_business_group_id          => 44,
                  p_assignment_id              => i.assignment_id,
                  p_element_link_id            => v_element_link_id,
                  p_entry_type                 => 'E',
                  p_effective_start_date       => v_effective_start_date,
                  p_effective_end_date         => v_effective_end_date,
                  p_element_entry_id           => v_element_entry_id,
                  p_object_version_number      => v_ovn,
                  p_create_warning             => v_warning
                 );
         COMMIT;

         INSERT INTO sal_bonus
              VALUES (i.assignment_number, 'SUCCESS', 'RAMADAN',
                      TRUNC (SYSDATE));
      EXCEPTION
         WHEN OTHERS
         THEN
            l_errm := SQLERRM;

            INSERT INTO salm_bonus
                 VALUES (NULL, l_errm, 'RAMADAN', TRUNC (SYSDATE));
      END;
   END LOOP;
EXCEPTION
   WHEN OTHERS
   THEN
      l_errm := SQLERRM;

      INSERT INTO salm_bonus
           VALUES (NULL, l_errm, 'RAMADAN', TRUNC (SYSDATE));
END;

/

No comments:

Post a Comment