Showing posts with label Fusion. Show all posts
Showing posts with label Fusion. Show all posts

Thursday, 19 September 2019

Script for getting Sales Tax Transactions

SELECT DISTINCT aia.invoice_date transaction_date,
                aia.invoice_num transaction_number, hou.NAME company_name,               
                zl.tax_rate_code tax_code, zl.tax_rate tax_rate,
                (SELECT meaning
                   FROM fnd_lookup_values_vl
                  WHERE lookup_code = UPPER (zl.event_class_code)
                    AND lookup_type = 'ZX_TRL_TAXABLE_TRX_TYPE'
                    AND enabled_flag = 'Y') transaction_class,               
                aia.gl_date accounting_date,
                psv.vendor_name third_party, pss.vendor_site_code site,
                zl.tax_amt tax_amount, zl.trx_currency_code entered_curr,
                zl.taxable_amt_funcl_curr tax_base_amount,
                NVL (zl.tax_currency_code, zl.trx_currency_code) functional_currency,
                tax_amt_funcl_curr tax_amount_func,
                xle.accounting_status, xle.tgl GL_Transfer_Status
           FROM ap_invoices_all aia,
                ap_invoice_lines_all ail,
                poz_suppliers_v psv,
                poz_supplier_sites_v pss,
                zx_lines zl,
                xle_entity_profiles hou,
                (SELECT CASE
                           WHEN xae.gl_transfer_date IS NULL
                              THEN 'Not Transferred'
                           ELSE 'Transferred'
                        END tgl,
                        xte.source_id_int_1,
                        CASE
                           WHEN xae.accounting_date IS NULL
                              THEN 'Draft'
                           ELSE 'Accounted'
                        END accounting_status
                   FROM xla_transaction_entities xte, xla_ae_headers xae
                  WHERE xte.entity_id = xae.entity_id) xle
          WHERE aia.invoice_id = ail.invoice_id
            AND aia.vendor_id = psv.vendor_id
            AND aia.vendor_site_id = pss.vendor_site_id
            AND ail.invoice_id = zl.trx_id(+)
            AND ail.line_number = zl.trx_line_number(+)
            AND hou.legal_entity_id(+) = aia.legal_entity_id           
            AND zl.cancel_flag <> 'Y'
            AND aia.cancelled_date IS NULL
UNION
SELECT DISTINCT rct.trx_date transaction_date,
                rct.trx_number transaction_number, hou.NAME company_name,               
                zl.tax_rate_code tax_code, zl.tax_rate tax_rate,
                (SELECT meaning
                   FROM fnd_lookup_values_vl
                  WHERE lookup_code = zl.event_class_code
                    AND lookup_type = 'ZX_TRL_TAXABLE_TRX_TYPE'
                    AND enabled_flag = 'Y') transaction_class,               
                gl_date accounting_date,
                hca.account_name third_party,
                NVL (hps.party_site_name, hps.party_site_number) site,
                zl.tax_amt tax_amount, zl.trx_currency_code entered_curr,
                zl.taxable_amt_funcl_curr tax_base_amount,
                NVL (zl.tax_currency_code, zl.trx_currency_code ) functional_currency,
                tax_amt_funcl_curr tax_amount_func,
                xle.accounting_status, xle.tgl GL_Transfer_Status
           FROM ra_customer_trx_all rct,
                ra_customer_trx_lines_all rctl,
                zx_lines zl,
                xle_entity_profiles hou,
                hz_cust_site_uses_all hcsua,
                hz_cust_acct_sites_all hcasa,
                hz_cust_accounts hca,
                hz_party_sites hps,
                (SELECT DISTINCT customer_trx_line_id, gl_date,
                                 customer_trx_id
                            FROM ra_cust_trx_line_gl_dist_all) dist_tab,
                (SELECT CASE
                           WHEN xae.gl_transfer_date IS NULL
                              THEN 'Not Transferred'
                           ELSE 'Transferred'
                        END tgl,
                        xte.source_id_int_1,
                        CASE
                           WHEN xae.accounting_date IS NULL
                              THEN 'Draft'
                           ELSE 'Accounted'
                        END accounting_status
                   FROM xla_transaction_entities xte, xla_ae_headers xae
                  WHERE xte.entity_id = xae.entity_id) xle
          WHERE rct.customer_trx_id = rctl.customer_trx_id
            AND rct.customer_trx_id = zl.trx_id(+)
            AND rctl.line_number = zl.trx_line_number(+)
            AND hou.legal_entity_id(+) = rct.legal_entity_id
            AND zl.entity_code = 'TRANSACTIONS'
            AND zl.cancel_flag <> 'Y'
            AND rctl.line_type = 'LINE'
            AND hcsua.site_use_id = rct.bill_to_site_use_id
            AND hcsua.cust_acct_site_id = hcasa.cust_acct_site_id
            AND hcasa.cust_account_id = hca.cust_account_id
            AND hps.party_site_id = hcasa.party_site_id
            AND dist_tab.customer_trx_id = rct.customer_trx_id
            AND dist_tab.customer_trx_line_id = rctl.customer_trx_line_id
            

Script for Extracting InterCompany batch details

This summary is not available. Please click here to view the post.

Script to get Project Listing

SELECT   pt.project_id, ppa.NAME project_name,
         ppa.description project_description, ppa.segment1 project_number,
         pt.task_number,
         ppa.project_status_code project_status,
         (SELECT DISTINCT (SELECT person_number
                             FROM per_people_x ppx
                            WHERE ppx.person_id =
                                                ppn.person_id)
                     FROM pjf_project_parties proj_dir,
                          pjf_proj_role_types_tl prt,
                          per_all_assignments_f paf,
                          per_person_names_f ppn
                    WHERE proj_dir.project_id = ppa.project_id
                      AND proj_dir.project_role_id = prt.project_role_id
                      AND prt.project_role_name = 'Project Manager'
                      AND proj_dir.resource_source_id = paf.person_id
                      AND paf.assignment_status_type = 'ACTIVE'
                      AND paf.person_id = ppn.person_id
                      AND ppn.name_type = 'GLOBAL'
                      AND TRUNC (SYSDATE) BETWEEN paf.effective_start_date
                                              AND NVL (paf.effective_end_date,
                                                       SYSDATE + 1
                                                      )
                      AND TRUNC (SYSDATE) BETWEEN proj_dir.start_date_active
                                              AND NVL
                                                    (proj_dir.end_date_active,
                                                     SYSDATE + 1
                                                    )
                      AND TRUNC (SYSDATE) BETWEEN ppn.effective_start_date
                                              AND NVL (ppn.effective_end_date,
                                                       SYSDATE + 1
                                                      )
                      AND paf.primary_flag = 'Y'
                      AND ROWNUM < 2) project_manager
    FROM pjf_tasks_v pt ,
         pjf_projects_all_vl ppa
   WHERE 1 = 1 AND ppa.project_id = pt.project_id(+)         

Monday, 4 March 2019

Function To Get Bill Rate Of Employee in Specific Project in Oracle Fusion

FUNCTION get_bill_rate (
      p_project_id IN NUMBER,    
      p_person_id  IN NUMBER
   )
RETURN NUMBER
AS
  ln_bill_rate NUMBER;
