AP Supplier Aging Query

Supplier Aging

Aging shows outstanding amount of suppliers and this amount is further showing in buckets. Bucket is basically created on business requirement i.e. 1 day - 30 days, 31 days - 60 days and so on. Below logic is developed using account payables base tables. 

Outstanding logic manipulated considering price variance, freight, miscellaneous, prepay, recoverable tax, non-recoverable tax, prepay tax, discount price. This query also includes multiple installment of payment.

The logic considered amount from distribution in case any invoice cancelled later on as on date. In cancelled case, invoice and invoice line amount got zero but AP distribution hold that amount.

Tables used in Supplier Aging.

AP_INVOICES_ALL
AP_INVOICE_LINES_ALL
AP_INVOICE_DISTRIBUTIONS_ALL
AP_INVOICE_PAYMENTS_ALL
AP_CHECKS_ALL
AP_PAYMENT_SCHEDULES_ALL
HZ_PARTIES
HZ_PARTY_SITES





 SELECT ORG_ID,
       ORG_NAME,
       VOUCHER_NUMBER,
       VENDOR_NAME,
       VENDOR_NUMBER,
       SHORT_VENDOR_NAME,
       VENDOR_ID,
       VENDOR_SITE_CODE,
       VENDOR_SITE,
       REFERENCE_NUMBER,
       ADDRESS_ID,
       INVOICE_TYPE,
       INVOICE_ID,
       DUE_DATE,
       LEDGER_CURRENCY,
       INVOICE_CURRENCY_CODE,
       TERMS_NAME,
       ACCTS_PAY_CODE_COMBINATION_ID,
       INVOICE_NUMBER,
       PO_NUM,
       PROJECT_NUM,
       INSTALLMENT_NUMBER,
       DECODE (INVOICE_TYPE,
               'PREPAYMENT', (-1) * INVOICE_AMOUNT,
               INVOICE_AMOUNT)
          INVOICE_AMOUNT,
       DECODE (INVOICE_TYPE,
               'PREPAYMENT', (-1) * GROSS_AMOUNT,
               INVOICE_AMOUNT)
          GROSS_AMOUNT,
       INVOICE_DATE,
       INV_DATE,
       DAYS_PAST_DUE,
       DATA_CONVERTED,
       EXCHANGE_RATE,
       DECODE (INVOICE_TYPE,
               'PREPAYMENT', (-1) * AMT_DUE_ORIGINAL,
               AMT_DUE_ORIGINAL)
          AMT_DUE_ORIGINAL,
       C_AMT_DUE_REMAINING,
       NVL (c_amt_due_remaining, 0) TOT_OUTST_SAR,
       DAY_OVER_DUE,
       CASE WHEN DAY_OVER_DUE <= 0 THEN C_AMT_DUE_REMAINING ELSE 0 END
          NOT_DUE,
       CASE
          WHEN DAY_OVER_DUE BETWEEN 1 AND 30 THEN C_AMT_DUE_REMAINING
          ELSE 0
       END
          BUK1_30,
       CASE
          WHEN DAY_OVER_DUE BETWEEN 31 AND 60 THEN C_AMT_DUE_REMAINING
          ELSE 0
       END
          BUK31_60,
       CASE
          WHEN DAY_OVER_DUE BETWEEN 61 AND 90 THEN C_AMT_DUE_REMAINING
          ELSE 0
       END
          BUK61_90,
       CASE
          WHEN DAY_OVER_DUE BETWEEN 91 AND 180 THEN C_AMT_DUE_REMAINING
          ELSE 0
       END
          BUK91_180,
       CASE
          WHEN DAY_OVER_DUE BETWEEN 181 AND 360 THEN C_AMT_DUE_REMAINING
          ELSE 0
       END
          BUK181_360,
       CASE WHEN DAY_OVER_DUE >= 361 THEN C_AMT_DUE_REMAINING ELSE 0 END
          BUK361,
   ASONDATE,
       TERMS_DATE,
       NVL(c_amt_due_rem_orig,0) c_amt_due_rem_orig
    FROM (
  SELECT ORG_ID,
         ORG_NAME,
         VOUCHER_NUMBER,
         VENDOR_NAME,
         VENDOR_NUMBER,
         SHORT_VENDOR_NAME,
         VENDOR_ID,
         VENDOR_SITE_CODE,
         VENDOR_SITE,
         REFERENCE_NUMBER,
         ADDRESS_ID,
         INVOICE_TYPE,
         INVOICE_ID,
         DUE_DATE,
         LEDGER_CURRENCY,
         INVOICE_CURRENCY_CODE,
         TERMS_NAME,
         ACCTS_PAY_CODE_COMBINATION_ID,
         INVOICE_NUMBER,
         PO_NUM,
         PROJECT_NUM,
         INSTALLMENT_NUMBER,
         INVOICE_AMOUNT,
         GROSS_AMOUNT,
         INVOICE_DATE,
         INV_DATE,
         DAYS_PAST_DUE,
         DATA_CONVERTED,
         EXCHANGE_RATE,
          AMT_DUE_ORIGINAL,
ROUND(C_AMT_DUE_REMAINING,2) C_AMT_DUE_REMAINING,
ROUND(TOT_OUTST_SAR,2) TOT_OUTST_SAR,
         DAY_OVER_DUE,
         ASONDATE,
         TERMS_DATE,
ROUND(c_amt_due_rem_orig,2) c_amt_due_rem_orig,
         prepay_amount_ex, 
prepay_amount_orig
FROM (
  SELECT ORG_ID,
         ORG_NAME,
         VOUCHER_NUMBER,
         VENDOR_NAME,
         VENDOR_NUMBER,
         SHORT_VENDOR_NAME,
         VENDOR_ID,
         VENDOR_SITE_CODE,
         VENDOR_SITE,
Rtrim(Xmlagg (Xmlelement (e,REFERENCE_NUMBER || ',')).extract ( '//text()' ).GetClobVal(), ',') REFERENCE_NUMBER,
         ADDRESS_ID,
         INVOICE_TYPE,
         INVOICE_ID,
         --DUE_DATE,
Rtrim(Xmlagg (Xmlelement (e,DUE_DATE || ',')).extract ( '//text()' ).GetClobVal(), ',') DUE_DATE,
         LEDGER_CURRENCY,
         INVOICE_CURRENCY_CODE,
         TERMS_NAME,
         ACCTS_PAY_CODE_COMBINATION_ID,
         INVOICE_NUMBER,
         PO_NUM,
         PROJECT_NUM,
         --INSTALLMENT_NUMBER,
Rtrim(Xmlagg (Xmlelement (e,INSTALLMENT_NUMBER || ',')).extract ( '//text()' ).GetClobVal(), ',') INSTALLMENT_NUMBER,
         (INVOICE_AMOUNT) INVOICE_AMOUNT,
         SUM(GROSS_AMOUNT) GROSS_AMOUNT,
         INVOICE_DATE,
         INV_DATE,
Rtrim(Xmlagg (Xmlelement (e,DAYS_PAST_DUE || ',')).extract ( '//text()' ).GetClobVal(), ',') DAYS_PAST_DUE,
         DATA_CONVERTED,
         EXCHANGE_RATE,
         AMT_DUE_ORIGINAL,
         DAY_OVER_DUE,
          to_char(:P_TO_DATE,'DD-MON-RRRR') As ASONDATE,
TERMS_DATE,
(SUM(NVL(inv_amount,0)) - SUM(NVL(prepay_amount_ex,0)) - SUM(NVL(check_payment,0)) + SUM(NVL(rec_tax,0)) + SUM(NVL(awt_amount,0)) + SUM(NVL(ipv_amount,0)) + SUM(NVL(freight_amount,0)) + SUM(NVL(misc_amount,0))) C_AMT_DUE_REMAINING,
(SUM(NVL(inv_amount,0)) - SUM(NVL(prepay_amount_ex,0)) - SUM(NVL(check_payment,0)) + SUM(NVL(rec_tax,0)) + SUM(NVL(awt_amount,0)) + SUM(NVL(ipv_amount,0)) + SUM(NVL(freight_amount,0)) + SUM(NVL(misc_amount,0))) TOT_OUTST_SAR,
(SUM(NVL(inv_amount_orig,0)) - SUM(NVL(prepay_amount_orig,0)) - SUM(NVL(check_payment_orig,0)) + SUM(NVL(rec_tax_orig,0)) + SUM(NVL(awt_amount_orig,0)) + SUM(NVL(ipv_amount_orig,0)) + SUM(NVL(freight_amount_orig,0)) + SUM(NVL(misc_amount_orig,0))) c_amt_due_rem_orig,
prepay_amount_ex, prepay_amount_orig
FROM (
SELECT AIA.ORG_ID,
                 HOU.NAME ORG_NAME,
                 AIA.DOC_SEQUENCE_VALUE VOUCHER_NUMBER,
                 APSS.BASE_CURRENCY_CODE LEDGER_CURRENCY,
                 NVL (PSV.VENDOR_NAME, HP.PARTY_NAME) VENDOR_NAME,
                 NVL (PSV.SEGMENT1, PARTY_NUMBER) VENDOR_NUMBER,
                 NVL (PSV.VENDOR_NAME, HP.PARTY_NAME) SHORT_VENDOR_NAME,
                 PSV.VENDOR_ID VENDOR_ID,
                 NVL (PSSV.VENDOR_SITE_CODE, SITES.PARTY_SITE_NAME)
                    VENDOR_SITE_CODE,
                 NVL (PSSV.VENDOR_SITE_CODE, SITES.PARTY_SITE_NAME) VENDOR_SITE,        
                 APSA.PAYMENT_NUM REFERENCE_NUMBER,
                 AIA.VENDOR_SITE_ID ADDRESS_ID,
                 AIA.INVOICE_TYPE_LOOKUP_CODE INVOICE_TYPE,
                 AIA.INVOICE_ID,
                 TO_CHAR (APSA.DUE_DATE, 'DD-MON-RRRR') DUE_DATE,
                 (TO_NUMBER (TRUNC (AIA.INVOICE_DATE) - TRUNC (:P_TO_DATE)) * -1)
                    DAY_OVER_DUE,
                 AIA.INVOICE_CURRENCY_CODE,
                 (SELECT TRM.NAME
                    FROM AP_TERMS_TL TRM
                   WHERE TRM.TERM_ID = AIA.TERMS_ID AND TRM.LANGUAGE = 'US')
                    TERMS_NAME,
                 AIA.ACCTS_PAY_CODE_COMBINATION_ID
                    ACCTS_PAY_CODE_COMBINATION_ID,
                 AIA.INVOICE_NUM INVOICE_NUMBER,
                 AIA.INVOICE_AMOUNT,
                 APSA.GROSS_AMOUNT,
                 TO_CHAR (AIA.INVOICE_DATE, 'DD-MON-RRRR') INVOICE_DATE,
TO_CHAR (AIA.INVOICE_DATE, 'YYYYMMDD') INV_DATE,
                 CEIL (SYSDATE - APSA.DUE_DATE) DAYS_PAST_DUE,
                 DECODE (AIA.INVOICE_CURRENCY_CODE,
                         APSS.BASE_CURRENCY_CODE, ' ',
                         DECODE (AIA.EXCHANGE_RATE, NULL, '*', ' '))
                    DATA_CONVERTED,
                 NVL (AIA.EXCHANGE_RATE, 1) EXCHANGE_RATE,
                 DECODE (
                    AIA.INVOICE_CURRENCY_CODE,
                    APSS.BASE_CURRENCY_CODE, DECODE (
                                                NVL (
                                                   APSS.
                                                    MINIMUM_ACCOUNTABLE_UNIT,
                                                   0),
                                                0, ROUND (
                                                      ( (NVL (
                                                            APSA.GROSS_AMOUNT,
                                                            0)
                                                         / (NVL (
                                                               AIA.
                                                                PAYMENT_CROSS_RATE,
                                                               1)))
                                                       * NVL (
                                                            AIA.EXCHANGE_RATE,
                                                            1)),
                                                      APSS.PRECISION),
                                                ROUND (
                                                   ( (NVL (APSA.GROSS_AMOUNT,
                                                           0)
                                                      / (NVL (
                                                            AIA.
                                                             PAYMENT_CROSS_RATE,
                                                            1)))
                                                    * NVL (AIA.EXCHANGE_RATE,
                                                           1))
                                                   / NVL (
                                                        APSS.
                                                         MINIMUM_ACCOUNTABLE_UNIT,
                                                        0))
                                                * NVL (
                                                     APSS.
                                                      MINIMUM_ACCOUNTABLE_UNIT,
                                                     0)),
                    DECODE (
                       AIA.EXCHANGE_RATE,
                       NULL, 0,
                       DECODE (
                          NVL (APSS.MINIMUM_ACCOUNTABLE_UNIT, 0),
                          0, ROUND (
                                ( (NVL (APSA.GROSS_AMOUNT, 0)
                                   / (NVL (AIA.PAYMENT_CROSS_RATE, 1)))
                                 * NVL (AIA.EXCHANGE_RATE, 1)),
                                APSS.PRECISION),
                          ROUND (
                             ( (NVL (APSA.GROSS_AMOUNT, 0)
                                / (NVL (AIA.PAYMENT_CROSS_RATE, 1)))
                              * NVL (AIA.EXCHANGE_RATE, 1))
                             / NVL (APSS.MINIMUM_ACCOUNTABLE_UNIT, 0))
                          * NVL (APSS.MINIMUM_ACCOUNTABLE_UNIT, 0))))
                    AMT_DUE_ORIGINAL,
                 ROUND (
NVL((SELECT SUM((apid.amount) * NVL (aia.exchange_rate, 1))
   FROM ap_invoice_lines_all ail, 
        ap_invoice_distributions_all apid,
ap_payment_schedules_all apsa1
  WHERE ail.invoice_id = aia.invoice_id
    AND apid.invoice_id = aia.invoice_id
AND apid.invoice_line_number = ail.line_number
AND apsa1.invoice_id = aia.invoice_id
AND apsa1.payment_num = apsa.payment_num
    AND ail.org_id = aia.org_id
AND apid.LINE_TYPE_LOOKUP_CODE IN ('ITEM','ACCRUAL')
AND apid.accounting_date <= :P_TO_DATE),0)
                    ,2)
                 inv_amount,
NVL (
                          (SELECT SUM ((aip.amount + NVL(aip.discount_taken,0)) * NVL (aia.EXCHANGE_RATE, 1))
                             FROM ap_invoice_payments_all aip,
                                  ap_checks_All aca
                            WHERE     aip.invoice_id = aia.invoice_id
                                  AND aca.check_id = aip.check_id
                                  AND ((aca.void_date IS NULL) OR (aca.void_date > :P_TO_DATE))
  AND accounting_date <= :P_TO_DATE
  ),
                          0) check_payment,
NVL (
                            (SELECT SUM ((aida1.amount * NVL (aia.EXCHANGE_RATE, 1))) 
                               FROM ap_invoice_lines_all ail, ap_invoice_distributions_all aida1
                              WHERE     1=1
    AND aida1.LINE_TYPE_LOOKUP_CODE = 'REC_TAX'
                                    AND ail.INVOICE_ID = aia.invoice_id
AND ail.invoice_id = aida1.invoice_id
AND ail.line_number = aida1.invoice_line_number
AND trunc(aida1.accounting_date) <= trunc(:P_TO_DATE)),
                            0) rec_tax,
NVL (
                            (SELECT SUM ((aida1.amount)* NVL(aia.exchange_rate, 1)) 
                               FROM ap_invoice_lines_all ail, 
        ap_invoice_distributions_all aida1
                              WHERE     1=1
    AND aida1.LINE_TYPE_LOOKUP_CODE = 'AWT'
                                    AND ail.INVOICE_ID = aia.invoice_id
AND ail.invoice_id = aida1.invoice_id
AND ail.line_number = aida1.invoice_line_number
AND trunc(aida1.accounting_date) <= trunc(:P_TO_DATE)), 
                            0)  awt_amount,
NVL (
                            (SELECT SUM ((aida1.amount)* NVL(aia.exchange_rate, 1)) 
                               FROM ap_invoice_lines_all ail, ap_invoice_distributions_all aida1
                              WHERE     1=1
    AND aida1.LINE_TYPE_LOOKUP_CODE = 'MISCELLANEOUS'
                                    AND ail.INVOICE_ID = aia.invoice_id
AND ail.invoice_id = aida1.invoice_id
AND ail.line_number = aida1.invoice_line_number
AND trunc(aida1.accounting_date) <= trunc(:P_TO_DATE)),
                            0)  misc_amount,
NVL (
                            (SELECT SUM ((aida1.amount)* NVL(aia.exchange_rate, 1)) 
                               FROM ap_invoice_lines_all ail, ap_invoice_distributions_all aida1
                              WHERE     1=1
    AND aida1.LINE_TYPE_LOOKUP_CODE = 'IPV'
                                    AND ail.INVOICE_ID = aia.invoice_id
AND ail.invoice_id = aida1.invoice_id
AND ail.line_number = aida1.invoice_line_number
AND trunc(aida1.accounting_date) <= trunc(:P_TO_DATE)), 
                            0) ipv_amount,
NVL (
                            (SELECT SUM ((aida1.amount)* NVL(aia.exchange_rate, 1)) 
                               FROM ap_invoice_lines_all ail, ap_invoice_distributions_all aida1
                              WHERE     1=1
    AND aida1.LINE_TYPE_LOOKUP_CODE = 'FREIGHT'
                                    AND ail.INVOICE_ID = aia.invoice_id
AND ail.invoice_id = aida1.invoice_id
AND ail.line_number = aida1.invoice_line_number
AND trunc(aida1.accounting_date) <= trunc(:P_TO_DATE)), 
                            0) freight_amount,
                 AP_INVOICES_PKG.GET_PO_NUMBER_LIST (AIA.INVOICE_ID) PO_NUM,
                 (SELECT LISTAGG (PPAB.SEGMENT1, ',')
                            WITHIN GROUP (ORDER BY PPAB.SEGMENT1)
                    FROM PJF_PROJECTS_ALL_B PPAB, ap_invoice_lines_all AID
                   WHERE     AIA.INVOICE_ID = AID.INVOICE_ID
                         AND AIA.ORG_ID = AID.ORG_ID
                         AND AID.PJC_PROJECT_ID = PPAB.PROJECT_ID(+))
                    PROJECT_NUM,
                 APSA.PAYMENT_NUM INSTALLMENT_NUMBER,
TO_CHAR (AIA.TERMS_DATE, 'DD-MON-RRRR') TERMS_DATE,
                  ROUND (
NVL((SELECT SUM((apid.amount))
   FROM ap_invoice_lines_all ail, 
        ap_invoice_distributions_all apid,
ap_payment_schedules_all apsa1
  WHERE ail.invoice_id = aia.invoice_id
    AND apid.invoice_id = aia.invoice_id
AND apid.invoice_line_number = ail.line_number
AND apsa1.invoice_id = aia.invoice_id
AND apsa1.payment_num = apsa.payment_num
    AND ail.org_id = aia.org_id
AND apid.LINE_TYPE_LOOKUP_CODE IN ('ITEM','ACCRUAL')
AND apid.accounting_date <= :P_TO_DATE),0)
                    ,2)
                 inv_amount_orig,
NVL (
                          (SELECT SUM ((aip.amount + NVL(aip.discount_taken,0)))
                             FROM ap_invoice_payments_all aip,
                                  ap_checks_All aca
                            WHERE     aip.invoice_id = aia.invoice_id
                                  AND aca.check_id = aip.check_id
  AND accounting_date <= :P_TO_DATE
  ),
                          0) check_payment_orig,
NVL (
                            (SELECT SUM ((aida1.amount)) 
                               FROM ap_invoice_lines_all ail, ap_invoice_distributions_all aida1
                              WHERE     1=1
    AND aida1.LINE_TYPE_LOOKUP_CODE = 'REC_TAX'
                                    AND ail.INVOICE_ID = aia.invoice_id
AND ail.invoice_id = aida1.invoice_id
AND ail.line_number = aida1.invoice_line_number
AND trunc(aida1.accounting_date) <= trunc(:P_TO_DATE)), 
                            0) rec_tax_orig,
NVL (
                            (SELECT SUM ((aida1.amount))
                               FROM ap_invoice_lines_all ail, ap_invoice_distributions_all aida1
                              WHERE     1=1
    AND aida1.LINE_TYPE_LOOKUP_CODE = 'AWT'
                                    AND ail.INVOICE_ID = aia.invoice_id
AND ail.invoice_id = aida1.invoice_id
AND ail.line_number = aida1.invoice_line_number
AND trunc(aida1.accounting_date) <= trunc(:P_TO_DATE)), 
                            0)  awt_amount_orig,
NVL (
                            (SELECT SUM ((aida1.amount)) 
                               FROM ap_invoice_lines_all ail, ap_invoice_distributions_all aida1
                              WHERE     1=1
    AND aida1.LINE_TYPE_LOOKUP_CODE = 'MISCELLANEOUS'
                                    AND ail.INVOICE_ID = aia.invoice_id
AND ail.invoice_id = aida1.invoice_id
AND ail.line_number = aida1.invoice_line_number
AND trunc(aida1.accounting_date) <= trunc(:P_TO_DATE)),
                            0)  misc_amount_orig,
NVL (
                            (SELECT SUM ((aida1.amount)) 
                               FROM ap_invoice_lines_all ail, ap_invoice_distributions_all aida1
                              WHERE     1=1
    AND aida1.LINE_TYPE_LOOKUP_CODE = 'IPV'
                                    AND ail.INVOICE_ID = aia.invoice_id
AND ail.invoice_id = aida1.invoice_id
AND ail.line_number = aida1.invoice_line_number
AND trunc(aida1.accounting_date) <= trunc(:P_TO_DATE)),
                            0) ipv_amount_orig,
NVL (
                            (SELECT SUM ((aida1.amount)) 
                               FROM ap_invoice_lines_all ail, ap_invoice_distributions_all aida1
                              WHERE     1=1
    AND aida1.LINE_TYPE_LOOKUP_CODE = 'FREIGHT'
                                    AND ail.INVOICE_ID = aia.invoice_id
AND ail.invoice_id = aida1.invoice_id
AND ail.line_number = aida1.invoice_line_number
AND trunc(aida1.accounting_date) <= trunc(:P_TO_DATE)), 
                            0) freight_amount_orig,
                    NVL (
                            (SELECT SUM ((aida1.amount * NVL (aia.EXCHANGE_RATE, 1))*-1)
                               FROM ap_invoice_lines_all ail, ap_invoice_distributions_all aida1
                              WHERE     1=1
    AND aida1.LINE_TYPE_LOOKUP_CODE = 'PREPAY'
                                    AND ail.INVOICE_ID = aia.invoice_id
AND ail.invoice_id = aida1.invoice_id
AND ail.line_number = aida1.invoice_line_number
                               AND trunc(aida1.accounting_date) <= trunc(:P_TO_DATE)), 
                            0) prepay_amount_ex,
                        NVL (
                            (SELECT SUM ((aida1.amount )*-1) 
                               FROM ap_invoice_lines_all ail, ap_invoice_distributions_all aida1
                              WHERE     1=1
    AND aida1.LINE_TYPE_LOOKUP_CODE = 'PREPAY'
                                    AND ail.INVOICE_ID = aia.invoice_id
AND ail.invoice_id = aida1.invoice_id
AND ail.line_number = aida1.invoice_line_number
                                    AND trunc(aida1.accounting_date) <= trunc(:P_TO_DATE)), 
0) prepay_amount_orig
            FROM AP_INVOICES AIA,
                 AP_PAYMENT_SCHEDULES APSA,
                 HZ_PARTIES HP,
                 HZ_PARTY_SITES SITES,
                 POZ_SUPPLIERS_V PSV,
                 POZ_SUPPLIER_SITES_V PSSV,
                 HR_OPERATING_UNITS HOU,
                 (SELECT P.BASE_CURRENCY_CODE,
                         C.PRECISION,
                         NVL (C.MINIMUM_ACCOUNTABLE_UNIT, 0)
                            MINIMUM_ACCOUNTABLE_UNIT,
                         C.DESCRIPTION,
                         P.ORG_ID
                    FROM AP_SYSTEM_PARAMETERS P, FND_CURRENCIES_VL C
                   WHERE P.BASE_CURRENCY_CODE = C.CURRENCY_CODE) APSS
           WHERE     APSA.INVOICE_ID = AIA.INVOICE_ID
                 AND APSA.ORG_ID = AIA.ORG_ID
                 AND HP.PARTY_ID = AIA.PARTY_ID
                 AND PSV.VENDOR_ID(+) = AIA.VENDOR_ID
                 AND PSSV.VENDOR_SITE_ID(+) = AIA.VENDOR_SITE_ID
                 AND PSSV.VENDOR_ID(+) = AIA.VENDOR_ID
                 AND APSS.ORG_ID = AIA.ORG_ID
                 AND HOU.ORGANIZATION_ID = AIA.ORG_ID
                 AND SITES.PARTY_ID = HP.PARTY_ID
                 AND aia.invoice_type_lookup_code <> 'PREPAYMENT'
                 AND aia.PARTY_SITE_ID = sites.PARTY_SITE_ID
                 AND (AIA.APPROVAL_STATUS IN ('APPROVED')
                      OR aia.wfapproval_status IN
                            ('MANUALLY APPROVED', 'NOT REQUIRED'))
                 AND ( (AIA.CANCELLED_DATE IS NOT NULL
                        AND TRUNC (AIA.CANCELLED_DATE) > :P_TO_DATE)
                      OR (AIA.CANCELLED_DATE IS NULL))
                 AND EXISTS (SELECT '1'
               FROM AP_INVOICE_DISTRIBUTIONS
                              WHERE INVOICE_ID = AIA.INVOICE_ID
    AND ACCOUNTING_DATE <= :P_TO_DATE
AND NVL(POSTED_FLAG,'N') = 'Y'  
)
AND UPPER (HOU.NAME) = UPPER (NVL (:P_ORG_NAME, HOU.NAME))
AND LTRIM(RTRIM(HP.party_name)) = LTRIM(RTRIM(NVL (:P_FROM_VENDOR_NAME, HP.party_name)))
) Z
GROUP BY ORG_ID,
         ORG_NAME,
         VOUCHER_NUMBER,
         VENDOR_NAME,
         VENDOR_NUMBER,
         SHORT_VENDOR_NAME,
         VENDOR_ID,
         VENDOR_SITE_CODE,
         VENDOR_SITE,
         ADDRESS_ID,
         INVOICE_TYPE,
         INVOICE_ID,
         LEDGER_CURRENCY,
         INVOICE_CURRENCY_CODE,
         TERMS_NAME,
         ACCTS_PAY_CODE_COMBINATION_ID,
         INVOICE_NUMBER,
         PO_NUM,
         PROJECT_NUM,
         INVOICE_AMOUNT,
         INVOICE_DATE,
         INV_DATE,
         DATA_CONVERTED,
         EXCHANGE_RATE,
         AMT_DUE_ORIGINAL,
         DAY_OVER_DUE,
TERMS_DATE
,prepay_amount_ex,
 prepay_amount_orig
))
WHERE ROUND(NVL(C_AMT_DUE_REMAINING,0),1) != 0 
ORDER BY VENDOR_NAME, INV_DATE;