DBA Data[Home] [Help]

PACKAGE BODY: APPS.CZ_PRC_CALLBACK_UTIL

Source


1 PACKAGE BODY cz_prc_callback_util AS
2 /* $Header: czprcbub.pls 115.16 2004/03/02 15:42:31 askhacha ship $ */
3 
4   COMP_CODE_DELIMITER CONSTANT VARCHAR2(1) := '-';
5 
6   -- Value used for parent_config_item_id when root is a BOM model (hack for iStore).
7   NO_PARENT_VALUE CONSTANT INTEGER := -1;
8 
9   PROCEDURE insert_pricing_table (p_pricing_tbl IN system.cz_price_tbl_type)
10   IS
11     PRAGMA AUTONOMOUS_TRANSACTION;
12 
13   BEGIN
14 
15     FOR i IN 1..p_pricing_tbl.COUNT LOOP
16       INSERT INTO CZ_PRICING_STRUCTURES (configurator_session_key,
17                                          seq_nbr,
18                                          ps_node_id,
19                                          item_key,
20                                          item_key_type,
21              	                         quantity,
22                                          uom_code,
23                                          config_item_id,
24                                          parent_config_item_id)
25       VALUES (p_pricing_tbl(i).config_session_key,
26               p_pricing_tbl(i).seq_nbr,
27               p_pricing_tbl(i).ps_node_id,
28 	      nvl(p_pricing_tbl(i).item_key, to_char(p_pricing_tbl(i).ps_node_id)),
29               decode(p_pricing_tbl(i).item_key, NULL, G_ITEM_KEY_PS_NODE,
30                      G_ITEM_KEY_BOM_NODE),
31 	      p_pricing_tbl(i).quantity,
32               p_pricing_tbl(i).uom_code,
33               p_pricing_tbl(i).config_item_id,
34               decode(p_pricing_tbl(i).parent_config_item_id, NO_PARENT_VALUE, NULL,
35                      p_pricing_tbl(i).parent_config_item_id));
36     END LOOP;
37     COMMIT;
38   END insert_pricing_table;
39 
40   PROCEDURE insert_pricing_rec (p_config_session_key IN VARCHAR2,
41                                 p_seq_nbr IN NUMBER,
42                                 p_ps_node_id IN NUMBER,
43                                 p_item_key IN VARCHAR2,
44                                 p_quantity IN NUMBER,
45                                 p_uom_code IN VARCHAR2,
46                                 p_config_item_id IN NUMBER,
47                                 p_parent_config_item_id IN NUMBER) IS
48     PRAGMA AUTONOMOUS_TRANSACTION;
49     l_item_key_type NUMBER;
50     l_item_key cz_pricing_structures.item_key%TYPE;
51 
52   BEGIN
53 
54     IF p_item_key IS NULL THEN
55       l_item_key_type := G_ITEM_KEY_PS_NODE;
56       l_item_key := TO_CHAR(p_ps_node_id);
57     ELSE
58       l_item_key_type := G_ITEM_KEY_BOM_NODE;
59       l_item_key := p_item_key;
60     END IF;
61 
62     INSERT INTO cz_pricing_structures (configurator_session_key,
63                                        seq_nbr,
64     				       ps_node_id, item_key,
65     				       item_key_type, quantity,
66     				       uom_code, config_item_id,
67                                        parent_config_item_id)
68       VALUES (p_config_session_key,
69               p_seq_nbr,
70               p_ps_node_id, l_item_key,
71               l_item_key_type, p_quantity, p_uom_code, p_config_item_id,
72               decode(p_parent_config_item_id, NO_PARENT_VALUE, NULL,
73                      p_parent_config_item_id));
74     COMMIT;
75   END insert_pricing_rec;
76 
77   PROCEDURE delete_pricing_recs (p_config_session_key IN VARCHAR2) IS
78     PRAGMA AUTONOMOUS_TRANSACTION;
79   BEGIN
80     DELETE FROM CZ_PRICING_STRUCTURES
81     WHERE configurator_session_key = p_config_session_key;
82     COMMIT;
83   END delete_pricing_recs;
84 
85 
86   PROCEDURE run_pricing_callback(p_pkg_name IN VARCHAR2,
87                                  p_proc_name IN VARCHAR2,
88                                  p_config_session_key IN VARCHAR2,
89                                  p_price_type IN VARCHAR2,
90                                  p_total_price OUT NOCOPY NUMBER) IS
91     PRAGMA AUTONOMOUS_TRANSACTION;
92     block_1 VARCHAR2(100);
93     block_2 VARCHAR2(100);
94     block_3 VARCHAR2(100);
95     final_block VARCHAR2(300);
96   BEGIN
97 
98     block_1 := 'begin ' || p_pkg_name || '.' || p_proc_name;
99     block_2 := '(:configurator_session_key, :price_type, :config_total_price); ';
100     block_3 := 'end;';
101     final_block := block_1 || block_2 || block_3;
102 
103     EXECUTE IMMEDIATE final_block USING IN p_config_session_key, IN p_price_type,
104       OUT p_total_price;
105 
106     COMMIT;
107 
108   END run_pricing_callback;
109 
110   PROCEDURE run_mls_pricing_callback(p_pkg_name IN VARCHAR2,
111 				     p_proc_name IN VARCHAR2,
112 				     p_config_session_key IN VARCHAR2,
113 				     p_price_type IN VARCHAR2,
114 				     p_total_price OUT NOCOPY NUMBER,
115 				     p_currency_code OUT NOCOPY VARCHAR2) IS
116     PRAGMA AUTONOMOUS_TRANSACTION;
117     block_1 VARCHAR2(100);
118     block_2 VARCHAR2(100);
119     block_3 VARCHAR2(100);
120     block_4 VARCHAR2(100);
121     final_block VARCHAR2(400);
122   BEGIN
123 
124     block_1 := 'begin ' || p_pkg_name || '.' || p_proc_name;
125     block_2 := '(:configurator_session_key, :price_type, :config_total_price, ';
126     block_3 := ':currency_code); ';
127     block_4 := 'end;';
128     final_block := block_1 || block_2 || block_3 || block_4;
129 
130     EXECUTE IMMEDIATE final_block USING IN p_config_session_key, IN p_price_type,
131       OUT p_total_price, OUT p_currency_code;
132 
133     COMMIT;
134 
135   END run_mls_pricing_callback;
136 
137 --This function returns the config_item_id of the root BOM model in a configuration
138 --identified by the p_config_session_id parameter.
139 
140 FUNCTION root_bom_config_item_id(p_config_session_key IN VARCHAR2) RETURN NUMBER IS
141 
142   TYPE typeItemKeyTable IS TABLE OF cz_pricing_structures.item_key%TYPE INDEX BY BINARY_INTEGER;
143   TYPE typeItemIdTable  IS TABLE OF cz_pricing_structures.config_item_id%TYPE INDEX BY BINARY_INTEGER;
144 
145   tabItemKey      typeItemKeyTable;
146   tabConfigItemId typeItemIdTable;
147   vComponentCode  cz_pricing_structures.item_key%TYPE;
148 
149 BEGIN
150 
151   --Read only the configuration lines corresponding to BOM items.
152 
153   SELECT item_key, config_item_id BULK COLLECT INTO tabItemKey, tabConfigItemId
154     FROM cz_pricing_structures
155    WHERE configurator_session_key = p_config_session_key
156      AND item_key_type = G_ITEM_KEY_BOM_NODE;
157 
158   FOR i IN 1..tabItemKey.COUNT LOOP
159 
160     vComponentCode := cz_atp_callback_util.component_code_from_item_key(tabItemKey(i));
161 
162     IF(INSTR(vComponentCode, COMP_CODE_DELIMITER) = 0)THEN
163 
164       --For every line, we extract the component code and see if it contains the delimiter
165       --symbol. If there is no delimiter, we assume the component code is just a single id
166       --and so this is the root model. As soon as one such line found we exit.
167 
168       RETURN tabConfigItemId(i);
169     END IF;
170   END LOOP;
171 
172   --No root model found, return NULL.
173 
174   RETURN NULL;
175 
176 EXCEPTION
177   WHEN OTHERS THEN
178 
179     --Any error occured, return NULL.
180 
181     RETURN NULL;
182 END root_bom_config_item_id;
183 
184 END cz_prc_callback_util;