BEGIN 

  SELECT DISTINCT bro.rate
    INTO ln_bill_rate
    FROM pjb_bill_plans_b bpb,
         pjb_bill_rate_ovrrds bro,
         per_all_people_f_v ppn,
         (SELECT DISTINCT pcb.contract_id, pcb.project_id, ppb.segment1 AS project_number
            FROM pjb_cntrct_proj_links pcb, pjf_projects_all_b ppb
           WHERE pcb.project_id = ppb.project_id) proj
  WHERE bpb.bill_plan_id = bro.bill_plan_id
    AND bro.person_id = ppn.person_id
    AND TRUNC (SYSDATE) BETWEEN ppn.effective_start_date AND ppn.effective_end_date
    AND TRUNC (SYSDATE) BETWEEN bro.start_date_active AND bro.end_date_active
    AND bpb.contract_id = proj.contract_id
    AND proj.project_id = p_project_id
    AND ppn.person_id = p_person_id
    AND bpb.version_type = 'C'
    AND bro.version_type = 'C';

    RETURN ln_bill_rate;
EXCEPTION
   WHEN OTHERS
   THEN
      RETURN NULL;
END;

Query to Find AP Reimbursable Expenses in Oracle Fusion

WITH GET_PERIOD_AVG_RATE
        AS (  SELECT gper.avg_rate,
                     gsob.CURRENCY_CODE AS functional_currency,
                     gper.period_name,
                     gper.to_currency_code
                FROM GL_LOOKUPS lk,
                     GL_TRANSLATION_RATES gper,
                     gl_sets_of_books gsob
               WHERE     lk.lookup_type = 'TRANSLATION_BAL_TYPE'
                     AND gper.SET_OF_BOOKS_ID = gsob.SET_OF_BOOKS_ID
                     AND lk.lookup_code = gper.actual_flag
            GROUP BY gper.avg_rate,
                     gsob.CURRENCY_CODE,
                     gper.period_name,
                     gper.to_currency_code)
SELECT ppat.segment1 project_num,
       ppat.name project_name,
       hou.name project_org,
       hou1.name exp_org,
       TO_CHAR (gjl.effective_date, 'DD-MON-YYYY', 'NLS_DATE_LANGUAGE = american') AS gl_date,
       gjh.period_name,
       aid.amount invoice_amount,
       gjh.currency_code journal_currency,
       TO_CHAR (aid.pjc_expenditure_item_date, 'DD-MON-YYYY', 'NLS_DATE_LANGUAGE = american') AS expenditure_item_date,
       gcc.segment2 ACCT,
       TO_CHAR (gjh.CURRENCY_CONVERSION_DATE, 'DD-MON-YYYY', 'NLS_DATE_LANGUAGE = american') AS CURRENCY_CONVERSION_DATE,
       gcc.segment1 Company,
       gcc.segment3 Department,
       gcc.segment4 Region,
       aid.RECEIPT_CURRENCY_CODE,
       gjh.je_category je_category,
       HP.party_name Supplier_name,
       (SELECT PPNF.full_name
          FROM per_person_names_f PPNF
         WHERE PPNF.person_id = EI.incurred_by_person_id
               AND PPNF.name_type = 'GLOBAL'
               AND TRUNC (SYSDATE) BETWEEN PPNF.EFFECTIVE_START_DATE AND  NVL ( PPNF.EFFECTIVE_END_DATE, TRUNC (SYSDATE) + 1))
          emp_name,
       gjl.description journal_description,
       gjl.attribute1 Journal_line_DFF,
       DECODE (sob.currency_code, 'USD', 1, gpavg.avg_rate) usd_conversion_rate,
       ROUND ( xal.accounted_dr * DECODE (sob.currency_code, 'USD', 1, gpavg.avg_rate), 2) us_accounted_dr,
       ROUND ( xal.accounted_cr * DECODE (sob.currency_code, 'USD', 1, gpavg.avg_rate), 2) us_accounted_cr,
       ei.project_currency_code,
       ei.project_burdened_cost,
  FROM ap_invoice_distributions_all AID,
       ap_invoices_all aia,
       ap_invoice_lines_all ail,
       hz_parties HP,
       PJF_PROJECTS_ALL_vl ppat,
       hr_all_organization_units hou,
       hr_all_organization_units hou1,
       xla_transaction_entities xte,
       xla_events xe,
       xla_ae_headers xah,
       xla_ae_lines xal,
       gl_import_references gir,
       gl_je_headers gjh,
       gl_je_lines gjl,
       gl_code_combinations gcc,
       gl_sets_of_books sob,
       PJC_EXP_ITEMS_ALL ei,
       GET_PERIOD_AVG_RATE gpavg
 WHERE aia.invoice_id = ail.invoice_id
   AND aid.invoice_line_number = ail.line_number
   AND ail.invoice_id = aid.invoice_id
   AND aid.PJC_PROJECT_ID = ppat.project_id
   AND hou.organization_id = ppat.carrying_out_organization_id
   AND hou1.organization_id = aid.PJC_ORGANIZATION_ID
   AND aia.invoice_id = NVL ("SOURCE_ID_INT_1", (-99)) --19004(invoice_id)
   AND xe.entity_id = xah.entity_id
   AND aid.amount = NVL (xal.accounted_dr, xal.accounted_cr)
   AND xte.entity_code = 'AP_INVOICES'
   AND xte.application_id = 200
   AND xe.event_id = aid.ACCOUNTING_EVENT_ID
   AND xte.entity_id = xe.entity_id
   AND xal.ae_header_id = xah.ae_header_id
   AND UPPER (xal.ACCOUNTING_CLASS_CODE) IN ('ITEM EXPENSE')
   AND xte.application_id = xah.application_id
    AND gcc.code_combination_id = xal.code_combination_id
   AND aid.LINE_TYPE_LOOKUP_CODE = 'ITEM'
   AND xal.gl_sl_link_id = gir.gl_sl_link_id
   AND xal.gl_sl_link_table = gir.gl_sl_link_table
   AND gir.je_header_id = gjl.je_header_id
   AND gir.je_line_num = gjl.je_line_num
   AND gjl.je_header_id = gjh.je_header_id
   AND sob.set_of_books_id = gjh.ledger_id
   AND gjh.currency_code = gpavg.functional_currency(+)
   AND gjh.period_name = gpavg.period_name(+)
   AND gpavg.to_currency_code (+) = 'USD'
   AND aia.party_id = HP.party_id
   AND ei.vendor_id = aia.vendor_id
   AND ei.project_id = aid.pjc_project_id
   AND ei.task_id = aid.pjc_task_id
   AND aid.org_id = ei.org_id
   AND aid.amount = ei.quantity
   AND aid.invoice_id = aia.invoice_id
   AND aid.LINE_TYPE_LOOKUP_CODE = 'ITEM'
   AND ei.ORIG_TRANSACTION_REFERENCE = aid.INVOICE_DISTRIBUTION_ID  

Query to Find NonBillable Expense in Oracle Fusion

