Monday, 18 March 2019

API To Update Contracts

DECLARE
   CURSOR c_contract
   IS
        SELECT DISTINCT pap.employee_number,
                        pap.person_id,
                        pcf.status,
                        pcf.duration,
                        pcf.duration_units,
                        pcf.CONTRACTUAL_JOB_TITLE,
                        pcf.TYPE,
                        CTR_INFORMATION1 old_emp_status,
                        pcf.CTR_INFORMATION_CATEGORY,
                        con.UPDATECONTRACTTYPE employment_status,
                        pcf.contract_id,
                        pcf.OBJECT_VERSION_NUMBER,
                        pcf.effective_start_date,
                        pcf.REFERENCE,
                        con.err_msg,
                        con.flag
          FROM XX_TICKET_TMP con, per_all_people_f pap, per_contracts_f pcf
         WHERE     pap.employee_number = con.empno
               AND TRUNC (SYSDATE) BETWEEN pap.effective_start_date
                                       AND pap.effective_end_date
               AND TRUNC (SYSDATE) BETWEEN pcf.effective_start_date
                                       AND pcf.Effective_end_date
               AND pcf.person_id = pap.person_id
               AND pcf.status = 'A-ACTIVE'
               AND con.UPDATECONTRACTTYPE NOT IN
                      (SELECT DECODE (CTR_INFORMATION1,
                                      'BACHELOR_STATUS', 'Bachelor Status',
                                      'FAMILY_STATUS', 'Family Status')
                         FROM per_contracts_f pc
                        WHERE     TRUNC (SYSDATE) BETWEEN pc.effective_start_date
                                                      AND pc.Effective_end_date
                              AND pc.person_id = pap.person_id
                              AND pc.status = 'A-ACTIVE')
               AND flag IS NULL
     
      ORDER BY 1;


   lc_c_contract             c_contract%ROWTYPE;
   l_effective_start_date    DATE;
   l_effective_end_date      DATE;
   l_object_version_number   NUMBER;
   error_desc                VARCHAR2 (240);
   lv_contract_flag          CHAR (1);
   --l_seq                     VARCHAR2 (20);
   --v_type                    VARCHAR2 (80);
   --  v_status                  VARCHAR2 (30);
   v_emp_status              VARCHAR2 (80);
BEGIN
   OPEN c_contract;

   LOOP
      FETCH c_contract INTO lc_c_contract;

      EXIT WHEN c_contract%NOTFOUND;

      BEGIN
         SELECT lookup_code
           INTO v_emp_status
           FROM fnd_lookup_values_vl
          WHERE     lookup_type = 'SA_EMPLOYMENT_STATUS'
                AND meaning = lc_c_contract.employment_status;
      EXCEPTION
         WHEN OTHERS
         THEN
            error_desc := 'Invalid Employment Status-' || SQLERRM;


            UPDATE XX_TICKET_TMP
               SET err_msg = error_desc, flag = 'N'
             WHERE TRIM (empno) = lc_c_contract.employee_number;
      END;



      /*============================API Starts===================================*/



      BEGIN
         hr_contract_api.update_contract (
            p_validate                   => FALSE,
            p_contract_id                => lc_c_contract.contract_id,
            p_effective_start_date       => l_effective_start_date,
            p_effective_end_date         => l_effective_end_date,
            p_object_version_number      => lc_c_contract.object_version_number,
            p_person_id                  => lc_c_contract.person_id,
            p_reference                  => lc_c_contract.REFERENCE, --  ,p_type                   =>
            p_type                       => lc_c_contract.TYPE,
            p_status                     => lc_c_contract.status,
            p_duration                   => lc_c_contract.duration,
            p_duration_units             => lc_c_contract.duration_units,
            p_contractual_job_title      => lc_c_contract.contractual_job_title,
            p_ctr_information_category   => lc_c_contract.CTR_INFORMATION_CATEGORY,
            p_ctr_information1           => v_emp_status,
            p_effective_date             => SYSDATE,
            p_datetrack_mode             => 'CORRECTION');



         IF lc_c_contract.contract_id IS NOT NULL
         THEN
            lv_contract_flag := 'Y';
            error_desc := 'NO ERROR';
         END IF;


         IF lv_contract_flag = 'Y'
         THEN
            UPDATE XX_TICKET_TMP
               SET err_msg = error_desc, flag = lv_contract_flag
             WHERE TRIM (empno) = lc_c_contract.employee_number;
         ELSE
            error_desc := error_desc || SQLERRM;

            UPDATE XX_TICKET_TMP
               SET err_msg = error_desc, flag = 'N'
             WHERE TRIM (empno) = lc_c_contract.employee_number;
         END IF;

         DBMS_OUTPUT.put_line ('Contracts Uploaded Successfully:! ');
         DBMS_OUTPUT.put_line (
            'CONTRACT ID    : ' || lc_c_contract.contract_id);
      EXCEPTION
         WHEN OTHERS
         THEN
            lv_contract_flag := 'N';
            error_desc := error_desc || SQLERRM;

            UPDATE XX_TICKET_TMP
               SET err_msg = error_desc, flag = lv_contract_flag
             WHERE TRIM (empno) = lc_c_contract.employee_number;

            DBMS_OUTPUT.put_line (SQLERRM);
      END;

      -- l_contract_id := '';

      l_object_version_number := '';
      l_effective_start_date := '';
      l_effective_end_date := '';
      error_desc := '';
      lv_contract_flag := '';
   --COMMIT;
   END LOOP;
   CLOSE c_contract;
