59: --
60: e_bad_time_format EXCEPTION;
61: --
62: BEGIN
63: hr_utility.set_location('Entering psp_general.calc_sch_based_dur',10);
64: p_duration := 0;
65: l_time_start := p_time_start;
66: l_time_end := p_time_end;
67: --
84: END IF;
85: l_start_date := TO_DATE(TO_CHAR(p_date_start,'DD-MM-YYYY')||' '||l_time_start,'DD-MM-YYYY HH24:MI');
86: l_end_date := TO_DATE(TO_CHAR(p_date_end,'DD-MM-YYYY')||' '||l_time_end,'DD-MM-YYYY HH24:MI');
87:
88: hr_utility.trace('p_assignment_id ' ||p_assignment_id);
89: hr_utility.trace('l_start_date ' ||l_start_date);
90: hr_utility.trace('l_end_date ' ||l_end_date);
91: hr_utility.trace('p_time_start ' ||p_time_start);
92: hr_utility.trace('p_time_end ' ||p_time_end);
85: l_start_date := TO_DATE(TO_CHAR(p_date_start,'DD-MM-YYYY')||' '||l_time_start,'DD-MM-YYYY HH24:MI');
86: l_end_date := TO_DATE(TO_CHAR(p_date_end,'DD-MM-YYYY')||' '||l_time_end,'DD-MM-YYYY HH24:MI');
87:
88: hr_utility.trace('p_assignment_id ' ||p_assignment_id);
89: hr_utility.trace('l_start_date ' ||l_start_date);
90: hr_utility.trace('l_end_date ' ||l_end_date);
91: hr_utility.trace('p_time_start ' ||p_time_start);
92: hr_utility.trace('p_time_end ' ||p_time_end);
93: hr_utility.trace('p_days_or_hours ' ||p_days_or_hours);
86: l_end_date := TO_DATE(TO_CHAR(p_date_end,'DD-MM-YYYY')||' '||l_time_end,'DD-MM-YYYY HH24:MI');
87:
88: hr_utility.trace('p_assignment_id ' ||p_assignment_id);
89: hr_utility.trace('l_start_date ' ||l_start_date);
90: hr_utility.trace('l_end_date ' ||l_end_date);
91: hr_utility.trace('p_time_start ' ||p_time_start);
92: hr_utility.trace('p_time_end ' ||p_time_end);
93: hr_utility.trace('p_days_or_hours ' ||p_days_or_hours);
94:
87:
88: hr_utility.trace('p_assignment_id ' ||p_assignment_id);
89: hr_utility.trace('l_start_date ' ||l_start_date);
90: hr_utility.trace('l_end_date ' ||l_end_date);
91: hr_utility.trace('p_time_start ' ||p_time_start);
92: hr_utility.trace('p_time_end ' ||p_time_end);
93: hr_utility.trace('p_days_or_hours ' ||p_days_or_hours);
94:
95: --
88: hr_utility.trace('p_assignment_id ' ||p_assignment_id);
89: hr_utility.trace('l_start_date ' ||l_start_date);
90: hr_utility.trace('l_end_date ' ||l_end_date);
91: hr_utility.trace('p_time_start ' ||p_time_start);
92: hr_utility.trace('p_time_end ' ||p_time_end);
93: hr_utility.trace('p_days_or_hours ' ||p_days_or_hours);
94:
95: --
96: -- Fetch the work schedule
89: hr_utility.trace('l_start_date ' ||l_start_date);
90: hr_utility.trace('l_end_date ' ||l_end_date);
91: hr_utility.trace('p_time_start ' ||p_time_start);
92: hr_utility.trace('p_time_end ' ||p_time_end);
93: hr_utility.trace('p_days_or_hours ' ||p_days_or_hours);
94:
95: --
96: -- Fetch the work schedule
97: --
108: , x_return_message => l_return_message
109: );
110: --
111:
112: hr_utility.trace('l_return_status ' ||l_return_status);
113: IF l_return_status = '0' THEN
114: --
115: -- Calculate duration
116: --
114: --
115: -- Calculate duration
116: --
117: l_idx := l_schedule.first;
118: hr_utility.trace('l_idx ' || l_idx);
119: hr_utility.trace('Schedule Counts ' ||l_schedule.count);
120: --
121: IF p_days_or_hours = 'D' THEN
122: --
115: -- Calculate duration
116: --
117: l_idx := l_schedule.first;
118: hr_utility.trace('l_idx ' || l_idx);
119: hr_utility.trace('Schedule Counts ' ||l_schedule.count);
120: --
121: IF p_days_or_hours = 'D' THEN
122: --
123: l_first_band := TRUE;
148: l_day_start_time := '00:00';
149: l_day_end_time := '23:59';
150: WHILE l_idx IS NOT NULL
151: LOOP
152: hr_utility.trace('l_schedule(l_idx).FREE_BUSY_TYPE ' || l_schedule(l_idx).FREE_BUSY_TYPE );
153: hr_utility.trace('l_schedule(l_idx).END_DATE_TIME ' || l_schedule(l_idx).END_DATE_TIME );
154: hr_utility.trace('l_schedule(l_idx).START_DATE_TIME ' || l_schedule(l_idx).START_DATE_TIME );
155:
156: IF l_schedule(l_idx).FREE_BUSY_TYPE IS NOT NULL THEN
149: l_day_end_time := '23:59';
150: WHILE l_idx IS NOT NULL
151: LOOP
152: hr_utility.trace('l_schedule(l_idx).FREE_BUSY_TYPE ' || l_schedule(l_idx).FREE_BUSY_TYPE );
153: hr_utility.trace('l_schedule(l_idx).END_DATE_TIME ' || l_schedule(l_idx).END_DATE_TIME );
154: hr_utility.trace('l_schedule(l_idx).START_DATE_TIME ' || l_schedule(l_idx).START_DATE_TIME );
155:
156: IF l_schedule(l_idx).FREE_BUSY_TYPE IS NOT NULL THEN
157: hr_utility.trace('l_schedule(l_idx).FREE_BUSY_TYPE is not null ' || l_schedule(l_idx).FREE_BUSY_TYPE );
150: WHILE l_idx IS NOT NULL
151: LOOP
152: hr_utility.trace('l_schedule(l_idx).FREE_BUSY_TYPE ' || l_schedule(l_idx).FREE_BUSY_TYPE );
153: hr_utility.trace('l_schedule(l_idx).END_DATE_TIME ' || l_schedule(l_idx).END_DATE_TIME );
154: hr_utility.trace('l_schedule(l_idx).START_DATE_TIME ' || l_schedule(l_idx).START_DATE_TIME );
155:
156: IF l_schedule(l_idx).FREE_BUSY_TYPE IS NOT NULL THEN
157: hr_utility.trace('l_schedule(l_idx).FREE_BUSY_TYPE is not null ' || l_schedule(l_idx).FREE_BUSY_TYPE );
158: IF l_schedule(l_idx).FREE_BUSY_TYPE = 'FREE' THEN
153: hr_utility.trace('l_schedule(l_idx).END_DATE_TIME ' || l_schedule(l_idx).END_DATE_TIME );
154: hr_utility.trace('l_schedule(l_idx).START_DATE_TIME ' || l_schedule(l_idx).START_DATE_TIME );
155:
156: IF l_schedule(l_idx).FREE_BUSY_TYPE IS NOT NULL THEN
157: hr_utility.trace('l_schedule(l_idx).FREE_BUSY_TYPE is not null ' || l_schedule(l_idx).FREE_BUSY_TYPE );
158: IF l_schedule(l_idx).FREE_BUSY_TYPE = 'FREE' THEN
159: hr_utility.trace('l_schedule(l_idx).FREE_BUSY_TYPE is FREE ' || l_schedule(l_idx).FREE_BUSY_TYPE );
160: hr_utility.trace('l_schedule(l_idx).END_DATE_TIME ' || l_schedule(l_idx).END_DATE_TIME );
161: hr_utility.trace('l_schedule(l_idx).START_DATE_TIME ' || l_schedule(l_idx).START_DATE_TIME );
155:
156: IF l_schedule(l_idx).FREE_BUSY_TYPE IS NOT NULL THEN
157: hr_utility.trace('l_schedule(l_idx).FREE_BUSY_TYPE is not null ' || l_schedule(l_idx).FREE_BUSY_TYPE );
158: IF l_schedule(l_idx).FREE_BUSY_TYPE = 'FREE' THEN
159: hr_utility.trace('l_schedule(l_idx).FREE_BUSY_TYPE is FREE ' || l_schedule(l_idx).FREE_BUSY_TYPE );
160: hr_utility.trace('l_schedule(l_idx).END_DATE_TIME ' || l_schedule(l_idx).END_DATE_TIME );
161: hr_utility.trace('l_schedule(l_idx).START_DATE_TIME ' || l_schedule(l_idx).START_DATE_TIME );
162: IF l_schedule(l_idx).END_DATE_TIME < l_schedule(l_idx).START_DATE_TIME THEN
163: -- Skip this invalid slot which ends before it starts
156: IF l_schedule(l_idx).FREE_BUSY_TYPE IS NOT NULL THEN
157: hr_utility.trace('l_schedule(l_idx).FREE_BUSY_TYPE is not null ' || l_schedule(l_idx).FREE_BUSY_TYPE );
158: IF l_schedule(l_idx).FREE_BUSY_TYPE = 'FREE' THEN
159: hr_utility.trace('l_schedule(l_idx).FREE_BUSY_TYPE is FREE ' || l_schedule(l_idx).FREE_BUSY_TYPE );
160: hr_utility.trace('l_schedule(l_idx).END_DATE_TIME ' || l_schedule(l_idx).END_DATE_TIME );
161: hr_utility.trace('l_schedule(l_idx).START_DATE_TIME ' || l_schedule(l_idx).START_DATE_TIME );
162: IF l_schedule(l_idx).END_DATE_TIME < l_schedule(l_idx).START_DATE_TIME THEN
163: -- Skip this invalid slot which ends before it starts
164: NULL;
157: hr_utility.trace('l_schedule(l_idx).FREE_BUSY_TYPE is not null ' || l_schedule(l_idx).FREE_BUSY_TYPE );
158: IF l_schedule(l_idx).FREE_BUSY_TYPE = 'FREE' THEN
159: hr_utility.trace('l_schedule(l_idx).FREE_BUSY_TYPE is FREE ' || l_schedule(l_idx).FREE_BUSY_TYPE );
160: hr_utility.trace('l_schedule(l_idx).END_DATE_TIME ' || l_schedule(l_idx).END_DATE_TIME );
161: hr_utility.trace('l_schedule(l_idx).START_DATE_TIME ' || l_schedule(l_idx).START_DATE_TIME );
162: IF l_schedule(l_idx).END_DATE_TIME < l_schedule(l_idx).START_DATE_TIME THEN
163: -- Skip this invalid slot which ends before it starts
164: NULL;
165: ELSE
167: -- Start and End on different days
168: --
169: -- Get first day hours
170: l_start_time := TO_CHAR(l_schedule(l_idx).START_DATE_TIME,'HH24:MI');
171: hr_utility.trace('l_start_time ' || l_start_time);
172:
173: SELECT p_duration + (((SUBSTR(l_day_end_time,1,2)*60 + SUBSTR(l_day_end_time,4,2)) -
174: (SUBSTR(l_start_time,1,2)*60 + SUBSTR(l_start_time,4,2)))/60)
175: INTO p_duration
173: SELECT p_duration + (((SUBSTR(l_day_end_time,1,2)*60 + SUBSTR(l_day_end_time,4,2)) -
174: (SUBSTR(l_start_time,1,2)*60 + SUBSTR(l_start_time,4,2)))/60)
175: INTO p_duration
176: FROM DUAL;
177: -- hr_utility.trace('p_start_duration ' || p_start_duration);
178: hr_utility.trace('Start p_duration ' || p_duration);
179:
180: --
181: -- Get last day hours
174: (SUBSTR(l_start_time,1,2)*60 + SUBSTR(l_start_time,4,2)))/60)
175: INTO p_duration
176: FROM DUAL;
177: -- hr_utility.trace('p_start_duration ' || p_start_duration);
178: hr_utility.trace('Start p_duration ' || p_duration);
179:
180: --
181: -- Get last day hours
182: l_end_time := TO_CHAR(l_schedule(l_idx).END_DATE_TIME,'HH24:MI');
179:
180: --
181: -- Get last day hours
182: l_end_time := TO_CHAR(l_schedule(l_idx).END_DATE_TIME,'HH24:MI');
183: hr_utility.trace('l_end_time ' || l_end_time);
184: SELECT p_duration + (((SUBSTR(l_end_time,1,2)*60 + SUBSTR(l_end_time,4,2)) -
185: (SUBSTR(l_day_start_time,1,2)*60 + SUBSTR(l_day_start_time,4,2)) + 1)/60)
186: INTO p_duration
187: FROM DUAL;
184: SELECT p_duration + (((SUBSTR(l_end_time,1,2)*60 + SUBSTR(l_end_time,4,2)) -
185: (SUBSTR(l_day_start_time,1,2)*60 + SUBSTR(l_day_start_time,4,2)) + 1)/60)
186: INTO p_duration
187: FROM DUAL;
188: --hr_utility.trace('p_end_duration ' || p_end_duration);
189: hr_utility.trace('End p_duration ' || p_duration);
190: --
191: -- Get between full day hours
192: SELECT p_duration + ((TRUNC(l_schedule(l_idx).END_DATE_TIME) - TRUNC(l_schedule(l_idx).START_DATE_TIME) - 1) * 24)
185: (SUBSTR(l_day_start_time,1,2)*60 + SUBSTR(l_day_start_time,4,2)) + 1)/60)
186: INTO p_duration
187: FROM DUAL;
188: --hr_utility.trace('p_end_duration ' || p_end_duration);
189: hr_utility.trace('End p_duration ' || p_duration);
190: --
191: -- Get between full day hours
192: SELECT p_duration + ((TRUNC(l_schedule(l_idx).END_DATE_TIME) - TRUNC(l_schedule(l_idx).START_DATE_TIME) - 1) * 24)
193: INTO p_duration
196: -- Start and End on same day
197: l_start_time := TO_CHAR(l_schedule(l_idx).START_DATE_TIME,'HH24:MI');
198: l_end_time := TO_CHAR(l_schedule(l_idx).END_DATE_TIME,'HH24:MI');
199:
200: hr_utility.trace('l_start_time ' || l_start_time);
201: hr_utility.trace('l_end_time ' || l_end_time);
202:
203: SELECT p_duration + (((SUBSTR(l_end_time,1,2)*60 + SUBSTR(l_end_time,4,2)) -
204: (SUBSTR(l_start_time,1,2)*60 + SUBSTR(l_start_time,4,2)))/60)
197: l_start_time := TO_CHAR(l_schedule(l_idx).START_DATE_TIME,'HH24:MI');
198: l_end_time := TO_CHAR(l_schedule(l_idx).END_DATE_TIME,'HH24:MI');
199:
200: hr_utility.trace('l_start_time ' || l_start_time);
201: hr_utility.trace('l_end_time ' || l_end_time);
202:
203: SELECT p_duration + (((SUBSTR(l_end_time,1,2)*60 + SUBSTR(l_end_time,4,2)) -
204: (SUBSTR(l_start_time,1,2)*60 + SUBSTR(l_start_time,4,2)))/60)
205: INTO p_duration
203: SELECT p_duration + (((SUBSTR(l_end_time,1,2)*60 + SUBSTR(l_end_time,4,2)) -
204: (SUBSTR(l_start_time,1,2)*60 + SUBSTR(l_start_time,4,2)))/60)
205: INTO p_duration
206: FROM DUAL;
207: hr_utility.trace('duration l_idx '||l_idx||' ' ||p_duration);
208:
209: END IF;
210: END IF;
211: END IF;
211: END IF;
212: END IF;
213: l_idx := l_schedule(l_idx).NEXT_OBJECT_INDEX;
214: END LOOP;
215: hr_utility.trace('duration ' ||p_duration);
216:
217: p_duration := ROUND(p_duration,2);
218: --
219: END IF;
218: --
219: END IF;
220: END IF;
221: --
222: hr_utility.set_location('Leaving psp_general.calc_sch_based_dur',20);
223: EXCEPTION
224: --
225: WHEN e_bad_time_format THEN
226: hr_utility.set_location('Leaving psp_general.calc_sch_based_dur',30);
222: hr_utility.set_location('Leaving psp_general.calc_sch_based_dur',20);
223: EXCEPTION
224: --
225: WHEN e_bad_time_format THEN
226: hr_utility.set_location('Leaving psp_general.calc_sch_based_dur',30);
227: hr_utility.set_location(SQLERRM,35);
228: RAISE;
229: WHEN OTHERS THEN
230: hr_utility.set_location('Leaving psp_general.calc_sch_based_dur',40);
223: EXCEPTION
224: --
225: WHEN e_bad_time_format THEN
226: hr_utility.set_location('Leaving psp_general.calc_sch_based_dur',30);
227: hr_utility.set_location(SQLERRM,35);
228: RAISE;
229: WHEN OTHERS THEN
230: hr_utility.set_location('Leaving psp_general.calc_sch_based_dur',40);
231: hr_utility.set_location(SQLERRM,45);
226: hr_utility.set_location('Leaving psp_general.calc_sch_based_dur',30);
227: hr_utility.set_location(SQLERRM,35);
228: RAISE;
229: WHEN OTHERS THEN
230: hr_utility.set_location('Leaving psp_general.calc_sch_based_dur',40);
231: hr_utility.set_location(SQLERRM,45);
232: RAISE;
233: END calc_sch_based_dur;
234:
227: hr_utility.set_location(SQLERRM,35);
228: RAISE;
229: WHEN OTHERS THEN
230: hr_utility.set_location('Leaving psp_general.calc_sch_based_dur',40);
231: hr_utility.set_location(SQLERRM,45);
232: RAISE;
233: END calc_sch_based_dur;
234:
235: FUNCTION p_org_exists(organization_id1 IN NUMBER)