SELECT pcdl.prvdr_gl_period_name gl_period,
       trx_org.NAME expenditure_organization,
       prb.project_id,
       NVL (prb.segment1, 'N/A') project_number,
       NVL (prl.NAME, 'N/A') project_name,
       NULL project_type_class_code,
       ppn.full_name employee_vendor,
       papf.person_number employee_number,
       ptv.task_name,
       pec.expenditure_category_name expenditure_category,
       pet.expenditure_type_name expenditure_type,
       pcdl.prvdr_gl_date week_ending,
       pei.expenditure_item_date expenditure_date,
       pcdl.denom_currency_code entered_currency_code,
       NVL (pcdl.denom_raw_cost, 0) entered_amount,
       NVL (pcdl.acct_raw_cost, 0) accounted_amount,
       NVL (pcdl.acct_exchange_rate, 1) accounted_exchange_rate,
       NVL (pcdl.acct_rate_type, 'FIXED') accounted_exchange_type,
       pcdl.prvdr_gl_date conversion_date,
       gl.NAME set_of_books_name,
       gl.currency_code book_currency_code,
       pec1.expenditure_comment comments,
       pei.orig_transaction_reference ap_invoice_number,
       'PA' subledger_name,
  FROM pjc_cost_dist_lines_all pcdl,
       pjc_exp_items_all pei,
       pjf_tasks_v ptv,
       pjf_projects_all_b prb,
       pjf_projects_all_tl prl,
       pjc_exp_comments pec1,
       pjf_exp_types_vl pet,
       pjf_exp_categories_tl pec,
       fun_names_business_units_v fnbu,
       gl_ledgers gl,
       gl_code_combinations gcc,
       XLA_DISTRIBUTION_LINKS XDA,
       xla_ae_lines xal,
       hr_all_organization_units_tl trx_org,
       per_all_people_f_v papf,
       per_person_names_f ppn
 WHERE pcdl.expenditure_item_id = pei.expenditure_item_id                
   AND ptv.project_id = pei.project_id
   AND ptv.task_id = pei.task_id
   AND pei.project_id = prb.project_id
   AND pei.project_id = prl.project_id
   AND pei.expenditure_item_id = pec1.expenditure_item_id(+)
   AND pei.expenditure_type_id = pet.expenditure_type_id
   AND pec.expenditure_category_id = pet.expenditure_category_id
   AND fnbu.bu_id = pei.org_id   
   AND fnbu.primary_ledger_id = gl.ledger_id
   AND pcdl.expenditure_item_id = XDA.SOURCE_DISTRIBUTION_ID_NUM_1(+)
   AND xda.ae_line_num(+) = 2
   AND xda.ae_header_id = xal.ae_header_id(+)
   AND xda.ae_line_num = xal.ae_line_num(+)
   AND pcdl.line_num_reversed IS NULL
   AND pcdl.reversed_flag IS NULL
   AND pcdl.RAW_LINE_NUM_REVERSED IS NULL 
   AND ppn.NAME_TYPE = 'GLOBAL'
   AND NVL (pei.override_to_organization_id, pei.incurred_by_organization_id) = trx_org.organization_id
   AND pec.expenditure_category_name IN ('Expenses', 'Material')
   AND pei.incurred_by_person_id = papf.person_id
   AND pei.incurred_by_person_id = ppn.person_id
   AND SYSDATE BETWEEN NVL (papf.effective_start_date, SYSDATE - 1) AND  NVL (papf.effective_end_date, SYSDATE + 1)
   AND SYSDATE BETWEEN NVL (ppn.effective_start_date, SYSDATE - 1) AND  NVL (ppn.effective_end_date, SYSDATE + 1)

Query to Find Project Estimation To Complete in Oracle Fusion

SELECT A.PROJECT_STATUS,
       A.OPERATING_UNIT_NAME,
       A.AGREEMENT_TYPE,
       A.PROJECT_ORGANIZATION_NAME,
       A.PROJECT_NUMBER,
       A.PROJECT_NAME,
       A.START_DATE,
       A.COMPLETION_DATE,
       A.TASK_NUMBER,
       A.TASK_NAME,
       A.PROJECT_CURRENCY,
       ROUND(A.BUDGETED_REV_PROJ_CURR) BUDGETED_REV_PROJ_CURR,
       ROUND(A.ACTUAL_REV_ITD_PRJ_CURR) ACTUAL_REV_ITD_PRJ_CURR,
       ROUND(A.BILLABLE_HOURS_ACTUAL_ITD) BILLABLE_HOURS_ACTUAL_ITD,
       ROUND(A.TOTAL_HOURS_ACTUAL_ITD) TOTAL_HOURS_ACTUAL_ITD,
       A.FUNC_CURRENCY,
       ROUND(A.ACTUAL_REV_ITD_FUNC_CURR) ACTUAL_REV_ITD_FUNC_CURR,
       (ROUND (     ( (A.ACTUAL_REV_ITD_PRJ_CURR / (CASE
                                                   WHEN A.BUDGETED_REV_PROJ_CURR = 0 THEN 0.1
                                                   ELSE A.BUDGETED_REV_PROJ_CURR
                                                END)
                   ) * 100)) || ' %') AS PERC_COMPLETE_PROJ_CURR,
       (ROUND ( ( (A.ACTUAL_REV_ITD_FUNC_CURR
                 / (CASE
                       WHEN (TRUNC ( (TRUNC (NVL(GDR.conversion_rate, 1), 4) * a.Budgeted_Rev_Proj_Curr), 2)) = 0
                       THEN
                          0.1
                       ELSE
                          (TRUNC ( (TRUNC (NVL(GDR.conversion_rate, 1), 4) * a.Budgeted_Rev_Proj_Curr), 2))
                    END)) * 100))
        || ' %') AS PERC_COMPLETE_FUNC_CURR
       ,A.Contract_Status
       ,A.contract_number
       ,A.line_number                                                                      
  FROM gl_daily_rates GDR,
       (SELECT PPA.PROJECT_STATUS_CODE AS Project_Status,
               FUNB.BU_NAME AS Operating_Unit_Name,
               OTYPE.NAME AS Agreement_Type,
               haou.NAME AS project_organization_name,
               ppa.segment1 AS project_number,
               PPA.NAME AS project_name,
               TO_CHAR (ppa.start_date,
                        'DD-MON-YYYY',
                        'NLS_DATE_LANGUAGE = american')
                  AS start_date,
               TO_CHAR (ppa.completion_date,
                        'DD-MON-YYYY',
                        'NLS_DATE_LANGUAGE = american')
                  AS completion_date
              ,PT.TASK_NUMBER
              ,PT.TASK_NAME
               ,OKCH.CURRENCY_CODE AS Project_currency,
               okcl.line_amount AS Budgeted_Rev_Proj_Curr             
              ,(SELECT NVL(SUM(NVL(PRD.project_curr_revenue_amt, 0)),0) project_curr_revenue_amt
                     FROM pjb_rev_distributions PRD
                    WHERE 1=1
                      AND PRD.contract_id = OKCH.id
                      AND PRD.contract_line_id = OKCL.id) Actual_Rev_ITD_Prj_Curr
              ,(SELECT NVL (SUM (projectcostdistributionpeo.quantity), 0)
                  FROM pjc_cost_dist_lines_all projectcostdistributionpeo,
                       pjc_exp_items_all expenditureitempeo,
                       pjf_exp_types_vl pet
                 WHERE (projectcostdistributionpeo.expenditure_item_id =
                           expenditureitempeo.expenditure_item_id
                        AND expenditureitempeo.expenditure_type_id =
                              pet.expenditure_type_id
                        AND projectcostdistributionpeo.TASK_ID = NVL(LINK.proj_element_id, projectcostdistributionpeo.TASK_ID)
                        AND pet.expenditure_type_name IN
                                 ('Professional Labor',
                                  'Contract Professional Labor')
                        AND projectcostdistributionpeo.BILLABLE_FLAG = 'Y')
                       AND expenditureitempeo.project_id = ppa.project_id)
                  AS Billable_Hours_Actual_ITD,
               (SELECT NVL (SUM (projectcostdistributionpeo.quantity), 0)
                  FROM pjc_cost_dist_lines_all projectcostdistributionpeo,
                       pjc_exp_items_all expenditureitempeo,
                       pjf_exp_types_vl pet
                 WHERE (projectcostdistributionpeo.expenditure_item_id =
                           expenditureitempeo.expenditure_item_id
                        AND expenditureitempeo.expenditure_type_id =
                              pet.expenditure_type_id
                        AND projectcostdistributionpeo.TASK_ID = NVL(LINK.proj_element_id, projectcostdistributionpeo.TASK_ID)
                        AND pet.expenditure_type_name IN
                                 ('Professional Labor',
                                  'Contract Professional Labor'))
                       AND expenditureitempeo.project_id = ppa.project_id)
                  AS Total_Hours_Actual_ITD,
               link.proj_element_id
              ,(SELECT LEDGER_CURRENCY_CODE
                  FROM pjb_rev_distributions
                 WHERE linked_project_id = ppa.project_id AND ROWNUM < 2)
                  AS Func_Currency
                 ,(SELECT NVL(SUM(NVL(PRD.ledger_curr_revenue_amt, 0)), 0)
                     FROM pjb_rev_distributions PRD
                    WHERE 1=1
                      AND PRD.contract_id = OKCH.id
                      AND PRD.contract_line_id = OKCL.id) Actual_Rev_ITD_Func_curr     
              ,OKCL.REVENUE_IMPACT_DATE
              ,OKCH.sts_code Contract_Status                                             
              ,OKCH.contract_number
              ,PPA.project_id
              ,PPA.created_from_project_id
              ,OKCL.line_number                                                          
          FROM okc_k_headers_all_b OKCH,
               okc_k_lines_b OKCL,
               okc_contract_types_tl OTYPE,
               pjb_cntrct_proj_links LINK,
               pjf_projects_all_vl PPA,
               pjf_tasks_v PT,
               fun_all_business_units_v FUNB,
               hr_all_organization_units HAOU
         WHERE     1 = 1
           AND OKCH.id                           = OKCL.chr_id
           AND OKCH.version_type                 = 'C'
           AND OKCL.version_type                 = 'C'         
           AND OKCH.sts_code                     <> 'EXPIRED'             --= 'ACTIVE' 
           AND OKCH.id                           = LINK.contract_id
           AND OKCL.id                           = LINK.contract_line_id
           AND LINK.version_type                 = 'C'
           AND LINK.project_id                   = PPA.project_id
           AND LINK.proj_element_id              = PT.task_id (+)            
           AND PPA.carrying_out_organization_id  = HAOU.organization_id                  
           AND FUNB.BU_ID                        = OKCH.org_id
           AND OTYPE.language                    = 'US'
           AND OTYPE.contract_type_id            = OKCH.contract_type_id
           AND PPA.PROJECT_STATUS_CODE <> 'CLOSED'   ) A
 WHERE     GDR.from_currency (+)  = a.project_currency
       AND GDR.to_currency (+)  = a.Func_Currency
       AND UPPER (GDR.conversion_type (+)) = 'CORPORATE'
       AND TRUNC(GDR.conversion_date (+)) = TRUNC(a.revenue_impact_date)      
