1: PACKAGE BODY Bom_Rollup_Pub AS
2: /* $Header: BOMRLUPB.pls 120.7 2007/07/02 05:31:42 dikrishn ship $ */
3: /***************************************************************************
4: --
5: -- Copyright (c) 1996 Oracle Corporation, Redwood Shores, CA, USA
10: -- BOMRLUPB.pls
11: --
12: -- DESCRIPTION
13: --
14: -- Body of package Bom_Rollup_Pub
15: --
16: -- NOTES
17: -- Rollup will happen on the objects within a BOM. Every object would have a
18: -- Attribute Map, with every attribute identifying the compute function. If the
34: ***************************************************************************/
35:
36:
37: /* Package Globals */
38: pG_Attribute_Map Bom_Rollup_Pub.Attribute_Map;
39: pG_Rollup_Action_Map Bom_Rollup_Pub.Rollup_Action_Map;
40:
41: pG_Item_Org_Tbl Bom_Rollup_Pub.Item_Org_Tbl;
42:
35:
36:
37: /* Package Globals */
38: pG_Attribute_Map Bom_Rollup_Pub.Attribute_Map;
39: pG_Rollup_Action_Map Bom_Rollup_Pub.Rollup_Action_Map;
40:
41: pG_Item_Org_Tbl Bom_Rollup_Pub.Item_Org_Tbl;
42:
43: /****************** Local procedures Section ******************/
37: /* Package Globals */
38: pG_Attribute_Map Bom_Rollup_Pub.Attribute_Map;
39: pG_Rollup_Action_Map Bom_Rollup_Pub.Rollup_Action_Map;
40:
41: pG_Item_Org_Tbl Bom_Rollup_Pub.Item_Org_Tbl;
42:
43: /****************** Local procedures Section ******************/
44:
45:
553: PROCEDURE Handle_Attribute_Updates
554: ( p_Header_Item_Id IN NUMBER
555: , p_Organization_Id IN NUMBER
556: , p_Header_Attrs_Flag IN VARCHAR2
557: , p_action_map IN Bom_Rollup_Pub.Rollup_Action_Map
558: , x_return_status OUT NOCOPY VARCHAR2
559: , x_msg_count OUT NOCOPY NUMBER
560: , x_msg_data OUT NOCOPY VARCHAR2
561: )
621: Get_Current_Organization_Id.
622: */
623: PROCEDURE Handle_Rollup_Actions
624: ( p_rollup_id IN NUMBER
625: , p_action_map IN Bom_Rollup_Pub.Rollup_Action_Map
626: , p_item_id IN NUMBER
627: , p_organization_id IN NUMBER
628: , p_parent_item_id IN NUMBER := NULL -- passed in if add/delete comp case
629: , p_component_item_id IN NUMBER := NULL -- passed in if add/delete comp case
643: WHERE
644: group_id = p_rollup_id;
645:
646: l_depth number;
647: l_Component_Attrs Bom_Rollup_Pub.Attribute_Map;
648:
649: CURSOR c_assy_csr(
650: p_level NUMBER
651: , p_rollup_id NUMBER
1228: -- write the data for that sub-tree node.
1229: --
1230:
1231: -- For the TOP Item also process the attributes only maintained at the top level.
1232: IF l_assy_rec.inventory_item_id = Bom_Rollup_Pub.Get_top_Item_Id
1233: THEN
1234: Handle_Attribute_Updates( p_Header_Item_Id => l_assy_rec.inventory_item_id
1235: , p_organization_id => p_organization_id
1236: , p_header_attrs_flag => 'N'
1279: ( p_item_id IN NUMBER
1280: , p_organization_id IN NUMBER
1281: , p_parent_item_id IN NUMBER
1282: , p_structure_type_id IN NUMBER
1283: , p_action_map IN Bom_Rollup_Pub.Rollup_Action_Map := G_EMPTY_ACTION_MAP
1284: , p_validate IN VARCHAR2
1285: , p_halt_on_error IN VARCHAR2
1286: , x_error_message OUT NOCOPY VARCHAR2
1287: )
1334: l_rollup_item_id number;
1335: l_return_status VARCHAR2(1);
1336: l_msg_count NUMBER;
1337: BEGIN
1338: if (Bom_Rollup_Pub.g_attr_diffs is null) then
1339: --Initialize Error Hanlder
1340: Initialize_ErrorDebug_Handler;
1341: end if;
1342:
1559: PROCEDURE Perform_Rollup_Private
1560: ( p_item_id IN NUMBER
1561: , p_organization_id IN NUMBER
1562: , p_alternate_bom_code IN VARCHAR2
1563: , p_action_map IN Bom_Rollup_Pub.Rollup_Action_Map := G_EMPTY_ACTION_MAP
1564: , p_validate IN VARCHAR2
1565: , p_halt_on_error IN VARCHAR2
1566: , x_error_message OUT NOCOPY VARCHAR2
1567: )
1578: l_Sequence NUMBER;
1579: l_return_status VARCHAR2(1);
1580: l_msg_count NUMBER;
1581: BEGIN
1582: if (Bom_Rollup_Pub.g_attr_diffs is null) then
1583: --Initialize Error Hanlder
1584: Initialize_ErrorDebug_Handler;
1585: end if;
1586:
1704: PROCEDURE Perform_Rollup
1705: ( p_item_id IN NUMBER
1706: , p_organization_id IN NUMBER
1707: , p_alternate_bom_code IN VARCHAR2
1708: , p_action_map IN Bom_Rollup_Pub.Rollup_Action_Map DEFAULT G_EMPTY_ACTION_MAP
1709: , p_validate IN VARCHAR2 /*DEFAULT 'N'*/
1710: , p_halt_on_error IN VARCHAR2 /*DEFAULT 'N'*/
1711: , x_error_message OUT NOCOPY VARCHAR2
1712: )
1740: ( p_item_id IN NUMBER
1741: , p_organization_id IN NUMBER
1742: , p_parent_item_id IN NUMBER := NULL
1743: , p_structure_type_id IN NUMBER
1744: , p_action_map IN Bom_Rollup_Pub.Rollup_Action_Map := G_EMPTY_ACTION_MAP
1745: , p_validate IN VARCHAR2 /*DEFAULT 'N'*/
1746: , p_halt_on_error IN VARCHAR2 /*DEFAULT 'N'*/
1747: , x_error_message OUT NOCOPY VARCHAR2
1748: )
1776: ( p_item_id IN NUMBER
1777: , p_organization_id IN NUMBER
1778: , p_parent_item_id IN NUMBER := NULL
1779: , p_structure_type_name IN VARCHAR2
1780: , p_action_map IN Bom_Rollup_Pub.Rollup_Action_Map := G_EMPTY_ACTION_MAP
1781: , p_validate IN VARCHAR2 /*DEFAULT 'N'*/
1782: , p_halt_on_error IN VARCHAR2 /*DEFAULT 'N'*/
1783: , x_error_message OUT NOCOPY VARCHAR2
1784: )
1836: ( p_Object_Name IN VARCHAR2
1837: , p_Rollup_Action IN VARCHAR2
1838: , p_DML_Function IN VARCHAR2
1839: , p_DML_Delayed_Write IN VARCHAR2
1840: , x_Rollup_Action_Map IN OUT NOCOPY Bom_Rollup_Pub.Rollup_Action_Map
1841: )
1842: IS
1843: l_map_index NUMBER := x_Rollup_Action_Map.COUNT + 1;
1844: BEGIN
1870: *
1871: ************************************************************************/
1872: Function Get_Item_Rollup_Map
1873: ( p_Object_Name IN VARCHAR2 )
1874: RETURN Bom_Rollup_Pub.Rollup_Action_Map
1875: IS
1876: BEGIN
1877: return G_EMPTY_ACTION_MAP;
1878: -- not implemented yet.
1960: )
1961: RETURN VARCHAR2
1962: IS
1963: BEGIN
1964: FOR cmp_index IN Bom_Rollup_Pub.l_component_seq_attrs_tbl.FIRST..Bom_Rollup_Pub.l_component_seq_attrs_tbl.LAST
1965: LOOP
1966: IF Bom_Rollup_Pub.l_component_seq_attrs_tbl.EXISTS(cmp_index) AND
1967: Bom_Rollup_Pub.l_component_seq_attrs_tbl(cmp_index).component_sequence_id = p_component_sequence_id AND
1968: Bom_Rollup_Pub.l_component_seq_attrs_tbl(cmp_index).attribute_name = p_attribute_name
1962: IS
1963: BEGIN
1964: FOR cmp_index IN Bom_Rollup_Pub.l_component_seq_attrs_tbl.FIRST..Bom_Rollup_Pub.l_component_seq_attrs_tbl.LAST
1965: LOOP
1966: IF Bom_Rollup_Pub.l_component_seq_attrs_tbl.EXISTS(cmp_index) AND
1967: Bom_Rollup_Pub.l_component_seq_attrs_tbl(cmp_index).component_sequence_id = p_component_sequence_id AND
1968: Bom_Rollup_Pub.l_component_seq_attrs_tbl(cmp_index).attribute_name = p_attribute_name
1969: THEN
1970: return Bom_Rollup_Pub.l_component_seq_attrs_tbl(cmp_index).attribute_value;
1963: BEGIN
1964: FOR cmp_index IN Bom_Rollup_Pub.l_component_seq_attrs_tbl.FIRST..Bom_Rollup_Pub.l_component_seq_attrs_tbl.LAST
1965: LOOP
1966: IF Bom_Rollup_Pub.l_component_seq_attrs_tbl.EXISTS(cmp_index) AND
1967: Bom_Rollup_Pub.l_component_seq_attrs_tbl(cmp_index).component_sequence_id = p_component_sequence_id AND
1968: Bom_Rollup_Pub.l_component_seq_attrs_tbl(cmp_index).attribute_name = p_attribute_name
1969: THEN
1970: return Bom_Rollup_Pub.l_component_seq_attrs_tbl(cmp_index).attribute_value;
1971: END IF;
1964: FOR cmp_index IN Bom_Rollup_Pub.l_component_seq_attrs_tbl.FIRST..Bom_Rollup_Pub.l_component_seq_attrs_tbl.LAST
1965: LOOP
1966: IF Bom_Rollup_Pub.l_component_seq_attrs_tbl.EXISTS(cmp_index) AND
1967: Bom_Rollup_Pub.l_component_seq_attrs_tbl(cmp_index).component_sequence_id = p_component_sequence_id AND
1968: Bom_Rollup_Pub.l_component_seq_attrs_tbl(cmp_index).attribute_name = p_attribute_name
1969: THEN
1970: return Bom_Rollup_Pub.l_component_seq_attrs_tbl(cmp_index).attribute_value;
1971: END IF;
1972: END LOOP;
1966: IF Bom_Rollup_Pub.l_component_seq_attrs_tbl.EXISTS(cmp_index) AND
1967: Bom_Rollup_Pub.l_component_seq_attrs_tbl(cmp_index).component_sequence_id = p_component_sequence_id AND
1968: Bom_Rollup_Pub.l_component_seq_attrs_tbl(cmp_index).attribute_name = p_attribute_name
1969: THEN
1970: return Bom_Rollup_Pub.l_component_seq_attrs_tbl(cmp_index).attribute_value;
1971: END IF;
1972: END LOOP;
1973:
1974: END Get_Attribute_Value;
1988: )
1989: RETURN VARCHAR2
1990: IS
1991: BEGIN
1992: IF Bom_Rollup_Pub.l_Top_Item_Attrs_Map.COUNT = 0
1993: THEN
1994: RETURN NULL;
1995: END IF;
1996:
1993: THEN
1994: RETURN NULL;
1995: END IF;
1996:
1997: FOR cmp_index IN Bom_Rollup_Pub.l_Top_Item_Attrs_Map.FIRST..Bom_Rollup_Pub.l_Top_Item_Attrs_Map.LAST
1998: LOOP
1999: IF Bom_Rollup_Pub.l_Top_Item_Attrs_Map.EXISTS(cmp_index) AND
2000: Bom_Rollup_Pub.l_Top_Item_Attrs_Map(cmp_index).attribute_name = p_attribute_name
2001: THEN
1995: END IF;
1996:
1997: FOR cmp_index IN Bom_Rollup_Pub.l_Top_Item_Attrs_Map.FIRST..Bom_Rollup_Pub.l_Top_Item_Attrs_Map.LAST
1998: LOOP
1999: IF Bom_Rollup_Pub.l_Top_Item_Attrs_Map.EXISTS(cmp_index) AND
2000: Bom_Rollup_Pub.l_Top_Item_Attrs_Map(cmp_index).attribute_name = p_attribute_name
2001: THEN
2002: return Bom_Rollup_Pub.l_Top_Item_Attrs_Map(cmp_index).attribute_value;
2003: END IF;
1996:
1997: FOR cmp_index IN Bom_Rollup_Pub.l_Top_Item_Attrs_Map.FIRST..Bom_Rollup_Pub.l_Top_Item_Attrs_Map.LAST
1998: LOOP
1999: IF Bom_Rollup_Pub.l_Top_Item_Attrs_Map.EXISTS(cmp_index) AND
2000: Bom_Rollup_Pub.l_Top_Item_Attrs_Map(cmp_index).attribute_name = p_attribute_name
2001: THEN
2002: return Bom_Rollup_Pub.l_Top_Item_Attrs_Map(cmp_index).attribute_value;
2003: END IF;
2004: END LOOP;
1998: LOOP
1999: IF Bom_Rollup_Pub.l_Top_Item_Attrs_Map.EXISTS(cmp_index) AND
2000: Bom_Rollup_Pub.l_Top_Item_Attrs_Map(cmp_index).attribute_name = p_attribute_name
2001: THEN
2002: return Bom_Rollup_Pub.l_Top_Item_Attrs_Map(cmp_index).attribute_value;
2003: END IF;
2004: END LOOP;
2005:
2006: -- else return NULL
2026: , p_data_level_name_value_pairs IN EGO_COL_NAME_VALUE_PAIR_ARRAY
2027: , p_attr_diffs IN EGO_USER_ATTR_DIFF_TABLE
2028: , p_transaction_type IN VARCHAR2
2029: , p_attr_group_id IN NUMBER
2030: , p_action_map IN Bom_Rollup_Pub.Rollup_Action_Map DEFAULT G_EMPTY_ACTION_MAP
2031: , x_error_message OUT NOCOPY VARCHAR2
2032: ) is
2033: begin
2034:
2038: p_bo_identifier => G_BO_IDENTIFIER
2039: , p_message => 'INSIDE Multi-Row Item Call');
2040:
2041: IF (p_attr_diffs IS NOT NULL AND p_attr_diffs.COUNT > 0) THEN -- is the object null
2042: Bom_Rollup_Pub.g_pk_column_name_value_pairs := p_pk_column_name_value_pairs;
2043: Bom_Rollup_Pub.g_class_code_name_value_pairs := p_class_code_name_value_pairs;
2044: Bom_Rollup_Pub.g_data_level_name_value_pairs := p_data_level_name_value_pairs;
2045: Bom_Rollup_Pub.g_attr_diffs := p_attr_diffs;
2046: Bom_Rollup_Pub.g_transaction_type := p_transaction_type;
2039: , p_message => 'INSIDE Multi-Row Item Call');
2040:
2041: IF (p_attr_diffs IS NOT NULL AND p_attr_diffs.COUNT > 0) THEN -- is the object null
2042: Bom_Rollup_Pub.g_pk_column_name_value_pairs := p_pk_column_name_value_pairs;
2043: Bom_Rollup_Pub.g_class_code_name_value_pairs := p_class_code_name_value_pairs;
2044: Bom_Rollup_Pub.g_data_level_name_value_pairs := p_data_level_name_value_pairs;
2045: Bom_Rollup_Pub.g_attr_diffs := p_attr_diffs;
2046: Bom_Rollup_Pub.g_transaction_type := p_transaction_type;
2047: Bom_Rollup_Pub.g_attr_group_id := p_attr_group_id;
2040:
2041: IF (p_attr_diffs IS NOT NULL AND p_attr_diffs.COUNT > 0) THEN -- is the object null
2042: Bom_Rollup_Pub.g_pk_column_name_value_pairs := p_pk_column_name_value_pairs;
2043: Bom_Rollup_Pub.g_class_code_name_value_pairs := p_class_code_name_value_pairs;
2044: Bom_Rollup_Pub.g_data_level_name_value_pairs := p_data_level_name_value_pairs;
2045: Bom_Rollup_Pub.g_attr_diffs := p_attr_diffs;
2046: Bom_Rollup_Pub.g_transaction_type := p_transaction_type;
2047: Bom_Rollup_Pub.g_attr_group_id := p_attr_group_id;
2048: WRITE_DEBUG_LOG (
2041: IF (p_attr_diffs IS NOT NULL AND p_attr_diffs.COUNT > 0) THEN -- is the object null
2042: Bom_Rollup_Pub.g_pk_column_name_value_pairs := p_pk_column_name_value_pairs;
2043: Bom_Rollup_Pub.g_class_code_name_value_pairs := p_class_code_name_value_pairs;
2044: Bom_Rollup_Pub.g_data_level_name_value_pairs := p_data_level_name_value_pairs;
2045: Bom_Rollup_Pub.g_attr_diffs := p_attr_diffs;
2046: Bom_Rollup_Pub.g_transaction_type := p_transaction_type;
2047: Bom_Rollup_Pub.g_attr_group_id := p_attr_group_id;
2048: WRITE_DEBUG_LOG (
2049: p_bo_identifier => G_BO_IDENTIFIER
2042: Bom_Rollup_Pub.g_pk_column_name_value_pairs := p_pk_column_name_value_pairs;
2043: Bom_Rollup_Pub.g_class_code_name_value_pairs := p_class_code_name_value_pairs;
2044: Bom_Rollup_Pub.g_data_level_name_value_pairs := p_data_level_name_value_pairs;
2045: Bom_Rollup_Pub.g_attr_diffs := p_attr_diffs;
2046: Bom_Rollup_Pub.g_transaction_type := p_transaction_type;
2047: Bom_Rollup_Pub.g_attr_group_id := p_attr_group_id;
2048: WRITE_DEBUG_LOG (
2049: p_bo_identifier => G_BO_IDENTIFIER
2050: , p_message => 'INSIDE Multi-Row Item Call with txn type' || p_transaction_type);
2043: Bom_Rollup_Pub.g_class_code_name_value_pairs := p_class_code_name_value_pairs;
2044: Bom_Rollup_Pub.g_data_level_name_value_pairs := p_data_level_name_value_pairs;
2045: Bom_Rollup_Pub.g_attr_diffs := p_attr_diffs;
2046: Bom_Rollup_Pub.g_transaction_type := p_transaction_type;
2047: Bom_Rollup_Pub.g_attr_group_id := p_attr_group_id;
2048: WRITE_DEBUG_LOG (
2049: p_bo_identifier => G_BO_IDENTIFIER
2050: , p_message => 'INSIDE Multi-Row Item Call with txn type' || p_transaction_type);
2051: END IF;
2203: );
2204: END;
2205:
2206:
2207: END Bom_Rollup_Pub;