DBA Data[Home] [Help]

PACKAGE BODY: APPS.AME_CONDITIONS_API

Source


1 PACKAGE BODY AME_CONDITIONS_API AS
2 /* $Header: amecoapi.pkb 120.3 2006/03/15 01:23 pvelugul noship $ */
3 
4 X_AME_INSTALLATION_LEVEL varchar2(255);
5 procedure OWNER_TO_WHO (
6   X_OWNER in VARCHAR2,
7   X_CREATED_BY out nocopy NUMBER,
8   X_LAST_UPDATED_BY out nocopy NUMBER,
9   X_LAST_UPDATE_LOGIN out nocopy NUMBER
10 ) is
11 begin
12   X_CREATED_BY := AME_SEED_UTILITY.OWNER_AS_INTEGER(X_OWNER);
13   X_LAST_UPDATED_BY := AME_SEED_UTILITY.OWNER_AS_INTEGER(X_OWNER);
14   X_LAST_UPDATE_LOGIN := 0;
15 end OWNER_TO_WHO;
16 
17 procedure KEY_TO_IDS (
18   X_CONDITION_ID     in  VARCHAR2,
19   X_ATTRIBUTE_NAME   in  VARCHAR2,
20   X_CONDITION_COUNT  out nocopy NUMBER,
21   X_ATTRIBUTE_ID     out nocopy NUMBER
22 ) is
23   cursor CSR_GET_ATTRIBUTE
24   (
25     X_ATTRIBUTE_NAME in VARCHAR2
26   ) is
27    select ATTRIBUTE_ID
28    from   AME_ATTRIBUTES
29  where NAME = X_ATTRIBUTE_NAME
30    and sysdate between START_DATE
31    and nvl(END_DATE-(1/86400), sysdate);
32 
33   cursor CSR_IS_ATTRIBUTE_SEED
34   (
35     X_ATTRIBUTE_ID in VARCHAR2
36   ) is
37    select C.CREATED_BY
38    from   AME_ATTRIBUTES C
39    where  C.START_DATE =
40     (select min(A.START_DATE) from AME_ATTRIBUTES A
41       where A.ATTRIBUTE_ID = C.ATTRIBUTE_ID)
42    and    C.ATTRIBUTE_ID = X_ATTRIBUTE_ID;
43 
44   cursor CSR_GET_CURRENT_CONDITION
45   (
46     X_CONDITION_ID    in VARCHAR2
47   ) is
48    select COUNT(*)
49    from   AME_CONDITIONS
50    where  CONDITION_ID        = X_CONDITION_ID;
51   X_CREATED_BY NUMBER;
52 begin
53   open CSR_GET_ATTRIBUTE(
54     X_ATTRIBUTE_NAME
55     );
56   fetch CSR_GET_ATTRIBUTE into X_ATTRIBUTE_ID;
57   if (CSR_GET_ATTRIBUTE%notfound) then
58      X_ATTRIBUTE_ID := null;
59   end if;
60   close CSR_GET_ATTRIBUTE;
61 
62   if X_ATTRIBUTE_ID is not null then
63     open CSR_IS_ATTRIBUTE_SEED(
64       X_ATTRIBUTE_ID
65       );
66     fetch CSR_IS_ATTRIBUTE_SEED into X_CREATED_BY;
67     if (CSR_IS_ATTRIBUTE_SEED%notfound) OR (X_CREATED_BY <> AME_SEED_UTILITY.SEED_USER_ID)
68       then
69       X_CREATED_BY := null;
70     end if;
71     close CSR_IS_ATTRIBUTE_SEED;
72   end if;
73 
74   if X_ATTRIBUTE_ID is not null
75   then
76   open CSR_GET_CURRENT_CONDITION (
77     X_CONDITION_ID
78   );
79   fetch CSR_GET_CURRENT_CONDITION into X_CONDITION_COUNT;
80   close CSR_GET_CURRENT_CONDITION;
81   end if;
82 end KEY_TO_IDS;
83 
84 procedure VALIDATE_CONDITION(
85                      X_CONDITION_TYPE in VARCHAR2,
86                      X_ATTRIBUTE_NAME in VARCHAR2,
87                      X_PARAMETER_ONE  in VARCHAR2,
88                      X_PARAMETER_TWO  in VARCHAR2,
89                      X_PARAMETER_THREE in VARCHAR2,
90                      X_INCLUDE_UPPER_LIMIT in VARCHAR2,
91                      X_INCLUDE_LOWER_LIMIT in VARCHAR2
92 ) is
93   invalidConditionTypeException exception;
94   invalidCondAttrTypeException exception;
95   errorCode integer;
96   errorMessage ame_util.longestStringType;
97   X_ATTRIBUTE_TYPE varchar2(20);
98   X_PARAMETER_ONE_DATE date;
99   X_PARAMETER_TWO_DATE date;
100   X_PARAMETER_ONE_NUMBER number;
101   X_PARAMETER_TWO_NUMBER number;
102   begin
103     select ATTRIBUTE_TYPE
104       into X_ATTRIBUTE_TYPE
105       from AME_ATTRIBUTES
106      where NAME = X_ATTRIBUTE_NAME
107 		   and sysdate between START_DATE
108 		     and nvl(END_DATE-(1/86400), sysdate);
109 
110     if X_CONDITION_TYPE not in
111        (ame_util.ordinaryConditionType , ame_util.exceptionConditionType) then
112        raise invalidConditionTypeException;
113     end if;
114 
115     if X_ATTRIBUTE_TYPE = ame_util.booleanAttributeType then
116       if     (X_PARAMETER_ONE not in
117              (ame_util.booleanAttributeTrue, ame_util.booleanAttributeFalse))
118           or (X_PARAMETER_ONE is null)
119           or (X_PARAMETER_TWO is not null)
120           or (X_PARAMETER_THREE is not null)
121           or (X_INCLUDE_UPPER_LIMIT is not null)
122           or (X_INCLUDE_LOWER_LIMIT is not null) then
123          errorMessage :=
124          'OAM is attempting to upload an invalid boolean attribute condition.';
125          raise invalidCondAttrTypeException;
126       end if;
127     end if;
128 
129     if X_ATTRIBUTE_TYPE = ame_util.numberAttributeType then
130        if    (X_INCLUDE_LOWER_LIMIT is not null
131              and (X_INCLUDE_LOWER_LIMIT not in
132              (ame_util.booleanTrue,ame_util.booleanFalse)))
133           or (X_INCLUDE_UPPER_LIMIT is not null
134              and (X_INCLUDE_UPPER_LIMIT not in
135              (ame_util.booleanTrue,ame_util.booleanFalse))) then
136          errorMessage :=
137          'OAM is attempting to upload an invalid number attribute condition.';
138          raise invalidCondAttrTypeException;
139        end if;
140        if X_PARAMETER_ONE is not null then
141          select to_number(X_PARAMETER_ONE)
142            into X_PARAMETER_ONE_NUMBER
143            from dual;
144        end if;
145        if X_PARAMETER_TWO is not null then
146          select to_number(X_PARAMETER_TWO)
147            into X_PARAMETER_TWO_NUMBER
148            from dual;
149        end if;
150     end if;
151 
152     if X_ATTRIBUTE_TYPE = ame_util.currencyAttributeType then
153        if  (X_INCLUDE_LOWER_LIMIT is not null
154              and (X_INCLUDE_LOWER_LIMIT not in
155                  (ame_util.booleanTrue,ame_util.booleanFalse)))
156           or (X_INCLUDE_UPPER_LIMIT is not null
157              and (X_INCLUDE_UPPER_LIMIT not in
158                  (ame_util.booleanTrue,ame_util.booleanFalse)))
159           or X_PARAMETER_THREE is null then
160          errorMessage :=
161          'OAM is attempting to upload an invalid currency attribute condition.';
162          raise invalidCondAttrTypeException;
163        end if;
164        if X_PARAMETER_ONE is not null then
165          select to_number(X_PARAMETER_ONE)
166            into X_PARAMETER_ONE_NUMBER
167            from dual;
168        end if;
169        if X_PARAMETER_TWO is not null then
170          select to_number(X_PARAMETER_TWO)
171            into X_PARAMETER_TWO_NUMBER
172            from dual;
173        end if;
174     end if;
175 
176     if X_ATTRIBUTE_TYPE = ame_util.dateAttributeType then
177        if    (X_INCLUDE_LOWER_LIMIT is not null
178              and (X_INCLUDE_LOWER_LIMIT not in
179                  (ame_util.booleanTrue,ame_util.booleanFalse)))
180           or (X_INCLUDE_UPPER_LIMIT is not null
181              and (X_INCLUDE_UPPER_LIMIT not in
182                  (ame_util.booleanTrue,ame_util.booleanFalse))) then
183          errorMessage :=
184          'OAM is attempting to upload an invalid date attribute condition.';
185          raise invalidCondAttrTypeException;
186        end if;
187        if X_PARAMETER_ONE is not null then
188           select to_date(X_PARAMETER_ONE,'YYYY:MM:DD:HH24:MI:SS')
189             into X_PARAMETER_ONE_DATE
190             from dual;
191        end if;
192        if X_PARAMETER_TWO is not null then
193           select to_date(X_PARAMETER_TWO,'YYYY:MM:DD:HH24:MI:SS')
194             into X_PARAMETER_TWO_DATE
195             from dual;
196        end if;
197     end if;
198 
199     if X_ATTRIBUTE_TYPE = ame_util.stringAttributeType then
200        if    (X_PARAMETER_ONE is not null)
201           or (X_PARAMETER_TWO is not null)
202           or (X_PARAMETER_THREE is not null)
203           or (X_INCLUDE_LOWER_LIMIT is not null)
204           or (X_INCLUDE_UPPER_LIMIT is not null) then
205          errorMessage :=
206          'OAM is attempting to upload an invalid string attribute condition.';
207          raise invalidCondAttrTypeException;
208        end if;
209     end if;
210   exception
211     when invalidConditionTypeException then
212     errorMessage :=
213     'OAM is attempting to upload an invalid condition type.';
214     errorCode := -20001;
215     ame_util.runtimeException(packageNameIn => 'ame_conditions_api',
216                                routineNameIn => 'validate_condition',
217                                exceptionNumberIn => errorCode,
218                                exceptionStringIn => errorMessage);
219     raise_application_error(errorCode,
220                             errorMessage);
221     when invalidCondAttrTypeException then
222     errorCode := -20001;
223     ame_util.runtimeException(packageNameIn => 'ame_conditions_api',
224                                routineNameIn => 'validate_condition',
225                                exceptionNumberIn => errorCode,
226                                exceptionStringIn => errorMessage);
227     raise_application_error(errorCode,
228                             errorMessage);
229     when invalid_number then
230     errorMessage :=
231     'OAM is attempting to upload an invalid number or currency attribute condition.';
232     errorCode := -20001;
233     ame_util.runtimeException(packageNameIn => 'ame_conditions_api',
234                                routineNameIn => 'validate_condition',
235                                exceptionNumberIn => errorCode,
236                                exceptionStringIn => errorMessage);
237     raise_application_error(errorCode,
238                             errorMessage);
239 
240     when others then
241     ame_util.runtimeException('ame_conditions_api',
242                          'validate_condition',
243                          sqlcode,
244                          sqlerrm);
245     raise;
246 end VALIDATE_CONDITION;
247 
248 procedure INSERT_ROW (
249  X_CONDITION_ID                    in NUMBER,
250  X_CONDITION_KEY                   in VARCHAR2,
251  X_CONDITION_TYPE                  in VARCHAR2,
252  X_ATTRIBUTE_ID                    in NUMBER,
253  X_PARAMETER_ONE                   in VARCHAR2,
254  X_PARAMETER_TWO                   in VARCHAR2,
255  X_PARAMETER_THREE                 in VARCHAR2,
256  X_INCLUDE_UPPER_LIMIT             in VARCHAR2,
257  X_INCLUDE_LOWER_LIMIT             in VARCHAR2,
258  X_CREATED_BY                      in NUMBER,
259  X_CREATION_DATE                   in DATE,
260  X_LAST_UPDATED_BY                 in NUMBER,
261  X_LAST_UPDATE_DATE                in DATE,
262  X_LAST_UPDATE_LOGIN               in NUMBER,
263  X_START_DATE                      in DATE,
264  X_OBJECT_VERSION_NUMBER           in NUMBER)
265  is
266   lockHandle varchar2(500);
267   returnValue integer;
268 
269 begin
270   if X_AME_INSTALLATION_LEVEL is not null then
271     DBMS_LOCK.ALLOCATE_UNIQUE (lockname =>'AME_CONDITIONS.'||X_CONDITION_ID,lockhandle => lockHandle);
272   else
273     DBMS_LOCK.ALLOCATE_UNIQUE (lockname =>'AME_CONDITIONS.'||X_CONDITION_ID,lockhandle => lockHandle);
274   end if;
275   returnValue := DBMS_LOCK.REQUEST(lockhandle => lockHandle,timeout => 0,release_on_commit => true);
276   if returnValue = 0  then
277     insert into AME_CONDITIONS
278     (
279       CONDITION_ID,
280       CONDITION_KEY,
281       CONDITION_TYPE,
282       ATTRIBUTE_ID,
283       PARAMETER_ONE,
284       PARAMETER_TWO,
285       PARAMETER_THREE,
286       INCLUDE_UPPER_LIMIT,
287       INCLUDE_LOWER_LIMIT,
288       CREATED_BY,
289       CREATION_DATE,
290       LAST_UPDATED_BY,
291       LAST_UPDATE_DATE,
292       LAST_UPDATE_LOGIN,
293       START_DATE,
294       END_DATE,
295       OBJECT_VERSION_NUMBER
296     ) select
297      X_CONDITION_ID,
298      X_CONDITION_KEY,
299      X_CONDITION_TYPE,
300      X_ATTRIBUTE_ID,
301      X_PARAMETER_ONE,
302      X_PARAMETER_TWO,
303      X_PARAMETER_THREE,
304      X_INCLUDE_UPPER_LIMIT,
305      X_INCLUDE_LOWER_LIMIT,
306      X_CREATED_BY,
307      X_CREATION_DATE,
308      X_LAST_UPDATED_BY,
309      X_LAST_UPDATE_DATE,
310      X_LAST_UPDATE_LOGIN,
311      X_START_DATE,
312      AME_SEED_UTILITY.GET_DEFAULT_END_DATE,
313      X_OBJECT_VERSION_NUMBER
314      from sys.dual
315      where not exists (select NULL
316                        from AME_CONDITIONS
317                           where ((CONDITION_ID = X_CONDITION_ID
318                           and sysdate < nvl(END_DATE - (1/86400), sysdate + (1/86400)))
319                           or (X_AME_INSTALLATION_LEVEL is not null and CONDITION_KEY = X_CONDITION_KEY))
320          );
321   end if;
322 end INSERT_ROW;
323 
324 procedure DELETE_ROW (
325   X_CONDITION_ID in NUMBER
326 ) is
327 begin
328   delete from AME_CONDITIONS
329   where CONDITION_ID = X_CONDITION_ID;
330   if (sql%notfound) then
331     raise no_data_found;
332   end if;
333 end DELETE_ROW;
334 
335 function CREATE_CONDITION_KEY return VARCHAR2 as
336     cursor GET_DBID_CURSOR is
337       select to_char(DB.DBID)
338       from   V$DATABASE DB,
339              V$INSTANCE INSTANCE
340       where  upper(DB.NAME) = upper(INSTANCE.INSTANCE_NAME);
341       X_DATABASE_ID VARCHAR2(50);
342       X_NEW_CONDITION_KEY AME_CONDITIONS.CONDITION_KEY%TYPE;
343       X_CONDITION_COUNT NUMBER;
344       X_CONDITION_KEY_ID NUMBER;
345  begin
346       open GET_DBID_CURSOR;
347       fetch GET_DBID_CURSOR
348       into X_DATABASE_ID;
349       if GET_DBID_CURSOR%NOTFOUND then
350         -- This case will never happen, since every instance must be linked to a DB
351         X_DATABASE_ID := NULL;
352       end if;
353       close GET_DBID_CURSOR;
354       loop
355       -- derive CONDITION_KEY value
356         select AME_CONDITION_KEYS_S.NEXTVAL into X_CONDITION_KEY_ID from dual;
357       X_NEW_CONDITION_KEY := X_DATABASE_ID ||':'|| X_CONDITION_KEY_ID;
358       select count(*)
359         into X_CONDITION_COUNT
360         from AME_CONDITIONS
361        where upper(CONDITION_KEY) = upper(X_NEW_CONDITION_KEY)
362          and rownum < 2;
363       if X_CONDITION_COUNT = 0 then
364         exit;
365       end if;
366       end loop;
367       return(X_NEW_CONDITION_KEY);
368       exception
369       when others then
370       ame_util.runtimeException('ame_conditions_api',
371                               'create_condition_key',
372                               sqlcode,
373                               sqlerrm);
374       raise;
375 end CREATE_CONDITION_KEY;
376 
377 procedure LOAD_ROW (
378           X_CONDITION_ID        in VARCHAR2,
379           X_CONDITION_TYPE      in VARCHAR2,
380           X_ATTRIBUTE_NAME      in VARCHAR2,
381           X_PARAMETER_ONE       in VARCHAR2,
382           X_PARAMETER_TWO       in VARCHAR2,
383           X_PARAMETER_THREE     in VARCHAR2,
384           X_INCLUDE_UPPER_LIMIT in VARCHAR2,
385           X_INCLUDE_LOWER_LIMIT in VARCHAR2,
386           X_OWNER               in VARCHAR2,
387           X_LAST_UPDATE_DATE    in VARCHAR2
388 )
389 is
390   X_ATTRIBUTE_ID       NUMBER;
391   X_CONDITION_COUNT    NUMBER :=0;
392   X_CONDITION_KEY      VARCHAR2(100);
393   X_CREATED_BY         NUMBER;
394   X_LAST_UPDATED_BY    NUMBER;
395   X_LAST_UPDATE_LOGIN  NUMBER;
396 begin
397   -- Check whether the target database is at AME11510 or not
398   X_AME_INSTALLATION_LEVEL:=fnd_profile.value('AME_INSTALLATION_LEVEL');
399   KEY_TO_IDS (
400     X_CONDITION_ID,
401     X_ATTRIBUTE_NAME,
402     X_CONDITION_COUNT,
403     X_ATTRIBUTE_ID
404   );
405   VALIDATE_CONDITION(
406     X_CONDITION_TYPE,
407     X_ATTRIBUTE_NAME,
408     X_PARAMETER_ONE,
409     X_PARAMETER_TWO,
410     X_PARAMETER_THREE,
411     X_INCLUDE_UPPER_LIMIT,
412     X_INCLUDE_LOWER_LIMIT
413   );
414   OWNER_TO_WHO (
415     X_OWNER,
416     X_CREATED_BY,
417     X_LAST_UPDATED_BY,
418     X_LAST_UPDATE_LOGIN
419   );
420    begin
421 -- the current row was not found insert a new row
422    if (X_ATTRIBUTE_ID is not null) and (X_CONDITION_COUNT = 0) then
423      if X_AME_INSTALLATION_LEVEL is not null then
424        X_CONDITION_KEY := CREATE_CONDITION_KEY;
425      else
426        X_CONDITION_KEY := 'CHANGE_ME';
427      end if;
428      INSERT_ROW (
429        X_CONDITION_ID,
430        X_CONDITION_KEY,
431        X_CONDITION_TYPE,
432        X_ATTRIBUTE_ID,
433        X_PARAMETER_ONE,
434        X_PARAMETER_TWO,
435        X_PARAMETER_THREE,
436        X_INCLUDE_UPPER_LIMIT,
437        X_INCLUDE_LOWER_LIMIT,
438        X_CREATED_BY,
439        to_date(X_LAST_UPDATE_DATE,'YYYY/MM/DD HH24:MI:SS'),
440        X_LAST_UPDATED_BY,
441        to_date(X_LAST_UPDATE_DATE,'YYYY/MM/DD HH24:MI:SS'),
442        X_LAST_UPDATE_LOGIN,
443        to_date(X_LAST_UPDATE_DATE,'YYYY/MM/DD HH24:MI:SS'),
444        1);
445    end if;
446   -- the current row was found end date the current row
447   -- do not update or insert.
448   end;
449 exception
450     when others then
451     ame_util.runtimeException('ame_conditions_api',
452                          'load_row',
453                          sqlcode,
454                          sqlerrm);
455         raise;
456 end LOAD_ROW;
457 --
458 END AME_CONDITIONS_API;