ORDER BY A.project_number, A.contract_number, A.line_number, A.task_number

Query to Find Projects Not Accruing Revenue in Oracle Fusion

--**** Project Not Accruing Revenue Due to Expenditure Exception ****--

SELECT PE.accounting_period AS GL_PERIOD
      ,OKH.contract_number
      ,OKL.line_number
      ,PPA.segment1 AS project_number
      ,PPA.name AS project_name
      ,PT.task_number
      ,PT.task_name
      ,PEI.expenditure_item_id trx_number
      ,PEC.expenditure_category_name
      ,NVL(PPN.full_name, PS.vendor_name) AS full_name    
      ,NVL(PPF.person_number, PS.segment1) AS person_number    
      ,DECODE(PEI.incurred_by_person_id, NULL, 'Supplier'
                                       ,(SELECT FL.meaning FROM fnd_lookups FL
                                          WHERE FL.lookup_type = 'PJC_PERSON_TYPE'
                                            AND FL.lookup_code = PEI.person_type)
              ) AS PERSON_TYPE
      ,TRUNC(PEI.expenditure_item_date) expenditure_item_date
      ,DECODE(PEC.expenditure_category_name, 'Expenses', NULL, 'Material', NULL,
              ROUND((PE.unrec_rev_amount/((PEI.quantity/100) * (100 - NVL(PEI.revenue_recog_percentage, 0)))), 2)) AS BILL_RATE
      ,(SELECT FM.message_text FROM fnd_messages FM
         WHERE FM.message_name = PE.error_code) AS EXCEPTION
      ,ROUND(((PEI.quantity * DECODE(PEI.denom_currency_code, PE.currency_code, 1
                              ,(SELECT gdr.conversion_rate
                                  FROM gl_daily_rates gdr
                                 WHERE gdr.conversion_type = 'Corporate'
                                   AND gdr.to_currency = PE.currency_code
                                   AND gdr.from_currency = PEI.denom_currency_code
                                   AND gdr.conversion_date = PEI.expenditure_item_date))
              )/100) * ROUND(100 - NVL(PEI.revenue_recog_percentage, 0), 2)
             ,2 ) AS Quantity
      ,PE.currency_code
      ,PE.unrec_rev_amount AS amount
      ,HAOU1.name exp_organization_name
      ,HAOU3.name contract_org 
  FROM (SELECT PER.expenditure_item_id, PER.contract_id, PER.contract_line_id, PER.major_version
              ,PER.currency_code, PER.unrec_rev_amount, PER.error_code, PER.accounting_period, PER.error_id
          FROM pjb_errors PER
         WHERE PER.erroring_process      = 'REVENUE_GEN'
           AND PER.transaction_type_code = 'EI'
           AND PER.billing_type_code     = 'EX'
           AND PER.unrec_rev_amount <> 0
           AND PER.txn_date <= :P_AS_OF_DATE       
         ) PE
      ,pjc_exp_items_all PEI
      ,pjf_projects_all_vl PPA
      ,pjf_tasks_v PT
      ,okc_k_headers_all_b OKH
      ,okc_k_lines_b OKL
      ,pjf_txn_sources_vl PTS
      ,hr_operating_units HOU
      ,pjf_exp_types_vl PET
      ,pjf_exp_categories_vl PEC
      ,per_person_names_f PPN
      ,per_all_people_f PPF
      ,poz_suppliers_v PS
      ,hr_all_organization_units HAOU1
      ,hr_all_organization_units HAOU3
 WHERE PE.expenditure_item_id      = PEI.expenditure_item_id
   AND PEI.project_id              = PPA.project_id
   AND PPA.project_status_code     <> 'CLOSED'                                    -->    Other than closed Projects
   AND PEI.task_id                 = PT.task_id
   AND PE.contract_id              = OKH.id
   AND PE.major_version            = OKH.major_version
   AND :P_AS_OF_DATE BETWEEN OKH.start_date AND NVL(OKH.end_date, SYSDATE)
   AND PE.contract_line_id         = OKL.id
   AND PE.major_version            = OKL.major_version
   AND :P_AS_OF_DATE BETWEEN OKL.start_date AND NVL(OKL.end_date, SYSDATE)
   AND OKH.sts_code                <> 'EXPIRED'                                    -->    Other than closed Contracts 
   AND NVL(PEI.revenue_recognized_flag, 'X') <> 'F'                                    -->    Not Fully Recognized
   AND NVL(PEI.billable_flag, 'X')           = 'Y'                                                -->    Only Billable Transactions 
   AND PEI.expenditure_item_date  <= :P_AS_OF_DATE
   AND PEI.transaction_source_id   = PTS.transaction_source_id 
   AND OKH.org_id                  = HOU.organization_id
   AND PEI.expenditure_type_id     = PET.expenditure_type_id
   AND PET.expenditure_category_id = PEC.expenditure_category_id
   AND PEI.incurred_by_person_id   = PPN.person_id (+)
   AND PEI.incurred_by_person_id   = PPF.person_id (+)
   AND PPN.name_type (+)           = 'GLOBAL'
   AND PEI.expenditure_item_date BETWEEN NVL(PPN.effective_start_date, PEI.expenditure_item_date) AND NVL (PPN.effective_end_date, PEI.expenditure_item_date)
   AND PEI.expenditure_item_date BETWEEN NVL(PPF.effective_start_date, PEI.expenditure_item_date) AND NVL (PPF.effective_end_date, PEI.expenditure_item_date)
   AND PEI.vendor_id               = PS.vendor_id (+)
   AND PEI.expenditure_organization_id  = HAOU1.organization_id
   AND OKH.owning_org_id                = HAOU3.organization_id 
   AND (PE.error_id, OKH.major_version) IN (SELECT MAX(PE2.error_id),MAX(PE2.major_version) FROM pjb_errors PE2
                       WHERE PE2.expenditure_item_id = PE.expenditure_item_id
                         AND PE2.erroring_process      = 'REVENUE_GEN'
                         AND PE2.transaction_type_code = 'EI'
                         AND PE2.billing_type_code     = 'EX'
                         AND PE2.unrec_rev_amount      <> 0
                         AND PE2.txn_date              <= :P_AS_OF_DATE
                         )

