[Home] [Help]
19: l_dept_filter_cnt number;
20: l_res_filter_cnt number;
21: l_exception_filter_cnt number;
22: begin
23: msc_phub_util.log('msc_res_plan_pkg.prepare_row_dtls('||p_query_id||', '||p_plan_id||
24: ','||p_page_size||')');
25:
26: delete from msc_form_query where query_id = p_query_id;
27: msc_phub_util.log('delete from msc_form_query: '||sql%rowcount);
23: msc_phub_util.log('msc_res_plan_pkg.prepare_row_dtls('||p_query_id||', '||p_plan_id||
24: ','||p_page_size||')');
25:
26: delete from msc_form_query where query_id = p_query_id;
27: msc_phub_util.log('delete from msc_form_query: '||sql%rowcount);
28: commit;
29:
30: msc_hp_util.prepare_filters(p_query_id, msc_hp_util.ft_organization, p_organization_filters);
31: msc_hp_util.prepare_filters(p_query_id, msc_hp_util.ft_department, p_department_filters);
57: into l_item_filter_cnt
58: from msc_form_query
59: where query_id = p_query_id and number1 = msc_hp_util.ft_item;
60:
61: msc_phub_util.log('l_org_filter_cnt = '||l_org_filter_cnt||', '||
62: 'l_dept_filter_cnt = '||l_dept_filter_cnt||', '||
63: 'l_res_filter_cnt = '||l_res_filter_cnt||', '||
64: 'l_exception_filter_cnt = '||l_exception_filter_cnt||', '||
65: 'l_item_filter_cnt = '||l_item_filter_cnt);
64: 'l_exception_filter_cnt = '||l_exception_filter_cnt||', '||
65: 'l_item_filter_cnt = '||l_item_filter_cnt);
66:
67: delete from msc_hp_row_dtls where query_id = p_query_id;
68: msc_phub_util.log('delete from msc_hp_row_dtls: '||sql%rowcount);
69: commit;
70:
71: if (l_exception_filter_cnt > 0) then
72: insert into msc_form_query(query_id, number1, number2, number3,
96: and mfp1.organization_id = mtp1.sr_tp_id
97: and mtp1.partner_type = 3
98: and (l_org_filter_cnt = 0 or mtp1.organization_code in (select char1 from msc_form_query where query_id = p_query_id and number1 = msc_hp_util.ft_organization))
99: and (l_item_filter_cnt = 0 or mfp1.inventory_item_id in (select number2 from msc_form_query where query_id = p_query_id and number1 = msc_hp_util.ft_item));
100: msc_phub_util.log('insert into msc_form_query: '||sql%rowcount);
101: commit;
102:
103: insert into msc_hp_row_dtls(
104: query_id,
179: and r.resource_id = mdp.resource_id
180: and (l_dept_filter_cnt = 0 or mdp.department_code in (select char1 from msc_form_query where query_id = p_query_id and number1 = msc_hp_util.ft_department))
181: and (l_res_filter_cnt = 0 or mdp.resource_code in (select char1 from msc_form_query where query_id = p_query_id and number1 = msc_hp_util.ft_resource))
182: ) t;
183: msc_phub_util.log('insert into msc_hp_row_dtls: '||sql%rowcount);
184: commit;
185: else
186: insert into msc_hp_row_dtls(
187: query_id,
221: and mdp.resource_id > 0
222: and (l_org_filter_cnt = 0 or mtp.organization_code in (select char1 from msc_form_query where query_id = p_query_id and number1 = msc_hp_util.ft_organization))
223: and (l_dept_filter_cnt = 0 or mdp.department_code in (select char1 from msc_form_query where query_id = p_query_id and number1 = msc_hp_util.ft_department))
224: and (l_res_filter_cnt = 0 or mdp.resource_code in (select char1 from msc_form_query where query_id = p_query_id and number1 = msc_hp_util.ft_resource));
225: msc_phub_util.log('insert into msc_hp_row_dtls: '||sql%rowcount);
226: commit;
227: end if;
228:
229: insert into msc_hp_row_dtls(
235: last_update_date, last_updated_by, last_update_login)
236: values (p_query_id, -1, p_plan_id, 1,
237: fnd_global.user_id, sysdate,
238: sysdate, fnd_global.user_id, fnd_global.login_id);
239: msc_phub_util.log('insert into msc_hp_row_dtls: '||sql%rowcount);
240: commit;
241:
242: g_page_size := p_page_size;
243: g_fetch_size := ceil(g_max_fetch_size/g_page_size) * g_page_size;
240: commit;
241:
242: g_page_size := p_page_size;
243: g_fetch_size := ceil(g_max_fetch_size/g_page_size) * g_page_size;
244: msc_phub_util.log('g_max_fetch_size = '||g_max_fetch_size||', '||
245: 'g_page_size = '||g_page_size||', '||
246: 'g_fetch_size = '||g_fetch_size);
247:
248: end prepare_row_dtls;
253: l_constrained_plan number := null;
254: l_plan_id number;
255: l_past_date date;
256: begin
257: msc_phub_util.log('msc_res_plan_pkg.populate_data('||p_query_id||', '||p_summary||')');
258:
259: begin
260: select h.plan_id, b.bkt_start_date
261: into l_plan_id, l_past_date
264: and h.data_flag = decode(p_summary, 1, h.data_flag, 3)
265: and h.plan_id = b.plan_id
266: and b.bucket_type = 0
267: and rownum = 1;
268: msc_phub_util.log('l_plan_id = '||l_plan_id||', l_past_date = '||l_past_date);
269: exception
270: when no_data_found then return;
271: end;
272:
277: decode(p_summary, 1, -1, h.row_index) row_index
278: from msc_hp_row_dtls h
279: where h.query_id = p_query_id
280: and h.data_flag = decode(p_summary, 1, h.data_flag, 3));
281: msc_phub_util.log('delete from msc_res_plan_data: '||sql%rowcount);
282: commit;
283:
284: l_constrained_plan := msc_phub_util.is_plan_constrained(l_plan_id);
285: msc_phub_util.log('l_constrained_plan = '||l_constrained_plan);
280: and h.data_flag = decode(p_summary, 1, h.data_flag, 3));
281: msc_phub_util.log('delete from msc_res_plan_data: '||sql%rowcount);
282: commit;
283:
284: l_constrained_plan := msc_phub_util.is_plan_constrained(l_plan_id);
285: msc_phub_util.log('l_constrained_plan = '||l_constrained_plan);
286:
287: insert into msc_res_plan_data(
288: query_id,
281: msc_phub_util.log('delete from msc_res_plan_data: '||sql%rowcount);
282: commit;
283:
284: l_constrained_plan := msc_phub_util.is_plan_constrained(l_plan_id);
285: msc_phub_util.log('l_constrained_plan = '||l_constrained_plan);
286:
287: insert into msc_res_plan_data(
288: query_id,
289: row_index,
536: )
537: group by
538: row_index,
539: analysis_date;
540: msc_phub_util.log('insert into msc_res_plan_data: '||sql%rowcount);
541: commit;
542:
543: update msc_hp_row_dtls
544: set data_flag = 2
542:
543: update msc_hp_row_dtls
544: set data_flag = 2
545: where query_id = p_query_id and data_flag = 3;
546: msc_phub_util.log('update msc_hp_row_dtls: '||sql%rowcount);
547: commit;
548:
549: end populate_data;
550:
550:
551: procedure summarize_data(p_query_id number)
552: is
553: begin
554: msc_phub_util.log('msc_res_plan_pkg.summarize_data('||p_query_id||')');
555:
556: update msc_hp_row_dtls
557: set data_flag = 3
558: where query_id = p_query_id
573: p_item_filters varchar2,
574: p_page_size number)
575: is
576: begin
577: msc_phub_util.log('msc_res_plan_pkg.initialize_data('||p_query_id||', '||p_plan_id||
578: ','||p_page_size||')');
579:
580: msc_hp_util.prepare_col_dtls(p_plan_id, 2);
581:
593: procedure fetch_data(p_query_id number, p_row_index number)
594: is
595: l_n number;
596: begin
597: msc_phub_util.log('msc_res_plan_pkg.fetch_data('||p_query_id||', '||p_row_index||')');
598:
599: select count(*) into l_n
600: from msc_hp_row_dtls
601: where query_id = p_query_id
695: l_total_capacity number;
696: l_new_to_time2 date;
697: l_new_from_time2 date;
698: begin
699: msc_phub_util.log('msc_res_plan_pkg.recalculate('||p_query_id||')');
700: l_calendar_code := msc_hp_util.get_calendar_code(msc_hp_util.get_plan_id(p_query_id));
701:
702: for ru in cu loop
703: -- prepare staging table
700: l_calendar_code := msc_hp_util.get_calendar_code(msc_hp_util.get_plan_id(p_query_id));
701:
702: for ru in cu loop
703: -- prepare staging table
704: msc_phub_util.log('ru='||ru.sr_instance_id||','||ru.organization_id||','||
705: ru.department_id||','||ru.resource_id||','||
706: ru.start_date||','||ru.end_date);
707:
708: /*
705: ru.department_id||','||ru.resource_id||','||
706: ru.start_date||','||ru.end_date);
707:
708: /*
709: msc_phub_util.log(
710: ' from msc_net_resource_avail mra, msc_calendar_dates md'||
711: ' where mra.plan_id(+) = '||ru.plan_id||
712: ' and mra.sr_instance_id(+) = '||ru.sr_instance_id||
713: ' and mra.organization_id(+) = '||ru.organization_id||
725: and organization_id = ru.organization_id
726: and department_id = ru.department_id
727: and resource_id = ru.resource_id
728: and shift_date between ru.start_date and ru.end_date;
729: msc_phub_util.log('delete from msc_res_plan_updates: '||sql%rowcount);
730: commit;
731:
732: insert into msc_res_plan_updates (
733: query_id,
775: and md.calendar_date between ru.start_date and ru.end_date
776: and md.calendar_code = l_calendar_code
777: and md.exception_set_id = -1
778: and nvl(mra.parent_id(+),0) <> -1;
779: msc_phub_util.log('insert into msc_res_plan_updates: '||sql%rowcount);
780: commit;
781:
782: select
783: sum(nvl(decode(from_time, null, 0,
795: and shift_date between ru.start_date and ru.end_date;
796:
797:
798: /*
799: msc_phub_util.log(
800: ' from msc_res_plan_updates'||
801: ' where query_id = '||p_query_id||
802: ' and plan_id = '||ru.plan_id||
803: ' and sr_instance_id = '||ru.sr_instance_id||
807: ' and trunc(shift_date) between to_date('''||ru.start_date||''') and to_date('''||ru.end_date||''')');
808: */
809:
810: l_difference := (ru.new_value-l_total_capacity)*3600;
811: msc_phub_util.log('l_difference = '||(l_difference/3600)||', l_total_capacity = '||l_total_capacity);
812:
813: if (l_difference < 0) then
814: msc_phub_util.log('decrease: proportionally adjust');
815: open c (
810: l_difference := (ru.new_value-l_total_capacity)*3600;
811: msc_phub_util.log('l_difference = '||(l_difference/3600)||', l_total_capacity = '||l_total_capacity);
812:
813: if (l_difference < 0) then
814: msc_phub_util.log('decrease: proportionally adjust');
815: open c (
816: p_query_id,
817: ru.plan_id,
818: ru.sr_instance_id,
827: if (ru.new_value = 0) then
828: r.to_time := r.from_time;
829: r.to_time2 := r.from_time2;
830:
831: msc_phub_util.log('D1:'||r.shift_num||','||r.shift_date||','||round(r.from_time)||','||round(r.to_time)||','||
832: round((r.to_time2 - r.from_time2)*24)||','||r.capacity_units);
833:
834: update msc_res_plan_updates
835: set from_time = r.from_time,
844: else
845: r.to_time2 := r.to_time2 + (l_difference*r.shift_capacity/l_total_capacity/86400);
846: r.to_time := (r.to_time2 - trunc(r.to_time2, 'DDD'))*86400;
847:
848: msc_phub_util.log('D2:'||r.shift_num||','||r.shift_date||','||round(r.from_time)||','||round(r.to_time)||','||
849: round((r.to_time2 - r.from_time2)*24)||','||r.capacity_units);
850:
851: update msc_res_plan_updates
852: set to_time = r.to_time,
863: close c;
864: end if;
865:
866: if (l_difference > 0) then
867: msc_phub_util.log('step 1: adjust last shift size on working days');
868: open c (
869: p_query_id,
870: ru.plan_id,
871: ru.sr_instance_id,
876: ru.end_date);
877: fetch c into r;
878: while (not c%notfound and l_difference>0) loop
879: /*
880: msc_phub_util.log('r1:('||r.shift_date||','||ru.start_date||','||ru.end_date||'),'||
881: 'r2:('||r.capacity_units||','||r.from_time2||','||r.to_time2||'),'||
882: 'r3:('||r.first_from_time2||','||r.last_to_time2||'),'||
883: 'r4:('||r.prev_to_time2||','||r.next_from_time2||')');
884: */
920: r.last_to_time2 - 1,
921: r.from_time2 - l_difference/r.capacity_units/86400);
922:
923: l_change := (r.from_time2 - l_new_from_time2)*86400;
924: msc_phub_util.log('r.prev_to_time2='||r.prev_to_time2||', r.from_time2='||r.from_time2||
925: ', l_new_from_time2='||l_new_from_time2||', l_change='||round(l_change));
926: r.from_time := r.from_time - l_change;
927: r.from_time2 := l_new_from_time2;
928: l_difference := l_difference - l_change*r.capacity_units;
931: if (r.from_time2 < r.first_from_time2) then
932: r.first_from_time2 := r.from_time2;
933: end if;
934:
935: msc_phub_util.log('1A:'||r.shift_num||','||r.shift_date||','||round(l_change)||','||round(r.from_time)||','||round(r.to_time)||','||
936: round((r.to_time2 - r.from_time2)*24)||','||r.capacity_units||','||round(l_total_capacity)||','||round(l_difference/3600));
937:
938: if (l_difference > 0) then
939: -- extend end time
966: r.first_from_time2 + 1,
967: r.to_time2 + l_difference/r.capacity_units/86400);
968:
969: l_change := (l_new_to_time2 - r.to_time2)*86400;
970: msc_phub_util.log('r.next_from_time2='||r.next_from_time2||', r.to_time2='||r.to_time2||
971: ', l_new_to_time2='||l_new_to_time2||', l_change='||round(l_change));
972: r.to_time := r.to_time + l_change;
973: if (r.to_time > 86400) then
974: r.to_time := r.to_time - 86400;
977: r.to_time2 := l_new_to_time2;
978: l_difference := l_difference - l_change*r.capacity_units;
979: l_total_capacity := l_total_capacity + l_change*r.capacity_units/3600;
980:
981: msc_phub_util.log('1B:'||r.shift_num||','||r.shift_date||','||round(l_change)||','||round(r.from_time)||','||round(r.to_time)||','||
982: round((r.to_time2 - r.from_time2)*24)||','||r.capacity_units||','||round(l_total_capacity)||','||round(l_difference/3600));
983: end if;
984:
985: update msc_res_plan_updates
996: fetch c into r;
997: end loop;
998: close c;
999:
1000: msc_phub_util.log('step 2: add shifts to non-shift days');
1001: open c (
1002: p_query_id,
1003: ru.plan_id,
1004: ru.sr_instance_id,
1023: r.capacity_units := 1;
1024: l_difference := l_difference - l_change*r.capacity_units;
1025: l_total_capacity := l_total_capacity + l_change*r.capacity_units/3600;
1026:
1027: msc_phub_util.log('2:'||r.shift_num||','||r.shift_date||','||round(r.from_time)||','||round(r.to_time)||','||
1028: round((r.to_time2 - r.from_time2)*24)||','||r.capacity_units||','||round(l_total_capacity)||','||round(l_difference/3600));
1029:
1030: update msc_res_plan_updates
1031: set from_time = r.from_time,
1043: fetch c into r;
1044: end loop;
1045: close c;
1046:
1047: msc_phub_util.log('step 3: add units');
1048: while (l_difference > 0) loop
1049: open c (
1050: p_query_id,
1051: ru.plan_id,
1060: r.capacity_units := r.capacity_units + 1;
1061: l_difference := l_difference - r.shift_capacity*3600;
1062: l_total_capacity := l_total_capacity + r.shift_capacity;
1063:
1064: msc_phub_util.log('3A:'||r.shift_num||','||r.shift_date||','||round(r.from_time)||','||round(r.to_time)||','||
1065: round((r.to_time2 - r.from_time2)*24)||','||r.capacity_units||','||round(l_total_capacity)||','||round(l_difference/3600));
1066:
1067: if (l_difference < 0) then
1068: r.to_time2 := r.to_time2 + l_difference/r.capacity_units/86400;
1069: r.to_time := (r.to_time2 - trunc(r.to_time2, 'DDD'))*86400;
1070: l_total_capacity := l_total_capacity + l_difference/3600;
1071: l_difference := 0;
1072:
1073: msc_phub_util.log('3B:'||r.shift_num||','||r.shift_date||','||round(r.from_time)||','||round(r.to_time)||','||
1074: round((r.to_time2 - r.from_time2)*24)||','||r.capacity_units||','||round(l_total_capacity)||','||round(l_difference/3600));
1075: end if;
1076:
1077: update msc_res_plan_updates
1094: update msc_hp_row_dtls
1095: set data_flag = 3
1096: where query_id = p_query_id
1097: and row_index = ru.row_index;
1098: msc_phub_util.log('update msc_hp_row_dtls: '||sql%rowcount);
1099: commit;
1100: end loop;
1101:
1102: populate_data(p_query_id, 2);
1107: last_update_date = sysdate,
1108: last_updated_by = fnd_global.user_id,
1109: last_update_login = fnd_global.login_id
1110: where query_id = p_query_id and nvl(process_status, 1) = 1;
1111: msc_phub_util.log('update msc_hp_updates: '||sql%rowcount);
1112: commit;
1113:
1114: end recalculate;
1115:
1115:
1116: procedure close_data(p_query_id number)
1117: is
1118: begin
1119: msc_phub_util.log('msc_res_plan_pkg.close_data('||p_query_id||')');
1120:
1121: delete from msc_hp_row_dtls where query_id = p_query_id;
1122: msc_phub_util.log('delete from msc_hp_row_dtls: '||sql%rowcount);
1123: commit;
1118: begin
1119: msc_phub_util.log('msc_res_plan_pkg.close_data('||p_query_id||')');
1120:
1121: delete from msc_hp_row_dtls where query_id = p_query_id;
1122: msc_phub_util.log('delete from msc_hp_row_dtls: '||sql%rowcount);
1123: commit;
1124:
1125: delete from msc_res_plan_data where query_id = p_query_id;
1126: msc_phub_util.log('delete from msc_res_plan_data: '||sql%rowcount);
1122: msc_phub_util.log('delete from msc_hp_row_dtls: '||sql%rowcount);
1123: commit;
1124:
1125: delete from msc_res_plan_data where query_id = p_query_id;
1126: msc_phub_util.log('delete from msc_res_plan_data: '||sql%rowcount);
1127: commit;
1128:
1129: delete from msc_hp_updates where query_id = p_query_id;
1130: msc_phub_util.log('delete from msc_hp_updates: '||sql%rowcount);
1126: msc_phub_util.log('delete from msc_res_plan_data: '||sql%rowcount);
1127: commit;
1128:
1129: delete from msc_hp_updates where query_id = p_query_id;
1130: msc_phub_util.log('delete from msc_hp_updates: '||sql%rowcount);
1131: commit;
1132:
1133: delete from msc_res_plan_updates where query_id = p_query_id;
1134: msc_phub_util.log('delete from msc_res_plan_updates: '||sql%rowcount);
1130: msc_phub_util.log('delete from msc_hp_updates: '||sql%rowcount);
1131: commit;
1132:
1133: delete from msc_res_plan_updates where query_id = p_query_id;
1134: msc_phub_util.log('delete from msc_res_plan_updates: '||sql%rowcount);
1135: commit;
1136: end close_data;
1137:
1138: procedure save_changes(p_query_id number)
1197: for update nowait;
1198:
1199: l_n number;
1200: begin
1201: msc_phub_util.log('msc_res_plan_pkg.save_changes('||p_query_id||')');
1202:
1203: for r3 in c3 loop
1204: msc_phub_util.log('r3.transaction_id='||r3.transaction_id||', r3.parent_id='||r3.parent_id);
1205:
1200: begin
1201: msc_phub_util.log('msc_res_plan_pkg.save_changes('||p_query_id||')');
1202:
1203: for r3 in c3 loop
1204: msc_phub_util.log('r3.transaction_id='||r3.transaction_id||', r3.parent_id='||r3.parent_id);
1205:
1206: if (r3.parent_id is null) then
1207: begin
1208: select transaction_id into r3.parent_id
1244: (decode(sign(r3.to_time-r3.from_time),
1245: -1, r3.to_time+86400, r3.to_time) - r3.from_time)/3600),
1246: fnd_global.user_id, sysdate,
1247: sysdate, fnd_global.user_id, fnd_global.login_id);
1248: msc_phub_util.log('insert into msc_net_resource_avail (summary): '||sql%rowcount||', '||r3.parent_id);
1249: end;
1250: end if;
1251:
1252: if (r3.transaction_id = -1) then
1287: 2,
1288: 2,
1289: fnd_global.user_id, sysdate,
1290: sysdate, fnd_global.user_id, fnd_global.login_id);
1291: msc_phub_util.log('insert into msc_net_resource_avail (detail): '||sql%rowcount||', '||r3.transaction_id);
1292:
1293: update msc_res_plan_updates
1294: set transaction_id=r3.transaction_id
1295: where current of c3;
1292:
1293: update msc_res_plan_updates
1294: set transaction_id=r3.transaction_id
1295: where current of c3;
1296: msc_phub_util.log('update msc_res_plan_updates: '||sql%rowcount);
1297: else
1298: for r4 in c4(r3.plan_id, r3.transaction_id, r3.sr_instance_id) loop
1299: update msc_net_resource_avail
1300: set from_time = r3.from_time,
1307: last_update_date = sysdate,
1308: last_updated_by = fnd_global.user_id,
1309: last_update_login = fnd_global.login_id
1310: where current of c4;
1311: msc_phub_util.log('update msc_net_resource_avail (detail): '||sql%rowcount||', '||r3.transaction_id);
1312: exit;
1313: end loop;
1314: end if;
1315:
1318: set capacity_units = r3.capacity_units * decode(r3.from_time, null, 0,
1319: (decode(sign(r3.to_time-r3.from_time),
1320: -1, r3.to_time+86400, r3.to_time) - r3.from_time)/3600)
1321: where current of c5;
1322: msc_phub_util.log('update msc_net_resource_avail (summary): '||sql%rowcount||', '||r3.parent_id);
1323: exit;
1324: end loop;
1325:
1326: end loop;
1330: update msc_res_plan_updates
1331: set change_flag = 2
1332: where query_id = p_query_id
1333: and change_flag = 1;
1334: msc_phub_util.log('update msc_res_plan_updates: '||sql%rowcount);
1335: commit;
1336: */
1337:
1338: delete from msc_res_plan_updates
1336: */
1337:
1338: delete from msc_res_plan_updates
1339: where query_id = p_query_id;
1340: msc_phub_util.log('delete from msc_res_plan_updates: '||sql%rowcount);
1341: commit;
1342:
1343:
1344: end save_changes;