You are on page 1of 8

WITH po_req_query AS (

SELECT
hou.name
"REQ_BU",
preparer.display_name
"PREPARER",
pppnf.display_name
"REQUESTOR",
prh.requisition_number
"REQ_NUM",
prh.description
"REQ_DESCRIPTION",
prl.item_description
"REQ_LINE_DESC",
to_char(prh.creation_date, 'DD-MON-YYYY', 'NLS_DATE_LANGUAGE=AMERICAN')
"REQ_CREATION_DATE",
prh.created_by
"REQ_CREATED_BY",
prh.document_status
"REQ_DOC_STATUS",
auth_status.displayed_field
"REQ_STATUS",
prd.distribution_amount
"REQ_DIST_AMOUNT",
prh.justification,
funds_status.meaning
"REQ_FUNDS_STATUS",
prl.currency_code,
prl.requisition_header_id,
prd.distribution_id,
prl.line_number
line,
( gcc.segment1
|| '.'
|| gcc.segment2
|| '.'
|| gcc.segment3
|| '.'
|| gcc.segment4
|| '.'
|| gcc.segment5
|| '.'
|| gcc.segment6
|| '.'
|| gcc.segment7
|| '.'
|| gcc.segment8 )
segments,
prl.po_line_id,
ect.category_name
FROM
por_requisition_headers_all prh,
por_requisition_lines_all prl,
por_req_distributions_all prd,
hr_operating_units hou,
po_lookup_codes auth_status,
per_person_names_f pppnf,
fnd_lookup_values_tl funds_status,
egp_system_items_vl msi,
gl_code_combinations gcc,
per_person_names_f preparer,
egp_categories_tl ect
WHERE
1 = 1
AND auth_status.lookup_type = 'PO_ACTION'
AND auth_status.lookup_code = prh.document_status
AND funds_status.lookup_type = 'POR_FUNDS_STATUS'
AND funds_status.language = 'US'
AND funds_status.lookup_code = prh.funds_status
AND hou.organization_id = prh.req_bu_id
AND prh.requisition_header_id = prl.requisition_header_id
AND prd.requisition_line_id = prl.requisition_line_id
AND msi.organization_id (+) = prl.destination_organization_id
AND prl.item_id = msi.inventory_item_id (+)
AND gcc.code_combination_id (+) = prd.code_combination_id
AND sysdate BETWEEN pppnf.effective_start_date AND pppnf.effective_end_date
AND sysdate BETWEEN preparer.effective_start_date AND
preparer.effective_end_date
AND prl.line_status != 'CANCELED'
AND pppnf.person_id = nvl(prl.requester_id, 0)
AND pppnf.name_type = 'GLOBAL'
AND preparer.person_id = nvl(prh.preparer_id, 0)
AND preparer.name_type = 'GLOBAL'
AND ect.category_id = prl.category_id
AND ect.language = userenv('LANG')
), po_query AS (
SELECT
pha.segment1
"PO_NUMBER",
prq.requisition_header_id
"REQUISITION_HEADER_ID",
SUM(nvl(pda.amount_ordered,
(nvl(pda.quantity_ordered, 0) - nvl(pda.quantity_cancelled, 0)) *
nvl(pla.unit_price, 0))) "PO_AMOUNT",
psv.vendor_name
"SUPPLIER_NAME",
pssv.vendor_site_code
"SUPPLIER_SITE",
ppnf.display_name
"PO_LINE_REQUESTER",
MAX(to_char(pha.creation_date, 'DD-MON-YYYY',
'NLS_DATE_LANGUAGE=AMERICAN')) "PO_DATE",
MAX(po_status.displayed_field)
"PO_STATUS",
MAX((
SELECT
decode(COUNT(*),
0,
'N',
'Y')
FROM
dual
WHERE
EXISTS(
SELECT
1
FROM
po_lines_archive_all pla,
po_lines_archive_all pla1,
po_versions pv,
po_line_locations_archive_all plaa,
po_line_locations_archive_all plaa1
WHERE
1 = 1
AND pha.po_header_id = pla.po_header_id
AND pla.po_line_id = pla1.po_line_id(+) -- to get line
level details
AND pla.to_co_seq = pla1.from_co_seq(+) -- to get line
level details
AND pla.po_header_id = pv.po_header_id
AND(pla.to_co_seq = plaa.to_co_seq
OR pla.from_co_seq = plaa.from_co_seq)
AND pv.co_canceled_flag <> 'Y' -- not considering cancled
CO's
AND pv.change_order_status <> 'PENDING APPROVAL' -- not
pending approval CO's
AND pla.po_header_id = plaa.po_header_id
AND pla.po_line_id = plaa.po_line_id
AND pv.po_header_id = plaa.po_header_id
AND((pla.to_co_seq = pv.co_sequence)
OR(plaa.to_co_seq = pv.co_sequence))
AND plaa.po_header_id = plaa1.po_header_id(+)
AND plaa.po_line_id = plaa1.po_line_id(+)
AND plaa.to_co_seq = plaa1.from_co_seq(+)
UNION
SELECT
1
FROM
po_lines_archive_all pla,
po_lines_archive_all pla1,
po_versions pv
WHERE
1 = 1
AND pha.po_header_id = pla.po_header_id
AND pla.po_line_id = pla1.po_line_id(+) -- to get line
level details
AND pla.to_co_seq = pla1.from_co_seq(+) -- to get line
level details
AND pla.po_header_id = pv.po_header_id
AND pla.from_co_seq = pv.co_sequence
AND pv.co_canceled_flag <> 'Y' -- not considering cancled
CO's
AND pv.change_order_status <> 'PENDING APPROVAL' -- not
considering pending approval CO's
AND pla.entity_change_type_code = 'I' -- get the original
details
AND pla.from_co_seq <> '0' -- sequence should not be 0
)
))
"CO_EXISTS",
pda.po_distribution_id,
pha.po_header_id,
pla.po_line_id,
ect.category_name,
decode(plla.receipt_required_flag,
'N',
'2 Way',
'Y',
decode(plla.inspection_required_flag, 'N', '3 Way', '4 Way'))
po_match_type
FROM
po_headers_all pha,
po_lines_all pla,
po_line_locations_all plla,
po_distributions_all pda,
po_req_query prq,
po_lookup_codes po_status,
poz_suppliers_v psv,
poz_supplier_sites_v pssv,
per_person_names_f ppnf,
egp_categories_tl ect
WHERE
pla.po_header_id = pha.po_header_id
AND pda.po_header_id = pha.po_header_id
AND pda.po_line_id = pla.po_line_id
AND pla.po_line_id = plla.po_line_id
AND pha.vendor_id = psv.vendor_id
AND pha.vendor_site_id = pssv.vendor_site_id
AND po_status.lookup_type = 'ORDER_STATUS'
AND po_status.lookup_code = pha.document_status
AND nvl(plla.cancel_flag, 'N') = 'N'
AND nvl(pla.cancel_flag, 'N') = 'N'
AND pda.req_distribution_id = prq.distribution_id (+)
AND pla.po_line_id = prq.po_line_id (+)
AND pda.deliver_to_person_id = ppnf.person_id
AND ppnf.name_type = 'GLOBAL'
AND sysdate BETWEEN ppnf.effective_start_date AND ppnf.effective_end_date
AND ect.category_id = pla.category_id
AND ect.language = userenv('LANG')
AND decode(plla.receipt_required_flag,
'N',
'2 Way',
'Y',
decode(plla.inspection_required_flag, 'N', '3 Way', '4 Way')) IN
( '2 Way', '3 Way' )
GROUP BY
pha.segment1,
prq.requisition_header_id,
pda.po_distribution_id,
psv.vendor_name,
pssv.vendor_site_code,
ppnf.display_name,
pha.po_header_id,
pla.po_line_id,
ect.category_name,
decode(plla.receipt_required_flag,
'N',
'2 Way',
'Y',
decode(plla.inspection_required_flag, 'N', '3 Way', '4 Way'))
), invoice_query AS (
SELECT
SUM(nvl(dis.amount, 0)) invoice_amount,
dis.po_distribution_id,
ail.po_line_id
FROM
ap_invoice_distributions_all dis,
ap_invoice_lines_all ail
WHERE
ail.invoice_id = dis.invoice_id
AND dis.invoice_line_number = ail.line_number
AND ail.line_type_lookup_code = 'ITEM'
GROUP BY
dis.po_distribution_id,
ail.po_line_id
), po_main_query AS (
SELECT
prq.req_bu,
prq.requestor,
prq.req_num,
prq.req_description,
prq.req_line_desc,
prq.req_creation_date,
prq.req_created_by,
MAX((
SELECT
LISTAGG(DISTINCT pptf.full_name,
', ') WITHIN GROUP(
ORDER BY
TO_NUMBER(pah.object_id)
) approver_name
FROM
per_person_names_f pptf,
po_action_history pah
WHERE
pptf.person_id = pah.performer_id
AND pah.object_id = prq.requisition_header_id
AND pptf.name_type = 'GLOBAL'
AND pah.action_code = 'APPROVE'
AND sysdate BETWEEN pptf.effective_start_date AND
pptf.effective_end_date
)) approver_name,
prq.req_status,
SUM(prq.req_dist_amount) "REQ_AMOUNT",
prq.justification,
prq.req_funds_status,
prq.currency_code,
poq.po_number,
poq.po_amount,
poq.po_date,
poq.po_status,
poq.po_line_requester,
poq.po_distribution_id,
MAX(poq.co_exists) "CO_EXISTS",
nvl(inv.invoice_amount, 0) invoice_amount,
supplier_name,
supplier_site,
prq.line,
prq.segments,
prq.preparer,
prq.category_name req_category_name,
poq.category_name po_category_name,
poq.po_match_type
FROM
po_req_query prq,
po_query poq,
invoice_query inv
WHERE
1 = 1
AND prq.requisition_header_id (+) = poq.requisition_header_id
AND prq.po_line_id (+) = poq.po_line_id
AND inv.po_distribution_id (+) = poq.po_distribution_id
AND inv.po_line_id (+) = poq.po_line_id
GROUP BY
prq.req_bu,
prq.requestor,
prq.req_num,
prq.req_description,
prq.req_line_desc,
prq.req_creation_date,
prq.req_created_by,
prq.req_status,
prq.justification,
prq.req_funds_status,
prq.currency_code,
poq.po_number,
poq.po_amount,
poq.po_date,
poq.po_status,
poq.po_line_requester,
inv.invoice_amount,
poq.po_distribution_id,
supplier_name,
supplier_site,
prq.line,
prq.segments,
prq.preparer,
prq.category_name,
poq.category_name,
poq.po_match_type
), pr_main_query AS (
SELECT
prq.req_bu,
prq.requestor,
prq.req_num,
prq.req_description,
prq.req_line_desc,
prq.req_creation_date,
prq.req_created_by,
MAX((
SELECT
LISTAGG(DISTINCT pptf.full_name,
', ') WITHIN GROUP(
ORDER BY
TO_NUMBER(pah.object_id)
) approver_name
FROM
per_person_names_f pptf,
po_action_history pah
WHERE
pptf.person_id = pah.performer_id
AND pah.object_id = prq.requisition_header_id
AND pptf.name_type = 'GLOBAL'
AND pah.action_code = 'APPROVE'
AND sysdate BETWEEN pptf.effective_start_date AND
pptf.effective_end_date
)) approver_name,
prq.req_status,
SUM(prq.req_dist_amount) "REQ_AMOUNT",
prq.justification,
prq.req_funds_status,
prq.currency_code,
MAX('') po_number,
MAX(0) po_amount,
'' po_date,
MAX('') po_status,
MAX('') po_line_requester,
MAX('N') "CO_EXISTS",
MAX(0) invoice_amount,
MAX('') supplier_name,
MAX('') supplier_site,
prq.line,
prq.segments,
prq.preparer,
prq.category_name req_category_name,
NULL po_category_name,
NULL po_match_type
FROM
po_req_query prq
WHERE
1 = 1
AND NOT EXISTS (
SELECT
1
FROM
po_query poq
WHERE
prq.requisition_header_id = poq.requisition_header_id
)
GROUP BY
prq.req_bu,
prq.requestor,
prq.req_num,
prq.req_description,
prq.req_line_desc,
prq.req_creation_date,
prq.req_created_by,
prq.req_status,
prq.justification,
prq.req_funds_status,
prq.currency_code,
prq.line,
prq.segments,
prq.preparer,
prq.category_name
)
SELECT
req_bu,
requestor,
req_num,
req_description,
req_line_desc,
req_creation_date,
req_created_by,
approver_name,
req_status,
req_amount,
justification,
req_funds_status,
currency_code,
po_number,
po_amount,
po_date,
po_status,
po_line_requester,
co_exists,
invoice_amount,
supplier_name,
supplier_site,
line,
segments,
preparer,
req_category_name,
po_category_name,
po_match_type
FROM
po_main_query
UNION ALL
SELECT
req_bu,
requestor,
req_num,
req_description,
req_line_desc,
req_creation_date,
req_created_by,
approver_name,
req_status,
req_amount,
justification,
req_funds_status,
currency_code,
po_number,
po_amount,
po_date,
po_status,
po_line_requester,
co_exists,
invoice_amount,
supplier_name,
supplier_site,
line,
segments,
preparer,
req_category_name,
po_category_name,
po_match_type
FROM
pr_main_query
ORDER BY
req_num,
po_number

You might also like