Sei sulla pagina 1di 8

HOW TO CUSTOMIZE CHARGES GENERATION IN LCM

IMPORTANT: Following patches should be applied before following the


instructions below:
1. 10133605:R12.INL.B - Upgrade LCM hooks
2. 10100951:R12.INL.B - Charges from Custom Hook
'Inl_Custom_Pub.Get_Charges' are being ignored when custom hook returns
x_override_default_processing parameter value as FALSE
Oracle Landed Cost Management has an out-of-the-box integration with Advanced
Pricing for generating the charges that will be used in estimated landed costs, for both
flows: Pre-Receiving in LCM and LCM as a service.
Through that integration, charges may be generated for an LCM Shipment, based on the
modifiers of type Freight and Special charge List, defined in Advanced Pricing, and
associated to either its Line Groups or its Shipment Lines.
Also, from 12.1.3 EBS release onwards, LCM may get charges from simulations
previously created.
Charges generation takes place in LCM as follows, depending on the flow:

Pre-Receiving flow: the user creates the LCM Shipment through the LCM
Shipments Workbench UI. When the user chooses the Generate Charges option
from the Action poplist, the api INL_CHARGE_PVT.Generate_Charges is
executed.

LCM as a Service flow: the user submits the Shipments Interface Import
concurrent program, to import the Receipts done in Receiving into LCM
Shipments. This program also provides the landed cost calculation for those LCM
Shipments, but before that, it also calls the api
INL_CHARGE_PVT.Generate_Charges.

The INL_CHARGE_PVT.Generate_Charges api, called in both flows, carries out the


following logic:

The portion in red corresponds to the logic for getting charges from simulated shipments,
implemented in 12.1.3.
As part of INL_CHARGE_PVT.Generate_Charges code flow, The
INL_CUSTOM_PUB.Get_Charges api is called first. By default, the api returns the
parameter x_override_default_processing as FALSE.
If the user wants to customize the logic for getting charges, he/she should put it in a way
that the results are returned as the Charge Lines PL/SQL table output parameter.
Structure of the input parameters:

Shipment Header:
p_ship_header_rec IN inl_ship_headers%ROWTYPE
SHIP_HEADER_ID
SHIP_NUM
SHIP_DATE
SHIP_TYPE_ID
SHIP_STATUS_CODE
PENDING_MATCHING_FLAG
LEGAL_ENTITY_ID
ORGANIZATION_ID
LOCATION_ID
ORG_ID
TAXATION_COUNTRY
DOCUMENT_SUB_TYPE
SHIP_HEADER_INT_ID
INTERFACE_SOURCE_CODE
INTERFACE_SOURCE_TABLE
INTERFACE_SOURCE_LINE_ID
ADJUSTMENT_NUM
CREATED_BY
CREATION_DATE
LAST_UPDATED_BY
LAST_UPDATE_DATE
LAST_UPDATE_LOGIN
PROGRAM_ID
PROGRAM_UPDATE_DATE
PROGRAM_APPLICATION_ID
REQUEST_ID
ATTRIBUTE_CATEGORY
ATTRIBUTE1
ATTRIBUTE2
ATTRIBUTE3
ATTRIBUTE4
ATTRIBUTE5
ATTRIBUTE6
ATTRIBUTE7
ATTRIBUTE8
ATTRIBUTE9
ATTRIBUTE10
ATTRIBUTE11
ATTRIBUTE12
ATTRIBUTE13
ATTRIBUTE14
ATTRIBUTE15
RCV_ENABLED_FLAG

Line Group:

NUMBER
VARCHAR2(25)
DATE
NUMBER
VARCHAR2(30)
VARCHAR2(1)
NUMBER
NUMBER
NUMBER
NUMBER
VARCHAR2(30)
VARCHAR2(150)
NUMBER
VARCHAR2(25)
VARCHAR2(30)
NUMBER
NUMBER
NUMBER
DATE
NUMBER
DATE
NUMBER
NUMBER
DATE
NUMBER
NUMBER
VARCHAR2(30)
VARCHAR2(150)
VARCHAR2(150)
VARCHAR2(150)
VARCHAR2(150)
VARCHAR2(150)
VARCHAR2(150)
VARCHAR2(150)
VARCHAR2(150)
VARCHAR2(150)
VARCHAR2(150)
VARCHAR2(150)
VARCHAR2(150)
VARCHAR2(150)
VARCHAR2(150)
VARCHAR2(150)
VARCHAR2(1)

p_ship_ln_group_tbl IN inl_charge_pvt.ship_ln_group_tbl_tp
SHIP_LINE_GROUP_ID
SHIP_LINE_GROUP_REFERENCE
SHIP_HEADER_ID
SHIP_LINE_GROUP_NUM
SRC_TYPE_CODE
PARTY_ID
PARTY_SITE_ID
SOURCE_ORGANIZATION_ID
SHIP_LINE_INT_ID
INTERFACE_SOURCE_TABLE
INTERFACE_SOURCE_LINE_ID
CREATED_BY
CREATION_DATE
LAST_UPDATED_BY
LAST_UPDATE_DATE
LAST_UPDATE_LOGIN
PROGRAM_ID
PROGRAM_UPDATE_DATE
PROGRAM_APPLICATION_ID
REQUEST_ID
ATTRIBUTE_CATEGORY
ATTRIBUTE1
ATTRIBUTE2
ATTRIBUTE3
ATTRIBUTE4
ATTRIBUTE5
ATTRIBUTE6
ATTRIBUTE7
ATTRIBUTE8
ATTRIBUTE9
ATTRIBUTE10
ATTRIBUTE11
ATTRIBUTE12
ATTRIBUTE13
ATTRIBUTE14
ATTRIBUTE15

NUMBER
VARCHAR2(30)
NUMBER
NUMBER
VARCHAR2(30)
NUMBER
NUMBER
NUMBER
NUMBER
VARCHAR2(30)
NUMBER
NUMBER
DATE
NUMBER
DATE
NUMBER
NUMBER
DATE
NUMBER
NUMBER
VARCHAR2(30)
VARCHAR2(150)
VARCHAR2(150)
VARCHAR2(150)
VARCHAR2(150)
VARCHAR2(150)
VARCHAR2(150)
VARCHAR2(150)
VARCHAR2(150)
VARCHAR2(150)
VARCHAR2(150)
VARCHAR2(150)
VARCHAR2(150)
VARCHAR2(150)
VARCHAR2(150)
VARCHAR2(150)

Shipment Lines:
p_ship_ln_tbl_tp IN inl_charge_pvt.ship_ln_tbl_tp
SHIP_HEADER_ID
SHIP_LINE_GROUP_ID
SHIP_LINE_ID
SHIP_LINE_NUM
SHIP_LINE_TYPE_ID
SHIP_LINE_SRC_TYPE_CODE
SHIP_LINE_SOURCE_ID
PARENT_SHIP_LINE_ID
ADJUSTMENT_NUM
MATCH_ID
CURRENCY_CODE
CURRENCY_CONVERSION_TYPE
CURRENCY_CONVERSION_DATE
CURRENCY_CONVERSION_RATE
INVENTORY_ITEM_ID
TXN_QTY
TXN_UOM_CODE
TXN_UNIT_PRICE
PRIMARY_QTY
PRIMARY_UOM_CODE
PRIMARY_UNIT_PRICE
FC_PRIMARY_UNIT_PRICE
SECONDARY_QTY
SECONDARY_UOM_CODE

NUMBER
NUMBER
NUMBER
NUMBER
NUMBER
VARCHAR2(30)
NUMBER
NUMBER
NUMBER
NUMBER
VARCHAR2(15)
VARCHAR2(30)
DATE
NUMBER
NUMBER
NUMBER
VARCHAR2(3)
NUMBER
NUMBER
VARCHAR2(3)
NUMBER
NUMBER
NUMBER
VARCHAR2(3)

