How To Customize Charges in LCM
How To Customize Charges in LCM
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 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
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:
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.
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;
/
info.
NUMBER,
VARCHAR2(1),
VARCHAR2(1),
VARCHAR2(25),
NUMBER,
VARCHAR2(15),
VARCHAR2(30),
DATE,
NUMBER,
NUMBER,
NUMBER,
VARCHAR2(240),
VARCHAR2(30),
VARCHAR2(240),
VARCHAR2(240),
VARCHAR2(240),
VARCHAR2(240),
VARCHAR2(30),
NUMBER,
NUMBER,
NUMBER,
NUMBER,
NUMBER,
NUMBER,
NUMBER,
NUMBER,
NUMBER,
NUMBER,
NUMBER,
NUMBER,
NUMBER,
VARCHAR2(1),
VARCHAR2(30),
NUMBER
When REFUNDABLE_FLAG is set to N, that means that the charge line will
not be refundable.
When REFUNDABLE_FLAG is set to Y, that means that the charge line will be
refundable.
info.
NUMBER,
VARCHAR2(1),
VARCHAR2(1),
VARCHAR2(25),
NUMBER,
VARCHAR2(15),
VARCHAR2(30),
DATE,
NUMBER,
NUMBER,
NUMBER,
VARCHAR2(240),
VARCHAR2(30),
VARCHAR2(240),
VARCHAR2(240),
VARCHAR2(240),
VARCHAR2(240),
VARCHAR2(30),
NUMBER,
NUMBER,
NUMBER,
NUMBER,
NUMBER,
NUMBER,
NUMBER,
NUMBER,
NUMBER,
NUMBER,
NUMBER,
NUMBER,
NUMBER,
VARCHAR2(1),
VARCHAR2(30),
NUMBER,
VARCHAR2(1)
When ASSOC_ONLY_FLAG is set to N (or NULL), that means that the record
contains both Charge and Association data; hence, a charge line record will be
created along with its association to an LCM component.
CHARGE_LINE_TYP
E_CODE
CHARGE_AM
T
TO_PAREN
T_TABLE_N
AME
TO_PAREN
T_TABLE_I
D
ASSOC_ON
LY_FLAG
123
FREIGHT
$100
INL_SHIP_LI
NES
345
INL_SHIP_LI
NES
346
INL_SHIP_LI
NES
456
INL_SHIP_LI
NES
457
234
INSURANCE
$50
Example on how the LCM Generate Charges code would create the charges from those
records: