Showing posts with label Oracle Purchasing. Show all posts
Showing posts with label Oracle Purchasing. Show all posts

Sunday, April 25, 2021

Query to fetch Purchase Requisition Approval Action History Details in Oracle Apps R12 (PO_ACTION_HISTORY)

 

 

 

 

 

 

 

In this post, we have given a query which helps to derive the approval action history of a Purchase Requisition.

Key Table: PO_ACTION_HISTORY

Instance: R12.2.4

Query

SELECT hou.name ou_name, hou.short_code ou_short_code, prha.segment1 pr_number, (SELECT pah.action_date FROM po_action_history pah WHERE prha.requisition_header_id = pah.object_id AND pah.object_type_code = 'REQUISITION' AND pah.sequence_num = (SELECT MIN(sequence_num) FROM po_action_history pah1 WHERE pah1.action_code = 'SUBMIT' AND prha.requisition_header_id = pah1.object_id AND pah1.object_type_code= 'REQUISITION' ) ) pr_last_submission_date, prha.creation_date, (SELECT prla.catalog_type FROM po_requisition_lines_all prla WHERE prha.requisition_header_id = prla.requisition_header_id AND ROWNUM < 2 ) pr_type, NVL2((SELECT prla.urgent_flag FROM po_requisition_lines_all prla WHERE prha.requisition_header_id = prla.requisition_header_id AND urgent_flag = 'Y' AND ROWNUM < 2 ),'Y','N' ) urgent_flag, auth_status.meaning, authorization_status pr_status, pah.sequence_num action_seq_num, papf.full_name action_person, pah.action_code, pah.action_date, pah.note, prha.change_pending_flag FROM po_requisition_headers_all prha, fnd_lookup_values_vl auth_status, hr_operating_units hou, po_action_history pah, per_all_people_f papf WHERE prha.org_id = hou.organization_id AND prha.requisition_header_id = pah.object_id AND papf.person_id = pah.employee_id AND SYSDATE BETWEEN papf.effective_start_date AND papf.effective_end_date AND pah.object_type_code = 'REQUISITION' AND auth_status.lookup_type = 'AUTHORIZATION STATUS' AND auth_status.lookup_code = prha.authorization_status;

Sunday, April 25, 2021 by Team search · 0

Friday, March 12, 2021

Query to fetch Requestor Initiated Purchase Order Changes in R12 (PO_CHANGE_REQUESTS)

 

 

 

 

 

 

            In this post, we have given a query to fetch Requestor Initiated Purchase Order Change requests.

Test Instance: R12.2.4

Query:

SELECT hou.short_code, pcr_r.change_request_id, pcr_r.initiator, pcr_r.action_type, pcr_r.document_type, pcr_r.document_header_id po_header_id, pcr_r.document_num po_number, pcr_r.document_revision_num po_revision_num, pcr_r.document_line_id po_line_id, pcr_r.document_line_number po_line_number, pcr_r.old_quantity, pcr_r.new_quantity, pcr_r.old_promised_date, pcr_r.new_promised_date, pcr_r.old_supplier_part_number, pcr_r.new_supplier_part_number, pcr_r.old_price, pcr_r.new_price, pcr_r.old_currency_unit_price, pcr_r.new_currency_unit_price, pcr_r.old_need_by_date, pcr_r.new_need_by_date, pcr_r.requester_id, fu.user_name requester, furesp.user_name responser, pcr_r.response_date, pcr_r.response_reason, pcr_r.creation_date, pcr_r.request_status, pcr_r.request_reason, pcr_r.request_level, pcr_r.change_active_flag FROM po_change_requests pcr_r, po_headers_all pha, hr_operating_units hou, fnd_user fu, fnd_user furesp WHERE pcr_r.document_header_id = pha.po_header_id AND pha.org_id = hou.organization_id AND pcr_r.document_type = 'PO' AND pcr_r.requester_id = fu.user_id AND pcr_r.responded_by = furesp.user_id AND pcr_r.initiator = 'REQUESTER'

 

 

Friday, March 12, 2021 by Team search · 0

Saturday, September 12, 2020

API to change Requester or Approver of a Purchase Requisition in Oracle Applications R12 (PO_MASS_UPDATE_REQ_GRP)

 

 

 

 

 

 

            In this post, we have given a script which can update requester/preparer or approver of standard purchase requisition.

