OracleEBSAP付款界面撤销逻辑代码

标签:
付款界面撤销逻辑代码pay_actions.void |
分类: OracleEBS财务模块 |
Oracle EBS AP 付款界面 撤销逻辑代码
l_amount NUMBER;
l_check_prepay_unapply VARCHAR2(1)
:= 'N';
if (event = 'PRE-FORM') then
--
Enable/disable the void option according to function
--
security.
--
if
(:parameter.ap_apxpawkb_void = 'Y') then
Hide_View('PAY_ACTIONS_HIDE_VOID');
else
Show_View('PAY_ACTIONS_HIDE_VOID');
end
if;
elsif (event = 'PRE-RECORD')
then
-- To enable or
disable the void option check both the status of the
-- payment and
whether the function is allowed.
--
if
(:parameter.ap_apxpawkb_void = 'Y') then
if (:parameter.payment_status in
('ISSUED','NEGOTIABLE','STOP INITIATED')) then
-- bug
1973908 For a payment on a prepayment, get sum of
amounts of
-- invoices applied on that
prepayment. You can void payment only if sum=0.
BEGIN
SELECT
SUM(NVL(aid.amount,0))
INTO
l_amount
FROM
ap_invoice_payments aip,ap_invoices ai,
ap_invoice_distributions
aid,ap_invoice_distributions aid2
WHERE
aip.check_id
=
:pay_sum_folder.check_id
AND
ai.invoice_id
= aip.invoice_id
AND
ai.invoice_type_lookup_code = 'PREPAYMENT'
AND
ai.invoice_id
= aid2.invoice_id
AND
aid2.line_type_lookup_code =
'ITEM'
AND
aid.prepay_distribution_id =
aid2.invoice_distribution_id;
EXCEPTION
WHEN NO_DATA_FOUND
THEN l_amount := 0;
END;
IF (NVL(l_amount,0) != 0)
THEN
App_Item_Property.Set_Property('PAY_ACTIONS.VOID',
ENABLED,
PROPERTY_OFF);
ELSE
--
bug9441420 we would not allow the voiding of a check paying
a
-- check
for which the prepayment unapplication has not been accted
-- and
prepayment application is accounted
BEGIN
SELECT
'Y'
INTO l_check_prepay_unapply
FROM dual
WHERE
EXISTS
(SELECT
1
FROM
ap_invoice_distributions_all aid_prepay,
ap_invoice_payments_all aip,
ap_invoices_all
ai_prepay,
WHERE aip.check_id =
:pay_sum_folder.check_id
AND
aip.invoice_id = ai_prepay.invoice_id
AND
ai_prepay.invoice_type_lookup_code = 'PREPAYMENT'
AND aid_prepay.invoice_id =
ai_prepay.invoice_id
AND aid_prepay.invoice_distribution_id =
aid.prepay_distribution_id
AND aid.prepay_distribution_id IS NOT NULL
AND aid.parent_reversal_id IS NOT NULL
AND aid.amount > 0
AND nvl(aid.posted_flag, 'N') = 'N'
AND aid.invoice_id = aidp.invoice_id
AND aid.invoice_line_number =
aidp.invoice_line_number
AND aid.parent_reversal_id =
aidp.invoice_distribution_id
AND aid.prepay_distribution_id =
aidp.prepay_distribution_id
AND nvl(aidp.posted_flag, 'N') = 'Y');
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
IF
l_check_prepay_unapply = 'Y' THEN
App_Item_Property.Set_Property('PAY_ACTIONS.VOID',
ENABLED, PROPERTY_OFF);
ELSE
App_Item_Property.Set_Property('PAY_ACTIONS.VOID',
ENABLED, PROPERTY_ON);
:PAY_ACTIONS.void := 'N';
END
IF;
END IF;
else
App_Item_Property.Set_Property('PAY_ACTIONS.VOID',
ENABLED, PROPERTY_OFF);
end if;
IF :pay_sum_folder.payment_type = 'N' THEN
App_Item_Property.Set_Property('PAY_ACTIONS.VOID',
ENABLED,PROPERTY_ON);
END IF;
else
App_Item_Property.Set_Property('PAY_ACTIONS.VOID',
ENABLED, PROPERTY_OFF);
end if;
elsif (event =
'WHEN-CHECKBOX-CHANGED') then
-- Check
mutually exclusive fields
--
PAY_ACTIONS.REISSUE('MUTEX');
PAY_ACTIONS.PRINT_REMITTANCE('MUTEX');
PAY_ACTIONS.INITIATE_RELEASE_STOP('MUTEX');
-- Initialize
dependent fields
--
PAY_ACTIONS.VOID_DATE('INIT');
--Bug2431590
Interchanged the following calls. Initialisation of
invoice_action
--is not
happening if we get an error in gl_date validation.
PAY_ACTIONS.INVOICE_ACTION('INIT');
PAY_ACTIONS.GL_DATE('INIT');
elsif (event = 'MUTEX') then
-- Do not
bother unsetting the checkbox if void is not allowed
-- via function
security.
--
if
(:parameter.ap_apxpawkb_void = 'N') then
return;
end if;
-- Set to 'N'
since another mutually exclusive
-- action has
been selected
--
:PAY_ACTIONS.void := 'N';
-- Initialize
dependent fields
--
PAY_ACTIONS.VOID_DATE('INIT');
PAY_ACTIONS.GL_DATE('INIT');
PAY_ACTIONS.INVOICE_ACTION('INIT');
else
APP_EXCEPTION.INVALID_ARGUMENT('PAY_ACTIONS.VOID', 'EVENT',
event);
end if;
--Bug fix: 2249708 Moved the foll
fix from within the IF condition and
--and placed it here, as
parameter.payment_max_gl_date should be initialized
any
--logic is checked around it.
-- Bug
2144818
-- Initialize the
parameter.payment_max_gl_date
:parameter.payment_max_gl_date :=
:pay_sum_folder.max_payment_gl_date;
--
if (event in
('PRE-RECORD','INIT')) then
App_Field.Set_Dependent_Field('INIT',
(:PAY_ACTIONS.VOID = 'Y'),
'PAY_ACTIONS.VOID_DATE');
App_Field.Set_Required_Field('INIT',
'PAY_ACTIONS.VOID_DATE');
if (event =
'INIT' and :PAY_ACTIONS.void = 'Y') then
:PAY_ACTIONS.void_date := sysdate;
end if;
elsif (event =
'WHEN-VALIDATE-ITEM') then
if
(:PAY_ACTIONS.void = 'Y') then
-- bug 2642104 add this hook for
Federal
APPCORE_CUSTOM.EVENT('FVAPTPVD');
-- Fix for 1939138 modified the above IF
statement and wrote the
-- below one
IF :parameter.payment_max_gl_date IS NOT NULL
THEN
if (:PAY_ACTIONS.void_date
< :parameter.payment_max_gl_date) then
-- Bug
2144818
--
Initialize the parameter.payment_max_gl_date
:parameter.payment_max_gl_date :=
:pay_sum_folder.max_payment_gl_date;
--Introduced calendar_aware
parameter in app_date.date_to_chardate
-- procedure for
bug#11774150
Form_Utilities.Display_Failure_Message('AP_VOID_DATE_BEF_INVPAY_DATE',
'GL_DATE',
app_date.date_to_chardate(dateval=>:parameter.payment_max_gl_date,calendar_aware=>APP_DATE.calendar_aware_alt));
end if;
ELSE
IF :PAY_ACTIONS.void_date
< :pay_sum_folder.max_payment_gl_date THEN
--Introduced calendar_aware
parameter in app_date.date_to_chardate
-- procedure for
bug#11774150
Form_Utilities.Display_Failure_Message('AP_VOID_DATE_BEF_INVPAY_DATE',
'GL_DATE',
app_date.date_to_chardate(dateval=>:pay_sum_folder.max_payment_gl_date,calendar_aware=>APP_DATE.calendar_aware_alt));
END IF ;
END IF ;
-- Bug3343314 ----
-- the void date should not proceed the maturity
date
IF
(
:pay_sum_folder.status_lookup_code = 'NEGOTIABLE' AND
--IBY: SP
:pay_sum_folder.future_dated_payment_flag = 'Y' AND
:pay_actions.void_date <
nvl(:pay_sum_folder.maturity_exchange_date,:pay_sum_folder.future_pay_due_date)
)
THEN
--Introduced calendar_aware parameter in
app_date.date_to_chardate
--procedure for bug#11774150
FORM_UTILITIES.DISPLAY_FAILURE_MESSAGE
(
'AP_VOID_DATE_BEF_MAT_DATE',
'GL_DATE',
app_date.date_to_chardate(dateval=>:pay_sum_folder.maturity_exchange_date,calendar_aware=>APP_DATE.calendar_aware_alt)
);
END IF;
-- Bug3343314 ----
end if;
else
APP_EXCEPTION.INVALID_ARGUMENT('PAY_ACTIONS.VOID_DATE',
'EVENT',
event);
end if;
gl_date
Date;
period_name Varchar2(15);
if (event in
('PRE-RECORD','INIT')) then
App_Field.Set_Dependent_Field('INIT',
(:PAY_ACTIONS.VOID = 'Y'),
'PAY_ACTIONS.GL_DATE');
App_Field.Set_Required_Field('INIT',
'PAY_ACTIONS.GL_DATE');
if (event =
'INIT' and :PAY_ACTIONS.void = 'Y') then
--
-- Fix for
1162722. Commenting out the following line. Assigning
--
pay_actions.void_date to pay_actions.gl_date
--
--
:PAY_ACTIONS.gl_date := :parameter.payment_check_date;
:PAY_ACTIONS.gl_date :=
:PAY_ACTIONS.void_date;
-- Validate GL Date
--
PAY_ACTIONS.GL_DATE('WHEN-VALIDATE-ITEM');
end if;
elsif (event =
'WHEN-VALIDATE-ITEM') then
if
(:PAY_ACTIONS.void = 'Y') then
-- Fix for 1939138 commented below IF
statement
--
-- if (:PAY_ACTIONS.gl_date <
:parameter.payment_max_gl_date) then
--
Form_Utilities.Display_Failure_Message('AP_VOID_DATE_BEF_INVPAY_DATE','GL_DATE',
--
to_char(:parameter.payment_max_gl_date,
--
'DD-MON-YYYY'));
-- end if;
--
-- Fix for 1939138 modified the above IF
statement and wrote the
-- below one
IF :parameter.payment_max_gl_date IS NOT NULL
THEN
if (:PAY_ACTIONS.gl_date <
:parameter.payment_max_gl_date) then
--Introduced calendar_aware parameter in
app_date.date_to_chardate
--procedure for bug#11774150
Form_Utilities.Display_Failure_Message('AP_VOID_DATE_BEF_INVPAY_DATE',
'GL_DATE',
end if;
ELSE
IF :PAY_ACTIONS.gl_date <
:pay_sum_folder.max_payment_gl_date THEN
--Introduced calendar_aware parameter in
app_date.date_to_chardate
--procedure for bug#11774150
Form_Utilities.Display_Failure_Message('AP_VOID_DATE_BEF_INVPAY_DATE',
'GL_DATE',
app_date.date_to_chardate(dateval=>:pay_sum_folder.max_payment_gl_date,calendar_aware=>APP_DATE.calendar_aware_alt));
END IF ;
END IF ;
:PAY_ACTIONS.gl_date <
nvl(:pay_sum_folder.maturity_exchange_date,:pay_sum_folder.future_pay_due_date))
THEN
--Introduced calendar_aware parameter in
app_date.date_to_chardate
--procedure for bug#11774150
Form_Utilities.Display_Failure_Message('AP_VOID_DATE_BEF_MAT_DATE',
'GL_DATE',
app_date.date_to_chardate(dateval=>:pay_sum_folder.max_payment_gl_date,calendar_aware=>APP_DATE.calendar_aware_alt));
END IF ;
-- Check if void date is in an open period
--
AP_UTILITIES_PKG.GET_ONLY_OPEN_GL_DATE(:PAY_ACTIONS.gl_date,
period_name,
gl_date,
:PAY_SUM_FOLDER.org_id);
if (gl_date is null) then
Form_Utilities.Display_Failure_Message('AP_ALL_NOT_OPEN_PERIOD');
else
:PAY_ACTIONS.void_period_name
:= period_name;
--
-- get_only_open_gl_date()
returns the start_date of an open period
-- so if gl_date supplied by
user is in an open period, we should not
-- blindly reset it to the
start of the period
--
if (gl_date >
:PAY_ACTIONS.gl_date) then
:PAY_ACTIONS.gl_date := gl_date;
end if;
end if;
-- For bug 2461087. Added by LGOPALSA
-- Validating against gl_date to check whether
AX is enabled during
-- that period.
-- Bug 4340434 - Removing references to AX for
R12
--
PAY_ACTIONS_VOID.AX_AUTO_OFF_CHK(:PAY_ACTIONS.gl_Date);
else
-- For bug 2461087. Added by LGOPALSA
-- Resetting the list item if AX is not
enabled.
:PAY_ACTIONS.Invoice_Action := 'NONE';
PAY_ACTIONS_VOID.FOR_FUNCTION_SECURITY;
App_Item_Property.Set_Property('PAY_ACTIONS.Invoice_Action',
ALTERABLE, PROPERTY_OFF);
end if;
else
APP_EXCEPTION.INVALID_ARGUMENT('PAY_ACTIONS.GL_DATE',
'EVENT',
event);
end if;
v_account_dist
NUMBER;
if (event in
('PRE-RECORD','INIT')) then
App_Field.Set_Dependent_Field('INIT',
(:PAY_ACTIONS.VOID = 'Y'),
'PAY_ACTIONS.INVOICE_ACTION');
if
(:PAY_ACTIONS.VOID <> 'Y') then
:PAY_ACTIONS.Invoice_Action
:= 'NONE';
PAY_ACTIONS_VOID.FOR_FUNCTION_SECURITY;
App_Item_Property.Set_Property('PAY_ACTIONS.Invoice_Action',
ALTERABLE, PROPERTY_FALSE);
end if;
if (event =
'INIT') then
-- Initialize dependent fields
--
PAY_ACTIONS.HOLD_NAME('INIT');
end if;
elsif (event =
'WHEN-LIST-CHANGED') then
-- Initialize
dependent fields
--
PAY_ACTIONS.HOLD_NAME('INIT');
if
(:PAY_ACTIONS.invoice_action = 'HOLD') then
-- Navigate to Hold window
--
App_Window.Set_Window_Position('HOLD_WINDOW',
'CENTER',
'PAY_ACTIONS_WINDOW');
Go_Item('PAY_ACTIONS.HOLD_NAME');
--Events
Project - 2544746 - The fixes for bugs 1913277 and 2237152
--are being
removed as we will now allow invoice
cancellation
--regardless of
whether accounting has been created.
-- Events
Project 2544746
end if;
else
APP_EXCEPTION.INVALID_ARGUMENT('PAY_ACTIONS.INVOICE_ACTION',
'EVENT',
event);
end if;
if (event = 'INIT') then
:PAY_ACTIONS.hold_name := '';
-- Initialize
dependent fields
--
PAY_ACTIONS.HOLD_REASON('INIT');
elsif (event =
'WHEN-VALIDATE-ITEM') then
-- Initialize
dependent fields
--
PAY_ACTIONS.HOLD_REASON('INIT');
else
APP_EXCEPTION.INVALID_ARGUMENT('PAY_ACTIONS.HOLD_NAME',
'EVENT',
event);
end if;
if (event in
('PRE-RECORD','INIT')) then
App_Field.Set_Dependent_Field('INIT',
'PAY_ACTIONS.HOLD_NAME',
'PAY_ACTIONS.HOLD_REASON');
if (event =
'INIT' and :PAY_ACTIONS.hold_name is not null) then
:PAY_ACTIONS.hold_reason :=
:PAY_ACTIONS.hold_default_reason;
end if;
elsif (event =
'WHEN-VALIDATE-ITEM') then
if
(:PAY_ACTIONS.hold_name is not null and
:PAY_ACTIONS.hold_reason is
null) then
:PAY_ACTIONS.hold_reason :=
:PAY_ACTIONS.hold_default_reason;
end if;
else
APP_EXCEPTION.INVALID_ARGUMENT('PAY_ACTIONS.HOLD_REASON',
'EVENT',
event);
end if;
If
(get_list_element_count('PAY_ACTIONS.INVOICE_ACTION') = 1)
and
:PARAMETER.AP_APXPAWKB_INVOICE_HOLDS = 'Y' then
Fnd_Message.Set_Name('SQLAP',
'AP_ACTION_LIST_HOLD');
l_message_text :=
Fnd_Message.Get;
Add_List_Element('PAY_ACTIONS.INVOICE_ACTION',
2, l_message_text, 'HOLD');
End If;
If
(get_list_element_count('PAY_ACTIONS.INVOICE_ACTION')
= 2) and
:PARAMETER.AP_APXPAWKB_INVOICE_CANCEL = 'Y' then
If :PARAMETER.AP_APXPAWKB_INVOICE_HOLDS = 'Y'
Then
Fnd_Message.Set_Name('SQLAP',
'AP_ACTION_LIST_CANCEL');
l_message_text :=
Fnd_Message.Get;
Add_List_Element('PAY_ACTIONS.INVOICE_ACTION', 3, l_message_text,
'CANCEL');
End if;
elsIf
(get_list_elEment_count('PAY_ACTIONS.INVOICE_ACTION') =
1)
and
:PARAMETER.AP_APXPAWKB_INVOICE_CANCEL = 'Y' then
--Bug3078873
Fnd_Message.Set_Name('SQLAP',
'AP_ACTION_LIST_CANCEL');
l_message_text :=
Fnd_Message.Get;
Add_List_Element('PAY_ACTIONS.INVOICE_ACTION', 2, l_message_text,
'HOLD');
End if;
PACKAGE BODY PAY_ACTIONS_VOID IS
PROCEDURE Void(event Varchar2) IS
BEGIN
ap_invoice_distributions_all aid,
ap_invoice_distributions_all aidp
END;
PROCEDURE Void_Date(event Varchar2) IS
BEGIN
(:PAY_ACTIONS.VOID = 'Y'),
END;
PROCEDURE GL_Date(event Varchar2) IS
BEGIN
(:PAY_ACTIONS.VOID = 'Y'),
app_date.date_to_chardate(dateval=>:parameter.payment_max_gl_date,calendar_aware=>APP_DATE.calendar_aware_alt));
IF (:pay_sum_folder.status_lookup_code = 'NEGOTIABLE'
AND
END;
PROCEDURE Invoice_Action(event Varchar2) IS
BEGIN
END;
PROCEDURE Hold_Name(event Varchar2) IS
BEGIN
END;
PROCEDURE Hold_Reason(event Varchar2) IS
BEGIN
END;
PROCEDURE FOR_FUNCTION_SECURITY IS
l_message_text
fnd_new_messages.message_text%TYPE;
BEGIN
END;
END PAY_ACTIONS_VOID;
PAY_ACTIONS.VOID
-- 刘轶鹤