DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_RU_RULE_PKG

Source


1 package body IGS_RU_RULE_PKG as
2 /* $Header: IGSUI11B.pls 115.12 2002/11/29 04:27:46 nsidana ship $ */
3 
4   l_rowid VARCHAR2(25);
5   old_references IGS_RU_RULE%RowType;
6   new_references IGS_RU_RULE%RowType;
7 
8   PROCEDURE Set_Column_Values (
9     p_action IN VARCHAR2,
10     x_rowid IN VARCHAR2 ,
11     x_sequence_number IN NUMBER ,
12     x_creation_date IN DATE ,
13     x_created_by IN NUMBER ,
14     x_last_update_date IN DATE ,
15     x_last_updated_by IN NUMBER ,
16     x_last_update_login IN NUMBER
17 ) as
18 
19     CURSOR cur_old_ref_values IS
20       SELECT   *
21       FROM     IGS_RU_RULE
22       WHERE    rowid = x_rowid;
23 
24   BEGIN
25 
26     l_rowid := x_rowid;
27 
28     -- Code for setting the Old and New Reference Values.
29     -- Populate Old Values.
30     Open cur_old_ref_values;
31     Fetch cur_old_ref_values INTO old_references;
32     IF (cur_old_ref_values%NOTFOUND) AND (p_action NOT IN ('INSERT', 'VALIDATE_INSERT')) THEN
33       IGS_RU_GEN_006.SET_TOKEN(' IGS_RU_RULE  : P_ACTION INSERT VALIDATE_INSERT   : IGSUI11B.PLS');
34       Fnd_Message.Set_Name ('FND', 'FORM_RECORD_DELETED');
35       IGS_GE_MSG_STACK.ADD;
36       App_Exception.Raise_Exception;
37       Close cur_old_ref_values;
38       Return;
39     END IF;
40     Close cur_old_ref_values;
41 
42     -- Populate New Values.
43     new_references.sequence_number := x_sequence_number;
44     IF (p_action = 'UPDATE') THEN
45       new_references.creation_date := old_references.creation_date;
46       new_references.created_by := old_references.created_by;
47     ELSE
48       new_references.creation_date := x_creation_date;
49       new_references.created_by := x_created_by;
50     END IF;
51     new_references.last_update_date := x_last_update_date;
52     new_references.last_updated_by := x_last_updated_by;
53     new_references.last_update_login := x_last_update_login;
54 
55   END Set_Column_Values;
56 
57   PROCEDURE Check_Constraints (
58    Column_Name IN VARCHAR2 ,
59    Column_Value IN VARCHAR2
60  )
61   as
62   BEGIN
63 	IF  column_name is null then
64      		NULL;
65 	ELSIF upper(Column_name) = 'SEQUENCE_NUMBER' Then
66      		new_references.sequence_number := igs_ge_number.to_num(COLUMN_VALUE);
67 	END IF;
68 	IF upper(Column_Name) = 'SEQUENCE_NUMBER' OR Column_Name IS NULL THEN
69 		IF new_references.sequence_number < 0 OR new_references.sequence_number > 999999 THEN
70 			Fnd_Message.Set_Name('IGS','IGS_GE_INVALID_VALUE');
71 			 IGS_GE_MSG_STACK.ADD;
72 			App_Exception.Raise_Exception;
73 		END IF;
74 	END IF;
75 
76   END Check_Constraints;
77 
78 
79 FUNCTION Get_PK_For_Validation (
80     x_sequence_number IN NUMBER
81 )return BOOLEAN as
82 
83     CURSOR cur_rowid IS
84       SELECT   rowid
85       FROM     IGS_RU_RULE
86       WHERE    sequence_number = x_sequence_number
87       FOR UPDATE NOWAIT;
88 
89     lv_rowid cur_rowid%RowType;
90 
91   BEGIN
92 
93     Open cur_rowid;
94     Fetch cur_rowid INTO lv_rowid;
95     IF (cur_rowid%FOUND) THEN
96      Close cur_rowid;
97      Return(TRUE);
98    ELSE
99       Close cur_rowid;
100       Return(FALSE);
101     END IF;
102 
103   END Get_PK_For_Validation;
104 
105   PROCEDURE Before_DML (
106     p_action IN VARCHAR2,
107     x_rowid IN VARCHAR2 ,
108     x_sequence_number IN NUMBER ,
109     x_creation_date IN DATE ,
110     x_created_by IN NUMBER ,
111     x_last_update_date IN DATE ,
112     x_last_updated_by IN NUMBER ,
113     x_last_update_login IN NUMBER
114   ) as
115   BEGIN
116 
117     Set_Column_Values (
118       p_action,
119       x_rowid,
120       x_sequence_number,
121       x_creation_date,
122       x_created_by,
123       x_last_update_date,
124       x_last_updated_by,
125       x_last_update_login
126     );
127 
128 
129     IF (p_action = 'INSERT') THEN
130 
131 	  IF Get_PK_For_Validation (
132 		new_references.sequence_number
133 	  ) THEN
134 		Fnd_Message.Set_Name('IGS','IGS_GE_RECORD_ALREADY_EXISTS');
135 		 IGS_GE_MSG_STACK.ADD;
136 		App_Exception.Raise_Exception;
137 	  END IF;
138 	  Check_Constraints;
139     ELSIF (p_action = 'UPDATE') THEN
140 	  Check_Constraints;
141     ELSIF (p_action = 'DELETE') THEN
142 --
143 -- svenkata - This table handler is released as part of IGS specific forms in SEED . As a consequence ,
144 -- the procedure Check_Child_Existance originally a part of this  package , has been moved to Igs_Ru_Gen_005 .
145 -- This was done 'cos Check_Child_Existance makes calls to other procedures which are not being shipped !
146 -- Check_Child_Existance is called only when the user is not DATAMERGE . Hence , the proc.
147 -- Check_Child_Existance_ru_rule is being called using execute immediate only if the user is not DATAMERGE .
148 -- Bug # 2233951
149 --
150        IF (fnd_global.user_id <>  1) THEN
151        -- do execute immediate
152             EXECUTE IMMEDIATE 'BEGIN  Igs_Ru_Gen_005.Check_Child_Existance_ru_rule(:1); END;'
153 	       USING   old_references.sequence_number;
154        END IF;
155     ELSIF (p_action = 'VALIDATE_INSERT') THEN
156 	  IF Get_PK_For_Validation (
157 		new_references.sequence_number
158 	  ) THEN
159 		Fnd_Message.Set_Name('IGS','IGS_GE_RECORD_ALREADY_EXISTS');
160 		 IGS_GE_MSG_STACK.ADD;
161 		App_Exception.Raise_Exception;
162 	  END IF;
163 	  Check_Constraints;
164     ELSIF (p_action = 'VALIDATE_UPDATE') THEN
165 	  Check_Constraints;
166     ELSIF (p_action = 'VALIDATE_DELETE') THEN
167 --
168 -- svenkata - This table handler is released as part of IGS specific forms in SEED . As a consequence ,
169 -- the procedure Check_Child_Existance originally a part of this  package , has been moved to Igs_Ru_Gen_005 .
170 -- This was done 'cos Check_Child_Existance makes calls to other procedures which are not being shipped !
171 -- Check_Child_Existance is called only when the user is not DATAMERGE . Hence , the proc.
172 -- Check_Child_Existance_ru_rule is being called using execute immediate only if the user is not DATAMERGE .
173 -- Bug # 2233951
174 --
175        IF (fnd_global.user_id <>  1) THEN
176        -- do execute immediate
177             EXECUTE IMMEDIATE 'BEGIN  Igs_Ru_Gen_005.Check_Child_Existance_ru_rule(:1); END;'
178 	       USING   old_references.sequence_number;
179        END IF;
180     END IF;
181 
182   END Before_DML;
183 
184   PROCEDURE After_DML (
185     p_action IN VARCHAR2,
186     x_rowid IN VARCHAR2
187   ) as
188   BEGIN
189 
190     l_rowid := x_rowid;
191 
192   END After_DML;
193 
194 procedure INSERT_ROW (
195   X_ROWID in out NOCOPY VARCHAR2,
196   X_SEQUENCE_NUMBER in NUMBER,
197   X_MODE in VARCHAR2
198   ) as
199 
200 --svenkata -	The cursor C is being modified and cursor cur_max_plus_one is being created . This is to ensure that
201 --		when a user defined rule is created , it picks up a sequence number more than 50000 . Bug # 2233951
202   l_sequence_number NUMBER;
203      cursor C is select ROWID from IGS_RU_RULE
204      where SEQUENCE_NUMBER = L_SEQUENCE_NUMBER;
205 
206 
207   -- this cursor has been modified to lock the record so that parallel processing is avoided
208    -- rnirwani - 15.mar.02-  2233951
209     CURSOR cur_max_plus_one IS
210       SELECT   (sequence_number + 1) sequence_number
211       FROM     IGS_RU_RULE
212        WHERE sequence_number = (SELECT MAX(sequence_number) + 1 FROM igs_ru_rule
213       where sequence_number < 499999 ) FOR UPDATE OF sequence_number NOWAIT;
214 
215     X_LAST_UPDATE_DATE DATE;
216     X_LAST_UPDATED_BY NUMBER;
217     X_LAST_UPDATE_LOGIN NUMBER;
218 begin
219   X_LAST_UPDATE_DATE := SYSDATE;
220   if(X_MODE = 'I') then
221     X_LAST_UPDATED_BY := 1;
222     X_LAST_UPDATE_LOGIN := 0;
223   elsif (X_MODE = 'R') then
224     X_LAST_UPDATED_BY := FND_GLOBAL.USER_ID;
225     if X_LAST_UPDATED_BY is NULL then
226       X_LAST_UPDATED_BY := -1;
227     end if;
228     X_LAST_UPDATE_LOGIN :=FND_GLOBAL.LOGIN_ID;
229     if X_LAST_UPDATE_LOGIN is NULL then
230       X_LAST_UPDATE_LOGIN := -1;
231     end if;
232   else
233     FND_MESSAGE.SET_NAME( 'FND', 'SYSTEM-INVALID ARGS');
234 	 IGS_GE_MSG_STACK.ADD;
235     app_exception.raise_exception;
236   end if;
237 
238   Before_DML(
239    p_action=>'INSERT',
240    x_rowid=>X_ROWID,
241    x_sequence_number=>X_SEQUENCE_NUMBER,
242    x_creation_date=>X_LAST_UPDATE_DATE,
243    x_created_by=>X_LAST_UPDATED_BY,
244    x_last_update_date=>X_LAST_UPDATE_DATE,
245    x_last_updated_by=>X_LAST_UPDATED_BY,
246    x_last_update_login=>X_LAST_UPDATE_LOGIN
247    );
248   --
249   --  If the sequence number is passed as a NULL value then generate it.
250   --
251   IF (fnd_global.user_id = 1) THEN
252     --
253     --  If the sequence number is passed as a NULL value then generate it.
254     --  If the User creating this record is DATAMERGE (id = 1) then
255     --  Get the sequence as the existing maximum value + 1
256     --
257     IF (x_sequence_number IS NULL) THEN
258       OPEN cur_max_plus_one;
259       FETCH cur_max_plus_one INTO l_sequence_number;
260       CLOSE cur_max_plus_one;
261     ELSE
262       l_sequence_number := x_sequence_number;
263     END IF;
264      --
265       --  Seeded Sequences can go upto 499999 only else raise an error
266       --
267       IF (l_sequence_number > 499999) THEN
268         Fnd_Message.Set_Name('IGS','IGS_GE_INVALID_VALUE');
269         IGS_GE_MSG_STACK.ADD;
270         App_Exception.Raise_Exception ;
271       END IF;
272   ELSE
273     l_sequence_number := NEW_REFERENCES.SEQUENCE_NUMBER;
274   END IF;
275 
276   insert into IGS_RU_RULE (
277     SEQUENCE_NUMBER,
278     CREATION_DATE,
279     CREATED_BY,
280     LAST_UPDATE_DATE,
281     LAST_UPDATED_BY,
282     LAST_UPDATE_LOGIN
283   ) values (
284     NEW_REFERENCES.SEQUENCE_NUMBER,
285     X_LAST_UPDATE_DATE,
286     X_LAST_UPDATED_BY,
287     X_LAST_UPDATE_DATE,
288     X_LAST_UPDATED_BY,
289     X_LAST_UPDATE_LOGIN
290   );
291 
292   open c;
293   fetch c into X_ROWID;
294   if (c%notfound) then
295     close c;
296     raise no_data_found;
297   end if;
298   close c;
299 
300   After_DML (
301     p_action => 'INSERT',
302     x_rowid => X_ROWID);
303 
304 end INSERT_ROW;
305 
306 procedure LOCK_ROW (
307   X_ROWID in VARCHAR2,
308   X_SEQUENCE_NUMBER in NUMBER
309 ) as
310   cursor c1 is select ROWID
311     from IGS_RU_RULE
312     where ROWID = X_ROWID for update nowait;
313   tlinfo c1%rowtype;
314 
315 begin
316   open c1;
317   fetch c1 into tlinfo;
318   if (c1%notfound) then
319     fnd_message.set_name('FND', 'FORM_RECORD_DELETED');
320     IGS_RU_GEN_006.SET_TOKEN(' IGS_RU_RULE  : P_ACTION LOCK_ROW   : IGSUI11B.PLS');
321    IGS_GE_MSG_STACK.ADD;
322     app_exception.raise_exception;
323     close c1;
324     return;
325   end if;
326   close c1;
327 
328   return;
329 end LOCK_ROW;
330 
331 procedure DELETE_ROW (
332   X_ROWID in VARCHAR2
333 ) as
334 begin
335 
336   Before_DML (
337     p_action => 'DELETE',
338     x_rowid => X_ROWID);
339 
340   delete from IGS_RU_RULE
341   where ROWID = X_ROWID;
342   if (sql%notfound) then
343     raise no_data_found;
344   end if;
345 
346   After_DML (
347     p_action => 'DELETE',
348     x_rowid => X_ROWID);
349 
350 end DELETE_ROW;
351 
352 end IGS_RU_RULE_PKG;