DBA Data[Home] [Help]

PACKAGE BODY: APPS.QA_ERES_PKG

Source


1 PACKAGE BODY QA_ERES_PKG as
2    /* $Header: qaeresb.pls 115.2 2004/05/11 01:32:38 ilawler noship $ */
3 
4    /* Cache of the last parsed transactionId */
5    x_last_transaction_id        VARCHAR2(2000);
6    x_last_plan_id               NUMBER;
7    x_last_collection_id         NUMBER;
8    x_last_occurrence            NUMBER;
9 
10    /*
11      Private utility function for Collapse_Msg_Tokens.  Locates the next
12      token name so we can expand it.
13    */
14    FUNCTION find_long_token(p_msg VARCHAR2) RETURN VARCHAR2 IS
15       i INTEGER;
16       j INTEGER;
17    BEGIN
18       i := instr(p_msg, SUFFIXSTRING);
19       j := instr(p_msg, '&', i-LENGTH(p_msg));
20       RETURN substr(p_msg, j, i-j);
21    END find_long_token;
22 
23    /*
24      Private utility function for Collapse_Msg_Tokens.  Expands a token
25      name to the long form for simple search-replace matching.
26    */
27    FUNCTION expanded_token_string (l_token VARCHAR2) RETURN VARCHAR2 IS
28    BEGIN
29       RETURN l_token || SUFFIXSTRING || '1' ||
30          l_token || SUFFIXSTRING || '2' ||
31          l_token || SUFFIXSTRING || '3' ||
32          l_token || SUFFIXSTRING || '4' ||
33          l_token || SUFFIXSTRING || '5' ||
34          l_token || SUFFIXSTRING || '6' ||
35          l_token || SUFFIXSTRING || '7' ||
36          l_token || SUFFIXSTRING || '8' ||
37          l_token || SUFFIXSTRING || '9' ||
38          l_token || SUFFIXSTRING || '10';
39    END expanded_token_string;
40 
41    FUNCTION Collapse_Msg_Tokens (p_msg VARCHAR2) RETURN VARCHAR2 IS
42       l_msg VARCHAR2(4000);
43       tok   VARCHAR2(200);
44    BEGIN
45       l_msg := p_msg;
46       LOOP
47          tok := find_long_token(l_msg);
48          EXIT WHEN tok IS NULL;
49          l_msg := replace(l_msg, expanded_token_string(tok), tok);
50       END LOOP;
51       RETURN l_msg;
52    END Collapse_Msg_Tokens;
53 
54    FUNCTION get_category_name(p_category_id IN NUMBER, p_category_set_id IN NUMBER)
55       RETURN VARCHAR2
56    IS
57         x_name varchar2(240) := null;
58         CURSOR c IS
59             SELECT MCK.concatenated_segments
60             FROM   mtl_categories_kfv MCK, MTL_CATEGORY_SETS_B CSET
61             WHERE  CSET.CATEGORY_SET_ID = p_category_set_id AND
62                    MCK.STRUCTURE_ID = CSET.STRUCTURE_ID AND
63                    MCK.CATEGORY_ID = p_category_id;
64    BEGIN
65       OPEN c;
66       FETCH c INTO x_name;
67       CLOSE c;
68 
69       RETURN x_name;
70    END;
71 
72    FUNCTION get_category_desc(p_category_id IN NUMBER, p_category_set_id IN NUMBER)
73       RETURN VARCHAR2
74    IS
75         l_desc varchar2(240) := null;
76         CURSOR c IS
77             SELECT MCK.description
78             FROM   mtl_categories_vl MCK, MTL_CATEGORY_SETS_B CSET
79             WHERE  CSET.CATEGORY_SET_ID = p_category_set_id AND
80                    MCK.STRUCTURE_ID = CSET.STRUCTURE_ID AND
81                    MCK.CATEGORY_ID = p_category_id;
82    BEGIN
83       OPEN c;
84       FETCH c INTO l_desc;
85       CLOSE c;
86 
87       RETURN l_desc;
88    END;
89 
90    /*
91      Mon May 10 17:43:58 2004 - ilawler - bug #3599451
92 
93      Private utility function for get_result_column_value.  This is similar to
94      qa_core_pkg.get_result_column_name except it collapses the 3 cursors into one.
95 
96      p_plan_id  NUMBER  => collection plan id
97      p_char_id  NUMBER  => collection element id
98 
99      RETURNS VARCHAR2 name of the column in qa_results_full_v or NULL if char_id not
100                       in the plan_id's definition.
101    */
102    FUNCTION get_result_column_name(p_plan_id    IN NUMBER,
103                                    p_char_id    IN NUMBER)
104       RETURN VARCHAR2
105    IS
106       CURSOR C1 (c_plan_id NUMBER, c_char_id NUMBER) IS
107          SELECT DECODE(qc.hardcoded_column, NULL, qpc.result_column_name, qc.developer_name) rescol
108          FROM QA_PLAN_CHARS qpc,
109               QA_CHARS qc
110          WHERE qc.char_id = qpc.char_id AND
111                qpc.plan_id = c_plan_id AND
112                qpc.char_id = c_char_id;
113 
114       l_rescol VARCHAR2(2400);
115    BEGIN
116       OPEN C1(p_plan_id, p_char_id);
117       FETCH C1 INTO l_rescol;
118       IF C1%NOTFOUND THEN
119          CLOSE C1;
120          RETURN '';
121       ELSE
122          CLOSE C1;
123       END IF;
124 
125       return l_rescol;
126    END;
127 
128    FUNCTION get_result_column_value(p_plan_id           IN NUMBER,
129                                     p_collection_id     IN NUMBER,
130                                     p_occurrence        IN NUMBER,
131                                     p_char_id           IN NUMBER)
132       RETURN VARCHAR2
133    IS
134       l_rescol          VARCHAR2(2400);
135       l_rescol_value    VARCHAR2(4000);
136       l_stmt            VARCHAR2(4000);
137    BEGIN
138       l_rescol := get_result_column_name(p_plan_id, p_char_id);
139 
140       --now perform an execute immediate using this column
141       l_stmt := 'SELECT '||l_rescol||' FROM QA_RESULTS_FULL_V WHERE plan_id = :2 and collection_id = :3 and occurrence = :4';
142       EXECUTE IMMEDIATE l_stmt INTO l_rescol_value USING p_plan_id, p_collection_id, p_occurrence;
143       RETURN l_rescol_value;
144    END;
145 
146 
147    FUNCTION decode_wsh_released_status(p_source_code            IN VARCHAR2,
148                                        p_released_status        IN VARCHAR2,
149                                        p_released_status_name   IN VARCHAR2,
150                                        p_inv_interfaced_flag    IN VARCHAR2,
151                                        p_oe_interfaced_flag     IN VARCHAR2)
152       RETURN VARCHAR2
153    IS
154       l_return_str WSH_DLVY_DELIVERABLES_V.RELEASED_STATUS_NAME%TYPE;
155    BEGIN
156       l_return_str := p_released_status_name;
157 
158       IF (p_source_code = 'OE'
159           AND p_released_status = 'C'
160           AND p_oe_interfaced_flag = 'Y'
161           AND p_inv_interfaced_flag IN ('X','Y'))
162          OR
163          (p_source_code <> 'OE'
164           AND p_released_status = 'C'
165           AND p_inv_interfaced_flag = 'Y') THEN
166          BEGIN
167             SELECT meaning
168                INTO   l_return_str
169                FROM   wsh_lookups
170                WHERE  lookup_type = 'PICK_STATUS'
171                AND    lookup_code = 'I';
172          EXCEPTION
173             WHEN OTHERS THEN
174                l_return_str := NULL;
175          END;
176       END IF;
177 
178       return l_return_str;
179    END;
180 
181    FUNCTION decode_po_hazard_class(p_interface_transaction_id   IN NUMBER)
182       RETURN VARCHAR2
183    IS
184       CURSOR C1 IS
185          SELECT DECODE(rt.source_document_code, 'RMA', MSI.HAZARD_CLASS_ID, NVL(POL.HAZARD_CLASS_ID, MSI.HAZARD_CLASS_ID)) HAZARD_CLASS_ID
186          FROM RCV_TRANSACTIONS_INTERFACE RT, MTL_SYSTEM_ITEMS MSI, PO_LINES_ALL POL
187          WHERE rt.interface_transaction_id = p_interface_transaction_id AND
188                rt.to_organization_id = MSI.ORGANIZATION_ID(+) AND
189                rt.item_id = MSI.INVENTORY_ITEM_ID(+) AND
190                rt.po_line_id = POL.PO_LINE_ID(+);
191 
192       CURSOR C2 (p_hazard_class_id NUMBER) IS
193          SELECT HAZARD_CLASS
194          FROM PO_HAZARD_CLASSES_VL
195          WHERE HAZARD_CLASS_ID = p_hazard_class_id;
196 
197       l_hazard_class_id NUMBER;
198       l_hazard_class PO_HAZARD_CLASSES_VL.HAZARD_CLASS%TYPE;
199    BEGIN
200       OPEN C1;
201       FETCH C1 INTO l_hazard_class_id;
202       IF C1%NOTFOUND OR l_hazard_class_id IS NULL THEN
203          CLOSE C1;
204          RETURN NULL;
205       ELSE
206          CLOSE C1;
207       END IF;
208 
209       OPEN C2(l_hazard_class_id);
210       FETCH C2 INTO l_hazard_class;
211       IF C2%NOTFOUND THEN
212          CLOSE C2;
213          RETURN NULL;
214       ELSE
215          CLOSE C2;
216       END IF;
217 
218       return l_hazard_class;
219 
220       EXCEPTION
221          WHEN OTHERS THEN
222             RETURN NULL;
223    END;
224 
225    FUNCTION decode_po_un_number(p_interface_transaction_id      IN NUMBER)
226       RETURN VARCHAR2
227    IS
228       CURSOR C1 IS
229          SELECT DECODE(rt.source_document_code, 'RMA', MSI.UN_NUMBER_ID, NVL(POL.UN_NUMBER_ID, MSI.UN_NUMBER_ID)) UN_NUMBER_ID
230          FROM RCV_TRANSACTIONS_INTERFACE RT, MTL_SYSTEM_ITEMS MSI, PO_LINES_ALL POL
231          WHERE rt.interface_transaction_id = p_interface_transaction_id AND
232                rt.to_organization_id = MSI.ORGANIZATION_ID(+) AND
233                rt.item_id = MSI.INVENTORY_ITEM_ID(+) AND
234                rt.po_line_id = POL.PO_LINE_ID(+);
235 
236       CURSOR C2 (p_un_number_id NUMBER) IS
237          SELECT UN_NUMBER
238          FROM PO_UN_NUMBERS_VL
239          WHERE UN_NUMBER_ID = p_un_number_id;
240 
241       l_un_number_id NUMBER;
242       l_un_number PO_UN_NUMBERS_VL.UN_NUMBER%TYPE;
243    BEGIN
244       OPEN C1;
245       FETCH C1 INTO l_un_number_id;
246       IF C1%NOTFOUND OR l_un_number_id IS NULL THEN
247          CLOSE C1;
248          RETURN NULL;
249       ELSE
250          CLOSE C1;
251       END IF;
252 
253       OPEN C2(l_un_number_id);
254       FETCH C2 INTO l_un_number;
255       IF C2%NOTFOUND THEN
256          CLOSE C2;
257          RETURN NULL;
258       ELSE
259          CLOSE C2;
260       END IF;
261 
262       return l_un_number;
263 
264       EXCEPTION
265          WHEN OTHERS THEN
266             RETURN NULL;
267    END;
268 
269    FUNCTION get_result_column_value(p_transaction_id    IN VARCHAR2,
270                                     p_char_id           IN NUMBER)
271       RETURN VARCHAR2
272    IS
273       l_d_pos1          NUMBER;
274       l_d_pos2          NUMBER;
275       l_plan_id         NUMBER;
276       l_collection_id   NUMBER;
277       l_occurrence      NUMBER;
278       l_rescol          VARCHAR2(2400);
279       l_rescol_value    VARCHAR2(4000);
280       l_stmt            VARCHAR2(4000);
281       l_char_prompt     VARCHAR2(200);
282    BEGIN
283       --see if the transaction_id's the same as the last one we parsed
284       IF p_transaction_id = x_last_transaction_id THEN
285          l_plan_id := x_last_plan_id;
286          l_collection_id := x_last_collection_id;
287          l_occurrence := x_last_occurrence;
288       ELSE
289          --parse the new transaction id
290          l_d_pos1 := instr(p_transaction_id, '-');
291          l_d_pos2 := instr(p_transaction_id, '-', l_d_pos1+1);
292          IF (l_d_pos1 > 0 AND l_d_pos2 > 0) THEN
293             l_plan_id := to_number(substr(p_transaction_id, 1, l_d_pos1-1));
294             l_collection_id := to_number(substr(p_transaction_id, l_d_pos1+1, l_d_pos2-l_d_pos1-1));
295             l_occurrence := to_number(substr(p_transaction_id, l_d_pos2+1));
296 
297             --cache it for future calls - useful for multiple AME conditions
298             x_last_plan_id := l_plan_id;
299             x_last_collection_id := l_collection_id;
300             x_last_occurrence := l_occurrence;
301             x_last_transaction_id := p_transaction_id;
302          END IF;
303       END IF;
304 
305       --obtain the name of the qa_results_full_v column
306       l_rescol := get_result_column_name(l_plan_id, p_char_id);
307 
308       --now perform an execute immediate using this column if a column was found
309       IF l_rescol IS NOT NULL THEN
310          l_stmt := 'SELECT DISTINCT '||l_rescol||' FROM QA_RESULTS_FULL_V WHERE plan_id = :1 and collection_id = :2 and occurrence = NVL(:3, occurrence)';
311          EXECUTE IMMEDIATE l_stmt INTO l_rescol_value USING l_plan_id, l_collection_id, l_occurrence;
312       ELSE
313          l_rescol_value := '';
314       END IF;
315 
316       RETURN l_rescol_value;
317 
318    EXCEPTION
319       WHEN TOO_MANY_ROWS THEN
320          --lookup the char's prompt for the error message
321         l_char_prompt := qa_plan_element_api.get_prompt(l_plan_id, p_char_id);
322 
323         fnd_message.set_name('QA', 'QA_ERES_AME_TOO_MANY_ROWS');
324         fnd_message.set_token('CHAR_PROMPT', l_char_prompt);
325         raise_application_error(-20001, fnd_message.get());
326       WHEN OTHERS THEN
327         RAISE;
328         --DEBUG:raise_application_error(-20001, 'GRCV, when others, char('||p_char_id||'), plan('||l_plan_id||'), col('||l_collection_id||'), occ('||l_occurrence||'), stmt:"'||l_stmt||'", sqlcode('||SQLCODE||'), sqlerrm:"'||SQLERRM||'"');
329    END;
330 
331 
332 END QA_ERES_PKG;