[Home] [Help]
PACKAGE BODY: APPS.MSC_SDA_UTILS
Source
1 package body MSC_SDA_UTILS as
2 /* $Header: MSCSDAUB.pls 120.39.12010000.3 2008/08/26 19:40:31 pabram ship $ */
3
4 procedure println(p_msg varchar2) is
5 begin
6 if ( not(g_log_flag) ) then
7 return;
8 end if;
9
10 --dbms_output.put_line(p_msg);
11 g_log_row := g_log_row + 1;
12
13 if (g_log_file_name is null) then
14 select ltrim(rtrim(value))
15 into g_log_file_dir
16 from (select value from v$parameter2 where name='utl_file_dir'
17 order by rownum desc)
18 where rownum <2;
19 g_log_file_name := 'mscsda-1.txt';
20 g_log_file_handle := utl_file.fopen(g_log_file_dir, g_log_file_name, 'w');
21 end if;
22
23 if (utl_file.is_open(g_log_file_handle)) then
24 utl_file.put_line(g_log_file_handle, p_msg);
25 utl_file.fflush(g_log_file_handle);
26 utl_file.fclose(g_log_file_handle);
27 else
28 g_log_file_handle := utl_file.fopen(g_log_file_dir, g_log_file_name, 'a');
29 utl_file.put_line(g_log_file_handle, p_msg);
30 utl_file.fflush(g_log_file_handle);
31 utl_file.fclose(g_log_file_handle);
32 end if;
33
34 exception
35 when others then
36 return;
37 end println;
38
39 function escapeSplChars(p_value varchar2) return varchar2 is
40 l_value varchar2(1000);
41 begin
42 l_value := p_value;
43 l_value := replace(l_value, c_field_seperator, c_field_seperator_esc);
44 l_value := replace(l_value, c_record_seperator, c_record_seperator_esc);
45 if (l_value is null) then
46 l_value := c_null_space;
47 end if;
48 return l_value;
49 end escapeSplChars;
50
51 procedure addRecordToOutStream(p_one_record varchar2,
52 p_out_data_index in out nocopy number,
53 p_out_data in out nocopy msc_sda_utils.maxchartbl) is
54 begin
55 if (nvl(length(p_out_data(1)),0) = 1) then -- {
56 p_out_data(1) := p_one_record;
57 elsif ( nvl(length(p_out_data(p_out_data_index)),0) + length(p_one_record) < 32000 ) then
58 p_out_data(p_out_data_index) := p_out_data(p_out_data_index) || c_record_seperator || p_one_record;
59 else
60 p_out_data_index := p_out_data_index + 1;
61 p_out_data.extend;
62 p_out_data(p_out_data_index) := c_record_seperator || p_one_record;
63 end if; -- }
64 end addRecordToOutStream;
65
66 procedure addToOutStream(p_one_record varchar2,
67 p_out_data_index in out nocopy number,
68 p_out_data in out nocopy msc_sda_utils.maxchartbl,
69 p_debug_flag number default null) is
70 l_one_record varchar2(32000);
71 begin
72 --println(' addToOutStream in/out');
73 if (nvl(length(p_out_data(1)),0) = 1) then -- {
74 p_out_data(1) := p_one_record;
75 elsif ( nvl(length(p_out_data(p_out_data_index)),0) + length(p_one_record) < 32000 ) then
76 p_out_data(p_out_data_index) := p_out_data(p_out_data_index) || p_one_record;
77 else
78 p_out_data_index := p_out_data_index + 1;
79 p_out_data.extend;
80 p_out_data(p_out_data_index) := p_one_record;
81 end if; -- }
82 end addToOutStream;
83
84 function getNewFormQueryId return number is
85 cursor c_query is
86 select msc_form_query_s.nextval
87 from dual;
88 l_query_id number;
89 begin
90 open c_query;
91 fetch c_query into l_query_id;
92 close c_query;
93 return l_query_id;
94 end getNewFormQueryId;
95
96 function getNewAnalysisQueryId return number is
97 cursor c_query is
98 select msc_analysis_query_s.nextval
99 from dual;
100 l_query_id number;
101 begin
102 open c_query;
103 fetch c_query into l_query_id;
104 close c_query;
105 return l_query_id;
106 end getNewAnalysisQueryId;
107
108 function getRepairItem(p_plan_id number, p_lower_item_id number, p_highest_item_id number) return number is
109
110 cursor c_repair_item_cur is
111 select higher_item_id
112 from msc_item_substitutes
113 where plan_id = p_plan_id
114 and relationship_type = c_mis_repair_to_type
115 and lower_item_id = p_lower_item_id;
116 --and highest_item_id = p_highest_item_id;
117
118 l_repair_item_id number;
119 begin
120 open c_repair_item_cur;
121 fetch c_repair_item_cur into l_repair_item_id;
122 close c_repair_item_cur;
123 return l_repair_item_id;
124 end getRepairItem;
125
126 function flushSupersessionChain(p_plan number, p_item number) return number is
127 l_query_id number;
128 begin
129 l_query_id := getNewFormQueryId;
130
131 insert into msc_form_query(query_id,
132 creation_date, created_by, last_updated_by, last_update_date, number1, number2, number3, number4,
133 number5, number6, number7, date1, date2)
134 select l_query_id,sysdate, -1, -1, sysdate,
135 lower_item_id, higher_item_id, highest_item_id, level,
136 reciprocal_flag,
137 msc_sda_utils.getRepairItem(plan_id, lower_item_id, highest_item_id) repair_item_id,
138 prime_item_id,
139 effective_date, disable_date
140 from msc_item_substitutes
141 where plan_id = p_plan
142 and relationship_type = c_mis_supersession_type
143 and highest_item_id = p_item
144 and inferred_flag = 2
145 and forward_rule = 1
146 start with highest_item_id = p_item
147 and inferred_flag = 2
148 and highest_item_id = higher_item_id
149 connect by nocycle higher_item_id = prior lower_item_id
150 and plan_id = prior plan_id
151 and relationship_type = prior relationship_type
152 and inferred_flag = prior inferred_flag
153 and forward_rule = prior forward_rule
154 -- and effective_date = prior effective_date
155 order by level desc;
156
157 return l_query_id;
158 end flushSupersessionChain;
159
160 function getOrgList(p_query_id number) return varchar2 is
161 cursor c_name is
162 select query_name
163 from msc_personal_queries
164 where query_id = p_query_id;
165 l_name varchar2(250);
166 begin
167 open c_name;
168 fetch c_name into l_name;
169 close c_name;
170 return l_name;
171 end getOrgList;
172
173 function getRegionList(p_query_id number) return varchar2 is
174 cursor c_name is
175 select query_name
176 from msc_personal_queries
177 where query_id = p_query_id;
178 l_name varchar2(250);
179 begin
180 open c_name;
181 fetch c_name into l_name;
182 close c_name;
183 return l_name;
184 end getRegionList;
185
186 function getRegionName(p_region_id number) return varchar2 is
187 cursor c_name is
188 select decode(region_type,
189 0,country,
190 1,country||'-'||state,
191 2,country||'-'||state||'-'||city,
192 3,country||'-'||state||'-'||city||'-'||postal_code_from||'-'||postal_code_to,
193 10, mr.zone) reg_list_name
194 from msc_regions mr
195 where mr.region_id = p_region_id;
196 l_name varchar2(250);
197 begin
198 open c_name;
199 fetch c_name into l_name;
200 close c_name;
201 return l_name;
202 end getRegionName;
203
204 procedure getRegListValues(p_region_list varchar2, p_region_type number,
205 p_reg_list_id out nocopy number, p_reg_list out nocopy varchar2,
206 p_region_id out nocopy number, p_region_code out nocopy varchar2) is
207 begin
208 if (p_region_type = c_reg_list_view) then
209 p_reg_list_id := p_region_list;
210 p_reg_list := getRegionList(p_region_list);
211 p_region_id := null;
212 p_region_code := null;
213 elsif (p_region_type = c_reg_view) then
214 p_reg_list_id := null;
215 p_reg_list := null;
216 p_region_id := p_region_list;
217 p_region_code := getRegionName(p_region_list);
218 end if;
219 end getRegListValues;
220
221 procedure getOrgListValues(p_orglist varchar2, p_org_type number,
222 p_org_list_id out nocopy number, p_org_list out nocopy varchar2,
223 p_inst_id out nocopy number, p_org_id out nocopy number,
224 p_org_code out nocopy varchar2) is
225
226 l_open_pos number;
227 l_close_pos number;
228 l_comma_pos number;
229 begin
230 if (p_org_type = c_org_list_view) then
231 p_org_list_id := p_orglist;
232 p_org_list := getOrgList(p_orglist);
233 p_inst_id := null;
234 p_org_id := null;
235 p_org_code := null;
236 elsif (p_org_type = c_org_view) then
237 l_open_pos := instr(p_orglist,'(');
238 l_comma_pos := instr(p_orglist,'-');
239 if (l_comma_pos = 0) then
240 l_comma_pos := instr(p_orglist,',');
241 end if;
242 l_close_pos := instr(p_orglist,')');
243 p_org_list_id := null;
244 p_org_list := null;
245 p_inst_id := substr(p_orglist,l_open_pos+1, l_comma_pos-l_open_pos-1);
246 p_org_id := substr(p_orglist,l_comma_pos+1, l_close_pos-l_comma_pos-1);
247 p_org_code := msc_get_name.org_code(p_org_id, p_inst_id);
248 end if;
249 println('getOrgListValues out');
250 end getOrgListValues;
251
252 procedure getItemListValues(p_cur_item_id number, p_item_view_type number,
253 p_top_item_id out nocopy number, p_top_item_name out nocopy varchar2,
254 p_item_id out nocopy number, p_item_name out nocopy varchar2) is
255 begin
256 if (p_item_view_type = c_item_view) then
257 p_top_item_id := null;
258 p_top_item_name := null;
259 p_item_id := p_cur_item_id;
260 p_item_name := msc_get_name.item_name(p_cur_item_id, null, null, null);
261 else
262 p_top_item_id := p_cur_item_id;
263 p_top_item_name := msc_get_name.item_name(p_cur_item_id, null, null, null);
264 p_item_id := null;
265 p_item_name := null;
266 end if;
267 end getItemListValues;
268
269 procedure getItemPrimeSS(p_plan_id number, p_item_id number,
270 p_prime_item_id out nocopy number, p_ss_item_id out nocopy number) is
271
272 cursor c_prime_ss_cur is
273 select decode(p_item_id, lower_item_id, prime_item_id, higher_item_id),
274 highest_item_id
275 from msc_item_substitutes
276 where plan_id = p_plan_id
277 and relationship_type = c_mis_supersession_type
278 and inferred_flag = 2
279 and forward_rule = 1
280 and (lower_item_id = p_item_id
281 or (higher_item_id = highest_item_id and higher_item_id = p_item_id) );
282 --pabram..need to change.. add effective date logic here to pick the right one
283 begin
284 open c_prime_ss_cur;
285 fetch c_prime_ss_cur into p_prime_item_id, p_ss_item_id;
286 close c_prime_ss_cur;
287 end getItemPrimeSS;
288
289 function check_row_exists(p_query_id number, p_row_index number,
290 p_org_list_id number, p_inst_id number, p_org_id number,
291 p_top_item_id number, p_item_id number, p_orglist_action number, p_itemlist_action number) return number is
292
293 cursor c_maq_cur is
294 select count(*)
295 from msc_analysis_query
296 where query_id = p_query_id
297 and parent_row_index = p_row_index
298 and nvl(org_list_id, -1) = nvl(p_org_list_id, -1)
299 and nvl(inst_id, -1) = nvl(p_inst_id, -1)
300 and nvl(org_id, -1) = nvl(p_org_id, -1)
301 and nvl(top_item_id, -1) = nvl(p_top_item_id, -1)
302 and nvl(item_id, -1) = nvl(p_item_id, -1)
303 and nvl(org_list_state, -1) = nvl(p_orglist_action, -1)
304 and nvl(top_item_name_state, -1) = nvl(p_itemlist_action, -1) ;
305 l_count number;
306 begin
307 open c_maq_cur;
308 fetch c_maq_cur into l_count;
309 close c_maq_cur;
310
311 if l_count = 0 then
312 return c_sys_no;
313 end if;
314 return c_sys_yes;
315 end check_row_exists;
316
317 procedure flushRegsOrgsIntoMfq(p_plan_id number, p_region_type number, p_region_list number,
318 p_org_type number, p_org_list varchar2,
319 p_region_query_id out nocopy number, p_org_query_id out nocopy number) is
320
321 cursor c_regions_cur(p_view_type number) is
322 select distinct
323 to_number(null) region_list_id,
324 to_char(null) region_list,
325 p_region_list region_id,
326 msc_sda_utils.getRegionName(p_region_list) region_code,
327 p_region_list sort_column
328 from dual
329 where p_region_type = c_reg_view
330 and p_view_type = 1
331 union all
332 select distinct
333 mpq.query_id region_list_id,
334 mpq.query_name region_list,
335 mpt.object_type region_id,
336 msc_sda_utils.getRegionName(mpt.object_type) region_code,
337 mpt.sequence_id sort_column
338 from msc_pq_types mpt,
339 msc_personal_queries mpq
340 where mpq.query_id = p_region_list
341 and mpq.query_id = mpt.query_id
342 and p_region_type = c_reg_list_view
343 and p_view_type = 1
344 order by 5;
345
346 /*
347 --pabram..need to use supersession chain also to reduce inserting too many rows
348 cursor c_orgs_cur is
349 select md.zone_id region_id,
350 md.sr_instance_id inst_id,
351 md.organization_id org_id,
352 msc_get_name.org_code(md.organization_id, md.sr_instance_id) org_code,
353 md.inventory_item_id
354 from msc_demands md,
355 msc_form_query mfq
356 where mfq.query_id = p_region_query_id
357 and md.plan_id = p_plan_id
358 and md.zone_id = mfq.number2;
359 */
360 cursor c_orgs_cur (p_view_type number, p_inst_id number, p_org_id number) is
361 select distinct mfq.number2 region_id,
362 mtp.sr_instance_id inst_id,
363 mtp.sr_tp_id org_id,
364 msc_get_name.org_code(mpo.organization_id, mpo.sr_instance_id) org_code,
365 to_number(null) inventory_item_id
366 from
367 --msc_region_locations mrl,
368 --msc_location_associations mla,
369 msc_trading_partners mtp,
370 msc_plan_organizations mpo,
371 msc_form_query mfq
372 --,msc_zone_regions mzr
373 where mfq.query_id = p_region_query_id
374 and nvl(mfq.number2,-1) > 0
375 --and mzr.parent_region_id = mfq.number2
376 --and mrl.region_id = mzr.region_id
377 --and mrl.location_id = mla.location_id
378 --and mla.partner_id = mtp.partner_id
379 and mtp.partner_type = 3
380 and mpo.plan_id = p_plan_id
381 and mpo.sr_instance_id = mtp.sr_instance_id
382 and mpo.organization_id = mtp.sr_tp_id
383 and p_view_type = 1 --region list selected by user
384 --pabram..commented out --msc_location_associations, msc_trading_partners for testing,
385 --we need to enable this when these tables are flushed correctly
386 --6736491, need to add mrl back
387 union all
388 select distinct
389 c_mbp_not_null_value region_id,
390 mtp.sr_instance_id inst_id,
391 mtp.sr_tp_id org_id,
392 msc_get_name.org_code(mtp.sr_tp_id, mtp.sr_instance_id) org_code,
393 to_number(null) inventory_item_id
394 from msc_trading_partners mtp
395 where mtp.sr_tp_id = p_org_id
396 and mtp.sr_instance_id = p_inst_id
397 and mtp.partner_type = 3
398 and p_org_type = c_org_view
399 and p_view_type = 2
400 union all
401 select distinct
402 c_mbp_not_null_value region_id,
403 mpt.source_type inst_id,
404 mpt.object_type org_id,
405 msc_get_name.org_code(mpt.object_type, mpt.source_type) org_code,
406 to_number(null) inventory_item_id
407 from msc_pq_types mpt,
408 msc_personal_queries mpq
409 where mpq.query_id = p_org_list
410 and mpq.query_id = mpt.query_id
411 and p_org_type = c_org_list_view
412 and p_view_type = 2
413 order by 4;
414
415 ll_org_list_id number;
416 ll_org_list varchar2(250);
417 ll_inst_id number;
418 ll_org_id number;
419 ll_org_code varchar2(10);
420
421 ll_view_type number;
422 begin
423 println('flushRegsOrgsIntoMfq in');
424 p_region_query_id := getNewFormQueryId;
425 p_org_query_id := getNewFormQueryId;
426
427 if ( p_region_list is not null) then
428 ll_view_type := 1;
429 elsif (p_org_list is not null) then
430 msc_sda_utils.getOrgListValues(p_org_list, p_org_type, ll_org_list_id, ll_org_list, ll_inst_id, ll_org_id, ll_org_code);
431 ll_view_type := 2;
432 end if;
433
434 for c_regions in c_regions_cur(ll_view_type)
435 loop
436 println('regions loop in');
437 insert into msc_form_query (query_id, creation_date, created_by, last_updated_by, last_update_date,
438 number1, char1, number2, char2, number3)
439 values (p_region_query_id, sysdate, -1, -1, sysdate,
440 c_regions.region_list_id, c_regions.region_list, c_regions.region_id, c_regions.region_code, c_regions.sort_column);
441
442 --insert a global org for each region
443 insert into msc_form_query (query_id, creation_date, created_by, last_updated_by, last_update_date,
444 number1, number2, number3, char1, number4)
445 values (p_org_query_id, sysdate, -1, -1, sysdate,
446 c_regions.region_id, to_number(null), -1, to_char(c_mbp_null_value), c_mbp_null_value);
447
448 println('regions loop out');
449 end loop;
450
451 --insert one global orgs for global without region_id
452 insert into msc_form_query (query_id, creation_date, created_by, last_updated_by, last_update_date,
453 number1, number2, number3, char1, number4)
454 values (p_org_query_id, sysdate, -1, -1, sysdate,
455 c_mbp_null_value, to_number(null), -1, to_char(c_mbp_null_value), c_mbp_null_value);
456
457 --add global region
458 insert into msc_form_query (query_id, creation_date, created_by, last_updated_by, last_update_date,
459 number1, char1, number2, char2, number3)
460 values (p_region_query_id, sysdate, -1, -1, sysdate,
461 to_number(null), null, c_global_reg_type, c_global_reg_type_text, c_global_reg_type);
462
463 --add local region
464 insert into msc_form_query (query_id, creation_date, created_by, last_updated_by, last_update_date,
465 number1, char1, number2, char2, number3)
466 values (p_region_query_id, sysdate, -1, -1, sysdate,
467 to_number(null), null, c_local_reg_type, c_local_reg_type_text, c_local_reg_type);
468
469 --insert one global orgs for local with region_id for usage based forecast local
470 insert into msc_form_query (query_id, creation_date, created_by, last_updated_by, last_update_date,
471 number1, number2, number3, char1, number4)
472 values (p_org_query_id, sysdate, -1, -1, sysdate,
473 c_local_reg_type, to_number(null), -1, to_char(c_mbp_null_value), c_mbp_null_value);
474
475 for c_orgs in c_orgs_cur(ll_view_type, ll_inst_id, ll_org_id)
476 loop
477 println('region-orgs loop in');
478 --insert orgs for regions
479 insert into msc_form_query (query_id, creation_date, created_by, last_updated_by, last_update_date,
480 number1, number2, number3, char1, number4)
481 values (p_org_query_id, sysdate, -1, -1, sysdate,
482 c_orgs.region_id, c_orgs.inst_id, c_orgs.org_id, c_orgs.org_code, c_orgs.inventory_item_id);
483
484 --insert orgs for global
485 insert into msc_form_query (query_id, creation_date, created_by, last_updated_by, last_update_date,
486 number1, number2, number3, char1, number4)
487 values (p_org_query_id, sysdate, -1, -1, sysdate,
488 c_global_reg_type, c_orgs.inst_id, c_orgs.org_id, c_orgs.org_code, c_orgs.inventory_item_id);
489
490 --insert orgs for local
491 insert into msc_form_query (query_id, creation_date, created_by, last_updated_by, last_update_date,
492 number1, number2, number3, char1, number4)
493 values (p_org_query_id, sysdate, -1, -1, sysdate,
494 c_local_reg_type, c_orgs.inst_id, c_orgs.org_id, c_orgs.org_code, c_orgs.inventory_item_id);
495 end loop;
496
497 println(' p_org_query_id p_region_query_id '||p_org_query_id||' - '||p_region_query_id);
498 println('flushRegsOrgsIntoMfq out');
499 end flushRegsOrgsIntoMfq;
500
501 function flushOrgsIntoMfq(p_query_id number, p_row_index number, p_org_type number) return number is
502 l_query_id number;
503
504 cursor c_orgs_cur is
505 select distinct
506 to_number(null) org_list_id,
507 to_char(null) org_list,
508 mtp.sr_instance_id inst_id,
509 mtp.sr_tp_id org_id,
510 msc_get_name.org_code(mtp.sr_tp_id, mtp.sr_instance_id) org_code,
511 mtp.sr_tp_id sort_column
512 from msc_trading_partners mtp,
513 msc_analysis_query maq
514 where maq.query_id = p_query_id
515 and maq.row_index = p_row_index
516 and mtp.sr_instance_id = maq.inst_id
517 and mtp.sr_tp_id = maq.org_id
518 and mtp.partner_type = 3
519 and p_org_type = c_org_view
520 union all
521 select distinct
522 mpq.query_id org_list_id,
523 mpq.query_name org_list,
524 mpt.source_type inst_id,
525 mpt.object_type org_id,
526 msc_get_name.org_code(mpt.object_type, mpt.source_type) org_code,
527 mpt.sequence_id sort_column
528 from msc_pq_types mpt,
529 msc_personal_queries mpq,
530 msc_analysis_query maq
531 where maq.query_id = p_query_id
532 and maq.row_index = p_row_index
533 and mpq.query_id = maq.org_list_id
534 and mpq.query_id = mpt.query_id
535 and p_org_type = c_org_list_view
536 order by 6;
537
538 begin
539 l_query_id := getNewFormQueryId;
540 for c_orgs in c_orgs_cur
541 loop
542 println('inserting +');
543 insert into msc_form_query (query_id, creation_date, created_by, last_updated_by, last_update_date,
544 number1, char1, number2, number3, char4, number4)
545 values (l_query_id, sysdate, -1, -1, sysdate,
546 c_orgs.org_list_id, c_orgs.org_list, c_orgs.inst_id, c_orgs.org_id, c_orgs.org_code, c_orgs.sort_column);
547 end loop;
548 return l_query_id;
549 end flushOrgsIntoMfq;
550
551 function flushChainIntoMfq(p_query_id number, p_plan_id number,
552 p_item_view_type number, p_item_id number) return number is
553
554 cursor c_sschain_cur is
555 select to_number(null) top_item_id,
556 to_char(null) top_item_name,
557 inventory_item_id item_id,
558 item_name,
559 1 sort_column
560 from msc_items
561 where inventory_item_id = p_item_id
562 and p_item_view_type = c_item_view
563 union all
564 select distinct
565 p_item_id top_item_id,
566 msc_get_name.item_name(p_item_id,null, null, null) top_item_name,
567 decode(p_item_id, prime_item_id, lower_item_id, higher_item_id) item_id,
568 msc_get_name.item_name(decode(p_item_id, prime_item_id, lower_item_id, higher_item_id),null, null, null) item_name,
569 1 sort_column
570 from msc_item_substitutes
571 where plan_id = p_plan_id
572 and (prime_item_id = p_item_id or (higher_item_id = highest_item_id and higher_item_id = p_item_id))
573 and relationship_type = c_mis_supersession_type
574 and p_item_view_type = c_prime_view
575 and inferred_flag = 2
576 and forward_rule = 1
577 /*
578 start with prime_item_id = p_item_id
579 --and highest_item_id = higher_item_id
580 connect by nocycle higher_item_id = prior lower_item_id
581 and plan_id = prior plan_id
582 and relationship_type = prior relationship_type
583 and prime_item_id = prior prime_item_id
584 and inferred_flag = prior inferred_flag
585 and forward_rule = prior forward_rule
586 */ --commented since where cl is enough to fetch this info
587 union all
588 select distinct
589 highest_item_id top_item_id,
590 msc_get_name.item_name(highest_item_id,null, null, null) top_item_name,
591 lower_item_id item_id,
592 msc_get_name.item_name(lower_item_id,null, null, null) item_name,
593 1 sort_column
594 from msc_item_substitutes
595 where plan_id = p_plan_id
596 and relationship_type = c_mis_supersession_type
597 and p_item_view_type = c_supersession_view
598 and highest_item_id = p_item_id
599 and inferred_flag = 2
600 and forward_rule = 1
601 /*
602 start with highest_item_id = p_item_id
603 and inferred_flag = 2
604 and highest_item_id = higher_item_id
605 --and highest_item_id = higher_item_id
606 connect by nocycle higher_item_id = prior lower_item_id
607 and plan_id = prior plan_id
608 and relationship_type = prior relationship_type
609 and inferred_flag = prior inferred_flag
610 and forward_rule = prior forward_rule
611 */ --commented since where cl is enough to fetch this info
612 order by sort_column desc;
613 --pabram..need to change.. need to add effective_date logic also
614
615 l_query_id number;
616 l_found boolean := false;
617 l_item_name varchar2(300);
618 begin
619 l_query_id := getNewFormQueryId;
620 for c_sschain in c_sschain_cur
621 loop
622 println(' populating into chain '||c_sschain.item_name);
623 insert into msc_form_query (query_id, creation_date, created_by, last_updated_by, last_update_date, number1, char1, number2, char2, number3)
624 values (l_query_id, sysdate, -1, -1, sysdate, c_sschain.top_item_id, c_sschain.top_item_name, c_sschain.item_id, c_sschain.item_name,
625 c_sschain.sort_column);
626 if (c_sschain.item_id = p_item_id) then
627 l_found := true;
628 end if;
629 end loop;
630
631 if (p_item_view_type in (c_prime_view, c_supersession_view) ) then
632 if (l_found = false) then
633 l_item_name := msc_get_name.item_name(p_item_id, null, null, null);
634 insert into msc_form_query (query_id, creation_date, created_by, last_updated_by, last_update_date, number1, char1, number2, char2, number3)
635 values (l_query_id, sysdate, -1, -1, sysdate, p_item_id, l_item_name, p_item_id, l_item_name, 1);
636 end if;
637 end if;
638 return l_query_id;
639 end flushChainIntoMfq;
640
641 function createHistCalInMfq(p_start_date date, p_end_date date) return number is
642 l_query_id number;
643
644 l_first_day date;
645 l_last_day date;
646
647 l_month number;
648 l_year number;
649 l_date_index number := 1;
650
651 l_start_date date;
652 l_end_date date;
653 begin
654 l_query_id := getNewFormQueryId;
655 l_start_date := trunc(p_start_date, 'MM');
656 l_end_date := trunc(p_end_date, 'MM');
657
658 l_month := to_char(l_start_date, 'MM');
659 l_year := to_char(l_start_date, 'YYYY');
660 loop
661 l_first_day := to_date( '01/' || l_month || '/' ||l_year, 'DD/MM/YYYY');
662 l_last_day := last_day(l_first_day);
663
664 insert into msc_form_query (query_id, creation_date, created_by, last_updated_by, last_update_date,
665 date1, date2, number1)
666 values (l_query_id, sysdate, -1, -1, sysdate, l_first_day, l_last_day, l_date_index);
667
668 if (l_last_day > l_end_date) then
669 exit;
670 end if;
671 if (l_month <12) then
672 l_month := l_month + 1;
673 else
674 l_month := 1;
675 l_year := l_year + 1;
676 end if;
677 l_date_index := l_date_index + 1;
678 end loop;
679 return l_query_id;
680 end createHistCalInMfq;
681
682 procedure spreadTableMessages(p_out_data in out nocopy msc_sda_utils.maxCharTbl) is
683 cursor c_item_prompts_cur (p_folder_object varchar2) is
684 select field_type,
685 field_name,
686 field_prompt,
687 decode(folder_object,
688 c_item_folder, nvl(group_by,2),
689 1) default_flag
690 from msc_criteria
691 where folder_object = p_folder_object
692 and field_name <> 'PRE_POSITION_INVENTORY'
693 order by to_number(field_type);
694
695 l_one_record varchar2(500);
696 l_row_count number := 0;
697 l_out_data_index number := 1;
698 begin
699 -- items column prompts
700 for c_item_prompts in c_item_prompts_cur(c_item_folder) loop
701 l_one_record := c_item_prompts.field_type
702 || c_field_seperator || c_item_prompts.field_name
703 || c_field_seperator || c_item_prompts.field_prompt
704 || c_field_seperator || c_item_prompts.default_flag;
705
706 l_row_count := l_row_count + 1;
707 if (l_row_count = 1) then
708 l_one_record := c_sdview_items_messages || c_bang_separator || c_record_seperator || l_one_record;
709 end if;
710 msc_sda_utils.addRecordToOutStream(l_one_record, l_out_data_index, p_out_data);
711 end loop;
712
713 l_row_count := 0;
714
715 -- comments column prompts
716 for c_item_prompts in c_item_prompts_cur(c_comments_folder) loop
717 l_one_record := c_item_prompts.field_type
718 || c_field_seperator || c_item_prompts.field_name
719 || c_field_seperator || c_item_prompts.field_prompt
720 || c_field_seperator || c_item_prompts.default_flag;
721
722 l_row_count := l_row_count + 1;
723 if (l_row_count = 1) then
724 l_one_record := c_sdview_comments_messages || c_bang_separator || c_record_seperator || l_one_record;
725 end if;
726 msc_sda_utils.addRecordToOutStream(l_one_record, l_out_data_index, p_out_data);
727 end loop;
728
729 l_row_count := 0;
730
731 -- excp_summary column prompts
732 for c_item_prompts in c_item_prompts_cur(c_excp_folder) loop
733 l_one_record := c_item_prompts.field_type
734 || c_field_seperator || c_item_prompts.field_name
735 || c_field_seperator || c_item_prompts.field_prompt
736 || c_field_seperator || c_item_prompts.default_flag;
737
738 l_row_count := l_row_count + 1;
739 if (l_row_count = 1) then
740 l_one_record := c_sdview_excp_messages || c_bang_separator || c_record_seperator || l_one_record;
741 end if;
742 msc_sda_utils.addRecordToOutStream(l_one_record, l_out_data_index, p_out_data);
743 end loop;
744 end spreadTableMessages;
745
746 procedure getCommentsData(p_plan_id number, p_chain_query_id number,
747 p_out_data in out nocopy msc_sda_utils.maxCharTbl, p_stream_label varchar2) is
748
749 cursor c_comments_cur is
750 select distinct mun.note_id,
751 nvl(mun.last_update_date, mun.creation_date) comment_date,
752 msc_get_name.item_name(mun.inventory_item_id, null, null, null) item_name,
753 substr(mun.note_text1,1,80) comment_text
754 from msc_user_notes mun,
755 msc_form_query mfq
756 where
757 mun.entity_type = c_comment_entity_type
758 and mun.inventory_item_id in (mfq.number1, number2)
759 and mfq.query_id = p_chain_query_id
760 order by 2 desc;
761 --where mun.plan_id = p_plan_id
762
763 l_one_record varchar2(32000);
764 l_out_data_index number := 1;
765 l_row_count number := 0;
766 begin
767 println('getCommentsData in');
768 for c_comments in c_comments_cur
769 loop
770 l_row_count := l_row_count + 1;
771 l_one_record := to_char(c_comments.note_id)
772 || c_field_seperator || to_char(c_comments.comment_date, c_date_format)
773 || c_field_seperator || msc_sda_utils.escapeSplChars(c_comments.comment_text)
774 || c_field_seperator || msc_sda_utils.escapeSplChars(c_comments.item_name);
775 if (l_row_count = 1) then
776 l_one_record := p_stream_label || c_bang_separator || c_record_seperator || l_one_record;
777 end if;
778 msc_sda_utils.addRecordToOutStream(l_one_record, l_out_data_index, p_out_data);
779 end loop;
780 println('getCommentsData out');
781 end getCommentsData;
782
783 function getPreference(p_plan_id number, p_plan_type number, p_preference in varchar2) return varchar2 is
784 l_pref_value number;
785 l_def_pref_id number;
786
787 cursor c_pref_id is
788 select preference_id
789 from msc_user_preferences
790 where default_flag =1
791 and user_id = fnd_global.user_id
792 and nvl(plan_type,-1) = p_plan_type;
793
794 begin
795 open c_pref_id;
796 fetch c_pref_id into l_def_pref_id;
797 close c_pref_id;
798 if (l_def_pref_id is null) then
799 l_def_pref_id := msc_get_name.get_default_pref_id(fnd_global.user_id);
800 end if;
801
802 l_pref_value:= msc_get_name.get_preference(p_preference,l_def_pref_id, p_plan_type);
803 return l_pref_value;
804 end getPreference;
805
806
807 procedure getItemsData(p_plan_id number, p_org_query_id number, p_chain_query_id number, p_out_data in out nocopy maxCharTbl) is
808 l_category_set_id number;
809
810 cursor c_item_cur is
811 select distinct to_char(sr_instance_id)||'-'||to_char(organization_id)||'-'||to_char(inventory_item_id) node_id,
812 item_segments, organization_code, description, planner_code,
813 nettable_inventory_quantity, nonnettable_inventory_quantity, buyer_name,
814 mrp_planning_code_text, critical_component_flag critical_component_flag,
815 wip_supply_type_text,
816 bom_item_type_text, end_assembly_pegging_text, base_model,
817 category, category_desc, product_family_item, product_family_item_desc,
818 planning_exception_set, msc_get_name.lookup_meaning('SYS_YES_NO', nvl(repetitive_type,2)) repetitive_type,
819 standard_cost, carrying_cost,
820 uom_code, planning_time_fence_date, planning_time_fence_days,
821 inventory_use_up_date, planning_make_buy_code_text,
822 ato_forecast_control_text, shrinkage_rate, preprocessing_lead_time,
823 full_lead_time, postprocessing_lead_time, leadtime_variability,
824 fixed_lead_time, variable_lead_time, fixed_order_quantity,
825 fixed_lot_multiplier, minimum_order_quantity, maximum_order_quantity,
826 safety_stock_days, safety_stock_percent, fixed_days_supply,
827 msc_get_name.lookup_meaning('SYS_YES_NO', rounding_control_type) rounding_control_type,
828 effectivity_control_type, abc_class_name, selling_price,
829 margin, average_discount, net_selling_price, service_level,
830 demand_time_fence_days, demand_time_fence_date, safety_stock_code,
831 atp_flag, atp_components_flag, drp_planned, weight_uom,
832 unit_weight, volume_uom, pip_flag, msc_get_name.lookup_meaning('SYS_YES_NO', create_supply_flag) create_supply_flag,
833 substitution_window,
834 convergence_text, divergence_text, continous_transfer_text, exclude_from_budget,
835 days_tgt_inv_window, days_max_inv_window, days_tgt_inv_supply,
836 days_max_inv_supply, shelf_life_days, release_time_fence_days,
837 min_shelf_life_days, unit_volume, to_number(null) max_early_days,
838 demand_fulfillment_lt, end_of_life_date, fcst_rule_for_demands_text,
839 fcst_rule_for_returns_text, interarrival_time, life_time_buy_date,
840 msc_get_name.lookup_meaning('SYS_YES_NO', decode(preposition_point,'Y','1','2')) preposition_point,
841 repair_cost,
842 repair_lead_time, repair_program_text, repair_yield, std_dmd_over_horizon,
843 repetitive_planning_flag_text,
844 mfq.number3
845 from msc_system_items_sc_v msiv,
846 msc_form_query mfq, --items
847 msc_form_query mfq1 --orgs
848 where plan_id = p_plan_id
849 and category_set_id = l_category_set_id
850 and inventory_item_id in (mfq.number2) --, number1)
851 and mfq.query_id = p_chain_query_id
852 and mfq1.query_id = p_org_query_id
853 --and nvl(mfq1.number1,1) >0
854 and mfq1.number2 = msiv.sr_instance_id
855 and mfq1.number3 = msiv.organization_id
856 order by msiv.organization_code, mfq.number3;
857
858
859 l_one_record varchar2(32000);
860 l_out_data_index number := 1;
861 l_row_count number := 0;
862
863 begin
864 println('getItemsData in');
865
866 --6726798 bugfix
867 l_category_set_id := getPreference(p_plan_id, 8, 'CATEGORY_SET_ID');
868
869 for c_item in c_item_cur loop
870
871 l_one_record := c_item.node_id || c_field_seperator ||
872 msc_sda_utils.escapeSplChars(c_item.item_segments) || c_field_seperator ||
873 msc_sda_utils.escapeSplChars(c_item.organization_code) || c_field_seperator ||
874 msc_sda_utils.escapeSplChars(c_item.description) || c_field_seperator ||
875 msc_sda_utils.escapeSplChars(c_item.planner_code) || c_field_seperator ||
876 msc_sda_utils.escapeSplChars(c_item.nettable_inventory_quantity) || c_field_seperator ||
877 msc_sda_utils.escapeSplChars(c_item.nonnettable_inventory_quantity) || c_field_seperator ||
878 msc_sda_utils.escapeSplChars(c_item.buyer_name) || c_field_seperator ||
879 msc_sda_utils.escapeSplChars(c_item.mrp_planning_code_text) || c_field_seperator ||
880 msc_sda_utils.escapeSplChars(c_item.critical_component_flag) || c_field_seperator ||
881 msc_sda_utils.escapeSplChars(c_item.wip_supply_type_text) || c_field_seperator ||
882 msc_sda_utils.escapeSplChars(c_item.bom_item_type_text) || c_field_seperator ||
883 msc_sda_utils.escapeSplChars(c_item.end_assembly_pegging_text) || c_field_seperator ||
884 msc_sda_utils.escapeSplChars(c_item.base_model) || c_field_seperator ||
885 msc_sda_utils.escapeSplChars(c_item.category) || c_field_seperator ||
886 msc_sda_utils.escapeSplChars(c_item.category_desc) || c_field_seperator ||
887 msc_sda_utils.escapeSplChars(c_item.product_family_item) || c_field_seperator ||
888 msc_sda_utils.escapeSplChars(c_item.product_family_item_desc) || c_field_seperator ||
889 msc_sda_utils.escapeSplChars(c_item.planning_exception_set) || c_field_seperator ||
890 msc_sda_utils.escapeSplChars(c_item.repetitive_type) || c_field_seperator ||
891 msc_sda_utils.escapeSplChars(c_item.standard_cost) || c_field_seperator ||
892 msc_sda_utils.escapeSplChars(c_item.carrying_cost) || c_field_seperator ||
893 msc_sda_utils.escapeSplChars(c_item.uom_code) || c_field_seperator ||
894 msc_sda_utils.escapeSplChars(c_item.planning_time_fence_date) || c_field_seperator ||
895 msc_sda_utils.escapeSplChars(c_item.planning_time_fence_days) || c_field_seperator ||
896 msc_sda_utils.escapeSplChars(c_item.inventory_use_up_date) || c_field_seperator ||
897 msc_sda_utils.escapeSplChars(c_item.planning_make_buy_code_text) || c_field_seperator ||
898 msc_sda_utils.escapeSplChars(c_item.ato_forecast_control_text) || c_field_seperator ||
899 msc_sda_utils.escapeSplChars(c_item.shrinkage_rate) || c_field_seperator ||
900 msc_sda_utils.escapeSplChars(c_item.preprocessing_lead_time) || c_field_seperator ||
901 msc_sda_utils.escapeSplChars(c_item.full_lead_time) || c_field_seperator ||
902 msc_sda_utils.escapeSplChars(c_item.postprocessing_lead_time) || c_field_seperator ||
903 msc_sda_utils.escapeSplChars(c_item.leadtime_variability) || c_field_seperator ||
904 msc_sda_utils.escapeSplChars(c_item.fixed_lead_time) || c_field_seperator ||
905 msc_sda_utils.escapeSplChars(c_item.variable_lead_time) || c_field_seperator ||
906 msc_sda_utils.escapeSplChars(c_item.fixed_order_quantity) || c_field_seperator ||
907 msc_sda_utils.escapeSplChars(c_item.fixed_lot_multiplier) || c_field_seperator ||
908 msc_sda_utils.escapeSplChars(c_item.minimum_order_quantity) || c_field_seperator ||
909 msc_sda_utils.escapeSplChars(c_item.maximum_order_quantity) || c_field_seperator ||
910 msc_sda_utils.escapeSplChars(c_item.safety_stock_days) || c_field_seperator ||
911 msc_sda_utils.escapeSplChars(c_item.safety_stock_percent) || c_field_seperator ||
912 msc_sda_utils.escapeSplChars(c_item.fixed_days_supply) || c_field_seperator ||
913 msc_sda_utils.escapeSplChars(c_item.rounding_control_type) || c_field_seperator ||
914 msc_sda_utils.escapeSplChars(c_item.effectivity_control_type) || c_field_seperator ||
915 msc_sda_utils.escapeSplChars(c_item.abc_class_name) || c_field_seperator ||
916 msc_sda_utils.escapeSplChars(c_item.selling_price) || c_field_seperator ||
917 msc_sda_utils.escapeSplChars(c_item.margin) || c_field_seperator ||
918 msc_sda_utils.escapeSplChars(c_item.average_discount) || c_field_seperator ||
919 msc_sda_utils.escapeSplChars(c_item.net_selling_price) || c_field_seperator ||
920 msc_sda_utils.escapeSplChars(c_item.service_level) || c_field_seperator ||
921 msc_sda_utils.escapeSplChars(c_item.demand_time_fence_days) || c_field_seperator ||
922 msc_sda_utils.escapeSplChars(c_item.demand_time_fence_date) || c_field_seperator ||
923 msc_sda_utils.escapeSplChars(c_item.safety_stock_code) || c_field_seperator ||
924 msc_sda_utils.escapeSplChars(c_item.atp_flag) || c_field_seperator ||
925 msc_sda_utils.escapeSplChars(c_item.atp_components_flag) || c_field_seperator ||
926 msc_sda_utils.escapeSplChars(c_item.drp_planned) || c_field_seperator ||
927 msc_sda_utils.escapeSplChars(c_item.weight_uom) || c_field_seperator ||
928 msc_sda_utils.escapeSplChars(c_item.unit_weight) || c_field_seperator ||
929 msc_sda_utils.escapeSplChars(c_item.volume_uom) || c_field_seperator ||
930 msc_sda_utils.escapeSplChars(c_item.pip_flag) || c_field_seperator ||
931 msc_sda_utils.escapeSplChars(c_item.create_supply_flag) || c_field_seperator ||
932 msc_sda_utils.escapeSplChars(c_item.substitution_window) || c_field_seperator ||
933 msc_sda_utils.escapeSplChars(c_item.convergence_text) || c_field_seperator ||
934 msc_sda_utils.escapeSplChars(c_item.divergence_text) || c_field_seperator ||
935 msc_sda_utils.escapeSplChars(c_item.continous_transfer_text) || c_field_seperator ||
936 msc_sda_utils.escapeSplChars(c_item.exclude_from_budget) || c_field_seperator ||
937 msc_sda_utils.escapeSplChars(c_item.days_tgt_inv_window) || c_field_seperator ||
938 msc_sda_utils.escapeSplChars(c_item.days_max_inv_window) || c_field_seperator ||
939 msc_sda_utils.escapeSplChars(c_item.days_tgt_inv_supply) || c_field_seperator ||
940 msc_sda_utils.escapeSplChars(c_item.days_max_inv_supply) || c_field_seperator ||
941 msc_sda_utils.escapeSplChars(c_item.shelf_life_days) || c_field_seperator ||
942 msc_sda_utils.escapeSplChars(c_item.release_time_fence_days) || c_field_seperator ||
943 msc_sda_utils.escapeSplChars(c_item.min_shelf_life_days) || c_field_seperator ||
944 msc_sda_utils.escapeSplChars(c_item.unit_volume) || c_field_seperator ||
945 msc_sda_utils.escapeSplChars(c_item.max_early_days) || c_field_seperator ||
946 msc_sda_utils.escapeSplChars(c_item.demand_fulfillment_lt) || c_field_seperator ||
947 msc_sda_utils.escapeSplChars(to_char(c_item.end_of_life_date, c_datetime_format)) || c_field_seperator ||
948 msc_sda_utils.escapeSplChars(c_item.fcst_rule_for_demands_text) || c_field_seperator ||
949 msc_sda_utils.escapeSplChars(c_item.fcst_rule_for_returns_text) || c_field_seperator ||
950 msc_sda_utils.escapeSplChars(c_item.interarrival_time) || c_field_seperator ||
951 msc_sda_utils.escapeSplChars(to_char(c_item.life_time_buy_date, c_datetime_format)) || c_field_seperator ||
952 msc_sda_utils.escapeSplChars(c_item.preposition_point) || c_field_seperator ||
953 msc_sda_utils.escapeSplChars(c_item.repair_cost) || c_field_seperator ||
954 msc_sda_utils.escapeSplChars(c_item.repair_lead_time) || c_field_seperator ||
955 msc_sda_utils.escapeSplChars(c_item.repair_program_text) || c_field_seperator ||
956 msc_sda_utils.escapeSplChars(c_item.repair_yield) || c_field_seperator ||
957 msc_sda_utils.escapeSplChars(c_item.std_dmd_over_horizon) || c_field_seperator ||
958 msc_sda_utils.escapeSplChars(c_item.repetitive_planning_flag_text);
959
960 l_row_count := l_row_count + 1;
961
962 if (l_row_count = 1) then
963 l_one_record := c_sdview_items_data || c_bang_separator || c_record_seperator || l_one_record;
964 end if;
965 msc_sda_utils.addRecordToOutStream(l_one_record, l_out_data_index, p_out_data);
966 end loop;
967 println('getItemsData out');
968 end getItemsData;
969
970 procedure getExceptionsData(p_plan_id number, p_chain_query_id number, p_org_query_id number,
971 p_out_data in out nocopy maxCharTbl) is
972
973 cursor c_excp_summary_cur is
974 select med.exception_type,
975 msc_get_name.lookup_meaning('MRP_EXCEPTION_CODE_TYPE', med.exception_type) exception_type_text,
976 count(*) excp_all_count,
977 sum(decode(nvl(action_taken,2),2,1,0)) excp_no_count
978 from msc_exception_details med,
979 msc_form_query mfq, --items
980 msc_form_query mfq1 --orgs
981 where med.plan_id = p_plan_id
982 and med.inventory_item_id = mfq.number2
983 and mfq.query_id = p_chain_query_id
984 and mfq1.query_id = p_org_query_id
985 and nvl(mfq1.number1,1) >0
986 and mfq1.number2 = med.sr_instance_id
987 and mfq1.number3 = med.organization_id
988 group by med.exception_type,
989 msc_get_name.lookup_meaning('MRP_EXCEPTION_CODE_TYPE', med.exception_type)
990 union all
991 select -99 exception_type,
992 msc_get_name.lookup_meaning('MSC_EXCEPTION_GROUP', 10) exception_type_text,
993 count(*) excp_all_count,
994 0 excp_no_count
995 from msc_supplies ms,
996 msc_system_items msi,
997 msc_form_query mfq, --items
998 msc_form_query mfq1 --orgs
999 where ms.plan_id = p_plan_id
1000 and ms.inventory_item_id = mfq.number2
1001 and mfq.query_id = p_chain_query_id
1002 and mfq1.query_id = p_org_query_id
1003 and nvl(mfq1.number1,1) >0
1004 and mfq1.number2 = ms.sr_instance_id
1005 and mfq1.number3 = ms.organization_id
1006 and ms.plan_id = msi.plan_id
1007 and ms.sr_instance_id = msi.sr_instance_id
1008 and ms.organization_id = msi.organization_id
1009 and ms.inventory_item_id = msi.inventory_item_id
1010 and ( (ms.order_type = 13)
1011 or (ms.order_type = 5
1012 and nvl(ms.implemented_quantity,0)+nvl(ms.quantity_in_process,0) < nvl(ms.firm_quantity,ms.new_order_quantity)
1013 and (nvl(msi.lots_exist,0) <> 2 or ms.new_order_quantity =0)
1014 and (((ms.source_organization_id <> ms.organization_id or ms.source_sr_instance_id <> ms.sr_instance_id or ms.source_supplier_id is not null)
1015 and msi.purchasing_enabled_flag = 1)
1016 or (ms.source_organization_id is null and ms.source_supplier_id is null and msi.planning_make_buy_code = 2 and msi.purchasing_enabled_flag = 1)
1017 or (ms.source_organization_id = ms.organization_id and ms.source_sr_instance_id = ms.sr_instance_id and msi.build_in_wip_flag = 1)
1018 or (ms.source_organization_id is null and ms.source_supplier_id is null and msi.planning_make_buy_code = 1 and msi.build_in_wip_flag = 1))
1019 )
1020 )
1021 group by -99,
1022 msc_get_name.lookup_meaning('MSC_EXCEPTION_GROUP', 10);
1023 --pabram.need to add recommendations
1024
1025 l_one_record varchar2(32000);
1026 l_out_data_index number := 1;
1027 l_row_count number := 0;
1028 begin
1029 println('getExceptionsData in');
1030 for c_excp_summary in c_excp_summary_cur loop
1031 l_one_record :=
1032 msc_sda_utils.escapeSplChars(p_chain_query_id||'-'||c_excp_summary.exception_type) || c_field_seperator ||
1033 msc_sda_utils.escapeSplChars(c_excp_summary.exception_type_text) || c_field_seperator ||
1034 msc_sda_utils.escapeSplChars(c_excp_summary.excp_all_count) || c_field_seperator ||
1035 msc_sda_utils.escapeSplChars(c_excp_summary.excp_no_count);
1036
1037 l_row_count := l_row_count + 1;
1038 if (l_row_count = 1) then
1039 l_one_record := c_sdview_excp_data || c_bang_separator || c_record_seperator || l_one_record;
1040 end if;
1041 msc_sda_utils.addRecordToOutStream(l_one_record, l_out_data_index, p_out_data);
1042 end loop;
1043 println('getExceptionsData out');
1044 end getExceptionsData;
1045
1046 procedure getWorkSheetPrefData(p_out_data in out nocopy maxCharTbl, p_refresh_flag number) is
1047 cursor c_userpref_cur is
1048 select name, key, nvl(value, c_null_space) value
1049 from msc_analyze_preference
1050 where module = c_sda_pref_set
1051 and userid= fnd_global.user_id
1052 order by name, key;
1053
1054 l_one_record varchar2(32000);
1055 l_out_data_index number := 1;
1056 l_row_count number := 0;
1057 l_stream_label varchar2(200);
1058 begin
1059 println('getWorkSheetPrefData in');
1060
1061 if (p_refresh_flag = 1) then
1062 l_stream_label := c_sdview_prefset_data_ref;
1063 else
1064 l_stream_label := c_sdview_prefset_data;
1065 end if;
1066 for c_userpref in c_userpref_cur
1067 loop
1068 l_one_record :=
1069 msc_sda_utils.escapeSplChars(c_userpref.name) || c_field_seperator ||
1070 msc_sda_utils.escapeSplChars(c_userpref.key) || c_field_seperator ||
1071 msc_sda_utils.escapeSplChars(c_userpref.value);
1072
1073 l_row_count := l_row_count + 1;
1074 if (l_row_count = 1) then
1075 l_one_record := l_stream_label || c_bang_separator || c_record_seperator || l_one_record;
1076 end if;
1077 msc_sda_utils.addRecordToOutStream(l_one_record, l_out_data_index, p_out_data);
1078 end loop;
1079 println('getWorkSheetPrefData out');
1080 end getWorkSheetPrefData;
1081
1082 procedure sendSDRowTypes(p_out_data IN OUT NOCOPY msc_sda_utils.maxCharTbl) is
1083 cursor c_sd_rowtypes_cur is
1084 select lookup_code, meaning
1085 from mfg_lookups
1086 where lookup_type = c_sdview_rowtype_lookup
1087 order by 1;
1088 l_one_record varchar2(32000) := null;
1089 l_token varchar2(1000);
1090 l_out_data_index number := 1;
1091 l_flag number; -- 0 or null - sum, 1 - avg, 2- use-last-record-in-bucket, 3 show min
1092 l_visible_flag number; -- 0 hide, 1 show
1093 l_total_row_flag number; -- 1 yes, 2 no
1094 begin
1095 for c_sd_rowtypes in c_sd_rowtypes_cur
1096 loop
1097 l_flag := 0;
1098 l_visible_flag := 1;
1099 l_total_row_flag := 2;
1100
1101 if (c_sd_rowtypes.lookup_code in (45) ) then
1102 --safety stock qty
1103 l_flag := 1;
1104 end if;
1105 if (c_sd_rowtypes.lookup_code in (31,32,44) ) then
1106 --31 Projected Available Balance
1107 --32 Projected On-hand
1108 --44 Projected Available Balance (Defective)
1109 l_flag := 2;
1110 end if;
1111 if (c_sd_rowtypes.lookup_code in (26,28,29) ) then
1112 --26 Safety Stock (Days of Supply)
1113 --28 Projected Service Level
1114 --29 Target Service Level
1115 l_flag := 3;
1116 end if;
1117 if (c_sd_rowtypes.lookup_code in (24,26,27,28,29,30) ) then
1118 --24 Planned Warranty Orders
1119 --26 Safety Stock (Days of Supply)
1120 --27 Total Unconstrained Demand
1121 --28 Projected Service Level (%)
1122 --29 Target Service Level (%)
1123 --30 Maximum Level
1124 l_visible_flag := 0;
1125 end if;
1126
1127 if (c_sd_rowtypes.lookup_code in (4,7,8,9,25,27,36,43) ) then
1128 --4 Independent Demand
1129 --7 Dependent Demand
1130 --8 Other Demand
1131 --9 Total Demand
1132 --25 Total Supply
1133 --27 Total Unconstrained Demand
1134 --36 Total Defective Part Demand
1135 --43 Total Defective Supply
1136 l_total_row_flag := 1;
1137 end if;
1138
1139 l_token := c_sd_rowtypes.lookup_code
1140 || c_field_seperator || msc_sda_utils.escapeSplChars(c_sd_rowtypes.meaning)
1141 || c_field_seperator || l_flag || c_field_seperator || l_visible_flag || c_field_seperator || l_total_row_flag;
1142 if (l_one_record is null) then
1143 l_one_record := c_sdview_rowtypes || c_bang_separator || c_sd_total_row_types || c_record_seperator || l_token;
1144 else
1145 l_one_record := l_one_record || c_record_seperator || l_token;
1146 end if;
1147 end loop;
1148 msc_sda_utils.addRecordToOutStream(l_one_record, l_out_data_index, p_out_data);
1149 end sendSDRowTypes;
1150
1151 procedure sendFcstRowTypes(p_out_data IN OUT NOCOPY msc_sda_utils.maxCharTbl) is
1152 cursor c_fcst_rowtypes_cur is
1153 select lookup_code, meaning
1154 from mfg_lookups
1155 where lookup_type = c_fcstview_rowtype_lookup
1156 order by 1;
1157 l_one_record varchar2(32000) := null;
1158 l_token varchar2(1000);
1159 l_out_data_index number := 1;
1160 l_flag number; -- 0 - sum, 1 - avg, 2- use-last-record-in-bucket
1161 l_visible_flag number; -- 0 hide, 1 show
1162 l_total_row_flag number; -- 1 yes, 2 no
1163 begin
1164 for c_fcst_rowtypes in c_fcst_rowtypes_cur
1165 loop
1166 l_flag := 0;
1167 l_visible_flag := 1;
1168 l_total_row_flag := 2;
1169
1170 if (c_fcst_rowtypes.lookup_code in (8,13,16)) then
1171 --8 Best Fit forecast
1172 --13 Returns Best Fit forecast
1173 l_visible_flag := 0;
1174 end if;
1175 --6657610 bugfix,
1176
1177 if (c_fcst_rowtypes.lookup_code in (1,9)) then
1178 --1 Total Forecast
1179 --9 Total Returns Forecast
1180 l_total_row_flag := 1;
1181 end if;
1182
1183 l_token := c_fcst_rowtypes.lookup_code
1184 || c_field_seperator || msc_sda_utils.escapeSplChars(c_fcst_rowtypes.meaning)
1185 || c_field_seperator || l_flag || c_field_seperator || l_visible_flag || c_field_seperator || l_total_row_flag;
1186 if (l_one_record is null) then
1187 l_one_record := c_fcstview_rowtypes || c_bang_separator || c_fcst_total_row_types || c_record_seperator || l_token;
1188 else
1189 l_one_record := l_one_record || c_record_seperator || l_token;
1190 end if;
1191 end loop;
1192 msc_sda_utils.addRecordToOutStream(l_one_record, l_out_data_index, p_out_data);
1193 end sendFcstRowTypes;
1194
1195 procedure sendHistRowTypes(p_out_data IN OUT NOCOPY msc_sda_utils.maxCharTbl) is
1196 cursor c_hist_rowtypes_cur is
1197 select lookup_code, meaning
1198 from mfg_lookups
1199 where lookup_type = c_histview_rowtype_lookup
1200 order by 1;
1201 l_one_record varchar2(32000) := null;
1202 l_token varchar2(1000);
1203 l_out_data_index number := 1;
1204 l_flag number; -- 0 - sum, 1 - avg, 2- use-last-record-in-bucket
1205 l_visible_flag number; -- 0 hide, 1 show
1206 l_total_row_flag number; -- 1 yes, 2 no
1207 begin
1208 for c_hist_rowtypes in c_hist_rowtypes_cur
1209 loop
1210 l_flag := 0;
1211 l_visible_flag := 1;
1212 l_total_row_flag := 2;
1213 l_token := c_hist_rowtypes.lookup_code
1214 || c_field_seperator || msc_sda_utils.escapeSplChars(c_hist_rowtypes.meaning)
1215 || c_field_seperator || l_flag || c_field_seperator || l_visible_flag || c_field_seperator || l_total_row_flag;
1216 if (l_one_record is null) then
1217 l_one_record := c_histview_rowtypes || c_bang_separator || c_hist_total_row_types || c_record_seperator || l_token;
1218 else
1219 l_one_record := l_one_record || c_record_seperator || l_token;
1220 end if;
1221 end loop;
1222 msc_sda_utils.addRecordToOutStream(l_one_record, l_out_data_index, p_out_data);
1223 end sendHistRowTypes;
1224
1225 function getTokenizedMsg(p_msg varchar2) return varchar2 is
1226 l_msg_text varchar2(300);
1227 begin
1228 FND_MESSAGE.set_name('MSC', p_msg);
1229 l_msg_text:= FND_MESSAGE.get;
1230 if (l_msg_text is null) then
1231 l_msg_text:= p_msg|| c_field_seperator || p_msg;
1232 else
1233 l_msg_text:= p_msg|| c_field_seperator || msc_sda_utils.escapeSplChars(l_msg_text);
1234 end if;
1235 return l_msg_text;
1236 end getTokenizedMsg;
1237
1238 procedure addMessages(p_msg varchar2, p_out_data_index in out nocopy number,
1239 p_out_data IN OUT NOCOPY msc_sda_utils.maxCharTbl) is
1240 l_one_record varchar2(1200) := null;
1241 l_token varchar2(1000);
1242 begin
1243 l_one_record := getTokenizedMsg(p_msg);
1244 msc_sda_utils.addRecordToOutStream(l_one_record, p_out_data_index, p_out_data);
1245 end addMessages;
1246
1247 procedure sendNlsMessages(p_out_data IN OUT NOCOPY msc_sda_utils.maxCharTbl) is
1248 l_one_record varchar2(32000) := null;
1249 l_token varchar2(1000);
1250 l_out_data_index number := 1;
1251 begin
1252 l_token := getTokenizedMsg('MENU_ORDER_DETAILS');
1253 l_one_record := c_sdview_nls_messages || c_bang_separator || c_record_seperator || l_token;
1254 msc_sda_utils.addRecordToOutStream(l_one_record, l_out_data_index, p_out_data);
1255
1256 addMessages('MENU_FORECAST_RULE', l_out_data_index, p_out_data);
1257 addMessages('MENU_CALENDAR', l_out_data_index, p_out_data);
1258 addMessages('MENU_SOURCES', l_out_data_index, p_out_data);
1259 addMessages('MENU_SUPPLY_CHAIN_BILL', l_out_data_index, p_out_data);
1260 addMessages('MENU_DESTINATION', l_out_data_index, p_out_data);
1261 addMessages('MENU_SUPPLY_CHAIN', l_out_data_index, p_out_data);
1262 addMessages('PROMPT_ADD_NEW_COMMENT', l_out_data_index, p_out_data);
1263 addMessages('MENU_EXCP_ALL', l_out_data_index, p_out_data);
1264 addMessages('MENU_EXCP_ACTION_TAKEN', l_out_data_index, p_out_data);
1265 addMessages('MENU_EXCP_NO_ACTION', l_out_data_index, p_out_data);
1266 addMessages('LABEL_WORKSHEET_PREF', l_out_data_index, p_out_data);
1267 addMessages('DLG_TITLE_GRAPH', l_out_data_index, p_out_data);
1268 addMessages('DLG_MSG_BAD_GRID_SEL', l_out_data_index, p_out_data);
1269 addMessages('MENU_HIDE_COLUMN', l_out_data_index, p_out_data);
1270 addMessages('MENU_CHOOSE_COLUMNS', l_out_data_index, p_out_data);
1271 addMessages('DLG_TITLE_CHOOSE_COLUMNS', l_out_data_index, p_out_data);
1272 addMessages('BTN_LABEL_OK', l_out_data_index, p_out_data);
1273 addMessages('BTN_LABEL_CANCEL', l_out_data_index, p_out_data);
1274 addMessages('LBL_NOT_ENOUGH_DATA', l_out_data_index, p_out_data);
1275 addMessages('GRAPH_ROW_TYPE_PREF', l_out_data_index, p_out_data);
1276 addMessages('GRAPH_SEL_ROWTYPES', l_out_data_index, p_out_data);
1277 addMessages('GRAPH_AVAIL_ROWTYPES', l_out_data_index, p_out_data);
1278 addMessages('GRAPH_BTN_LABEL_REFRESH', l_out_data_index, p_out_data);
1279 addMessages('GRAPH_TIME_INTERVAL', l_out_data_index, p_out_data);
1280 addMessages('GRAPH_ITEMS', l_out_data_index, p_out_data);
1281 addMessages('GRAPH_CHART_TYPE', l_out_data_index, p_out_data);
1282 addMessages('GRAPH_BAR', l_out_data_index, p_out_data);
1283 addMessages('GRAPH_LINE', l_out_data_index, p_out_data);
1284 addMessages('GRAPH_COMBO', l_out_data_index, p_out_data);
1285 addMessages('GRAPH_LEGEND', l_out_data_index, p_out_data);
1286 addMessages('GRAPH_LABEL_SHOW', l_out_data_index, p_out_data);
1287 addMessages('GRAPH_LABEL_HIDE', l_out_data_index, p_out_data);
1288 addMessages('GRAPH_PREF', l_out_data_index, p_out_data);
1289 addMessages('GRID_LABEL_PAST', l_out_data_index, p_out_data);
1290 addMessages('MSC_FORECAST_RULE_RETURNS', l_out_data_index, p_out_data);
1291 addMessages('MSC_ITEM_FAILURE_RATES', l_out_data_index, p_out_data);
1292 addMessages('PROMPT_NO_TABLEDATA_ROWS', l_out_data_index, p_out_data);
1293 addMessages('GRAPH_BTN_LABEL_CLOSE', l_out_data_index, p_out_data);
1294 addMessages('SDA_SAVE_FOLDER', l_out_data_index, p_out_data);
1295 addMessages('MSC_EC_SAVE_SETTINGS', l_out_data_index, p_out_data);
1296 end sendNlsMessages;
1297
1298 procedure set_shuttle_from_to(p_lookup_type varchar2, p_lookup_code_list varchar2,
1299 p_from_list out nocopy varchar2, p_to_list out nocopy varchar2) is
1300
1301 TYPE lCurTyp IS REF CURSOR;
1302 theCursor lCurTyp;
1303
1304 l_token varchar2(500);
1305 l_one_record varchar2(32000);
1306
1307 l_sql_stmt varchar2(500);
1308 l_sql_stmt1 varchar2(200);
1309 l_sql_stmt2 varchar2(200);
1310 l_sql_stmt3 varchar2(200);
1311 l_sql_stmt4 varchar2(200);
1312 l_lookup_code number;
1313 l_meaning varchar2(250);
1314 begin
1315 l_sql_stmt1 := 'select lookup_code, meaning from mfg_lookups where lookup_type = :1 ';
1316 l_sql_stmt4 := ' and lookup_code not in (8,13,16) ';
1317 l_sql_stmt2 := 'and lookup_code not in ('|| p_lookup_code_list ||') order by 1';
1318 l_sql_stmt3 := 'and lookup_code in ('|| p_lookup_code_list ||') order by 1';
1319
1320 if (p_lookup_type = c_fcstview_rowtype_lookup) then
1321 l_sql_stmt := l_sql_stmt1||l_sql_stmt4||l_sql_stmt2;
1322 else
1323 l_sql_stmt := l_sql_stmt1||l_sql_stmt2;
1324 end if;
1325 open theCursor for l_sql_stmt using p_lookup_type;
1326 loop
1327 fetch theCursor into l_lookup_code, l_meaning;
1328 exit when theCursor%notfound;
1329 l_token := l_lookup_code || c_field_seperator || msc_sda_utils.escapeSplChars(l_meaning);
1330 if (l_one_record is null) then
1331 l_one_record := SET_FROM_LIST || c_bang_separator || l_token;
1332 else
1333 l_one_record := l_one_record || c_record_seperator || l_token;
1334 end if;
1335 end loop;
1336 close theCursor;
1337 p_from_list := l_one_record;
1338
1339 l_one_record := null;
1340 if (p_lookup_type = c_fcstview_rowtype_lookup) then
1341 l_sql_stmt := l_sql_stmt1||l_sql_stmt4||l_sql_stmt3;
1342 else
1343 l_sql_stmt := l_sql_stmt1||l_sql_stmt3;
1344 end if;
1345 open theCursor for l_sql_stmt using p_lookup_type;
1346 loop
1347 fetch theCursor into l_lookup_code, l_meaning;
1348 exit when theCursor%notfound;
1349 l_token := l_lookup_code || c_field_seperator || msc_sda_utils.escapeSplChars(l_meaning);
1350 if (l_one_record is null) then
1351 l_one_record := SET_TO_LIST || c_bang_separator || l_token;
1352 else
1353 l_one_record := l_one_record || c_record_seperator || l_token;
1354 end if;
1355 end loop;
1356 close theCursor;
1357 p_to_list := l_one_record;
1358 end set_shuttle_from_to;
1359
1360 procedure save_item_folder(p_folder_name varchar, p_folder_value varchar, p_default_flag number, p_public_flag number) is
1361 pragma autonomous_transaction;
1362 cursor c_count (p_module_name varchar2, p_name varchar) is
1363 select count(*)
1364 from msc_analyze_preference
1365 where module = p_module_name
1366 and name = p_name;
1367
1368 l_temp number;
1369 l_default_flag number := nvl(p_default_flag,2);
1370 l_public_flag number := nvl(p_public_flag,2);
1371 begin
1372 commit;
1373
1374 open c_count(c_sda_save_item_folder, p_folder_name);
1375 fetch c_count into l_temp;
1376 close c_count;
1377
1378 if (l_temp <> 0) then
1379 update msc_analyze_preference
1380 set defaultset = to_char(l_default_flag),
1381 public_flag = l_public_flag,
1382 value = p_folder_value
1383 where name = p_folder_name
1384 and module = c_sda_save_item_folder;
1385 else
1386 insert into msc_analyze_preference
1387 (userid, name, module, key, value, defaultset, public_flag,
1388 last_update_date, last_updated_by, creation_date, created_by, last_update_login)
1389 values (fnd_global.user_id, p_folder_name, c_sda_save_item_folder, c_sda_save_item_folder, p_folder_value,
1390 to_char(l_default_flag), l_public_flag,
1391 sysdate, -1, sysdate, -1, -1);
1392 end if;
1393 commit;
1394 end save_item_folder;
1395
1396 procedure update_close_settings (p_event varchar2, p_event_list varchar2) is
1397 pragma autonomous_transaction;
1398
1399 cursor c_count (p_module_name varchar2) is
1400 select count(*)
1401 from msc_analyze_preference
1402 where module = p_module_name
1403 and userid = fnd_global.user_id;
1404 l_temp number;
1405
1406 begin
1407 commit;
1408 /*
1409 if (p_event = c_sda_save_item_folder) then
1410 open c_count(c_sda_save_item_folder);
1411 fetch c_count into l_temp;
1412 close c_count;
1413
1414 if (l_temp <> 0) then
1415 delete from msc_analyze_preference
1416 where module = c_sda_save_item_folder
1417 and userid = fnd_global.user_id;
1418 end if;
1419
1420 insert into msc_analyze_preference
1421 (userid, name, module, key, value, defaultset,
1422 last_update_date, last_updated_by, creation_date, created_by, last_update_login)
1423 values (fnd_global.user_id, c_sda_save_item_folder, c_sda_save_item_folder, c_sda_save_item_folder, p_event_list, 'N',
1424 sysdate, -1, sysdate, -1, -1);
1425 end if;
1426 */
1427
1428 if (p_event = c_sda_save_settings) then
1429 open c_count(c_sda_save_settings);
1430 fetch c_count into l_temp;
1431 close c_count;
1432
1433 if (l_temp <> 0) then
1434 delete from msc_analyze_preference
1435 where module = c_sda_save_settings
1436 and userid = fnd_global.user_id;
1437 end if;
1438
1439 insert into msc_analyze_preference
1440 (userid, name, module, key, value, defaultset,
1441 last_update_date, last_updated_by, creation_date, created_by, last_update_login)
1442 values (fnd_global.user_id, c_sda_save_settings, c_sda_save_settings, c_sda_save_settings, p_event_list, 'N',
1443 sysdate, -1, sysdate, -1, -1);
1444 end if;
1445 commit;
1446 end update_close_settings;
1447
1448 procedure send_close_settings(p_item_folder_save_list out nocopy varchar2,
1449 p_save_settings_list out nocopy varchar2) is
1450
1451 cursor c_pref (p_module_name varchar2) is
1452 select value
1453 from msc_analyze_preference
1454 where module = p_module_name
1455 and userid = fnd_global.user_id;
1456 begin
1457 open c_pref(c_sda_save_item_folder);
1458 fetch c_pref into p_item_folder_save_list;
1459 close c_pref;
1460 if (p_item_folder_save_list is not null) then
1461 p_item_folder_save_list := c_sda_save_item_folder || c_bang_separator || c_record_seperator || p_item_folder_save_list;
1462 end if;
1463
1464 open c_pref(c_sda_save_settings);
1465 fetch c_pref into p_save_settings_list;
1466 close c_pref;
1467 if (p_save_settings_list is not null) then
1468 p_save_settings_list := c_sda_save_settings || c_bang_separator || p_save_settings_list;
1469 end if;
1470 end send_close_settings;
1471
1472 procedure update_pref_set (p_name varchar2, p_desc varchar2,
1473 p_days number, p_weeks number, p_periods number,
1474 p_factor number, p_decimal_places number,
1475 p_sd_row_list varchar2, p_fcst_row_list varchar2) is
1476 pragma autonomous_transaction;
1477
1478 cursor c_count is
1479 select count(*)
1480 from msc_analyze_preference
1481 where module = c_sda_pref_set
1482 and name = p_name;
1483 l_temp number;
1484 begin
1485 commit;
1486 open c_count;
1487 fetch c_count into l_temp;
1488 close c_count;
1489
1490 if (l_temp = 0) then
1491 insert into msc_analyze_preference
1492 (userid, name, module, key, value, defaultset,
1493 last_update_date, last_updated_by, creation_date, created_by, last_update_login)
1494 values (fnd_global.user_id, p_name, c_sda_pref_set, c_keys_days, p_days, 'N',
1495 sysdate, -1, sysdate, -1, -1);
1496
1497 insert into msc_analyze_preference
1498 (userid, name, module, key, value, defaultset,
1499 last_update_date, last_updated_by, creation_date, created_by, last_update_login)
1500 values (fnd_global.user_id, p_name, c_sda_pref_set, c_keys_weeks, p_weeks, 'N',
1501 sysdate, -1, sysdate, -1, -1);
1502
1503 insert into msc_analyze_preference
1504 (userid, name, module, key, value, defaultset,
1505 last_update_date, last_updated_by, creation_date, created_by, last_update_login)
1506 values (fnd_global.user_id, p_name, c_sda_pref_set, c_keys_periods, p_periods, 'N',
1507 sysdate, -1, sysdate, -1, -1);
1508
1509 insert into msc_analyze_preference
1510 (userid, name, module, key, value, defaultset,
1511 last_update_date, last_updated_by, creation_date, created_by, last_update_login)
1512 values (fnd_global.user_id, p_name, c_sda_pref_set, c_keys_factor, p_factor, 'N',
1513 sysdate, -1, sysdate, -1, -1);
1514
1515 insert into msc_analyze_preference
1516 (userid, name, module, key, value, defaultset,
1517 last_update_date, last_updated_by, creation_date, created_by, last_update_login)
1518 values (fnd_global.user_id, p_name, c_sda_pref_set, c_keys_decimals, p_decimal_places, 'N',
1519 sysdate, -1, sysdate, -1, -1);
1520
1521 insert into msc_analyze_preference
1522 (userid, name, module, key, value, defaultset,
1523 last_update_date, last_updated_by, creation_date, created_by, last_update_login)
1524 values (fnd_global.user_id, p_name, c_sda_pref_set, c_keys_sd, p_sd_row_list, 'N',
1525 sysdate, -1, sysdate, -1, -1);
1526
1527 insert into msc_analyze_preference
1528 (userid, name, module, key, value, defaultset,
1529 last_update_date, last_updated_by, creation_date, created_by, last_update_login)
1530 values (fnd_global.user_id, p_name, c_sda_pref_set, c_keys_fcst, p_fcst_row_list, 'N',
1531 sysdate, -1, sysdate, -1, -1);
1532 else
1533 update msc_analyze_preference
1534 set value = p_days
1535 where module = c_sda_pref_set and name = p_name and key = c_keys_days;
1536
1537 update msc_analyze_preference
1538 set value = p_weeks
1539 where module = c_sda_pref_set and name = p_name and key = c_keys_weeks;
1540
1541 update msc_analyze_preference
1542 set value = p_periods
1543 where module = c_sda_pref_set and name = p_name and key = c_keys_periods;
1544
1545 update msc_analyze_preference
1546 set value = p_factor
1547 where module = c_sda_pref_set and name = p_name and key = c_keys_factor;
1548
1549 update msc_analyze_preference
1550 set value = p_decimal_places
1551 where module = c_sda_pref_set and name = p_name and key = c_keys_decimals;
1552
1553 update msc_analyze_preference
1554 set value = p_sd_row_list
1555 where module = c_sda_pref_set and name = p_name and key = c_keys_sd;
1556
1557 update msc_analyze_preference
1558 set value = p_fcst_row_list
1559 where module = c_sda_pref_set and name = p_name and key = c_keys_fcst;
1560 end if;
1561 commit;
1562 end update_pref_set;
1563
1564 end MSC_SDA_UTILS;