[Home] [Help]
PACKAGE BODY: APPS.JTF_TASK_INST_TEMPLATES_PUB
Source
1 PACKAGE BODY jtf_task_inst_templates_pub AS
2 /* $Header: jtfpttmb.pls 115.6 2003/02/05 02:41:34 sachoudh ship $ */
3
4 PROCEDURE create_task_from_template (
5 p_api_version IN NUMBER,
6 p_init_msg_list IN VARCHAR2 DEFAULT fnd_api.g_false,
7 p_commit IN VARCHAR2 DEFAULT fnd_api.g_false,
8 p_task_template_group_info IN task_template_group_info,
9 p_task_templates_tbl IN task_template_info_tbl,
10 p_task_contact_points_tbl IN task_contact_points_tbl,
11 x_return_status OUT NOCOPY VARCHAR2,
12 x_msg_count OUT NOCOPY NUMBER,
13 x_msg_data OUT NOCOPY VARCHAR2,
14 x_task_details_tbl OUT NOCOPY task_details_tbl
15 )
16 IS
17 l_api_version CONSTANT NUMBER := 1.0;
18 l_api_name CONSTANT VARCHAR2(30)
19 := 'CREATE_TASK_FROM_TEMPLATE';
20 l_found BOOLEAN;
21 l_current_record NUMBER;
22 l_recurrence_rule_id NUMBER;
23 l_reccurence_generated NUMBER;
24 l_task_id NUMBER;
25 l_dependent_on_task_id NUMBER;
26 l_dependency_id NUMBER;
27 l_source_object_type_code jtf_objects_b.object_code%TYPE;
28 l_resource_req_id jtf_task_rsc_reqs.resource_req_id%TYPE;
29
30 CURSOR c_task_depends (
31 p_task_template_id IN NUMBER
32 )
33 IS
34 SELECT task_id,
35 dependent_on_task_id,
36 dependency_type_code,
37 adjustment_time,
38 adjustment_time_uom,
42 AND template_flag = jtf_task_utl.g_yes;
39 template_flag
40 FROM jtf_task_depends d
41 WHERE d.task_id = p_task_template_id
43 BEGIN
44 SAVEPOINT create_tasks_template_pub;
45 x_return_status := fnd_api.g_ret_sts_success;
46 IF fnd_api.to_boolean (p_init_msg_list)
47 THEN
48 fnd_msg_pub.initialize;
49 END IF;
50
51 IF NOT fnd_api.compatible_api_call (
52 l_api_version,
53 p_api_version,
54 l_api_name,
55 'jtf_task_create_templates'
56 )
57 THEN
58 fnd_message.set_name ('JTF', 'JTF_TASK_INCOMPATIBLE_API');
59 fnd_message.set_token ('JTF_TASK_INCOMPATIBLE_API',l_api_name);
60 fnd_msg_pub.add;
61 RAISE fnd_api.g_exc_unexpected_error;
62 END IF;
63 -- Validate Template Group-------
64 jtf_task_templates_utl.validate_task_template_group (
65 p_task_template_group_id => p_task_template_group_info.task_template_group_id
66 );
67 -- Get source object code -----------------------
68 BEGIN
69 SELECT source_object_type_code
70 INTO l_source_object_type_code
71 FROM jtf_task_temp_groups_vl
72 WHERE task_template_group_id = p_task_template_group_info.task_template_group_id;
73 END;
74
75 ------ Create Main Tasks.-------------------------
76 IF (p_task_templates_tbl.COUNT = 0)
77 THEN
78 jtf_task_templates_utl.create_template_group_tasks (
79 p_source_object_type_code => l_source_object_type_code,
80 p_task_template_group_info => p_task_template_group_info,
81 x_task_details_tbl => x_task_details_tbl,
82 x_msg_count => x_msg_count,
83 x_msg_data => x_msg_data,
84 x_return_status => x_return_status
85 );
86
87 IF NOT (x_return_status = fnd_api.g_ret_sts_success)
88 THEN
89 RAISE fnd_api.g_exc_unexpected_error;
90 END IF;
91
92 ELSE -- p_task_templates_tbl.COUNT <> 0
93 FOR i IN 1 .. p_task_templates_tbl.COUNT
94 LOOP
95 -- checking for duplicate templates
96 FOR j IN 1 .. x_task_details_tbl.COUNT
97 LOOP
98 IF (x_task_details_tbl (j).task_template_id =
99 p_task_templates_tbl (i).task_template_id)
100 THEN
101 fnd_message.set_name ('JTF', 'JTF_TASK_DUPLICATE_TEMP');
102 fnd_message.set_token (
103 'P_TASK_TEMP_ID',
104 p_task_templates_tbl (i).task_template_id
105 );
106 fnd_msg_pub.add;
107 RAISE fnd_api.g_exc_unexpected_error;
108 END IF;
109 END LOOP;
110 -- Creating tasks.
111 jtf_task_templates_utl.validate_create_template (
112 p_task_template_info => p_task_templates_tbl (i),
113 p_source_object_type_code => l_source_object_type_code,
114 p_task_template_group_info => p_task_template_group_info,
115 x_task_id => l_task_id,
116 x_msg_count => x_msg_count,
117 x_msg_data => x_msg_data,
118 x_return_status => x_return_status
119 );
120
121 IF NOT (x_return_status = fnd_api.g_ret_sts_success)
122 THEN
123 RAISE fnd_api.g_exc_unexpected_error;
124 END IF;
125
126 x_task_details_tbl (i).task_id := l_task_id;
127 x_task_details_tbl (i).task_template_id := p_task_templates_tbl (i).task_template_id;
128
129 END LOOP; -- i IN 1..p_task_templates_tbl.COUNT
130 END IF; -- .p_task_templates_tbl.COUNT = 0
131
132 FOR i IN 1 .. x_task_details_tbl.COUNT
133 LOOP
134 -- calling task phones api
135 jtf_task_templates_utl.create_task_phones (
136 p_task_contact_points_tbl => p_task_contact_points_tbl,
137 p_task_template_id => x_task_details_tbl (i).task_template_id,
138 p_task_contact_id => x_task_details_tbl (i).task_id,
139 x_return_status => x_return_status,
140 x_msg_count => x_msg_count,
141 x_msg_data => x_msg_data
142 );
143
144 IF NOT (x_return_status = fnd_api.g_ret_sts_success)
145 THEN
146 RAISE fnd_api.g_exc_unexpected_error;
147 END IF;
148
149 -- Resource Creation from Template
150 jtf_task_templates_utl.validate_create_task_resource (
151 p_task_template_id => x_task_details_tbl (i).task_template_id,
152 p_task_id => x_task_details_tbl (i).task_id,
153 x_resource_req_id => l_resource_req_id,
154 x_msg_count => x_msg_count,
155 x_msg_data => x_msg_data,
156 x_return_status => x_return_status
157 );
158
159 IF NOT (x_return_status = fnd_api.g_ret_sts_success)
160 THEN
161 RAISE fnd_api.g_exc_unexpected_error;
162 END IF;
163
164 -- Create dependencies
165 FOR task_depends IN c_task_depends (x_task_details_tbl (i).task_template_id)
166 LOOP
167 l_task_id := x_task_details_tbl (i).task_id;
168 l_found := FALSE;
169 l_current_record := 1;
170
171 WHILE NOT l_found
172 LOOP
173 IF x_task_details_tbl (l_current_record).task_template_id =
174 task_depends.dependent_on_task_id
175 THEN
176 l_found := TRUE;
177 l_dependent_on_task_id := x_task_details_tbl (l_current_record).task_id;
178 ELSIF l_current_record = x_task_details_tbl.COUNT
179 THEN
180 EXIT;
181 END IF;
182
183 l_current_record := l_current_record + 1;
184 END LOOP;
185
186 IF l_found
187 THEN
188 jtf_task_dependency_pvt.create_task_dependency (
189 p_api_version => 1.0,
190 p_init_msg_list => fnd_api.g_false,
191 p_commit => fnd_api.g_false,
192 p_task_id => l_task_id,
193 p_dependent_on_task_id => l_dependent_on_task_id,
194 p_dependency_type_code => task_depends.dependency_type_code,
195 p_template_flag => 'N',
196 p_adjustment_time => task_depends.adjustment_time,
197 p_adjustment_time_uom => task_depends.adjustment_time_uom,
198 x_dependency_id => l_dependency_id,
199 x_return_status => x_return_status,
200 x_msg_data => x_msg_data,
201 x_msg_count => x_msg_count
202 );
203
204 IF NOT (x_return_status = fnd_api.g_ret_sts_success)
205 THEN
206 RAISE fnd_api.g_exc_unexpected_error;
207 END IF;
208 END IF;
209 END LOOP; -- end create dependencies
210
211 ---- Creating recurrences
212 BEGIN
213 SELECT recurrence_rule_id
214 INTO l_recurrence_rule_id
215 FROM jtf_task_templates_vl
216 WHERE task_template_id = x_task_details_tbl (i).task_template_id;
217 END;
218
219 IF l_recurrence_rule_id IS NOT NULL
220 THEN
221 l_task_id := x_task_details_tbl (i).task_id;
222 jtf_task_templates_utl.validate_create_recur (
223 p_recurrence_rule_id => l_recurrence_rule_id,
224 p_task_id => l_task_id,
225 x_reccurence_generated => l_reccurence_generated,
226 x_return_status => x_return_status,
227 x_msg_data => x_msg_data,
228 x_msg_count => x_msg_count
229 );
230
231 IF NOT (x_return_status = fnd_api.g_ret_sts_success)
232 THEN
233 RAISE fnd_api.g_exc_unexpected_error;
234 END IF;
235 END IF;
236 END LOOP; -- end creating recurrences
237
238 IF fnd_api.to_boolean (p_commit)
239 THEN
240 COMMIT WORK;
241 END IF;
242
243 fnd_msg_pub.count_and_get (p_count => x_msg_count, p_data => x_msg_data);
244
245 EXCEPTION
246 WHEN fnd_api.g_exc_unexpected_error
247 THEN
248 ROLLBACK TO create_tasks_template_pub;
249 x_return_status := fnd_api.g_ret_sts_unexp_error;
250 fnd_msg_pub.count_and_get (p_count => x_msg_count, p_data => x_msg_data);
251
252 WHEN OTHERS
253 THEN
254 ROLLBACK TO create_tasks_template_pub;
255 fnd_message.set_name ('JTF', 'JTF_TASK_UNKNOWN_ERROR');
256 fnd_message.set_token ('P_TEXT', SQLCODE || SQLERRM);
257 fnd_msg_pub.add;
258 x_return_status := fnd_api.g_ret_sts_unexp_error;
259 fnd_msg_pub.count_and_get (p_count => x_msg_count, p_data => x_msg_data);
260 END;
261 END;