SECONDARY_UNIT_PRICE
NRQ_ZERO_EXCEPTION_FLAG
LANDED_COST_FLAG
ALLOCATION_ENABLED_FLAG
TRX_BUSINESS_CATEGORY
INTENDED_USE
PRODUCT_FISCAL_CLASS
PRODUCT_CATEGORY
PRODUCT_TYPE
USER_DEF_FISCAL_CLASS
TAX_CLASSIFICATION_CODE
ASSESSABLE_VALUE
TAX_ALREADY_CALCULATED_FLAG
SHIP_FROM_PARTY_ID
SHIP_FROM_PARTY_SITE_ID
SHIP_TO_ORGANIZATION_ID
SHIP_TO_LOCATION_ID
BILL_FROM_PARTY_ID
BILL_FROM_PARTY_SITE_ID
BILL_TO_ORGANIZATION_ID
BILL_TO_LOCATION_ID
POA_PARTY_ID
POA_PARTY_SITE_ID
POO_ORGANIZATION_ID
POO_LOCATION_ID
ORG_ID
ATTRIBUTE_CATEGORY
ATTRIBUTE1
ATTRIBUTE2
ATTRIBUTE3
ATTRIBUTE4
ATTRIBUTE5
ATTRIBUTE6
ATTRIBUTE7
ATTRIBUTE8
ATTRIBUTE9
ATTRIBUTE10
ATTRIBUTE11
ATTRIBUTE12
ATTRIBUTE13
ATTRIBUTE14
ATTRIBUTE15

Structure of Charge Lines output parameter:


TYPE charge_ln_rec IS RECORD(
charge_line_type_id
NUMBER,
landed_cost_flag
VARCHAR2(1),
update_allowed
VARCHAR2(1),
source_code
VARCHAR2(25),
charge_amt
NUMBER,
currency_code
VARCHAR2(15),
currency_conversion_type VARCHAR2(30),
currency_conversion_date DATE,
currency_conversion_rate NUMBER,
party_id
NUMBER,
party_site_id
NUMBER,
trx_business_category
VARCHAR2(240),
intended_use
VARCHAR2(30),
product_fiscal_class
VARCHAR2(240),
product_category
VARCHAR2(240),
product_type
VARCHAR2(240),
user_def_fiscal_class
VARCHAR2(240),
tax_classification_code
VARCHAR2(30),
assessable_value
NUMBER,
ship_from_party_id
NUMBER,
ship_from_party_site_id
NUMBER,
ship_to_organization_id
NUMBER,
ship_to_location_id
NUMBER,

NUMBER
VARCHAR2(1)
VARCHAR2(1)
VARCHAR2(1)
VARCHAR2(240)
VARCHAR2(30)
VARCHAR2(240)
VARCHAR2(240)
VARCHAR2(240)
VARCHAR2(240)
VARCHAR2(30)
NUMBER
VARCHAR2(1)
NUMBER
NUMBER
NUMBER
NUMBER
NUMBER
NUMBER
NUMBER
NUMBER
NUMBER
NUMBER
NUMBER
NUMBER
NUMBER
VARCHAR2(30)
VARCHAR2(150)
VARCHAR2(150)
VARCHAR2(150)
VARCHAR2(150)
VARCHAR2(150)
VARCHAR2(150)
VARCHAR2(150)
VARCHAR2(150)
VARCHAR2(150)
VARCHAR2(150)
VARCHAR2(150)
VARCHAR2(150)
VARCHAR2(150)
VARCHAR2(150)
VARCHAR2(150)

bill_from_party_id
bill_from_party_site_id
bill_to_organization_id
bill_to_location_id
poa_party_id
poa_party_site_id
poo_organization_id
poo_location_id
-- Association attributes
to_parent_table_name
to_parent_table_id

NUMBER,
NUMBER,
NUMBER,
NUMBER,
NUMBER,
NUMBER,
NUMBER,
NUMBER,
VARCHAR2(30),
NUMBER);

Then the logic flow checks for the x_override_default_processing output parameter:

