[Home] [Help]
PACKAGE BODY: APPS.INV_SERIAL_NUMBER_PUB
Source
1 PACKAGE BODY inv_serial_number_pub AS
2 /* $Header: INVPSNB.pls 120.21.12020000.4 2013/01/02 11:36:52 raitha ship $*/
3
4 -- Global constant holding the package name
5 g_pkg_name CONSTANT VARCHAR2(30) := 'INV_SERIAL_NUMBER_PUB';
6 /* -- Added for DMV Project */
7 -- Bug# 6825191, Commenting the variables to be obsoleted
8 --G_first_row_of_trx boolean := true;
9 --G_first_row_trx_tmp_id number := 0;
10 l_status_after_p1 NUMBER := 0;
11 l_status_before_p1 NUMBER := 0;
12 MSN_UPDATE_FIRST_PASS BOOLEAN := TRUE;
13
14 PROCEDURE set_firstscan(p_firstscan IN BOOLEAN) IS
15 l_debug NUMBER := NVL(fnd_profile.VALUE('INV_DEBUG_TRACE'), 0);
16 BEGIN
17 g_firstscan := p_firstscan;
18 END;
19
20 -- Procedure used to trace message for debugging
21 PROCEDURE invtrace(p_msg VARCHAR2 := NULL) IS
22 --Bug: 3772309: Performance bug fix.The fnd call happens everytime
23 -- debug_print is called.
24 -- l_debug NUMBER := NVL(fnd_profile.VALUE('INV_DEBUG_TRACE'), 0);
25 BEGIN
26 -- IF (l_debug = 1) THEN
27 inv_log_util.TRACE(p_msg, 'INVSER', 9);
28 -- END IF;
29 END;
30
31 PROCEDURE populateattributescolumn IS
32 l_debug NUMBER := NVL(fnd_profile.VALUE('INV_DEBUG_TRACE'), 0);
33 BEGIN
34 g_serial_attributes_tbl(1).column_name := 'SERIAL_ATTRIBUTE_CATEGORY';
35 g_serial_attributes_tbl(1).column_type := 'VARCHAR2';
36 g_serial_attributes_tbl(2).column_name := 'ORIGINATION_DATE';
37 g_serial_attributes_tbl(2).column_type := 'DATE';
38 g_serial_attributes_tbl(3).column_name := 'C_ATTRIBUTE1';
39 g_serial_attributes_tbl(3).column_type := 'VARCHAR2';
40 g_serial_attributes_tbl(4).column_name := 'C_ATTRIBUTE2';
41 g_serial_attributes_tbl(4).column_type := 'VARCHAR2';
42 g_serial_attributes_tbl(5).column_name := 'C_ATTRIBUTE3';
43 g_serial_attributes_tbl(5).column_type := 'VARCHAR2';
44 g_serial_attributes_tbl(6).column_name := 'C_ATTRIBUTE4';
45 g_serial_attributes_tbl(6).column_type := 'VARCHAR2';
46 g_serial_attributes_tbl(7).column_name := 'C_ATTRIBUTE5';
47 g_serial_attributes_tbl(7).column_type := 'VARCHAR2';
48 g_serial_attributes_tbl(8).column_name := 'C_ATTRIBUTE6';
49 g_serial_attributes_tbl(8).column_type := 'VARCHAR2';
50 g_serial_attributes_tbl(9).column_name := 'C_ATTRIBUTE7';
51 g_serial_attributes_tbl(9).column_type := 'VARCHAR2';
52 g_serial_attributes_tbl(10).column_name := 'C_ATTRIBUTE8';
53 g_serial_attributes_tbl(10).column_type := 'VARCHAR2';
54 g_serial_attributes_tbl(11).column_name := 'C_ATTRIBUTE9';
55 g_serial_attributes_tbl(11).column_type := 'VARCHAR2';
56 g_serial_attributes_tbl(12).column_name := 'C_ATTRIBUTE10';
57 g_serial_attributes_tbl(12).column_type := 'VARCHAR2';
58 g_serial_attributes_tbl(13).column_name := 'C_ATTRIBUTE11';
59 g_serial_attributes_tbl(13).column_type := 'VARCHAR2';
60 g_serial_attributes_tbl(14).column_name := 'C_ATTRIBUTE12';
61 g_serial_attributes_tbl(14).column_type := 'VARCHAR2';
62 g_serial_attributes_tbl(15).column_name := 'C_ATTRIBUTE13';
63 g_serial_attributes_tbl(15).column_type := 'VARCHAR2';
64 g_serial_attributes_tbl(16).column_name := 'C_ATTRIBUTE14';
65 g_serial_attributes_tbl(16).column_type := 'VARCHAR2';
66 g_serial_attributes_tbl(17).column_name := 'C_ATTRIBUTE15';
67 g_serial_attributes_tbl(17).column_type := 'VARCHAR2';
68 g_serial_attributes_tbl(18).column_name := 'C_ATTRIBUTE16';
69 g_serial_attributes_tbl(18).column_type := 'VARCHAR2';
70 g_serial_attributes_tbl(19).column_name := 'C_ATTRIBUTE17';
71 g_serial_attributes_tbl(19).column_type := 'VARCHAR2';
72 g_serial_attributes_tbl(20).column_name := 'C_ATTRIBUTE18';
73 g_serial_attributes_tbl(20).column_type := 'VARCHAR2';
74 g_serial_attributes_tbl(21).column_name := 'C_ATTRIBUTE19';
75 g_serial_attributes_tbl(21).column_type := 'VARCHAR2';
76 g_serial_attributes_tbl(22).column_name := 'C_ATTRIBUTE20';
77 g_serial_attributes_tbl(22).column_type := 'VARCHAR2';
78 g_serial_attributes_tbl(23).column_name := 'D_ATTRIBUTE1';
79 g_serial_attributes_tbl(23).column_type := 'DATE';
80 g_serial_attributes_tbl(24).column_name := 'D_ATTRIBUTE2';
81 g_serial_attributes_tbl(24).column_type := 'DATE';
82 g_serial_attributes_tbl(25).column_name := 'D_ATTRIBUTE3';
83 g_serial_attributes_tbl(25).column_type := 'DATE';
84 g_serial_attributes_tbl(26).column_name := 'D_ATTRIBUTE4';
85 g_serial_attributes_tbl(26).column_type := 'DATE';
86 g_serial_attributes_tbl(27).column_name := 'D_ATTRIBUTE5';
87 g_serial_attributes_tbl(27).column_type := 'DATE';
88 g_serial_attributes_tbl(28).column_name := 'D_ATTRIBUTE6';
89 g_serial_attributes_tbl(28).column_type := 'DATE';
90 g_serial_attributes_tbl(29).column_name := 'D_ATTRIBUTE7';
91 g_serial_attributes_tbl(29).column_type := 'DATE';
92 g_serial_attributes_tbl(30).column_name := 'D_ATTRIBUTE8';
93 g_serial_attributes_tbl(30).column_type := 'DATE';
94 g_serial_attributes_tbl(31).column_name := 'D_ATTRIBUTE9';
95 g_serial_attributes_tbl(31).column_type := 'DATE';
96 g_serial_attributes_tbl(32).column_name := 'D_ATTRIBUTE10';
97 g_serial_attributes_tbl(32).column_type := 'DATE';
98 g_serial_attributes_tbl(33).column_name := 'N_ATTRIBUTE1';
99 g_serial_attributes_tbl(33).column_type := 'NUMBER';
100 g_serial_attributes_tbl(34).column_name := 'N_ATTRIBUTE2';
101 g_serial_attributes_tbl(34).column_type := 'NUMBER';
102 g_serial_attributes_tbl(35).column_name := 'N_ATTRIBUTE3';
103 g_serial_attributes_tbl(35).column_type := 'NUMBER';
104 g_serial_attributes_tbl(36).column_name := 'N_ATTRIBUTE4';
105 g_serial_attributes_tbl(36).column_type := 'NUMBER';
106 g_serial_attributes_tbl(37).column_name := 'N_ATTRIBUTE5';
107 g_serial_attributes_tbl(37).column_type := 'NUMBER';
108 g_serial_attributes_tbl(38).column_name := 'N_ATTRIBUTE6';
109 g_serial_attributes_tbl(38).column_type := 'NUMBER';
110 g_serial_attributes_tbl(39).column_name := 'N_ATTRIBUTE7';
111 g_serial_attributes_tbl(39).column_type := 'NUMBER';
112 g_serial_attributes_tbl(40).column_name := 'N_ATTRIBUTE8';
113 g_serial_attributes_tbl(40).column_type := 'NUMBER';
114 g_serial_attributes_tbl(41).column_name := 'N_ATTRIBUTE9';
115 g_serial_attributes_tbl(41).column_type := 'NUMBER';
116 g_serial_attributes_tbl(42).column_name := 'N_ATTRIBUTE10';
117 g_serial_attributes_tbl(42).column_type := 'NUMBER';
118 g_serial_attributes_tbl(43).column_name := 'STATUS_ID';
119 g_serial_attributes_tbl(43).column_type := 'NUMBER';
120 g_serial_attributes_tbl(44).column_name := 'TERRITORY_CODE';
121 g_serial_attributes_tbl(44).column_type := 'VARCHAR2';
122 g_serial_attributes_tbl(45).column_name := 'ATTRIBUTE_CATEGORY';
123 g_serial_attributes_tbl(45).column_type := 'VARCHAR2';
124 g_serial_attributes_tbl(46).column_name := 'ATTRIBUTE1';
125 g_serial_attributes_tbl(46).column_type := 'VARCHAR2';
126 g_serial_attributes_tbl(47).column_name := 'ATTRIBUTE2';
127 g_serial_attributes_tbl(47).column_type := 'VARCHAR2';
128 g_serial_attributes_tbl(48).column_name := 'ATTRIBUTE3';
129 g_serial_attributes_tbl(48).column_type := 'VARCHAR2';
130 g_serial_attributes_tbl(49).column_name := 'ATTRIBUTE4';
131 g_serial_attributes_tbl(49).column_type := 'VARCHAR2';
132 g_serial_attributes_tbl(50).column_name := 'ATTRIBUTE5';
133 g_serial_attributes_tbl(50).column_type := 'VARCHAR2';
134 g_serial_attributes_tbl(51).column_name := 'ATTRIBUTE6';
135 g_serial_attributes_tbl(51).column_type := 'VARCHAR2';
136 g_serial_attributes_tbl(52).column_name := 'ATTRIBUTE7';
137 g_serial_attributes_tbl(52).column_type := 'VARCHAR2';
138 g_serial_attributes_tbl(53).column_name := 'ATTRIBUTE8';
139 g_serial_attributes_tbl(53).column_type := 'VARCHAR2';
140 g_serial_attributes_tbl(54).column_name := 'ATTRIBUTE9';
141 g_serial_attributes_tbl(54).column_type := 'VARCHAR2';
142 g_serial_attributes_tbl(55).column_name := 'ATTRIBUTE10';
143 g_serial_attributes_tbl(55).column_type := 'VARCHAR2';
144 g_serial_attributes_tbl(56).column_name := 'ATTRIBUTE11';
145 g_serial_attributes_tbl(56).column_type := 'VARCHAR2';
146 g_serial_attributes_tbl(57).column_name := 'ATTRIBUTE12';
147 g_serial_attributes_tbl(57).column_type := 'VARCHAR2';
148 g_serial_attributes_tbl(58).column_name := 'ATTRIBUTE13';
149 g_serial_attributes_tbl(58).column_type := 'VARCHAR2';
150 g_serial_attributes_tbl(59).column_name := 'ATTRIBUTE14';
151 g_serial_attributes_tbl(59).column_type := 'VARCHAR2';
152 g_serial_attributes_tbl(60).column_name := 'ATTRIBUTE15';
153 g_serial_attributes_tbl(60).column_type := 'VARCHAR2';
154 END;
155
156 -- OverLoaded Procedure insertSerial for eAM
157 PROCEDURE insertserial
158 (
159 p_api_version IN NUMBER
160 , p_init_msg_list IN VARCHAR2 := fnd_api.g_false
161 , p_commit IN VARCHAR2 := fnd_api.g_false
162 , p_validation_level IN NUMBER := fnd_api.g_valid_level_full
163 , p_inventory_item_id IN NUMBER
164 , p_organization_id IN NUMBER
165 , p_serial_number IN VARCHAR2
166 , p_current_status IN NUMBER
167 , p_group_mark_id IN NUMBER
168 , p_lot_number IN VARCHAR2
169 , p_initialization_date IN DATE DEFAULT SYSDATE
170 , x_return_status OUT NOCOPY VARCHAR2
171 , x_msg_count OUT NOCOPY NUMBER
172 , x_msg_data OUT NOCOPY VARCHAR2
173 , p_organization_type IN NUMBER DEFAULT NULL
174 , p_owning_org_id IN NUMBER DEFAULT NULL
175 , p_owning_tp_type IN NUMBER DEFAULT NULL
176 , p_planning_org_id IN NUMBER DEFAULT NULL
177 , p_planning_tp_type IN NUMBER DEFAULT NULL
178 ) IS
179 l_api_version CONSTANT NUMBER := 1.0;
180 l_api_name CONSTANT VARCHAR2(30) := 'insertSerial';
181 l_userid NUMBER;
182 l_loginid NUMBER;
183 l_serial_control_code NUMBER;
184 l_return_status VARCHAR2(1);
185 l_msg_data VARCHAR2(2000);
186 l_msg_count NUMBER;
187 isunique NUMBER;
188 item_count NUMBER;
189 eam_item NUMBER;
190 l_current_status NUMBER;
191 x_object_id NUMBER;
192 l_debug NUMBER := NVL(fnd_profile.VALUE('INV_DEBUG_TRACE'), 0);
193 BEGIN
194 -- Standard Start of API savepoint
195 SAVEPOINT apiinsertserial_apipub;
196
197 -- Standard call to check for call compatibility.
198 IF NOT fnd_api.compatible_api_call(l_api_version, p_api_version, l_api_name, g_pkg_name) THEN
199 RAISE fnd_api.g_exc_unexpected_error;
200 END IF;
201
202 -- Initialize message list if p_init_msg_list is set to TRUE.
203 IF fnd_api.to_boolean(p_init_msg_list) THEN
204 fnd_msg_pub.initialize;
205 END IF;
206
207 -- Initialize API return status to success
208 -- API body
209
210 --Block for Organization Validation
211 BEGIN
212 SELECT 1
213 INTO item_count
214 FROM mtl_parameters
215 WHERE organization_id = p_organization_id;
216 EXCEPTION
217 WHEN NO_DATA_FOUND THEN
218 item_count := 0;
219 WHEN OTHERS THEN
220 --Bug 3153585:Raising exception to populate error message correctly.
221 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error) THEN
222 fnd_msg_pub.add_exc_msg('INV_SERIAL_NUMBER_PUB', 'insertSerial');
223 END IF;
224
225 RAISE fnd_api.g_exc_unexpected_error;
226 END;
227
228 IF (item_count = 0) THEN
229 fnd_message.set_name('INV', 'INV_INVALID_ORGANIZATION');
230 fnd_msg_pub.ADD;
231 --Bug 3153585:Raising exception to populate error message correctly.
232 RAISE fnd_api.g_exc_error;
233 END IF;
234
235 -- Block to check the Serial Control Code
236 BEGIN
237 SELECT serial_number_control_code
238 , eam_item_type
239 INTO l_serial_control_code
240 , eam_item
241 FROM mtl_system_items
242 WHERE inventory_item_id = p_inventory_item_id
243 AND organization_id = p_organization_id;
244
245 IF (l_serial_control_code = 1
246 AND is_serial_tagged(p_inventory_item_id,p_organization_id,NULL) = 1) THEN
247 fnd_message.set_name('INV', 'INV_ITEM_NOT_SERIAL_CONTROLLED');
248 fnd_msg_pub.ADD;
249 --Bug 3153585:Raising exception to populate error message correctly.
250 RAISE fnd_api.g_exc_error;
251 END IF;
252
253 IF eam_item IS NULL THEN
254 l_current_status := 1;
255 ELSE
256 l_current_status := p_current_status;
257 END IF;
258 EXCEPTION
259 WHEN fnd_api.g_exc_error THEN
260 RAISE fnd_api.g_exc_error;
261 --Bug 3153585:Raising exception to populate error message correctly.
262 WHEN NO_DATA_FOUND THEN
263 fnd_message.set_name('INV', 'INV_INVALID_ITEM');
264 fnd_msg_pub.ADD;
265 --Bug 3153585:Raising exception to populate error message correctly.
266 RAISE fnd_api.g_exc_error;
267 WHEN OTHERS THEN
268 --Bug 3152585:Raising Exception to populate error message correctly.
269 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error) THEN
270 fnd_msg_pub.add_exc_msg('INV_SERIAL_NUMBER_PUB', 'insertSerial');
271 END IF;
272
273 RAISE fnd_api.g_exc_unexpected_error;
274 END;
275
276 SELECT mtl_gen_object_id_s.NEXTVAL
277 INTO x_object_id
278 FROM DUAL;
279
280 l_userid := fnd_global.user_id;
281 l_loginid := fnd_global.login_id;
282 isunique := is_serial_unique(p_organization_id, p_inventory_item_id, p_serial_number, x_msg_data);
283
284 IF (isunique = 0) THEN
285 INSERT INTO mtl_serial_numbers
286 (
287 inventory_item_id
288 , serial_number
289 , last_update_date
290 , last_updated_by
291 , creation_date
292 , created_by
293 , last_update_login
294 , current_status
295 , current_organization_id
296 , group_mark_id
297 , gen_object_id
298 , lot_number
299 , initialization_date
300 , organization_type
301 , owning_organization_id
302 , owning_tp_type
303 , planning_organization_id
304 , planning_tp_type
305 )
306 VALUES (
307 p_inventory_item_id
308 , p_serial_number
309 , SYSDATE
310 , l_userid
311 , SYSDATE
312 , l_userid
313 , l_loginid
314 , l_current_status
315 , p_organization_id
316 , p_group_mark_id
317 , x_object_id
318 , p_lot_number
319 , p_initialization_date
320 , NVL(p_organization_type, 2)
321 , NVL(p_owning_org_id, p_organization_id)
322 , NVL(p_owning_tp_type, 2)
323 , NVL(p_planning_org_id, p_organization_id)
324 , NVL(p_planning_tp_type, 2)
325 );
326 END IF;
327
328 x_return_status := fnd_api.g_ret_sts_success;
329
330 -- End of API body.
331 -- Standard check of p_commit.
332 IF fnd_api.to_boolean(p_commit) THEN
333 COMMIT WORK;
334 END IF;
335
336 -- Standard call to get message count and if count is 1, get message info.
337 fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false, p_count => x_msg_count, p_data => x_msg_data);
338 EXCEPTION
339 WHEN fnd_api.g_exc_error THEN
340 ROLLBACK TO apiinsertserial_apipub;
341 --Bug 3153585:Populating the message from the message stack
342 fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false, p_count => x_msg_count, p_data => x_msg_data);
343 x_return_status := fnd_api.g_ret_sts_error;
344 WHEN fnd_api.g_exc_unexpected_error THEN
345 --Bug 3153585:Populating the message from the message stack
346 ROLLBACK TO apiinsertserial_apipub;
347 fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false, p_count => x_msg_count, p_data => x_msg_data);
348 x_return_status := fnd_api.g_ret_sts_unexp_error;
349 WHEN OTHERS THEN
350 ROLLBACK TO apiinsertserial_apipub;
351
352 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error) THEN
353 fnd_msg_pub.add_exc_msg('INV_SERIAL_NUMBER_PUB', 'insertSerial');
354 END IF;
355
356 x_return_status := fnd_api.g_ret_sts_unexp_error;
357 fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false, p_count => x_msg_count, p_data => x_msg_data);
358 END insertserial;
359
360 -- 'Serial Tracking in WIP project. insert wip_entity_id, operation_seq_num and intraoperation_step_type
361 -- into MSN.
362 PROCEDURE insertserial(
363 p_api_version IN NUMBER
364 , p_init_msg_list IN VARCHAR2 := fnd_api.g_false
365 , p_commit IN VARCHAR2 := fnd_api.g_false
366 , p_validation_level IN NUMBER := fnd_api.g_valid_level_full
367 , p_inventory_item_id IN NUMBER
368 , p_organization_id IN NUMBER
369 , p_serial_number IN VARCHAR2
370 , p_initialization_date IN DATE
371 , p_completion_date IN DATE
372 , p_ship_date IN DATE
373 , p_revision IN VARCHAR2
374 , p_lot_number IN VARCHAR2
375 , p_current_locator_id IN NUMBER
376 , p_subinventory_code IN VARCHAR2
377 , p_trx_src_id IN NUMBER
378 , p_unit_vendor_id IN NUMBER
379 , p_vendor_lot_number IN VARCHAR2
380 , p_vendor_serial_number IN VARCHAR2
381 , p_receipt_issue_type IN NUMBER
382 , p_txn_src_id IN NUMBER
383 , p_txn_src_name IN VARCHAR2
384 , p_txn_src_type_id IN NUMBER
385 , p_transaction_id IN NUMBER
386 , p_current_status IN NUMBER
387 , p_parent_item_id IN NUMBER
388 , p_parent_serial_number IN VARCHAR2
389 , p_cost_group_id IN NUMBER
390 , p_transaction_action_id IN NUMBER
391 , p_transaction_temp_id IN NUMBER
392 , p_status_id IN NUMBER
393 , x_object_id OUT NOCOPY NUMBER
394 , x_return_status OUT NOCOPY VARCHAR2
395 , x_msg_count OUT NOCOPY NUMBER
396 , x_msg_data OUT NOCOPY VARCHAR2
397 , p_organization_type IN NUMBER DEFAULT NULL
398 , p_owning_org_id IN NUMBER DEFAULT NULL
399 , p_owning_tp_type IN NUMBER DEFAULT NULL
400 , p_planning_org_id IN NUMBER DEFAULT NULL
401 , p_planning_tp_type IN NUMBER DEFAULT NULL
402 --Serial Tracking in WIP project
403 , p_wip_entity_id IN NUMBER DEFAULT NULL
404 , p_operation_seq_num IN NUMBER DEFAULT NULL
405 , p_intraoperation_step_type IN NUMBER DEFAULT NULL
406 ) IS
407 l_api_version CONSTANT NUMBER := 1.0;
408 l_api_name CONSTANT VARCHAR2(30) := 'insertSerial';
409 l_userid NUMBER;
410 l_loginid NUMBER;
411 l_serial_control_code NUMBER;
412 l_attributes_default inv_lot_sel_attr.lot_sel_attributes_tbl_type;
413 l_attributes_default_count NUMBER;
414 l_attributes_in inv_lot_sel_attr.lot_sel_attributes_tbl_type;
415 l_column_idx BINARY_INTEGER := 44;
416 l_return_status VARCHAR2(1);
417 l_msg_data VARCHAR2(2000);
418 l_msg_count NUMBER;
419 l_status_rec inv_material_status_pub.mtl_status_update_rec_type;
420 l_status_id NUMBER := NULL;
421 l_lot_status_enabled VARCHAR2(1);
422 l_default_lot_status_id NUMBER := NULL;
423 l_serial_status_enabled VARCHAR2(1);
424 l_default_serial_status_id NUMBER;
425 l_wms_installed BOOLEAN;
426
427 CURSOR serial_temp_csr(p_transaction_temp_id NUMBER) IS
428 SELECT serial_attribute_category
429 , fnd_date.date_to_canonical(origination_date)
430 , c_attribute1
431 , c_attribute2
432 , c_attribute3
433 , c_attribute4
434 , c_attribute5
435 , c_attribute6
436 , c_attribute7
437 , c_attribute8
438 , c_attribute9
439 , c_attribute10
440 , c_attribute11
441 , c_attribute12
442 , c_attribute13
443 , c_attribute14
444 , c_attribute15
445 , c_attribute16
446 , c_attribute17
447 , c_attribute18
448 , c_attribute19
449 , c_attribute20
450 , fnd_date.date_to_canonical(d_attribute1)
451 , fnd_date.date_to_canonical(d_attribute2)
452 , fnd_date.date_to_canonical(d_attribute3)
453 , fnd_date.date_to_canonical(d_attribute4)
454 , fnd_date.date_to_canonical(d_attribute5)
455 , fnd_date.date_to_canonical(d_attribute6)
456 , fnd_date.date_to_canonical(d_attribute7)
457 , fnd_date.date_to_canonical(d_attribute8)
458 , fnd_date.date_to_canonical(d_attribute9)
459 , fnd_date.date_to_canonical(d_attribute10)
460 , TO_CHAR(n_attribute1)
461 , TO_CHAR(n_attribute2)
462 , TO_CHAR(n_attribute3)
463 , TO_CHAR(n_attribute4)
464 , TO_CHAR(n_attribute5)
465 , TO_CHAR(n_attribute6)
466 , TO_CHAR(n_attribute7)
467 , TO_CHAR(n_attribute8)
468 , TO_CHAR(n_attribute9)
469 , TO_CHAR(n_attribute10)
470 , status_id
471 , territory_code
472 FROM mtl_serial_numbers_temp
473 WHERE transaction_temp_id = p_transaction_temp_id
474 AND p_serial_number BETWEEN fm_serial_number AND NVL(to_serial_number, fm_serial_number);
475
476 l_input_idx BINARY_INTEGER;
477 l_debug NUMBER := NVL(fnd_profile.VALUE('INV_DEBUG_TRACE'), 0);
478 BEGIN
479 -- Standard Start of API savepoint
480 SAVEPOINT apiinsertserial_apipub;
481
482 IF (l_debug = 1) THEN
483 inv_trx_util_pub.TRACE('In insertserial() procedure. ', 'INV_SERIAL_NUMBER_PUB', 9);
484 END IF;
485
486 -- Standard call to check for call compatibility.
487 IF NOT fnd_api.compatible_api_call(l_api_version, p_api_version, l_api_name, g_pkg_name) THEN
488 RAISE fnd_api.g_exc_unexpected_error;
489 END IF;
490
491 -- Initialize message list if p_init_msg_list is set to TRUE.
492 IF fnd_api.to_boolean(p_init_msg_list) THEN
493 fnd_msg_pub.initialize;
494 END IF;
495
496 /** ssia we don't need this if condition **/
497 /*IF (p_transaction_action_id = 3 AND g_firstscan = FALSE) THEN*/
498 /*** ssia note end ****/
499 x_return_status := fnd_api.g_ret_sts_success;
500
501 /**ELSE**/
502 BEGIN
503 SELECT serial_number_control_code
504 INTO l_serial_control_code
505 FROM mtl_system_items
506 WHERE inventory_item_id = p_inventory_item_id
507 AND organization_id = p_organization_id;
508
509 -- invtrace('serial_number_control_code is ' || l_serial_control_code);
510 IF (l_serial_control_code = 1
511 AND is_serial_tagged(p_inventory_item_id,p_organization_id,NULL) = 1) THEN
512 -- invtrace('serial_control_code is 1.there is no serial control.');
513 fnd_message.set_name('INV', 'INV_ITEM_NOT_SERIAL_CONTROLLED');
514 fnd_msg_pub.ADD;
515 --Bug 3153585:Populating the message from the message stack
516 RAISE fnd_api.g_exc_error;
517 END IF;
518 EXCEPTION
519 WHEN NO_DATA_FOUND THEN
520 fnd_message.set_name('INV', 'INV_INVALID_ITEM');
521 fnd_msg_pub.ADD;
522 RAISE fnd_api.g_exc_error;
523 END;
524
525 SELECT mtl_gen_object_id_s.NEXTVAL
526 INTO x_object_id
527 FROM DUAL;
528
529 -- invtrace('next genealogy object id from the sequence mtl_gen_object_id_s is ' || x_object_id);
530 l_wms_installed :=
531 wms_install.check_install(
532 x_return_status => l_return_status
533 , x_msg_count => l_msg_count
534 , x_msg_data => l_msg_data
535 , p_organization_id => NULL --p_organization_id
536 );
537 -- bug 2771342/2768690
538 -- Moved this line before the if statement so that this code is
539 -- called for the else part of the if statement too.
540 populateattributescolumn();
541
542 -- invtrace('wms is installed?' || l_wms_installed);
543 IF (p_transaction_temp_id IS NOT NULL) THEN
544 -- invtrace('transaction_temp_id is not null. It is ' || p_transaction_temp_id);
545 OPEN serial_temp_csr(p_transaction_temp_id);
546
547 --populateattributescolumn();
548 FETCH serial_temp_csr
549 INTO g_serial_attributes_tbl(1).column_value
550 , g_serial_attributes_tbl(2).column_value
551 , g_serial_attributes_tbl(3).column_value
552 , g_serial_attributes_tbl(4).column_value
553 , g_serial_attributes_tbl(5).column_value
554 , g_serial_attributes_tbl(6).column_value
555 , g_serial_attributes_tbl(7).column_value
556 , g_serial_attributes_tbl(8).column_value
557 , g_serial_attributes_tbl(9).column_value
558 , g_serial_attributes_tbl(10).column_value
559 , g_serial_attributes_tbl(11).column_value
560 , g_serial_attributes_tbl(12).column_value
561 , g_serial_attributes_tbl(13).column_value
562 , g_serial_attributes_tbl(14).column_value
563 , g_serial_attributes_tbl(15).column_value
564 , g_serial_attributes_tbl(16).column_value
565 , g_serial_attributes_tbl(17).column_value
566 , g_serial_attributes_tbl(18).column_value
567 , g_serial_attributes_tbl(19).column_value
568 , g_serial_attributes_tbl(20).column_value
569 , g_serial_attributes_tbl(21).column_value
570 , g_serial_attributes_tbl(22).column_value
571 , g_serial_attributes_tbl(23).column_value
572 , g_serial_attributes_tbl(24).column_value
573 , g_serial_attributes_tbl(25).column_value
574 , g_serial_attributes_tbl(26).column_value
575 , g_serial_attributes_tbl(27).column_value
576 , g_serial_attributes_tbl(28).column_value
577 , g_serial_attributes_tbl(29).column_value
578 , g_serial_attributes_tbl(30).column_value
579 , g_serial_attributes_tbl(31).column_value
580 , g_serial_attributes_tbl(32).column_value
581 , g_serial_attributes_tbl(33).column_value
582 , g_serial_attributes_tbl(34).column_value
583 , g_serial_attributes_tbl(35).column_value
584 , g_serial_attributes_tbl(36).column_value
585 , g_serial_attributes_tbl(37).column_value
586 , g_serial_attributes_tbl(38).column_value
587 , g_serial_attributes_tbl(39).column_value
588 , g_serial_attributes_tbl(40).column_value
589 , g_serial_attributes_tbl(41).column_value
590 , g_serial_attributes_tbl(42).column_value
591 , g_serial_attributes_tbl(43).column_value
592 , g_serial_attributes_tbl(44).column_value;
593
594 CLOSE serial_temp_csr;
595
596 IF l_wms_installed THEN
597 -- invtrace('wms is installed ');
598 l_input_idx := 0;
599
600 FOR x IN 1 .. 44 LOOP
601 IF (g_serial_attributes_tbl(x).column_value IS NOT NULL) THEN
602 l_input_idx := l_input_idx + 1;
603 -- invtrace('in serial attributes loop. input_idx is ' || l_input_idx);
604 l_attributes_in(l_input_idx).column_name := g_serial_attributes_tbl(x).column_name;
605 -- invtrace('l_attributes_in(l_input_idx).column_name is ' || l_attributes_in(l_input_idx).column_name);
606 l_attributes_in(l_input_idx).column_type := g_serial_attributes_tbl(x).column_type;
607 -- invtrace('l_attributes_in(l_input_idx).column_type is ' || l_attributes_in(l_input_idx).column_type);
608 l_attributes_in(l_input_idx).column_value := g_serial_attributes_tbl(x).column_value;
609 -- invtrace('l_attributes_in(l_input_idx).column_value is ' || l_attributes_in(l_input_idx).column_value);
610 END IF;
611 END LOOP;
612 END IF; -- if wms installed is true
613 END IF; -- if transaction_Temp_id is not null
614
615 ----------------------------------------------------------
616 -- call inv_lot_sel_attr.get_default to get the default value
617 -- of the lot attributes
618 ---------------------------------------------------------
619 -- invtrace('calling inv_lot_sel_attr.get_default to get the default value of lot attributes');
620 IF l_wms_installed THEN
621 inv_lot_sel_attr.get_default(
622 x_attributes_default => l_attributes_default
623 , x_attributes_default_count => l_attributes_default_count
624 , x_return_status => l_return_status
625 , x_msg_count => l_msg_count
626 , x_msg_data => l_msg_data
627 , p_table_name => 'MTL_SERIAL_NUMBERS'
628 , p_attributes_name => 'Serial Attributes'
629 , p_inventory_item_id => p_inventory_item_id
630 , p_organization_id => p_organization_id
631 , p_lot_serial_number => p_serial_number
632 , p_attributes => l_attributes_in
633 );
634
635 IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
636 x_return_status := l_return_status;
637 RAISE fnd_api.g_exc_unexpected_error;
638 END IF;
639
640 IF (l_attributes_default_count > 0) THEN
641 FOR i IN 1 .. l_attributes_default_count LOOP
642 FOR j IN 1 .. g_serial_attributes_tbl.COUNT LOOP
643 IF (l_attributes_default(i).column_name = g_serial_attributes_tbl(j).column_name) THEN
644 g_serial_attributes_tbl(j).column_value := l_attributes_default(i).column_value;
645 END IF;
646 END LOOP;
647 END LOOP;
648 END IF;
649 END IF; -- end if of wms install is true
650
651 --END IF; -- delete this since we don't need the if condition to set the l_return_status
652 l_userid := fnd_global.user_id;
653 l_loginid := fnd_global.login_id;
654
655 -- invtrace('transaction_action_id is ' || p_transaction_action_id);
656 IF (p_transaction_action_id = 3
657 AND g_firstscan = FALSE) THEN
658 -- invtrace(' inserting into MSN values ');
659 ---------#-#-#-#get the values later
660 INSERT INTO mtl_serial_numbers
661 (
662 inventory_item_id
663 , serial_number
664 , last_update_date
665 , last_updated_by
666 , creation_date
667 , created_by
668 , last_update_login
669 , request_id
670 , program_application_id
671 , program_id
672 , program_update_date
673 , initialization_date
674 , completion_date
675 , ship_date
676 , current_status
677 , revision
678 , lot_number
679 , fixed_asset_tag
680 , reserved_order_id
681 , parent_item_id
682 , parent_serial_number
683 , original_wip_entity_id
684 , original_unit_vendor_id
685 , vendor_serial_number
686 , vendor_lot_number
687 , last_txn_source_type_id
688 , last_transaction_id
689 , last_receipt_issue_type
690 , last_txn_source_name
691 , last_txn_source_id
692 , descriptive_text
693 , current_subinventory_code
694 , current_locator_id
695 , current_organization_id
696 , attribute_category
697 , attribute1
698 , attribute2
699 , attribute3
700 , attribute4
701 , attribute5
702 , attribute6
703 , attribute7
704 , attribute8
705 , attribute9
706 , attribute10
707 , attribute11
708 , attribute12
709 , attribute13
710 , attribute14
711 , attribute15
712 , group_mark_id
713 , line_mark_id
714 , lot_line_mark_id
715 , end_item_unit_number
716 , gen_object_id
717 , serial_attribute_category
718 , origination_date
719 , c_attribute1
720 , c_attribute2
721 , c_attribute3
722 , c_attribute4
723 , c_attribute5
724 , c_attribute6
725 , c_attribute7
726 , c_attribute8
727 , c_attribute9
728 , c_attribute10
729 , c_attribute11
730 , c_attribute12
731 , c_attribute13
732 , c_attribute14
733 , c_attribute15
734 , c_attribute16
735 , c_attribute17
736 , c_attribute18
737 , c_attribute19
738 , c_attribute20
739 , d_attribute1
740 , d_attribute2
741 , d_attribute3
742 , d_attribute4
743 , d_attribute5
744 , d_attribute6
745 , d_attribute7
746 , d_attribute8
747 , d_attribute9
748 , d_attribute10
749 , n_attribute1
750 , n_attribute2
751 , n_attribute3
752 , n_attribute4
753 , n_attribute5
754 , n_attribute6
755 , n_attribute7
756 , n_attribute8
757 , n_attribute9
758 , n_attribute10
759 , status_id
760 , territory_code
761 , cost_group_id
762 , organization_type
763 , owning_organization_id
764 , owning_tp_type
765 , planning_organization_id
766 , planning_tp_type
767 , wip_entity_id
768 , operation_seq_num
769 , intraoperation_step_type
770 )
771 SELECT inventory_item_id
772 , serial_number
773 , SYSDATE
774 , l_userid
775 , SYSDATE
776 , l_userid
777 , l_loginid
778 , request_id
779 , program_application_id
780 , program_id
781 , program_update_date
782 , initialization_date
783 , completion_date
784 , ship_date
785 , current_status
786 , revision
787 , lot_number
788 , fixed_asset_tag
789 , reserved_order_id
790 , parent_item_id
791 , parent_serial_number
792 , original_wip_entity_id
793 , original_unit_vendor_id
794 , vendor_serial_number
795 , vendor_lot_number
796 , last_txn_source_type_id
797 , p_transaction_id
798 , last_receipt_issue_type
799 , p_txn_src_name
800 , p_txn_src_id
801 , descriptive_text
802 , p_subinventory_code
803 , p_current_locator_id
804 , p_organization_id
805 , attribute_category
806 , attribute1
807 , attribute2
808 , attribute3
809 , attribute4
810 , attribute5
811 , attribute6
812 , attribute7
813 , attribute8
814 , attribute9
815 , attribute10
816 , attribute11
817 , attribute12
818 , attribute13
819 , attribute14
820 , attribute15
821 , group_mark_id
822 , line_mark_id
823 , lot_line_mark_id
824 , end_item_unit_number
825 , x_object_id
826 , serial_attribute_category
827 , origination_date
828 , c_attribute1
829 , c_attribute2
830 , c_attribute3
831 , c_attribute4
832 , c_attribute5
833 , c_attribute6
834 , c_attribute7
835 , c_attribute8
836 , c_attribute9
837 , c_attribute10
838 , c_attribute11
839 , c_attribute12
840 , c_attribute13
841 , c_attribute14
842 , c_attribute15
843 , c_attribute16
844 , c_attribute17
845 , c_attribute18
846 , c_attribute19
847 , c_attribute20
848 , d_attribute1
849 , d_attribute2
850 , d_attribute3
851 , d_attribute4
852 , d_attribute5
853 , d_attribute6
854 , d_attribute7
855 , d_attribute8
856 , d_attribute9
857 , d_attribute10
858 , n_attribute1
859 , n_attribute2
860 , n_attribute3
861 , n_attribute4
862 , n_attribute5
863 , n_attribute6
864 , n_attribute7
865 , n_attribute8
866 , n_attribute9
867 , n_attribute10
868 , status_id
869 , territory_code
870 , inv_cost_group_pub.g_cost_group_id
871 , NVL(p_organization_type, 2)
872 , NVL(p_owning_org_id, p_organization_id)
873 , NVL(p_owning_tp_type, 2)
874 , NVL(p_planning_org_id, p_organization_id)
875 , NVL(p_planning_tp_type, 2)
876 , wip_entity_id
877 , operation_seq_num
878 , intraoperation_step_type
879 FROM mtl_serial_numbers
880 WHERE serial_number = p_serial_number
881 AND current_organization_id = g_transfer_org_id
882 AND inventory_item_id = p_inventory_item_id
883 AND NOT EXISTS(
884 SELECT NULL
885 FROM mtl_serial_numbers sn
886 WHERE sn.serial_number = p_serial_number
887 AND sn.current_organization_id = p_organization_id
888 AND sn.inventory_item_id = p_inventory_item_id);
889
890 -- prepare to insert the initial status to the status history table
891 -- bug 1870120
892 SELECT status_id
893 INTO l_status_id
894 FROM mtl_serial_numbers
895 WHERE serial_number = p_serial_number
896 AND current_organization_id = p_organization_id
897 AND inventory_item_id = p_inventory_item_id;
898 -- invtrace('l_status_id from MSN when serial_number = ' || p_serial_number || ' current_organization_id = ' || p_organization_id || 'inventory_item_id = ' || p_inventory_item_id);
899 ELSE
900 /** Populate Serial Attribute Category info. **/
901 IF (l_wms_installed) THEN
902 -- invtrace('wms is installed. Calling inv_lot_sel_attr.get_context_code');
903 inv_lot_sel_attr.get_context_code(g_serial_attributes_tbl(1).column_value, p_organization_id, p_inventory_item_id
904 , 'Serial Attributes');
905 ELSE
906 -- invtrace('wms is not installed. populating all the column values in the g_serial_attributes_tbl with null value');
907 g_serial_attributes_tbl(1).column_value := NULL;
908 END IF;
909
910 -- if the p_status_id is null, then default the status if it is
911 -- specified in the mtl_system_items
912 -- invtrace('p_status_id is ' || p_status_id);
913 IF p_status_id IS NULL THEN
914 -- invtrace('p_status_id is null. calling inv_material_status_grp.get_lot_serial_status_control');
915 inv_material_status_grp.get_lot_serial_status_control(
916 p_organization_id => p_organization_id
917 , p_inventory_item_id => p_inventory_item_id
918 , x_return_status => l_return_status
919 , x_msg_count => l_msg_count
920 , x_msg_data => l_msg_data
921 , x_lot_status_enabled => l_lot_status_enabled
922 , x_default_lot_status_id => l_default_lot_status_id
923 , x_serial_status_enabled => l_serial_status_enabled
924 , x_default_serial_status_id => l_default_serial_status_id
925 );
926
927 IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
928 x_return_status := l_return_status;
929 RAISE fnd_api.g_exc_unexpected_error;
930 END IF;
931
932 IF (NVL(l_serial_status_enabled, 'Y') = 'Y') THEN
933 l_status_id := l_default_serial_status_id;
934 END IF;
935 ELSE
936 l_status_id := p_status_id;
937 END IF;
938
939 -- invtrace('inserting into MSN values');
940 INSERT INTO mtl_serial_numbers
941 (
942 inventory_item_id
943 , serial_number
944 , last_update_date
945 , last_updated_by
946 , creation_date
947 , created_by
948 , last_update_login
949 , request_id
950 , program_application_id
951 , program_id
952 , program_update_date
953 , initialization_date
954 , completion_date
955 , ship_date
956 , current_status
957 , revision
958 , lot_number
959 , fixed_asset_tag
960 , reserved_order_id
961 , parent_item_id
962 , parent_serial_number
963 , original_wip_entity_id
964 , original_unit_vendor_id
965 , vendor_serial_number
966 , vendor_lot_number
967 , last_txn_source_type_id
968 , last_transaction_id
969 , last_receipt_issue_type
970 , last_txn_source_name
971 , last_txn_source_id
972 , descriptive_text
973 , current_subinventory_code
974 , current_locator_id
975 , current_organization_id
976 , attribute_category
977 , attribute1
978 , attribute2
979 , attribute3
980 , attribute4
981 , attribute5
982 , attribute6
983 , attribute7
984 , attribute8
985 , attribute9
986 , attribute10
987 , attribute11
988 , attribute12
989 , attribute13
990 , attribute14
991 , attribute15
992 , group_mark_id
993 , line_mark_id
994 , lot_line_mark_id
995 , end_item_unit_number
996 , gen_object_id
997 , serial_attribute_category
998 , origination_date
999 , c_attribute1
1000 , c_attribute2
1001 , c_attribute3
1002 , c_attribute4
1003 , c_attribute5
1004 , c_attribute6
1005 , c_attribute7
1006 , c_attribute8
1007 , c_attribute9
1008 , c_attribute10
1009 , c_attribute11
1010 , c_attribute12
1011 , c_attribute13
1012 , c_attribute14
1013 , c_attribute15
1014 , c_attribute16
1015 , c_attribute17
1016 , c_attribute18
1017 , c_attribute19
1018 , c_attribute20
1019 , d_attribute1
1020 , d_attribute2
1021 , d_attribute3
1022 , d_attribute4
1023 , d_attribute5
1024 , d_attribute6
1025 , d_attribute7
1026 , d_attribute8
1027 , d_attribute9
1028 , d_attribute10
1029 , n_attribute1
1030 , n_attribute2
1031 , n_attribute3
1032 , n_attribute4
1033 , n_attribute5
1034 , n_attribute6
1035 , n_attribute7
1036 , n_attribute8
1037 , n_attribute9
1038 , n_attribute10
1039 , status_id
1040 , territory_code
1041 , cost_group_id
1042 , organization_type
1043 , owning_organization_id
1044 , owning_tp_type
1045 , planning_organization_id
1046 , planning_tp_type
1047 , wip_entity_id
1048 , operation_seq_num
1049 , intraoperation_step_type
1050 )
1051 VALUES (
1052 p_inventory_item_id
1053 , p_serial_number
1054 , SYSDATE
1055 , l_userid
1056 , SYSDATE
1057 , l_userid
1058 , l_loginid
1059 , NULL
1060 , NULL
1061 , NULL
1062 , NULL
1063 , p_initialization_date
1064 , p_completion_date
1065 , p_ship_date
1066 , p_current_status
1067 , p_revision
1068 , p_lot_number
1069 , NULL
1070 , NULL
1071 , p_parent_item_id
1072 , p_parent_serial_number
1073 , p_trx_src_id
1074 , p_unit_vendor_id
1075 , p_vendor_serial_number
1076 , p_vendor_lot_number
1077 , p_txn_src_type_id
1078 , p_transaction_id
1079 , p_receipt_issue_type
1080 , p_txn_src_name
1081 , p_txn_src_id
1082 , g_serial_attributes_tbl(31).column_value
1083 , p_subinventory_code
1084 , p_current_locator_id
1085 , p_organization_id
1086 , NULL
1087 , NULL
1088 , NULL
1089 , NULL
1090 , NULL
1091 , NULL
1092 , NULL
1093 , NULL
1094 , NULL
1095 , NULL
1096 , NULL
1097 , NULL
1098 , NULL
1099 , NULL
1100 , NULL
1101 , NULL
1102 , NULL
1103 , NULL
1104 , NULL
1105 , NULL
1106 , x_object_id
1107 , g_serial_attributes_tbl(1).column_value
1108 , fnd_date.canonical_to_date(g_serial_attributes_tbl(2).column_value)
1109 , g_serial_attributes_tbl(3).column_value
1110 , g_serial_attributes_tbl(4).column_value
1111 , g_serial_attributes_tbl(5).column_value
1112 , g_serial_attributes_tbl(6).column_value
1113 , g_serial_attributes_tbl(7).column_value
1114 , g_serial_attributes_tbl(8).column_value
1115 , g_serial_attributes_tbl(9).column_value
1116 , g_serial_attributes_tbl(10).column_value
1117 , g_serial_attributes_tbl(11).column_value
1118 , g_serial_attributes_tbl(12).column_value
1119 , g_serial_attributes_tbl(13).column_value
1120 , g_serial_attributes_tbl(14).column_value
1121 , g_serial_attributes_tbl(15).column_value
1122 , g_serial_attributes_tbl(16).column_value
1123 , g_serial_attributes_tbl(17).column_value
1124 , g_serial_attributes_tbl(18).column_value
1125 , g_serial_attributes_tbl(19).column_value
1126 , g_serial_attributes_tbl(20).column_value
1127 , g_serial_attributes_tbl(21).column_value
1128 , g_serial_attributes_tbl(22).column_value
1129 , fnd_date.canonical_to_date(g_serial_attributes_tbl(23).column_value)
1130 , fnd_date.canonical_to_date(g_serial_attributes_tbl(24).column_value)
1131 , fnd_date.canonical_to_date(g_serial_attributes_tbl(25).column_value)
1132 , fnd_date.canonical_to_date(g_serial_attributes_tbl(26).column_value)
1133 , fnd_date.canonical_to_date(g_serial_attributes_tbl(27).column_value)
1134 , fnd_date.canonical_to_date(g_serial_attributes_tbl(28).column_value)
1135 , fnd_date.canonical_to_date(g_serial_attributes_tbl(29).column_value)
1136 , fnd_date.canonical_to_date(g_serial_attributes_tbl(30).column_value)
1137 , fnd_date.canonical_to_date(g_serial_attributes_tbl(31).column_value)
1138 , fnd_date.canonical_to_date(g_serial_attributes_tbl(32).column_value)
1139 , TO_NUMBER(g_serial_attributes_tbl(33).column_value)
1140 , TO_NUMBER(g_serial_attributes_tbl(34).column_value)
1141 , TO_NUMBER(g_serial_attributes_tbl(35).column_value)
1142 , TO_NUMBER(g_serial_attributes_tbl(36).column_value)
1143 , TO_NUMBER(g_serial_attributes_tbl(37).column_value)
1144 , TO_NUMBER(g_serial_attributes_tbl(38).column_value)
1145 , TO_NUMBER(g_serial_attributes_tbl(39).column_value)
1146 , TO_NUMBER(g_serial_attributes_tbl(40).column_value)
1147 , TO_NUMBER(g_serial_attributes_tbl(41).column_value)
1148 , TO_NUMBER(g_serial_attributes_tbl(42).column_value)
1149 , l_status_id
1150 , g_serial_attributes_tbl(44).column_value
1151 , inv_cost_group_pub.g_cost_group_id
1152 , NVL(p_organization_type, 2)
1153 , NVL(p_owning_org_id, p_organization_id)
1154 , NVL(p_owning_tp_type, 2)
1155 , NVL(p_planning_org_id, p_organization_id)
1156 , NVL(p_planning_tp_type, 2)
1157 , p_wip_entity_id
1158 , p_operation_seq_num
1159 , p_intraoperation_step_type
1160 );
1161 -- invtrace(' p_inventory_item_id ' || p_inventory_item_id);
1162 -- invtrace(', p_serial_number ' || p_serial_number);
1163 -- invtrace(' last_update_date ' || SYSDATE);
1164 -- invtrace('last updated by' || l_userid);
1165 -- invtrace('creation_date ' || SYSDATE);
1166 -- invtrace(' created_by ' ||l_userid);
1167 -- invtrace('last_update_login ' || l_loginid);
1168 -- invtrace('request_id ' || NULL);
1169 -- invtrace('program application id is NULL ');
1170 -- invtrace('program id is NULL');
1171 -- invtrace('program update date is NULL');
1172 -- invtrace('initialization_date is ' || p_initialization_date);
1173 -- invtrace('completion_date is ' || p_completion_date);
1174 -- invtrace('ship date is ' || p_ship_date);
1175 -- invtrace('current status is ' || p_current_status);
1176 -- invtrace('revision is ' || p_revision);
1177 -- invtrace('lot number is ' || p_lot_number);
1178 -- invtrace('fixed asset tag is NULL');
1179 -- invtrace('reserved order id is NULL');
1180 -- invtrace('parent item id is '|| p_parent_item_id);
1181 -- invtrace('parent_serial_number is ' || p_parent_serial_number);
1182 -- invtrace('trx_src_id is ' ||p_trx_src_id);
1183 -- invtrace('p_unit_vendor_id is ' ||p_unit_vendor_id);
1184 -- invtrace('p_vendor_serial_number is ' || p_vendor_serial_number);
1185 -- invtrace('p_vendor_lot_number is ' || p_vendor_lot_number);
1186 -- invtrace('p_txn_src_type_id is ' || p_txn_src_type_id);
1187 -- invtrace('p_transaction_id is ' || p_transaction_id);
1188 -- invtrace('p_receipt_issue_type ' || p_receipt_issue_type);
1189 -- invtrace('p_txn_src_name is ' || p_txn_src_name);
1190 -- invtrace('p_txn_src_id is ' || p_txn_src_id);
1191 -- invtrace('g_serial_attributes_tbl(31).column_value is ' || g_serial_attributes_tbl(31).column_value);
1192 -- invtrace('p_subinventory_code is ' || p_subinventory_code);
1193 -- invtrace('p_current_locator_id is ' || p_current_locator_id);
1194 -- invtrace('current organization_id is '|| p_organization_id);
1195 -- invtrace('attribute category is NULL');
1196 -- invtrace(' attributes 1 to 15 are NULL');
1197 -- invtrace('group mark id is NULL');
1198 -- invtrace('line mark_id is NULL');
1199 -- invtrace('lot_linemark_id is NULL');
1200 -- invtrace('end item unit number is NULL');
1201 -- invtrace('gen_object_id is ' ||x_object_id);
1202 -- invtrace('serial attribute category is ' || g_serial_attributes_tbl(1).column_value);
1203 -- invtrace('origination date is ' || fnd_date.canonical_to_date(g_serial_attributes_tbl(2).column_value));
1204 -- invtrace('c_attribute1 '|| g_serial_attributes_tbl(3).column_value);
1205 -- invtrace('cattribute2 ' || g_serial_attributes_tbl(4).column_value);
1206 -- invtrace('cattribute3 ' ||g_serial_attributes_tbl(5).column_value);
1207 -- invtrace('cattribute4 ' ||g_serial_attributes_tbl(6).column_value);
1208 -- invtrace('cattribute5 ' ||g_serial_attributes_tbl(7).column_value);
1209 -- invtrace('cattribute6 ' ||g_serial_attributes_tbl(8).column_value);
1210 -- invtrace('cattribute7 ' ||g_serial_attributes_tbl(9).column_value);
1211 -- invtrace('cattribute8 ' ||g_serial_attributes_tbl(10).column_value);
1212 -- invtrace('cattribute9 ' ||g_serial_attributes_tbl(11).column_value);
1213 -- invtrace('cattribute10 ' ||g_serial_attributes_tbl(12).column_value);
1214 -- invtrace('cattribute11 ' ||g_serial_attributes_tbl(13).column_value);
1215 -- invtrace('cattribute12 ' ||g_serial_attributes_tbl(14).column_value);
1216 -- invtrace('cattribute13 ' ||g_serial_attributes_tbl(15).column_value);
1217 -- invtrace('cattribute14 ' ||g_serial_attributes_tbl(16).column_value);
1218 -- invtrace('cattribute15 ' ||g_serial_attributes_tbl(17).column_value);
1219 -- invtrace('cattribute16 ' ||g_serial_attributes_tbl(18).column_value);
1220 -- invtrace('cattribute17 ' ||g_serial_attributes_tbl(19).column_value);
1221 -- invtrace('cattribute18 ' ||g_serial_attributes_tbl(20).column_value);
1222 -- invtrace('cattribute19 ' ||g_serial_attributes_tbl(21).column_value);
1223 -- invtrace('cattribute20 ' ||g_serial_attributes_tbl(22).column_value);
1224 -- invtrace('dattribute1 ' ||fnd_date.canonical_to_date(g_serial_attributes_tbl(23).column_value));
1225 -- invtrace('dattribute2 ' ||fnd_date.canonical_to_date(g_serial_attributes_tbl(24).column_value));
1226 -- invtrace('dattribute3 ' ||fnd_date.canonical_to_date(g_serial_attributes_tbl(25).column_value));
1227 -- invtrace('dattribute4 ' ||fnd_date.canonical_to_date(g_serial_attributes_tbl(26).column_value));
1228 -- invtrace('dattribute5 ' ||fnd_date.canonical_to_date(g_serial_attributes_tbl(27).column_value));
1229 -- invtrace('dattribute6 ' ||fnd_date.canonical_to_date(g_serial_attributes_tbl(28).column_value));
1230 -- invtrace('dattribute7 ' ||fnd_date.canonical_to_date(g_serial_attributes_tbl(29).column_value));
1231 -- invtrace('dattribute8 ' ||fnd_date.canonical_to_date(g_serial_attributes_tbl(30).column_value));
1232 -- invtrace('dattribute9 ' ||fnd_date.canonical_to_date(g_serial_attributes_tbl(31).column_value));
1233 -- invtrace('dattribute10 ' ||fnd_date.canonical_to_date(g_serial_attributes_tbl(32).column_value));
1234 -- invtrace('nattribute1 ' ||TO_NUMBER(g_serial_attributes_tbl(33).column_value));
1235 -- invtrace('nattribute2 ' ||TO_NUMBER(g_serial_attributes_tbl(34).column_value));
1236 -- invtrace('nattribute3 ' ||TO_NUMBER(g_serial_attributes_tbl(35).column_value));
1237 -- invtrace('nattribute4 ' ||TO_NUMBER(g_serial_attributes_tbl(36).column_value));
1238 -- invtrace('nattribute5 ' ||TO_NUMBER(g_serial_attributes_tbl(37).column_value));
1239 -- invtrace('nattribute6 ' ||TO_NUMBER(g_serial_attributes_tbl(38).column_value));
1240 -- invtrace('nattribute7 ' ||TO_NUMBER(g_serial_attributes_tbl(39).column_value));
1241 -- invtrace('nattribute8 ' ||TO_NUMBER(g_serial_attributes_tbl(40).column_value));
1242 -- invtrace('nattribute9 ' ||TO_NUMBER(g_serial_attributes_tbl(41).column_value));
1243 -- invtrace('nattribute10 ' ||TO_NUMBER(g_serial_attributes_tbl(42).column_value));
1244 -- invtrace('status id is ' ||l_status_id);
1245 -- invtrace('territory code is ' || g_serial_attributes_tbl(44).column_value);
1246 -- invtrace('cost group id is ' ||inv_cost_group_pub.g_cost_group_id);
1247 -- invtrace('organization type is ' ||NVL(p_organization_type, 2));
1248 -- invtrace('owning org id ' ||NVL(p_owning_org_id, p_organization_id));
1249 -- invtrace('owning tp type ' ||NVL(p_owning_tp_type, 2));
1250 -- invtrace('planning org id is ' ||NVL(p_planning_org_id, p_organization_id));
1251 -- invtrace('planning tp type is ' ||NVL(p_planning_tp_type, 2));
1252 -- invtrace('wip entity id is ' || p_wip_entity_id);
1253 -- invtrace('operation_seq_num is ' || p_operation_seq_num);
1254 -- invtrace('intraoperation_step_type is ' || p_intraoperation_step_type);
1255 END IF;
1256
1257 x_return_status := fnd_api.g_ret_sts_success;
1258
1259 -- insert into the status history table for bug 1870120
1260 IF (l_status_id IS NOT NULL) THEN
1261 l_status_rec.update_method := inv_material_status_pub.g_update_method_auto;
1262 l_status_rec.organization_id := p_organization_id;
1263 l_status_rec.inventory_item_id := p_inventory_item_id;
1264 l_status_rec.serial_number := p_serial_number;
1265 l_status_rec.status_id := l_status_id;
1266 l_status_rec.initial_status_flag := 'Y';
1267 inv_material_status_pkg.insert_status_history(l_status_rec);
1268 END IF;
1269
1270 -- Standard check of p_commit.
1271 IF fnd_api.to_boolean(p_commit) THEN
1272 COMMIT WORK;
1273 END IF;
1274
1275 -- Standard call to get message count and if count is 1, get message info.
1276 fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false, p_count => x_msg_count, p_data => x_msg_data);
1277 EXCEPTION
1278 WHEN fnd_api.g_exc_error THEN
1279 ROLLBACK TO apiinsertserial_apipub;
1280 --Bug 3153585:Populating x_msg_data from message stack
1281 fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false, p_count => x_msg_count, p_data => x_msg_data);
1282 x_return_status := fnd_api.g_ret_sts_error;
1283 WHEN OTHERS THEN
1284 ROLLBACK TO apiinsertserial_apipub;
1285
1286 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error) THEN
1287 fnd_msg_pub.add_exc_msg('INV_SERIAL_NUMBER_PUB', 'insertSerial');
1288 END IF;
1289
1290 --Bug 3153585:Populating x_msg_data from message stack
1291 fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false, p_count => x_msg_count, p_data => x_msg_data);
1292 x_return_status := fnd_api.g_ret_sts_unexp_error;
1293 END insertserial;
1294
1295 -- Procedure insertSerial for Serial Blacklist
1296 PROCEDURE insert_range_serial(
1297 p_api_version IN NUMBER
1298 , p_init_msg_list IN VARCHAR2 := fnd_api.g_false
1299 , p_commit IN VARCHAR2 := fnd_api.g_false
1300 , p_validation_level IN NUMBER := fnd_api.g_valid_level_full
1301 , p_inventory_item_id IN NUMBER
1302 , p_organization_id IN NUMBER
1303 , p_fm_serial_number IN VARCHAR2
1304 , p_to_serial_number IN VARCHAR2
1305 , p_current_status IN NUMBER
1306 , p_status_id IN NUMBER
1307 , p_group_mark_id IN NUMBER
1308 , p_lot_number IN VARCHAR2
1309 , p_initialization_date IN DATE DEFAULT SYSDATE
1310 , x_return_status OUT NOCOPY VARCHAR2
1311 , x_msg_count OUT NOCOPY NUMBER
1312 , x_msg_data OUT NOCOPY VARCHAR2
1313 , p_organization_type IN NUMBER DEFAULT NULL
1314 , p_owning_org_id IN NUMBER DEFAULT NULL
1315 , p_owning_tp_type IN NUMBER DEFAULT NULL
1316 , p_planning_org_id IN NUMBER DEFAULT NULL
1317 , p_planning_tp_type IN NUMBER DEFAULT NULL
1318 ) IS
1319 l_lot_exists NUMBER :=0;
1320 l_from_ser_number NUMBER;
1321 l_to_ser_number NUMBER;
1322 l_range_numbers NUMBER;
1323 l_cur_ser_number NUMBER;
1324 l_cur_serial_number VARCHAR2(30);
1325 l_temp_prefix VARCHAR2(30);
1326 l_api_version CONSTANT NUMBER := 1.0;
1327 l_api_name CONSTANT VARCHAR2(30) := 'insert_range_serial';
1328 l_userid NUMBER;
1329 l_loginid NUMBER;
1330 l_serial_control_code NUMBER;
1331 l_serial_status_control NUMBER;
1332 l_return_status VARCHAR2(1);
1333 l_msg_data VARCHAR2(2000);
1334 l_msg_count NUMBER;
1335 isunique NUMBER;
1336 item_count NUMBER;
1337 l_current_status NUMBER;
1338 x_object_id NUMBER;
1339 l_debug NUMBER := NVL(fnd_profile.VALUE('INV_DEBUG_TRACE'), 0);
1340 BEGIN
1341 -- Standard Start of API savepoint
1342 SAVEPOINT apiinsertserial_apipub;
1343
1344 -- Standard call to check for call compatibility.
1345 IF NOT fnd_api.compatible_api_call(l_api_version, p_api_version, l_api_name, g_pkg_name) THEN
1346 RAISE fnd_api.g_exc_unexpected_error;
1347 END IF;
1348
1349 -- Initialize message list if p_init_msg_list is set to TRUE.
1350 IF fnd_api.to_boolean(p_init_msg_list) THEN
1351 fnd_msg_pub.initialize;
1352 END IF;
1353
1354 -- Initialize API return status to success
1355 -- API body
1356
1357 --Block for Organization Validation
1358 BEGIN
1359 SELECT 1
1360 INTO item_count
1361 FROM mtl_parameters
1362 WHERE organization_id = p_organization_id;
1363 EXCEPTION
1364 WHEN NO_DATA_FOUND THEN
1365 item_count := 0;
1366 WHEN OTHERS THEN
1367 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error) THEN
1368 fnd_msg_pub.add_exc_msg('INV_SERIAL_NUMBER_PUB', 'insert_range_serial');
1369 END IF;
1370
1371 RAISE fnd_api.g_exc_unexpected_error;
1372 END;
1373
1374 IF (item_count = 0) THEN
1375 fnd_message.set_name('INV', 'INVALID ORGANIZATION');
1376 fnd_msg_pub.ADD;
1377 RAISE fnd_api.g_exc_error;
1378 END IF;
1379
1380 -- Block to check the Serial Control Code
1381 BEGIN
1382 SELECT serial_number_control_code
1383 INTO l_serial_control_code
1384 FROM mtl_system_items
1385 WHERE inventory_item_id = p_inventory_item_id
1386 AND organization_id = p_organization_id;
1387
1388 IF (l_serial_control_code = 1) THEN
1389 fnd_message.set_name('INV', 'INV_ITEM_NOT_SERIAL_CONTROLLED');
1390 fnd_msg_pub.ADD;
1391 RAISE fnd_api.g_exc_error;
1392 END IF;
1393
1394 l_current_status := nvl(p_current_status,1);
1395 --bug10074753,we should populate the validate serial current status.
1396 IF(l_current_status NOT IN(1,3,4,5)) THEN
1397 fnd_message.set_name('INV', 'INV_SER_INVALID_STATUS');
1398 fnd_message.set_token('TOKEN',' ');
1399 fnd_msg_pub.ADD;
1400 RAISE fnd_api.g_exc_error;
1401 END IF;
1402
1403 EXCEPTION
1404 WHEN fnd_api.g_exc_error THEN
1405 RAISE fnd_api.g_exc_error;
1406 WHEN NO_DATA_FOUND THEN
1407 fnd_message.set_name('INV', 'INV_INVALID_ITEM');
1408 fnd_msg_pub.ADD;
1409 RAISE fnd_api.g_exc_error;
1410 WHEN OTHERS THEN
1411 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error) THEN
1412 fnd_msg_pub.add_exc_msg('INV_SERIAL_NUMBER_PUB', 'insert_range_serial');
1413 END IF;
1414
1415 RAISE fnd_api.g_exc_unexpected_error;
1416 END;
1417 --Block for material status validation
1418 BEGIN
1419 SELECT serial_control into l_serial_status_control
1420 from mtl_material_statuses
1421 WHERE status_id = p_status_id;
1422 --Check if the material status is serial control enabled.
1423 --If not then raise an error.
1424 IF (l_serial_status_control <> 1) THEN
1425 fnd_message.set_name('INV','INV_STATUS_NOT_APP'); --error messag
1426 fnd_msg_pub.ADD;
1427 RAISE fnd_api.g_exc_error;
1428 END IF;
1429
1430 EXCEPTION
1431 WHEN fnd_api.g_exc_error THEN
1432 RAISE fnd_api.g_exc_error;
1433 WHEN NO_DATA_FOUND THEN
1434 fnd_message.set_name('INV', 'INV_STATUS_NOT_APP');
1435 fnd_msg_pub.ADD;
1436 RAISE fnd_api.g_exc_error;
1437 WHEN OTHERS THEN
1438 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error) THEN
1439 fnd_msg_pub.add_exc_msg('INV_SERIAL_NUMBER_PUB', 'insert_range_serial');
1440 END IF;
1441 RAISE fnd_api.g_exc_unexpected_error;
1442 END;
1443 --bug10074736,we should make sure the validate lot number here.
1444 --Block for lot number validation
1445 BEGIN
1446 IF nvl(p_lot_number,'!@') = '!@' THEN
1447 l_lot_exists := 0;
1448 ELSE
1449 SELECT 1 INTO l_lot_exists
1450 from mtl_lot_numbers
1451 WHERE inventory_item_id = p_inventory_item_id
1452 AND organization_id = p_organization_id
1453 AND lot_number = p_lot_number;
1454
1455 IF (l_lot_exists = 0) THEN
1456 fnd_message.set_name('INV','INV_INVALID_LOT'); --error messag
1457 fnd_msg_pub.ADD;
1458 RAISE fnd_api.g_exc_error;
1459 END IF;
1460 END IF;
1461 EXCEPTION
1462 WHEN fnd_api.g_exc_error THEN
1463 RAISE fnd_api.g_exc_error;
1464 WHEN NO_DATA_FOUND THEN
1465 l_lot_exists := 0;
1466 fnd_message.set_name('INV','INV_INVALID_LOT'); --error messag
1467 fnd_msg_pub.ADD;
1468 RAISE fnd_api.g_exc_error;
1469 WHEN OTHERS THEN
1470 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error) THEN
1471 fnd_msg_pub.add_exc_msg('INV_SERIAL_NUMBER_PUB', 'insert_range_serial');
1472 END IF;
1473 RAISE fnd_api.g_exc_unexpected_error;
1474 END;
1475 --bug10074682,validate the from serial number and to serial number available.
1476 --Block for from serial number and to serial number validation,it should be varchar.
1477 IF nvl(p_fm_serial_number,'!@') = '!@' OR nvl(p_to_serial_number,'!@') = '!@' THEN
1478 fnd_message.set_name('INV','INVALID_SERIAL_NUMBER'); --error messag
1479 fnd_msg_pub.ADD;
1480 RAISE fnd_api.g_exc_error;
1481 END IF;
1482 -- get the number part of the from serial
1483 inv_validate.number_from_sequence(p_fm_serial_number, l_temp_prefix, l_from_ser_number);
1484 -- get the number part of the to serial
1485 inv_validate.number_from_sequence(p_to_serial_number, l_temp_prefix, l_to_ser_number);
1486 -- total number of serials inserted into mtl_serial_numbers
1487 l_range_numbers := l_to_ser_number - l_from_ser_number + 1;
1488 --bug10074682,from serial number and to serial number shoule be in sequence.
1489 IF l_range_numbers < 1 THEN --the range numbers with no sense,need enter the validate range nubmers
1490 fnd_message.set_name('INV','INVALID_SERIAL_NUMBER'); --error messag
1491 fnd_msg_pub.ADD;
1492 RAISE fnd_api.g_exc_error;
1493 END IF;
1494 FOR i IN 1 .. l_range_numbers LOOP
1495 l_cur_ser_number := l_from_ser_number + i - 1;
1496 -- concatenate the serial number to be inserted
1497 IF (l_from_ser_number = -1
1498 AND l_to_ser_number = -1) THEN
1499 l_cur_serial_number := p_fm_serial_number;
1500 ELSE
1501 l_cur_serial_number := SUBSTR(p_fm_serial_number, 1, LENGTH(p_fm_serial_number) - LENGTH(l_cur_ser_number))
1502 || l_cur_ser_number;
1503 END IF;
1504 l_userid := fnd_global.user_id;
1505 l_loginid := fnd_global.login_id;
1506 isunique := is_serial_unique(p_organization_id, p_inventory_item_id, l_cur_serial_number, x_msg_data);
1507 IF (isunique = 0) THEN
1508 SELECT mtl_gen_object_id_s.NEXTVAL
1509 INTO x_object_id
1510 FROM DUAL;
1511
1512 INSERT INTO mtl_serial_numbers
1513 (
1514 inventory_item_id
1515 , serial_number
1516 , last_update_date
1517 , last_updated_by
1518 , creation_date
1519 , created_by
1520 , last_update_login
1521 , current_status
1522 , current_organization_id
1523 , status_id
1524 , group_mark_id
1525 , gen_object_id
1526 , lot_number
1527 , initialization_date
1528 , organization_type
1529 , owning_organization_id
1530 , owning_tp_type
1531 , planning_organization_id
1532 , planning_tp_type
1533 )
1534 VALUES (
1535 p_inventory_item_id
1536 , l_cur_serial_number
1537 , SYSDATE
1538 , l_userid
1539 , SYSDATE
1540 , l_userid
1541 , l_loginid
1542 , l_current_status
1543 , p_organization_id
1544 , p_status_id
1545 , p_group_mark_id
1546 , x_object_id
1547 , p_lot_number
1548 , p_initialization_date
1549 , NVL(p_organization_type, 2)
1550 , NVL(p_owning_org_id, p_organization_id)
1551 , NVL(p_owning_tp_type, 2)
1552 , NVL(p_planning_org_id, p_organization_id)
1553 , NVL(p_planning_tp_type, 2)
1554 );
1555 END IF;
1556 END LOOP;
1557
1558 x_return_status := fnd_api.g_ret_sts_success;
1559 -- End of API body.
1560 -- Standard check of p_commit.
1561 IF fnd_api.to_boolean(p_commit) THEN
1562 COMMIT WORK;
1563 END IF;
1564 -- Standard call to get message count and if count is 1, get message info.
1565 fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false, p_count => x_msg_count, p_data => x_msg_data);
1566 EXCEPTION
1567 WHEN fnd_api.g_exc_error THEN
1568 ROLLBACK TO apiinsertserial_apipub;
1569 --Bug 3153585:Populating x_msg_data from message stack
1570 fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false, p_count => x_msg_count, p_data => x_msg_data);
1571 x_return_status := fnd_api.g_ret_sts_error;
1572 WHEN OTHERS THEN
1573 ROLLBACK TO apiinsertserial_apipub;
1574
1575 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error) THEN
1576 fnd_msg_pub.add_exc_msg('INV_SERIAL_NUMBER_PUB', 'insert_range_serial');
1577 END IF;
1578
1579 --Bug 3153585:Populating x_msg_data from message stack
1580 fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false, p_count => x_msg_count, p_data => x_msg_data);
1581 x_return_status := fnd_api.g_ret_sts_unexp_error;
1582
1583 END insert_range_serial;
1584
1585 PROCEDURE insert_range_serial(
1586 p_api_version IN NUMBER
1587 , p_init_msg_list IN VARCHAR2 := fnd_api.g_false
1588 , p_commit IN VARCHAR2 := fnd_api.g_false
1589 , p_validation_level IN NUMBER := fnd_api.g_valid_level_full
1590 , p_inventory_item_id IN NUMBER
1591 , p_organization_id IN NUMBER
1592 , p_from_serial_number IN VARCHAR2
1593 , p_to_serial_number IN VARCHAR2
1594 , p_initialization_date IN DATE
1595 , p_completion_date IN DATE
1596 , p_ship_date IN DATE
1597 , p_revision IN VARCHAR2
1598 , p_lot_number IN VARCHAR2
1599 , p_current_locator_id IN NUMBER
1600 , p_subinventory_code IN VARCHAR2
1601 , p_trx_src_id IN NUMBER
1602 , p_unit_vendor_id IN NUMBER
1603 , p_vendor_lot_number IN VARCHAR2
1604 , p_vendor_serial_number IN VARCHAR2
1605 , p_receipt_issue_type IN NUMBER
1606 , p_txn_src_id IN NUMBER
1607 , p_txn_src_name IN VARCHAR2
1608 , p_txn_src_type_id IN NUMBER
1609 , p_transaction_id IN NUMBER
1610 , p_current_status IN NUMBER
1611 , p_parent_item_id IN NUMBER
1612 , p_parent_serial_number IN VARCHAR2
1613 , p_cost_group_id IN NUMBER
1614 , p_transaction_action_id IN NUMBER
1615 , p_transaction_temp_id IN NUMBER
1616 , p_status_id IN NUMBER
1617 , p_inspection_status IN NUMBER
1618 , x_object_id OUT NOCOPY NUMBER
1619 , x_return_status OUT NOCOPY VARCHAR2
1620 , x_msg_count OUT NOCOPY NUMBER
1621 , x_msg_data OUT NOCOPY VARCHAR2
1622 , p_organization_type IN NUMBER DEFAULT NULL
1623 , p_owning_org_id IN NUMBER DEFAULT NULL
1624 , p_owning_tp_type IN NUMBER DEFAULT NULL
1625 , p_planning_org_id IN NUMBER DEFAULT NULL
1626 , p_planning_tp_type IN NUMBER DEFAULT NULL
1627 , p_rcv_serial_flag IN VARCHAR2 DEFAULT NULL
1628 ) IS
1629 l_from_ser_number NUMBER;
1630 l_to_ser_number NUMBER;
1631 l_range_numbers NUMBER;
1632 l_temp_prefix VARCHAR2(30);
1633 l_cur_serial_number VARCHAR2(30);
1634 l_cur_ser_number NUMBER;
1635 l_object_id NUMBER;
1636 l_return_status VARCHAR2(1) := fnd_api.g_ret_sts_success;
1637 l_msg_count NUMBER;
1638 l_msg_data VARCHAR2(2000);
1639 l_current_status NUMBER;
1640 l_group_mark_id NUMBER;
1641 l_api_version CONSTANT NUMBER := 1.0;
1642 l_api_name CONSTANT VARCHAR2(30) := 'insert_range_serial';
1643 l_debug NUMBER := NVL(fnd_profile.VALUE('INV_DEBUG_TRACE'), 0);
1644 l_previous_status NUMBER; -- 13564609
1645 BEGIN
1646 -- invtrace('INV_SERIAL_NUMBER_PUB', 'insert_range_serial - 10');
1647 SAVEPOINT sp_insert_range_serial;
1648
1649 -- Standard call to check for call compatibility.
1650 IF NOT fnd_api.compatible_api_call(l_api_version, p_api_version, l_api_name, g_pkg_name) THEN
1651 RAISE fnd_api.g_exc_unexpected_error;
1652 END IF;
1653
1654 -- Initialize message list if p_init_msg_list is set to TRUE.
1655 IF fnd_api.to_boolean(p_init_msg_list) THEN
1656 fnd_msg_pub.initialize;
1657 END IF;
1658
1659 -- Initialize API return status to success
1660 x_return_status := fnd_api.g_ret_sts_success;
1661 -- get the number part of the from serial
1662 inv_validate.number_from_sequence(p_from_serial_number, l_temp_prefix, l_from_ser_number);
1663 -- get the number part of the to serial
1664 inv_validate.number_from_sequence(p_to_serial_number, l_temp_prefix, l_to_ser_number);
1665 -- total number of serials inserted into mtl_serial_numbers
1666 l_range_numbers := l_to_ser_number - l_from_ser_number + 1;
1667
1668 FOR i IN 1 .. l_range_numbers LOOP
1669 l_cur_ser_number := l_from_ser_number + i - 1;
1670
1671 -- concatenate the serial number to be inserted
1672 IF (l_from_ser_number = -1
1673 AND l_to_ser_number = -1) THEN
1674 l_cur_serial_number := p_from_serial_number;
1675 ELSE
1676 l_cur_serial_number := SUBSTR(p_from_serial_number, 1, LENGTH(p_from_serial_number) - LENGTH(l_cur_ser_number))
1677 || l_cur_ser_number;
1678 END IF;
1679
1680 -- check the status code and group_mark_id
1681 BEGIN
1682 SELECT current_status, previous_status -- 13564609
1683 , NVL(group_mark_id, -1)
1684 INTO l_current_status, l_previous_status -- 13564609
1685 , l_group_mark_id
1686 FROM mtl_serial_numbers
1687 WHERE serial_number = l_cur_serial_number
1688 AND inventory_item_id = p_inventory_item_id;
1689 EXCEPTION
1690 WHEN NO_DATA_FOUND THEN
1691 l_current_status := -1;
1692 l_group_mark_id := -2;
1693 WHEN OTHERS THEN
1694 NULL;
1695 END;
1696
1697 --invtrace('INV_SERIAL_NUMBER_PUB', ' l_cur_serial_number, l_current_status AND l_group_mark_id ' || l_cur_serial_number || ' ' || l_current_status
1698 -- || ' : ' || l_group_mark_id);
1699
1700 /* Bug #1767236
1701 * When the status is 4 (out of stores) then update the status do not insert
1702 */
1703 IF (l_current_status = 1
1704 AND l_group_mark_id = -1)
1705 OR(l_current_status = 4
1706 AND l_group_mark_id = -1)
1707 OR(l_current_status = 6
1708 AND l_group_mark_id = -1) THEN
1709
1710 -- Bug 5385315, Update the current_organization_id to p_organization_id
1711 -- in mtl_serial_numbers while updating the current_status from 4 to 1.
1712
1713 IF (p_current_status = 1 AND l_current_status = 4) THEN
1714 -- pre-defined serial, update status
1715 UPDATE mtl_serial_numbers
1716 SET current_status = p_current_status
1717 , inspection_status = p_inspection_status
1718 , lpn_id = null --bug 5152103
1719 , current_organization_id = p_organization_id
1720 , last_updated_by = fnd_global.user_id -- 13564609
1721 , last_update_date = sysdate -- 13564609
1722 , previous_status = l_current_status -- 13564609
1723 WHERE serial_number = l_cur_serial_number
1724 AND inventory_item_id = p_inventory_item_id;
1725 ELSE
1726 -- pre-defined serial, update status
1727 UPDATE mtl_serial_numbers
1728 SET current_status = p_current_status
1729 , inspection_status = p_inspection_status
1730 -- , lpn_id = decode(p_current_status,1,decode(current_status,4,null,lpn_id),lpn_id) --bug 5152103
1731 , last_updated_by = fnd_global.user_id -- 13564609
1732 , last_update_date = sysdate -- 13564609
1733 , previous_status = l_current_status -- 13564609
1734 WHERE serial_number = l_cur_serial_number
1735 AND inventory_item_id = p_inventory_item_id;
1736 END IF;
1737 /* FP-J Lot/Serial Support Enhancement - Check for serial uniqueness
1738 * when the current status is Resides in receiving(7) also
1739 */
1740 ELSIF (l_current_status <> 5)
1741 OR(l_current_status = 5
1742 AND l_group_mark_id > 0)
1743 OR(l_current_status = 7
1744 AND l_group_mark_id > 0) THEN
1745 -- Need to do uniqueness check here.
1746 -- If any serial is in use, then discard the entire range insertion.
1747 IF is_serial_unique(p_org_id => p_organization_id, p_item_id => p_inventory_item_id, p_serial => l_cur_serial_number
1748 , x_proc_msg => l_msg_data) = 1 THEN
1749 fnd_message.set_name('INV', 'INV_SERIAL_USED');
1750 fnd_msg_pub.ADD;
1751 RAISE fnd_api.g_exc_error;
1752 ELSE
1753 -- invtrace('INV_SERIAL_NUMBER_PUB', 'insert_range_serial - 60');
1754 -- uniqueness check passed
1755 -- and it is not a pre-defined serial
1756 inv_serial_number_pub.insertserial(
1757 p_api_version => p_api_version
1758 , p_init_msg_list => p_init_msg_list
1759 , p_commit => p_commit
1760 , p_validation_level => p_validation_level
1761 , p_inventory_item_id => p_inventory_item_id
1762 , p_organization_id => p_organization_id
1763 , p_serial_number => l_cur_serial_number
1764 , p_initialization_date => p_initialization_date
1765 , p_completion_date => p_completion_date
1766 , p_ship_date => p_ship_date
1767 , p_revision => p_revision
1768 , p_lot_number => p_lot_number
1769 , p_current_locator_id => p_current_locator_id
1770 , p_subinventory_code => p_subinventory_code
1771 , p_trx_src_id => p_trx_src_id
1772 , p_unit_vendor_id => p_unit_vendor_id
1773 , p_vendor_lot_number => p_vendor_lot_number
1774 , p_vendor_serial_number => p_vendor_serial_number
1775 , p_receipt_issue_type => p_receipt_issue_type
1776 , p_txn_src_id => p_txn_src_id
1777 , p_txn_src_name => p_txn_src_name
1778 , p_txn_src_type_id => p_txn_src_type_id
1779 , p_transaction_id => p_transaction_id
1780 , p_current_status => p_current_status
1781 , p_parent_item_id => p_parent_item_id
1782 , p_parent_serial_number => p_parent_serial_number
1783 , p_cost_group_id => p_cost_group_id
1784 , p_transaction_action_id => p_transaction_action_id
1785 , p_transaction_temp_id => p_transaction_temp_id
1786 , p_status_id => p_status_id
1787 , x_object_id => l_object_id
1788 , x_return_status => l_return_status
1789 , x_msg_count => l_msg_count
1790 , x_msg_data => l_msg_data
1791 , p_organization_type => p_organization_type
1792 , p_owning_org_id => p_owning_org_id
1793 , p_owning_tp_type => p_owning_tp_type
1794 , p_planning_org_id => p_planning_org_id
1795 , p_planning_tp_type => p_planning_tp_type
1796 );
1797
1798 IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
1799 fnd_message.set_name('INV', 'INV_SERIAL');
1800 fnd_msg_pub.ADD;
1801 RAISE fnd_api.g_exc_unexpected_error;
1802 END IF;
1803 END IF;
1804 END IF;
1805
1806 /* FP-J Lot/Serial Support Enhancement
1807 * If INV J and PO J are installed and this API is called from
1808 * the Mobile receiving UI, then we should only attach the revision and
1809 * lot number to the serial if it was newly created above (in which case
1810 * the current status of the serial would be defined but not used)
1811 * We should not be updating any other columns for the serial number
1812 * For this case, the flag p_rcv_serial_flag would have the value 'Y'
1813 *
1814 * If WMS or PO J are not installed or this API is called from other
1815 * routines, then updates to the serial number are retained
1816 */
1817 IF (NVL(p_rcv_serial_flag, 'N') <> 'Y') THEN
1818 UPDATE mtl_serial_numbers
1819 SET inspection_status = p_inspection_status
1820 , lot_number = p_lot_number
1821 , revision = p_revision
1822 , current_organization_id = p_organization_id
1823 , organization_type = NVL(p_organization_type, 2)
1824 , owning_organization_id = NVL(p_owning_org_id, p_organization_id)
1825 , owning_tp_type = NVL(p_owning_tp_type, 2)
1826 , planning_organization_id = NVL(p_planning_org_id, p_organization_id)
1827 , planning_tp_type = NVL(p_planning_tp_type, 2)
1828 WHERE serial_number = l_cur_serial_number
1829 AND inventory_item_id = p_inventory_item_id;
1830 ELSE
1831 UPDATE mtl_serial_numbers
1832 SET lot_number = p_lot_number
1833 , revision = p_revision
1834 WHERE serial_number = l_cur_serial_number
1835 AND inventory_item_id = p_inventory_item_id
1836 AND current_status IN(1, 4, 5, 6);
1837 END IF;
1838 END LOOP;
1839
1840 x_return_status := fnd_api.g_ret_sts_success;
1841
1842 -- End of API body
1843 -- Standard check of p_commit.
1844 IF fnd_api.to_boolean(p_commit) THEN
1845 COMMIT WORK;
1846 END IF;
1847
1848 -- Standard call to get message count and if count is 1,
1849 -- get message info.
1850 fnd_msg_pub.count_and_get(p_count => x_msg_count, p_data => x_msg_data);
1851 EXCEPTION
1852 WHEN fnd_api.g_exc_error THEN
1853 ROLLBACK TO sp_insert_range_serial;
1854 x_return_status := fnd_api.g_ret_sts_error;
1855 fnd_msg_pub.count_and_get(p_count => x_msg_count, p_data => x_msg_data);
1856 WHEN fnd_api.g_exc_unexpected_error THEN
1857 ROLLBACK TO sp_insert_range_serial;
1858 x_return_status := fnd_api.g_ret_sts_unexp_error;
1859 fnd_msg_pub.count_and_get(p_count => x_msg_count, p_data => x_msg_data);
1860 WHEN OTHERS THEN
1861 ROLLBACK TO sp_insert_range_serial;
1862 x_return_status := fnd_api.g_ret_sts_unexp_error;
1863 fnd_msg_pub.count_and_get(p_count => x_msg_count, p_data => x_msg_data);
1864 END insert_range_serial;
1865
1866 PROCEDURE updateserial(
1867 p_api_version IN NUMBER
1868 , p_init_msg_list IN VARCHAR2 := fnd_api.g_false
1869 , p_commit IN VARCHAR2 := fnd_api.g_false
1870 , p_validation_level IN NUMBER := fnd_api.g_valid_level_full
1871 , p_inventory_item_id IN NUMBER
1872 , p_organization_id IN NUMBER
1873 , p_serial_number IN VARCHAR2
1874 , p_initialization_date IN DATE
1875 , p_completion_date IN DATE
1876 , p_ship_date IN DATE
1877 , p_revision IN VARCHAR2
1878 , p_lot_number IN VARCHAR2
1879 , p_current_locator_id IN NUMBER
1880 , p_subinventory_code IN VARCHAR2
1881 , p_trx_src_id IN NUMBER
1882 , p_unit_vendor_id IN NUMBER
1883 , p_vendor_lot_number IN VARCHAR2
1884 , p_vendor_serial_number IN VARCHAR2
1885 , p_receipt_issue_type IN NUMBER
1886 , p_txn_src_id IN NUMBER
1887 , p_txn_src_name IN VARCHAR2
1888 , p_txn_src_type_id IN NUMBER
1889 , p_current_status IN NUMBER
1890 , p_parent_item_id IN NUMBER
1891 , p_parent_serial_number IN VARCHAR2
1892 , p_serial_temp_id IN NUMBER
1893 , p_last_status IN NUMBER
1894 , p_status_id IN NUMBER
1895 , x_object_id OUT NOCOPY NUMBER
1896 , x_return_status OUT NOCOPY VARCHAR2
1897 , x_msg_count OUT NOCOPY NUMBER
1898 , x_msg_data OUT NOCOPY VARCHAR2
1899 , p_organization_type IN NUMBER DEFAULT NULL
1900 , p_owning_org_id IN NUMBER DEFAULT NULL
1901 , p_owning_tp_type IN NUMBER DEFAULT NULL
1902 , p_planning_org_id IN NUMBER DEFAULT NULL
1903 , p_planning_tp_type IN NUMBER DEFAULT NULL
1904 , p_transaction_action_id IN NUMBER DEFAULT NULL
1905 , p_wip_entity_id IN NUMBER DEFAULT NULL
1906 , p_operation_seq_num IN NUMBER DEFAULT NULL
1907 , p_intraoperation_step_type IN NUMBER DEFAULT NULL
1908 , p_line_mark_id IN NUMBER DEFAULT NULL
1909 ) IS
1910 l_api_version CONSTANT NUMBER := 1.0;
1911 l_api_name CONSTANT VARCHAR2(30) := 'updateSerial';
1912 l_userid NUMBER;
1913 l_loginid NUMBER;
1914 l_serial_attribute_category VARCHAR2(150);
1915 l_origination_date DATE;
1916 l_c_attribute1 VARCHAR2(150);
1917 l_c_attribute2 VARCHAR2(150);
1918 l_c_attribute3 VARCHAR2(150);
1919 l_c_attribute4 VARCHAR2(150);
1920 l_c_attribute5 VARCHAR2(150);
1921 l_c_attribute6 VARCHAR2(150);
1922 l_c_attribute7 VARCHAR2(150);
1923 l_c_attribute8 VARCHAR2(150);
1924 l_c_attribute9 VARCHAR2(150);
1925 l_c_attribute10 VARCHAR2(150);
1926 l_c_attribute11 VARCHAR2(150);
1927 l_c_attribute12 VARCHAR2(150);
1928 l_c_attribute13 VARCHAR2(150);
1929 l_c_attribute14 VARCHAR2(150);
1930 l_c_attribute15 VARCHAR2(150);
1931 l_c_attribute16 VARCHAR2(150);
1932 l_c_attribute17 VARCHAR2(150);
1933 l_c_attribute18 VARCHAR2(150);
1934 l_c_attribute19 VARCHAR2(150);
1935 l_c_attribute20 VARCHAR2(150);
1936 l_d_attribute1 DATE;
1937 l_d_attribute2 DATE;
1938 l_d_attribute3 DATE;
1939 l_d_attribute4 DATE;
1940 l_d_attribute5 DATE;
1941 l_d_attribute6 DATE;
1942 l_d_attribute7 DATE;
1943 l_d_attribute8 DATE;
1944 l_d_attribute9 DATE;
1945 l_d_attribute10 DATE;
1946 l_n_attribute1 NUMBER;
1947 l_n_attribute2 NUMBER;
1948 l_n_attribute3 NUMBER;
1949 l_n_attribute4 NUMBER;
1950 l_n_attribute5 NUMBER;
1951 l_n_attribute6 NUMBER;
1952 l_n_attribute7 NUMBER;
1953 l_n_attribute8 NUMBER;
1954 l_n_attribute9 NUMBER;
1955 l_n_attribute10 NUMBER;
1956 l_territory_code VARCHAR2(150);
1957 l_wms_installed BOOLEAN;
1958 l_return_status VARCHAR2(1);
1959 l_msg_data VARCHAR2(2000);
1960 l_msg_count NUMBER;
1961 l_group_mark_id NUMBER;
1962
1963 CURSOR l_serial_attr_csr(p_serial_temp_id NUMBER) IS
1964 SELECT serial_attribute_category
1965 , origination_date
1966 , c_attribute1
1967 , c_attribute2
1968 , c_attribute3
1969 , c_attribute4
1970 , c_attribute5
1971 , c_attribute6
1972 , c_attribute7
1973 , c_attribute8
1974 , c_attribute9
1975 , c_attribute10
1976 , c_attribute11
1977 , c_attribute12
1978 , c_attribute13
1979 , c_attribute14
1980 , c_attribute15
1981 , c_attribute16
1982 , c_attribute17
1983 , c_attribute18
1984 , c_attribute19
1985 , c_attribute20
1986 , d_attribute1
1987 , d_attribute2
1988 , d_attribute3
1989 , d_attribute4
1990 , d_attribute5
1991 , d_attribute6
1992 , d_attribute7
1993 , d_attribute8
1994 , d_attribute9
1995 , d_attribute10
1996 , n_attribute1
1997 , n_attribute2
1998 , n_attribute3
1999 , n_attribute4
2000 , n_attribute5
2001 , n_attribute6
2002 , n_attribute7
2003 , n_attribute8
2004 , n_attribute9
2005 , n_attribute10
2006 , territory_code
2007 FROM mtl_serial_numbers_temp
2008 WHERE transaction_temp_id = p_serial_temp_id
2009 AND p_serial_number BETWEEN fm_serial_number AND NVL(to_serial_number, fm_serial_number);
2010
2011 l_debug NUMBER := NVL(fnd_profile.VALUE('INV_DEBUG_TRACE'), 0);
2012 BEGIN
2013 -- Standard Start of API savepoint
2014 SAVEPOINT apiupdateserial_apipub;
2015
2016 IF (l_debug = 1) THEN
2017 invtrace('*** Inside UpdateSerial ****');
2018 END IF;
2019
2020 -- Standard call to check for call compatibility.
2021 IF NOT fnd_api.compatible_api_call(l_api_version, p_api_version, l_api_name, g_pkg_name) THEN
2022 RAISE fnd_api.g_exc_unexpected_error;
2023 END IF;
2024
2025 -- Initialize message list if p_init_msg_list is set to TRUE.
2026 IF fnd_api.to_boolean(p_init_msg_list) THEN
2027 fnd_msg_pub.initialize;
2028 END IF;
2029
2030 -- Initialize API return status to success
2031 x_return_status := fnd_api.g_ret_sts_success;
2032 -- API body
2033
2034 IF (l_debug = 1) THEN
2035 invtrace('CurStat =' || p_current_status || ',CG=' ||
2036 inv_cost_group_pub.g_cost_group_id || ',lastStat=' ||
2037 p_last_status || 'p_wip_entity_id = ' || p_wip_entity_id ||
2038 'SerialNumber = ' || p_serial_number);
2039 END IF;
2040 l_userid := fnd_global.user_id;
2041 l_loginid := fnd_global.login_id;
2042
2043 -- Get serial-attributes only if the last-state of serialNumber
2044 -- is 'Defined But Not Used' (1) or 'Dynamically generated' (6)
2045 IF p_wip_entity_id IS NOT NULL THEN
2046 l_group_mark_id := p_wip_entity_id;
2047 ELSE
2048 l_group_mark_id := NULL;
2049 END IF;
2050
2051 IF (p_last_status = 1)
2052 OR(p_last_status = 6) THEN
2053 l_wms_installed :=
2054 wms_install.check_install(x_return_status => l_return_status, x_msg_count => l_msg_count, x_msg_data => l_msg_data
2055 , p_organization_id => p_organization_id);
2056
2057 IF (l_wms_installed AND p_serial_temp_id IS NOT NULL) THEN
2058 -- invtrace('wms is installed... opening l_serial_attr_csr with serial_temp_id as '|| p_serial_temp_id);
2059 OPEN l_serial_attr_csr(p_serial_temp_id);
2060
2061 FETCH l_serial_attr_csr
2062 INTO l_serial_attribute_category
2063 , l_origination_date
2064 , l_c_attribute1
2065 , l_c_attribute2
2066 , l_c_attribute3
2067 , l_c_attribute4
2068 , l_c_attribute5
2069 , l_c_attribute6
2070 , l_c_attribute7
2071 , l_c_attribute8
2072 , l_c_attribute9
2073 , l_c_attribute10
2074 , l_c_attribute11
2075 , l_c_attribute12
2076 , l_c_attribute13
2077 , l_c_attribute14
2078 , l_c_attribute15
2079 , l_c_attribute16
2080 , l_c_attribute17
2081 , l_c_attribute18
2082 , l_c_attribute19
2083 , l_c_attribute20
2084 , l_d_attribute1
2085 , l_d_attribute2
2086 , l_d_attribute3
2087 , l_d_attribute4
2088 , l_d_attribute5
2089 , l_d_attribute6
2090 , l_d_attribute7
2091 , l_d_attribute8
2092 , l_d_attribute9
2093 , l_d_attribute10
2094 , l_n_attribute1
2095 , l_n_attribute2
2096 , l_n_attribute3
2097 , l_n_attribute4
2098 , l_n_attribute5
2099 , l_n_attribute6
2100 , l_n_attribute7
2101 , l_n_attribute8
2102 , l_n_attribute9
2103 , l_n_attribute10
2104 , l_territory_code;
2105 --END IF;
2106
2107 -- invtrace('updating MSN with values ');
2108 -- invtrace('current_status '|| p_current_status);
2109 -- invtrace('initialization_date '|| initialization_date);
2110 -- invtrace('completion_date '|| p_completion_date);
2111 -- invtrace('ship_date '|| p_ship_date);
2112 -- invtrace('revision '|| p_revision);
2113 -- invtrace('lot_number '|| p_lot_number);
2114 -- do not update group mark id for staging transfer vipartha
2115 -- invtrace('group_mark_id '|| DECODE(p_transaction_action_id, 28, group_mark_id, NULL));
2116 -- invtrace('line_mark_id '|| NULL);
2117 -- invtrace('lot_line_mark_id '|| NULL);
2118 -- invtrace('current_organization_id '|| p_organization_id);
2119 -- invtrace('organization_type '|| NVL(p_organization_type, 2));
2120 -- invtrace('owning_organization_id '|| NVL(p_owning_org_id, p_organization_id));
2121 -- invtrace('owning_tp_type '|| NVL(p_owning_tp_type, 2));
2122 -- invtrace('planning_organization_id '|| NVL(p_planning_org_id, p_organization_id));
2123 -- invtrace('planning_tp_type '|| NVL(p_planning_tp_type, 2));
2124 -- invtrace('current_locator_id '|| p_current_locator_id);
2125 -- invtrace('current_subinventory_code ' || p_subinventory_code);
2126 -- invtrace('original_wip_entity_id ' || p_trx_src_id);
2127 -- invtrace('original_unit_vendor_id ' || p_unit_vendor_id);
2128 -- invtrace('vendor_lot_number ' || p_vendor_lot_number);
2129 -- invtrace('vendor_serial_number ' || p_vendor_serial_number);
2130 -- invtrace('last_receipt_issue_type ' || p_receipt_issue_type);
2131 -- invtrace('last_txn_source_id ' || p_txn_src_id);
2132 -- invtrace('last_txn_source_type_id ' || p_txn_src_type_id);
2133 -- invtrace('last_txn_source_name ' || p_txn_src_name);
2134 -- invtrace('last_update_date ' || SYSDATE);
2135 -- invtrace('last_updated_by ' || l_userid);
2136 -- invtrace('parent_item_id ' || p_parent_item_id);
2137 -- invtrace('parent_serial_number ' || p_parent_serial_number);
2138 -- invtrace('origination_date ' || l_origination_date);
2139 -- invtrace('c_attribute1 ' || l_c_attribute1);
2140 -- invtrace('c_attribute2 ' || l_c_attribute2);
2141 -- invtrace('c_attribute3 ' || l_c_attribute3);
2142 -- invtrace('c_attribute4 ' || l_c_attribute4);
2143 -- invtrace('c_attribute5 ' || l_c_attribute5);
2144 -- invtrace('c_attribute6 ' || l_c_attribute6);
2145 -- invtrace('c_attribute7 ' || l_c_attribute7);
2146 -- invtrace('c_attribute8 ' || l_c_attribute8);
2147 -- invtrace('c_attribute9 ' || l_c_attribute9);
2148 -- invtrace('c_attribute10 ' || l_c_attribute10);
2149 -- invtrace('c_attribute11 ' || l_c_attribute11);
2150 -- invtrace('c_attribute12 ' || l_c_attribute12);
2151 -- invtrace('c_attribute13 ' || l_c_attribute13);
2152 -- invtrace('c_attribute14 ' || l_c_attribute14);
2153 -- invtrace('c_attribute15 ' || l_c_attribute15);
2154 -- invtrace('c_attribute16 ' || l_c_attribute16);
2155 -- invtrace('c_attribute17 ' || l_c_attribute17);
2156 -- invtrace('c_attribute18 ' || l_c_attribute18);
2157 -- invtrace('c_attribute19 ' || l_c_attribute19);
2158 -- invtrace('c_attribute20 ' || l_c_attribute20);
2159 -- invtrace('d_attribute1 ' || l_d_attribute1);
2160 -- invtrace('d_attribute2 ' || l_d_attribute2);
2161 -- invtrace('d_attribute3 ' || l_d_attribute3);
2162 -- invtrace('d_attribute4 ' || l_d_attribute4);
2163 -- invtrace('d_attribute5 ' || l_d_attribute5);
2164 -- invtrace('d_attribute6 ' || l_d_attribute6);
2165 -- invtrace('d_attribute7 ' || l_d_attribute7);
2166 -- invtrace('d_attribute8 ' || l_d_attribute8);
2167 -- invtrace('d_attribute9 ' || l_d_attribute9);
2168 -- invtrace('d_attribute10 ' || l_d_attribute10);
2169 -- invtrace('n_attribute1 ' || l_n_attribute1);
2170 -- invtrace('n_attribute2 ' || l_n_attribute2);
2171 -- invtrace('n_attribute3 ' || l_n_attribute3);
2172 -- invtrace('n_attribute4 ' || l_n_attribute4);
2173 -- invtrace('n_attribute5 ' || l_n_attribute5);
2174 -- invtrace('n_attribute6 ' || l_n_attribute6);
2175 -- invtrace('n_attribute7 ' || l_n_attribute7);
2176 -- invtrace('n_attribute8 ' || l_n_attribute8);
2177 -- invtrace('n_attribute9 ' || l_n_attribute9);
2178 -- invtrace('n_attribute10 ' || l_n_attribute10);
2179 -- invtrace('territory_code ' || l_territory_code);
2180 -- invtrace('cost_group_id ' || inv_cost_group_pub.g_cost_group_id);
2181
2182 UPDATE mtl_serial_numbers
2183 SET current_status = decode(p_current_status, null,
2184 decode(p_wip_entity_id, null, current_status, decode(current_status, 6, 1, current_status)),
2185 decode(p_wip_entity_id, null, p_current_status,decode(p_current_status, 6, 1, p_current_status)) )
2186 , initialization_date = initialization_date
2187 , completion_date = p_completion_date
2188 , ship_date = p_ship_date
2189 , revision = p_revision
2190 , lot_number = p_lot_number
2191 , -- do not update group mark id for staging transfer vipartha
2192 -- group_mark_id = DECODE(p_transaction_action_id, 28, group_mark_id, NULL)
2193 group_mark_id = DECODE(p_transaction_action_id, 28, group_mark_id, l_group_mark_id)
2194 , line_mark_id = p_line_mark_id
2195 , lot_line_mark_id = NULL
2196 , current_organization_id = p_organization_id
2197 , organization_type = NVL(p_organization_type, 2)
2198 , owning_organization_id = NVL(p_owning_org_id, p_organization_id)
2199 , owning_tp_type = NVL(p_owning_tp_type, 2)
2200 , planning_organization_id = NVL(p_planning_org_id, p_organization_id)
2201 , planning_tp_type = NVL(p_planning_tp_type, 2)
2202 , current_locator_id = p_current_locator_id
2203 , current_subinventory_code = p_subinventory_code
2204 , original_wip_entity_id = p_trx_src_id
2205 , original_unit_vendor_id = p_unit_vendor_id
2206 , vendor_lot_number = p_vendor_lot_number
2207 , vendor_serial_number = p_vendor_serial_number
2208 , last_receipt_issue_type = p_receipt_issue_type
2209 , last_txn_source_id = p_txn_src_id
2210 , last_txn_source_type_id = p_txn_src_type_id
2211 , last_txn_source_name = p_txn_src_name
2212 , last_update_date = SYSDATE
2213 , last_updated_by = l_userid
2214 , parent_item_id = p_parent_item_id
2215 , parent_serial_number = p_parent_serial_number
2216 , origination_date = l_origination_date
2217 , c_attribute1 = l_c_attribute1
2218 , c_attribute2 = l_c_attribute2
2219 , c_attribute3 = l_c_attribute3
2220 , c_attribute4 = l_c_attribute4
2221 , c_attribute5 = l_c_attribute5
2222 , c_attribute6 = l_c_attribute6
2223 , c_attribute7 = l_c_attribute7
2224 , c_attribute8 = l_c_attribute8
2225 , c_attribute9 = l_c_attribute9
2226 , c_attribute10 = l_c_attribute10
2227 , c_attribute11 = l_c_attribute11
2228 , c_attribute12 = l_c_attribute12
2229 , c_attribute13 = l_c_attribute13
2230 , c_attribute14 = l_c_attribute14
2231 , c_attribute15 = l_c_attribute15
2232 , c_attribute16 = l_c_attribute16
2233 , c_attribute17 = l_c_attribute17
2234 , c_attribute18 = l_c_attribute18
2235 , c_attribute19 = l_c_attribute19
2236 , c_attribute20 = l_c_attribute20
2237 , d_attribute1 = l_d_attribute1
2238 , d_attribute2 = l_d_attribute2
2239 , d_attribute3 = l_d_attribute3
2240 , d_attribute4 = l_d_attribute4
2241 , d_attribute5 = l_d_attribute5
2242 , d_attribute6 = l_d_attribute6
2243 , d_attribute7 = l_d_attribute7
2244 , d_attribute8 = l_d_attribute8
2245 , d_attribute9 = l_d_attribute9
2246 , d_attribute10 = l_d_attribute10
2247 , n_attribute1 = l_n_attribute1
2248 , n_attribute2 = l_n_attribute2
2249 , n_attribute3 = l_n_attribute3
2250 , n_attribute4 = l_n_attribute4
2251 , n_attribute5 = l_n_attribute5
2252 , n_attribute6 = l_n_attribute6
2253 , n_attribute7 = l_n_attribute7
2254 , n_attribute8 = l_n_attribute8
2255 , n_attribute9 = l_n_attribute9
2256 , n_attribute10 = l_n_attribute10
2257 , territory_code = l_territory_code
2258 , cost_group_id = inv_cost_group_pub.g_cost_group_id
2259 , wip_entity_id = p_wip_entity_id
2260 , operation_seq_num = p_operation_seq_num
2261 , intraoperation_step_type = p_intraoperation_step_type
2262 WHERE inventory_item_id = p_inventory_item_id
2263 AND serial_number = p_serial_number
2264 AND DECODE(current_status, 6, 1, current_status) = DECODE(p_last_status, 6, 1, p_last_status);
2265 ELSE
2266 UPDATE mtl_serial_numbers
2267 SET current_status = decode(p_current_status, null,
2268 decode(p_wip_entity_id, null, current_status, decode(current_status, 6, 1, current_Status)),
2269 decode(p_wip_entity_id, null, p_current_status, decode(p_current_status, 6, 1, p_current_status)))
2270 , initialization_date = initialization_date
2271 , completion_date = p_completion_date
2272 , ship_date = p_ship_date
2273 , revision = p_revision
2274 , lot_number = p_lot_number
2275 , -- do not update group mark id for staging transfer vipartha
2276 --group_mark_id = DECODE(p_transaction_action_id, 28, group_mark_id, NULL)
2277 group_mark_id = DECODE(p_transaction_action_id, 28, group_mark_id, l_group_mark_id)
2278 , line_mark_id = p_line_mark_id
2279 , lot_line_mark_id = NULL
2280 , current_organization_id = p_organization_id
2281 , current_locator_id = p_current_locator_id
2282 , current_subinventory_code = p_subinventory_code
2283 , original_wip_entity_id = p_trx_src_id
2284 , original_unit_vendor_id = p_unit_vendor_id
2285 , vendor_lot_number = p_vendor_lot_number
2286 , vendor_serial_number = p_vendor_serial_number
2287 , last_receipt_issue_type = p_receipt_issue_type
2288 , last_txn_source_id = p_txn_src_id
2289 , last_txn_source_type_id = p_txn_src_type_id
2290 , last_txn_source_name = p_txn_src_name
2291 , last_update_date = SYSDATE
2292 , last_updated_by = l_userid
2293 , parent_item_id = p_parent_item_id
2294 , parent_serial_number = p_parent_serial_number
2295 , wip_entity_id = p_wip_entity_id
2296 , operation_seq_num = p_operation_seq_num
2297 , intraoperation_step_type = p_intraoperation_step_type
2298 WHERE inventory_item_id = p_inventory_item_id
2299 AND serial_number = p_serial_number
2300 AND DECODE(current_status, 6, 1, current_status) = DECODE(p_last_status, 6, 1, p_last_status);
2301 END IF; -- !wms_installed OR p_serial_temp_id is NULL. --Bug4535887
2302 ELSE
2303 -- invtrace('last status is neither 1 nor 6');
2304 -- invtrace('updating MSN WITH values ');
2305 -- invtrace('current_status ' || p_current_status);
2306 -- invtrace(' initialization_date ' || initialization_date);
2307 -- invtrace(' completion_date ' || p_completion_date);
2308 -- invtrace(' ship_date ' || p_ship_date);
2309 -- invtrace(' revision ' || p_revision);
2310 -- invtrace(' lot_number ' || p_lot_number);
2311 -- do not update group mark id for staging transfer vipartha);
2312 -- invtrace('group_mark_id ' || DECODE(p_transaction_action_id,28,group_mark_id, NULL));
2313 -- invtrace(' line_mark_id is NULL');
2314 -- invtrace(' lot_line_mark_id IS NULL');
2315 -- invtrace(' current_organization_id ' || p_organization_id);
2316 -- invtrace(' current_locator_id ' || p_current_locator_id);
2317 -- invtrace(' current_subinventory_code ' || p_subinventory_code);
2318 -- invtrace(' original_wip_entity_id ' || p_trx_src_id);
2319 -- invtrace(' original_unit_vendor_id ' || p_unit_vendor_id);
2320 -- invtrace(' vendor_lot_number ' || p_vendor_lot_number);
2321 -- invtrace(' vendor_serial_number ' || p_vendor_serial_number);
2322 -- invtrace(' last_receipt_issue_type ' || p_receipt_issue_type);
2323 -- invtrace(' last_txn_source_id ' || p_txn_src_id);
2324 -- invtrace(' last_txn_source_type_id ' || p_txn_src_type_id);
2325 -- invtrace(' last_txn_source_name ' || p_txn_src_name);
2326 -- invtrace(' last_update_date ' || SYSDATE);
2327 -- invtrace(' last_updated_by ' || l_userid);
2328 -- invtrace(' parent_item_id ' || p_parent_item_id);
2329 -- invtrace(' parent_serial_number ' || p_parent_serial_number);
2330 UPDATE mtl_serial_numbers
2331 SET current_status = decode(p_current_status, null,
2332 decode(p_wip_entity_id, null, current_status, decode(current_status, 6, 1, current_Status)),
2333 decode(p_wip_entity_id, null, p_current_status, decode(p_current_status, 6, 1, p_current_status)))
2334 , initialization_date = initialization_date
2335 , completion_date = p_completion_date
2336 , ship_date = p_ship_date
2337 , revision = p_revision
2338 , lot_number = p_lot_number
2339 , -- do not update group mark id for staging transfer vipartha
2340 --group_mark_id = DECODE(p_transaction_action_id, 28, group_mark_id, NULL)
2341 group_mark_id = DECODE(p_transaction_action_id, 28, group_mark_id, l_group_mark_id)
2342 , line_mark_id = p_line_mark_id
2343 , lot_line_mark_id = NULL
2344 , current_organization_id = p_organization_id
2345 , current_locator_id = p_current_locator_id
2346 , current_subinventory_code = p_subinventory_code
2347 , original_wip_entity_id = p_trx_src_id
2348 , original_unit_vendor_id = p_unit_vendor_id
2349 , vendor_lot_number = p_vendor_lot_number
2350 , vendor_serial_number = p_vendor_serial_number
2351 , last_receipt_issue_type = p_receipt_issue_type
2352 , last_txn_source_id = p_txn_src_id
2353 , last_txn_source_type_id = p_txn_src_type_id
2354 , last_txn_source_name = p_txn_src_name
2355 , last_update_date = SYSDATE
2356 , last_updated_by = l_userid
2357 , parent_item_id = p_parent_item_id
2358 , parent_serial_number = p_parent_serial_number
2359 , wip_entity_id = p_wip_entity_id
2360 , operation_seq_num = p_operation_seq_num
2361 , intraoperation_step_type = p_intraoperation_step_type
2362 WHERE inventory_item_id = p_inventory_item_id
2363 AND serial_number = p_serial_number
2364 AND DECODE(current_status, 6, 1, current_status) = DECODE(p_last_status, 6, 1, p_last_status);
2365 END IF;
2366
2367 x_return_status := fnd_api.g_ret_sts_success;
2368
2369 -- End of API body.
2370 -- Standard check of p_commit.
2371 IF fnd_api.to_boolean(p_commit) THEN
2372 COMMIT WORK;
2373 END IF;
2374
2375 -- Standard call to get message count and if count is 1, get message info.
2376 fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false, p_count => x_msg_count, p_data => x_msg_data);
2377 EXCEPTION
2378 WHEN OTHERS THEN
2379 ROLLBACK TO apiupdateserial_apipub;
2380
2381 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error) THEN
2382 fnd_msg_pub.add_exc_msg('INV_SERIAL_NUMBER_PUB', 'updateSerial');
2383 END IF;
2384
2385 x_return_status := fnd_api.g_ret_sts_unexp_error;
2386 END updateserial;
2387
2388 PROCEDURE insertunittrx(
2389 p_api_version IN NUMBER
2390 , p_init_msg_list IN VARCHAR2 := fnd_api.g_false
2391 , p_commit IN VARCHAR2 := fnd_api.g_false
2392 , p_validation_level IN NUMBER := fnd_api.g_valid_level_full
2393 , p_inventory_item_id IN NUMBER
2394 , p_organization_id IN NUMBER
2395 , p_serial_number IN VARCHAR2
2396 , p_current_locator_id IN NUMBER
2397 , p_subinventory_code IN VARCHAR2
2398 , p_transaction_date IN DATE
2399 , p_txn_src_id IN NUMBER
2400 , p_txn_src_name IN VARCHAR2
2401 , p_txn_src_type_id IN NUMBER
2402 , p_transaction_id IN NUMBER
2403 , p_transaction_action_id IN NUMBER
2404 , p_transaction_temp_id IN NUMBER
2405 , p_receipt_issue_type IN NUMBER
2406 , p_customer_id IN NUMBER
2407 , p_ship_id IN NUMBER
2408 , p_status_id IN NUMBER
2409 , x_return_status OUT NOCOPY VARCHAR2
2410 , x_msg_count OUT NOCOPY NUMBER
2411 , x_msg_data OUT NOCOPY VARCHAR2
2412 ) IS
2413 l_api_version CONSTANT NUMBER := 1.0;
2414 l_api_name CONSTANT VARCHAR2(30) := 'insertSerial';
2415 l_userid NUMBER;
2416 l_loginid NUMBER;
2417 l_serial_control_code NUMBER;
2418 l_attributes_default inv_lot_sel_attr.lot_sel_attributes_tbl_type;
2419 l_attributes_default_count NUMBER;
2420 l_attributes_in inv_lot_sel_attr.lot_sel_attributes_tbl_type;
2421 l_column_idx BINARY_INTEGER := 44;
2422 l_return_status VARCHAR2(1);
2423 l_msg_data VARCHAR2(2000);
2424 l_msg_count NUMBER;
2425 l_wms_installed BOOLEAN;
2426
2427 l_sys_date date := NULL;
2428 l_date2 date := NULL;
2429 l_date23 date := NULL;
2430 l_date24 date := NULL;
2431 l_date25 date := NULL;
2432 l_date26 date := NULL;
2433 l_date27 date := NULL;
2434 l_date28 date := NULL;
2435 l_date29 date := NULL;
2436 l_date30 date := NULL;
2437 l_date31 date := NULL;
2438 l_date32 date := NULL;
2439
2440 l_num33 NUMBER := NULL;
2441 l_num34 NUMBER := NULL;
2442 l_num35 NUMBER := NULL;
2443 l_num36 NUMBER := NULL;
2444 l_num37 NUMBER := NULL;
2445 l_num38 NUMBER := NULL;
2446 l_num39 NUMBER := NULL;
2447 l_num40 NUMBER := NULL;
2448 l_num41 NUMBER := NULL;
2449 l_num42 NUMBER := NULL;
2450
2451 CURSOR serial_temp_csr(p_transaction_temp_id NUMBER) IS
2452 SELECT serial_attribute_category
2453 , fnd_date.date_to_canonical(origination_date)
2454 , c_attribute1
2455 , c_attribute2
2456 , c_attribute3
2457 , c_attribute4
2458 , c_attribute5
2459 , c_attribute6
2460 , c_attribute7
2461 , c_attribute8
2462 , c_attribute9
2463 , c_attribute10
2464 , c_attribute11
2465 , c_attribute12
2466 , c_attribute13
2467 , c_attribute14
2468 , c_attribute15
2469 , c_attribute16
2470 , c_attribute17
2471 , c_attribute18
2472 , c_attribute19
2473 , c_attribute20
2474 , fnd_date.date_to_canonical(d_attribute1)
2475 , fnd_date.date_to_canonical(d_attribute2)
2476 , fnd_date.date_to_canonical(d_attribute3)
2477 , fnd_date.date_to_canonical(d_attribute4)
2478 , fnd_date.date_to_canonical(d_attribute5)
2479 , fnd_date.date_to_canonical(d_attribute6)
2480 , fnd_date.date_to_canonical(d_attribute7)
2481 , fnd_date.date_to_canonical(d_attribute8)
2482 , fnd_date.date_to_canonical(d_attribute9)
2483 , fnd_date.date_to_canonical(d_attribute10)
2484 , TO_CHAR(n_attribute1)
2485 , TO_CHAR(n_attribute2)
2486 , TO_CHAR(n_attribute3)
2487 , TO_CHAR(n_attribute4)
2488 , TO_CHAR(n_attribute5)
2489 , TO_CHAR(n_attribute6)
2490 , TO_CHAR(n_attribute7)
2491 , TO_CHAR(n_attribute8)
2492 , TO_CHAR(n_attribute9)
2493 , TO_CHAR(n_attribute10)
2494 , status_id
2495 , territory_code
2496 FROM mtl_serial_numbers_temp
2497 WHERE transaction_temp_id = p_transaction_temp_id
2498 AND LPAD(p_serial_number,30) BETWEEN LPAD(fm_serial_number,30) AND LPAD(NVL(to_serial_number, fm_serial_number),30);
2499 /* Bug 3622025 -- Added the LPAD function in the above where clause */
2500
2501 l_input_idx BINARY_INTEGER;
2502 l_debug NUMBER := NVL(fnd_profile.VALUE('INV_DEBUG_TRACE'), 0);
2503 BEGIN
2504 -- Standard Start of API savepoint
2505 SAVEPOINT apiinsertserial_apipub;
2506
2507 -- Standard call to check for call compatibility.
2508 IF NOT fnd_api.compatible_api_call(l_api_version, p_api_version, l_api_name, g_pkg_name) THEN
2509 RAISE fnd_api.g_exc_unexpected_error;
2510 END IF;
2511
2512 -- Initialize message list if p_init_msg_list is set to TRUE.
2513 IF fnd_api.to_boolean(p_init_msg_list) THEN
2514 fnd_msg_pub.initialize;
2515 END IF;
2516
2517 -- Initialize API return status to success
2518
2519 /**IF (p_transaction_action_id = 3 AND g_firstscan = FALSE) THEN
2520 x_return_status := fnd_api.g_ret_sts_success;
2521 ELSE**/
2522 x_return_status := fnd_api.g_ret_sts_success;
2523 l_wms_installed :=
2524 wms_install.check_install(
2525 x_return_status => l_return_status
2526 , x_msg_count => l_msg_count
2527 , x_msg_data => l_msg_data
2528 , p_organization_id => NULL --p_organization_id
2529 );
2530
2531 IF (p_transaction_temp_id IS NOT NULL) THEN
2532 OPEN serial_temp_csr(p_transaction_temp_id);
2533
2534 populateattributescolumn();
2535
2536 FETCH serial_temp_csr
2537 INTO g_serial_attributes_tbl(1).column_value
2538 , g_serial_attributes_tbl(2).column_value
2539 , g_serial_attributes_tbl(3).column_value
2540 , g_serial_attributes_tbl(4).column_value
2541 , g_serial_attributes_tbl(5).column_value
2542 , g_serial_attributes_tbl(6).column_value
2543 , g_serial_attributes_tbl(7).column_value
2544 , g_serial_attributes_tbl(8).column_value
2545 , g_serial_attributes_tbl(9).column_value
2546 , g_serial_attributes_tbl(10).column_value
2547 , g_serial_attributes_tbl(11).column_value
2548 , g_serial_attributes_tbl(12).column_value
2549 , g_serial_attributes_tbl(13).column_value
2550 , g_serial_attributes_tbl(14).column_value
2551 , g_serial_attributes_tbl(15).column_value
2552 , g_serial_attributes_tbl(16).column_value
2553 , g_serial_attributes_tbl(17).column_value
2554 , g_serial_attributes_tbl(18).column_value
2555 , g_serial_attributes_tbl(19).column_value
2556 , g_serial_attributes_tbl(20).column_value
2557 , g_serial_attributes_tbl(21).column_value
2558 , g_serial_attributes_tbl(22).column_value
2559 , g_serial_attributes_tbl(23).column_value
2560 , g_serial_attributes_tbl(24).column_value
2561 , g_serial_attributes_tbl(25).column_value
2562 , g_serial_attributes_tbl(26).column_value
2563 , g_serial_attributes_tbl(27).column_value
2564 , g_serial_attributes_tbl(28).column_value
2565 , g_serial_attributes_tbl(29).column_value
2566 , g_serial_attributes_tbl(30).column_value
2567 , g_serial_attributes_tbl(31).column_value
2568 , g_serial_attributes_tbl(32).column_value
2569 , g_serial_attributes_tbl(33).column_value
2570 , g_serial_attributes_tbl(34).column_value
2571 , g_serial_attributes_tbl(35).column_value
2572 , g_serial_attributes_tbl(36).column_value
2573 , g_serial_attributes_tbl(37).column_value
2574 , g_serial_attributes_tbl(38).column_value
2575 , g_serial_attributes_tbl(39).column_value
2576 , g_serial_attributes_tbl(40).column_value
2577 , g_serial_attributes_tbl(41).column_value
2578 , g_serial_attributes_tbl(42).column_value
2579 , g_serial_attributes_tbl(43).column_value
2580 , g_serial_attributes_tbl(44).column_value;
2581
2582 CLOSE serial_temp_csr;
2583
2584 l_input_idx := 0;
2585
2586 IF l_wms_installed THEN
2587 FOR x IN 1 .. 44 LOOP
2588 IF (g_serial_attributes_tbl(x).column_value IS NOT NULL) THEN
2589 l_input_idx := l_input_idx + 1;
2590 l_attributes_in(l_input_idx).column_name := g_serial_attributes_tbl(x).column_name;
2591 l_attributes_in(l_input_idx).column_type := g_serial_attributes_tbl(x).column_type;
2592 l_attributes_in(l_input_idx).column_value := g_serial_attributes_tbl(x).column_value;
2593 END IF;
2594 END LOOP;
2595 END IF; -- if wms_installed is true
2596 END IF; -- if transaction_temp_id is not null
2597
2598 ----------------------------------------------------------
2599 -- call inv_lot_sel_attr.get_default to get the default value
2600 -- of the lot attributes
2601 ---------------------------------------------------------
2602 IF l_wms_installed THEN
2603 inv_lot_sel_attr.get_default(
2604 x_attributes_default => l_attributes_default
2605 , x_attributes_default_count => l_attributes_default_count
2606 , x_return_status => l_return_status
2607 , x_msg_count => l_msg_count
2608 , x_msg_data => l_msg_data
2609 , p_table_name => 'MTL_SERIAL_NUMBERS'
2610 , p_attributes_name => 'Serial Attributes'
2611 , p_inventory_item_id => p_inventory_item_id
2612 , p_organization_id => p_organization_id
2613 , p_lot_serial_number => p_serial_number
2614 , p_attributes => l_attributes_in
2615 );
2616
2617 IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
2618 x_return_status := l_return_status;
2619 RAISE fnd_api.g_exc_unexpected_error;
2620 END IF;
2621
2622 /* Get the default attribs only when there is no value on the form (in MSNT).
2623 * In case the user changes the context and the attributes while recieving,
2624 * they would be lost if we get the default context again--2756040
2625 */
2626 IF (l_attributes_default_count > 0
2627 AND(g_serial_attributes_tbl(1).column_value = NULL)) THEN
2628 FOR i IN 1 .. l_attributes_default_count LOOP
2629 FOR j IN 1 .. g_serial_attributes_tbl.COUNT LOOP
2630 IF (l_attributes_default(i).column_name = g_serial_attributes_tbl(j).column_name) THEN
2631 g_serial_attributes_tbl(j).column_value := l_attributes_default(i).column_value;
2632 END IF;
2633 END LOOP;
2634 END LOOP;
2635 END IF;
2636 END IF; -- if wms install is true
2637
2638 l_userid := fnd_global.user_id;
2639 l_loginid := fnd_global.login_id;
2640 l_sys_date := SYSDATE;
2641
2642 IF (p_transaction_action_id = 3 AND g_firstscan = FALSE) THEN
2643 INSERT INTO mtl_unit_transactions
2644 (
2645 transaction_id
2646 , last_update_date
2647 , last_updated_by
2648 , creation_date
2649 , created_by
2650 , last_update_login
2651 , serial_number
2652 , inventory_item_id
2653 , organization_id
2654 , subinventory_code
2655 , locator_id
2656 , transaction_date
2657 , transaction_source_id
2658 , transaction_source_type_id
2659 , transaction_source_name
2660 , receipt_issue_type
2661 , customer_id
2662 , ship_id
2663 , serial_attribute_category
2664 , origination_date
2665 , c_attribute1
2666 , c_attribute2
2667 , c_attribute3
2668 , c_attribute4
2669 , c_attribute5
2670 , c_attribute6
2671 , c_attribute7
2672 , c_attribute8
2673 , c_attribute9
2674 , c_attribute10
2675 , c_attribute11
2676 , c_attribute12
2677 , c_attribute13
2678 , c_attribute14
2679 , c_attribute15
2680 , c_attribute16
2681 , c_attribute17
2682 , c_attribute18
2683 , c_attribute19
2684 , c_attribute20
2685 , d_attribute1
2686 , d_attribute2
2687 , d_attribute3
2688 , d_attribute4
2689 , d_attribute5
2690 , d_attribute6
2691 , d_attribute7
2692 , d_attribute8
2693 , d_attribute9
2694 , d_attribute10
2695 , n_attribute1
2696 , n_attribute2
2697 , n_attribute3
2698 , n_attribute4
2699 , n_attribute5
2700 , n_attribute6
2701 , n_attribute7
2702 , n_attribute8
2703 , n_attribute9
2704 , n_attribute10
2705 , status_id
2706 , territory_code
2707 , time_since_new
2708 , cycles_since_new
2709 , time_since_overhaul
2710 , cycles_since_overhaul
2711 , time_since_repair
2712 , cycles_since_repair
2713 , time_since_visit
2714 , cycles_since_visit
2715 , time_since_mark
2716 , cycles_since_mark
2717 , number_of_repairs
2718 )
2719 SELECT p_transaction_id
2720 , l_sys_date
2721 , l_userid
2722 , creation_date
2723 , created_by
2724 , l_loginid
2725 , p_serial_number
2726 , p_inventory_item_id
2727 , p_organization_id
2728 , p_subinventory_code
2729 , p_current_locator_id
2730 , p_transaction_date
2731 , p_txn_src_id
2732 , p_txn_src_type_id
2733 , p_txn_src_name
2734 , p_receipt_issue_type
2735 , p_customer_id
2736 , p_ship_id
2737 , serial_attribute_category
2738 , origination_date
2739 , c_attribute1
2740 , c_attribute2
2741 , c_attribute3
2742 , c_attribute4
2743 , c_attribute5
2744 , c_attribute6
2745 , c_attribute7
2746 , c_attribute8
2747 , c_attribute9
2748 , c_attribute10
2749 , c_attribute11
2750 , c_attribute12
2751 , c_attribute13
2752 , c_attribute14
2753 , c_attribute15
2754 , c_attribute16
2755 , c_attribute17
2756 , c_attribute18
2757 , c_attribute19
2758 , c_attribute20
2759 , d_attribute1
2760 , d_attribute2
2761 , d_attribute3
2762 , d_attribute4
2763 , d_attribute5
2764 , d_attribute6
2765 , d_attribute7
2766 , d_attribute8
2767 , d_attribute9
2768 , d_attribute10
2769 , n_attribute1
2770 , n_attribute2
2771 , n_attribute3
2772 , n_attribute4
2773 , n_attribute5
2774 , n_attribute6
2775 , n_attribute7
2776 , n_attribute8
2777 , n_attribute9
2778 , n_attribute10
2779 , status_id
2780 , territory_code
2781 , time_since_new
2782 , cycles_since_new
2783 , time_since_overhaul
2784 , cycles_since_overhaul
2785 , time_since_repair
2786 , cycles_since_repair
2787 , time_since_visit
2788 , cycles_since_visit
2789 , time_since_mark
2790 , cycles_since_mark
2791 , number_of_repairs
2792 FROM mtl_serial_numbers
2793 WHERE serial_number = p_serial_number
2794 AND current_organization_id = p_organization_id
2795 AND inventory_item_id = p_inventory_item_id;
2796 /* Bug 2207912 */
2797 /* The following not exists statement is commented out
2798 ** because this part of the statement gets executed
2799 ** only for ORG TRANSFER and for the delivery side of
2800 ** of transaction as firstscan is false now, before this
2801 ** insert statement gets executed the mtl_serial_number is
2802 ** table is already updated with the organization_id of the
2803 ** delivered org and status from the TM, so there will be an entry always exist
2804 ** ing for the where condition specified in the exists clasue
2805 ** for mtl_serial_number table
2806 ** So the insert statement will always fail.
2807 */
2808 --and not exists
2809 -- ( select NULL
2810 -- from mtl_serial_numbers sn
2811 -- where sn.serial_number = p_serial_number
2812 -- and sn.current_organization_id = p_organization_id
2813 -- and sn.inventory_item_id = p_inventory_item_id);
2814 ELSE
2815 IF l_wms_installed THEN
2816 /** 2756040 - Populate Serial Attribute Category info when it is not
2817 ** a receiving transaction **/
2818 IF ((g_serial_attributes_tbl(1).column_value = NULL)
2819 OR(p_transaction_action_id NOT IN(12, 27, 31))) THEN
2820 inv_lot_sel_attr.get_context_code(g_serial_attributes_tbl(1).column_value, p_organization_id, p_inventory_item_id
2821 , 'Serial Attributes');
2822 END IF;
2823 ELSE
2824 g_serial_attributes_tbl(1).column_value := NULL;
2825 END IF;
2826
2827 l_date2 := fnd_date.canonical_to_date(g_serial_attributes_tbl(2).COLUMN_VALUE);
2828 l_date23 := fnd_date.canonical_to_date(g_serial_attributes_tbl(23).COLUMN_VALUE);
2829 l_date24 := fnd_date.canonical_to_date(g_serial_attributes_tbl(24).COLUMN_VALUE);
2830 l_date25 := fnd_date.canonical_to_date(g_serial_attributes_tbl(25).COLUMN_VALUE);
2831 l_date26 := fnd_date.canonical_to_date(g_serial_attributes_tbl(26).COLUMN_VALUE);
2832 l_date27 := fnd_date.canonical_to_date(g_serial_attributes_tbl(27).COLUMN_VALUE);
2833 l_date28 := fnd_date.canonical_to_date(g_serial_attributes_tbl(28).COLUMN_VALUE);
2834 l_date29 := fnd_date.canonical_to_date(g_serial_attributes_tbl(29).COLUMN_VALUE);
2835 l_date30 := fnd_date.canonical_to_date(g_serial_attributes_tbl(30).COLUMN_VALUE);
2836 l_date31 := fnd_date.canonical_to_date(g_serial_attributes_tbl(31).COLUMN_VALUE);
2837 l_date32 := fnd_date.canonical_to_date(g_serial_attributes_tbl(32).COLUMN_VALUE);
2838 l_num33 := to_number(g_serial_attributes_tbl(33).COLUMN_VALUE);
2839 l_num34 := to_number(g_serial_attributes_tbl(34).COLUMN_VALUE);
2840 l_num35 := to_number(g_serial_attributes_tbl(35).COLUMN_VALUE);
2841 l_num36 := to_number(g_serial_attributes_tbl(36).COLUMN_VALUE);
2842 l_num37 := to_number(g_serial_attributes_tbl(37).COLUMN_VALUE);
2843 l_num38 := to_number(g_serial_attributes_tbl(38).COLUMN_VALUE);
2844 l_num39 := to_number(g_serial_attributes_tbl(39).COLUMN_VALUE);
2845 l_num40 := to_number(g_serial_attributes_tbl(40).COLUMN_VALUE);
2846 l_num41 := to_number(g_serial_attributes_tbl(41).COLUMN_VALUE);
2847 l_num42 := to_number(g_serial_attributes_tbl(42).COLUMN_VALUE);
2848
2849 IF (p_transaction_temp_id > 0) THEN
2850 --Bug 2067223 paranthesis are added in the where clause
2851 -- of the select statement
2852 INSERT INTO mtl_unit_transactions
2853 (
2854 transaction_id
2855 , last_update_date
2856 , last_updated_by
2857 , creation_date
2858 , created_by
2859 , last_update_login
2860 , serial_number
2861 , inventory_item_id
2862 , organization_id
2863 , subinventory_code
2864 , locator_id
2865 , transaction_date
2866 , transaction_source_id
2867 , transaction_source_type_id
2868 , transaction_source_name
2869 , receipt_issue_type
2870 , customer_id
2871 , ship_id
2872 , serial_attribute_category
2873 , origination_date
2874 , c_attribute1
2875 , c_attribute2
2876 , c_attribute3
2877 , c_attribute4
2878 , c_attribute5
2879 , c_attribute6
2880 , c_attribute7
2881 , c_attribute8
2882 , c_attribute9
2883 , c_attribute10
2884 , c_attribute11
2885 , c_attribute12
2886 , c_attribute13
2887 , c_attribute14
2888 , c_attribute15
2889 , c_attribute16
2890 , c_attribute17
2891 , c_attribute18
2892 , c_attribute19
2893 , c_attribute20
2894 , d_attribute1
2895 , d_attribute2
2896 , d_attribute3
2897 , d_attribute4
2898 , d_attribute5
2899 , d_attribute6
2900 , d_attribute7
2901 , d_attribute8
2902 , d_attribute9
2903 , d_attribute10
2904 , n_attribute1
2905 , n_attribute2
2906 , n_attribute3
2907 , n_attribute4
2908 , n_attribute5
2909 , n_attribute6
2910 , n_attribute7
2911 , n_attribute8
2912 , n_attribute9
2913 , n_attribute10
2914 , status_id
2915 , territory_code
2916 , time_since_new
2917 , cycles_since_new
2918 , time_since_overhaul
2919 , cycles_since_overhaul
2920 , time_since_repair
2921 , cycles_since_repair
2922 , time_since_visit
2923 , cycles_since_visit
2924 , time_since_mark
2925 , cycles_since_mark
2926 , number_of_repairs
2927 , product_code
2928 , product_transaction_id
2929 , attribute_category
2930 , attribute1
2931 , attribute2
2932 , attribute3
2933 , attribute4
2934 , attribute5
2935 , attribute6
2936 , attribute7
2937 , attribute8
2938 , attribute9
2939 , attribute10
2940 , attribute11
2941 , attribute12
2942 , attribute13
2943 , attribute14
2944 , attribute15
2945 )
2946 SELECT p_transaction_id
2947 , l_sys_date
2948 , l_userid
2949 , creation_date
2950 , l_userid
2951 , l_loginid
2952 , p_serial_number
2953 , p_inventory_item_id
2954 , p_organization_id
2955 , p_subinventory_code
2956 , p_current_locator_id
2957 , p_transaction_date
2958 , p_txn_src_id
2959 , p_txn_src_type_id
2960 , p_txn_src_name
2961 , p_receipt_issue_type
2962 , p_customer_id
2963 , p_ship_id
2964 , g_serial_attributes_tbl(1).column_value
2965 , l_date2
2966 , g_serial_attributes_tbl(3).column_value
2967 , g_serial_attributes_tbl(4).column_value
2968 , g_serial_attributes_tbl(5).column_value
2969 , g_serial_attributes_tbl(6).column_value
2970 , g_serial_attributes_tbl(7).column_value
2971 , g_serial_attributes_tbl(8).column_value
2972 , g_serial_attributes_tbl(9).column_value
2973 , g_serial_attributes_tbl(10).column_value
2974 , g_serial_attributes_tbl(11).column_value
2975 , g_serial_attributes_tbl(12).column_value
2976 , g_serial_attributes_tbl(13).column_value
2977 , g_serial_attributes_tbl(14).column_value
2978 , g_serial_attributes_tbl(15).column_value
2979 , g_serial_attributes_tbl(16).column_value
2980 , g_serial_attributes_tbl(17).column_value
2981 , g_serial_attributes_tbl(18).column_value
2982 , g_serial_attributes_tbl(19).column_value
2983 , g_serial_attributes_tbl(20).column_value
2984 , g_serial_attributes_tbl(21).column_value
2985 , g_serial_attributes_tbl(22).column_value
2986 , l_date23
2987 , l_date24
2988 , l_date25
2989 , l_date26
2990 , l_date27
2991 , l_date28
2992 , l_date29
2993 , l_date30
2994 , l_date31
2995 , l_date32
2996 , l_num33
2997 , l_num34
2998 , l_num35
2999 , l_num36
3000 , l_num37
3001 , l_num38
3002 , l_num39
3003 , l_num40
3004 , l_num41
3005 , l_num42
3006 , p_status_id
3007 , g_serial_attributes_tbl(44).column_value
3008 , time_since_new
3009 , cycles_since_new
3010 , time_since_overhaul
3011 , cycles_since_overhaul
3012 , time_since_repair
3013 , cycles_since_repair
3014 , time_since_visit
3015 , cycles_since_visit
3016 , time_since_mark
3017 , cycles_since_mark
3018 , number_of_repairs
3019 , product_code
3020 , product_transaction_id
3021 , attribute_category
3022 , attribute1
3023 , attribute2
3024 , attribute3
3025 , attribute4
3026 , attribute5
3027 , attribute6
3028 , attribute7
3029 , attribute8
3030 , attribute9
3031 , attribute10
3032 , attribute11
3033 , attribute12
3034 , attribute13
3035 , attribute14
3036 , attribute15
3037 FROM mtl_serial_numbers_temp
3038 WHERE transaction_temp_id = p_transaction_temp_id
3039 AND LPAD(p_serial_number,30) BETWEEN LPAD(fm_serial_number,30) AND LPAD(NVL(to_serial_number, fm_serial_number),30);
3040 /* Bug 3622025 -- Added the LPAD function in the above where clause */
3041 ELSE
3042 INSERT INTO mtl_unit_transactions
3043 (
3044 transaction_id
3045 , last_update_date
3046 , last_updated_by
3047 , creation_date
3048 , created_by
3049 , last_update_login
3050 , serial_number
3051 , inventory_item_id
3052 , organization_id
3053 , subinventory_code
3054 , locator_id
3055 , transaction_date
3056 , transaction_source_id
3057 , transaction_source_type_id
3058 , transaction_source_name
3059 , receipt_issue_type
3060 , customer_id
3061 , ship_id
3062 , serial_attribute_category
3063 , origination_date
3064 , c_attribute1
3065 , c_attribute2
3066 , c_attribute3
3067 , c_attribute4
3068 , c_attribute5
3069 , c_attribute6
3070 , c_attribute7
3071 , c_attribute8
3072 , c_attribute9
3073 , c_attribute10
3074 , c_attribute11
3075 , c_attribute12
3076 , c_attribute13
3077 , c_attribute14
3078 , c_attribute15
3079 , c_attribute16
3080 , c_attribute17
3081 , c_attribute18
3082 , c_attribute19
3083 , c_attribute20
3084 , d_attribute1
3085 , d_attribute2
3086 , d_attribute3
3087 , d_attribute4
3088 , d_attribute5
3089 , d_attribute6
3090 , d_attribute7
3091 , d_attribute8
3092 , d_attribute9
3093 , d_attribute10
3094 , n_attribute1
3095 , n_attribute2
3096 , n_attribute3
3097 , n_attribute4
3098 , n_attribute5
3099 , n_attribute6
3100 , n_attribute7
3101 , n_attribute8
3102 , n_attribute9
3103 , n_attribute10
3104 , status_id
3105 , territory_code
3106 , time_since_new
3107 , cycles_since_new
3108 , time_since_overhaul
3109 , cycles_since_overhaul
3110 , time_since_repair
3111 , cycles_since_repair
3112 , time_since_visit
3113 , cycles_since_visit
3114 , time_since_mark
3115 , cycles_since_mark
3116 , number_of_repairs
3117 )
3118 SELECT p_transaction_id
3119 , SYSDATE
3120 , l_userid
3121 , SYSDATE
3122 , l_userid
3123 , l_loginid
3124 , p_serial_number
3125 , p_inventory_item_id
3126 , p_organization_id
3127 , p_subinventory_code
3128 , p_current_locator_id
3129 , p_transaction_date
3130 , p_txn_src_id
3131 , p_txn_src_type_id
3132 , p_txn_src_name
3133 , p_receipt_issue_type
3134 , p_customer_id
3135 , p_ship_id
3136 , g_serial_attributes_tbl(1).column_value
3137 , l_date2
3138 , g_serial_attributes_tbl(3).column_value
3139 , g_serial_attributes_tbl(4).column_value
3140 , g_serial_attributes_tbl(5).column_value
3141 , g_serial_attributes_tbl(6).column_value
3142 , g_serial_attributes_tbl(7).column_value
3143 , g_serial_attributes_tbl(8).column_value
3144 , g_serial_attributes_tbl(9).column_value
3145 , g_serial_attributes_tbl(10).column_value
3146 , g_serial_attributes_tbl(11).column_value
3147 , g_serial_attributes_tbl(12).column_value
3148 , g_serial_attributes_tbl(13).column_value
3149 , g_serial_attributes_tbl(14).column_value
3150 , g_serial_attributes_tbl(15).column_value
3151 , g_serial_attributes_tbl(16).column_value
3152 , g_serial_attributes_tbl(17).column_value
3153 , g_serial_attributes_tbl(18).column_value
3154 , g_serial_attributes_tbl(19).column_value
3155 , g_serial_attributes_tbl(20).column_value
3156 , g_serial_attributes_tbl(21).column_value
3157 , g_serial_attributes_tbl(22).column_value
3158 , l_date23
3159 , l_date24
3160 , l_date25
3161 , l_date26
3162 , l_date27
3163 , l_date28
3164 , l_date29
3165 , l_date30
3166 , l_date31
3167 , l_date32
3168 , l_num33
3169 , l_num34
3170 , l_num35
3171 , l_num36
3172 , l_num37
3173 , l_num38
3174 , l_num39
3175 , l_num40
3176 , l_num41
3177 , l_num42
3178 , p_status_id
3179 , g_serial_attributes_tbl(44).column_value
3180 , msn.time_since_new
3181 , msn.cycles_since_new
3182 , msn.time_since_overhaul
3183 , msn.cycles_since_overhaul
3184 , msn.time_since_repair
3185 , msn.cycles_since_repair
3186 , msn.time_since_visit
3187 , msn.cycles_since_visit
3188 , msn.time_since_mark
3189 , msn.cycles_since_mark
3190 , msn.number_of_repairs
3191 FROM mtl_serial_numbers msn
3192 WHERE inventory_item_id = p_inventory_item_id
3193 AND serial_number = p_serial_number;
3194 END IF;
3195 END IF;
3196
3197 /*bug 2756040 Update MSN also with values from MSNT in case of
3198 receipt transaction or intransit receipt txn
3199 (transaction_action_id = 12 or 27) */
3200 IF (p_transaction_action_id IN(12, 27, 31)) THEN
3201 IF (l_debug = 1) THEN
3202 invtrace('transaction_action_id = ' || p_transaction_action_id
3203 || ' org _id ' || p_organization_id || 'item ' ||
3204 p_inventory_item_id);
3205 END IF;
3206
3207 BEGIN
3208 UPDATE mtl_serial_numbers
3209 SET serial_attribute_category = g_serial_attributes_tbl(1).column_value
3210 , origination_date = l_date2
3211 , c_attribute1 = g_serial_attributes_tbl(3).column_value
3212 , c_attribute2 = g_serial_attributes_tbl(4).column_value
3213 , c_attribute3 = g_serial_attributes_tbl(5).column_value
3214 , c_attribute4 = g_serial_attributes_tbl(6).column_value
3215 , c_attribute5 = g_serial_attributes_tbl(7).column_value
3216 , c_attribute6 = g_serial_attributes_tbl(8).column_value
3217 , c_attribute7 = g_serial_attributes_tbl(9).column_value
3218 , c_attribute8 = g_serial_attributes_tbl(10).column_value
3219 , c_attribute9 = g_serial_attributes_tbl(11).column_value
3220 , c_attribute10 = g_serial_attributes_tbl(12).column_value
3221 , c_attribute11 = g_serial_attributes_tbl(13).column_value
3222 , c_attribute12 = g_serial_attributes_tbl(14).column_value
3223 , c_attribute13 = g_serial_attributes_tbl(15).column_value
3224 , c_attribute14 = g_serial_attributes_tbl(16).column_value
3225 , c_attribute15 = g_serial_attributes_tbl(17).column_value
3226 , c_attribute16 = g_serial_attributes_tbl(18).column_value
3227 , c_attribute17 = g_serial_attributes_tbl(19).column_value
3228 , c_attribute18 = g_serial_attributes_tbl(20).column_value
3229 , c_attribute19 = g_serial_attributes_tbl(21).column_value
3230 , c_attribute20 = g_serial_attributes_tbl(22).column_value
3231 , d_attribute1 = l_date23
3232 , d_attribute2 = l_date24
3233 , d_attribute3 = l_date25
3234 , d_attribute4 = l_date26
3235 , d_attribute5 = l_date27
3236 , d_attribute6 = l_date28
3237 , d_attribute7 = l_date29
3238 , d_attribute8 = l_date30
3239 , d_attribute9 = l_date31
3240 , d_attribute10 = l_date32
3241 , n_attribute1 = l_num33
3242 , n_attribute2 = l_num34
3243 , n_attribute3 = l_num35
3244 , n_attribute4 = l_num36
3245 , n_attribute5 = l_num37
3246 , n_attribute6 = l_num38
3247 , n_attribute7 = l_num39
3248 , n_attribute8 = l_num40
3249 , n_attribute9 = l_num41
3250 , n_attribute10 = l_num42
3251 WHERE serial_number = p_serial_number
3252 AND inventory_item_id = p_inventory_item_id
3253 AND current_organization_id = p_organization_id;
3254
3255 IF (l_debug = 1) THEN
3256 invtrace('updating MSN with values ');
3257 invtrace('serial_attribute_category ' || g_serial_attributes_tbl(1).column_value);
3258 invtrace('origination_date ' || g_serial_attributes_tbl(2).column_value);
3259 invtrace(' C_ATTRIBUTE1 = ' || g_serial_attributes_tbl(3).column_value);
3260 invtrace('C_ATTRIBUTE2 = ' || g_serial_attributes_tbl(4).column_value);
3261 invtrace('C_ATTRIBUTE3 = ' || g_serial_attributes_tbl(5).column_value);
3262 invtrace('C_ATTRIBUTE4 = ' || g_serial_attributes_tbl(6).column_value);
3263 invtrace('C_ATTRIBUTE5 = ' || g_serial_attributes_tbl(7).column_value);
3264 invtrace('C_ATTRIBUTE6 = ' || g_serial_attributes_tbl(8).column_value);
3265 invtrace('C_ATTRIBUTE7 = ' || g_serial_attributes_tbl(9).column_value);
3266 invtrace('C_ATTRIBUTE8 = ' || g_serial_attributes_tbl(10).column_value);
3267 invtrace('C_ATTRIBUTE9 = ' || g_serial_attributes_tbl(11).column_value);
3268 invtrace('C_ATTRIBUTE10 = ' || g_serial_attributes_tbl(12).column_value);
3269 invtrace('C_ATTRIBUTE11 = ' || g_serial_attributes_tbl(13).column_value);
3270 invtrace('C_ATTRIBUTE12 = ' || g_serial_attributes_tbl(14).column_value);
3271 invtrace('C_ATTRIBUTE13 = ' || g_serial_attributes_tbl(15).column_value);
3272 invtrace('C_ATTRIBUTE14 = ' || g_serial_attributes_tbl(16).column_value);
3273 invtrace('C_ATTRIBUTE15 = ' || g_serial_attributes_tbl(17).column_value);
3274 invtrace('C_ATTRIBUTE16 = ' || g_serial_attributes_tbl(18).column_value);
3275 invtrace('C_ATTRIBUTE17 = ' || g_serial_attributes_tbl(19).column_value);
3276 invtrace('C_ATTRIBUTE18 = ' || g_serial_attributes_tbl(20).column_value);
3277 invtrace('C_ATTRIBUTE19 = ' || g_serial_attributes_tbl(21).column_value);
3278 invtrace('C_ATTRIBUTE20 = ' || g_serial_attributes_tbl(22).column_value);
3279 invtrace('D_ATTRIBUTE1 = ' || g_serial_attributes_tbl(23).column_value);
3280 invtrace('D_ATTRIBUTE2 = ' || g_serial_attributes_tbl(24).column_value);
3281 invtrace('D_ATTRIBUTE3 = ' || g_serial_attributes_tbl(25).column_value);
3282 invtrace('D_ATTRIBUTE4 = ' || g_serial_attributes_tbl(26).column_value);
3283 invtrace('D_ATTRIBUTE5 = ' || g_serial_attributes_tbl(27).column_value);
3284 invtrace('D_ATTRIBUTE6 = ' || g_serial_attributes_tbl(28).column_value);
3285 invtrace('D_ATTRIBUTE7 = ' || g_serial_attributes_tbl(29).column_value);
3286 invtrace('D_ATTRIBUTE8 = ' || g_serial_attributes_tbl(30).column_value);
3287 invtrace('D_ATTRIBUTE9 = ' || g_serial_attributes_tbl(31).column_value);
3288 invtrace('D_ATTRIBUTE10 = ' || g_serial_attributes_tbl(32).column_value);
3289 invtrace('N_ATTRIBUTE1 = ' || g_serial_attributes_tbl(33).column_value);
3290 invtrace('N_ATTRIBUTE2 = ' || g_serial_attributes_tbl(34).column_value);
3291 invtrace('N_ATTRIBUTE3 = ' || g_serial_attributes_tbl(35).column_value);
3292 invtrace('N_ATTRIBUTE4 = ' || g_serial_attributes_tbl(36).column_value);
3293 invtrace('N_ATTRIBUTE5 = ' || g_serial_attributes_tbl(37).column_value);
3294 invtrace('N_ATTRIBUTE6 = ' || g_serial_attributes_tbl(38).column_value);
3295 invtrace('N_ATTRIBUTE7 = ' || g_serial_attributes_tbl(39).column_value);
3296 invtrace('N_ATTRIBUTE8 = ' || g_serial_attributes_tbl(40).column_value);
3297 invtrace('N_ATTRIBUTE9 = ' || g_serial_attributes_tbl(41).column_value);
3298 invtrace('N_ATTRIBUTE10 = ' || g_serial_attributes_tbl(42).column_value);
3299 invtrace(' for the serial ' || p_serial_number);
3300 END IF;
3301 EXCEPTION
3302 WHEN NO_DATA_FOUND THEN
3303 IF (l_debug = 1) THEN
3304 invtrace('no data found while updating msn');
3305 END IF;
3306 WHEN OTHERS THEN
3307 IF (l_debug = 1) THEN
3308 invtrace('some other error' || SQLERRM);
3309 END IF;
3310 END;
3311 END IF;
3312
3313 x_return_status := fnd_api.g_ret_sts_success;
3314
3315 -- End of API body.
3316 -- Standard check of p_commit.
3317 IF fnd_api.to_boolean(p_commit) THEN
3318 COMMIT WORK;
3319 END IF;
3320
3321 -- Standard call to get message count and if count is 1, get message info.
3322 fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false, p_count => x_msg_count, p_data => l_msg_data);
3323 x_msg_data := SUBSTR(l_msg_data, 0, 198);
3324 EXCEPTION
3325 WHEN OTHERS THEN
3326 ROLLBACK TO apiinsertserial_apipub;
3327
3328 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error) THEN
3329 fnd_msg_pub.add_exc_msg('INV_SERIAL_NUMBER_PUB', 'insertUnitTrx');
3330 END IF;
3331
3332 x_return_status := fnd_api.g_ret_sts_unexp_error;
3333 END insertunittrx;
3334
3335 ------------------------------------------------------------------------------
3336 -- Name: GENERATE_SERIALSJ
3337 --
3338 -- Input parameters:
3339 -- p_org_id Organization ID
3340 -- p_item_id Item ID
3341 -- p_qty Count of Serial Numbers
3342 -- p_wip_id Wip Entity ID
3343 -- p_rev Revision
3344 -- p_lot Lot Number
3345 -- p_skip_serial 0, do not skip, called in context of transaction
3346 -- processing
3347 -- 1, skip-serials : concurrent-program
3348 -- Output parameters:
3349 -- x_proc_msg Message from the Process-Manager
3350 -- return_status 0 on Success, 1 on Error
3351 --
3352 -- Function: Call specification for Java Stored Procedure. This function
3353 -- is not called directly but through GENERATE_SERIALS to support
3354 -- autonomous transaction
3355 --
3356 --
3357 FUNCTION generate_serialsj(
3358 p_org_id IN NUMBER
3359 , p_item_id IN NUMBER
3360 , p_qty IN NUMBER
3361 , p_wip_id IN NUMBER
3362 , p_rev IN VARCHAR2
3363 , p_lot IN VARCHAR2
3364 , p_skip_serial NUMBER
3365 , p_group_mark_id NUMBER
3366 , p_line_mark_id NUMBER
3367 , x_start_ser OUT NOCOPY VARCHAR2
3368 , x_end_ser OUT NOCOPY VARCHAR2
3369 , x_proc_msg OUT NOCOPY VARCHAR2
3370 )
3371 RETURN NUMBER AS
3372 LANGUAGE JAVA
3373 NAME 'oracle.apps.inv.transaction.server.TrxProcessor.generateSerials(java.lang.Long,
3374 java.lang.Long,
3375 java.lang.Long,
3376 java.lang.Long,
3377 java.lang.String,
3378 java.lang.String,
3379 java.lang.Long,
3380 java.lang.Long,
3381 java.lang.Long,
3382 java.lang.String[],
3383 java.lang.String[],
3384 java.lang.String[]) return java.lang.Integer';
3385
3386 --
3387 --
3388 -- Purpose: This procedure will be called from Concurrent Manager. This Procedure
3389 -- is replacement for INCTSN.opp. It generates the serial number.
3390 --
3391 -- MODIFICATION HISTORY
3392 -- Person Date Comments
3393 -- --------- ------ -------------------------------------------
3394 -- vipathak 8/31/01 Created.
3395 --
3396 -- Declare program variables as shown above
3397 PROCEDURE generate_serials(
3398 x_retcode OUT NOCOPY VARCHAR2
3399 , x_errbuf OUT NOCOPY VARCHAR2
3400 , p_org_id IN NUMBER
3401 , p_item_id IN NUMBER
3402 , p_qty IN NUMBER
3403 , p_serial_code IN VARCHAR2
3404 , p_wip_id IN NUMBER
3405 , p_rev IN NUMBER
3406 , p_lot IN NUMBER
3407 , p_group_mark_id IN NUMBER DEFAULT NULL
3408 , p_line_mark_id IN NUMBER DEFAULT NULL
3409 ) IS
3410 PRAGMA AUTONOMOUS_TRANSACTION;
3411 v_commit VARCHAR2(12) := fnd_api.g_true;
3412 v_mesg VARCHAR2(2000);
3413 l_start_ser VARCHAR2(100);
3414 l_end_ser VARCHAR2(100);
3415 v_retval NUMBER;
3416 ret BOOLEAN;
3417 l_skip_serial NUMBER := 1;
3418 l_debug NUMBER := NVL(fnd_profile.VALUE('INV_DEBUG_TRACE'), 0);
3419 BEGIN
3420 v_retval :=
3421 generate_serialsj(
3422 p_org_id => p_org_id
3423 , p_item_id => p_item_id
3424 , p_qty => p_qty
3425 , p_wip_id => p_wip_id
3426 , p_rev => p_rev
3427 , p_lot => p_lot
3428 , p_skip_serial => l_skip_serial
3429 , p_group_mark_id => p_group_mark_id
3430 , p_line_mark_id => p_line_mark_id
3431 , x_start_ser => l_start_ser
3432 , x_end_ser => l_end_ser
3433 , x_proc_msg => v_mesg
3434 );
3435
3436 IF (v_retval = 1) THEN
3437 ret := fnd_concurrent.set_completion_status('ERROR', v_mesg);
3438 x_retcode := 2;
3439 x_errbuf := v_mesg;
3440 ELSIF(v_retval = 2) THEN
3441 ret := fnd_concurrent.set_completion_status('WARNING', v_mesg);
3442 x_retcode := 0;
3443 ELSE
3444 ret := fnd_concurrent.set_completion_status('NORMAL', v_mesg);
3445 x_retcode := 0;
3446 END IF;
3447
3448 COMMIT;
3449 EXCEPTION
3450 WHEN OTHERS THEN
3451 x_retcode := 2;
3452 x_errbuf := SUBSTR(fnd_msg_pub.get(p_encoded => fnd_api.g_false), 1, 250);
3453 ret := fnd_concurrent.set_completion_status('ERROR', v_mesg);
3454 RAISE;
3455 END generate_serials;
3456
3457 /*-------------------------------------------------------------------------------
3458 -- Name: GENERATE_SERIALS
3459 -- Wrapper for GENERATE_SERIALSJ with Autonomous Tramsaction support
3460 --
3461 -- Input parameters:
3462 -- p_org_id Organization ID
3463 -- p_item_id Item ID
3464 -- p_qty Count of Serial Numbers
3465 -- p_wip_id Wip Entity ID
3466 -- p_rev Revision
3467 -- p_lot Lot Number
3468 -- l_calling_program 0, being called from mobile UI
3469 -- Output parameters:
3470 -- x_proc_msg Message from the Process-Manager
3471 -- return_status 0 on Success, 1 on Error
3472 --
3473 --
3474 */
3475 FUNCTION generate_serials(
3476 p_org_id IN NUMBER
3477 , p_item_id IN NUMBER
3478 , p_qty IN NUMBER
3479 , p_wip_id IN NUMBER
3480 , p_rev IN VARCHAR2
3481 , p_lot IN VARCHAR2
3482 , p_group_mark_id IN NUMBER DEFAULT NULL
3483 , p_line_mark_id IN NUMBER DEFAULT NULL
3484 , x_start_ser OUT NOCOPY VARCHAR2
3485 , x_end_ser OUT NOCOPY VARCHAR2
3486 , x_proc_msg OUT NOCOPY VARCHAR2
3487 , p_skip_serial IN NUMBER DEFAULT NULL
3488 )
3489 RETURN NUMBER AS
3490 PRAGMA AUTONOMOUS_TRANSACTION;
3491 l_retval NUMBER;
3492 l_skip_serial NUMBER := NVL(p_skip_serial, 0);
3493 l_debug NUMBER := NVL(fnd_profile.VALUE('INV_DEBUG_TRACE'), 0);
3494 BEGIN
3495 l_retval :=
3496 generate_serialsj(
3497 p_org_id => p_org_id
3498 , p_item_id => p_item_id
3499 , p_qty => p_qty
3500 , p_wip_id => p_wip_id
3501 , p_rev => p_rev
3502 , p_lot => p_lot
3503 , p_skip_serial => l_skip_serial
3504 , p_group_mark_id => p_group_mark_id
3505 , p_line_mark_id => p_line_mark_id
3506 , x_start_ser => x_start_ser
3507 , x_end_ser => x_end_ser
3508 , x_proc_msg => x_proc_msg
3509 );
3510 COMMIT;
3511 RETURN l_retval;
3512 END;
3513
3514 --
3515 -- Name: IS_SERIAL_UNIQUE
3516 --
3517 -- Input parameters:
3518 -- p_org_id Organization ID
3519 -- p_item_id Item ID
3520 -- p_serial Serial Number
3521 --
3522 -- Output parameters:
3523 -- x_proc_msg Message from the Process-Manager
3524 -- return_status 0 on Success, 1 on Error
3525 --
3526 --
3527 FUNCTION is_serial_unique(p_org_id IN NUMBER, p_item_id IN NUMBER, p_serial IN VARCHAR2, x_proc_msg OUT NOCOPY VARCHAR2)
3528 RETURN NUMBER AS
3529 LANGUAGE JAVA
3530 NAME 'oracle.apps.inv.transaction.server.TrxProcessor.isSerialNumberUnique(java.lang.Long,
3531 java.lang.Long,
3532 java.lang.String,
3533 java.lang.String[]) return java.lang.Integer';
3534
3535 --
3536 -- Name: GET_SERIAL_DIFF
3537 --
3538 -- Input parameters:
3539 -- p_fm_serial 'from' Serial Number
3540 -- p_to_serial 'to' Serial Number
3541 --
3542 -- Output parameters:
3543 -- return_status quantity between passed serial numbers
3544 --
3545 FUNCTION get_serial_diff(p_fm_serial IN VARCHAR2, p_to_serial IN VARCHAR2)
3546 RETURN NUMBER AS
3547 LANGUAGE JAVA
3548 NAME 'oracle.apps.inv.transaction.server.TrxProcessor.getSerNumDiff(java.lang.String,
3549 java.lang.String) return java.lang.Integer';
3550
3551 -- Bug 7541512, added p_rcv_parent_txn_id to validate serial number on return to vendor transactions.
3552 /*Bug 6898933, 1.Added new parameter p_transaction_type_id in below procedure
3553 2.Modified called to TrxProcessor.validateSerialNumbers by adding last parameter value*/
3554
3555
3556 FUNCTION validate_serialsj(
3557 p_org_id IN NUMBER
3558 , p_item_id IN NUMBER
3559 , p_qty IN OUT NOCOPY NUMBER
3560 , p_rev IN VARCHAR2
3561 , p_lot IN VARCHAR2
3562 , p_start_ser IN VARCHAR2
3563 , p_trx_src_id IN NUMBER
3564 , p_trx_action_id IN NUMBER
3565 , p_subinventory_code IN VARCHAR2
3566 , p_locator_id IN NUMBER
3567 , p_wip_entity_id IN NUMBER
3568 , p_group_mark_id IN NUMBER
3569 , p_line_mark_id IN NUMBER
3570 , p_issue_receipt IN VARCHAR2
3571 , x_end_ser IN OUT NOCOPY VARCHAR2
3572 , x_proc_msg OUT NOCOPY VARCHAR2
3573 , p_check_for_grp_mark_id IN VARCHAR2
3574 , p_rcv_validate IN VARCHAR2
3575 , p_rcv_source_line_id IN NUMBER
3576 , p_xfr_org_id IN NUMBER -- Bug#4153297
3577 , p_rcv_parent_txn_id IN NUMBER
3578 , p_transaction_type_id IN NUMBER
3579 , p_ship_header_id IN NUMBER -- Bug 14778131
3580 ) --Bug# 2656316
3581 RETURN NUMBER AS
3582 LANGUAGE JAVA
3583 NAME 'oracle.apps.inv.transaction.server.TrxProcessor.validateSerialNumbers(java.lang.Long,
3584 java.lang.Long,
3585 java.lang.Integer[],
3586 java.lang.String,
3587 java.lang.String,
3588 java.lang.String,
3589 java.lang.Integer,
3590 java.lang.Integer,
3591 java.lang.String,
3592 java.lang.Long,
3593 java.lang.Long,
3594 java.lang.Long,
3595 java.lang.Long,
3596 java.lang.String,
3597 java.lang.String[],
3598 java.lang.String[],
3599 java.lang.String,
3600 java.lang.String,
3601 java.lang.Long,
3602 java.lang.Long,
3603 java.lang.Long,
3604 java.lang.Integer,
3605 java.lang.Long
3606 ) return java.lang.Integer'; --Bug# 2656316
3607 --Bug#4153297
3608 --
3609 -- Bug 3194093 added two more parameters to the below function
3610 -- validate_serials() and to the above function validate_serialsj()
3611 -- p_rcv_validate,p_rcv_shipment_line_id to support serial
3612 -- validation for intransit receipt transactions
3613 -- applicable for Inter-org,Internal sales order Intransit txns
3614 -- Bug 3384652 Changing the param name p_rcv_shipment_line_id to
3615 -- p_rcv_source_line_id.And the value passed to this is either
3616 -- shipment_line_id or ram_line_id depending on the transaction
3617 -- Source type and action.To support serial validation for RMA
3618 -- Bug 7541512, added p_rcv_parent_txn_id to validate serial numbers
3619 -- on return to vendor transactions.
3620 /* Bug 6898933 Added new parameter p_transaction_type_id in below procedure */
3621 -- Bug 14778131, added a new parameter p_ship_header_id to validate
3622 -- serial number while doing the deliver from mobile .
3623 -- Also passing the rcv Validate as M to make sure that the code is called
3624 -- from mobile only
3625
3626 FUNCTION validate_serials(
3627 p_org_id IN NUMBER
3628 , p_item_id IN NUMBER
3629 , p_qty IN OUT NOCOPY NUMBER
3630 , p_rev IN VARCHAR2 DEFAULT NULL
3631 , p_lot IN VARCHAR2 DEFAULT NULL
3632 , p_start_ser IN VARCHAR2
3633 , p_trx_src_id IN NUMBER DEFAULT NULL
3634 , p_trx_action_id IN NUMBER DEFAULT NULL
3635 , p_subinventory_code IN VARCHAR2 DEFAULT NULL
3636 , p_locator_id IN NUMBER DEFAULT NULL
3637 , p_wip_entity_id IN NUMBER DEFAULT NULL
3638 , p_group_mark_id IN NUMBER DEFAULT NULL
3639 , p_line_mark_id IN NUMBER DEFAULT NULL
3640 , p_issue_receipt IN VARCHAR2 DEFAULT NULL
3641 , x_end_ser IN OUT NOCOPY VARCHAR2
3642 , x_proc_msg OUT NOCOPY VARCHAR2
3643 , p_check_for_grp_mark_id IN VARCHAR2
3644 , p_rcv_validate IN VARCHAR2 DEFAULT 'N'
3645 , p_rcv_source_line_id IN NUMBER DEFAULT -1
3646 , p_xfr_org_id IN NUMBER DEFAULT -1 -- Bug#4153297
3647 , p_rcv_parent_txn_id IN NUMBER DEFAULT -1
3648 , p_transaction_type_id IN NUMBER DEFAULT 0
3649 , p_ship_header_id IN NUMBER -- Bug 14778131
3650 ) --Bug# 2656316
3651 RETURN NUMBER AS
3652 ret_number NUMBER := 0;
3653 local_locator_id NUMBER;
3654 l_debug NUMBER := NVL(fnd_profile.VALUE('INV_DEBUG_TRACE'), 0);
3655 BEGIN
3656 IF (l_debug = 1) THEN
3657 inv_trx_util_pub.TRACE('About to call VALIDATE_SERIALSJ ', 'VALIDATE_SERIALS', 9);
3658 END IF;
3659
3660 /* Bug 6898933 : passed new parameter p_transaction_type_id in below call */
3661 ret_number :=
3662 validate_serialsj(
3663 p_org_id => p_org_id
3664 , p_item_id => p_item_id
3665 , p_qty => p_qty
3666 , p_rev => p_rev
3667 , p_lot => p_lot
3668 , p_start_ser => p_start_ser
3669 , p_trx_src_id => p_trx_src_id
3670 , p_trx_action_id => p_trx_action_id
3671 , p_subinventory_code => p_subinventory_code
3672 , p_locator_id => p_locator_id
3673 , p_wip_entity_id => p_wip_entity_id
3674 , p_group_mark_id => p_group_mark_id
3675 , p_line_mark_id => p_line_mark_id
3676 , p_issue_receipt => p_issue_receipt
3677 , x_end_ser => x_end_ser
3678 , x_proc_msg => x_proc_msg
3679 , p_check_for_grp_mark_id => p_check_for_grp_mark_id --Bug# 2656316
3680 , p_rcv_validate => p_rcv_validate
3681 , p_rcv_source_line_id => p_rcv_source_line_id
3682 , p_xfr_org_id => p_xfr_org_id
3683 , p_rcv_parent_txn_id => p_rcv_parent_txn_id
3684 , p_transaction_type_id => p_transaction_type_id
3685 , p_ship_header_id => p_ship_header_id -- Bug 14778131
3686 );
3687
3688 IF (l_debug = 1) THEN
3689 inv_trx_util_pub.TRACE('Returned from VALIDATE_SERIALSJ ', 'VALIDATE_SERIALS', 9);
3690 END IF;
3691
3692 RETURN ret_number;
3693 END validate_serials;
3694
3695
3696 FUNCTION increment_ser_num(p_curr_serial VARCHAR2, p_inc_value NUMBER) RETURN VARCHAR2 IS
3697 LANGUAGE JAVA NAME 'oracle.apps.inv.transaction.server.TrxProcessor.incrementSerNum(
3698 java.lang.String
3699 , java.lang.Long
3700 ) return java.lang.String' ;
3701
3702 --Procedure for validating and updating serial attributes.
3703 PROCEDURE validate_update_serial_att
3704 (x_return_status OUT NOCOPY VARCHAR2,
3705 x_msg_count OUT NOCOPY NUMBER,
3706 x_msg_data OUT NOCOPY VARCHAR2,
3707 x_validation_status OUT NOCOPY VARCHAR2,
3708 p_serial_number IN VARCHAR2,
3709 p_organization_id IN NUMBER,
3710 p_inventory_item_id IN NUMBER,
3711 p_serial_att_tbl IN inv_lot_sel_attr.lot_sel_attributes_tbl_type,
3712 p_validate_only IN BOOLEAN
3713 ) IS
3714 l_attributes_name VARCHAR2(50) := 'Serial Attributes';
3715 v_flexfield fnd_dflex.dflex_r;
3716 v_flexinfo fnd_dflex.dflex_dr;
3717 v_contexts fnd_dflex.contexts_dr;
3718 v_segments fnd_dflex.segments_dr;
3719 l_attributes_default_count NUMBER;
3720 l_enabled_attributes NUMBER;
3721 l_attributes_default INV_LOT_SEL_ATTR.Lot_Sel_Attributes_Tbl_Type;
3722 v_context_value mtl_flex_context.descriptive_flex_context_code%type;
3723 v_colName VARCHAR2(50);
3724 l_context_value VARCHAR2(150);
3725 l_return_status VARCHAR2(1);
3726 l_msg_data VARCHAR2(255);
3727 l_msg_count NUMBER;
3728 l_validation_status VARCHAR2(1);
3729 l_status BOOLEAN;
3730 l_count NUMBER := 0;
3731 l_rs_lot_attr_category VARCHAR2(30);
3732 l_st_lot_attr_category VARCHAR2(30);
3733 l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
3734 BEGIN
3735 IF (l_debug = 1) THEN
3736 invtrace('VALIDATE_UPDATE_SERIAL_ATT:Entered...');
3737 END IF;
3738
3739 x_return_status := FND_API.G_RET_STS_SUCCESS;
3740
3741 FND_MSG_PUB.Count_And_Get( p_count => x_msg_count, p_data => x_msg_data);
3742
3743 IF (l_debug = 1) THEN
3744 invtrace('VALIDATE_UPDATE_SERIAL_ATT:p_inventory_item_id='||p_inventory_item_id);
3745 invtrace('VALIDATE_UPDATE_SERIAL_ATT:p_organization_id='||p_organization_id);
3746 invtrace('VALIDATE_UPDATE_SERIAL_ATT:p_serial_number='||p_serial_number);
3747 END IF;
3748
3749 -- call to see if the Serial attributes is enabled for this item/org/category combination
3750 l_enabled_attributes := INV_LOT_SEL_ATTR.is_enabled(p_flex_name => l_attributes_name,
3751 p_organization_id => p_organization_id,
3752 p_inventory_item_id => p_inventory_item_id);
3753 IF (l_debug = 1) THEN
3754 invtrace('VALIDATE_UPDATE_SERIAL_ATT:l_enabled_attributes='||l_enabled_attributes);
3755 END IF;
3756 --bug9507720,if serial number attribute is not enabled,we should not do the attribute validation,
3757 --for the huge serial numbers,it cause the performance bottlenecks.
3758 IF (l_enabled_attributes = 0) THEN
3759 RETURN;
3760 END IF;
3761
3762 --Populate serial attribute columns
3763
3764 populateattributescolumn;
3765
3766 IF (p_serial_att_tbl.COUNT <> 0 ) THEN
3767 -- derived from the start lot attributes
3768 FOR i IN 1..p_serial_att_tbl.COUNT LOOP
3769 FOR j IN 1..g_serial_attributes_tbl.COUNT LOOP
3770 --bug9507720,since g_serial_attribute_tbl.column_name
3771 -- and p_serial_att_tbl.column_name are populated with the same value,
3772 -- use UPPER function causing the performance,just remove this function.
3773 IF (g_serial_attributes_tbl(j).COLUMN_NAME = p_serial_att_tbl(i).COLUMN_NAME ) THEN
3774 IF (l_debug = 1) THEN
3775 invtrace('VALIDATE_UPDATE_SERIAL_ATT:'||g_serial_attributes_tbl(j).COLUMN_NAME);
3776 END IF;
3777 g_serial_attributes_tbl(j).COLUMN_VALUE := p_serial_att_tbl(i).COLUMN_VALUE;
3778 IF (l_debug = 1) THEN
3779 invtrace('VALIDATE_UPDATE_SERIAL_ATT:'||g_serial_attributes_tbl(j).COLUMN_NAME||':'||g_serial_attributes_tbl(j).COLUMN_VALUE);
3780 END IF;
3781 END IF;
3782 EXIT WHEN (g_serial_attributes_tbl(j).COLUMN_NAME = p_serial_att_tbl(i).COLUMN_NAME);
3783 END LOOP;
3784 END LOOP;
3785 END IF;
3786
3787 IF (l_debug = 1) THEN
3788 invtrace('VALIDATE_UPDATE_SERIAL_ATT:Calling inv_lot_sel_attr.get_default...');
3789 END IF;
3790
3791 inv_lot_sel_attr.get_default(x_attributes_default => l_attributes_default,
3792 x_attributes_default_count => l_attributes_default_count,
3793 x_return_status => l_return_status,
3794 x_msg_count => l_msg_count,
3795 x_msg_data => x_msg_data,
3796 p_table_name => 'MTL_SERIAL_NUMBERS',
3797 p_attributes_name => 'Serial Attributes',
3798 p_inventory_item_id => p_inventory_item_id,
3799 p_organization_id => p_organization_id,
3800 p_lot_serial_number => p_serial_number,
3801 p_attributes => g_serial_attributes_tbl);
3802
3803 IF ( l_return_status <> FND_API.G_RET_STS_SUCCESS ) THEN
3804 x_validation_status := 'N';
3805 x_return_status := l_return_status;
3806 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3807 END IF;
3808
3809 IF (l_debug = 1) THEN
3810 invtrace('VALIDATE_UPDATE_SERIAL_ATT:l_attributes_default_count='||l_attributes_default_count);
3811 END IF;
3812
3813 IF (l_attributes_default_count > 0) THEN
3814 FOR i IN 1..l_attributes_default_count LOOP
3815 FOR j IN 1..g_serial_attributes_tbl.COUNT LOOP
3816 IF (Upper(l_attributes_default(i).COLUMN_NAME) = Upper(g_serial_attributes_tbl(j).COLUMN_NAME)
3817 AND l_attributes_default(i).COLUMN_VALUE IS NOT NULL) THEN
3818 IF (l_debug = 1) THEN
3819 invtrace('VALIDATE_UPDATE_SERIAL_ATT:g_serial_attributes_tbl(j).COLUMN_VALUE='||g_serial_attributes_tbl(j).COLUMN_VALUE);
3820 invtrace('VALIDATE_UPDATE_SERIAL_ATT:l_attributes_default(i).COLUMN_VALUE='||l_attributes_default(i).column_value);
3821 END IF;
3822
3823 IF (g_serial_attributes_tbl(j).COLUMN_VALUE IS NULL) THEN
3824 g_serial_attributes_tbl(j).COLUMN_VALUE := l_attributes_default(i).COLUMN_VALUE;
3825 END IF;
3826
3827 g_serial_attributes_tbl(j).REQUIRED := l_attributes_default(i).REQUIRED;
3828
3829 END IF;
3830 EXIT WHEN (Upper(l_attributes_default(i).COLUMN_NAME) = Upper(g_serial_attributes_tbl(j).COLUMN_NAME));
3831 END LOOP;
3832 END LOOP;
3833 END IF;
3834
3835 IF (l_debug = 1) THEN
3836 invtrace('VALIDATE_UPDATE_SERIAL_ATT:Calling fnd_dflex.get_flexfield...');
3837 END IF;
3838 -- Get flexfield
3839 fnd_dflex.get_flexfield('INV', l_attributes_name, v_flexfield, v_flexinfo);
3840
3841 IF (l_debug = 1) THEN
3842 invtrace('VALIDATE_UPDATE_SERIAL_ATT:Calling fnd_dflex.get_context...');
3843 END IF;
3844 -- Get Contexts
3845 l_context_value := NULL;
3846 fnd_dflex.get_contexts(v_flexfield, v_contexts);
3847
3848 FOR i IN 1..g_serial_attributes_tbl.COUNT LOOP
3849 IF (Upper(g_serial_attributes_tbl(i).COLUMN_NAME) = 'SERIAL_ATTRIBUTE_CATEGORY'
3850 AND g_serial_attributes_tbl(i).column_value IS NULL ) THEN
3851 inv_lot_sel_attr.get_context_code(l_context_value, p_organization_id,p_inventory_item_id,l_attributes_name);
3852 g_serial_attributes_tbl(i).column_value := l_context_value;
3853 ELSE
3854 l_context_value := g_serial_attributes_tbl(i).column_value;
3855 END IF;
3856 EXIT WHEN (Upper(g_serial_attributes_tbl(i).COLUMN_NAME) = 'SERIAL_ATTRIBUTE_CATEGORY');
3857 END LOOP;
3858
3859 IF (l_debug = 1) THEN
3860 invtrace('VALIDATE_UPDATE_SERIAL_ATT:l_context_value='||l_context_value);
3861 END IF;
3862
3863 IF ( (l_enabled_attributes = 0 ) OR ( l_context_value is null)) then
3864
3865 IF (l_debug = 1) THEN
3866 invtrace('VALIDATE_UPDATE_SERIAL_ATT:l_context is null, attr enabaled=0');
3867 END IF;
3868
3869 l_validation_status := 'Y';
3870 x_msg_count := 0;
3871 x_msg_data := NULL;
3872 ELSE --IF ( (l_enabled_attributes = 0 ) OR ( l_context_value is null)) then
3873 IF (l_debug = 1) THEN
3874 invtrace('VALIDATE_UPDATE_SERIAL_ATT:Calling fnd_flex_descval.set_context_value...');
3875 END IF;
3876
3877 fnd_flex_descval.set_context_value(l_context_value);
3878
3879 IF (l_debug = 1) THEN
3880 invtrace('VALIDATE_UPDATE_SERIAL_ATT:Calling fnd_flex_descval.clear_column_values...');
3881 END IF;
3882
3883 fnd_flex_descval.clear_column_values;
3884
3885 IF (l_debug = 1) THEN
3886 invtrace('VALIDATE_UPDATE_SERIAL_ATT:Calling fnd_flex_descval.set_column_values SERIAL_ATTRIBUTE_CATEGORY='||l_context_value);
3887 END IF;
3888
3889 fnd_flex_descval.set_column_value('SERIAL_ATTRIBUTE_CATEGORY', l_context_value);
3890
3891 -- Setting the Values for Validating
3892 IF (l_debug = 1) THEN
3893 invtrace('VALIDATE_UPDATE_SERIAL_ATT:g_serial_attributes_tbl.COUNT='||g_serial_attributes_tbl.COUNT);
3894 END IF;
3895
3896 FOR i IN 1..v_contexts.ncontexts LOOP
3897 IF (v_contexts.is_enabled(i) AND ((UPPER(v_contexts.context_code(i)) = UPPER(l_context_value)) OR
3898 v_contexts.is_global(i))) THEN
3899 -- Get segments
3900 IF (l_debug = 1) THEN
3901 invtrace('VALIDATE_UPDATE_SERIAL_ATT:Calling fnd_dflex.get_segments...');
3902 END IF;
3903
3904 fnd_dflex.get_segments(fnd_dflex.make_context(v_flexfield, v_contexts.context_code(i)), v_segments, TRUE);
3905 <<segmentLoop>>
3906 FOR j IN 1..v_segments.nsegments LOOP
3907 IF v_segments.is_enabled(j) THEN
3908 v_colName := v_segments.application_column_name(j);
3909
3910 IF (l_debug = 1) THEN
3911 invtrace('VALIDATE_UPDATE_SERIAL_ATT:v_colName='||v_colName);
3912 END IF;
3913
3914 <<columnLoop>>
3915 FOR k IN 1..g_serial_attributes_tbl.COUNT LOOP
3916 IF UPPER(v_colName) = UPPER(g_serial_attributes_tbl(k).column_name) THEN
3917 IF (l_debug = 1) THEN
3918 invtrace('VALIDATE_UPDATE_SERIAL_ATT:'||g_serial_attributes_tbl(k).Column_name);
3919 END IF;
3920 -- Sets the Values for Validation
3921 -- Setting the column data type for validation
3922 IF g_serial_attributes_tbl(k).column_type = 'DATE' THEN
3923 IF (l_debug = 1) THEN
3924 invtrace('VALIDATE_UPDATE_SERIAL_ATT:set_column_value='||g_serial_attributes_tbl(k).column_value);
3925 END IF;
3926 fnd_flex_descval.set_column_value(g_serial_attributes_tbl(k).column_name,
3927 fnd_date.canonical_to_date(fnd_date.date_to_canonical(g_serial_attributes_tbl(k).column_value)));
3928 END IF;
3929
3930 IF g_serial_attributes_tbl(k).column_type = 'NUMBER' THEN
3931 IF (l_debug = 1) THEN
3932 invtrace('VALIDATE_UPDATE_SERIAL_ATT:set_column_value='||g_serial_attributes_tbl(k).column_value);
3933 END IF;
3934 fnd_flex_descval.set_column_value(g_serial_attributes_tbl(k).column_name,
3935 To_number(g_serial_attributes_tbl(k).column_value));
3936 END IF;
3937
3938 IF g_serial_attributes_tbl(k).column_type = 'VARCHAR2' THEN
3939 IF (l_debug = 1) THEN
3940 invtrace('VALIDATE_UPDATE_SERIAL_ATT:set_column_value='||g_serial_attributes_tbl(k).column_value);
3941 END IF;
3942 fnd_flex_descval.set_column_value(g_serial_attributes_tbl(k).column_name,
3943 g_serial_attributes_tbl(k).column_value);
3944 END IF;
3945
3946 IF (v_segments.is_required(j)) THEN
3947 IF (g_serial_attributes_tbl(k).COLUMN_VALUE IS NULL) THEN
3948 IF (l_debug = 1) THEN
3949 invtrace('VALIDATE_UPDATE_SERIAL_ATT:'||g_serial_attributes_tbl(k).COLUMN_NAME||':'||g_serial_attributes_tbl(k).COLUMN_VALUE);
3950 END IF;
3951 fnd_message.set_name('INV', 'INV_LOT_SEL_DEFAULT_REQUIRED');
3952 fnd_message.set_token('ATTRNAME',l_attributes_name);
3953 fnd_message.set_token('CONTEXTCODE', v_contexts.context_code(i));
3954 fnd_message.set_token('SEGMENT', v_segments.application_column_name(j));
3955 fnd_msg_pub.ADD;
3956 END IF;
3957 END IF;
3958 END IF;
3959 EXIT when (Upper(v_colName) = Upper(g_serial_attributes_tbl(k).column_name));
3960 END LOOP;
3961 END IF;
3962 END LOOP;
3963 END IF;
3964 END LOOP;
3965 -- Call the validating routine for Lot Attributes.
3966
3967 IF (l_debug = 1) THEN
3968 invtrace('VALIDATE_UPDATE_SERIAL_ATT:Calling fnd_flex_descval.validate_desccols...');
3969 END IF;
3970 l_status := fnd_flex_descval.validate_desccols(appl_short_name => 'INV',
3971 desc_flex_name => l_attributes_name);
3972 IF l_status = TRUE then
3973 IF (l_debug = 1) THEN
3974 invtrace('VALIDATE_UPDATE_SERIAL_ATT:l_status is TRUE');
3975 END IF;
3976 l_validation_status := 'Y';
3977 ELSE
3978 IF (l_debug = 1) THEN
3979 invtrace('VALIDATE_UPDATE_SERIAL_ATT:l_status is FALSE');
3980 END IF;
3981 l_validation_status := 'N';
3982 x_return_status := FND_API.G_RET_STS_ERROR ;
3983 x_msg_data := fnd_flex_descval.error_message;
3984 fnd_message.set_name('INV', 'GENERIC');
3985 fnd_message.set_token('MSGBODY', x_msg_data );
3986 fnd_msg_pub.ADD;
3987 x_msg_count := nvl(x_msg_count,0) + 1 ;
3988 RAISE FND_API.G_EXC_ERROR;
3989 END IF;
3990 END IF; -- if l_context_value is not null
3991
3992 x_validation_status := l_validation_status;
3993
3994 -- if validation passed then update the attributes.
3995
3996 IF (l_debug = 1) THEN
3997 invtrace('VALIDATE_UPDATE_SERIAL_ATT:Updating the Attributes...');
3998 END IF;
3999
4000 IF l_validation_status = 'Y' THEN
4001 IF NOT p_validate_only THEN
4002 UPDATE mtl_serial_numbers
4003 SET serial_attribute_category = g_serial_attributes_tbl(1).COLUMN_VALUE
4004 , origination_date = fnd_date.canonical_to_date(fnd_date.date_to_canonical(g_serial_attributes_tbl(2).COLUMN_VALUE))
4005 , c_attribute1 = g_serial_attributes_tbl(3).COLUMN_VALUE
4006 , c_attribute2 = g_serial_attributes_tbl(4).COLUMN_VALUE
4007 , c_attribute3 = g_serial_attributes_tbl(5).COLUMN_VALUE
4008 , c_attribute4 = g_serial_attributes_tbl(6).COLUMN_VALUE
4009 , c_attribute5 = g_serial_attributes_tbl(7).COLUMN_VALUE
4010 , c_attribute6 = g_serial_attributes_tbl(8).COLUMN_VALUE
4011 , c_attribute7 = g_serial_attributes_tbl(9).COLUMN_VALUE
4012 , c_attribute8 = g_serial_attributes_tbl(10).COLUMN_VALUE
4013 , c_attribute9 = g_serial_attributes_tbl(11).COLUMN_VALUE
4014 , c_attribute10 = g_serial_attributes_tbl(12).COLUMN_VALUE
4015 , c_attribute11 = g_serial_attributes_tbl(13).COLUMN_VALUE
4016 , c_attribute12 = g_serial_attributes_tbl(14).COLUMN_VALUE
4017 , c_attribute13 = g_serial_attributes_tbl(15).COLUMN_VALUE
4018 , c_attribute14 = g_serial_attributes_tbl(16).COLUMN_VALUE
4019 , c_attribute15 = g_serial_attributes_tbl(17).COLUMN_VALUE
4020 , c_attribute16 = g_serial_attributes_tbl(18).COLUMN_VALUE
4021 , c_attribute17 = g_serial_attributes_tbl(19).COLUMN_VALUE
4022 , c_attribute18 = g_serial_attributes_tbl(20).COLUMN_VALUE
4023 , c_attribute19 = g_serial_attributes_tbl(21).COLUMN_VALUE
4024 , c_attribute20 = g_serial_attributes_tbl(22).COLUMN_VALUE
4025 , d_attribute1 = fnd_date.canonical_to_date(fnd_date.date_to_canonical(g_serial_attributes_tbl(23).COLUMN_VALUE))
4026 , d_attribute2 = fnd_date.canonical_to_date(fnd_date.date_to_canonical(g_serial_attributes_tbl(24).COLUMN_VALUE))
4027 , d_attribute3 = fnd_date.canonical_to_date(fnd_date.date_to_canonical(g_serial_attributes_tbl(25).COLUMN_VALUE))
4028 , d_attribute4 = fnd_date.canonical_to_date(fnd_date.date_to_canonical(g_serial_attributes_tbl(26).COLUMN_VALUE))
4029 , d_attribute5 = fnd_date.canonical_to_date(fnd_date.date_to_canonical(g_serial_attributes_tbl(27).COLUMN_VALUE))
4030 , d_attribute6 = fnd_date.canonical_to_date(fnd_date.date_to_canonical(g_serial_attributes_tbl(28).COLUMN_VALUE))
4031 , d_attribute7 = fnd_date.canonical_to_date(fnd_date.date_to_canonical(g_serial_attributes_tbl(29).COLUMN_VALUE))
4032 , d_attribute8 = fnd_date.canonical_to_date(fnd_date.date_to_canonical(g_serial_attributes_tbl(30).COLUMN_VALUE))
4033 , d_attribute9 = fnd_date.canonical_to_date(fnd_date.date_to_canonical(g_serial_attributes_tbl(31).COLUMN_VALUE))
4034 , d_attribute10 = fnd_date.canonical_to_date(fnd_date.date_to_canonical(g_serial_attributes_tbl(32).COLUMN_VALUE))
4035 , n_attribute1 = to_number(g_serial_attributes_tbl(33).COLUMN_VALUE)
4036 , n_attribute2 = to_number(g_serial_attributes_tbl(34).COLUMN_VALUE)
4037 , n_attribute3 = to_number(g_serial_attributes_tbl(35).COLUMN_VALUE)
4038 , n_attribute4 = to_number(g_serial_attributes_tbl(36).COLUMN_VALUE)
4039 , n_attribute5 = to_number(g_serial_attributes_tbl(37).COLUMN_VALUE)
4040 , n_attribute6 = to_number(g_serial_attributes_tbl(38).COLUMN_VALUE)
4041 , n_attribute7 = to_number(g_serial_attributes_tbl(39).COLUMN_VALUE)
4042 , n_attribute8 = to_number(g_serial_attributes_tbl(40).COLUMN_VALUE)
4043 , n_attribute9 = to_number(g_serial_attributes_tbl(41).COLUMN_VALUE)
4044 , n_attribute10 = to_number(g_serial_attributes_tbl(42).COLUMN_VALUE)
4045 , status_id = Nvl(to_number(g_serial_attributes_tbl(43).COLUMN_VALUE),status_id)
4046 , territory_code = g_serial_attributes_tbl(44).COLUMN_VALUE
4047 , attribute_category = g_serial_attributes_tbl(45).COLUMN_VALUE
4048 , attribute1 = g_serial_attributes_tbl(46).COLUMN_VALUE
4049 , attribute2 = g_serial_attributes_tbl(47).COLUMN_VALUE
4050 , attribute3 = g_serial_attributes_tbl(48).COLUMN_VALUE
4051 , attribute4 = g_serial_attributes_tbl(49).COLUMN_VALUE
4052 , attribute5 = g_serial_attributes_tbl(50).COLUMN_VALUE
4053 , attribute6 = g_serial_attributes_tbl(51).COLUMN_VALUE
4054 , attribute7 = g_serial_attributes_tbl(52).COLUMN_VALUE
4055 , attribute8 = g_serial_attributes_tbl(53).COLUMN_VALUE
4056 , attribute9 = g_serial_attributes_tbl(54).COLUMN_VALUE
4057 , attribute10 = g_serial_attributes_tbl(55).COLUMN_VALUE
4058 , attribute11 = g_serial_attributes_tbl(56).COLUMN_VALUE
4059 , attribute12 = g_serial_attributes_tbl(57).COLUMN_VALUE
4060 , attribute13 = g_serial_attributes_tbl(58).COLUMN_VALUE
4061 , attribute14 = g_serial_attributes_tbl(59).COLUMN_VALUE
4062 , attribute15 = g_serial_attributes_tbl(60).COLUMN_VALUE
4063 WHERE inventory_item_id = p_inventory_item_id
4064 AND serial_number = p_serial_number
4065 AND current_organization_id = p_organization_id;
4066 END IF; -- IF NOT p_validate_only THEN
4067 END IF; --IF l_validation_status = 'Y' THEN
4068
4069 IF (l_debug = 1) THEN
4070 invtrace('VALIDATE_UPDATE_SERIAL_ATT:Exitting...');
4071 END IF;
4072
4073 EXCEPTION
4074 WHEN FND_API.G_EXC_ERROR THEN
4075 x_validation_status := l_validation_status;
4076 x_return_status := FND_API.G_RET_STS_ERROR;
4077 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
4078 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4079 x_validation_status := l_validation_status;
4080 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4081 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
4082 WHEN OTHERS THEN
4083 x_validation_status := l_validation_status;
4084 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4085 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
4086 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,'Validate_Attributes');
4087 END IF;
4088 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
4089 END validate_update_serial_att;
4090
4091 FUNCTION SNGetMask(P_txn_act_id IN NUMBER,
4092 P_txn_src_type_id IN NUMBER,
4093 P_serial_control IN NUMBER,
4094 x_to_status OUT NOCOPY NUMBER,
4095 x_dynamic_ok OUT NOCOPY NUMBER,
4096 P_receipt_issue_flag IN VARCHAR2,
4097 x_mask OUT NOCOPY VARCHAR2,
4098 x_errorcode OUT NOCOPY NUMBER)
4099 RETURN BOOLEAN IS
4100 --
4101 TYPE L_mask_tab IS TABLE OF VARCHAR2(17)
4102 INDEX BY BINARY_INTEGER;
4103 L_sn_mask L_mask_tab;
4104 L_group NUMBER := 0;
4105 --
4106 BEGIN
4107 x_errorcode := 0;
4108 x_to_status := 0;
4109 x_dynamic_ok := 0;
4110
4111 -- Bug 7427382, Modified the sn_mask array table to include statuses 6, 7 and 8 also.
4112 -- Bug 11699122 Modified L_sn_mask(7) from 'R0110001001000003' to 'R0110001001001003'
4113 -- to handle Direct Delivery txns against POs.
4114
4115 L_sn_mask(1) := 'I0110100010000004';
4116 L_sn_mask(2) := 'I0000011010000014';
4117 L_sn_mask(3) := 'R0110001001000003';
4118 L_sn_mask(4) := 'R0000101991000013';
4119 L_sn_mask(5) := 'R0000011001000011';
4120 L_sn_mask(6) := '00000000000000000';
4121 L_sn_mask(7) := 'R0110001001001003';
4122 L_sn_mask(8) := 'R0000101001000013';
4123 L_sn_mask(9) := 'I0110100010000004';
4124 L_sn_mask(10):= '00000000000000000';
4125 L_sn_mask(11):= 'R0110110011000003';
4126 L_sn_mask(12):= 'I0110110010000004';
4127 L_sn_mask(13):= '00000000000000000';
4128 L_sn_mask(14):= 'R0110001001101003';
4129 L_sn_mask(15):= 'R0000101001101013';
4130 L_sn_mask(16):= 'I0110100010000005';
4131 L_sn_mask(17):= '00000000000000000';
4132 /*---------------------------------------------------------------------
4133 | Determine which group the transactions to. the value of
4134 | group will be used to provide the appropriate offset in the sn_mask
4135 | array table
4136 +----------------------------------------------------------------------*/
4137 -- Sales Order [SO] - 2
4138 -- RMA - 12
4139 -- SO RMA GROUP - 0
4140 IF P_txn_src_type_id in (2,12) then
4141 L_group := 0;
4142 ELSE
4143 IF P_txn_act_id = 2 THEN -- SUBXFR
4144 L_group := 10 ; -- SUB_XFER_GROUP
4145 ELSIF P_txn_act_id IN ( 12, 21 ) THEN -- INTERECEIPT(12) or INTSHIP(21)
4146 L_group := 13 ; -- INTRANS_GROUP
4147 ELSE -- Default Value
4148 L_group := 6 ; -- STD_GROUP
4149 END IF;
4150 END IF;
4151 L_group := L_group + 1; -- It starts from 0th position, just to avoid
4152 x_mask := L_sn_mask(L_group);
4153 /*---------------------------------------------------------------------
4154 | Match up the transaction with the appropriate mas and get the assigned
4155 | status. If there is no match, then to_status will still be zero after
4156 | the loop
4157 +-----------------------------------------------------------------------*/
4158 WHILE ( substr(x_mask,1,1) <> '0' )
4159 LOOP
4160 if ( substr(x_mask,1,1) = P_receipt_issue_flag ) AND
4161 ( substr(x_mask,P_serial_control+1,1) = '1' ) then
4162 x_to_status := to_number(substr(x_mask,17,1)); -- get the 17th character from mask
4163 x_dynamic_ok := to_number(substr(x_mask,16,1)); -- get the 16th character from mask
4164 exit;
4165 end if;
4166 L_group := L_group + 1; -- go to next mask group
4167 x_mask := L_sn_mask(L_group);
4168 END LOOP;
4169
4170 IF x_to_status = 0 then
4171 FND_MESSAGE.SET_NAME('INV', 'INV_INLTIS_SNGETMASK');
4172 FND_MSG_PUB.Add;
4173 x_errorcode := 123;
4174 return(FALSE);
4175 ELSE
4176 return(TRUE);
4177 END IF;
4178
4179 EXCEPTION
4180 WHEN OTHERS THEN
4181 x_errorcode := -1;
4182 return(FALSE);
4183 END SNGetmask;
4184
4185 PROCEDURE update_msn
4186 (x_return_status OUT NOCOPY VARCHAR2,
4187 x_msg_count OUT NOCOPY NUMBER,
4188 x_msg_data OUT NOCOPY VARCHAR2,
4189 p_trxdate IN DATE,
4190 p_transaction_temp_id IN NUMBER,
4191 p_rev IN VARCHAR2,
4192 p_lotnum IN VARCHAR2,
4193 p_orgid IN NUMBER,
4194 p_locid IN NUMBER, -- :lii,
4195 p_subinv IN VARCHAR2,
4196 p_trxsrctypid IN NUMBER,
4197 p_trxsrcid IN NUMBER,
4198 p_trx_act_id IN NUMBER,
4199 p_vendid IN NUMBER, -- :i_vendor_idi,
4200 p_venlot IN VARCHAR2,
4201 p_receipt_issue_type IN NUMBER,
4202 p_trxsname IN VARCHAR2,
4203 p_lstupdby IN NUMBER,
4204 p_parent_item_id IN NUMBER, -- :parent_item_i,
4205 p_parent_ser_num IN VARCHAR2, -- :parent_sn_i,
4206 p_ser_ctrl_code IN NUMBER,
4207 p_xfr_ser_ctrl_code IN NUMBER,
4208 p_trx_qty IN NUMBER,
4209 p_invitemid IN NUMBER,
4210 p_f_ser_num IN VARCHAR2,
4211 p_t_ser_num IN VARCHAR2,
4212 x_serial_updated OUT NOCOPY NUMBER
4213
4214 ) IS
4215 l_acct_prof_value VARCHAR2(1) := '';
4216 l_qty NUMBER := 0;
4217 l_last_status NUMBER := 0;
4218 l_to_status NUMBER := 0;
4219 l_canonical_trx_date DATE;
4220 l_sys_date DATE := SYSDATE;
4221 l_init_date DATE := trunc(sysdate);
4222 l_cg_id NUMBER := nvl(inv_cost_group_pub.g_cost_group_id, 0);
4223 l_upd_count NUMBER := 0;
4224 l_receipt_issue_flag VARCHAR2(1);
4225 l_error_code NUMBER;
4226 l_dynamic_ok NUMBER;
4227 l_mask VARCHAR2(17); -- Bug 7427382
4228 l_status BOOLEAN;
4229 l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
4230 BEGIN
4231 null;
4232
4233 IF (p_trx_act_id = inv_globals.g_action_stgxfr) THEN
4234 IF (l_debug = 1) THEN
4235 invtrace('The transaction action is staging transfer. Bulk processing of serials are not supported for this transaction');
4236
4237 END IF;
4238 RAISE FND_API.g_exc_unexpected_error;
4239 END IF;
4240
4241 IF nvl(fnd_profile.value('INV_RESTRICT_RCPT_SER'), '2') = '1' THEN
4242 l_acct_prof_Value := 'Y';
4243 else
4244 l_acct_prof_value := 'N';
4245 end if;
4246
4247 if( p_trx_qty < 0 ) THEN
4248 l_qty := -1 * p_trx_qty;
4249 else
4250 l_qty := p_trx_qty;
4251 end if;
4252 IF (l_debug = 1) THEN
4253 invtrace('l_acct_prof_value = ' || l_acct_prof_value);
4254 invtrace('p_trxdate = ' || p_trxdate);
4255 invtrace('p_transaction_temp_id = ' || p_transaction_temp_id);
4256 invtrace('p_rev = ' || p_rev);
4257 invtrace('p_lotnum = ' || p_lotnum);
4258 invtrace('p_orgid = ' || p_orgid);
4259 invtrace('p_locid = ' || p_locid);
4260 invtrace('p_subinv = ' || p_subinv);
4261 invtrace('p_trxsrctypid = ' || p_trxsrctypid);
4262 invtrace('p_trxsrcid = ' || p_trxsrcid);
4263 invtrace('p_trx_act_id = ' || p_trx_act_id);
4264 invtrace('p_vendid = ' || p_vendid);
4265 invtrace('p_venlot = ' || p_venlot);
4266 invtrace('p_receipt_issue_type = ' || p_receipt_issue_type);
4267 invtrace('p_trxsname = ' || p_trxsname);
4268 invtrace('p_lstupdby = ' || p_lstupdby);
4269 invtrace('p_parent_item_id = ' || p_parent_item_id);
4270 invtrace('p_parent_Ser_num = ' || p_parent_Ser_num);
4271 invtrace('p_ser_ctrl_code = ' || p_ser_ctrl_code);
4272 invtrace('p_xfr_ser_ctrl_code = ' || p_xfr_ser_ctrl_code);
4273 invtrace('p_trx_qty = ' || p_trx_qty);
4274 invtrace('p_invitemid = ' || p_invitemid);
4275 invtrace('p_f_ser_num = ' || p_f_ser_num);
4276 invtrace('p_t_ser_num = ' || p_t_ser_num);
4277 END IF;
4278
4279 SELECT current_status
4280 INTO l_last_status
4281 FROM mtl_serial_numbers
4282 WHERE inventory_item_id = p_invitemid
4283 AND serial_number = p_f_ser_num;
4284
4285 IF (l_debug = 1) THEN
4286 invtrace('l_last_status = ' || l_last_status);
4287 END IF;
4288
4289 if( p_receipt_issue_type = 1 ) THEN
4290 l_receipt_issue_flag := 'I';
4291 else
4292 l_receipt_issue_flag := 'R';
4293 end if;
4294
4295 IF (l_debug = 1) THEN
4296 invtrace('l_receipt_issue_flag = ' || l_receipt_issue_flag);
4297 END IF;
4298
4299 l_status := SNGetMask(p_txn_act_id => p_trx_act_id,
4300 p_txn_src_type_id => p_trxsrctypid,
4301 p_serial_control => p_ser_ctrl_code,
4302 x_to_status => l_to_status,
4303 x_dynamic_ok => l_dynamic_ok,
4304 p_receipt_issue_flag => l_receipt_issue_flag,
4305 x_mask => l_mask,
4306 x_errorcode => l_error_code) ;
4307
4308 IF (l_debug = 1) THEN
4309 invtrace('l_mask = ' || l_mask);
4310 END IF;
4311
4312 if( l_status = FALSE ) THEN
4313 IF (l_debug = 1) THEN
4314 invtrace('error from SNGetMask');
4315 END IF;
4316 raise FND_API.G_EXC_UNEXPECTED_ERROR;
4317 end if;
4318
4319 IF (l_debug = 1) THEN
4320 invtrace('l_to_status is ' || l_to_status);
4321 END IF;
4322
4323 IF( p_trx_qty < 0 AND p_trx_act_id = 2 ) THEN
4324 l_status_after_p1 := l_to_status;
4325 l_status_before_p1 := l_last_status;
4326 x_return_status := 'S';
4327 x_msg_count := 0;
4328 x_msg_data := NULL;
4329 x_serial_updated := abs(p_trx_qty);
4330 IF( MSN_UPDATE_FIRST_PASS ) THEN
4331 MSN_UPDATE_FIRST_PASS := FALSE;
4332 END if;
4333 return;
4334 else
4335 IF msn_update_first_pass THEN
4336 l_status_after_p1 := l_last_status;
4337 l_status_before_p1 := l_last_status;
4338 end if;
4339 end if;
4340
4341 IF (l_debug = 1) THEN
4342 invtrace('About to call fnd_date.canonical_to_date');
4343 --l_canonical_trx_date := fnd_date.canonical_to_date(p_trxdate);
4344 invtrace('After call fnd_date.canonical_to_date');
4345 END IF;
4346
4347 if( l_to_status in (1, 6) ) THEN
4348 UPDATE MTL_SERIAL_NUMBERS MSN
4349 SET msn.current_status = l_to_status,
4350 msn.initialization_date = l_init_date,
4351 msn.completion_date = null,
4352 msn.SHIP_DATE = NULL,
4353 msn.REVISION = NULL,
4354 msn.LOT_NUMBER = NULL,
4355 msn.GROUP_MARK_ID = NULL,
4356 msn.LINE_MARK_ID = NULL,
4357 msn.LOT_LINE_MARK_ID = NULL,
4358 msn.CURRENT_ORGANIZATION_ID = p_orgid,
4359 msn.CURRENT_LOCATOR_ID = NULL,
4360 msn.CURRENT_SUBINVENTORY_CODE = NULL,
4361 msn.ORIGINAL_WIP_ENTITY_ID = NULL,
4362 msn.ORIGINAL_UNIT_VENDOR_ID = NULL,
4363 msn.VENDOR_LOT_NUMBER = NULL,
4364 msn.LAST_RECEIPT_ISSUE_TYPE = p_receipt_issue_type,
4365 msn.LAST_TXN_SOURCE_ID =NULL,
4366 msn.LAST_TXN_SOURCE_TYPE_ID = NULL,
4367 msn.LAST_TXN_SOURCE_NAME = NULL,
4368 msn.LAST_UPDATE_DATE = l_sys_date,
4369 msn.LAST_UPDATED_BY = p_lstupdby,
4370 msn.PARENT_ITEM_ID = p_parent_item_id, -- :parent_item_i,
4371 msn.PARENT_SERIAL_NUMBER = p_parent_ser_num, -- :parent_sn_i,
4372 msn.PREVIOUS_STATUS = l_status_after_p1, -- l_last_status, -- p_last_status,
4373 msn.STATUS_ID = NULL,
4374 msn.ORGANIZATION_TYPE = 2,
4375 msn.OWNING_ORGANIZATION_ID = p_orgid,
4376 msn.OWNING_TP_TYPE = 2,
4377 msn.PLANNING_ORGANIZATION_ID = p_orgid,
4378 msn.PLANNING_TP_TYPE = 2
4379 WHERE
4380 msn.INVENTORY_ITEM_ID = p_invitemid
4381 AND msn.SERIAL_NUMBER BETWEEN p_f_ser_num AND p_t_ser_num
4382 AND Length(msn.serial_number) = Length(p_f_ser_num) -- Added as part of the bug 14736743
4383 AND Length(p_f_ser_num) = Length(Nvl(p_t_ser_num,p_f_ser_num)) -- Added as part of the bug 14736743
4384 AND decode( msn.CURRENT_STATUS, 6, 1, msn.CURRENT_STATUS ) = l_status_after_p1 -- l_last_status -- p_last_status
4385 AND Nvl(msn.owning_tp_type,2) <> 1
4386 AND Nvl(msn.owning_organization_id,msn.current_organization_id) = msn.current_organization_id
4387 AND inv_serial_number_pub.valsn(
4388 p_trxsrctypid, -- trx_src_typ_id IN NUMBER,
4389 p_trx_act_id, -- trx_action_id IN NUMBER,
4390 p_rev, -- revision IN VARCHAR2,
4391 p_subinv, -- curr_subinv_code IN VARCHAR2,
4392 p_locid, -- :lii, -- locator_id IN NUMBER,
4393 p_invitemid, -- item IN NUMBER,
4394 p_orgid, -- curr_org_id IN NUMBER,
4395 p_lotnum, -- lot IN VARCHAR2,
4396 msn.serial_number, -- curr_ser_num IN VARCHAR2,
4397 p_ser_ctrl_code, -- ser_num_ctrl_code IN NUMBER,
4398 p_xfr_ser_ctrl_code,
4399 p_trx_qty, -- trx_qty IN NUMBER,
4400 l_acct_prof_value, -- acct_prof_value IN VARCHAR2,
4401 l_mask, -- P_mask IN VARCHAR2,
4402 msn.current_status, /* db_current_status IN NUMBER, */
4403 msn.current_organization_id, -- db_current_organization_id IN NUMBER,
4404 msn.revision, -- db_revision IN VARCHAR2,
4405 msn.lot_number, -- db_lot_number IN VARCHAR2,
4406 msn.current_subinventory_code, -- db_current_subinventory_code IN VARCHAR2,
4407 msn.current_locator_id, -- db_current_locator_id IN NUMBER,
4408 decode( nvl( msn.original_wip_entity_id, -1 ), -1, -1 , 1 ), -- db_wip_ent_id_ind IN NUMBER,
4409 msn.last_txn_source_type_id -- db_lst_txn_src_typ_id IN NUMBER
4410 ) = l_to_status;
4411
4412 ELSE /* To status not in 1,6 */
4413
4414 -- l_canonical_trx_date := NULL;
4415 --l_canonical_trx_date := fnd_date.canonical_to_date( p_trxdate );
4416 --dbms_output.put_line('tostatus not in 1, 6');
4417 IF (l_debug = 1) THEN
4418 invtrace( 'To Status not in 1,6');
4419 END IF;
4420
4421 UPDATE MTL_SERIAL_NUMBERS msn
4422 SET
4423 msn.CURRENT_STATUS = l_to_status, -- p_current_status,
4424 msn.COMPLETION_DATE = NVL( msn.COMPLETION_DATE, p_trxdate ),
4425 msn.SHIP_DATE = DECODE( l_to_status, 3, NULL, NVL( msn.SHIP_DATE, p_trxdate ) ),
4426 msn.REVISION = DECODE( l_last_status, 3, msn.REVISION, p_rev ),
4427 msn.LOT_NUMBER = DECODE( l_last_status, 3, msn.LOT_NUMBER, p_lotnum ),
4428 msn.CURRENT_ORGANIZATION_ID = p_orgid,
4429 msn.CURRENT_LOCATOR_ID = p_locid, -- :lii,
4430 msn.CURRENT_SUBINVENTORY_CODE = p_subinv,
4431 msn.ORIGINAL_WIP_ENTITY_ID = decode( p_trxsrctypid, 5, p_trxsrcid, 2, NULL, msn.ORIGINAL_WIP_ENTITY_ID ),
4432 msn.ORIGINAL_UNIT_VENDOR_ID = NVL( msn.ORIGINAL_UNIT_VENDOR_ID, p_vendid ), -- :i_vendor_idi),
4433 msn.VENDOR_LOT_NUMBER = NVL( msn.VENDOR_LOT_NUMBER,p_venlot ),
4434 msn.LAST_RECEIPT_ISSUE_TYPE = p_receipt_issue_type,
4435 msn.LAST_TXN_SOURCE_ID = p_trxsrcid,
4436 msn.LAST_TXN_SOURCE_TYPE_ID = p_trxsrctypid,
4437 msn.LAST_TXN_SOURCE_NAME = p_trxsname,
4438 msn.GROUP_MARK_ID = NULL,
4439 msn.LINE_MARK_ID = NULL,
4440 msn.LOT_LINE_MARK_ID = NULL,
4441 msn.LAST_UPDATE_DATE = l_sys_date,
4442 msn.LAST_UPDATED_BY = p_lstupdby,
4443 msn.PARENT_ITEM_ID = p_parent_item_id, -- :parent_item_i,
4444 msn.PARENT_SERIAL_NUMBER = p_parent_ser_num, -- :parent_sn_i,
4445 msn.COST_GROUP_ID = l_cg_id,
4446 msn.ORGANIZATION_TYPE = 2,
4447 msn.OWNING_ORGANIZATION_ID = p_orgid,
4448 msn.OWNING_TP_TYPE = 2,
4449 msn.PLANNING_ORGANIZATION_ID = p_orgid,
4450 msn.PLANNING_TP_TYPE = 2
4451 WHERE
4452 msn.INVENTORY_ITEM_ID = p_invitemid
4453 AND msn.SERIAL_NUMBER BETWEEN p_f_ser_num AND p_t_ser_num
4454 AND Length(msn.serial_number) = Length(p_f_ser_num) -- Added as part of the bug 14736743
4455 AND Length(p_f_ser_num) = Length(Nvl(p_t_ser_num,p_f_ser_num)) -- Added as part of the bug 14736743
4456 AND decode( msn.CURRENT_STATUS, 6, 1, msn.CURRENT_STATUS ) = l_last_status
4457 AND Nvl(msn.owning_organization_id,msn.current_organization_id) = msn.current_organization_id
4458 AND Nvl(msn.owning_tp_type,2) <> 1
4459 AND inv_serial_number_pub.valsn(
4460 p_trxsrctypid, -- trx_src_typ_id IN NUMBER,
4461 p_trx_act_id, -- trx_action_id IN NUMBER,
4462 p_rev, -- revision IN VARCHAR2,
4463 p_subinv, -- curr_subinv_code IN VARCHAR2,
4464 p_locid, -- :lii, -- locator_id IN NUMBER,
4465 p_invitemid, -- item IN NUMBER,
4466 p_orgid, -- curr_org_id IN NUMBER,
4467 p_lotnum, -- lot IN VARCHAR2,
4468 msn.serial_number, -- curr_ser_num IN VARCHAR2,
4469 p_ser_ctrl_code, -- ser_num_ctrl_code IN NUMBER,
4470 nvl(p_xfr_ser_ctrl_code,1), -- p_xfr_ser_ctrl_code IN NUMBER
4471 p_trx_qty, -- trx_qty IN NUMBER,
4472 l_acct_prof_value, -- acct_prof_value IN VARCHAR2,
4473 l_mask, -- P_mask IN VARCHAR2,
4474 msn.current_status,
4475 msn.current_organization_id, -- db_current_organization_id IN NUMBER,
4476 msn.revision, -- db_revision IN VARCHAR2,
4477 msn.lot_number, -- db_lot_number IN VARCHAR2,
4478 msn.current_subinventory_code, -- db_current_subinventory_code IN VARCHAR2,
4479 msn.current_locator_id, -- db_current_locator_id IN NUMBER,
4480 decode( nvl( msn.original_wip_entity_id, -1 ), -1, -1 , 1 ), -- db_wip_ent_id_ind IN NUMBER,
4481 msn.last_txn_source_type_id -- db_lst_txn_src_typ_id IN NUMBER
4482 ) > 0;
4483
4484 end if;
4485
4486 l_upd_count := SQL%ROWCOUNT;
4487 IF (l_debug = 1) THEN
4488 invtrace( 'updated=' || to_char( l_upd_count ));
4489 END IF;
4490
4491 IF ( l_upd_count <> l_qty ) THEN
4492 IF (l_debug = 1) THEN
4493 invtrace( ' Updated not the same as the transaction. trx qty: ' || l_qty);
4494 END IF;
4495 x_return_status := 'W';
4496 x_msg_count := 0;
4497 x_msg_data := 'Can only update ' || to_char( l_upd_count ) || ' of ' ||
4498 to_char( l_qty ) || '. Rejecting update';
4499 ELSE
4500 IF (l_debug = 1) THEN
4501 invtrace( ' Updated same as the transaction. Success');
4502 END IF;
4503 x_serial_updated := l_upd_count;
4504 x_return_status := 'S';
4505 x_msg_count := 0;
4506 x_msg_data := NULL;
4507 END IF;
4508 EXCEPTION
4509 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4510 x_return_status := 'U';
4511 x_msg_data := substr(sqlerrm, 1, 255);
4512 x_msg_count := 1;
4513 IF (l_debug = 1) THEN
4514 invtrace( ' Unexpected error in update_msn API');
4515 END IF;
4516
4517 WHEN OTHERS THEN
4518 x_return_status := 'U';
4519 x_msg_data := substr( sqlerrm,1 , 255);
4520 IF (l_debug = 1) THEN
4521 invtrace( 'in when others');
4522 invtrace( 'x_return_status=' || x_return_status);
4523 invtrace( 'x_msg_data = ' || x_msg_data );
4524 IF (l_debug = 1) THEN
4525 invtrace( ' Error in update_msn API');
4526 END IF;
4527 END IF;
4528
4529 END update_msn;
4530
4531 FUNCTION getGroupId(
4532 p_trx_source_type_id IN NUMBER,
4533 p_trx_action_id IN NUMBER) RETURN NUMBER
4534 IS
4535 l_groupId NUMBER := 0;
4536 /*
4537 Trx_source_Type_id
4538 ------------------------
4539 2 - Sales Order
4540 12 - RMA
4541 8 - Internal Order
4542 7 - Internal Requisition
4543 16 - Project Contracts
4544
4545 TRX Action:
4546 ------------------
4547 2 - Sub Transfer
4548 5 - Planning Transfer
4549 6 - Consign Transfer
4550 12 - Intransit receipt
4551 21 - Intransit Shipment
4552 50 - pack
4553 51 - unpack
4554 52 - LPN Split
4555
4556 Group Id
4557 1 - SO_RMA_GROUP
4558 2 - SUB_XFER_GROUP
4559 3 - INTRANS_GROUP
4560 4 - PACKUNPACK_GROUP
4561 5 - STD_GROUP
4562 */
4563
4564 BEGIN
4565 if( p_trx_source_Type_id in (2, 7, 8, 12, 16 )) THEN
4566 l_groupId := 1;
4567 else
4568 if( p_trx_action_id in ( 2, 5, 6) ) THEN
4569 l_groupId := 2;
4570 elsif( p_trx_action_id in (12, 21) ) THEN
4571 l_groupId := 3;
4572 elsif( p_trx_action_id in (50, 51, 52 )) THEN
4573 l_groupId := 4;
4574 else
4575 l_groupId := 5;
4576 end if;
4577 END IF;
4578 return l_groupId;
4579 END getGroupId;
4580
4581 FUNCTION validate_status(
4582 p_trx_src_type_id IN number,
4583 p_trx_action_id IN number,
4584 p_isIssue IN boolean,
4585 p_ser_num_ctrl_code IN number,
4586 p_curr_status IN number,
4587 p_last_trx_src_type_id IN NUMBER,
4588 p_xfr_Ser_num_ctrl_code IN NUMBER,
4589 p_isRestrictRcptSerial IN NUMBER
4590 ) return number
4591 IS
4592 --l_debug NUMBER := NVL(fnd_profile.VALUE('INV_DEBUG_TRACE'), 0);
4593 l_groupId NUMBER := 0;
4594 l_newStatus NUMBER := p_curr_status;
4595 l_isRestrictRcptSerial NUMBER := p_isRestrictRcptSerial;
4596 l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
4597
4598 BEGIN
4599 if( l_debug = 1 ) then
4600 invtrace('inside validate_status, p_trx_src_type_id = ' || p_trx_src_type_id);
4601 invtrace('inside validate_status, p_trx_action_id = ' || p_trx_action_id);
4602 invtrace('inside validate_status, p_ser_num_ctrl_code = ' || p_ser_num_ctrl_code);
4603 invtrace('inside validate_status, p_curr_status = ' || p_curr_status);
4604 invtrace('inside validate_status, p_last_trx_src_type_id = ' || p_last_trx_src_type_id);
4605 invtrace('inside validate_status, p_xfr_ser_num_ctrl_code = ' || p_xfr_ser_num_ctrl_code);
4606 end if;
4607 l_groupId := getGroupId(p_trx_src_type_id, p_trx_action_id);
4608
4609 --l_isRestrictRcptSerial := fnd_profile.value('INV_RESTRICT_RCPT_SER');
4610
4611 /*if( l_debug = 1 ) then
4612 invtrace('l_groupId = ' || l_groupId);
4613 end if;*/
4614
4615 if( l_groupId = 1 )THEN
4616 if( p_isIssue ) THEN
4617 if( p_ser_num_ctrl_code in (2, 3, 5)) THEN
4618 if( p_trx_src_type_id = 8 AND p_trx_action_id = 21 ) THEN
4619 if( p_curr_status = 3 ) THEN
4620 if( p_xfr_ser_num_ctrl_code = 1 ) THEN
4621 l_newStatus := 4;
4622 else
4623 l_newStatus := 5;
4624 end if;
4625 end if;
4626 elsif( p_curr_status = 3 ) THEN
4627 l_newStatus := 4;
4628 else
4629 --FND_MESSAGE.SET_NAME('INV', 'INV_INVALID_SERIAL');
4630 --FND_MSG_PUB.ADD;
4631 return -1;
4632 end if;
4633 elsif( p_ser_num_ctrl_code = 6 ) THEN
4634 if( p_trx_src_type_id = 8 AND p_trx_action_id = 21 ) THEN
4635 if( p_curr_status in (1, 3, 6) ) then
4636 l_newStatus := 5;
4637 end if;
4638 elsif( p_curr_status in (1, 3, 6) ) THEN
4639 l_newStatus := 4;
4640 else
4641 --FND_MESSAGE.SET_NAME('INV', 'INV_INVALID_SERIAL');
4642 --FND_MSG_PUB.ADD;
4643 return -2;
4644 end if;
4645 end if;
4646 else -- p_isIssue is false;
4647 if( p_ser_num_ctrl_code in (2, 3, 5) ) THEN
4648 if( p_curr_status in (1, 4, 6)) THEN
4649 l_newStatus := 3;
4650 else
4651 if( (p_trx_src_type_id in (12, 7)) AND (p_curr_status in (5, 7))) THEN
4652 l_newStatus := 4;
4653 else
4654 --FND_MESSAGE.SET_NAME('INV', 'INV_INVALID_SERIAL');
4655 --FND_MSG_PUB.ADD;
4656 return -3;
4657 end if;
4658 end if;
4659 elsif( p_ser_num_ctrl_code = 6 ) THEN
4660 if( p_last_trx_src_type_id = 12 AND p_curr_status = 1 AND l_isRestrictRcptSerial = 1 ) THEN
4661 --FND_MESSAGE.SET_NAME('INV', 'INV_INVALID_SERIAL');
4662 --FND_MSG_PUB.ADD;
4663 return -1;
4664 elsif( (p_trx_src_type_id = 7 OR p_trx_action_id = 12) AND (p_curr_status in (5, 7 ))) THEN
4665 l_newStatus := 1;
4666 else
4667 if( p_curr_status in (1, 4, 5, 6, 7 ) ) THEN
4668 l_newStatus := 1;
4669 else
4670 --FND_MESSAGE.SET_NAME('INV', 'INV_INVALID_SERIAL');
4671 --FND_MSG_PUB.ADD;
4672 return -1;
4673 end if;
4674 end if;
4675 end if;
4676 end if;
4677 elsif( l_groupId = 2 ) THEN
4678 if( p_ser_num_ctrl_code in (2, 3, 5)) THEN
4679 if( p_curr_status = 3 ) THEN
4680 l_newStatus := 3;
4681 else
4682 --FND_MESSAGE.SET_NAME('INV', 'INV_INVALID_SERIAL');
4683 --FND_MSG_PUB.ADD;
4684 return -1;
4685 end if;
4686 end if;
4687 elsif( l_groupId = 3 ) THEN
4688 if( p_isIssue ) THEN
4689 if( p_ser_num_ctrl_code in (2, 3, 5) ) then
4690 if( p_curr_status = 3 ) THEN
4691 if( p_xfr_ser_num_ctrl_code = 1 ) THEN
4692 l_newStatus := 4;
4693 else
4694 l_newStatus := 5;
4695 end if;
4696 else
4697 --FND_MESSAGE.SET_NAME('INV', 'INV_INVALID_SERIAL');
4698 --FND_MSG_PUB.ADD;
4699 return -1;
4700 end if;
4701 end if;
4702 else
4703 if( p_ser_num_ctrl_code in (2, 3, 5) ) THEN
4704 if( p_curr_status in (1, 4, 5, 6, 7) ) THEN
4705 l_newStatus := 3;
4706 else
4707 --FND_MESSAGE.SET_NAME('INV', 'INV_INVALID_SERIAL');
4708 --FND_MSG_PUB.ADD;
4709 return -1;
4710 end if;
4711 elsif( p_ser_num_ctrl_code = 6 ) THEN
4712 if( p_curr_status in (5,7) AND ( p_trx_src_type_id = 7 OR p_trx_action_id = 12) ) THEN
4713 l_newStatus := 1;
4714 else
4715 --FND_MESSAGE.SET_NAME('INV', 'INV_INVALID_SERIAL');
4716 --FND_MSG_PUB.ADD;
4717 return -1;
4718 end if;
4719 end if;
4720 end if;
4721 elsif( l_groupId = 4 ) THEN
4722 if( p_curr_status <> 3 ) THEN
4723 --FND_MESSAGE.SET_NAME('INV', 'INV_INVALID_SERIAL');
4724 --FND_MSG_PUB.ADD;
4725 return -1;
4726 end if;
4727 elsif( l_groupId = 5 ) THEN
4728 if( p_isIssue ) THEN
4729 if( p_ser_num_ctrl_code in (2, 3, 5)) THEN
4730 if( p_curr_status = 3 ) then
4731 l_newStatus := 4;
4732 else
4733 --FND_MESSAGE.SET_NAME('INV', 'INV_INVALID_SERIAL');
4734 --FND_MSG_PUB.ADD;
4735 return -1;
4736 end if;
4737 end if;
4738 else
4739 if( p_ser_num_ctrl_code in (2, 3, 5) ) THEN
4740 if( l_isRestrictRcptSerial = 1 AND p_trx_action_id = 27 AND
4741 p_curr_status = 4 AND p_last_trx_src_Type_id = 2 ) THEN
4742 --FND_MESSAGE.SET_NAME('INV', 'INV_INVALID_SERIAL');
4743 --FND_MSG_PUB.ADD;
4744 return -1;
4745 end if;
4746 if( p_curr_status in (1, 4, 6)) THEN
4747 if( p_trx_action_id = 3 AND p_xfr_ser_num_ctrl_code = 6 ) THEN
4748 l_newStatus := 1;
4749 else
4750 l_newStatus := 4;
4751 end if;
4752 else
4753 if( (p_trx_src_type_id in (1, 5) AND p_curr_status = 5 )OR
4754 (p_trx_src_type_id = 1 AND p_curr_status = 7 )) THEN
4755 l_newStatus := 3;
4756 else
4757 --FND_MESSAGE.SET_NAME('INV', 'INV_INVALID_SERIAL');
4758 --FND_MSG_PUB.ADD;
4759 return -1;
4760 end if;
4761 end if;
4762 end if;
4763 end if;
4764 end if;
4765
4766 return l_newStatus;
4767 End validate_status;
4768
4769 FUNCTION valsn(
4770 p_trx_src_type_id IN NUMBER,
4771 p_trx_action_id IN NUMBER,
4772 p_revision IN VARCHAR2,
4773 p_curr_subinv_code IN VARCHAR2,
4774 p_locator_id IN NUMBER,
4775 p_item IN NUMBER,
4776 p_curr_org_id IN NUMBER,
4777 p_lot IN VARCHAR2,
4778 p_curr_ser_num IN VARCHAR2,
4779 p_ser_num_ctrl_code IN NUMBER,
4780 p_xfr_ser_num_ctrl_code IN NUMBER,
4781 p_trx_qty IN NUMBER,
4782 p_acct_prof_value IN VARCHAR2,
4783 p_mask IN VARCHAR2,
4784 p_db_current_status IN NUMBER,
4785 p_db_current_organization_id IN NUMBER,
4786 p_db_revision IN VARCHAR2,
4787 p_db_lot_number IN VARCHAR2,
4788 p_db_current_subinventory_code IN VARCHAR2,
4789 p_db_current_locator_id IN NUMBER,
4790 p_db_wip_ent_id_ind IN NUMBER,
4791 p_db_lst_txn_src_type_id IN NUMBER
4792 ) RETURN NUMBER IS
4793 l_isIssue BOOLEAN := FALSE;
4794
4795 l_newStatus NUMBER := 0;
4796 l_retval NUMBER := 0;
4797 l_parent_ser_number VARCHAR2(30) := '';
4798 l_isRestrictRcptSerial NUMBER;
4799 l_groupId NUMBER := 0;
4800 l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
4801 BEGIN
4802 --null;
4803 IF (l_debug = 1) THEN
4804 invtrace('p_trx_src_type_id = ' || p_trx_src_type_id);
4805 invtrace('p_trx_action_id = ' || p_trx_action_id);
4806 invtrace('p_revision = ' || p_revision);
4807 invtrace('p_curr_subinv_code = ' || p_curr_subinv_code);
4808 invtrace('p_locator_id = ' || p_locator_id);
4809 invtrace('p_item = ' || p_item);
4810 invtrace('p_curr_org_id = ' || p_curr_org_id);
4811 invtrace('p_lot = ' || p_lot);
4812 invtrace('p_curr_ser_num = ' || p_curr_ser_num);
4813 invtrace('p_ser_num_ctrl_code = ' || p_ser_num_ctrl_code);
4814 invtrace('p_xfr_ser_num_ctrl_code = ' || p_xfr_ser_num_ctrl_code);
4815 invtrace('p_trx_qty = ' || p_trx_qty);
4816 invtrace('p_acct_prof_value = ' || p_acct_prof_value);
4817 invtrace('p_mask = ' || p_mask);
4818 invtrace('p_db_current_status = ' || p_db_current_status);
4819 invtrace('p_db_current_organization_id = ' || p_db_current_organization_id);
4820 invtrace('p_db_revision = ' || p_db_revision);
4821 invtrace('p_db_lot_number = ' || p_db_lot_number);
4822 invtrace('p_db_current_subinventory_code = ' || p_db_current_subinventory_code);
4823 invtrace('p_db_current_locator_id = ' || p_db_current_locator_id);
4824 invtrace('p_db_wip_ent_id_ind = ' || p_db_wip_ent_id_ind);
4825 invtrace('p_db_lst_txn_src_type_id = ' || p_db_lst_txn_src_type_id);
4826 END IF;
4827
4828 if( p_trx_qty < 0 ) THEN
4829 l_isIssue := TRUE;
4830 IF (l_debug = 1) THEN
4831 invtrace('l_isIssue is true');
4832 END IF;
4833 else
4834 l_isIssue := FALSE;
4835 IF (l_debug = 1) THEN
4836 invtrace('l_isIssue is false');
4837 END IF;
4838 end if;
4839
4840 IF p_acct_prof_value = 'Y' THEN
4841 l_isRestrictRcptSerial := 1;
4842 else
4843 l_isRestrictRcptSerial := 0;
4844 end if;
4845
4846 -- getting the group id
4847 if( p_trx_src_Type_id in (2, 7, 8, 12, 16 )) THEN
4848 l_groupId := 1;
4849 else
4850 if( p_trx_action_id in ( 2, 5, 6) ) THEN
4851 l_groupId := 2;
4852 elsif( p_trx_action_id in (12, 21) ) THEN
4853 l_groupId := 3;
4854 elsif( p_trx_action_id in (50, 51, 52 )) THEN
4855 l_groupId := 4;
4856 else
4857 l_groupId := 5;
4858 end if;
4859 END IF;
4860
4861 --dbms_output.put_line('inside valsn, l_groupId = ' || l_groupId);
4862 IF (l_debug = 1) THEN
4863 invtrace('substr(p_mask, pdbcurrstats+7) = ' || substr(p_mask, p_db_current_status+7, 1));
4864 invtrace('l_groupId = ' || l_groupId);
4865 END IF;
4866
4867 IF substr( P_mask, p_db_current_status + 7, 1 )= '0' THEN
4868 -- return to_number( 'A' );
4869 -- ppush( 'avd_debug','db_current_status='|| to_char( db_current_status ) );
4870 -- ppush( 'avd_debug','curr_ser_num='|| curr_ser_num );
4871 -- ppush( 'avd_debug', '923');
4872 return -923;
4873 END IF;
4874
4875 -- Bug 7427382, supporting statuses 6, 7 and 8 also.
4876 IF ( p_db_current_status = -1 or p_db_current_status = 2 or
4877 p_db_current_status < 1 or p_db_current_status > 8 or p_db_current_status is NULL ) THEN
4878 --fnd_message.set_name( 'INV', 'INV_INVALID_SERIAL' );
4879 return -913;
4880 END IF;
4881
4882 -- validate status
4883 if( l_groupId = 1 )THEN
4884 if( l_isIssue ) THEN
4885 if( p_ser_num_ctrl_code in (2, 3, 5)) THEN
4886 if( p_trx_src_type_id = 8 AND p_trx_action_id = 21 ) THEN
4887 if( p_db_current_status = 3 ) THEN
4888 if( nvl(p_xfr_ser_num_ctrl_code, 0) = 1 ) THEN
4889 l_newStatus := 4;
4890 else
4891 l_newStatus := 5;
4892 end if;
4893 end if;
4894 elsif( p_db_current_status = 3 ) THEN
4895 l_newStatus := 4;
4896 else
4897 l_retval := -901;
4898 end if;
4899 elsif( p_ser_num_ctrl_code = 6 ) THEN
4900 if( p_trx_src_type_id = 8 AND p_trx_action_id = 21 ) THEN
4901 if( p_db_current_status in (1, 3, 6) ) then
4902 l_newStatus := 5;
4903 end if;
4904 elsif( p_db_current_status in (1, 3, 6) ) THEN
4905 l_newStatus := 4;
4906 else
4907 --FND_MESSAGE.SET_NAME('INV', 'INV_INVALID_SERIAL');
4908 --FND_MSG_PUB.ADD;
4909 l_retval := -902;
4910 end if;
4911 end if;
4912 else -- p_isIssue is false;
4913 if( p_ser_num_ctrl_code in (2, 3, 5) ) THEN
4914 if( p_db_current_status in (1, 4, 6)) THEN
4915 l_newStatus := 3;
4916 else
4917 if( (p_trx_src_type_id in (12, 7)) AND (p_db_current_status in (5, 7))) THEN
4918 l_newStatus := 4;
4919 else
4920 --FND_MESSAGE.SET_NAME('INV', 'INV_INVALID_SERIAL');
4921 --FND_MSG_PUB.ADD;
4922 l_retval := -903;
4923 end if;
4924 end if;
4925 elsif( p_ser_num_ctrl_code = 6 ) THEN
4926 if( p_db_lst_txn_src_type_id = 12 AND p_db_current_status = 1 AND l_isRestrictRcptSerial = 1 ) THEN
4927 --FND_MESSAGE.SET_NAME('INV', 'INV_INVALID_SERIAL');
4928 --FND_MSG_PUB.ADD;
4929 l_retval := -904;
4930 elsif( (p_trx_src_type_id = 7 OR p_trx_action_id = 12) AND (p_db_current_status in (5, 7 ))) THEN
4931 l_newStatus := 1;
4932 else
4933 if( p_db_current_status in (1, 4, 5, 6, 7 ) ) THEN
4934 l_newStatus := 1;
4935 else
4936 --FND_MESSAGE.SET_NAME('INV', 'INV_INVALID_SERIAL');
4937 --FND_MSG_PUB.ADD;
4938 l_retval := -905;
4939 end if;
4940 end if;
4941 end if;
4942 end if;
4943 elsif( l_groupId = 2 ) THEN
4944 if( p_ser_num_ctrl_code in (2, 3, 5)) THEN
4945 if( p_db_current_status = 3 ) THEN
4946 l_newStatus := 3;
4947 else
4948 --FND_MESSAGE.SET_NAME('INV', 'INV_INVALID_SERIAL');
4949 --FND_MSG_PUB.ADD;
4950 l_retval := -906;
4951 end if;
4952 end if;
4953 elsif( l_groupId = 3 ) THEN
4954 if( l_isIssue ) THEN
4955 if( p_ser_num_ctrl_code in (2, 3, 5) ) then
4956 if( p_db_current_status = 3 ) THEN
4957 if( p_xfr_ser_num_ctrl_code = 1 ) THEN
4958 l_newStatus := 4;
4959 else
4960 l_newStatus := 5;
4961 end if;
4962 else
4963 --FND_MESSAGE.SET_NAME('INV', 'INV_INVALID_SERIAL');
4964 --FND_MSG_PUB.ADD;
4965 l_retval := -907;
4966 end if;
4967 end if;
4968 else
4969 if( p_ser_num_ctrl_code in (2, 3, 5) ) THEN
4970 if( p_db_current_status in (1, 4, 5, 6, 7) ) THEN
4971 l_newStatus := 3;
4972 else
4973 --FND_MESSAGE.SET_NAME('INV', 'INV_INVALID_SERIAL');
4974 --FND_MSG_PUB.ADD;
4975 l_retval := -908;
4976 end if;
4977 elsif( p_ser_num_ctrl_code = 6 ) THEN
4978 if( p_db_current_status in (5,7) AND ( p_trx_src_type_id = 7 OR p_trx_action_id = 12) ) THEN
4979 l_newStatus := 1;
4980 else
4981 --FND_MESSAGE.SET_NAME('INV', 'INV_INVALID_SERIAL');
4982 --FND_MSG_PUB.ADD;
4983 l_retval := -908;
4984 end if;
4985 end if;
4986 end if;
4987 elsif( l_groupId = 4 ) THEN
4988 if( p_db_current_status <> 3 ) THEN
4989 --FND_MESSAGE.SET_NAME('INV', 'INV_INVALID_SERIAL');
4990 --FND_MSG_PUB.ADD;
4991 l_retval := -909;
4992 end if;
4993 elsif( l_groupId = 5 ) THEN
4994 --dbms_output.put_line('standard group');
4995 if( l_isIssue ) THEN
4996 if( p_ser_num_ctrl_code in (2, 3, 5)) THEN
4997 if( p_db_current_status = 3 ) then
4998 l_newStatus := 4;
4999 else
5000 --FND_MESSAGE.SET_NAME('INV', 'INV_INVALID_SERIAL');
5001 --FND_MSG_PUB.ADD;
5002 l_retval := -910;
5003 end if;
5004 end if;
5005 else
5006 --dbms_output.put_line('inside receipt part');
5007 if( p_ser_num_ctrl_code in (2, 3, 5) ) THEN
5008 if( l_isRestrictRcptSerial = 1 AND p_trx_action_id = 27 AND
5009 p_db_current_status = 4 AND p_db_lst_txn_src_Type_id = 2 ) THEN
5010 --FND_MESSAGE.SET_NAME('INV', 'INV_INVALID_SERIAL');
5011 --FND_MSG_PUB.ADD;
5012 l_retval := -911;
5013 end if;
5014 if( p_db_current_status in (1, 4, 6)) THEN
5015 if( p_trx_action_id = 3 AND p_xfr_ser_num_ctrl_code = 6 ) THEN
5016 l_newStatus := 1;
5017 else
5018 l_newStatus := 3;
5019 end if;
5020 else
5021 if( (p_trx_src_type_id in (1, 5) AND p_db_current_status = 5 )OR
5022 (p_trx_src_type_id = 1 AND p_db_current_status = 7 )) THEN
5023 l_newStatus := 3;
5024 else
5025 --FND_MESSAGE.SET_NAME('INV', 'INV_INVALID_SERIAL');
5026 --FND_MSG_PUB.ADD;
5027 l_retval := -912;
5028 end if;
5029 end if;
5030 end if;
5031 end if;
5032 end if;
5033
5034 /*l_NewStatus := validate_Status(p_trx_src_type_id, p_trx_action_id, l_isIssue, p_ser_num_ctrl_code, p_db_current_status,
5035 p_db_lst_txn_src_type_id, p_xfr_ser_num_ctrl_code, l_isRestrictRcptSerial);*/
5036
5037 IF ( ( p_db_current_status = 3 OR p_db_current_status = 1 )
5038 AND p_db_current_organization_id <> p_curr_org_id ) THEN
5039 --fnd_message.set_name( 'INV', 'INV_SER_ORG_INVALID' );
5040 l_retval := -914;
5041 END IF;
5042
5043
5044 IF (p_db_current_status = 3) THEN
5045 IF (p_db_revision IS NOT NULL AND p_db_revision <> p_revision ) THEN
5046
5047 --fnd_message.set_name('INV', 'INV_SER_REV_INVALID');
5048 --fnd_message.set_Token('TOKEN1', p_db_Revision);
5049 --fnd_message.set_Token('TOKEN2', p_revision);
5050 l_retval := -915;
5051 END IF;
5052
5053 IF ( p_db_lot_number IS NOT NULL AND p_db_Lot_Number <> p_lot ) THEN
5054 --fnd_message.set_name('INV', 'INV_SER_LOT_INVALID');
5055 --fnd_message.set_Token('TOKEN1', p_curr_ser_num);
5056 --fnd_message.set_Token('TOKEN2', p_db_Lot_Number);
5057 l_retval := -916;
5058 END IF;
5059 END IF;
5060
5061 /* commented out because of db_lpn_id...do not know why used */
5062 -- IF (bool AND db_current_status = 3 AND db_lpn_id = 0) THEN
5063 IF (l_isIssue AND p_db_current_status = 3 ) THEN
5064
5065 IF (p_db_current_subinventory_code IS NOT NULL AND
5066 p_db_current_subinventory_code <> p_curr_subinv_code) THEN
5067 --fnd_message.set_name('INV', 'INV_SER_SUB_INVALID');
5068 --fnd_message.set_Token('TOKEN1', p_curr_ser_num);
5069 --fnd_message.set_Token('TOKEN2', p_db_current_subinventory_code);
5070 l_retval := -917;
5071 END IF;
5072
5073 IF (p_db_current_locator_id <> 0 AND
5074 p_db_current_locator_id <> p_locator_id ) THEN
5075 --fnd_message.set_name('INV', 'INV_SER_LOC_INVALID');
5076 --fnd_message.set_Token('TOKEN1', p_curr_ser_num);
5077 l_retval := -918;
5078 END IF;
5079
5080 END IF;
5081
5082
5083 IF (p_trx_src_type_id = 5 ) THEN -- {
5084 IF ((p_trx_action_id = 31 AND p_db_current_status <> 1)
5085 OR (p_trx_action_id = 32)
5086 OR (p_trx_action_id = 27)) THEN -- {
5087 IF (p_db_wip_ent_id_ind = -1) THEN -- {
5088 --fnd_message.set_name('INV', 'INV_SER_STATUS_NA');
5089 --fnd_message.set_Token('TOKEN1', p_curr_ser_num);
5090 l_retval := -919; -- return(FALSE);
5091 END IF; -- }
5092 END IF; -- }
5093 END IF; -- }
5094
5095 -- For any receipt into warehouse for Serial Control - Dyn. at inv. receipt
5096 -- LOV does not validate the serial number entered.
5097 -- So any serial number with current status = 4 gets successfully received .
5098
5099 IF ( (p_ser_num_ctrl_code = 5) AND (p_db_current_status = 4 )
5100 AND (p_trx_qty > 0 ) AND ( p_trx_action_id =27 )
5101 AND (p_trx_src_type_id <> 5) AND (p_db_wip_ent_id_ind <> -1)
5102 AND ( p_acct_prof_value = 'Y' /*1*/) AND (p_db_lst_txn_src_type_id = 5 )) THEN -- {
5103
5104 --fnd_message.set_name('INV', 'INV_SER_STATUS_NA');
5105 --fnd_message.set_Token('TOKEN1', p_curr_ser_num);
5106 l_retval := -920; -- return(FALSE);
5107
5108 END IF; -- }
5109
5110 IF ( (p_ser_num_ctrl_code = 5) AND (p_db_current_status = 4 )
5111 AND (p_trx_qty > 0 ) AND ( p_trx_action_id = 27 )
5112 AND (p_trx_src_type_id <> 5) AND (p_db_wip_ent_id_ind <> -1)
5113 AND (p_acct_prof_value = 'Y' /*1*/) AND (p_db_lst_txn_src_type_id = 6 )
5114 AND (p_trx_src_type_id <> 6 )) THEN -- {
5115
5116 --fnd_message.set_name('INV', 'INV_SER_STATUS_NA');
5117 --fnd_message.set_Token('TOKEN1', p_curr_ser_num);
5118 l_retval := -920; -- return(FALSE);
5119
5120 END IF; -- }
5121
5122 IF ( (p_ser_num_ctrl_code = 5) AND (p_db_current_status = 4 )
5123 AND (( p_trx_action_id = 31 ) OR (p_trx_action_id = 1))
5124 AND (p_trx_src_type_id = 5) AND (p_db_wip_ent_id_ind <> -1)
5125 AND (p_acct_prof_value = 'Y' /*1*/)
5126 AND ((p_db_lst_txn_src_type_id = 5) OR (p_db_lst_txn_src_type_id = 6 ))) THEN -- {
5127
5128 --fnd_message.set_name('INV', 'INV_SER_STATUS_NA');
5129 --fnd_message.set_Token('TOKEN1', p_curr_ser_num);
5130 l_retval := -921; -- return(FALSE);
5131
5132 END IF; -- }
5133
5134 IF (l_debug = 1) THEN
5135 invtrace('l_retval = ' || l_retval);
5136 END IF;
5137
5138 IF ( l_retval > -900 ) then
5139 RETURN l_newstatus;
5140 -- RETURN validateStatus(trx_src_typ_id, trx_action_id, bool, ser_num_ctrl_code, db_current_status);
5141 ELSE
5142 RETURN l_retval;
5143 END IF;
5144 EXCEPTION
5145 WHEN OTHERS THEN
5146 RAISE;
5147 END valsn;
5148
5149 PROCEDURE insertRangeUnitTrx(
5150 p_api_version IN NUMBER,
5151 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
5152 p_commit IN VARCHAR2 := FND_API.G_FALSE,
5153 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
5154 p_inventory_item_id IN NUMBER,
5155 p_organization_id IN NUMBER,
5156 p_fm_serial_number IN VARCHAR2,
5157 p_to_serial_number IN VARCHAR2,
5158 p_current_locator_id IN NUMBER,
5159 p_subinventory_code IN VARCHAR2,
5160 p_transaction_date IN DATE,
5161 p_txn_src_id IN NUMBER,
5162 p_txn_src_name IN VARCHAR2,
5163 p_txn_src_type_id IN NUMBER,
5164 p_transaction_id IN NUMBER,
5165 p_transaction_action_id IN NUMBER,
5166 p_transaction_temp_id IN NUMBER,
5167 p_receipt_issue_type IN NUMBER,
5168 p_customer_id IN NUMBER,
5169 p_ship_id IN NUMBER,
5170 p_status_id IN NUMBER,
5171 x_return_status OUT nOCOPY VARCHAR2,
5172 x_msg_count OUT nOCOPY NUMBER,
5173 x_msg_data OUT nOCOPY VARCHAR2)
5174 IS
5175 l_api_version CONSTANT NUMBER := 1.0;
5176 l_api_name CONSTANT VARCHAR2(30):= 'insertRangeUnitTrx';
5177 l_userid NUMBER;
5178 l_loginid NUMBER;
5179 l_serial_control_code NUMBER;
5180 l_attributes_default INV_LOT_SEL_ATTR.LOT_SEL_ATTRIBUTES_TBL_TYPE;
5181 l_attributes_default_count NUMBER;
5182 l_attributes_in INV_LOT_SEL_ATTR.LOT_SEL_ATTRIBUTES_TBL_TYPE;
5183 l_column_idx BINARY_INTEGER := 44;
5184 l_return_status VARCHAR2(1);
5185 l_msg_data VARCHAR2(2000);
5186 l_msg_count NUMBER;
5187 l_upd_count NUMBER;
5188 l_TIME_SINCE_NEW mtl_serial_numbers_temp.TIME_SINCE_NEW%type;
5189 l_CYCLES_SINCE_NEW mtl_serial_numbers_temp.CYCLES_SINCE_NEW%type;
5190 l_TIME_SINCE_OVERHAUL mtl_serial_numbers_temp.TIME_SINCE_OVERHAUL%type := NULL;
5191 l_CYCLES_SINCE_OVERHAUL mtl_serial_numbers_temp.CYCLES_SINCE_OVERHAUL%type;
5192 l_TIME_SINCE_REPAIR mtl_serial_numbers_temp.TIME_SINCE_REPAIR%type;
5193 l_CYCLES_SINCE_REPAIR mtl_serial_numbers_temp.CYCLES_SINCE_REPAIR%type;
5194 l_TIME_SINCE_VISIT mtl_serial_numbers_temp.TIME_SINCE_VISIT%type;
5195 l_CYCLES_SINCE_VISIT mtl_serial_numbers_temp.CYCLES_SINCE_VISIT%type;
5196 l_TIME_SINCE_MARK mtl_serial_numbers_temp.TIME_SINCE_MARK%type;
5197 l_CYCLES_SINCE_MARK mtl_serial_numbers_temp.CYCLES_SINCE_MARK%type;
5198 l_NUMBER_OF_REPAIRS mtl_serial_numbers_temp.NUMBER_OF_REPAIRS%type;
5199
5200
5201 l_sys_date date := NULL;
5202 l_date2 date := NULL;
5203 l_date23 date := NULL;
5204 l_date24 date := NULL;
5205 l_date25 date := NULL;
5206 l_date26 date := NULL;
5207 l_date27 date := NULL;
5208 l_date28 date := NULL;
5209 l_date29 date := NULL;
5210 l_date30 date := NULL;
5211 l_date31 date := NULL;
5212 l_date32 date := NULL;
5213
5214 l_num33 NUMBER := NULL;
5215 l_num34 NUMBER := NULL;
5216 l_num35 NUMBER := NULL;
5217 l_num36 NUMBER := NULL;
5218 l_num37 NUMBER := NULL;
5219 l_num38 NUMBER := NULL;
5220 l_num39 NUMBER := NULL;
5221 l_num40 NUMBER := NULL;
5222 l_num41 NUMBER := NULL;
5223 l_num42 NUMBER := NULL;
5224
5225 cursor serial_temp_csr(p_transaction_temp_id NUMBER) is
5226 select SERIAL_ATTRIBUTE_CATEGORY
5227 , fnd_date.date_to_canonical(ORIGINATION_DATE )
5228 , C_ATTRIBUTE1
5229 , C_ATTRIBUTE2
5230 , C_ATTRIBUTE3
5231 , C_ATTRIBUTE4
5232 , C_ATTRIBUTE5
5233 , C_ATTRIBUTE6
5234 , C_ATTRIBUTE7
5235 , C_ATTRIBUTE8
5236 , C_ATTRIBUTE9
5237 , C_ATTRIBUTE10
5238 , C_ATTRIBUTE11
5239 , C_ATTRIBUTE12
5240 , C_ATTRIBUTE13
5241 , C_ATTRIBUTE14
5242 , C_ATTRIBUTE15
5243 , C_ATTRIBUTE16
5244 , C_ATTRIBUTE17
5245 , C_ATTRIBUTE18
5246 , C_ATTRIBUTE19
5247 , C_ATTRIBUTE20
5248 , fnd_date.date_to_canonical(D_ATTRIBUTE1 )
5249 , fnd_date.date_to_canonical(D_ATTRIBUTE2 )
5250 , fnd_date.date_to_canonical(D_ATTRIBUTE3 )
5251 , fnd_date.date_to_canonical(D_ATTRIBUTE4 )
5252 , fnd_date.date_to_canonical(D_ATTRIBUTE5 )
5253 , fnd_date.date_to_canonical(D_ATTRIBUTE6 )
5254 , fnd_date.date_to_canonical(D_ATTRIBUTE7)
5255 , fnd_date.date_to_canonical(D_ATTRIBUTE8)
5256 , fnd_date.date_to_canonical( D_ATTRIBUTE9)
5257 , fnd_date.date_to_canonical(D_ATTRIBUTE10 )
5258 , to_char(N_ATTRIBUTE1 )
5259 , to_char(N_ATTRIBUTE2)
5260 , to_char(N_ATTRIBUTE3)
5261 , to_char(N_ATTRIBUTE4)
5262 , to_char(N_ATTRIBUTE5)
5263 , to_char(N_ATTRIBUTE6)
5264 , to_char(N_ATTRIBUTE7)
5265 , to_char(N_ATTRIBUTE8)
5266 , to_char( N_ATTRIBUTE9)
5267 , to_char(N_ATTRIBUTE10)
5268 , STATUS_ID
5269 , TERRITORY_CODE
5270 , TIME_SINCE_NEW
5271 , CYCLES_SINCE_NEW
5272 , TIME_SINCE_OVERHAUL
5273 , CYCLES_SINCE_OVERHAUL
5274 , TIME_SINCE_REPAIR
5275 , CYCLES_SINCE_REPAIR
5276 , TIME_SINCE_VISIT
5277 , CYCLES_SINCE_VISIT
5278 , TIME_SINCE_MARK
5279 , CYCLES_SINCE_MARK
5280 , NUMBER_OF_REPAIRS
5281 from mtl_serial_numbers_temp
5282 where transaction_temp_id = p_transaction_temp_id
5283 and fm_serial_number = p_fm_serial_number and to_serial_number = p_to_serial_number;
5284 l_input_idx BINARY_INTEGER;
5285
5286 l_fm_serial_number VARCHAR2(30) := lpad(p_fm_serial_number, 30);
5287 l_to_serial_number VARCHAR2(30) := lpad(p_to_serial_number, 30);
5288 l_wms_installed BOOLEAN;
5289 l_debug NUMBER := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
5290 BEGIN
5291 IF (l_debug = 1) THEN
5292 invtrace('Inside InsertRangeUnitTrx');
5293 invtrace('l_fm_serial_number is ' || l_fm_serial_number);
5294 invtrace('l_to_serial_number is ' || l_to_serial_number);
5295 END IF;
5296
5297 --Bug# 6825191, Commenting out the code below.
5298 --It is safe to comment the following code because
5299 -- 1. variables G_first_row_of_trx, G_first_row_trx_tmp_id are
5300 -- not referenced anytime later.
5301 -- 2. having this code introduces two problems
5302 -- a. It inserts MUT only for the first MSNT in multiple MSNT scenario.
5303 -- b. It does not insert MUT's for receipt side in transfer transaction flows.
5304 /*
5305 IF ( G_first_row_of_trx ) THEN
5306 IF (l_debug = 1) THEN
5307 invtrace('setting G_first_row_of_trx');
5308 END IF;
5309
5310 G_first_row_of_trx := FALSE;
5311 G_first_row_trx_tmp_id := p_transaction_temp_id ;
5312 IF (l_debug = 1) THEN
5313 invtrace('G_first_row_trx_tmp_id = ' || G_first_row_trx_tmp_id);
5314 END IF;
5315 ELSE
5316 IF ( p_transaction_temp_id <> g_first_row_trx_tmp_id ) THEN
5317 g_first_row_trx_tmp_id := p_transaction_temp_id;
5318 ELSE
5319 x_return_status := FND_API.G_RET_STS_SUCCESS;
5320 RETURN;
5321 END IF;
5322 END IF;
5323 */
5324 -- Standard Start of API savepoint
5325 SAVEPOINT apiinsertserial_apipub;
5326
5327 -- Standard call to check for call compatibility.
5328 IF NOT fnd_api.compatible_api_call(l_api_version, p_api_version, l_api_name, g_pkg_name) THEN
5329 RAISE fnd_api.g_exc_unexpected_error;
5330 END IF;
5331 -- Initialize message list if p_init_msg_list is set to TRUE.
5332 IF fnd_api.to_boolean(p_init_msg_list) THEN
5333 fnd_msg_pub.initialize;
5334 END IF;
5335
5336 -- Initialize API return status to success
5337
5338 /**IF (p_transaction_action_id = 3 AND g_firstscan = FALSE) THEN
5339 x_return_status := fnd_api.g_ret_sts_success;
5340 ELSE**/
5341 x_return_status := fnd_api.g_ret_sts_success;
5342 l_wms_installed :=
5343 wms_install.check_install(
5344 x_return_status => l_return_status
5345 , x_msg_count => l_msg_count
5346 , x_msg_data => l_msg_data
5347 , p_organization_id => NULL --p_organization_id
5348 );
5349
5350 IF (p_transaction_temp_id IS NOT NULL) THEN
5351 IF (l_debug = 1) THEN
5352 invtrace('p_transaction_temp_id is notnull');
5353 END IF;
5354
5355 OPEN serial_temp_csr(p_transaction_temp_id);
5356
5357 populateattributescolumn();
5358
5359 FETCH serial_temp_csr
5360 INTO g_serial_attributes_tbl(1).column_value
5361 , g_serial_attributes_tbl(2).column_value
5362 , g_serial_attributes_tbl(3).column_value
5363 , g_serial_attributes_tbl(4).column_value
5364 , g_serial_attributes_tbl(5).column_value
5365 , g_serial_attributes_tbl(6).column_value
5366 , g_serial_attributes_tbl(7).column_value
5367 , g_serial_attributes_tbl(8).column_value
5368 , g_serial_attributes_tbl(9).column_value
5369 , g_serial_attributes_tbl(10).column_value
5370 , g_serial_attributes_tbl(11).column_value
5371 , g_serial_attributes_tbl(12).column_value
5372 , g_serial_attributes_tbl(13).column_value
5373 , g_serial_attributes_tbl(14).column_value
5374 , g_serial_attributes_tbl(15).column_value
5375 , g_serial_attributes_tbl(16).column_value
5376 , g_serial_attributes_tbl(17).column_value
5377 , g_serial_attributes_tbl(18).column_value
5378 , g_serial_attributes_tbl(19).column_value
5379 , g_serial_attributes_tbl(20).column_value
5380 , g_serial_attributes_tbl(21).column_value
5381 , g_serial_attributes_tbl(22).column_value
5382 , g_serial_attributes_tbl(23).column_value
5383 , g_serial_attributes_tbl(24).column_value
5384 , g_serial_attributes_tbl(25).column_value
5385 , g_serial_attributes_tbl(26).column_value
5386 , g_serial_attributes_tbl(27).column_value
5387 , g_serial_attributes_tbl(28).column_value
5388 , g_serial_attributes_tbl(29).column_value
5389 , g_serial_attributes_tbl(30).column_value
5390 , g_serial_attributes_tbl(31).column_value
5391 , g_serial_attributes_tbl(32).column_value
5392 , g_serial_attributes_tbl(33).column_value
5393 , g_serial_attributes_tbl(34).column_value
5394 , g_serial_attributes_tbl(35).column_value
5395 , g_serial_attributes_tbl(36).column_value
5396 , g_serial_attributes_tbl(37).column_value
5397 , g_serial_attributes_tbl(38).column_value
5398 , g_serial_attributes_tbl(39).column_value
5399 , g_serial_attributes_tbl(40).column_value
5400 , g_serial_attributes_tbl(41).column_value
5401 , g_serial_attributes_tbl(42).column_value
5402 , g_serial_attributes_tbl(43).column_value
5403 , g_serial_attributes_tbl(44).column_value
5404 , l_TIME_SINCE_NEW, l_CYCLES_SINCE_NEW, l_TIME_SINCE_OVERHAUL, l_CYCLES_SINCE_OVERHAUL,
5405 l_TIME_SINCE_REPAIR, l_CYCLES_SINCE_REPAIR , l_TIME_SINCE_VISIT, l_CYCLES_SINCE_VISIT,
5406 l_TIME_SINCE_MARK, l_CYCLES_SINCE_MARK, l_NUMBER_OF_REPAIRS;
5407
5408 CLOSE serial_temp_csr;
5409
5410 l_input_idx := 0;
5411
5412 IF l_wms_installed THEN
5413 FOR x IN 1 .. 44 LOOP
5414 IF (g_serial_attributes_tbl(x).column_value IS NOT NULL) THEN
5415 l_input_idx := l_input_idx + 1;
5416 l_attributes_in(l_input_idx).column_name := g_serial_attributes_tbl(x).column_name;
5417 l_attributes_in(l_input_idx).column_type := g_serial_attributes_tbl(x).column_type;
5418 l_attributes_in(l_input_idx).column_value := g_serial_attributes_tbl(x).column_value;
5419 END IF;
5420 END LOOP;
5421 END IF; -- if wms_installed is true
5422 END IF; -- if transaction_temp_id is not null
5423
5424 ----------------------------------------------------------
5425 -- call inv_lot_sel_attr.get_default to get the default value
5426 -- of the lot attributes
5427 ---------------------------------------------------------
5428 IF l_wms_installed THEN
5429 inv_lot_sel_attr.get_default(
5430 x_attributes_default => l_attributes_default
5431 , x_attributes_default_count => l_attributes_default_count
5432 , x_return_status => l_return_status
5433 , x_msg_count => l_msg_count
5434 , x_msg_data => l_msg_data
5435 , p_table_name => 'MTL_SERIAL_NUMBERS'
5436 , p_attributes_name => 'Serial Attributes'
5437 , p_inventory_item_id => p_inventory_item_id
5438 , p_organization_id => p_organization_id
5439 , p_lot_serial_number => p_fm_serial_number
5440 , p_attributes => l_attributes_in
5441 );
5442
5443 IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
5444 x_return_status := l_return_status;
5445 RAISE fnd_api.g_exc_unexpected_error;
5446 END IF;
5447
5448 /* Get the default attribs only when there is no value on the form (in MSNT).
5449 * In case the user changes the context and the attributes while recieving,
5450 * they would be lost if we get the default context again--2756040
5451 */
5452 IF (l_attributes_default_count > 0
5453 AND(g_serial_attributes_tbl(1).column_value = NULL)) THEN
5454 FOR i IN 1 .. l_attributes_default_count LOOP
5455 FOR j IN 1 .. g_serial_attributes_tbl.COUNT LOOP
5456 IF (l_attributes_default(i).column_name = g_serial_attributes_tbl(j).column_name) THEN
5457 g_serial_attributes_tbl(j).column_value := l_attributes_default(i).column_value;
5458 END IF;
5459 END LOOP;
5460 END LOOP;
5461 END IF;
5462 END IF; -- if wms install is true
5463
5464 l_userid := fnd_global.user_id;
5465 l_loginid := fnd_global.login_id;
5466 l_sys_date := SYSDATE;
5467
5468 IF (p_transaction_action_id = 3 AND g_firstscan = FALSE) THEN
5469 IF (l_debug = 1) THEN
5470 invtrace('p_transaction_action_id = 3 and g_firstscan is false');
5471 END IF;
5472 INSERT INTO mtl_unit_transactions
5473 (
5474 transaction_id
5475 , last_update_date
5476 , last_updated_by
5477 , creation_date
5478 , created_by
5479 , last_update_login
5480 , serial_number
5481 , inventory_item_id
5482 , organization_id
5483 , subinventory_code
5484 , locator_id
5485 , transaction_date
5486 , transaction_source_id
5487 , transaction_source_type_id
5488 , transaction_source_name
5489 , receipt_issue_type
5490 , customer_id
5491 , ship_id
5492 , serial_attribute_category
5493 , origination_date
5494 , c_attribute1
5495 , c_attribute2
5496 , c_attribute3
5497 , c_attribute4
5498 , c_attribute5
5499 , c_attribute6
5500 , c_attribute7
5501 , c_attribute8
5502 , c_attribute9
5503 , c_attribute10
5504 , c_attribute11
5505 , c_attribute12
5506 , c_attribute13
5507 , c_attribute14
5508 , c_attribute15
5509 , c_attribute16
5510 , c_attribute17
5511 , c_attribute18
5512 , c_attribute19
5513 , c_attribute20
5514 , d_attribute1
5515 , d_attribute2
5516 , d_attribute3
5517 , d_attribute4
5518 , d_attribute5
5519 , d_attribute6
5520 , d_attribute7
5521 , d_attribute8
5522 , d_attribute9
5523 , d_attribute10
5524 , n_attribute1
5525 , n_attribute2
5526 , n_attribute3
5527 , n_attribute4
5528 , n_attribute5
5529 , n_attribute6
5530 , n_attribute7
5531 , n_attribute8
5532 , n_attribute9
5533 , n_attribute10
5534 , status_id
5535 , territory_code
5536 , time_since_new
5537 , cycles_since_new
5538 , time_since_overhaul
5539 , cycles_since_overhaul
5540 , time_since_repair
5541 , cycles_since_repair
5542 , time_since_visit
5543 , cycles_since_visit
5544 , time_since_mark
5545 , cycles_since_mark
5546 , number_of_repairs
5547 )
5548 SELECT p_transaction_id
5549 , l_sys_date
5550 , l_userid
5551 , msn.creation_date
5552 , msn.created_by
5553 , l_loginid
5554 , msn.serial_number
5555 , p_inventory_item_id
5556 , p_organization_id
5557 , p_subinventory_code
5558 , p_current_locator_id
5559 , p_transaction_date
5560 , p_txn_src_id
5561 , p_txn_src_type_id
5562 , p_txn_src_name
5563 , p_receipt_issue_type
5564 , p_customer_id
5565 , p_ship_id
5566 , msn.serial_attribute_category
5567 , msn.origination_date
5568 , msn.c_attribute1
5569 , msn.c_attribute2
5570 , msn.c_attribute3
5571 , msn.c_attribute4
5572 , msn.c_attribute5
5573 , msn.c_attribute6
5574 , msn.c_attribute7
5575 , msn.c_attribute8
5576 , msn.c_attribute9
5577 , msn.c_attribute10
5578 , msn.c_attribute11
5579 , msn.c_attribute12
5580 , msn.c_attribute13
5581 , msn.c_attribute14
5582 , msn.c_attribute15
5583 , msn.c_attribute16
5584 , msn.c_attribute17
5585 , msn.c_attribute18
5586 , msn.c_attribute19
5587 , msn.c_attribute20
5588 , msn.d_attribute1
5589 , msn.d_attribute2
5590 , msn.d_attribute3
5591 , msn.d_attribute4
5592 , msn.d_attribute5
5593 , msn.d_attribute6
5594 , msn.d_attribute7
5595 , msn.d_attribute8
5596 , msn.d_attribute9
5597 , msn.d_attribute10
5598 , msn.n_attribute1
5599 , msn.n_attribute2
5600 , msn.n_attribute3
5601 , msn.n_attribute4
5602 , msn.n_attribute5
5603 , msn.n_attribute6
5604 , msn.n_attribute7
5605 , msn.n_attribute8
5606 , msn.n_attribute9
5607 , msn.n_attribute10
5608 , msn.status_id
5609 , msn.territory_code
5610 , msn.time_since_new
5611 , msn.cycles_since_new
5612 , msn.time_since_overhaul
5613 , msn.cycles_since_overhaul
5614 , msn.time_since_repair
5615 , msn.cycles_since_repair
5616 , msn.time_since_visit
5617 , msn.cycles_since_visit
5618 , msn.time_since_mark
5619 , msn.cycles_since_mark
5620 , msn.number_of_repairs
5621 FROM mtl_serial_numbers msn
5622 WHERE msn.serial_number between p_fm_serial_number and p_to_serial_number
5623 AND msn.current_organization_id = p_organization_id
5624 AND msn.inventory_item_id = p_inventory_item_id;
5625 /* Bug 2207912 */
5626 /* The following not exists statement is commented out
5627 ** because this part of the statement gets executed
5628 ** only for ORG TRANSFER and for the delivery side of
5629 ** of transaction as firstscan is false now, before this
5630 ** insert statement gets executed the mtl_serial_number is
5631 ** table is already updated with the organization_id of the
5632 ** delivered org and status from the TM, so there will be an entry always exist
5633 ** ing for the where condition specified in the exists clasue
5634 ** for mtl_serial_number table
5635 ** So the insert statement will always fail.
5636 */
5637 --and not exists
5638 -- ( select NULL
5639 -- from mtl_serial_numbers sn
5640 -- where sn.serial_number = p_serial_number
5641 -- and sn.current_organization_id = p_organization_id
5642 -- and sn.inventory_item_id = p_inventory_item_id);
5643 ELSE
5644 IF (l_debug = 1) THEN
5645 invtrace('not org transfer');
5646 END IF;
5647 IF l_wms_installed THEN
5648 /** 2756040 - Populate Serial Attribute Category info when it is not
5649 ** a receiving transaction **/
5650 IF ((g_serial_attributes_tbl(1).column_value = NULL)
5651 OR(p_transaction_action_id NOT IN(12, 27, 31))) THEN
5652 inv_lot_sel_attr.get_context_code(g_serial_attributes_tbl(1).column_value, p_organization_id, p_inventory_item_id
5653 , 'Serial Attributes');
5654 END IF;
5655 ELSE
5656 g_serial_attributes_tbl(1).column_value := NULL;
5657 END IF;
5658
5659 l_date2 := fnd_date.canonical_to_date(g_serial_attributes_tbl(2).COLUMN_VALUE);
5660 l_date23 := fnd_date.canonical_to_date(g_serial_attributes_tbl(23).COLUMN_VALUE);
5661 l_date24 := fnd_date.canonical_to_date(g_serial_attributes_tbl(24).COLUMN_VALUE);
5662 l_date25 := fnd_date.canonical_to_date(g_serial_attributes_tbl(25).COLUMN_VALUE);
5663 l_date26 := fnd_date.canonical_to_date(g_serial_attributes_tbl(26).COLUMN_VALUE);
5664 l_date27 := fnd_date.canonical_to_date(g_serial_attributes_tbl(27).COLUMN_VALUE);
5665 l_date28 := fnd_date.canonical_to_date(g_serial_attributes_tbl(28).COLUMN_VALUE);
5666 l_date29 := fnd_date.canonical_to_date(g_serial_attributes_tbl(29).COLUMN_VALUE);
5667 l_date30 := fnd_date.canonical_to_date(g_serial_attributes_tbl(30).COLUMN_VALUE);
5668 l_date31 := fnd_date.canonical_to_date(g_serial_attributes_tbl(31).COLUMN_VALUE);
5669 l_date32 := fnd_date.canonical_to_date(g_serial_attributes_tbl(32).COLUMN_VALUE);
5670 l_num33 := to_number(g_serial_attributes_tbl(33).COLUMN_VALUE);
5671 l_num34 := to_number(g_serial_attributes_tbl(34).COLUMN_VALUE);
5672 l_num35 := to_number(g_serial_attributes_tbl(35).COLUMN_VALUE);
5673 l_num36 := to_number(g_serial_attributes_tbl(36).COLUMN_VALUE);
5674 l_num37 := to_number(g_serial_attributes_tbl(37).COLUMN_VALUE);
5675 l_num38 := to_number(g_serial_attributes_tbl(38).COLUMN_VALUE);
5676 l_num39 := to_number(g_serial_attributes_tbl(39).COLUMN_VALUE);
5677 l_num40 := to_number(g_serial_attributes_tbl(40).COLUMN_VALUE);
5678 l_num41 := to_number(g_serial_attributes_tbl(41).COLUMN_VALUE);
5679 l_num42 := to_number(g_serial_attributes_tbl(42).COLUMN_VALUE);
5680
5681 IF (p_transaction_temp_id > 0) THEN
5682 --Bug 2067223 paranthesis are added in the where clause
5683 -- of the select statement
5684
5685 -- Bug 3772309: Removing this sql as this is not being used
5686 -- anywhere. for performance reason.
5687 /*****
5688 SELECT count(*)
5689 into l_upd_count
5690 FROM mtl_serial_numbers msn, mtl_serial_numbers_temp msnt
5691 WHERE msnt.transaction_temp_id = p_transaction_temp_id
5692 AND lpad(msn.serial_number, 30) between lpad(msnt.fm_serial_number,30) AND LPAD(NVL(msnt.to_serial_number, msnt.fm_serial_number),30)
5693 AND Lpad(msnt.fm_serial_number,30) = l_fm_serial_number
5694 AND Lpad(msnt.to_serial_number,30) = l_to_serial_number;
5695 IF (l_debug = 1) THEN
5696 invtrace('l_upd_count = ' || l_upd_count);
5697 end if;
5698 ****/
5699 IF (l_debug = 1) THEN
5700 invtrace('insert into mut with tempid = ' ||
5701 p_transaction_temp_id);
5702 END IF;
5703 -- Bug 3772309: Making some changes to the insert statement as it does full
5704 -- tablescan on MSN.
5705 IF (p_to_serial_number IS NOT NULL AND p_to_serial_number <>
5706 p_fm_serial_number) THEN
5707 IF (l_debug = 1) THEN
5708 invtrace('inside to_serial different from from_serial.');
5709 invtrace('from serial =. ' || p_fm_serial_number);
5710 invtrace('to serial =. ' || p_to_serial_number);
5711 END IF;
5712
5713 INSERT INTO mtl_unit_transactions
5714 (
5715 transaction_id
5716 , last_update_date
5717 , last_updated_by
5718 , creation_date
5719 , created_by
5720 , last_update_login
5721 , serial_number
5722 , inventory_item_id
5723 , organization_id
5724 , subinventory_code
5725 , locator_id
5726 , transaction_date
5727 , transaction_source_id
5728 , transaction_source_type_id
5729 , transaction_source_name
5730 , receipt_issue_type
5731 , customer_id
5732 , ship_id
5733 , serial_attribute_category
5734 , origination_date
5735 , c_attribute1
5736 , c_attribute2
5737 , c_attribute3
5738 , c_attribute4
5739 , c_attribute5
5740 , c_attribute6
5741 , c_attribute7
5742 , c_attribute8
5743 , c_attribute9
5744 , c_attribute10
5745 , c_attribute11
5746 , c_attribute12
5747 , c_attribute13
5748 , c_attribute14
5749 , c_attribute15
5750 , c_attribute16
5751 , c_attribute17
5752 , c_attribute18
5753 , c_attribute19
5754 , c_attribute20
5755 , d_attribute1
5756 , d_attribute2
5757 , d_attribute3
5758 , d_attribute4
5759 , d_attribute5
5760 , d_attribute6
5761 , d_attribute7
5762 , d_attribute8
5763 , d_attribute9
5764 , d_attribute10
5765 , n_attribute1
5766 , n_attribute2
5767 , n_attribute3
5768 , n_attribute4
5769 , n_attribute5
5770 , n_attribute6
5771 , n_attribute7
5772 , n_attribute8
5773 , n_attribute9
5774 , n_attribute10
5775 , status_id
5776 , territory_code
5777 , time_since_new
5778 , cycles_since_new
5779 , time_since_overhaul
5780 , cycles_since_overhaul
5781 , time_since_repair
5782 , cycles_since_repair
5783 , time_since_visit
5784 , cycles_since_visit
5785 , time_since_mark
5786 , cycles_since_mark
5787 , number_of_repairs
5788 , product_code
5789 , product_transaction_id
5790 , attribute_category
5791 , attribute1
5792 , attribute2
5793 , attribute3
5794 , attribute4
5795 , attribute5
5796 , attribute6
5797 , attribute7
5798 , attribute8
5799 , attribute9
5800 , attribute10
5801 , attribute11
5802 , attribute12
5803 , attribute13
5804 , attribute14
5805 , attribute15
5806 )
5807 SELECT p_transaction_id
5808 , l_sys_date
5809 , l_userid
5810 , l_sys_date
5811 , l_userid
5812 , l_loginid
5813 , msn.serial_number
5814 , p_inventory_item_id
5815 , p_organization_id
5816 , p_subinventory_code
5817 , p_current_locator_id
5818 , p_transaction_date
5819 , p_txn_src_id
5820 , p_txn_src_type_id
5821 , p_txn_src_name
5822 , p_receipt_issue_type
5823 , p_customer_id
5824 , p_ship_id
5825 , g_serial_attributes_tbl(1).column_value
5826 , l_date2
5827 , g_serial_attributes_tbl(3).column_value
5828 , g_serial_attributes_tbl(4).column_value
5829 , g_serial_attributes_tbl(5).column_value
5830 , g_serial_attributes_tbl(6).column_value
5831 , g_serial_attributes_tbl(7).column_value
5832 , g_serial_attributes_tbl(8).column_value
5833 , g_serial_attributes_tbl(9).column_value
5834 , g_serial_attributes_tbl(10).column_value
5835 , g_serial_attributes_tbl(11).column_value
5836 , g_serial_attributes_tbl(12).column_value
5837 , g_serial_attributes_tbl(13).column_value
5838 , g_serial_attributes_tbl(14).column_value
5839 , g_serial_attributes_tbl(15).column_value
5840 , g_serial_attributes_tbl(16).column_value
5841 , g_serial_attributes_tbl(17).column_value
5842 , g_serial_attributes_tbl(18).column_value
5843 , g_serial_attributes_tbl(19).column_value
5844 , g_serial_attributes_tbl(20).column_value
5845 , g_serial_attributes_tbl(21).column_value
5846 , g_serial_attributes_tbl(22).column_value
5847 , l_date23
5848 , l_date24
5849 , l_date25
5850 , l_date26
5851 , l_date27
5852 , l_date28
5853 , l_date29
5854 , l_date30
5855 , l_date31
5856 , l_date32
5857 , l_num33
5858 , l_num34
5859 , l_num35
5860 , l_num36
5861 , l_num37
5862 , l_num38
5863 , l_num39
5864 , l_num40
5865 , l_num41
5866 , l_num42
5867 , p_status_id
5868 , g_serial_attributes_tbl(44).column_value
5869 , l_time_since_new
5870 , l_cycles_since_new
5871 , l_time_since_overhaul
5872 , l_cycles_since_overhaul
5873 , l_time_since_repair
5874 , l_cycles_since_repair
5875 , l_time_since_visit
5876 , l_cycles_since_visit
5877 , l_time_since_mark
5878 , l_cycles_since_mark
5879 , l_number_of_repairs
5880 , msnt.product_code
5881 , msnt.product_transaction_id
5882 , msnt.attribute_category
5883 , msnt.attribute1
5884 , msnt.attribute2
5885 , msnt.attribute3
5886 , msnt.attribute4
5887 , msnt.attribute5
5888 , msnt.attribute6
5889 , msnt.attribute7
5890 , msnt.attribute8
5891 , msnt.attribute9
5892 , msnt.attribute10
5893 , msnt.attribute11
5894 , msnt.attribute12
5895 , msnt.attribute13
5896 , msnt.attribute14
5897 , msnt.attribute15
5898 FROM mtl_serial_numbers_temp msnt, mtl_serial_numbers msn
5899 WHERE msnt.transaction_temp_id = p_transaction_temp_id
5900 AND msn.current_organization_id = p_organization_id
5901 AND msn.inventory_item_id = p_inventory_item_id
5902 AND lpad(msn.serial_number,30) between lpad(msnt.fm_serial_number,30) AND lpad(msnt.to_serial_number,30)
5903 AND lpad(msnt.fm_serial_number,30) = l_fm_serial_number
5904 AND lpad(msnt.to_serial_number,30) = l_to_serial_number;
5905 /* Bug 3622025 -- Added the LPAD function in the above where clause */
5906
5907 l_upd_count := SQL%ROWCOUNT;
5908 IF (l_debug = 1) THEN
5909 invtrace('l_upd_count = ' || l_upd_count);
5910 END IF;
5911
5912 ELSE -- to_serial is either null or is the same as from serial
5913 IF (l_debug = 1) THEN
5914 invtrace('inside to_serial is either null or the same.');
5915 invtrace('from serial =. ' || p_fm_serial_number);
5916 invtrace('to serial =. ' || p_to_serial_number);
5917 END IF;
5918
5919 INSERT INTO mtl_unit_transactions
5920 (
5921 transaction_id
5922 , last_update_date
5923 , last_updated_by
5924 , creation_date
5925 , created_by
5926 , last_update_login
5927 , serial_number
5928 , inventory_item_id
5929 , organization_id
5930 , subinventory_code
5931 , locator_id
5932 , transaction_date
5933 , transaction_source_id
5934 , transaction_source_type_id
5935 , transaction_source_name
5936 , receipt_issue_type
5937 , customer_id
5938 , ship_id
5939 , serial_attribute_category
5940 , origination_date
5941 , c_attribute1
5942 , c_attribute2
5943 , c_attribute3
5944 , c_attribute4
5945 , c_attribute5
5946 , c_attribute6
5947 , c_attribute7
5948 , c_attribute8
5949 , c_attribute9
5950 , c_attribute10
5951 , c_attribute11
5952 , c_attribute12
5953 , c_attribute13
5954 , c_attribute14
5955 , c_attribute15
5956 , c_attribute16
5957 , c_attribute17
5958 , c_attribute18
5959 , c_attribute19
5960 , c_attribute20
5961 , d_attribute1
5962 , d_attribute2
5963 , d_attribute3
5964 , d_attribute4
5965 , d_attribute5
5966 , d_attribute6
5967 , d_attribute7
5968 , d_attribute8
5969 , d_attribute9
5970 , d_attribute10
5971 , n_attribute1
5972 , n_attribute2
5973 , n_attribute3
5974 , n_attribute4
5975 , n_attribute5
5976 , n_attribute6
5977 , n_attribute7
5978 , n_attribute8
5979 , n_attribute9
5980 , n_attribute10
5981 , status_id
5982 , territory_code
5983 , time_since_new
5984 , cycles_since_new
5985 , time_since_overhaul
5986 , cycles_since_overhaul
5987 , time_since_repair
5988 , cycles_since_repair
5989 , time_since_visit
5990 , cycles_since_visit
5991 , time_since_mark
5992 , cycles_since_mark
5993 , number_of_repairs
5994 , product_code
5995 , product_transaction_id
5996 , attribute_category
5997 , attribute1
5998 , attribute2
5999 , attribute3
6000 , attribute4
6001 , attribute5
6002 , attribute6
6003 , attribute7
6004 , attribute8
6005 , attribute9
6006 , attribute10
6007 , attribute11
6008 , attribute12
6009 , attribute13
6010 , attribute14
6011 , attribute15
6012 )
6013 SELECT p_transaction_id
6014 , l_sys_date
6015 , l_userid
6016 , l_sys_date
6017 , l_userid
6018 , l_loginid
6019 , msn.serial_number
6020 , p_inventory_item_id
6021 , p_organization_id
6022 , p_subinventory_code
6023 , p_current_locator_id
6024 , p_transaction_date
6025 , p_txn_src_id
6026 , p_txn_src_type_id
6027 , p_txn_src_name
6028 , p_receipt_issue_type
6029 , p_customer_id
6030 , p_ship_id
6031 , g_serial_attributes_tbl(1).column_value
6032 , l_date2
6033 , g_serial_attributes_tbl(3).column_value
6034 , g_serial_attributes_tbl(4).column_value
6035 , g_serial_attributes_tbl(5).column_value
6036 , g_serial_attributes_tbl(6).column_value
6037 , g_serial_attributes_tbl(7).column_value
6038 , g_serial_attributes_tbl(8).column_value
6039 , g_serial_attributes_tbl(9).column_value
6040 , g_serial_attributes_tbl(10).column_value
6041 , g_serial_attributes_tbl(11).column_value
6042 , g_serial_attributes_tbl(12).column_value
6043 , g_serial_attributes_tbl(13).column_value
6044 , g_serial_attributes_tbl(14).column_value
6045 , g_serial_attributes_tbl(15).column_value
6046 , g_serial_attributes_tbl(16).column_value
6047 , g_serial_attributes_tbl(17).column_value
6048 , g_serial_attributes_tbl(18).column_value
6049 , g_serial_attributes_tbl(19).column_value
6050 , g_serial_attributes_tbl(20).column_value
6051 , g_serial_attributes_tbl(21).column_value
6052 , g_serial_attributes_tbl(22).column_value
6053 , l_date23
6054 , l_date24
6055 , l_date25
6056 , l_date26
6057 , l_date27
6058 , l_date28
6059 , l_date29
6060 , l_date30
6061 , l_date31
6062 , l_date32
6063 , l_num33
6064 , l_num34
6065 , l_num35
6066 , l_num36
6067 , l_num37
6068 , l_num38
6069 , l_num39
6070 , l_num40
6071 , l_num41
6072 , l_num42
6073 , p_status_id
6074 , g_serial_attributes_tbl(44).column_value
6075 , l_time_since_new
6076 , l_cycles_since_new
6077 , l_time_since_overhaul
6078 , l_cycles_since_overhaul
6079 , l_time_since_repair
6080 , l_cycles_since_repair
6081 , l_time_since_visit
6082 , l_cycles_since_visit
6083 , l_time_since_mark
6084 , l_cycles_since_mark
6085 , l_number_of_repairs
6086 , msnt.product_code
6087 , msnt.product_transaction_id
6088 , msnt.attribute_category
6089 , msnt.attribute1
6090 , msnt.attribute2
6091 , msnt.attribute3
6092 , msnt.attribute4
6093 , msnt.attribute5
6094 , msnt.attribute6
6095 , msnt.attribute7
6096 , msnt.attribute8
6097 , msnt.attribute9
6098 , msnt.attribute10
6099 , msnt.attribute11
6100 , msnt.attribute12
6101 , msnt.attribute13
6102 , msnt.attribute14
6103 , msnt.attribute15
6104 FROM mtl_serial_numbers_temp msnt, mtl_serial_numbers msn
6105 WHERE msnt.transaction_temp_id = p_transaction_temp_id
6106 AND msn.current_organization_id = p_organization_id
6107 AND msn.inventory_item_id = p_inventory_item_id
6108 AND lpad(msn.serial_number,30) = lpad(msnt.fm_serial_number,30)
6109 AND lpad(msnt.fm_serial_number,30) = l_fm_serial_number;
6110 /* Bug 3622025 -- Added the LPAD function in the above where clause */
6111 END IF;
6112
6113 -- End changes to bug 3772309
6114 ELSE
6115 IF (l_debug = 1) THEN
6116 invtrace('no transaction temp id');
6117 END IF;
6118
6119 INSERT INTO mtl_unit_transactions
6120 (
6121 transaction_id
6122 , last_update_date
6123 , last_updated_by
6124 , creation_date
6125 , created_by
6126 , last_update_login
6127 , serial_number
6128 , inventory_item_id
6129 , organization_id
6130 , subinventory_code
6131 , locator_id
6132 , transaction_date
6133 , transaction_source_id
6134 , transaction_source_type_id
6135 , transaction_source_name
6136 , receipt_issue_type
6137 , customer_id
6138 , ship_id
6139 , serial_attribute_category
6140 , origination_date
6141 , c_attribute1
6142 , c_attribute2
6143 , c_attribute3
6144 , c_attribute4
6145 , c_attribute5
6146 , c_attribute6
6147 , c_attribute7
6148 , c_attribute8
6149 , c_attribute9
6150 , c_attribute10
6151 , c_attribute11
6152 , c_attribute12
6153 , c_attribute13
6154 , c_attribute14
6155 , c_attribute15
6156 , c_attribute16
6157 , c_attribute17
6158 , c_attribute18
6159 , c_attribute19
6160 , c_attribute20
6161 , d_attribute1
6162 , d_attribute2
6163 , d_attribute3
6164 , d_attribute4
6165 , d_attribute5
6166 , d_attribute6
6167 , d_attribute7
6168 , d_attribute8
6169 , d_attribute9
6170 , d_attribute10
6171 , n_attribute1
6172 , n_attribute2
6173 , n_attribute3
6174 , n_attribute4
6175 , n_attribute5
6176 , n_attribute6
6177 , n_attribute7
6178 , n_attribute8
6179 , n_attribute9
6180 , n_attribute10
6181 , status_id
6182 , territory_code
6183 , time_since_new
6184 , cycles_since_new
6185 , time_since_overhaul
6186 , cycles_since_overhaul
6187 , time_since_repair
6188 , cycles_since_repair
6189 , time_since_visit
6190 , cycles_since_visit
6191 , time_since_mark
6192 , cycles_since_mark
6193 , number_of_repairs
6194 )
6195 SELECT p_transaction_id
6196 , SYSDATE
6197 , l_userid
6198 , SYSDATE
6199 , l_userid
6200 , l_loginid
6201 , msn.serial_number
6202 , p_inventory_item_id
6203 , p_organization_id
6204 , p_subinventory_code
6205 , p_current_locator_id
6206 , p_transaction_date
6207 , p_txn_src_id
6208 , p_txn_src_type_id
6209 , p_txn_src_name
6210 , p_receipt_issue_type
6211 , p_customer_id
6212 , p_ship_id
6213 , g_serial_attributes_tbl(1).column_value
6214 , l_date2
6215 , g_serial_attributes_tbl(3).column_value
6216 , g_serial_attributes_tbl(4).column_value
6217 , g_serial_attributes_tbl(5).column_value
6218 , g_serial_attributes_tbl(6).column_value
6219 , g_serial_attributes_tbl(7).column_value
6220 , g_serial_attributes_tbl(8).column_value
6221 , g_serial_attributes_tbl(9).column_value
6222 , g_serial_attributes_tbl(10).column_value
6223 , g_serial_attributes_tbl(11).column_value
6224 , g_serial_attributes_tbl(12).column_value
6225 , g_serial_attributes_tbl(13).column_value
6226 , g_serial_attributes_tbl(14).column_value
6227 , g_serial_attributes_tbl(15).column_value
6228 , g_serial_attributes_tbl(16).column_value
6229 , g_serial_attributes_tbl(17).column_value
6230 , g_serial_attributes_tbl(18).column_value
6231 , g_serial_attributes_tbl(19).column_value
6232 , g_serial_attributes_tbl(20).column_value
6233 , g_serial_attributes_tbl(21).column_value
6234 , g_serial_attributes_tbl(22).column_value
6235 , l_date23
6236 , l_date24
6237 , l_date25
6238 , l_date26
6239 , l_date27
6240 , l_date28
6241 , l_date29
6242 , l_date30
6243 , l_date31
6244 , l_date32
6245 , l_num33
6246 , l_num34
6247 , l_num35
6248 , l_num36
6249 , l_num37
6250 , l_num38
6251 , l_num39
6252 , l_num40
6253 , l_num41
6254 , l_num42
6255 , p_status_id
6256 , g_serial_attributes_tbl(44).column_value
6257 , l_time_since_new
6258 , l_cycles_since_new
6259 , l_time_since_overhaul
6260 , l_cycles_since_overhaul
6261 , l_time_since_repair
6262 , l_cycles_since_repair
6263 , l_time_since_visit
6264 , l_cycles_since_visit
6265 , l_time_since_mark
6266 , l_cycles_since_mark
6267 , l_number_of_repairs
6268 FROM mtl_serial_numbers msn
6269 WHERE inventory_item_id = p_inventory_item_id
6270 AND serial_number between p_fm_serial_number AND p_to_serial_number;
6271 END IF;
6272 END IF;
6273
6274 /*bug 2756040 Update MSN also with values from MSNT in case of
6275 receipt transaction or intransit receipt txn
6276 (transaction_action_id = 12 or 27) */
6277 IF (p_transaction_action_id IN(12, 27, 31)) THEN
6278 IF (l_debug = 1) THEN
6279 invtrace('transaction_action_id = ' || p_transaction_action_id
6280 || ' org _id ' || p_organization_id || 'item ' ||
6281 p_inventory_item_id);
6282 END IF;
6283 BEGIN
6284 UPDATE mtl_serial_numbers
6285 SET serial_attribute_category = g_serial_attributes_tbl(1).column_value
6286 , origination_date = l_date2
6287 , c_attribute1 = g_serial_attributes_tbl(3).column_value
6288 , c_attribute2 = g_serial_attributes_tbl(4).column_value
6289 , c_attribute3 = g_serial_attributes_tbl(5).column_value
6290 , c_attribute4 = g_serial_attributes_tbl(6).column_value
6291 , c_attribute5 = g_serial_attributes_tbl(7).column_value
6292 , c_attribute6 = g_serial_attributes_tbl(8).column_value
6293 , c_attribute7 = g_serial_attributes_tbl(9).column_value
6294 , c_attribute8 = g_serial_attributes_tbl(10).column_value
6295 , c_attribute9 = g_serial_attributes_tbl(11).column_value
6296 , c_attribute10 = g_serial_attributes_tbl(12).column_value
6297 , c_attribute11 = g_serial_attributes_tbl(13).column_value
6298 , c_attribute12 = g_serial_attributes_tbl(14).column_value
6299 , c_attribute13 = g_serial_attributes_tbl(15).column_value
6300 , c_attribute14 = g_serial_attributes_tbl(16).column_value
6301 , c_attribute15 = g_serial_attributes_tbl(17).column_value
6302 , c_attribute16 = g_serial_attributes_tbl(18).column_value
6303 , c_attribute17 = g_serial_attributes_tbl(19).column_value
6304 , c_attribute18 = g_serial_attributes_tbl(20).column_value
6305 , c_attribute19 = g_serial_attributes_tbl(21).column_value
6306 , c_attribute20 = g_serial_attributes_tbl(22).column_value
6307 , d_attribute1 = l_date23
6308 , d_attribute2 = l_date24
6309 , d_attribute3 = l_date25
6310 , d_attribute4 = l_date26
6311 , d_attribute5 = l_date27
6312 , d_attribute6 = l_date28
6313 , d_attribute7 = l_date29
6314 , d_attribute8 = l_date30
6315 , d_attribute9 = l_date31
6316 , d_attribute10 = l_date32
6317 , n_attribute1 = l_num33
6318 , n_attribute2 = l_num34
6319 , n_attribute3 = l_num35
6320 , n_attribute4 = l_num36
6321 , n_attribute5 = l_num37
6322 , n_attribute6 = l_num38
6323 , n_attribute7 = l_num39
6324 , n_attribute8 = l_num40
6325 , n_attribute9 = l_num41
6326 , n_attribute10 = l_num42
6327 WHERE serial_number between p_fm_serial_number and p_to_serial_number
6328 AND inventory_item_id = p_inventory_item_id
6329 AND current_organization_id = p_organization_id;
6330
6331 IF (l_debug = 1) THEN
6332 invtrace('updating MSN with values ');
6333 invtrace('serial_attribute_category ' || g_serial_attributes_tbl(1).column_value);
6334 invtrace('origination_date ' || g_serial_attributes_tbl(2).column_value);
6335 invtrace(' C_ATTRIBUTE1 = ' || g_serial_attributes_tbl(3).column_value);
6336 invtrace('C_ATTRIBUTE2 = ' || g_serial_attributes_tbl(4).column_value);
6337 invtrace('C_ATTRIBUTE3 = ' || g_serial_attributes_tbl(5).column_value);
6338 invtrace('C_ATTRIBUTE4 = ' || g_serial_attributes_tbl(6).column_value);
6339 invtrace('C_ATTRIBUTE5 = ' || g_serial_attributes_tbl(7).column_value);
6340 invtrace('C_ATTRIBUTE6 = ' || g_serial_attributes_tbl(8).column_value);
6341 invtrace('C_ATTRIBUTE7 = ' || g_serial_attributes_tbl(9).column_value);
6342 invtrace('C_ATTRIBUTE8 = ' || g_serial_attributes_tbl(10).column_value);
6343 invtrace('C_ATTRIBUTE9 = ' || g_serial_attributes_tbl(11).column_value);
6344 invtrace('C_ATTRIBUTE10 = ' || g_serial_attributes_tbl(12).column_value);
6345 invtrace('C_ATTRIBUTE11 = ' || g_serial_attributes_tbl(13).column_value);
6346 invtrace('C_ATTRIBUTE12 = ' || g_serial_attributes_tbl(14).column_value);
6347 invtrace('C_ATTRIBUTE13 = ' || g_serial_attributes_tbl(15).column_value);
6348 invtrace('C_ATTRIBUTE14 = ' || g_serial_attributes_tbl(16).column_value);
6349 invtrace('C_ATTRIBUTE15 = ' || g_serial_attributes_tbl(17).column_value);
6350 invtrace('C_ATTRIBUTE16 = ' || g_serial_attributes_tbl(18).column_value);
6351 invtrace('C_ATTRIBUTE17 = ' || g_serial_attributes_tbl(19).column_value);
6352 invtrace('C_ATTRIBUTE18 = ' || g_serial_attributes_tbl(20).column_value);
6353 invtrace('C_ATTRIBUTE19 = ' || g_serial_attributes_tbl(21).column_value);
6354 invtrace('C_ATTRIBUTE20 = ' || g_serial_attributes_tbl(22).column_value);
6355 invtrace('D_ATTRIBUTE1 = ' || g_serial_attributes_tbl(23).column_value);
6356 invtrace('D_ATTRIBUTE2 = ' || g_serial_attributes_tbl(24).column_value);
6357 invtrace('D_ATTRIBUTE3 = ' || g_serial_attributes_tbl(25).column_value);
6358 invtrace('D_ATTRIBUTE4 = ' || g_serial_attributes_tbl(26).column_value);
6359 invtrace('D_ATTRIBUTE5 = ' || g_serial_attributes_tbl(27).column_value);
6360 invtrace('D_ATTRIBUTE6 = ' || g_serial_attributes_tbl(28).column_value);
6361 invtrace('D_ATTRIBUTE7 = ' || g_serial_attributes_tbl(29).column_value);
6362 invtrace('D_ATTRIBUTE8 = ' || g_serial_attributes_tbl(30).column_value);
6363 invtrace('D_ATTRIBUTE9 = ' || g_serial_attributes_tbl(31).column_value);
6364 invtrace('D_ATTRIBUTE10 = ' || g_serial_attributes_tbl(32).column_value);
6365 invtrace('N_ATTRIBUTE1 = ' || g_serial_attributes_tbl(33).column_value);
6366 invtrace('N_ATTRIBUTE2 = ' || g_serial_attributes_tbl(34).column_value);
6367 invtrace('N_ATTRIBUTE3 = ' || g_serial_attributes_tbl(35).column_value);
6368 invtrace('N_ATTRIBUTE4 = ' || g_serial_attributes_tbl(36).column_value);
6369 invtrace('N_ATTRIBUTE5 = ' || g_serial_attributes_tbl(37).column_value);
6370 invtrace('N_ATTRIBUTE6 = ' || g_serial_attributes_tbl(38).column_value);
6371 invtrace('N_ATTRIBUTE7 = ' || g_serial_attributes_tbl(39).column_value);
6372 invtrace('N_ATTRIBUTE8 = ' || g_serial_attributes_tbl(40).column_value);
6373 invtrace('N_ATTRIBUTE9 = ' || g_serial_attributes_tbl(41).column_value);
6374 invtrace('N_ATTRIBUTE10 = ' || g_serial_attributes_tbl(42).column_value);
6375 invtrace('attribute_category ' || g_serial_attributes_tbl(45).column_value);
6376 invtrace('ATTRIBUTE1 = ' || g_serial_attributes_tbl(46).column_value);
6377 invtrace('ATTRIBUTE2 = ' || g_serial_attributes_tbl(47).column_value);
6378 invtrace('ATTRIBUTE3 = ' || g_serial_attributes_tbl(48).column_value);
6379 invtrace('ATTRIBUTE4 = ' || g_serial_attributes_tbl(49).column_value);
6380 invtrace('ATTRIBUTE5 = ' || g_serial_attributes_tbl(50).column_value);
6381 invtrace('ATTRIBUTE6 = ' || g_serial_attributes_tbl(51).column_value);
6382 invtrace('ATTRIBUTE7 = ' || g_serial_attributes_tbl(52).column_value);
6383 invtrace('ATTRIBUTE8 = ' || g_serial_attributes_tbl(53).column_value);
6384 invtrace('ATTRIBUTE9 = ' || g_serial_attributes_tbl(54).column_value);
6385 invtrace('ATTRIBUTE10 = ' || g_serial_attributes_tbl(55).column_value);
6386 invtrace('ATTRIBUTE11 = ' || g_serial_attributes_tbl(56).column_value);
6387 invtrace('ATTRIBUTE12 = ' || g_serial_attributes_tbl(57).column_value);
6388 invtrace('ATTRIBUTE13 = ' || g_serial_attributes_tbl(58).column_value);
6389 invtrace('ATTRIBUTE14 = ' || g_serial_attributes_tbl(59).column_value);
6390 invtrace('ATTRIBUTE15 = ' || g_serial_attributes_tbl(60).column_value);
6391 invtrace(' for the serial ' || p_fm_serial_number);
6392 END IF;
6393 EXCEPTION
6394 WHEN NO_DATA_FOUND THEN
6395 IF (l_debug = 1) THEN
6396 invtrace('no data found while updating msn');
6397 END IF;
6398
6399 WHEN OTHERS THEN
6400 IF (l_debug = 1) THEN
6401 invtrace('some other error' || SQLERRM);
6402 END IF;
6403
6404 END;
6405 END IF;
6406
6407 x_return_status := fnd_api.g_ret_sts_success;
6408 -- End of API body.
6409 -- Standard check of p_commit.
6410 IF fnd_api.to_boolean(p_commit) THEN
6411 COMMIT WORK;
6412 END IF;
6413
6414 -- Standard call to get message count and if count is 1, get message info.
6415 fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false, p_count => x_msg_count, p_data => l_msg_data);
6416 x_msg_data := SUBSTR(l_msg_data, 0, 198);
6417 EXCEPTION
6418 WHEN OTHERS THEN
6419 ROLLBACK TO apiinsertserial_apipub;
6420
6421 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error) THEN
6422 fnd_msg_pub.add_exc_msg('INV_SERIAL_NUMBER_PUB', 'insertRangeUnitTrx');
6423 END IF;
6424
6425 x_return_status := fnd_api.g_ret_sts_unexp_error;
6426 END insertRangeUnitTrx;
6427
6428 --serial tagging
6429 -- Output variables
6430 -- x_serial_control: 1 => No, 2=> Yes
6431 PROCEDURE is_serial_controlled(
6432 p_inventory_item_id IN NUMBER,
6433 p_organization_id IN NUMBER,
6434 p_transfer_org_id IN NUMBER DEFAULT NULL,
6435 p_txn_type_id IN NUMBER DEFAULT NULL,
6436 p_txn_src_type_id IN NUMBER DEFAULT NULL,
6437 p_txn_action_id IN NUMBER DEFAULT NULL,
6438 p_serial_control IN NUMBER DEFAULT NULL,
6439 p_xfer_serial_control IN NUMBER DEFAULT NULL,
6440 x_serial_control OUT NOCOPY NUMBER,
6441 x_return_status OUT NOCOPY VARCHAR2)
6442 IS
6443 l_serial_control_code NUMBER;
6444 l_xfer_serial_control_code NUMBER := 1;
6445 l_tagged NUMBER;
6446 l_txn_type_id NUMBER;
6447 l_debug NUMBER := NVL(fnd_profile.VALUE('INV_DEBUG_TRACE'), 0);
6448 BEGIN
6449
6450 x_serial_control := 1;
6451 x_return_status := fnd_api.g_ret_sts_success;
6452 IF p_txn_type_id = 1005 THEN
6453 l_txn_type_id := 36;
6454 ELSE
6455 l_txn_type_id := p_txn_type_id;
6456 END IF;
6457
6458 --Assume x_serial_control holds serial_control_code if passed
6459 IF l_debug = 1 THEN
6460 invtrace('is_serial_controlled:'||p_inventory_item_id||' '||p_organization_id||' '||l_txn_type_id||' '||p_txn_src_type_id||' '||p_txn_action_id);
6461 invtrace(p_serial_control||' '||p_xfer_serial_control||' '||p_transfer_org_id);
6462 END IF;
6463 IF p_serial_control IS NULL THEN
6464
6465 SELECT serial_number_control_code
6466 INTO l_serial_control_code
6467 FROM mtl_system_items
6468 WHERE inventory_item_id = p_inventory_item_id
6469 AND organization_id = p_organization_id;
6470 ELSE
6471 l_serial_control_code := p_serial_control;
6472 END IF;
6473
6474 IF l_debug = 1 THEN
6475 invtrace('serial_control:'||l_serial_control_code);
6476 END IF;
6477
6478 IF l_serial_control_code IN (2,5) THEN
6479 x_serial_control := 2;
6480 RETURN;
6481
6482 ELSIF l_serial_control_code IN (1,6) THEN
6483
6484 IF p_xfer_serial_control IS NULL
6485 AND (p_transfer_org_id IS NOT NULL AND p_transfer_org_id NOT IN (0,-1))
6486 THEN
6487
6488 BEGIN
6489 SELECT serial_number_control_code
6490 INTO l_xfer_serial_control_code
6491 FROM mtl_system_items
6492 WHERE inventory_item_id = p_inventory_item_id
6493 AND organization_id = p_transfer_org_id;
6494 EXCEPTION
6495 WHEN No_Data_Found THEN
6496 l_xfer_serial_control_code := 1;
6497 END;
6498 ELSIF p_xfer_serial_control IS NOT NULL THEN
6499 l_xfer_serial_control_code := p_xfer_serial_control;
6500 END IF;
6501
6502 l_tagged := inv_cache.get_serial_tagged(p_organization_id, p_inventory_item_id, l_txn_type_id);
6503 /*
6504 BEGIN
6505 SELECT Count(1) INTO l_tagged
6506 FROM MTL_SERIAL_TAGGING_ASSIGNMENTS
6507 WHERE ORGANIZATION_ID = p_organization_id
6508 AND INVENTORY_ITEM_ID = p_inventory_item_id
6509 AND TRANSACTION_TYPE_ID = p_txn_type_id
6510 AND rownum = 1;
6511 EXCEPTION
6512 WHEN OTHERS THEN
6513 l_tagged := 0;
6514 END;
6515 */
6516
6517
6518 /* Bug 3644289: Separating the conditions for internal order and internal reqs.
6519 Bug 3644289: Checking to see if it is an internal req intransit receipt and if control is at SO issue,
6520 we should be checking for serial numbers, only if the source org is either serial at
6521 receipt or predefined or sales order issue.
6522 If the source has no control,we should not be checking the serials or updating their status.
6523 Bug 5507524: If transaction source type is internal req and action is org xfer (transaction type is
6524 internal req direct org transfer), it should be considered as serialized transaction
6525 Bug 3318924: Allow receipt of serials into stores against an intransit receipt even if the serial control
6526 is dynamic at SO Issue if serials were shipped (serial control code in the source org is
6527 predefined or dynamic at receipt). The status of these serials would be updated to
6528 "Defined but not used" upon receipt
6529 Bug 6798024: should transfer serials for Internal order direct-org xfers/sub-xfers if the item is at
6530 SO Issue serial control in the destination org or sub
6531 */
6532 IF l_debug = 1 THEN
6533 invtrace('Serial tagged: '||l_tagged);
6534 END IF;
6535
6536 IF (( l_serial_control_code = 6 AND
6537 ( -- SO Issue or Project Contract Issue
6538 ((p_txn_src_type_id = 2 OR p_txn_src_type_id = 16) AND p_txn_action_id = 1)
6539 -- RMA
6540 OR (p_txn_src_type_id = 12)
6541 -- Int Ord Issue/Sub xfer/Direct Org Xfer/Intransit Org
6542 OR (p_txn_src_type_id = 8 AND p_txn_action_id IN (1,2,3,21))
6543 -- Int Req Sub xfer/Receipt/Direct Transfer
6544 OR (p_txn_src_type_id = 7 AND p_txn_action_id IN (2,3,12) AND l_xfer_serial_control_code IN (2,5,6)
6545 )
6546 -- Intransit shipment receipt
6547 OR (p_txn_src_type_id = 13 AND p_txn_action_id = 12 AND l_xfer_serial_control_code IN (2,5)
6548 )
6549 )
6550 )
6551 --serial tagging
6552 OR (l_serial_control_code IN (1,6) AND l_tagged = 2)
6553 )
6554 THEN
6555 x_serial_control := 2;
6556 RETURN;
6557 END IF;
6558
6559 END IF; --l_serial_control_code IN (1,6)
6560
6561 EXCEPTION
6562 WHEN OTHERS THEN
6563 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error) THEN
6564 fnd_msg_pub.add_exc_msg('INV_SERIAL_NUMBER_PUB', 'is_serial_controlled');
6565 IF l_debug = 1 THEN
6566 invtrace('Exception:'||SQLERRM);
6567 END IF;
6568
6569 END IF;
6570 x_serial_control := 1;
6571 x_return_status := fnd_api.g_ret_sts_unexp_error;
6572 END is_serial_controlled;
6573
6574 --serial tagging
6575 FUNCTION is_serial_tagged(
6576 p_inventory_item_id IN NUMBER,
6577 p_organization_id IN NUMBER
6578 ) RETURN NUMBER IS
6579 BEGIN
6580 RETURN is_serial_tagged(p_inventory_item_id, p_organization_id, NULL);
6581 END is_serial_tagged;
6582
6583 FUNCTION is_serial_tagged(
6584 p_inventory_item_id IN NUMBER DEFAULT NULL,
6585 p_organization_id IN NUMBER DEFAULT NULL,
6586 p_template_id IN NUMBER
6587 ) RETURN NUMBER IS
6588 l_exists NUMBER := 1;
6589 BEGIN
6590 IF p_template_id IS NOT NULL THEN
6591 BEGIN
6592 SELECT 2 INTO l_exists
6593 FROM DUAL
6594 WHERE EXISTS (SELECT 1 FROM mtl_serial_tagging_assignments
6595 WHERE NVL(organization_id,-1) = NVL(p_organization_id,-1)
6596 AND template_id = p_template_id
6597 );
6598 EXCEPTION
6599 WHEN Others THEN
6600 null;
6601 END;
6602 ELSIF p_organization_id IS NULL OR p_inventory_item_id IS NULL THEN
6603 NULL;
6604 ELSE
6605 BEGIN
6606 SELECT 2 INTO l_exists
6607 FROM DUAL
6608 WHERE EXISTS (SELECT 1 FROM mtl_serial_tagging_assignments
6609 WHERE organization_id = p_organization_id
6610 AND inventory_item_id = p_inventory_item_id
6611 );
6612 EXCEPTION
6613 WHEN Others THEN
6614 --l_exists := 1;
6615 null;
6616 END;
6617 END IF;
6618
6619 RETURN l_exists;
6620
6621 END is_serial_tagged;
6622
6623 --serial tagging
6624 PROCEDURE copy_serial_tag_assignments(
6625 p_from_org_id IN NUMBER DEFAULT NULL,
6626 p_from_item_id IN NUMBER DEFAULT NULL,
6627 p_from_template_id IN NUMBER DEFAULT NULL,
6628 p_to_org_id IN NUMBER DEFAULT NULL,
6629 p_to_item_id IN NUMBER DEFAULT NULL,
6630 p_to_template_id IN NUMBER DEFAULT NULL,
6631 x_return_status OUT NOCOPY VARCHAR2)
6632 IS
6633 l_debug NUMBER := NVL(fnd_profile.VALUE('INV_DEBUG_TRACE'), 0);
6634 l_userid NUMBER := fnd_global.user_id;
6635 l_loginid NUMBER := fnd_global.login_id;
6636 BEGIN
6637
6638 x_return_status := fnd_api.g_ret_sts_success;
6639
6640 IF ( ( p_to_item_id IS NULL
6641 AND p_to_template_id IS NOT NULL)
6642 OR
6643 ( p_to_org_id IS NOT NULL
6644 AND p_to_item_id IS NOT NULL
6645 AND p_to_template_id IS NULL)
6646 )
6647 THEN
6648 NULL;
6649 ELSE
6650 x_return_status := fnd_api.g_ret_sts_error;
6651 IF l_debug = 1 THEN
6652 invtrace('Incorrect Destination org/item/template Combination :' ||
6653 p_to_org_id || ':' || p_to_item_id || ':' || p_to_template_id );
6654 END IF;
6655 RETURN;
6656 END IF;
6657
6658 IF ( ( p_from_item_id IS NULL
6659 AND p_from_template_id IS NOT NULL)
6660 OR
6661 ( p_from_org_id IS NOT NULL
6662 AND p_from_item_id IS NOT NULL
6663 AND p_from_template_id IS NULL)
6664 )
6665 THEN
6666 NULL;
6667 ELSE
6668 x_return_status := fnd_api.g_ret_sts_error;
6669 IF l_debug = 1 THEN
6670 invtrace('Incorrect Source org/item/template Combination :' ||
6671 p_from_org_id || ':' || p_from_item_id || ':' || p_from_template_id );
6672 END IF;
6673 RETURN;
6674 END IF;
6675
6676 IF p_from_item_id IS NOT NULL AND p_to_item_id IS NOT NULL THEN
6677 BEGIN
6678 INSERT INTO mtl_serial_tagging_assignments
6679 ( ORGANIZATION_ID , INVENTORY_ITEM_ID , TEMPLATE_ID , TRANSACTION_TYPE_ID
6680 , CREATED_BY , CREATION_DATE , LAST_UPDATED_BY , LAST_UPDATE_DATE , LAST_UPDATE_LOGIN , CONTEXT )
6681 SELECT p_to_org_id , p_to_item_id , p_to_template_id , transaction_type_id
6682 , l_userid , SYSDATE , l_userid , SYSDATE , l_loginid , context
6683 FROM mtl_serial_tagging_assignments msta1
6684 WHERE organization_id = p_from_org_id
6685 AND inventory_item_id = p_from_item_id
6686 AND NOT EXISTS (SELECT 1
6687 FROM mtl_serial_tagging_assignments msta2
6688 WHERE msta2.organization_id = p_to_org_id
6689 AND msta2.inventory_item_id = p_to_item_id
6690 AND msta2.transaction_type_id = msta1.transaction_type_id
6691 )
6692 ;
6693
6694 EXCEPTION
6695 WHEN others THEN
6696 x_return_status := fnd_api.g_ret_sts_error;
6697 IF l_debug = 1 THEN
6698 invtrace('Exception in copyTagAssignments 1:'||SQLERRM);
6699 END IF;
6700 END;
6701 ELSIF p_from_item_id IS NOT NULL AND p_to_template_id IS NOT NULL THEN
6702 BEGIN
6703 INSERT INTO mtl_serial_tagging_assignments
6704 ( ORGANIZATION_ID , INVENTORY_ITEM_ID , TEMPLATE_ID , TRANSACTION_TYPE_ID
6705 , CREATED_BY , CREATION_DATE , LAST_UPDATED_BY , LAST_UPDATE_DATE , LAST_UPDATE_LOGIN , CONTEXT )
6706 SELECT p_to_org_id , p_to_item_id , p_to_template_id , transaction_type_id
6707 , l_userid , SYSDATE , l_userid , SYSDATE , l_loginid , context
6708 FROM mtl_serial_tagging_assignments msta1
6709 WHERE organization_id = p_from_org_id
6710 AND inventory_item_id = p_from_item_id
6711 AND NOT EXISTS (SELECT 1
6712 FROM mtl_serial_tagging_assignments msta2
6713 WHERE NVL(msta2.organization_id,-1) = NVL(p_to_org_id,-1)
6714 AND msta2.template_id = p_to_template_id
6715 AND msta2.transaction_type_id = msta1.transaction_type_id
6716 )
6717 ;
6718
6719 EXCEPTION
6720 WHEN others THEN
6721 x_return_status := fnd_api.g_ret_sts_error;
6722 IF l_debug = 1 THEN
6723 invtrace('Exception in copyTagAssignments 2:'||SQLERRM);
6724 END IF;
6725 END;
6726 ELSIF p_from_template_id IS NOT NULL AND p_to_item_id IS NOT NULL THEN
6727 BEGIN
6728 INSERT INTO mtl_serial_tagging_assignments
6729 ( ORGANIZATION_ID , INVENTORY_ITEM_ID , TEMPLATE_ID , TRANSACTION_TYPE_ID
6730 , CREATED_BY , CREATION_DATE , LAST_UPDATED_BY , LAST_UPDATE_DATE , LAST_UPDATE_LOGIN , CONTEXT )
6731 SELECT p_to_org_id , p_to_item_id , p_to_template_id , transaction_type_id
6732 , l_userid , SYSDATE , l_userid , SYSDATE , l_loginid , context
6733 FROM mtl_serial_tagging_assignments msta1
6734 WHERE NVL(organization_id,-1) = NVL(p_from_org_id,-1)
6735 AND template_id = p_from_template_id
6736 AND NOT EXISTS (SELECT 1
6737 FROM mtl_serial_tagging_assignments msta2
6738 WHERE msta2.organization_id = p_to_org_id
6739 AND msta2.inventory_item_id = p_to_item_id
6740 AND msta2.transaction_type_id = msta1.transaction_type_id
6741 )
6742 ;
6743
6744 EXCEPTION
6745 WHEN others THEN
6746 x_return_status := fnd_api.g_ret_sts_error;
6747 IF l_debug = 1 THEN
6748 invtrace('Exception in copyTagAssignments 3:'||SQLERRM);
6749 END IF;
6750 END;
6751 ELSIF p_from_template_id IS NOT NULL AND p_to_template_id IS NOT NULL THEN
6752 BEGIN
6753 INSERT INTO mtl_serial_tagging_assignments
6754 ( ORGANIZATION_ID , INVENTORY_ITEM_ID , TEMPLATE_ID , TRANSACTION_TYPE_ID
6755 , CREATED_BY , CREATION_DATE , LAST_UPDATED_BY , LAST_UPDATE_DATE , LAST_UPDATE_LOGIN , CONTEXT )
6756 SELECT p_to_org_id , p_to_item_id , p_to_template_id , transaction_type_id
6757 , l_userid , SYSDATE , l_userid , SYSDATE , l_loginid , context
6758 FROM mtl_serial_tagging_assignments msta1
6759 WHERE NVL(organization_id,-1) = NVL(p_from_org_id,-1)
6760 AND template_id = p_from_template_id
6761 AND NOT EXISTS (SELECT 1
6762 FROM mtl_serial_tagging_assignments msta2
6763 WHERE NVL(msta2.organization_id,-1) = NVL(p_to_org_id,-1)
6764 AND msta2.template_id = p_to_template_id
6765 AND msta2.transaction_type_id = msta1.transaction_type_id
6766 )
6767 ;
6768
6769 EXCEPTION
6770 WHEN others THEN
6771 x_return_status := fnd_api.g_ret_sts_error;
6772 IF l_debug = 1 THEN
6773 invtrace('Exception in copyTagAssignments 4:'||SQLERRM);
6774 END IF;
6775 END;
6776 END IF;
6777
6778
6779 EXCEPTION
6780 WHEN OTHERS THEN
6781
6782 x_return_status := fnd_api.g_ret_sts_unexp_error;
6783 IF l_debug = 1 THEN
6784 invtrace('Exception in copyTagAssignments 4:'||SQLERRM);
6785 END IF;
6786 END copy_serial_tag_assignments;
6787
6788 PROCEDURE delete_serial_tag_assignments(
6789 p_inventory_item_id IN NUMBER,
6790 p_organization_id IN NUMBER,
6791 x_return_status OUT NOCOPY VARCHAR2) IS
6792 BEGIN
6793 delete_serial_tag_assignments(p_inventory_item_id, p_organization_id, NULL, x_return_status);
6794 END delete_serial_tag_assignments;
6795
6796 PROCEDURE delete_serial_tag_assignments(
6797 p_inventory_item_id IN NUMBER DEFAULT NULL,
6798 p_organization_id IN NUMBER DEFAULT NULL,
6799 p_template_id IN NUMBER,
6800 x_return_status OUT NOCOPY VARCHAR2) IS
6801 l_debug NUMBER := NVL(fnd_profile.VALUE('INV_DEBUG_TRACE'), 0);
6802 BEGIN
6803 x_return_status := fnd_api.g_ret_sts_success;
6804
6805 IF ( p_inventory_item_id IS NULL
6806 AND p_template_id IS NOT NULL)
6807 THEN
6808 DELETE FROM MTL_SERIAL_TAGGING_ASSIGNMENTS
6809 WHERE template_id = p_template_id
6810 AND NVL(organization_id,-99) = NVL(p_organization_id,-99);
6811
6812 ELSIF ( p_inventory_item_id IS NOT NULL
6813 AND p_organization_id IS NOT NULL
6814 AND p_template_id IS NULL)
6815 THEN
6816 DELETE FROM MTL_SERIAL_TAGGING_ASSIGNMENTS
6817 WHERE inventory_item_id = p_inventory_item_id
6818 AND organization_id = p_organization_id;
6819 ELSE
6820 x_return_status := fnd_api.g_ret_sts_error;
6821 IF l_debug = 1 THEN
6822 invtrace('Incorrect org/item/template Combination :' ||
6823 p_organization_id || ':' || p_inventory_item_id || ':' || p_template_id );
6824 END IF;
6825 END IF;
6826
6827 EXCEPTION
6828 WHEN OTHERS THEN
6829 x_return_status := fnd_api.g_ret_sts_unexp_error;
6830 IF l_debug = 1 THEN
6831 invtrace('Exception in delete_serial_tag_assignments:' || sqlerrm );
6832 END IF;
6833
6834 END delete_serial_tag_assignments;
6835
6836 END inv_serial_number_pub;