--**** Project Not Accruing Revenue Due to Event Exception ****--

SELECT (SELECT PERIOD_NAME
          FROM gl_periods GP
              ,gl_ledgers GL
         WHERE GP.period_set_name = GL.period_set_name
           AND GL.ledger_id       = HOU.set_of_books_id
           AND GP.adjustment_period_flag = 'N'
           AND PEI.completion_date BETWEEN GP.start_date AND GP.end_date) AS GL_PERIOD
      ,HOU.name
      ,OKH.contract_number
      ,OKL.line_number
      ,PPA.segment1 AS project_number
      ,PPA.name AS project_name
      ,PT.task_number
      ,PT.task_name
      ,PEI.event_num
      ,TRUNC(PEI.completion_date) expenditure_item_date
      ,(SELECT FM.message_text FROM fnd_messages FM
         WHERE FM.message_name = PE.error_code) AS EXCEPTION
      ,PE.currency_code
      ,((PE.unrec_rev_amount/(100-NVL(PEI.revenue_recognzd_percentage, 0))) * 100) AS ORIG_AMOUNT
      ,PE.unrec_rev_amount AS amount
      ,HAOU3.name contract_org                 
  FROM pjb_errors PE
      ,pjb_billing_events PEI
      ,pjf_projects_all_vl PPA
      ,pjf_tasks_v PT
      ,okc_k_headers_all_b OKH
      ,okc_k_lines_b OKL    
      ,hr_operating_units HOU                
      ,hr_all_organization_units HAOU1
      ,hr_all_organization_units HAOU3
      ,pjf_event_types_vl PET
 WHERE PE.event_id              = PEI.event_id
   AND PE.erroring_process      = 'REVENUE_GEN'
   AND PE.transaction_type_code = 'EVT'
   AND PEI.project_id           = PPA.project_id (+)
   AND PPA.project_status_code  <> 'CLOSED'                                    -->    Other than closed Projects
   AND PEI.task_id              = PT.task_id (+)
   AND PE.contract_id           = OKH.id
   AND PE.major_version         = OKH.major_version
   AND :P_AS_OF_DATE BETWEEN OKH.start_date AND NVL(OKH.end_date, SYSDATE)
   AND PE.contract_line_id         = OKL.id
   AND PE.major_version            = OKL.major_version
   AND :P_AS_OF_DATE BETWEEN OKL.start_date AND NVL(OKL.end_date, SYSDATE)
   AND OKH.sts_code                <> 'EXPIRED'                                    -->    Other than closed Contracts 
   AND NVL(PEI.revenue_recognzd_flag, 'X')   <> 'F'                                    -->    Not Fully Recognized 
   AND NVL(PEI.event_type_code, 'X')         = 'R'
   AND PE.billing_type_code                  = 'EX'                                          --> External Billing Type
   AND PEI.completion_date                   <= :P_AS_OF_DATE
   AND PEI.event_type_id                     = PET.event_type_id    
   AND OKH.org_id                            = HOU.organization_id
   AND PEI.organization_id                   = HAOU1.organization_id
   AND OKH.owning_org_id                     = HAOU3.organization_id

Query to find AR Open Balance Of a Project in Oracle Fusion