--DBMS_OUTPUT.PUT_LINE('LOCATION ID        : '||L_LOCATION_ID);

EXCEPTION
   WHEN OTHERS
   THEN
      DBMS_OUTPUT.put_line (SQLERRM);
END;

Wednesday, 21 March 2018

Query to Get Total No.of Employee Terminated by Month in a Current Year Sort by Department

  SELECT *

    FROM (  SELECT hro.name dept,

                   COUNT (employee_number) emp_term,

                   TO_CHAR (ps.actual_termination_date, 'MM') mon

              FROM per_all_assignments_f paf,

                   per_periods_of_service ps,

                   per_all_people_f pap,

                   per_person_types ppt,

                   hr_all_organization_units hro

             WHERE     paf.period_of_service_id = ps.period_of_service_id

                   AND ps.actual_termination_date IS NOT NULL

                   AND pap.person_id = paf.person_id

                   AND pap.person_type_id = ppt.person_type_id

                   AND paf.organization_id = hro.organization_id

                   AND ps.actual_termination_date BETWEEN pap.effective_start_date

                                                      AND pap.effective_end_date

                   AND ps.actual_termination_date BETWEEN paf.effective_start_date

                                                      AND paf.effective_end_date

                   AND TO_CHAR (ps.actual_termination_date, 'YYYY') = '2017'

          --TO_CHAR (SYSDATE, 'YYYY')

        --  AND ps.leaving_reason = 'RESIGNATION'

          GROUP BY hro.name, TO_CHAR (ps.actual_termination_date, 'MM')) PIVOT (SUM (

                                                                                   NVL (

                                                                                      emp_term,

                                                                                      0))

                                                                         FOR mon

                                                                         IN  ('01' AS JAN,

                                                                             '02' AS FEB,

                                                                             '03' AS MAR,

                                                                             '04' AS APR,

                                                                             '05' AS MAY,

                                                                             '06' AS JUN,

                                                                             '07' AS JUL,

                                                                             '08' AS AUG,

                                                                             '09' AS SEP,

                                                                             '10' AS OCT,

                                                                             '11' AS NOV,

                                                                             '12' AS DEC))

ORDER BY 1, 2

Query to Get Total No.of Employee Hired by Month in a Current Year Sort by Department

