DBA Data[Home] [Help]

PACKAGE BODY: APPS.AMS_ASSOCIATIONS_PVT

Source


1 PACKAGE BODY AMS_Associations_PVT AS
2 /*$Header: amsvassb.pls 115.24 2002/12/02 20:30:43 dbiswas ship $*/
3 
4 g_pkg_name   CONSTANT VARCHAR2(30):='AMS_Associations_PVT';
5 
6 ---------------------------------------------------------------------
7 -- PROCEDURE
8 --    check_association_dates
9 --
10 -- HISTORY
11 --  10/30/01     musman    created
12 ---------------------------------------------------------------------
13 AMS_DEBUG_HIGH_ON CONSTANT boolean := FND_MSG_PUB.CHECK_MSG_LEVEL(FND_MSG_PUB.G_MSG_LVL_DEBUG_HIGH);
14 AMS_DEBUG_LOW_ON CONSTANT boolean := FND_MSG_PUB.CHECK_MSG_LEVEL(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW);
15 AMS_DEBUG_MEDIUM_ON CONSTANT boolean := FND_MSG_PUB.CHECK_MSG_LEVEL(FND_MSG_PUB.G_MSG_LVL_DEBUG_MEDIUM);
16 
17 PROCEDURE check_association_dates(
18    p_association_rec        IN  association_rec_type,
19    x_return_status   OUT NOCOPY VARCHAR2
20 );
21 
22 
23 --------------------------------------------------------------
24 -- PROCEDURE
25 --    create_association
26 --
27 -- HISTORY
28 --  11/10/99     sugupta    created
29 --  07/15/00     ptendulk   Before creating Object attributes
30 --                          check Master object is not campaign and
31 --                          using object is not events .
32 --  07/16/00     holiu      Rewrite the IF condition.
33 --  10/18/00     soagrawa   Removed check for DELV.lang = CSCH.lang
34 --                          (fixed bug# 2063150)
35 ---------------------------------------------------------------------
36 PROCEDURE create_association(
37    p_api_version       IN  NUMBER,
38    p_init_msg_list     IN  VARCHAR2  := FND_API.g_false,
39    p_commit            IN  VARCHAR2  := FND_API.g_false,
40    p_validation_level  IN  NUMBER    := FND_API.g_valid_level_full,
41 
42    x_return_status     OUT NOCOPY VARCHAR2,
43    x_msg_count         OUT NOCOPY NUMBER,
44    x_msg_data          OUT NOCOPY VARCHAR2,
45    p_association_rec        IN  association_rec_type,
46    x_object_association_id  OUT NOCOPY NUMBER
47 )
48 IS
49 
50    l_api_version CONSTANT NUMBER       := 1.0;
51    l_api_name    CONSTANT VARCHAR2(30) := 'create_association';
52    l_full_name   CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
53 
54    l_return_status  VARCHAR2(1);
55    l_association_rec       association_rec_type := p_association_rec;
56    l_association_count     NUMBER;
57   ------
58    l_user_id  NUMBER;
59    l_res_id   NUMBER;
60 
61    CURSOR get_res_id(l_user_id IN NUMBER) IS
62    SELECT resource_id
63    FROM ams_jtf_rs_emp_v
64    WHERE user_id = l_user_id;
65 
66    CURSOR c_association_seq IS
67    SELECT ams_object_associations_s.NEXTVAL
68      FROM DUAL;
69 
70    CURSOR c_association_count(association_id IN NUMBER) IS
71    SELECT COUNT(*)
72      FROM ams_object_associations
73     WHERE object_association_id = association_id;
74 
75    CURSOR c_get_lang_code ( l_camp_sch_id IN NUMBER) IS
76     SELECT language_code
77      FROM  AMS_CAMPAIGN_SCHEDULES_B
78     WHERE  schedule_id = l_camp_sch_id;
79 
80    CURSOR c_get_delv_details(l_delv_id IN NUMBER) IS
81     SELECT actual_avail_from_date,actual_avail_to_date,language_code
82     FROM ams_deliverables_all_b
83     WHERE deliverable_id = l_delv_id;
84 
85    l_csch_lang_code VARCHAR2(30);
86    l_delv_lang_code VARCHAR2(30);
87    l_delv_to_date DATE;
88    l_delv_from_date DATE;
89 
90 BEGIN
91 
92    --------------------- initialize -----------------------
93    SAVEPOINT create_association;
94 
95    IF (AMS_DEBUG_HIGH_ON) THEN
96 
97 
98 
99    AMS_Utility_PVT.debug_message(l_full_name||': start');
100 
101    END IF;
102 
103    IF FND_API.to_boolean(p_init_msg_list) THEN
104       FND_MSG_PUB.initialize;
105    END IF;
106 
107    IF NOT FND_API.compatible_api_call(
108          l_api_version,
109          p_api_version,
110          l_api_name,
111          g_pkg_name
112    ) THEN
113       RAISE FND_API.g_exc_unexpected_error;
114    END IF;
115 
116    x_return_status := FND_API.g_ret_sts_success;
117 
118    ----------------------- validate -----------------------
119    IF (AMS_DEBUG_HIGH_ON) THEN
120 
121    AMS_Utility_PVT.debug_message(l_full_name ||': validate');
122    END IF;
123 
124    validate_association(
125       p_api_version        => l_api_version,
126       p_init_msg_list      => p_init_msg_list,
127       p_validation_level   => p_validation_level,
128       x_return_status      => l_return_status,
129       x_msg_count          => x_msg_count,
130       x_msg_data           => x_msg_data,
131       p_association_rec         => l_association_rec
132    );
133 
134    IF l_return_status = FND_API.g_ret_sts_error THEN
135       RAISE FND_API.g_exc_error;
136    ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
137       RAISE FND_API.g_exc_unexpected_error;
138    END IF;
139    --------------- CHECK ACCESS FOR THE USER-------------------
140    ----------added sugupta 07/25/2000
141    l_user_id := FND_GLOBAL.User_Id;
142    if l_user_id IS NOT NULL then
143       open get_res_id(l_user_id);
144       fetch get_res_id into l_res_id;
145       close get_res_id;
146    end if;
147 
148    IF l_association_rec.master_object_type <> 'CSCH' THEN
149       if AMS_ACCESS_PVT.check_update_access(l_association_rec.MASTER_OBJECT_ID, l_association_rec.MASTER_OBJECT_TYPE, l_res_id, 'USER') = 'N'  then
150          IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
151             FND_MESSAGE.set_name('AMS', 'AMS_EVO_NO_UPDATE_ACCESS'); --resuing message
152             FND_MSG_PUB.add;
153          END IF;
154          RAISE FND_API.g_exc_error;
155       end if;
156    END IF ;
157 
158    ------------------- Added by ABHOLA   ------------------
159 
160      OPEN c_get_delv_details(l_association_rec.USING_OBJECT_ID);
161      FETCH c_get_delv_details INTO l_delv_from_date,l_delv_to_date, l_delv_lang_code;
162      CLOSE c_get_delv_details;
163 
164    -- removed by soagrawa on 18-oct-2001
165    -- bug# 2063150
166    /* Check language code of schedule is same as of DELV  */
167      /*
168      if (l_association_rec.MASTER_OBJECT_TYPE = 'CSCH') then
169 
170        OPEN c_get_lang_code(l_association_rec.MASTER_OBJECT_ID);
171        FETCH c_get_lang_code INTO l_csch_lang_code;
172        CLOSE c_get_lang_code;
173 
174        if (l_csch_lang_code <> l_delv_lang_code) then
175           if FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) then
176         FND_MESSAGE.set_name('AMS', 'AMS_DELV_CSCH_LANGUAGE');
177         FND_MSG_PUB.add;
178           end if;
179         RAISE FND_API.g_exc_error;
180      end if;
181 
182    end if;*/
183 
184    -- end soagrawa 18-oct-2001, bug# 2063150
185 
186    /* qunatity neede by date should be between delb to and from date */
187 
188    if ((l_association_rec.QUANTITY_NEEDED_BY_DATE >  l_delv_to_date )
189        OR
190       (l_association_rec.QUANTITY_NEEDED_BY_DATE  <  l_delv_from_date )) then
191 
192       if FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) then
193        FND_MESSAGE.set_name('AMS', 'AMS_DELV_INVALID_DATES');
194          FND_MSG_PUB.add;
195       end if;
196         RAISE FND_API.g_exc_error;
197    end if;
198 
199    check_association_dates(
200       p_association_rec   => l_association_rec,
201       x_return_status     => x_return_status
202    );
203 
204    IF x_return_status = FND_API.g_ret_sts_error THEN
205       RAISE FND_API.g_exc_error;
206    ELSIF x_return_status = FND_API.g_ret_sts_unexp_error THEN
207       RAISE FND_API.g_exc_unexpected_error;
208    END IF;
209 
210 
211 
212 
213    ------------------------------------------------------
214    -------------------------- insert --------------------------
215    IF (AMS_DEBUG_HIGH_ON) THEN
216 
217    AMS_Utility_PVT.debug_message(l_full_name ||': insert');
218    END IF;
219 
220    IF l_association_rec.object_association_id IS NULL THEN
221       LOOP
222       OPEN c_association_seq;
223       FETCH c_association_seq INTO l_association_rec.object_association_id;
224       CLOSE c_association_seq;
225 
226           OPEN c_association_count(l_association_rec.object_association_id);
227       FETCH c_association_count into l_association_count;
228       CLOSE c_association_count;
229 
230       EXIT WHEN l_association_count = 0;
231     END LOOP;
232      END IF;
233 
234    INSERT INTO ams_object_associations(
235     OBJECT_ASSOCIATION_ID,
236     LAST_UPDATE_DATE,
237     LAST_UPDATED_BY,
238     CREATION_DATE,
239     CREATED_BY,
240     LAST_UPDATE_LOGIN,
241     OBJECT_VERSION_NUMBER,
242     MASTER_OBJECT_TYPE,
243     MASTER_OBJECT_ID,
244     USING_OBJECT_TYPE,
245     USING_OBJECT_ID,
246     PRIMARY_FLAG,
247     USAGE_TYPE,
248     QUANTITY_NEEDED,
249     QUANTITY_NEEDED_BY_DATE,
250     COST_FROZEN_FLAG,
251     PCT_OF_COST_TO_CHARGE_USED_BY,
252     MAX_COST_TO_CHARGE_USED_BY,
253     MAX_COST_CURRENCY_CODE,
254     METRIC_CLASS,
255    FULFILL_ON_TYPE_CODE,
256     ATTRIBUTE_CATEGORY,
257     ATTRIBUTE1,
258     ATTRIBUTE2,
259     ATTRIBUTE3,
260     ATTRIBUTE4,
261     ATTRIBUTE5,
262     ATTRIBUTE6,
263     ATTRIBUTE7,
264     ATTRIBUTE8,
265     ATTRIBUTE9,
266     ATTRIBUTE10,
267     ATTRIBUTE11,
268     ATTRIBUTE12,
269     ATTRIBUTE13,
270     ATTRIBUTE14,
271     ATTRIBUTE15,
272     CONTENT_TYPE,
273     SEQUENCE_NO
274    ) VALUES(
275     l_association_rec.OBJECT_ASSOCIATION_ID,
276     sysdate,
277     FND_GLOBAL.user_id,
278     SYSDATE,
279     FND_GLOBAL.user_id,
280     FND_GLOBAL.conc_login_id,
281     1,  -- object_version_number
282     l_association_rec.MASTER_OBJECT_TYPE,
283     l_association_rec.MASTER_OBJECT_ID,
284     l_association_rec.USING_OBJECT_TYPE,
285     l_association_rec.USING_OBJECT_ID,
286     nvl(l_association_rec.PRIMARY_FLAG,'N'),
287     l_association_rec.USAGE_TYPE,
288     l_association_rec.QUANTITY_NEEDED,
289     l_association_rec.QUANTITY_NEEDED_BY_DATE,
290     nvl(l_association_rec.COST_FROZEN_FLAG,'N'),
291     l_association_rec.PCT_OF_COST_TO_CHARGE_USED_BY,
292     l_association_rec.MAX_COST_TO_CHARGE_USED_BY,
293     l_association_rec.MAX_COST_CURRENCY_CODE,
294     l_association_rec.METRIC_CLASS,
295    l_association_rec.FULFILL_ON_TYPE_CODE,
296     l_association_rec.ATTRIBUTE_CATEGORY,
297     l_association_rec.ATTRIBUTE1,
298     l_association_rec.ATTRIBUTE2,
299     l_association_rec.ATTRIBUTE3,
300     l_association_rec.ATTRIBUTE4,
301     l_association_rec.ATTRIBUTE5,
302     l_association_rec.ATTRIBUTE6,
303     l_association_rec.ATTRIBUTE7,
304     l_association_rec.ATTRIBUTE8,
305     l_association_rec.ATTRIBUTE9,
306     l_association_rec.ATTRIBUTE10,
307     l_association_rec.ATTRIBUTE11,
308     l_association_rec.ATTRIBUTE12,
309     l_association_rec.ATTRIBUTE13,
310     l_association_rec.ATTRIBUTE14,
311     l_association_rec.ATTRIBUTE15,
312     l_association_rec.content_type,
313     l_association_rec.sequence_no
314 );
315    ------------------------- finish -------------------------------
316    x_object_association_id := l_association_rec.object_association_id;
317 -- added by sugupta on 07/11/2000
318    -- indicate association has been defined for the MASTER_OBJECT_TYPE
319 
320 -- =========================================================================
321 -- Following condition is added by ptendulk on 15-Jul-2000 as events created
322 -- for campaigns dont require object attributes
323 -- =========================================================================
324 
325   /******************
326 
327    IF l_association_rec.MASTER_OBJECT_TYPE <> 'CAMP'
328       OR (l_association_rec.USING_OBJECT_TYPE <> 'EVEH'
329          AND l_association_rec.USING_OBJECT_TYPE <> 'EVEO')
330    THEN
331        AMS_ObjectAttribute_PVT.modify_object_attribute(
332              p_api_version        => l_api_version,
333              p_init_msg_list      => FND_API.g_false,
334              p_commit             => FND_API.g_false,
335              p_validation_level   => FND_API.g_valid_level_full,
336 
337              x_return_status      => l_return_status,
338              x_msg_count          => x_msg_count,
339              x_msg_data           => x_msg_data,
340 
341              p_object_type        => l_association_rec.MASTER_OBJECT_TYPE,
342              p_object_id          => l_association_rec.MASTER_OBJECT_ID,
343              p_attr               => l_association_rec.USING_OBJECT_TYPE,
344              p_attr_defined_flag  => 'Y'
345           );
346 
347           IF l_return_status = FND_API.g_ret_sts_error THEN
348              RAISE FND_API.g_exc_error;
349           ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
350              RAISE FND_API.g_exc_unexpected_error;
351           END IF;
352    END IF ;
353    *******************/
354 
355 -- =========================================================================
356 -- End of Code modified by ptendulk on 15-Jul-2000
357 -- =========================================================================
358 
359    IF FND_API.to_boolean(p_commit) THEN
360       COMMIT;
361    END IF;
362 
363    FND_MSG_PUB.count_and_get(
364          p_encoded => FND_API.g_false,
365          p_count   => x_msg_count,
366          p_data    => x_msg_data
367    );
368 
369    IF (AMS_DEBUG_HIGH_ON) THEN
370 
371 
372 
373    AMS_Utility_PVT.debug_message(l_full_name ||': end');
374 
375    END IF;
376 
377 EXCEPTION
378 
379    WHEN FND_API.g_exc_error THEN
380       ROLLBACK TO create_association;
381       x_return_status := FND_API.g_ret_sts_error;
382       FND_MSG_PUB.count_and_get(
383             p_encoded => FND_API.g_false,
384             p_count   => x_msg_count,
385             p_data    => x_msg_data
386       );
387 
388    WHEN FND_API.g_exc_unexpected_error THEN
389       ROLLBACK TO create_association;
390       x_return_status := FND_API.g_ret_sts_unexp_error ;
391       FND_MSG_PUB.count_and_get(
392             p_encoded => FND_API.g_false,
393             p_count   => x_msg_count,
394             p_data    => x_msg_data
395       );
396 
397 
398    WHEN OTHERS THEN
399       ROLLBACK TO create_association;
400       x_return_status := FND_API.g_ret_sts_unexp_error ;
401 
402       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_unexp_error)
403       THEN
404          FND_MSG_PUB.add_exc_msg(g_pkg_name, l_api_name);
405       END IF;
406 
407       FND_MSG_PUB.count_and_get(
408             p_encoded => FND_API.g_false,
409             p_count   => x_msg_count,
410             p_data    => x_msg_data
411       );
412 
413 END create_association;
414 ---------------------------------------------------------------
415 -- PROCEDURE
416 --    delete_association
417 --
418 -- HISTORY
419 --  11/10/99     sugupta    created
420 --  07/15/00     ptendulk   Before Deleting Object attributes
421 --                          check Master object is not campaign and
422 --                          using object is not events .
423 ---------------------------------------------------------------
424 PROCEDURE delete_association(
425    p_api_version       IN  NUMBER,
426    p_init_msg_list     IN  VARCHAR2 := FND_API.g_false,
427    p_commit            IN  VARCHAR2 := FND_API.g_false,
428    p_validation_level  IN  NUMBER   := FND_API.g_valid_level_full,
429 
430    x_return_status     OUT NOCOPY VARCHAR2,
431    x_msg_count         OUT NOCOPY NUMBER,
432    x_msg_data          OUT NOCOPY VARCHAR2,
433 
434    p_object_association_id         IN  NUMBER,
435    p_object_version    IN  NUMBER
436 )
437 IS
438 
439    l_api_version CONSTANT NUMBER       := 1.0;
440    l_api_name    CONSTANT VARCHAR2(30) := 'delete_association';
441    l_full_name   CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
442    l_c_obj_id     NUMBER := p_object_association_id;
443    l_object_type     VARCHAR2(30);
444    l_object_id        NUMBER;
445    l_attr           VARCHAR2(30);
446    l_dummy        VARCHAR2(100);
447    l_master        VARCHAR2(30);
448    l_master_id    NUMBER;
449    ------
450    l_user_id  NUMBER;
451    l_res_id   NUMBER;
452 
453    cursor get_objattr_info(l_obj_id IN NUMBER) is
454    select distinct a.using_object_type, a.master_object_type, a.master_object_id
455      from ams_object_associations a, ams_object_associations b
456    where  a.master_object_type = b.master_object_type
457    and a.master_object_id = b.master_object_id
458    and a.using_object_type = b.using_object_type
459    and b.object_association_id = l_obj_id;
460 
461    cursor get_count(c_obj_type IN VARCHAR2, c_obj_id IN NUMBER, c_attr IN VARCHAR2) is
462    select 'dummy'
463      from ams_object_associations
464    where  master_object_type = c_obj_type
465    and master_object_id = c_obj_id
466    and using_object_type = c_attr;
467 
468    CURSOR get_res_id(l_user_id IN NUMBER) IS
469    SELECT resource_id
470    FROM ams_jtf_rs_emp_v
471    WHERE user_id = l_user_id;
472 
473    CURSOR get_master_info(l_obj_id IN NUMBER) IS
474    SELECT master_object_type, master_object_id
475    FROM ams_object_associations
476    WHERE object_association_id = l_obj_id;
477 
478 BEGIN
479 
480    --------------------- initialize -----------------------
481    SAVEPOINT delete_association;
482 
483    IF (AMS_DEBUG_HIGH_ON) THEN
484 
485 
486 
487    AMS_Utility_PVT.debug_message(l_full_name||': start');
488 
489    END IF;
490 
491    IF FND_API.to_boolean(p_init_msg_list) THEN
492       FND_MSG_PUB.initialize;
493    END IF;
494 
495    IF NOT FND_API.compatible_api_call(
496          l_api_version,
497          p_api_version,
498          l_api_name,
499          g_pkg_name
500    ) THEN
501       RAISE FND_API.g_exc_unexpected_error;
502    END IF;
503 
504    x_return_status := FND_API.G_RET_STS_SUCCESS;
505    --------------- CHECK ACCESS FOR THE USER-------------------
506    ----------added sugupta 07/25/2000
507    l_user_id := FND_GLOBAL.User_Id;
508    if l_user_id IS NOT NULL then
509       open get_res_id(l_user_id);
510       fetch get_res_id into l_res_id;
511       close get_res_id;
512    end if;
513 
514    open get_master_info(p_object_association_id);
515    fetch get_master_info into l_master, l_master_id;
516    close get_master_info;
517 
518    IF l_master <> 'CSCH' THEN
519       if AMS_ACCESS_PVT.check_update_access(l_master_id, l_master, l_res_id, 'USER') = 'N'  then
520          IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
521             FND_MESSAGE.set_name('AMS', 'AMS_EVO_NO_UPDATE_ACCESS'); --reusing message
522             FND_MSG_PUB.add;
523          END IF;
524          RAISE FND_API.g_exc_error;
525       end if;
526    END IF ;
527 
528    ------------------------ delete ------------------------
529    IF (AMS_DEBUG_HIGH_ON) THEN
530 
531    AMS_Utility_PVT.debug_message(l_full_name ||': delete');
532    END IF;
533 
534      OPEN get_objattr_info(l_c_obj_id);
535      FETCH  get_objattr_info into l_attr, l_object_type, l_object_id;
536    close get_objattr_info;
537 
538    DELETE FROM ams_object_associations
539    WHERE object_association_id = p_object_association_id
540    AND object_version_number = p_object_version;
541 
542    IF (SQL%NOTFOUND) THEN
543       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error)
544       THEN
545          FND_MESSAGE.set_name('AMS', 'AMS_API_RECORD_NOT_FOUND');
546          FND_MSG_PUB.add;
547       END IF;
548       RAISE FND_API.g_exc_error;
549    END IF;
550 
551    -----          Modify Object Attribute ---------------
552 
553      OPEN get_count(l_object_type,l_object_id,l_attr);
554      FETCH  get_count into l_dummy;
555 
556      IF (GET_COUNT%NOTFOUND) THEN
557 
558    -- need to make a call to update ams_objec_attributes that no information
559    -- exist for this combination of master obj type and id and using object type
560    -- and set attribute defined flag to N
561 
562         -- =========================================================================
563         -- Following condition is added by ptendulk on 15-Jul-2000 as events created
564         -- for campaigns dont require object attributes
565         -- =========================================================================
566      null;
567 
568      /**
569    IF l_object_type <> 'CAMP' OR (l_attr <> 'EVEH' AND l_attr <> 'EVEO')
570         THEN
571 
572            AMS_ObjectAttribute_PVT.modify_object_attribute(
573                 p_api_version        => l_api_version,
574                 p_init_msg_list      => FND_API.g_false,
575                 p_commit             => FND_API.g_false,
576                 p_validation_level   => FND_API.g_valid_level_full,
577 
578                 x_return_status      => x_return_status,
579                 x_msg_count          => x_msg_count,
580                 x_msg_data           => x_msg_data,
581 
582                 p_object_type        => l_object_type,
583                 p_object_id          => l_object_id,
584                 p_attr               => l_attr,
585                 p_attr_defined_flag  => 'N'
586              );
587            IF x_return_status = FND_API.g_ret_sts_error THEN
588                RAISE FND_API.g_exc_error;
589            ELSIF x_return_status = FND_API.g_ret_sts_unexp_error THEN
590                 RAISE FND_API.g_exc_unexpected_error;
591            END IF;
592         END IF;
593        **/
594         -- =========================================================================
595         -- End of code Modified by ptendulk on 15-Jul-2000
596         -- =========================================================================
597 
598      END IF;
599 
600      CLOSE get_count;
601 
602    -------------------- finish --------------------------
603    IF FND_API.to_boolean(p_commit) THEN
604       COMMIT;
605    END IF;
606 
607    FND_MSG_PUB.count_and_get(
608          p_encoded => FND_API.g_false,
609          p_count   => x_msg_count,
610          p_data    => x_msg_data
611    );
612 
613    IF (AMS_DEBUG_HIGH_ON) THEN
614 
615 
616 
617    AMS_Utility_PVT.debug_message(l_full_name ||': end');
618 
619    END IF;
620 
621 EXCEPTION
622 
623    WHEN FND_API.g_exc_error THEN
624       ROLLBACK TO delete_association;
625       x_return_status := FND_API.g_ret_sts_error;
626       FND_MSG_PUB.count_and_get(
627             p_encoded => FND_API.g_false,
628             p_count   => x_msg_count,
629             p_data    => x_msg_data
630       );
631 
632    WHEN FND_API.g_exc_unexpected_error THEN
633       ROLLBACK TO delete_association;
634       x_return_status := FND_API.g_ret_sts_unexp_error ;
635       FND_MSG_PUB.count_and_get(
636             p_encoded => FND_API.g_false,
637             p_count   => x_msg_count,
638             p_data    => x_msg_data
639       );
640 
641    WHEN OTHERS THEN
642       ROLLBACK TO delete_association;
643       x_return_status := FND_API.g_ret_sts_unexp_error ;
644 
645       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_unexp_error)
646       THEN
647          FND_MSG_PUB.add_exc_msg(g_pkg_name, l_api_name);
648       END IF;
649 
650       FND_MSG_PUB.count_and_get(
651             p_encoded => FND_API.g_false,
652             p_count   => x_msg_count,
653             p_data    => x_msg_data
654       );
655 
656 END delete_association;
657 
658 -------------------------------------------------------------------
659 -- PROCEDURE
660 --    lock_association
661 --
662 -- HISTORY
663 --  11/10/99     sugupta    created
664 --------------------------------------------------------------------
665 PROCEDURE lock_association(
666    p_api_version       IN  NUMBER,
667    p_init_msg_list     IN  VARCHAR2 := FND_API.g_false,
668    p_validation_level  IN  NUMBER   := FND_API.g_valid_level_full,
669 
670    x_return_status     OUT NOCOPY VARCHAR2,
671    x_msg_count         OUT NOCOPY NUMBER,
672    x_msg_data          OUT NOCOPY VARCHAR2,
673 
674    p_object_association_id         IN  NUMBER,
675    p_object_version    IN  NUMBER
676 )
677 IS
678 
679    l_api_version  CONSTANT NUMBER       := 1.0;
680    l_api_name     CONSTANT VARCHAR2(30) := 'lock_association';
681    l_full_name    CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
682 
683    l_object_association_id      NUMBER;
684 
685    CURSOR c_association_b IS
686    SELECT object_association_id
687      FROM ams_object_associations
688     WHERE object_association_id = p_object_association_id
689       AND object_version_number = p_object_version
690    FOR UPDATE OF object_association_id NOWAIT;
691 
692 
693 BEGIN
694 
695    -------------------- initialize ------------------------
696    IF (AMS_DEBUG_HIGH_ON) THEN
697 
698    AMS_Utility_PVT.debug_message(l_full_name||': start');
699    END IF;
700 
701    IF FND_API.to_boolean(p_init_msg_list) THEN
702       FND_MSG_PUB.initialize;
703    END IF;
704 
705    IF NOT FND_API.compatible_api_call(
706          l_api_version,
707          p_api_version,
708          l_api_name,
709          g_pkg_name
710    ) THEN
711       RAISE FND_API.g_exc_unexpected_error;
712    END IF;
713 
714    x_return_status := FND_API.G_RET_STS_SUCCESS;
715 
716    ------------------------ lock -------------------------
717    IF (AMS_DEBUG_HIGH_ON) THEN
718 
719    AMS_Utility_PVT.debug_message(l_full_name||': lock');
720    END IF;
721 
722    OPEN c_association_b;
723    FETCH c_association_b INTO l_object_association_id;
724    IF (c_association_b%NOTFOUND) THEN
725       CLOSE c_association_b;
726       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
727          FND_MESSAGE.set_name('AMS', 'AMS_API_RECORD_NOT_FOUND');
728          FND_MSG_PUB.add;
729       END IF;
730       RAISE FND_API.g_exc_error;
731    END IF;
732    CLOSE c_association_b;
733    -------------------- finish --------------------------
734    FND_MSG_PUB.count_and_get(
735          p_encoded => FND_API.g_false,
736          p_count   => x_msg_count,
737          p_data    => x_msg_data
738    );
739 
740    IF (AMS_DEBUG_HIGH_ON) THEN
741 
742 
743 
744    AMS_Utility_PVT.debug_message(l_full_name ||': end');
745 
746    END IF;
747 
748 EXCEPTION
749 
750    WHEN AMS_Utility_PVT.resource_locked THEN
751       x_return_status := FND_API.g_ret_sts_error;
752       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
753          FND_MESSAGE.set_name('AMS', 'AMS_API_RESOURCE_LOCKED');
754          FND_MSG_PUB.add;
755       END IF;
756 
757       FND_MSG_PUB.count_and_get(
758             p_encoded => FND_API.g_false,
759             p_count   => x_msg_count,
760             p_data    => x_msg_data
761       );
762 
763    WHEN FND_API.g_exc_error THEN
764       x_return_status := FND_API.g_ret_sts_error;
765       FND_MSG_PUB.count_and_get(
766             p_encoded => FND_API.g_false,
767             p_count   => x_msg_count,
768             p_data    => x_msg_data
769       );
770 
771    WHEN FND_API.g_exc_unexpected_error THEN
772       x_return_status := FND_API.g_ret_sts_unexp_error ;
773       FND_MSG_PUB.count_and_get(
774             p_encoded => FND_API.g_false,
775             p_count   => x_msg_count,
776             p_data    => x_msg_data
777       );
778 
779    WHEN OTHERS THEN
780       x_return_status := FND_API.g_ret_sts_unexp_error ;
781       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_unexp_error)
782       THEN
783          FND_MSG_PUB.add_exc_msg(g_pkg_name, l_api_name);
784       END IF;
785 
786       FND_MSG_PUB.count_and_get(
787             p_encoded => FND_API.g_false,
788             p_count   => x_msg_count,
789             p_data    => x_msg_data
790       );
791 
792 END lock_association;
793 
794 
795 ---------------------------------------------------------------------
796 -- PROCEDURE
797 --    update_association
798 --
799 -- HISTORY
800 --  11/10/99     sugupta    created
801 ----------------------------------------------------------------------
802 PROCEDURE update_association(
803    p_api_version       IN  NUMBER,
804    p_init_msg_list     IN  VARCHAR2  := FND_API.g_false,
805    p_commit            IN  VARCHAR2  := FND_API.g_false,
806    p_validation_level  IN  NUMBER    := FND_API.g_valid_level_full,
807 
808    x_return_status     OUT NOCOPY VARCHAR2,
809    x_msg_count         OUT NOCOPY NUMBER,
810    x_msg_data          OUT NOCOPY VARCHAR2,
811 
812    p_association_rec   IN  association_rec_type
813 )
814 IS
815 
816    l_api_version CONSTANT NUMBER := 1.0;
817    l_api_name    CONSTANT VARCHAR2(30) := 'update_association';
818    l_full_name   CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
819 
820    l_association_rec       association_rec_type;
821    l_return_status    VARCHAR2(1);
822    ------
823    l_user_id  NUMBER;
824    l_res_id   NUMBER;
825 
826   CURSOR get_res_id(l_user_id IN NUMBER) IS
827    SELECT resource_id
828    FROM ams_jtf_rs_emp_v
829    WHERE user_id = l_user_id;
830 BEGIN
831 
832    -------------------- initialize -------------------------
833    SAVEPOINT update_association;
834 
835    IF (AMS_DEBUG_HIGH_ON) THEN
836 
837 
838 
839    AMS_Utility_PVT.debug_message(l_full_name||': start');
840 
841    END IF;
842 
843    IF FND_API.to_boolean(p_init_msg_list) THEN
844       FND_MSG_PUB.initialize;
845    END IF;
846 
847    IF NOT FND_API.compatible_api_call(
848          l_api_version,
849          p_api_version,
850          l_api_name,
851          g_pkg_name
852    ) THEN
853       RAISE FND_API.g_exc_unexpected_error;
854    END IF;
855 
856    x_return_status := FND_API.G_RET_STS_SUCCESS;
857 
858    -- replace g_miss_char/num/date with current column values
859    complete_association_rec(p_association_rec, l_association_rec);
860 
861    ----------------------- validate ----------------------
862    IF (AMS_DEBUG_HIGH_ON) THEN
863 
864    AMS_Utility_PVT.debug_message(l_full_name ||': validate');
865    END IF;
866 
867    IF p_validation_level >= JTF_PLSQL_API.g_valid_level_item THEN
868       check_association_items(
869          p_association_rec        => p_association_rec,
870          p_validation_mode => JTF_PLSQL_API.g_update,
871          x_return_status   => l_return_status
872       );
873 
874       IF l_return_status = FND_API.g_ret_sts_unexp_error THEN
875          RAISE FND_API.g_exc_unexpected_error;
876       ELSIF l_return_status = FND_API.g_ret_sts_error THEN
877          RAISE FND_API.g_exc_error;
878       END IF;
879    END IF;
880 
881    IF p_validation_level >= JTF_PLSQL_API.g_valid_level_record THEN
882       check_association_record(
883          p_association_rec       => p_association_rec,
884          x_return_status  => l_return_status
885       );
886 
887       IF l_return_status = FND_API.g_ret_sts_unexp_error THEN
888          RAISE FND_API.g_exc_unexpected_error;
889       ELSIF l_return_status = FND_API.g_ret_sts_error THEN
890          RAISE FND_API.g_exc_error;
891       END IF;
892    END IF;
893    --------------- CHECK ACCESS FOR THE USER-------------------
894    ----------added sugupta 07/25/2000
895    l_user_id := FND_GLOBAL.User_Id;
896    if l_user_id IS NOT NULL then
897       open get_res_id(l_user_id);
898       fetch get_res_id into l_res_id;
899       close get_res_id;
900    end if;
901 
902    IF l_association_rec.master_object_type <> 'CSCH' THEN
903       if AMS_ACCESS_PVT.check_update_access(l_association_rec.MASTER_OBJECT_ID, l_association_rec.MASTER_OBJECT_TYPE, l_res_id, 'USER') = 'N'  then
904          IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
905             FND_MESSAGE.set_name('AMS', 'AMS_EVO_NO_UPDATE_ACCESS');
906             FND_MSG_PUB.add;
907          END IF;
908          RAISE FND_API.g_exc_error;
909       end if;
910    END IF ;
911    -------------------------- update --------------------
912    IF (AMS_DEBUG_HIGH_ON) THEN
913 
914    AMS_Utility_PVT.debug_message(l_full_name ||': update');
915    END IF;
916 
917    UPDATE ams_object_associations SET
918     last_update_date = SYSDATE,
919     last_updated_by = FND_GLOBAL.user_id,
920     last_update_login = FND_GLOBAL.conc_login_id,
921     object_version_number = l_association_rec.object_version_number + 1,
922     MASTER_OBJECT_TYPE = l_association_rec.MASTER_OBJECT_TYPE,
923     MASTER_OBJECT_ID = l_association_rec.MASTER_OBJECT_ID,
924     USING_OBJECT_TYPE = l_association_rec.USING_OBJECT_TYPE,
925     USING_OBJECT_ID = l_association_rec.USING_OBJECT_ID,
926     PRIMARY_FLAG = l_association_rec.PRIMARY_FLAG,
927     USAGE_TYPE = l_association_rec.USAGE_TYPE,
928     QUANTITY_NEEDED = l_association_rec.QUANTITY_NEEDED,
929     QUANTITY_NEEDED_BY_DATE = l_association_rec.QUANTITY_NEEDED_BY_DATE,
930     COST_FROZEN_FLAG = l_association_rec.COST_FROZEN_FLAG,
931     PCT_OF_COST_TO_CHARGE_USED_BY = l_association_rec.PCT_OF_COST_TO_CHARGE_USED_BY,
932     MAX_COST_TO_CHARGE_USED_BY = l_association_rec.MAX_COST_TO_CHARGE_USED_BY,
933     MAX_COST_CURRENCY_CODE = l_association_rec.MAX_COST_CURRENCY_CODE,
934     METRIC_CLASS = l_association_rec.METRIC_CLASS,
935    FULFILL_ON_TYPE_CODE = l_association_rec.FULFILL_ON_TYPE_CODE,
936     ATTRIBUTE_CATEGORY = l_association_rec.ATTRIBUTE_CATEGORY,
937     ATTRIBUTE1 = l_association_rec.ATTRIBUTE1,
938     ATTRIBUTE2 = l_association_rec.ATTRIBUTE2,
939     ATTRIBUTE3 = l_association_rec.ATTRIBUTE3,
940     ATTRIBUTE4 = l_association_rec.ATTRIBUTE4,
941     ATTRIBUTE5 = l_association_rec.ATTRIBUTE5,
942     ATTRIBUTE6 = l_association_rec.ATTRIBUTE6,
943     ATTRIBUTE7 = l_association_rec.ATTRIBUTE7,
944     ATTRIBUTE8 = l_association_rec.ATTRIBUTE8,
945     ATTRIBUTE9 = l_association_rec.ATTRIBUTE9,
946     ATTRIBUTE10 = l_association_rec.ATTRIBUTE10,
947     ATTRIBUTE11 = l_association_rec.ATTRIBUTE11,
948     ATTRIBUTE12 = l_association_rec.ATTRIBUTE12,
949     ATTRIBUTE13 = l_association_rec.ATTRIBUTE13,
950     ATTRIBUTE14 = l_association_rec.ATTRIBUTE14,
951     ATTRIBUTE15 = l_association_rec.ATTRIBUTE15,
952     content_type = l_association_rec.content_type,
953     sequence_no = l_association_rec.sequence_no
954    WHERE object_association_id = l_association_rec.object_association_id
955    AND object_version_number = l_association_rec.object_version_number;
956 
957    IF (SQL%NOTFOUND) THEN
958       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
959          FND_MESSAGE.set_name('AMS', 'AMS_API_RECORD_NOT_FOUND');
960          FND_MSG_PUB.add;
961       END IF;
962       RAISE FND_API.g_exc_error;
963    END IF;
964 
965    -------------------- finish --------------------------
966    IF FND_API.to_boolean(p_commit) THEN
967       COMMIT;
968    END IF;
969 
970    FND_MSG_PUB.count_and_get(
971          p_encoded => FND_API.g_false,
972          p_count   => x_msg_count,
973          p_data    => x_msg_data
974    );
975 
976    IF (AMS_DEBUG_HIGH_ON) THEN
977 
978 
979 
980    AMS_Utility_PVT.debug_message(l_full_name ||': end');
981 
982    END IF;
983 
984 EXCEPTION
985 
986    WHEN FND_API.g_exc_error THEN
987       ROLLBACK TO update_association;
988       x_return_status := FND_API.g_ret_sts_error;
989       FND_MSG_PUB.count_and_get(
990             p_encoded => FND_API.g_false,
991             p_count   => x_msg_count,
992             p_data    => x_msg_data
993       );
994 
995    WHEN FND_API.g_exc_unexpected_error THEN
996       ROLLBACK TO update_association;
997       x_return_status := FND_API.g_ret_sts_unexp_error ;
998       FND_MSG_PUB.count_and_get(
999             p_encoded => FND_API.g_false,
1000             p_count   => x_msg_count,
1001             p_data    => x_msg_data
1002       );
1003 
1004    WHEN OTHERS THEN
1005       ROLLBACK TO update_association;
1006       x_return_status := FND_API.g_ret_sts_unexp_error ;
1007 
1008       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_unexp_error)
1009       THEN
1010          FND_MSG_PUB.add_exc_msg(g_pkg_name, l_api_name);
1011       END IF;
1012 
1013       FND_MSG_PUB.count_and_get(
1014             p_encoded => FND_API.g_false,
1015             p_count   => x_msg_count,
1016             p_data    => x_msg_data
1017       );
1018 
1019 END update_association;
1020 --------------------------------------------------------------------
1021 -- PROCEDURE
1022 --    validate_association
1023 --
1024 -- HISTORY
1025 --  11/10/99     sugupta    created
1026 --------------------------------------------------------------------
1027 PROCEDURE validate_association(
1028    p_api_version       IN  NUMBER,
1029    p_init_msg_list     IN  VARCHAR2 := FND_API.g_false,
1030    p_validation_level  IN  NUMBER   := FND_API.g_valid_level_full,
1031 
1032    x_return_status     OUT NOCOPY VARCHAR2,
1033    x_msg_count         OUT NOCOPY NUMBER,
1034    x_msg_data          OUT NOCOPY VARCHAR2,
1035 
1036    p_association_rec          IN  association_rec_type
1037 )
1038 IS
1039 
1040    l_api_version CONSTANT NUMBER       := 1.0;
1041    l_api_name    CONSTANT VARCHAR2(30) := 'validate_association';
1042    l_full_name   CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
1043    l_return_status VARCHAR2(1);
1044 
1045 BEGIN
1046 
1047    ----------------------- initialize --------------------
1048    IF (AMS_DEBUG_HIGH_ON) THEN
1049 
1050    AMS_Utility_PVT.debug_message(l_full_name||': start');
1051    END IF;
1052 
1053    IF FND_API.to_boolean(p_init_msg_list) THEN
1054       FND_MSG_PUB.initialize;
1055    END IF;
1056 
1057    IF NOT FND_API.compatible_api_call(
1058          l_api_version,
1059          p_api_version,
1060          l_api_name,
1061          g_pkg_name
1062    ) THEN
1063       RAISE FND_API.g_exc_unexpected_error;
1064    END IF;
1065 
1066    x_return_status := FND_API.g_ret_sts_success;
1067 
1068    ---------------------- validate ------------------------
1069    IF (AMS_DEBUG_HIGH_ON) THEN
1070 
1071    AMS_Utility_PVT.debug_message(l_full_name||': check items');
1072    END IF;
1073 
1074    IF p_validation_level >= JTF_PLSQL_API.g_valid_level_item THEN
1075       check_association_items(
1076          p_association_rec        => p_association_rec,
1077          p_validation_mode => JTF_PLSQL_API.g_create,
1078          x_return_status   => l_return_status
1079       );
1080 
1081       IF l_return_status = FND_API.g_ret_sts_unexp_error THEN
1082          RAISE FND_API.g_exc_unexpected_error;
1083       ELSIF l_return_status = FND_API.g_ret_sts_error THEN
1084          RAISE FND_API.g_exc_error;
1085       END IF;
1086    END IF;
1087 
1088    IF (AMS_DEBUG_HIGH_ON) THEN
1089 
1090 
1091 
1092    AMS_Utility_PVT.debug_message(l_full_name||': check record');
1093 
1094    END IF;
1095 
1096    IF p_validation_level >= JTF_PLSQL_API.g_valid_level_record THEN
1097       check_association_record(
1098          p_association_rec       => p_association_rec,
1099          x_return_status  => l_return_status
1100       );
1101 
1102       IF l_return_status = FND_API.g_ret_sts_unexp_error THEN
1103          RAISE FND_API.g_exc_unexpected_error;
1104       ELSIF l_return_status = FND_API.g_ret_sts_error THEN
1105          RAISE FND_API.g_exc_error;
1106       END IF;
1107    END IF;
1108 
1109    -------------------- finish --------------------------
1110    FND_MSG_PUB.count_and_get(
1111          p_encoded => FND_API.g_false,
1112          p_count   => x_msg_count,
1113          p_data    => x_msg_data
1114    );
1115 
1116    IF (AMS_DEBUG_HIGH_ON) THEN
1117 
1118 
1119 
1120    AMS_Utility_PVT.debug_message(l_full_name ||': end');
1121 
1122    END IF;
1123 
1124 EXCEPTION
1125 
1126    WHEN FND_API.g_exc_error THEN
1127       x_return_status := FND_API.g_ret_sts_error;
1128       FND_MSG_PUB.count_and_get(
1129             p_encoded => FND_API.g_false,
1130             p_count   => x_msg_count,
1131             p_data    => x_msg_data
1132       );
1133 
1134    WHEN FND_API.g_exc_unexpected_error THEN
1135       x_return_status := FND_API.g_ret_sts_unexp_error ;
1136       FND_MSG_PUB.count_and_get(
1137             p_encoded => FND_API.g_false,
1138             p_count   => x_msg_count,
1139             p_data    => x_msg_data
1140       );
1141 
1142    WHEN OTHERS THEN
1143       x_return_status := FND_API.g_ret_sts_unexp_error;
1144       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_unexp_error)
1145       THEN
1146          FND_MSG_PUB.add_exc_msg(g_pkg_name, l_api_name);
1147       END IF;
1148 
1149       FND_MSG_PUB.count_and_get(
1150             p_encoded => FND_API.g_false,
1151             p_count   => x_msg_count,
1152             p_data    => x_msg_data
1153       );
1154 
1155 END validate_association;
1156 ---------------------------------------------------------------------
1157 -- PROCEDURE
1158 --    check_association
1159 --
1160 -- HISTORY
1161 --  11/10/99     sugupta    created
1162 ---------------------------------------------------------------------
1163 
1164 FUNCTION check_association(
1165    p_master_type       IN   VARCHAR2,
1166    p_master_id      IN   NUMBER,
1167    p_using_type       IN   VARCHAR2,
1168    p_using_id      IN   NUMBER
1169 ) RETURN VARCHAR2
1170 IS
1171 
1172 l_foreign_table      VARCHAR2(30);
1173 l_foreign_table_id   VARCHAR2(30);
1174 
1175 BEGIN
1176 
1177    IF p_master_type = 'EVEH'
1178    THEN l_foreign_table := 'AMS_EVENT_HEADERS_ALL_B';
1179       l_foreign_table_id := 'EVENT_HEADER_ID';
1180    ELSIF p_master_type = 'EVEO'
1181    THEN l_foreign_table := 'AMS_EVENT_OFFERS_ALL_B';
1182      l_foreign_table_id := 'EVENT_OFFER_ID';
1183    ELSIF p_master_type = 'EONE'
1184      THEN l_foreign_table := 'AMS_EVENT_OFFERS_ALL_B';
1185       l_foreign_table_id := 'EVENT_OFFER_ID';
1186    ELSIF p_master_type = 'CAMP'
1187      THEN l_foreign_table := 'AMS_CAMPAIGNS_ALL_B';
1188       l_foreign_table_id := 'CAMPAIGN_ID';
1189    ELSIF p_master_type = 'CSCH'
1190    THEN l_foreign_table := 'AMS_CAMPAIGN_SCHEDULES_B';
1191       l_foreign_table_id := 'SCHEDULE_ID';
1192    ELSE
1193 
1194      return FND_API.g_false;
1195    END IF;
1196 -- call fk utility to check master....will call again later to check for using..
1197 
1198    IF AMS_Utility_PVT.check_fk_exists(
1199       l_foreign_table,
1200       l_foreign_table_id,
1201       p_master_id
1202       ) =  FND_API.g_false
1203    THEN
1204          IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error)
1205          THEN
1206             FND_MESSAGE.set_name('AMS', 'AMS_OBJ_INVALID_MASTER_ID');
1207             FND_MSG_PUB.add;
1208          END IF;
1209 
1210        return FND_API.g_false;
1211    END IF;
1212 
1213    IF p_using_type = 'EVEH'
1214      THEN  l_foreign_table := 'AMS_EVENT_HEADERS_ALL_B';
1215       l_foreign_table_id := 'EVENT_HEADER_ID';
1216    ELSIF p_using_type = 'EVEO'
1217      THEN l_foreign_table := 'AMS_EVENT_OFFERS_ALL_B';
1218       l_foreign_table_id := 'EVENT_OFFER_ID';
1219 
1220    ELSIF p_using_type = 'EONE'
1221      THEN l_foreign_table := 'AMS_EVENT_OFFERS_ALL_B';
1222       l_foreign_table_id := 'EVENT_OFFER_ID';
1223 
1224      ELSIF p_using_type = 'CAMP'
1225      THEN l_foreign_table := 'AMS_CAMPAIGNS_ALL_B';
1226       l_foreign_table_id := 'CAMPAIGN_ID';
1227    ELSIF p_using_type = 'DELV'
1228    THEN l_foreign_table := 'AMS_DELIVERABLES_ALL_B';
1229       l_foreign_table_id := 'DELIVERABLE_ID';
1230    ELSE
1231       return FND_API.g_false;
1232    END IF;
1233 
1234      IF AMS_Utility_PVT.check_fk_exists(
1235           l_foreign_table,
1236           l_foreign_table_id,
1237           p_using_id
1238         ) =  FND_API.g_false
1239      THEN
1240          IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error)
1241          THEN
1242             FND_MESSAGE.set_name('AMS', 'AMS_OBJ_INVALID_USING_ID');
1243             FND_MSG_PUB.add;
1244          END IF;
1245 
1246          return FND_API.g_false;
1247      END IF;
1248   return fnd_api.g_true;
1249 END check_association;
1250 
1251 ---------------------------------------------------------------------
1252 -- PROCEDURE
1253 --    check_association_req_items
1254 --
1255 -- HISTORY
1256 --  11/10/99     sugupta    created
1257 ---------------------------------------------------------------------
1258 PROCEDURE check_association_req_items(
1259    p_association_rec       IN  association_rec_type,
1260    x_return_status  OUT NOCOPY VARCHAR2
1261 )
1262 IS
1263 BEGIN
1264 
1265    x_return_status := FND_API.g_ret_sts_success;
1266 
1267    ------------------------ user_status_id --------------------------
1268    IF p_association_rec.master_object_id IS NULL THEN
1269       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error)
1270       THEN
1271          FND_MESSAGE.set_name('AMS', 'AMS_OBJ_NO_MASTER_OBJ_ID');
1272          FND_MSG_PUB.add;
1273       END IF;
1274 
1275       x_return_status := FND_API.g_ret_sts_error;
1276       RETURN;
1277    END IF;
1278 
1279    IF p_association_rec.using_object_id IS NULL THEN
1280       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error)
1281       THEN
1282          FND_MESSAGE.set_name('AMS', 'AMS_OBJ_NO_USING_OBJ_ID');
1283          FND_MSG_PUB.add;
1284       END IF;
1285 
1286       x_return_status := FND_API.g_ret_sts_error;
1287       RETURN;
1288    END IF;
1289 
1290    IF p_association_rec.using_object_type IS NULL THEN
1291       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error)
1292       THEN
1293          FND_MESSAGE.set_name('AMS', 'AMS_OBJ_NO_USING_OBJ_TYPE');
1294          FND_MSG_PUB.add;
1295       END IF;
1296 
1297       x_return_status := FND_API.g_ret_sts_error;
1298       RETURN;
1299    END IF;
1300 
1301    IF p_association_rec.master_object_type IS NULL THEN
1302       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error)
1303       THEN
1304          FND_MESSAGE.set_name('AMS', 'AMS_OBJ_NO_MASTER_OBJ_TYPE');
1305          FND_MSG_PUB.add;
1306       END IF;
1307 
1308       x_return_status := FND_API.g_ret_sts_error;
1309       RETURN;
1310    END IF;
1311 
1312    IF p_association_rec.primary_flag IS NULL THEN
1313       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error)
1314       THEN
1315          FND_MESSAGE.set_name('AMS', 'AMS_OBJ_NO_PRIMARY_FLAG');
1316          FND_MSG_PUB.add;
1317       END IF;
1318 
1319       x_return_status := FND_API.g_ret_sts_error;
1320       RETURN;
1321    END IF;
1322 
1323 END check_association_req_items;
1324 ---------------------------------------------------------------------
1325 -- PROCEDURE
1326 --    check_association_uk_items
1327 --
1328 -- HISTORY
1329 --  11/10/99     sugupta    created
1330 ---------------------------------------------------------------------
1331 PROCEDURE check_association_uk_items(
1332    p_association_rec        IN  association_rec_type,
1333    p_validation_mode IN  VARCHAR2 := JTF_PLSQL_API.g_create,
1334    x_return_status   OUT NOCOPY VARCHAR2
1335 )
1336 IS
1337    l_valid_flag  VARCHAR2(1) := 'N';
1338 
1339    l_using_id   NUMBER ;
1340    l_master_objid  NUMBER ;
1341    l_using_objType   VARCHAR2(10);
1342    l_master_objType  VARCHAR2(10);
1343 
1344    CURSOR c_check_obj (
1345       p_using_id       IN NUMBER
1346      ,p_using_objType  IN VARCHAR2
1347      ,p_masterobjId    IN NUMBER
1348      ,p_masterobjType  IN VARCHAR2)
1349    IS
1350    SELECT  DISTINCT 'Y'
1351    FROM ams_object_associations
1352    WHERE master_object_type = p_masterobjType
1353    AND  master_object_id = p_masterobjId
1354    AND using_object_type = p_using_objType
1355    AND using_object_id = p_using_id;
1356 
1357 
1358 BEGIN
1359 
1360    x_return_status := FND_API.g_ret_sts_success;
1361 
1362    -- For create_associations, when association_id is passed in, we need to
1363    -- check if this association_id is unique.
1364    --
1365    IF p_validation_mode = JTF_PLSQL_API.g_create
1366    AND p_association_rec.object_association_id IS NOT NULL
1367    THEN
1368       IF AMS_Utility_PVT.check_uniqueness(
1369             'ams_object_associations',
1370             'object_association_id = ' || p_association_rec.object_association_id
1371          ) = FND_API.g_false
1372       THEN
1373          IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error)
1374          THEN
1375             FND_MESSAGE.set_name('AMS', 'AMS_OBJ_DUPLICATE_ID');
1376             FND_MSG_PUB.add;
1377          END IF;
1378          x_return_status := FND_API.g_ret_sts_error;
1379          RETURN;
1380       END IF;
1381    END IF;
1382 
1383    IF p_validation_mode = JTF_PLSQL_API.g_create
1384    AND  p_association_rec.using_object_id <> FND_API.g_miss_num
1385    AND  p_association_rec.master_object_id <> FND_API.g_miss_num
1386    AND p_association_rec.using_object_type <> FND_API.g_miss_char
1387    AND  p_association_rec.master_object_type <> FND_API.g_miss_char
1388    THEN
1389       OPEN  c_check_obj(p_association_rec.using_object_id,p_association_rec.using_object_type,p_association_rec.master_object_id,p_association_rec.master_object_type);
1390       FETCH c_check_obj INTO l_valid_flag;
1391       CLOSE c_check_obj;
1392 
1393       IF l_valid_flag = 'Y' THEN
1394          IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error)
1395          THEN
1396             FND_MESSAGE.set_name('AMS','AMS_ACCESS_DUPLICATE_ID');
1397             FND_MSG_PUB.add;
1398          END IF;
1399          x_return_status := FND_API.g_ret_sts_error;
1400          RETURN;
1401       END IF;
1402    END IF;
1403 
1404 
1405 END check_association_uk_items;
1406 
1407 ---------------------------------------------------------------------
1408 -- PROCEDURE
1409 --    check_association_lookup_fk
1410 --
1411 -- HISTORY
1412 --  11/10/99     sugupta    created
1413 --  07/15/00     ptendulk   Added condition to check fulfill_on_type_code,
1414 --                          max_cost_currency_code not null before doing
1415 --                          fk check
1416 ---------------------------------------------------------------------
1417 PROCEDURE check_association_lookup_fk(
1418    p_association_rec        IN  association_rec_type,
1419    x_return_status   OUT NOCOPY VARCHAR2
1420 )
1421 IS
1422 
1423 l_usage_type    VARCHAR2(30);
1424 l_master_type  VARCHAR2(30);
1425 l_using_type   VARCHAR2(30);
1426 l_master_id    NUMBER;
1427 l_using_id     NUMBER;
1428 l_additional_where_clause     VARCHAR2(4000);
1429 
1430 BEGIN
1431 
1432    x_return_status := FND_API.g_ret_sts_success;
1433 
1434    ----------------------- association to object  ------------------------
1435    IF p_association_rec.usage_type <> FND_API.g_miss_char THEN
1436    l_usage_type := p_association_rec.usage_type;
1437       IF AMS_Utility_PVT.check_lookup_exists(
1438             p_lookup_type => 'AMS_OBJECT_USAGE_TYPE',
1439             p_lookup_code => p_association_rec.usage_type
1440          ) = FND_API.g_false
1441       THEN
1442          IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error)
1443          THEN
1444             FND_MESSAGE.set_name('AMS', 'AMS_OBJ_INVALID_USAGE_TYPE');
1445             FND_MSG_PUB.add;
1446          x_return_status := FND_API.g_ret_sts_error;
1447          RETURN;
1448        END IF;
1449       ELSE
1450         /* master and using object lookup and their association with
1451            usage type logic*/
1452       /* check for master object type lookup..*/
1453 
1454          IF p_association_rec.master_object_type <> FND_API.g_miss_char THEN
1455          IF AMS_Utility_PVT.check_lookup_exists(
1456              p_lookup_type => 'AMS_MASTER_OBJECT_TYPE',
1457              p_lookup_code => p_association_rec.master_object_type
1458              ) = FND_API.g_false
1459          THEN
1460                IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error)
1461                THEN
1462                 FND_MESSAGE.set_name('AMS', 'AMS_OBJ_INVALID_MASTER_TYPE');
1463                 FND_MSG_PUB.add;
1464                 x_return_status := FND_API.g_ret_sts_error;
1465                 RETURN;
1466                END IF;
1467          END IF;
1468          END IF;
1469 
1470       -- check for using object type lookup..
1471        IF p_association_rec.using_object_type <> FND_API.g_miss_char THEN
1472           IF AMS_Utility_PVT.check_lookup_exists(
1473                 p_lookup_type => 'AMS_USING_OBJECT_TYPE',
1474                 p_lookup_code => p_association_rec.using_object_type
1475              ) = FND_API.g_false
1476           THEN
1477                IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error)
1478                THEN
1479                 FND_MESSAGE.set_name('AMS', 'AMS_OBJ_INVALID_USING_TYPE');
1480                 FND_MSG_PUB.add;
1481                 x_return_status := FND_API.g_ret_sts_error;
1482                 RETURN;
1483                END IF;
1484           END IF;
1485          END IF; /* using obj type*/
1486    ----    check for fk id's....
1487        IF p_association_rec.master_object_id <>  FND_API.g_miss_num THEN
1488       l_master_id := p_association_rec.master_object_id;
1489        END IF;
1490 
1491        IF p_association_rec.using_object_id <>  FND_API.g_miss_num THEN
1492           l_using_id := p_association_rec.using_object_id;
1493          END IF;
1494 
1495    ---    check corersponsing fk id's for master and using types..
1496       IF (p_association_rec.master_object_type <> FND_API.g_miss_char
1497          AND p_association_rec.using_object_type <> FND_API.g_miss_char) THEN
1498 
1499          l_master_type := p_association_rec.master_object_type;
1500          l_using_type := p_association_rec.using_object_type;
1501 
1502          IF check_association(l_master_type,l_master_id, l_using_type, l_using_id) = FND_API.g_false
1503          THEN
1504             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error)
1505                THEN
1506                FND_MESSAGE.set_name('AMS', 'AMS_OBJ_INVALID_ASSOCIATION');
1507              FND_MSG_PUB.add;
1508                x_return_status := FND_API.g_ret_sts_error;
1509                RETURN;
1510              END IF;
1511           END IF; /* check association */
1512       END IF; /* check id's if types not null*/
1513     END IF; /* usage type lookup exists */
1514    END IF; /* usage type lookup not fnd_api.g_miss_char */
1515    -------------------------max_cost_currency_code--------------------
1516       l_additional_where_clause  := ' enabled_flag '||''''||'Y'||'''';
1517   IF p_association_rec.max_cost_currency_code <> FND_API.g_miss_char
1518   AND p_association_rec.max_cost_currency_code IS NOT NULL THEN
1519       IF AMS_Utility_PVT.Check_FK_Exists (
1520              p_table_name                  => 'FND_CURRENCIES'
1521             ,p_pk_name                    => 'CURRENCY_CODE'
1522             ,p_pk_value                   => p_association_rec.max_cost_currency_code
1523             ,p_pk_data_type               => AMS_Utility_PVT.G_VARCHAR2
1524             ,p_additional_where_clause  => l_additional_where_clause
1525          ) = FND_API.G_FALSE
1526       THEN
1527          IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error)
1528          THEN
1529             FND_MESSAGE.set_name('AMS', 'AMS_OBJ_BAD_CURRENCY_CODE');
1530             FND_MSG_PUB.add;
1531          END IF;
1532 
1533          x_return_status := FND_API.g_ret_sts_error;
1534          RETURN;
1535       END IF;
1536    END IF;
1537    -------------------------fulfill_on_type_code--------------------
1538   /**
1539     IF p_association_rec.fulfill_on_type_code <> FND_API.g_miss_char
1540       AND p_association_rec.fulfill_on_type_code IS NOT NULL THEN
1541       IF AMS_Utility_PVT.check_lookup_exists(
1542              p_lookup_type => 'AMS_EVENT_FULFILL_ON',
1543             p_lookup_code => p_association_rec.fulfill_on_type_code
1544          ) = FND_API.g_false
1545       THEN
1546          IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error)
1547          THEN
1548             FND_MESSAGE.set_name('AMS', 'AMS_OBJ_BAD_FULFILL');
1549             FND_MSG_PUB.add;
1550          END IF;
1551 
1552          x_return_status := FND_API.g_ret_sts_error;
1553          RETURN;
1554       END IF;
1555    END IF;
1556    **/
1557 END check_association_lookup_fk;
1558 
1559 ---------------------------------------------------------------------
1560 -- PROCEDURE
1561 --    check_association_flag_items
1562 --
1563 -- HISTORY
1564 --  11/10/99     sugupta    created
1565 ---------------------------------------------------------------------
1566 PROCEDURE check_association_flag_items(
1567    p_association_rec        IN  association_rec_type,
1568    x_return_status   OUT NOCOPY VARCHAR2
1569 )
1570 IS
1571 BEGIN
1572 
1573    x_return_status := FND_API.g_ret_sts_success;
1574 
1575    ----------------------- primary_flag ------------------------
1576    IF p_association_rec.primary_flag <> FND_API.g_miss_char
1577       AND p_association_rec.primary_flag IS NOT NULL
1578    THEN
1579       IF AMS_Utility_PVT.is_Y_or_N(p_association_rec.primary_flag) = FND_API.g_false
1580       THEN
1581          IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error)
1582          THEN
1583             FND_MESSAGE.set_name('AMS', 'AMS_OBJ_BAD_PRIMARY_FLAG');
1584             FND_MSG_PUB.add;
1585          END IF;
1586 
1587          x_return_status := FND_API.g_ret_sts_error;
1588          RETURN;
1589       END IF;
1590    END IF;
1591    ----------------------- cost_frozen_flag ------------------------
1592    IF p_association_rec.cost_frozen_flag <> FND_API.g_miss_char
1593       AND p_association_rec.cost_frozen_flag IS NOT NULL
1594    THEN
1595       IF AMS_Utility_PVT.is_Y_or_N(p_association_rec.cost_frozen_flag) = FND_API.g_false
1596       THEN
1597          IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error)
1598          THEN
1599             FND_MESSAGE.set_name('AMS', 'AMS_OBJ_BAD_COST_FROZEN_FLAG');
1600             FND_MSG_PUB.add;
1601          END IF;
1602 
1603          x_return_status := FND_API.g_ret_sts_error;
1604          RETURN;
1605       END IF;
1606     END IF;
1607 
1608 END check_association_flag_items;
1609 
1610 ---------------------------------------------------------------------
1611 -- PROCEDURE
1612 --    check_association_dates
1613 --
1614 -- HISTORY
1615 --  10/30/01     musman    created
1616 ---------------------------------------------------------------------
1617 PROCEDURE check_association_dates(
1618    p_association_rec        IN  association_rec_type,
1619    x_return_status   OUT NOCOPY VARCHAR2
1620 )
1621 IS
1622 
1623 CURSOR c_eveh_end_Date(l_event_id IN NUMBER)
1624 IS
1625 SELECT active_to_date
1626 FROM ams_event_headers_all_b
1627 WHERE event_header_id = l_event_id;
1628 
1629 CURSOR c_eveo_end_date(l_event_offer_id IN NUMBER)
1630 IS
1631 SELECT event_end_date
1632 FROM ams_event_offers_all_b
1633 WHERE event_offer_id = l_event_offer_id;
1634 
1635 CURSOR c_camp_end_date(l_camp_id IN NUMBER)
1636 IS
1637 SELECT actual_exec_end_date
1638 FROM ams_campaigns_all_b
1639 WHERE campaign_id = l_camp_id;
1640 
1641 CURSOR c_csch_end_date(l_camp_sche_id IN NUMBER)
1642 IS
1643 SELECT end_date_time
1644 FROM ams_campaign_schedules_b
1645 WHERE  schedule_id = l_camp_sche_id;
1646 
1647 l_end_date date ;
1648 
1649 
1650 BEGIN
1651 
1652    x_return_status := FND_API.g_ret_sts_success;
1653 
1654 
1655    IF p_association_rec.using_object_type = 'DELV'
1656    THEN
1657 
1658        IF p_association_rec.master_object_type = 'CAMP'
1659        THEN
1660           OPEN c_camp_end_date(p_association_rec.master_object_id);
1661           FETCH  c_camp_end_date INTO l_end_date;
1662           CLOSE c_camp_end_date;
1663        ELSIF p_association_rec.master_object_type = 'EVEH'
1664        THEN
1665           OPEN c_eveh_end_date(p_association_rec.master_object_id);
1666           FETCH  c_eveh_end_date INTO l_end_date;
1667           CLOSE c_eveh_end_date;
1668        ELSIF p_association_rec.master_object_type = 'EVEO'
1669        THEN
1670           OPEN c_eveo_end_date(p_association_rec.master_object_id);
1671           FETCH  c_eveo_end_date INTO l_end_date;
1672           CLOSE c_eveo_end_date;
1673        ELSIF p_association_rec.master_object_type = 'EONE'
1674        THEN
1675           OPEN c_eveo_end_date(p_association_rec.master_object_id);
1676           FETCH  c_eveo_end_date INTO l_end_date;
1677           CLOSE c_eveo_end_date;
1678        ELSIF p_association_rec.master_object_type = 'CSCH'
1679        THEN
1680           OPEN c_csch_end_date(p_association_rec.master_object_id);
1681           FETCH  c_csch_end_date INTO l_end_date;
1682           CLOSE c_csch_end_date;
1683        ELSE
1684           IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error)
1685           THEN
1686              FND_MESSAGE.set_name('AMS', 'AMS_OBJ_INVALID_MASTER_TYPE');
1687              FND_MSG_PUB.add;
1688              x_return_status := FND_API.g_ret_sts_error;
1689              RETURN;
1690           END IF;
1691        END IF;
1692 
1693        IF p_association_rec.quantity_needed_by_date IS NOT NULL
1694        AND p_association_rec.quantity_needed_by_date <> FND_API.g_miss_date
1695        THEN
1696           IF p_association_rec.quantity_needed_by_date > l_end_date
1697           THEN
1698              IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error)
1699              THEN
1700                 FND_MESSAGE.set_name('AMS', 'AMS_MASTER_OBJ_INVALID_DATES');
1701                 FND_MSG_PUB.add;
1702              END IF;
1703              x_return_status := FND_API.g_ret_sts_error;
1704              RETURN;
1705           END IF;
1706        END IF;
1707 
1708    END IF; --using_object_type is DELV
1709 
1710 END check_association_dates;
1711 ---------------------------------------------------------------------
1712 -- PROCEDURE
1713 --    check_association_items
1714 --
1715 -- HISTORY
1716 --  11/10/99     sugupta    created
1717 ---------------------------------------------------------------------
1718 PROCEDURE check_association_items(
1719    p_association_rec        IN  association_rec_type,
1720    p_validation_mode IN  VARCHAR2 := JTF_PLSQL_API.g_create,
1721    x_return_status   OUT NOCOPY VARCHAR2
1722 )
1723 IS
1724 BEGIN
1725 
1726    check_association_req_items(
1727       p_association_rec       => p_association_rec,
1728       x_return_status    => x_return_status
1729    );
1730 
1731    IF x_return_status <> FND_API.g_ret_sts_success THEN
1732       RETURN;
1733    END IF;
1734 
1735    check_association_uk_items(
1736       p_association_rec        => p_association_rec,
1737       p_validation_mode   => p_validation_mode,
1738       x_return_status     => x_return_status
1739    );
1740 
1741    IF x_return_status <> FND_API.g_ret_sts_success THEN
1742       RETURN;
1743    END IF;
1744 
1745    check_association_lookup_fk(
1746       p_association_rec       => p_association_rec,
1747       x_return_status    => x_return_status
1748    );
1749 
1750    IF x_return_status <> FND_API.g_ret_sts_success THEN
1751       RETURN;
1752    END IF;
1753 
1754    check_association_flag_items(
1755       p_association_rec        => p_association_rec,
1756       x_return_status   => x_return_status
1757    );
1758 
1759    IF x_return_status <> FND_API.g_ret_sts_success THEN
1760       RETURN;
1761    END IF;
1762 
1763 END check_association_items;
1764 ---------------------------------------------------------------------
1765 -- PROCEDURE
1766 --    check_association_record
1767 --
1768 -- HISTORY
1769 --  11/10/99     sugupta    created
1770 ---------------------------------------------------------------------
1771 PROCEDURE check_association_record(
1772    p_association_rec       IN  association_rec_type,
1773    x_return_status    OUT NOCOPY VARCHAR2
1774 )
1775 IS
1776 BEGIN
1777 
1778    x_return_status := FND_API.g_ret_sts_success;
1779 
1780    -- do other record level checkings
1781 
1782 END check_association_record;
1783 
1784 ---------------------------------------------------------------------
1785 -- PROCEDURE
1786 --    complete_association_rec
1787 --
1788 -- HISTORY
1789 --  11/10/99     sugupta    created
1790 ---------------------------------------------------------------------
1791 PROCEDURE complete_association_rec(
1792    p_association_rec      IN  association_rec_type,
1793    x_complete_rec    OUT NOCOPY association_rec_type
1794 )
1795 IS
1796 
1797    CURSOR c_association IS
1798    SELECT *
1799      FROM ams_object_associations
1800     WHERE object_association_id = p_association_rec.object_association_id;
1801 
1802    l_association_rec  c_association%ROWTYPE;
1803 
1804 BEGIN
1805    x_complete_rec := p_association_rec;
1806 
1807    OPEN c_association;
1808    FETCH c_association INTO l_association_rec;
1809    IF c_association%NOTFOUND THEN
1810       CLOSE c_association;
1811       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
1812          FND_MESSAGE.set_name('AMS', 'AMS_API_RECORD_NOT_FOUND');
1813          FND_MSG_PUB.add;
1814       END IF;
1815       RAISE FND_API.g_exc_error;
1816    END IF;
1817    CLOSE c_association;
1818 
1819    IF p_association_rec.master_object_type = FND_API.g_miss_char THEN
1820       x_complete_rec.master_object_type := l_association_rec.master_object_type;
1821    END IF;
1822 
1823    IF p_association_rec.master_object_id = FND_API.g_miss_num THEN
1824       x_complete_rec.master_object_id := l_association_rec.master_object_id;
1825    END IF;
1826 
1827    IF p_association_rec.using_object_type = FND_API.g_miss_char THEN
1828       x_complete_rec.using_object_type := l_association_rec.using_object_type;
1829    END IF;
1830 
1831    IF p_association_rec.using_object_id = FND_API.g_miss_num THEN
1832       x_complete_rec.using_object_id := l_association_rec.using_object_id;
1833    END IF;
1834 
1835    IF p_association_rec.usage_type = FND_API.g_miss_char THEN
1836       x_complete_rec.usage_type := l_association_rec.usage_type;
1837    END IF;
1838 
1839    IF p_association_rec.quantity_needed = FND_API.g_miss_num THEN
1840       x_complete_rec.quantity_needed := l_association_rec.quantity_needed;
1841    END IF;
1842 
1843    IF p_association_rec.quantity_needed_by_date = FND_API.g_miss_date THEN
1844       x_complete_rec.quantity_needed_by_date := l_association_rec.quantity_needed_by_date;
1845    END IF;
1846 
1847    IF p_association_rec.primary_flag  = FND_API.g_miss_char THEN
1848       x_complete_rec.primary_flag  := l_association_rec.primary_flag ;
1849    END IF;
1850 
1851    IF p_association_rec.cost_frozen_flag  = FND_API.g_miss_char THEN
1852       x_complete_rec.cost_frozen_flag  := l_association_rec.cost_frozen_flag ;
1853    END IF;
1854 
1855    IF p_association_rec.pct_of_cost_to_charge_used_by  = FND_API.g_miss_num THEN
1856       x_complete_rec.pct_of_cost_to_charge_used_by  := l_association_rec.pct_of_cost_to_charge_used_by ;
1857    END IF;
1858 
1859    IF p_association_rec.max_cost_to_charge_used_by  = FND_API.g_miss_num THEN
1860       x_complete_rec.max_cost_to_charge_used_by  := l_association_rec.max_cost_to_charge_used_by ;
1861    END IF;
1862 
1863    IF p_association_rec.max_cost_currency_code  = FND_API.g_miss_char THEN
1864       x_complete_rec.max_cost_currency_code  := l_association_rec.max_cost_currency_code ;
1865    END IF;
1866 
1867 
1868    IF p_association_rec.metric_class  = FND_API.g_miss_char THEN
1869       x_complete_rec.metric_class  := l_association_rec.metric_class ;
1870    END IF;
1871 
1872    IF p_association_rec.content_type  = FND_API.g_miss_char THEN
1873       x_complete_rec.content_type  := l_association_rec.content_type ;
1874    END IF;
1875 
1876    IF p_association_rec.sequence_no  = FND_API.g_miss_num THEN
1877       x_complete_rec.sequence_no  := l_association_rec.sequence_no ;
1878    END IF;
1879 END complete_association_rec;
1880 ---------------------------------------------------------------------
1881 -- PROCEDURE
1882 --    init_association_rec
1883 --
1884 -- HISTORY
1885 --    11/23/1999  sugupta  Create.
1886 ---------------------------------------------------------------------
1887 PROCEDURE init_association_rec(
1888    x_association_rec  OUT NOCOPY  association_rec_type
1889 )
1890 IS
1891 BEGIN
1892 
1893    x_association_rec.OBJECT_ASSOCIATION_ID := FND_API.g_miss_num;
1894    x_association_rec.last_update_date := FND_API.g_miss_date;
1895    x_association_rec.last_updated_by := FND_API.g_miss_num;
1896    x_association_rec.creation_date := FND_API.g_miss_date;
1897    x_association_rec.created_by := FND_API.g_miss_num;
1898    x_association_rec.last_update_login := FND_API.g_miss_num;
1899    x_association_rec.object_version_number := FND_API.g_miss_num;
1900    x_association_rec.MASTER_OBJECT_TYPE := FND_API.g_miss_char;
1901    x_association_rec.MASTER_OBJECT_ID := FND_API.g_miss_num;
1902    x_association_rec.USING_OBJECT_TYPE := FND_API.g_miss_char;
1903    x_association_rec.USING_OBJECT_ID := FND_API.g_miss_num;
1904    x_association_rec.PRIMARY_FLAG := FND_API.g_miss_char;
1905    x_association_rec.USAGE_TYPE := FND_API.g_miss_char;
1906    x_association_rec.QUANTITY_NEEDED := FND_API.g_miss_num;
1907    x_association_rec.QUANTITY_NEEDED_BY_DATE := FND_API.g_miss_date;
1908    x_association_rec.COST_FROZEN_FLAG := FND_API.g_miss_char;
1909    x_association_rec.PCT_OF_COST_TO_CHARGE_USED_BY := FND_API.g_miss_num;
1910    x_association_rec.MAX_COST_TO_CHARGE_USED_BY := FND_API.g_miss_num;
1911    x_association_rec.MAX_COST_CURRENCY_CODE := FND_API.g_miss_char;
1912    x_association_rec.METRIC_CLASS := FND_API.g_miss_char;
1913    x_association_rec.FULFILL_ON_TYPE_CODE := FND_API.g_miss_char;
1914    x_association_rec.attribute1 := FND_API.g_miss_char;
1915    x_association_rec.attribute2 := FND_API.g_miss_char;
1916    x_association_rec.attribute3 := FND_API.g_miss_char;
1917    x_association_rec.attribute4 := FND_API.g_miss_char;
1918    x_association_rec.attribute5 := FND_API.g_miss_char;
1919    x_association_rec.attribute6 := FND_API.g_miss_char;
1920    x_association_rec.attribute7 := FND_API.g_miss_char;
1921    x_association_rec.attribute8 := FND_API.g_miss_char;
1922    x_association_rec.attribute9 := FND_API.g_miss_char;
1923    x_association_rec.attribute10 := FND_API.g_miss_char;
1924    x_association_rec.attribute11 := FND_API.g_miss_char;
1925    x_association_rec.attribute12 := FND_API.g_miss_char;
1926    x_association_rec.attribute13 := FND_API.g_miss_char;
1927    x_association_rec.attribute14 := FND_API.g_miss_char;
1928    x_association_rec.attribute15 := FND_API.g_miss_char;
1929    x_association_rec.content_type := FND_API.g_miss_char;
1930    x_association_rec.sequence_no := FND_API.g_miss_num;
1931 END init_association_rec;
1932 
1933 END AMS_Associations_PVT;