WITH
FUNCTION get_outstanding_amount (
      p_payment_schedule_id       IN   NUMBER,
      p_as_of_date                IN   DATE,
      p_invoice_type              IN   VARCHAR2,
      p_amt_due_remaining         IN   NUMBER,
      p_amount_applied            IN   NUMBER,
      p_amount_adjusted           IN   NUMBER,
      p_amount_credited           IN   NUMBER,
      p_amount_in_dispute         IN   NUMBER,
      p_amount_adjusted_pending   IN   NUMBER,
      p_convert_flag              IN   VARCHAR2,
      p_due_date                  IN   DATE,
      p_return_position           IN   NUMBER
   )
      RETURN NUMBER
   IS
      l_inv_type              CHAR (4);
      l_amount_applied_late   NUMBER (24, 2)            := 0;
      l_adjustment_amount     NUMBER (24, 2);
      l_amt_due_remaining     NUMBER (24, 2);
      l_percent_remaining     NUMBER (24, 2);
      l_payment_meaning       ar_lookups.meaning%TYPE;
      l_risk_meaning          ar_lookups.meaning%TYPE;
      l_outstanding_inv       NUMBER (14, 2);
      l_custinv_b0            NUMBER;
      l_custinv_b1            NUMBER;
      l_custinv_b2            NUMBER;
      l_custinv_b3            NUMBER;
      l_bucket_category       VARCHAR2 (10)             := NULL;
      l_bucket_days_from_0    NUMBER;
      l_bucket_days_to_0      NUMBER;
      l_bucket_line_type_0    VARCHAR2 (200);
      l_bucket_days_from_1    NUMBER;
      l_bucket_days_to_1      NUMBER;
      l_bucket_line_type_1    VARCHAR2 (200);
      l_bucket_days_from_2    NUMBER;
      l_bucket_days_to_2      NUMBER;
      l_bucket_line_type_2    VARCHAR2 (200);
      l_bucket_days_from_3    NUMBER;
      l_bucket_days_to_3      NUMBER;
      l_bucket_line_type_3    VARCHAR2 (200);
      l_b0_inv                NUMBER;
      l_b1_inv                NUMBER;
      l_b2_inv                NUMBER;
      l_b3_inv                NUMBER;
   BEGIN
      l_adjustment_amount := 0;
      l_amt_due_remaining := 0;
      l_outstanding_inv := 0;
      l_custinv_b0 := 0;
      l_custinv_b1 := 0;
      l_custinv_b2 := 0;
      l_custinv_b3 := 0;
      --
      l_outstanding_inv := NVL (p_amt_due_remaining, 0);
      -- Get l_payment_meaning
      SELECT meaning
        INTO l_payment_meaning
        FROM ar_lookups
       WHERE lookup_type = 'INV/CM/ADJ' AND lookup_code = 'PMT';
      -- Get l_risk_meaning
      SELECT meaning
        INTO l_risk_meaning
        FROM ar_lookups
       WHERE lookup_type = 'MISC_PHRASES' AND lookup_code = 'RISK';
      -- Get bucket_line_type_0, bucket_days_start_0, bucket_days_to_0
      SELECT lines.days_start, lines.days_to, lines.TYPE
        INTO l_bucket_days_from_0, l_bucket_days_to_0, l_bucket_line_type_0
        FROM ar_aging_bucket_lines_b lines, ar_aging_buckets buckets
       WHERE lines.aging_bucket_id = buckets.aging_bucket_id
         AND NVL (buckets.status, 'A') = 'A'
         AND buckets.aging_type = '4BUCKET'
         AND buckets.bucket_name = 'Standard'
         AND lines.bucket_sequence_num = 0;
      -- Get bucket_line_type_1, bucket_days_start_1, bucket_days_to_1
      SELECT lines.days_start, lines.days_to, lines.TYPE
        INTO l_bucket_days_from_1, l_bucket_days_to_1, l_bucket_line_type_1
        FROM ar_aging_bucket_lines_b lines, ar_aging_buckets buckets
       WHERE lines.aging_bucket_id = buckets.aging_bucket_id
         AND NVL (buckets.status, 'A') = 'A'
         AND buckets.aging_type = '4BUCKET'
         AND buckets.bucket_name = 'Standard'
         AND lines.bucket_sequence_num = 1;
      -- Get bucket_line_type_2, bucket_days_start_2, bucket_days_to_2
      SELECT lines.days_start, lines.days_to, lines.TYPE
        INTO l_bucket_days_from_2, l_bucket_days_to_2, l_bucket_line_type_2
        FROM ar_aging_bucket_lines_b lines, ar_aging_buckets buckets
       WHERE lines.aging_bucket_id = buckets.aging_bucket_id
         AND NVL (buckets.status, 'A') = 'A'
         AND buckets.aging_type = '4BUCKET'
         AND buckets.bucket_name = 'Standard'
         AND lines.bucket_sequence_num = 2;
      -- Get bucket_line_type_3, bucket_days_start_3, bucket_days_to_3
      SELECT lines.days_start, lines.days_to, lines.TYPE
        INTO l_bucket_days_from_3, l_bucket_days_to_3, l_bucket_line_type_3
        FROM ar_aging_bucket_lines_b lines, ar_aging_buckets buckets
       WHERE lines.aging_bucket_id = buckets.aging_bucket_id
         AND NVL (buckets.status, 'A') = 'A'
         AND buckets.aging_type = '4BUCKET'
         AND buckets.bucket_name = 'Standard'
         AND lines.bucket_sequence_num = 3;

      IF (p_invoice_type NOT IN (l_payment_meaning, l_risk_meaning))
      THEN
         IF (p_amount_applied IS NOT NULL)
         THEN
         begin
            SELECT NVL( SUM (DECODE (p_convert_flag, 'Y', (  DECODE (ps.CLASS, 'CM', DECODE
                                                (ra.application_type, 'CM', ra.acctd_amount_applied_from, ra.acctd_amount_applied_to), ra.acctd_amount_applied_to)
                                       + NVL (ra.acctd_earned_discount_taken, 0 )
                                       + NVL (ra.acctd_unearned_discount_taken, 0 ) ),
                                 (  ra.amount_applied + NVL (ra.earned_discount_taken, 0) + NVL (ra.unearned_discount_taken, 0) ) )
                           * DECODE (ps.CLASS, 'CM', DECODE (ra.application_type, 'CM', -1, 1 ), 1 ) ), 0
                      )
              INTO l_amount_applied_late
              FROM ar_receivable_applications_all ra,
                   ar_payment_schedules_all ps
             WHERE (   ra.applied_payment_schedule_id = p_payment_schedule_id
                    OR ra.payment_schedule_id = p_payment_schedule_id
                   )
               AND ra.status || '' = 'APP'
               AND NVL (ra.confirmed_flag, 'Y') = 'Y'
               AND ra.gl_date + 0 > TO_DATE (p_as_of_date, 'DD-MON-YY')
               AND ps.payment_schedule_id = p_payment_schedule_id;
         exception when others then
            l_amount_applied_late:=0;
         end ;  
         END IF;

         IF (p_amount_applied IS NULL)
         THEN
            IF (p_amount_credited IS NOT NULL)
            THEN
            begin
               SELECT NVL
                         (SUM
                             (  DECODE
                                   (p_convert_flag,
                                    'Y', (  DECODE
                                               (ps.CLASS,
                                                'CM', DECODE
                                                   (ra.application_type,
                                                    'CM', ra.acctd_amount_applied_from,
                                                    ra.acctd_amount_applied_to
                                                   ),
                                                ra.acctd_amount_applied_to
                                               )
                                          + NVL
                                               (ra.acctd_earned_discount_taken,
                                                0
                                               )
                                          + NVL
                                               (ra.acctd_unearned_discount_taken,
                                                0
                                               )
                                     ),
                                    (  ra.amount_applied
                                     + NVL (ra.earned_discount_taken, 0)
                                     + NVL (ra.unearned_discount_taken, 0)
                                    )
                                   )
                              * DECODE (ps.CLASS,
                                        'CM', DECODE (ra.application_type,
                                                      'CM', -1,
                                                      1
                                                     ),
                                        1
                                       )
                             ),
                          0
                         )
                 INTO l_amount_applied_late
                 FROM ar_receivable_applications_all ra,
                      ar_payment_schedules_all ps
                WHERE (   ra.applied_payment_schedule_id =
                                                         p_payment_schedule_id
                       OR ra.payment_schedule_id = p_payment_schedule_id
                      )
                  AND ra.status || '' = 'APP'
                  AND NVL (ra.confirmed_flag, 'Y') = 'Y'
                  AND ra.gl_date + 0 > p_as_of_date
                  AND ps.payment_schedule_id = p_payment_schedule_id
                                                                    -- AND   ra.receivable_application_id+0 < :rp_app_max_id
               ;
            exception when others then
            l_amount_applied_late :=0;  
            end;  
            END IF;
         END IF;
            l_amt_due_remaining := l_amount_applied_late;
         IF p_amount_adjusted IS NOT NULL
         THEN
         begin
            SELECT NVL (SUM (DECODE (p_convert_flag,
                                     'Y', acctd_amount,
                                     amount
                                    )
                            ),
                        0
                       )
              INTO l_adjustment_amount
              FROM ar_adjustments_all
             WHERE gl_date > p_as_of_date
               AND payment_schedule_id = p_payment_schedule_id
               AND status = 'A';
         exception when others then
         l_adjustment_amount :=0;     
          end;
            -- AND     adjustment_id < :rp_adj_max_id;
            l_amt_due_remaining :=
                            l_amt_due_remaining - NVL (l_adjustment_amount, 0);
         END IF;

         l_outstanding_inv := l_outstanding_inv + l_amt_due_remaining;
      END IF;

      -- Get l_b0_inv
      SELECT DECODE (l_bucket_line_type_0,
                     'DISPUTE_ONLY', DECODE (NVL (p_amount_in_dispute, 0),
                                             0, 0,
                                             1
                                            ),
                     'PENDADJ_ONLY', DECODE (NVL (p_amount_adjusted_pending,
                                                  0),
                                             0, 0,
                                             1
                                            ),
                     'DISPUTE_PENDADJ', DECODE
                                    (NVL (p_amount_in_dispute, 0),
                                     0, DECODE
                                             (NVL (p_amount_adjusted_pending,
                                                   0
                                                  ),
                                              0, 0,
                                              1
                                             ),
                                     1
                                    ),
                       DECODE (GREATEST (l_bucket_days_from_0,
                                         CEIL (p_as_of_date - p_due_date)
                                        ),
                               LEAST (l_bucket_days_to_0,
                                      CEIL (p_as_of_date - p_due_date)
                                     ), 1,
                               0
                              )
                     * DECODE (NVL (p_amount_in_dispute, 0),
                               0, 1,
                               DECODE (l_bucket_category,
                                       'DISPUTE_ONLY', 0,
                                       'DISPUTE_PENDADJ', 0,
                                       1
                                      )
                              )
                     * DECODE (NVL (p_amount_adjusted_pending, 0),
                               0, 1,
                               DECODE (l_bucket_category,
                                       'PENDADJ_ONLY', 0,
                                       'DISPUTE_PENDADJ', 0,
                                       1
                                      )
                              )
                    )
        INTO l_b0_inv
        FROM DUAL;

      -- Get l_b1_inv
      SELECT DECODE (l_bucket_line_type_1,
                     'DISPUTE_ONLY', DECODE (NVL (p_amount_in_dispute, 0),
                                             0, 0,
                                             1
                                            ),
                     'PENDADJ_ONLY', DECODE (NVL (p_amount_adjusted_pending,
                                                  0),
                                             0, 0,
                                             1
                                            ),
                     'DISPUTE_PENDADJ', DECODE
                                    (NVL (p_amount_in_dispute, 0),
                                     0, DECODE
                                             (NVL (p_amount_adjusted_pending,
                                                   0
                                                  ),
                                              0, 0,
                                              1
                                             ),
                                     1
                                    ),
                       DECODE (GREATEST (l_bucket_days_from_1,
                                         CEIL (p_as_of_date - p_due_date)
                                        ),
                               LEAST (l_bucket_days_to_1,
                                      CEIL (p_as_of_date - p_due_date)
                                     ), 1,
                               0
                              )
                     * DECODE (NVL (p_amount_in_dispute, 0),
                               0, 1,
                               DECODE (l_bucket_category,
                                       'DISPUTE_ONLY', 0,
                                       'DISPUTE_PENDADJ', 0,
                                       1
                                      )
                              )
                     * DECODE (NVL (p_amount_adjusted_pending, 0),
                               0, 1,
                               DECODE (l_bucket_category,
                                       'PENDADJ_ONLY', 0,
                                       'DISPUTE_PENDADJ', 0,
                                       1
                                      )
                              )
                    )
        INTO l_b1_inv
        FROM DUAL;

      -- Get l_b2_inv
      SELECT DECODE (l_bucket_line_type_2,
                     'DISPUTE_ONLY', DECODE (NVL (p_amount_in_dispute, 0),
                                             0, 0,
                                             1
                                            ),
                     'PENDADJ_ONLY', DECODE (NVL (p_amount_adjusted_pending,
                                                  0),
                                             0, 0,
                                             1
                                            ),
                     'DISPUTE_PENDADJ', DECODE
                                    (NVL (p_amount_in_dispute, 0),
                                     0, DECODE
                                             (NVL (p_amount_adjusted_pending,
                                                   0
                                                  ),
                                              0, 0,
                                              1
                                             ),
                                     1
                                    ),
                       DECODE (GREATEST (l_bucket_days_from_2,
                                         CEIL (p_as_of_date - p_due_date)
                                        ),
                               LEAST (l_bucket_days_to_2,
                                      CEIL (p_as_of_date - p_due_date)
                                     ), 1,
                               0
                              )
                     * DECODE (NVL (p_amount_in_dispute, 0),
                               0, 1,
                               DECODE (l_bucket_category,
                                       'DISPUTE_ONLY', 0,
                                       'DISPUTE_PENDADJ', 0,
                                       1
                                      )
                              )
                     * DECODE (NVL (p_amount_adjusted_pending, 0),
                               0, 1,
                               DECODE (l_bucket_category,
                                       'PENDADJ_ONLY', 0,
                                       'DISPUTE_PENDADJ', 0,
                                       1
                                      )
                              )
                    )
        INTO l_b2_inv
        FROM DUAL;

      -- Get l_b3_inv
      SELECT DECODE (l_bucket_line_type_3,
                     'DISPUTE_ONLY', DECODE (NVL (p_amount_in_dispute, 0),
                                             0, 0,
                                             1
                                            ),
                     'PENDADJ_ONLY', DECODE (NVL (p_amount_adjusted_pending,
                                                  0),
                                             0, 0,
                                             1
                                            ),
                     'DISPUTE_PENDADJ', DECODE
                                    (NVL (p_amount_in_dispute, 0),
                                     0, DECODE
                                             (NVL (p_amount_adjusted_pending,
                                                   0
                                                  ),
                                              0, 0,
                                              1
                                             ),
                                     1
                                    ),
                       DECODE (GREATEST (l_bucket_days_from_3,
                                         CEIL (p_as_of_date - p_due_date)
                                        ),
                               LEAST (l_bucket_days_to_3,
                                      CEIL (p_as_of_date - p_due_date)
                                     ), 1,
                               0
                              )
                     * DECODE (NVL (p_amount_in_dispute, 0),
                               0, 1,
                               DECODE (l_bucket_category,
                                       'DISPUTE_ONLY', 0,
                                       'DISPUTE_PENDADJ', 0,
                                       1
                                      )
                              )
                     * DECODE (NVL (p_amount_adjusted_pending, 0),
                               0, 1,
                               DECODE (l_bucket_category,
                                       'PENDADJ_ONLY', 0,
                                       'DISPUTE_PENDADJ', 0,
                                       1
                                      )
                              )
                    )
        INTO l_b3_inv
        FROM DUAL;

      --
      IF l_b0_inv != 0
      THEN
         l_custinv_b0 := l_outstanding_inv;
      END IF;

      IF l_b1_inv != 0
      THEN
         l_custinv_b1 := l_outstanding_inv;
      END IF;

      IF l_b2_inv != 0
      THEN
         l_custinv_b2 := l_outstanding_inv;
      END IF;

      IF l_b3_inv != 0
      THEN
         l_custinv_b3 := l_outstanding_inv;
      END IF;

      -- Return value based on passed in position
      IF p_return_position = 1
      THEN
         RETURN l_outstanding_inv;
      ELSIF p_return_position = 2
      THEN
         RETURN l_custinv_b0;
      ELSIF p_return_position = 3
      THEN
         RETURN l_custinv_b1;
      ELSIF p_return_position = 4
      THEN
         RETURN l_custinv_b2;
      ELSIF p_return_position = 5
      THEN
         RETURN l_custinv_b3;
      END IF;
   EXCEPTION
      WHEN OTHERS
      THEN
         RETURN 0;
   END;