SELECT *
  FROM (  SELECT hro.name department,
                 COUNT (Employee_number) Total_emp_hire,
                 TO_CHAR (start_date, 'MM') mon
            FROM per_all_people_f pap,
                 per_all_assignments_f paf,
                 hr_all_organization_units hro
           WHERE     TO_CHAR (start_date, 'YYYY') = TO_CHAR (SYSDATE, 'YYYY')
                 AND TRUNC (SYSDATE) BETWEEN pap.effective_start_date
                                         AND pap.effective_end_date
                 AND pap.person_id = paf.person_id
                 AND paf.organization_id = hro.organization_id
                 AND TRUNC (SYSDATE) BETWEEN paf.effective_start_date
                                         AND paf.effective_end_date
        GROUP BY TO_CHAR (start_date, 'MM'),hro.name
        ) PIVOT (SUM (
                                                       NVL (Total_emp_hire,
                                                            0))
                                             FOR Mon
                                             IN  ('01' AS JAN,
                                                 '02' AS FEB,
                                                 '03' AS MAR,
                                                 '04' AS APR,
                                                 '05' AS MAY,
                                                 '06' AS JUN,
                                                 '07' AS JUL,
                                                 '08' AS AUG,
                                                 '09' AS SEP,
                                                 '10' AS OCT,
                                                 '11' AS NOV,
                                                 '12' AS DEC))
                                                 order by 1, 2

Tuesday, 13 March 2018

Oracle Approvals Management Analyzer

The EBS Approvals Management Analyzer is a tool designed to review and report AME setup by recommending known data fixes, code updates, and other guided assistance. It is a must-use tool for Customers who use the Approvals Management functionality. We recommend that the analyzer be run proactively and regularly, to help you keep ahead of any approvals issues. And of course, the analyzer is the go-to tool when having any approvals errors or issues. The analyzer is so convenient, you can even schedule it to run as a Concurrent Program (like any analyzer).
The Oracle Approvals Management Analyzer includes checks for:
  • Incorrect configuration variables
  • Parallelization configuration issues
  • Loops in supervisor hierarchy
  • Invalid approvers
  • AME patching



Download Link Below

Download Script

Review EBS Approvals Management Analyzer (Doc ID 2332426.1)

Saturday, 17 February 2018

Query to Get Employee Payslip

  SELECT per.employee_number,
         per.full_name,
         hro.name dept,
         pg.name job,
         pos.name Position,
         loc.location_code,
         (CASE
             WHEN pec.classification_name IN ('Earnings', 'Direct Payment')
             THEN
                NVL (pet.reporting_name, pet.element_name)
          END)
            AS Earnings,
         (CASE
             WHEN pec.classification_name IN
                     ('Voluntary Deductions',
                      'Involuntary Deductions',
                      'Social Insurance',
                      'Statutory Deductions')
             THEN
                NVL (pet.reporting_name, pet.element_name)
          END)
            AS Deductions,
         NVL (prrv.result_value, 0) pay_value,
         ptp.period_name
    FROM pay_payroll_actions ppa,
         pay_assignment_actions pac,
         per_all_assignments_f ass,
         per_all_people_f per,
         pay_run_results prr,
         pay_element_types_f pet,
         pay_element_classifications pec,
         pay_input_values_f piv,
         pay_run_result_values prrv,
         per_time_periods_v ptp,
         hr_all_organization_units hro,
         per_jobs_tl pg,
         hr_all_positions_f_tl pos,
         hr_locations_all loc
   WHERE     ppa.payroll_action_id = pac.payroll_action_id
         AND pac.assignment_id = ass.assignment_id
         AND ass.effective_end_date = TO_DATE ('12/31/4712', 'MM/DD/RRRR')
         AND ass.person_id = per.person_id
         AND per.effective_end_date = TO_DATE ('12/31/4712', 'MM/DD/RRRR')
         AND pac.assignment_action_id = prr.assignment_action_id
         AND prr.element_type_id = pet.element_type_id
         AND prr.run_result_id = prrv.run_result_id
         AND pet.element_type_id = piv.element_type_id
         AND piv.input_value_id = prrv.input_value_id
         AND ppa.time_period_id = ptp.time_period_id
         AND pec.classification_id = pet.classification_id
         AND ppa.action_status = 'C'
         AND UPPER (piv.NAME) = 'PAY VALUE'
         AND ass.organization_id = hro.organization_id
         AND ass.job_id = pg.job_id(+)
         AND pg.language(+) = USERENV ('LANG')
         AND ass.position_id = pos.position_id(+)
         AND pos.language(+) = USERENV ('LANG')
         and ass.location_id=loc.location_id(+)
         AND per.employee_number = &Emp_no
         AND ptp.period_name=&Period_name --LIKE '12 2017 Calendar Month'
         AND pec.classification_name IN
                ('Earnings',
                 'Direct Payment',
                 'Voluntary Deductions',
                 'Involuntary Deductions',
                 'Social Insurance',
                 'Statutory Deductions')