If x_override_default_processing parameter value is TRUE, charges will be generated


only based on the customized code. Standard code, which gets charges from
Advanced Pricing or from Simulations, will not be taken into consideration.

If x_override_default_processing parameter value is FALSE, charges will be


generated based on both customized code and standard code.

After that, records will be inserted into database tables INL_CHARGE_LINES and
INL_ASSOCIATIONS, based on whatever is stored into the Charge Lines PL/SQL table.

EXAMPLE OF CUSTOMIZED CHARGES HOOK


create or replace
PACKAGE BODY INL_CUSTOM_PUB AS

PROCEDURE Get_Charges(
p_ship_header_rec
IN inl_ship_headers%ROWTYPE,
p_ship_ln_group_tbl
IN inl_charge_pvt.ship_ln_group_tbl_tp,
p_ship_ln_tbl_tp
IN inl_charge_pvt.ship_ln_tbl_tp,
x_charge_ln_tbl
OUT NOCOPY inl_charge_pvt.charge_ln_tbl,
x_override_default_processing OUT NOCOPY BOOLEAN,
x_return_status
OUT NOCOPY VARCHAR2 IS
BEGIN
-x_override_default_processing := FALSE;
-RETURN;
INL_CUSTOM_SAMPLE.Get_Charges(
p_ship_header_rec
p_ship_ln_group_tbl
p_ship_ln_tbl
x_charge_ln_tbl
x_return_status

=>
=>
=>
=>
=>

x_override_default_processing := TRUE;
RETURN;
END Get_Charges;

END INL_CUSTOM_PUB;

p_ship_header_rec,
p_ship_ln_group_tbl,
p_ship_ln_tbl_tp,
x_charge_ln_tbl,
x_return_status);

CREATE OR REPLACE
PACKAGE INL_CUSTOM_SAMPLE
IS
PROCEDURE Get_Charges(
p_ship_header_rec
p_ship_ln_group_tbl
p_ship_ln_tbl
x_charge_ln_tbl
x_return_status

IN inl_ship_headers%ROWTYPE,
IN inl_charge_pvt.ship_ln_group_tbl_tp,
IN inl_charge_pvt.ship_ln_tbl_tp,
OUT NOCOPY inl_charge_pvt.charge_ln_tbl,
OUT NOCOPY VARCHAR2);

END INL_CUSTOM_SAMPLE;
/
CREATE OR REPLACE
PACKAGE BODY INL_CUSTOM_SAMPLE AS
-- This custom code is for creating a $100 charge to be prorated into all Shipment Lines of the first Line Group passed as input
parameter.
PROCEDURE Get_Charges(
p_ship_header_rec
IN inl_ship_headers%ROWTYPE,
p_ship_ln_group_tbl
IN inl_charge_pvt.ship_ln_group_tbl_tp,
p_ship_ln_tbl
IN inl_charge_pvt.ship_ln_tbl_tp,
x_charge_ln_tbl
OUT NOCOPY inl_charge_pvt.charge_ln_tbl,
x_return_status
OUT NOCOPY VARCHAR2)
IS
i number;
l_debug_info varchar2(3000);
charge_ln inl_charge_pvt.charge_ln_rec;
BEGIN
x_charge_ln_tbl(1).charge_line_type_id
:= 63;
x_charge_ln_tbl(1).landed_cost_flag
:= 'Y';
x_charge_ln_tbl(1).update_allowed
:= 'N';
x_charge_ln_tbl(1).source_code
:= 'OI';
x_charge_ln_tbl(1).charge_amt
:= 100;
x_charge_ln_tbl(1).currency_code
:= 'USD';
-- Association attributes
x_charge_ln_tbl(1).to_parent_table_name
:= 'INL_SHIP_LINE_GROUPS';
x_charge_ln_tbl(1).to_parent_table_id
:= p_ship_ln_group_tbl(1).ship_line_group_id;
END Get_Charges;
END INL_CUSTOM_SAMPLE;
/

Potrebbero piacerti anche