FUNCTION get_invoice_outstanding_amount (
      p_project_id IN NUMBER,
      --p_invoice_number IN VARCHAR2,
      p_as_of_date IN DATE,
      p_convert_flag IN VARCHAR2,
      p_return_position IN NUMBER
   )
      RETURN NUMBER
   IS
      CURSOR c_outstanding_amount
      IS
         SELECT *
           FROM (SELECT ps.payment_schedule_id payment_schedule_id,
               ps.trx_number invoice_number, ps.CLASS invoice_class,
               rctt.NAME invoice_type, ps.due_date due_date,
               ps.trx_date invoice_date, rtt.NAME term_name,
               ps.invoice_currency_code invoice_currency_code,
               gsob.currency_code function_currency_code,
               ps.acctd_amount_due_remaining acctd_amt_due_remaining,
               ps.amount_line_items_remaining,
               ps.amount_due_remaining amt_due_remaining,
               ROUND
                   ((ps.amount_due_original * NVL (ps.exchange_rate, 1)),
                    fc.PRECISION
                   ) amt_due_functional_currency,
               ps.amount_due_original amt_due_original,
               ps.amount_adjusted amount_adjusted,
               ps.amount_applied amount_applied,
               ps.amount_credited amount_credited,
               ps.amount_in_dispute amount_in_dispute,
               ps.amount_adjusted_pending amount_adjusted_pending,
               NVL (ps.exchange_rate, 1) exchange_rate, ps.gl_date gl_date,
               ps.gl_date_closed gl_date_closed, n1.text comments,
               proj.project_id project_id, proj.NAME project_name,
               proj.segment1 project_number,
               ps.cash_receipt_id cash_receipt_id, rct.org_id org_id,
               rct.customer_trx_id
          FROM hr_all_organization_units org,
               pjf_projects_all_vl proj,
               ra_customer_trx_all rct,
               ar_payment_schedules_all ps,
               ra_cust_trx_types_all rctt,              
               ra_terms_tl rtt,
               ar_notes n1,
               gl_sets_of_books gsob,
               fnd_currencies fc
         WHERE org.organization_id = proj.carrying_out_organization_id
           AND proj.segment1 = TRIM (LEADING '0' FROM rct.interface_header_attribute1)
           AND rct.interface_header_context = 'PROJECTS INVOICES'
           AND proj.org_id = rct.org_id
           AND rct.interface_header_attribute1 IS NOT NULL
           AND rct.customer_trx_id = ps.customer_trx_id
           AND rct.org_id = ps.org_id          
           AND ps.CUST_TRX_TYPE_SEQ_ID = rctt.CUST_TRX_TYPE_SEQ_ID         
           AND rct.term_id = rtt.term_id
           AND rct.customer_trx_id = n1.customer_trx_id(+)
           AND rct.set_of_books_id = gsob.set_of_books_id
           AND gsob.currency_code = fc.currency_code) a
          WHERE a.project_id = p_project_id           
            AND a.gl_date <= p_as_of_date;

      o_amount   NUMBER := 0;
   BEGIN      
      
       FOR i in c_outstanding_amount
       LOOP
      
       o_amount := o_amount + get_outstanding_amount(i.payment_schedule_id,
                                                      p_as_of_date,
                                                      i.invoice_type,
                                                      i.amount_line_items_remaining,
                                                      i.amount_applied,
                                                      i.amount_adjusted,
                                                      i.amount_credited,
                                                      i.amount_in_dispute,
                                                      i.amount_adjusted_pending,
                                                      p_convert_flag,
                                                      i.due_date,
                                                      p_return_position
                                                     );
      
       END LOOP;

      RETURN o_amount;
   EXCEPTION
      WHEN OTHERS
      THEN
         RETURN 0;
   END;