ORDER BY 1, 3, 4

Thursday, 15 February 2018

Query to Get Net Run Results from Payroll or Quick Pay Run

SELECT per.employee_number,
         per.full_name,
         ppa.effective_date,
         DECODE (ppa.action_type,  'Q', 'Quick Pay',  'R', 'Run') action_type,
         SUM (
            CASE
               WHEN UPPER (pec.classification_name) IN
                       ('EARNINGS', 'DIRECT PAYMENT')
               THEN
                  TO_NUMBER (NVL (prrv.result_value, 0))
               ELSE
                  0
            END)
            gross_earnings,
         SUM (
            CASE
               WHEN UPPER (pec.classification_name) IN
                       ('VOLUNTARY DEDUCTIONS',
                        'INVOLUNTARY DEDUCTIONS',
                        'SOCIAL INSURANCE',
                        'STATUTORY DEDUCTIONS')
               THEN
                  TO_NUMBER (NVL (prrv.result_value, 0))
               ELSE
                  0
            END)
            deductions,
           SUM (
              CASE
                 WHEN UPPER (pec.classification_name) IN
                         ('EARNINGS', 'DIRECT PAYMENT')
                 THEN
                    TO_NUMBER (NVL (prrv.result_value, 0))
                 ELSE
                    0
              END)
         - SUM (
              CASE
                 WHEN UPPER (pec.classification_name) IN
                         ('VOLUNTARY DEDUCTIONS',
                          'INVOLUNTARY DEDUCTIONS',
                          'SOCIAL INSURANCE',
                          'STATUTORY DEDUCTIONS')
                 THEN
                    TO_NUMBER (NVL (prrv.result_value, 0))
                 ELSE
                    0
              END)
            net_earnings
    FROM pay_payroll_actions ppa,
         pay_payrolls_f ppf,
         pay_assignment_actions paa,
         per_all_assignments_f paaf,
         per_all_people_f per,
         pay_run_results prr,
         pay_run_result_values prrv,
         pay_input_values_f pivf,
         pay_element_types_f petf,
         pay_element_classifications pec,
         hr_all_organization_units haou,
         pay_cost_allocation_keyflex pcak_org
   WHERE     ppf.payroll_id = ppa.payroll_id
         AND ppa.effective_date BETWEEN ppf.effective_start_date
                                    AND ppf.effective_end_date
         AND ppa.payroll_action_id = paa.payroll_action_id
         AND paaf.assignment_id = paa.assignment_id
         AND ppa.effective_date BETWEEN paaf.effective_start_date
                                    AND paaf.effective_end_date
         -- AND ppa.action_type = NVL (:l_action_type, ppa.action_type)
         AND ppa.effective_date BETWEEN :l_start_date AND :l_end_date
         AND per.person_id = paaf.person_id
         AND prr.assignment_action_id = paa.assignment_action_id
         --AND per.employee_number = '12345'
         AND prr.run_result_id = prrv.run_result_id
         AND pivf.input_value_id = prrv.input_value_id
         AND prr.element_type_id = petf.element_type_id
         AND pec.classification_id = petf.classification_id
         AND UPPER (pivf.name) = 'PAY VALUE'
         AND ppa.effective_date BETWEEN per.effective_start_date
                                    AND per.effective_end_date
         AND ppa.effective_date BETWEEN petf.effective_start_date
                                    AND petf.effective_end_date
         AND ppa.effective_date BETWEEN pivf.effective_start_date
                                    AND pivf.effective_end_date
         AND paaf.organization_id = haou.organization_id
         AND haou.cost_allocation_keyflex_id =
                pcak_org.cost_allocation_keyflex_id(+)
         AND ppa.effective_date BETWEEN haou.date_from
                                    AND NVL (haou.date_to,
                                             hr_general.end_of_time)
GROUP BY per.employee_number,
         per.full_name,
         ppa.action_type,
         ppa.effective_date