Business Case: This is pretty much useful when a preparer of current purchase requisition must be changed due to various business reasons like preparer left organization or moving to another department or moving higher the ladder etc.

Tested instance: R12.2.4

API: PO_MASS_UPDATE_REQ_GRP.UPDATE_PERSONS

Parameters:

Type

Parameter

Description

IN

p_update_person

PREPARER OR APPROVER OR REQUESTOR

IN

p_old_personid

old person id from per_all_people_f

IN

p_new_personid

new person id from per_all_people_f

IN

p_document_type

INTERNAL or PURCHASE

IN

p_document_no_from

Requisition number from

IN

p_document_no_to

Requisition number To

IN

p_date_from

 

IN

p_date_to

 

IN

p_commit_interval

 

OUT

p_msg_data

Actual message in encoded format

OUT

p_msg_count

number of messages in the API list

OUT

p_return_status

Return status  - S or E or U

  

Script:

SET SERVEROUTPUT ON; DECLARE lv_msg_data VARCHAR2(100); ln_msg_count NUMBER; lv_return_status VARCHAR2(1); ln_org_id NUMBER; ln_changed_preparer_id NUMBER; ln_current_preparer_id NUMBER; ln_new_preparer_id NUMBER DEFAULT '88'; ln_valid_employee NUMBER; lv_document_no VARCHAR2(200) DEFAULT '100008225'; le_custom_exception EXCEPTION; BEGIN -- check whether the given person is a valid preparer SELECT COUNT(1) INTO ln_valid_employee FROM per_all_people_f WHERE person_id = ln_new_preparer_id AND current_employee_flag = 'Y' AND SYSDATE BETWEEN effective_from_date AND effective_to_date; IF ln_valid_employee = 0 THEN DBMS_OUTPUT.PUT_LINE('Error: The given "to person id" is not a valid employee'); RAISE le_custom_exception; END IF; SELECT org_id, preparer_id INTO ln_org_id, ln_current_preparer_id FROM po_requisition_headers_all pha WHERE pha.segment1 = lv_document_no; IF ln_current_preparer_id = ln_new_preparer_id THEN DBMS_OUTPUT.PUT_LINE('Error: The given "to person id" is already a preparer'); RAISE le_custom_exception; END IF; fnd_global.apps_initialize(user_id => 178, resp_id => 5739, resp_appl_id => 201 ); mo_global.init('PO'); fnd_client_info.set_org_context(ln_org_id); mo_global.set_policy_context ('S', ln_org_id); PO_MASS_UPDATE_REQ_GRP.UPDATE_PERSONS ( p_update_person => 'PREPARER', p_old_personid => ln_current_preparer_id, p_new_personid => ln_new_preparer_id, p_document_type => 'PURCHASE', p_document_no_from => lv_document_no, p_document_no_to => lv_document_no, p_date_from => NULL, p_date_to => NULL, p_commit_interval => 1, p_msg_data => lv_msg_data, p_msg_count => ln_msg_count, p_return_status => lv_return_status ); SELECT preparer_id INTO ln_current_preparer_id FROM po_requisition_headers_all pha WHERE pha.segment1 = lv_document_no; IF ln_new_preparer_id <> ln_current_preparer_id THEN DBMS_OUTPUT.PUT_LINE('msg_data'|| lv_msg_data); DBMS_OUTPUT.PUT_LINE('msg_count'|| ln_msg_count); DBMS_OUTPUT.PUT_LINE('return_status'|| lv_return_status); ELSE DBMS_OUTPUT.PUT_LINE('Successfully Updated'); END IF; EXCEPTION WHEN le_custom_exception THEN DBMS_OUTPUT.PUT_LINE('Custom Error. Hence, action Aborted'); WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Error: '||SQLERRM); END;

Saturday, September 12, 2020 by Team search · 0

Disclaimer

The ideas, thoughts and concepts expressed here are my own. They, in no way reflect those of my employer or any other organization/client that I am associated. The articles presented doesn't imply to any particular organization or client and are meant only for knowledge Sharing purpose. The articles can't be reproduced or copied without the Owner's knowledge or permission.