SELECT PPA.segment1 project_number   
    ,OCTV.name contracty_type
    ,PPA.name project_name
    ,PPA.description
    ,HOU.name organization_name
    ,PPA.project_currency_code
    ,OKH.contract_number
    ,OKL.line_number
    ,ROUND((NVL(get_invoice_outstanding_amount(PPA.project_id
                                   ,:P_AS_OF_DATE
                                   ,'Y'
                                   ,1), 0)), 2) ar_open
    ,PBC.billing_cycle_name
    ,(SELECT PPM.resource_source_name FROM pjf_proj_all_members_v PPM
       WHERE PPM.project_id = PPA.project_id
         AND PPM.project_role_id = 1
         AND :P_AS_OF_DATE BETWEEN PPM.start_date_active AND NVL(PPM.end_date_active, :P_AS_OF_DATE + 1)) project_manager
FROM pjf_projects_all_vl PPA
,pjb_cntrct_proj_links PCPL
,okc_k_lines_b OKL
,okc_k_headers_all_b OKH
,okc_contract_types_vl OCTV
,pjf_project_types_vl PPT
,hr_all_organization_units HOU
,(SELECT SUM(PILD.cont_curr_billed_amt) cont_curr_billed_amt, MAX(PIH.invoice_date) last_date_invoiced
        ,PILD.contract_id, PILD.contract_line_id
    FROM pjb_inv_line_dists PILD
        ,pjb_invoice_headers PIH
   WHERE 1=1
     AND PILD.invoice_id = PIH.invoice_id
     AND PIH.transfer_status_code = 'A'
     AND PIH.gl_date <= :P_AS_OF_DATE
   GROUP BY PILD.contract_id, PILD.contract_line_id
     ) INV
,pjb_bill_plans_vl PBP
,pjf_billing_cycles_vl PBC
WHERE 1=1
and PPA.project_id = PCPL.project_id
AND PCPL.version_type = 'C' -- Current
AND PCPL.contract_line_id = OKL.id
AND PCPL.major_version = OKL.major_version
AND OKL.chr_id = OKH.id
AND OKL.major_version = OKH.major_version
AND OKL.version_type = 'C' -- Current
AND OKH.version_type = 'C' -- Current
AND OKH.contract_type_id = OCTV.contract_type_id
AND PPA.project_type_id = PPT.project_type_id
AND HOU.organization_id = PPA.carrying_out_organization_id
AND OKH.sts_code <> 'DRAFT'
AND PPT.project_type NOT IN ('INTERCOMPANY', 'Intercompany')
AND INV.contract_id (+) = OKH.id
and INV.contract_line_id (+) = OKL.id
AND OKL.bill_plan_id    = PBP.bill_plan_id (+)
AND OKL.major_version   = PBP.major_version (+)
AND PBP.billing_cycle_id = PBC.billing_cycle_id (+)