DBA Data[Home] [Help]

PACKAGE BODY: APPS.CN_SRP_RATE_ASSIGNS_PKG

Source


1 PACKAGE BODY cn_srp_rate_assigns_pkg as
2 -- $Header: cnsrplcb.pls 120.0 2005/06/06 17:33:27 appldev noship $
3 /*
4 
5 Package Body Name
6 
7   Purpose
8   Form	- cnsrmt cnpldf
9   Block	- rate_assign
10 
11   History
12   -------------- ------------ -------------------------------------------------+
13   26-JAN-94	Tony Lower   Created
14   10-FEB-95	P Cook	     Modified for table handlers
15   03-AUG-95      P Cook	     Bug 272779. Ignore quota s customixed_flag when
16                              propogating cn_rate_tier changes to the srp tiers
17   20-NOV-95      P Cook	     Added who columns.
18 
19   Notes
20   Tiers cannot be manually inserted or deleted in the srp/plan assignment
21   block. The insert and delete procedures are called when a plan assignment
22   is inserted or deleted OR when tiers are inserted/deleted from the comp
23   plans form.
24   If the design is changed to allow manual insert and deletion these table
25   handlers must be modified to deal with individual records.
26   -- Modified
27   Delete_record procedure has two more paramenters like calc_formula_id
28   and rt_quota_asgn_id
29 
30   Calc_formula_id tied with the rate_schedule.
31 
32   Two more if condition is added in the delete_record procedure
33 
34   */
35 
36   --+
37   -- Procedure Name
38   --  Delete_Record
39   -- Purpose
40   --  Delete srp rate tier assignments.
41   -- +
42   -- Notes						   Passed Parameters
43   --  o Called once for each deleted srp plan assignment.  x_srp_plan_assign_id
44 
45   --  o Called when a quota assignment is deleted from the x_srp_plan_assign_id
46   --    source comp plans. Called once for each srp plan   x_quota_id
47   --    assignment referencing the comp plan on the deleted
48   --    assignment
49 
50   --  o Called once for each quota whose rate schedule has x_quota_id
51   --    been updated to null or another schedule	   x_rate_schedule_id
52   --    Deletes all tiers attached to the quota
53 
54   --  o Called after a rate tier is deleted from  	   x_rate_tier_id
55   --    cn_rate_tiers					   x_rate_schedule_id
56   -- +
57   --  o Called once for each quota whose calc_formula_id  has x_quota_id
58   --    been updated to null or another calc_formula_id	   x_calc_formula_id
59   --    Deletes all tiers attached to the quota
60 
61   --  o Called once for each rt_quota_asgns_deleted        x_quota_id
62   --    				                   x_rt_quota_asgn_id
63 
64   ----------------------------------------------------------------------------+
65   -- PROCEDURE DELETE_RECORD
66   ----------------------------------------------------------------------------  +
67   PROCEDURE delete_record
68   ( x_srp_plan_assign_id  	NUMBER
69     ,x_srp_rate_assign_id	NUMBER
70     ,x_quota_id			NUMBER
71     ,x_rate_schedule_id		NUMBER
72     ,x_rt_quota_asgn_id         NUMBER := Null
73     ,x_rate_tier_id		NUMBER) IS
74   BEGIN
75 
76      IF x_rate_tier_id IS NOT NULL AND x_rate_schedule_id IS NOT NULL THEN
77 
78 	-- cn_rate_tiers record deleted
79 	DELETE FROM cn_srp_rate_assigns_all
80 	  WHERE rate_tier_id     = x_rate_tier_id
81 	  AND rate_schedule_id = x_rate_schedule_id;
82 
83       ELSE
84 
85 	IF x_quota_id IS NOT NULL THEN
86 
87            IF x_rt_quota_asgn_id IS NOT NULL THEN
88 	      -- delete the specific rt_quota_asgns_record.
89 
90 	      DELETE FROM cn_srp_rate_assigns_all
91 		WHERE  rt_quota_asgn_id = x_rt_quota_asgn_id
92 		AND  quota_id           = x_quota_id;
93 
94 	   ELSIF x_srp_plan_assign_id IS NOT NULL THEN
95 
96 	      -- deleted cn_quota_assign record
97 	      DELETE FROM cn_srp_rate_assigns_all
98 		WHERE srp_plan_assign_id = x_srp_plan_assign_id
99 		AND quota_id 	         = x_quota_id;
100 
101 	    ELSIF x_rate_schedule_id IS NOT NULL THEN
102 
103 	      -- quota has been assigned a different schedule
104 	      DELETE FROM cn_srp_rate_assigns_all
105 		WHERE  rate_schedule_id = x_rate_schedule_id
106 		AND  quota_id = x_quota_id;
107 
108 	   END IF;
109 
110 	 ELSE
111 	   -- deleting a srp plan assign
112 	   DELETE FROM cn_srp_rate_assigns_all
113 	     WHERE srp_plan_assign_id = x_srp_plan_assign_id;
114 
115 	END IF;
116 
117      END IF;
118 
119   END delete_record;
120 
121   --+
122   -- Procedure Name
123   --  Insert_Record
124   -- Purpose
125   --  Insert srp rate tier assignments.
126   -- Notes
127   --   o called once for each new srp plan assignment
128   --   o called once for each srp plan assignment that references the comp
129   --     plan on a newly created comp plan quota assignment
130   -- +
131   --  Calling event			  		Passed Parameters
132   -- 1. after insert of srp plan assignment. 	  	x_srp_plan_assign_id
133 
134   -- 2. after insert of comp plan quota assignment 	x_srp_plan_assign_id
135   --							x_quota_id
136 
137   -- 3. after update of rate schedule assigned to quota x_quota_id
138   --							x_rate_schedule_id
139 
140   -- 4. after insert of new rate tier			x_rate_schedule_id
141   --							x_rate_tier_id
142   --+
143   ----------------------------------------------------------------------------+
144   -- PROCEDURE INSERT_RECORD
145   ----------------------------------------------------------------------------  +
146   PROCEDURE Insert_Record
147     (
148        x_srp_plan_assign_id              NUMBER
149        ,x_srp_quota_assign_id            NUMBER
150        ,x_srp_rate_assign_id             NUMBER
151        ,x_quota_id			 NUMBER
152        ,x_rate_schedule_id  		 NUMBER
153        ,x_rt_quota_asgn_id               NUMBER := NULL
154        ,x_rate_tier_id                   NUMBER
155        ,x_commission_rate                NUMBER
156        ,x_commission_amount		 NUMBER
157        ,x_disc_rate_table_flag		 VARCHAR2
158        ,x_rate_sequence                  NUMBER := NULL
159     ) IS
160 
161 	  l_user_id  NUMBER(15);
162 	  l_resp_id  NUMBER(15);
163 	  l_login_id NUMBER(15);
164   BEGIN
165 
166      l_user_id  := fnd_global.user_id;
167      l_resp_id  := fnd_global.resp_id;
168      l_login_id := fnd_global.login_id;
169 
170      -- in all cases, only insert if customized_flag = 'Y' - bugfix 3204833
171      -- +
172      IF x_srp_plan_assign_id IS NOT NULL THEN
173 
174 	IF x_quota_id IS NOT NULL THEN
175 
176 	   INSERT INTO cn_srp_rate_assigns_all
177 	     (
178 		srp_plan_assign_id
179 		,srp_quota_assign_id
180 		,srp_rate_assign_id
181 		,rate_tier_id
182                 ,rate_sequence
183 		,commission_amount
184 		,quota_id
185 		,rate_schedule_id
186                 ,rt_quota_asgn_id
187 		,creation_date
188 		,created_by
189 		,last_update_date
190 		,last_updated_by
191 		,last_update_login
192 		,org_id)
193 	     SELECT
194 	     qa.srp_plan_assign_id
195 	     ,qa.srp_quota_assign_id
196 	     ,cn_srp_rate_assigns_s.nextval
197 	     ,t.rate_tier_id
198              ,t.rate_sequence
199 	     ,t.commission_amount
200 	     ,qa.quota_id
201 	     ,t.rate_schedule_id
202              ,rqa.rt_quota_asgn_id
203 	     ,sysdate
204 	     ,l_user_id
205 	     ,sysdate
206 	     ,l_user_id
207 	     ,l_login_id
208 	     ,qa.org_id
209 	     FROM  cn_rate_tiers_all   t
210 	     ,cn_srp_quota_assigns_all qa
211 	     ,cn_rt_quota_asgns_all    rqa
212 	     WHERE qa.srp_plan_assign_id = x_srp_plan_assign_id
213 	     AND qa.quota_id 	         = x_quota_id
214 	     AND rqa.quota_id            = x_quota_id
215 	     AND rqa.quota_id            = qa.quota_id
216 	     AND rqa.rate_schedule_id    = t.rate_schedule_id
217 	     AND qa.customized_flag      = 'Y'
218 	     AND qa.quota_type_code IN ('EXTERNAL','FORMULA')
219 	     AND t.commission_amount <> 0
220 	     ;
221 
222 	   --- Insert the Discount Rate SChedule Table when a New Plan element
223 	   --- is being assigned to a COmp Plan.
224 
225 	 ELSE
226 	   -- New plan assignment
227 	   INSERT INTO cn_srp_rate_assigns_all
228 	     (srp_plan_assign_id
229 	      ,srp_quota_assign_id
230 	      ,srp_rate_assign_id
231 	      ,rate_tier_id
232               ,rate_sequence
233 	      ,commission_amount
234 	      ,quota_id
235 	      ,rate_schedule_id
236 	      ,rt_quota_asgn_id
237 	      ,creation_date
238 	      ,created_by
239 	      ,last_update_date
240 	      ,last_updated_by
241 	      ,last_update_login
242 	      ,org_id)
243 	     SELECT qa.srp_plan_assign_id
244 	     ,qa.srp_quota_assign_id
245 	     ,cn_srp_rate_assigns_s.nextval
246 	     ,t.rate_tier_id
247              ,t.rate_sequence
248 	     ,t.commission_amount
249 	     ,qa.quota_id
250 	     ,t.rate_schedule_id
251 	     ,rqa.rt_quota_asgn_id
252 	     ,sysdate
253 	     ,l_user_id
254 	     ,sysdate
255 	     ,l_user_id
256 	     ,l_login_id
257 	     ,qa.org_id
258 	     FROM  cn_rate_tiers_all   t
259 	     ,cn_srp_quota_assigns_all qa
260              ,cn_rt_quota_asgns_all    rqa
261 	     WHERE qa.srp_plan_assign_id = x_srp_plan_assign_id
262 	     AND qa.quota_id             = rqa.quota_id
263 	     AND rqa.rate_schedule_id    = t.rate_schedule_id
264 	     AND qa.customized_flag      = 'Y'
265 	     AND qa.quota_type_code IN ('EXTERNAL','FORMULA')
266 	     AND t.commission_amount <> 0
267 	     ;
268 	END IF; -- x_quota_id is not null
269 
270       ELSIF x_quota_id IS NOT NULL AND x_rate_schedule_id IS NOT NULL THEN
271 	-- create a new rt_quota_assigns
272 	-- 1 called from cn_rt_quota_assigns insert_record
273         IF x_rt_quota_asgn_id IS NOT NULL THEN
274 
275 	   INSERT INTO cn_srp_rate_assigns_all
276 	     (srp_plan_assign_id
277 	      ,srp_quota_assign_id
278 	      ,srp_rate_assign_id
279 	      ,rate_tier_id
280               ,rate_sequence
281 	      ,commission_amount
282 	      ,quota_id
283 	      ,rate_schedule_id
284 	      ,rt_quota_asgn_id
285 	      ,creation_date
286 	      ,created_by
287 	      ,last_update_date
288 	      ,last_updated_by
289 	      ,last_update_login
290 	      ,org_id)
291 	     SELECT   qa.srp_plan_assign_id
292 	     ,qa.srp_quota_assign_id
293 	     ,cn_srp_rate_assigns_s.nextval
294 	     ,t.rate_tier_id
295              ,t.rate_sequence
296 	     ,t.commission_amount
297 	     ,qa.quota_id
298 	     ,t.rate_schedule_id
299 	     ,rqa.rt_quota_asgn_id
300 	     ,sysdate
301 	     ,l_user_id
302 	     ,sysdate
303 	     ,l_user_id
304 	     ,l_login_id
305 	     ,qa.org_id
306 	     FROM   cn_rate_tiers_all   t
307 	     ,cn_srp_quota_assigns_all  qa
308 	     ,cn_rt_quota_asgns_all     rqa
309 	     WHERE qa.quota_id 	        = x_quota_id
310 	     AND rqa.quota_id           = x_quota_Id
311 	     AND rqa.quota_id           = qa.quota_id
312 	     AND rqa.rate_schedule_id   = x_rate_schedule_id
313 	     AND t.rate_schedule_id     = x_rate_schedule_id
314 	     AND rqa.rate_schedule_id   = t.rate_schedule_id
315 	     AND rqa.rt_quota_asgn_id   = x_rt_quota_asgn_id
316 	     AND qa.customized_flag     = 'Y'
317 	     AND qa.quota_type_code IN ('EXTERNAL', 'FORMULA')
318 	     AND t.commission_amount <> 0
319 	     ;
320 
321 	 ELSE
322 
323 	   INSERT INTO cn_srp_rate_assigns_all
324 	     (srp_plan_assign_id
325 	      ,srp_quota_assign_id
326 	      ,srp_rate_assign_id
327 	      ,rate_tier_id
328               ,rate_sequence
329 	      ,commission_amount
330 	      ,quota_id
331 	      ,rate_schedule_id
332 	      ,rt_quota_asgn_id
333 	      ,creation_date
334 	      ,created_by
335 	      ,last_update_date
336 	      ,last_updated_by
337 	      ,last_update_login
338 	      ,org_id)
339 	     SELECT   qa.srp_plan_assign_id
340 	     ,qa.srp_quota_assign_id
341 	     ,cn_srp_rate_assigns_s.nextval
342 	     ,t.rate_tier_id
343              ,t.rate_sequence
344 	     ,t.commission_amount
345 	     ,qa.quota_id
346 	     ,t.rate_schedule_id
347 	     ,rqa.rt_quota_asgn_id
348 	     ,sysdate
349 	     ,l_user_id
350 	     ,sysdate
351 	     ,l_user_id
352 	     ,l_login_id
353 	     ,qa.org_id
354 	     FROM   cn_rate_tiers_all   t
355 	     ,cn_srp_quota_assigns_all  qa
356 	     ,cn_rt_quota_asgns_all     rqa
357 	     WHERE qa.quota_id 	        = x_quota_id
358 	     AND rqa.quota_id           = x_quota_Id
359 	     AND rqa.quota_id           = qa.quota_id
360 	     AND rqa.rate_schedule_id   = x_rate_schedule_id
361 	     AND t.rate_schedule_id     = x_rate_schedule_id
362 	     AND rqa.rate_schedule_id   = t.rate_schedule_id
363 	     AND qa.customized_flag     = 'Y'
364 	     AND qa.quota_type_code IN ('EXTERNAL', 'FORMULA')
365 	     AND t.commission_amount <> 0
366 	     ;
367 
368 	END IF;
369 
370       ELSIF (    x_quota_id IS NULL AND x_rate_schedule_id IS NOT NULL
371 		 AND x_rate_tier_id IS NOT NULL) THEN
372 
373    	INSERT INTO cn_srp_rate_assigns_all
374 	  (  srp_plan_assign_id
375 	     ,srp_quota_assign_id
376 	     ,srp_rate_assign_id
377 	     ,rate_tier_id
378              ,rate_sequence
379 	     ,commission_amount
380 	     ,quota_id
381 	     ,rate_schedule_id
382 	     ,rt_quota_asgn_id
383 	     ,creation_date
384 	     ,created_by
385 	     ,last_update_date
386 	     ,last_updated_by
387 	     ,last_update_login
388 	     ,org_id
389           )
390 	  SELECT  qa.srp_plan_assign_id
391 	  ,qa.srp_quota_assign_id
392 	  ,cn_srp_rate_assigns_s.nextval
393 	  ,t.rate_tier_id
394           ,t.rate_sequence
395 	  ,t.commission_amount
396 	  ,qa.quota_id
397 	  ,t.rate_schedule_id
398 	  ,rqa.rt_quota_asgn_id
399 	  ,sysdate
400 	  ,l_user_id
401 	  ,sysdate
402 	  ,l_user_id
403 	  ,l_login_id
404 	  ,qa.org_id
405 	  FROM  cn_rate_tiers_all     t
406 	  ,cn_srp_quota_assigns_all   qa
407 	  ,cn_rt_quota_asgns_all      rqa
408 	  WHERE rqa.rate_schedule_id = t.rate_schedule_id
409 	  AND rqa.quota_id           = qa.quota_id
410 	  AND t.rate_tier_id 	     = x_rate_tier_id
411 	  AND t.rate_schedule_id     = x_rate_schedule_id
412 	  AND qa.customized_flag     = 'Y'
413 	  AND qa.quota_type_code IN ('EXTERNAL', 'FORMULA')
414 	  AND t.commission_amount <> 0
415           ;
416      END IF;
417 
418   END insert_record;
419   ----------------------------------------------------------------------------+
420   -- PROCEDURE LOCK_RECORD
421   ----------------------------------------------------------------------------  +
422   PROCEDURE Lock_Record
423     (
424      X_Srp_Plan_Assign_Id             NUMBER,
425      X_Srp_Quota_Assign_Id            NUMBER,
426      X_Srp_Rate_Assign_Id      	      NUMBER,
427      X_Rate_Tier_Id                   NUMBER,
428      X_Commission_Rate                NUMBER,
429      x_commission_amount	      NUMBER ) IS
430 	CURSOR C IS
431 	   SELECT *
432 	     FROM cn_srp_rate_assigns_all
433 	     WHERE srp_rate_assign_id = x_srp_rate_assign_id
434 	     FOR UPDATE OF srp_rate_assign_id NOWAIT;
435 	Recinfo C%ROWTYPE;
436 
437 
438   BEGIN
439      OPEN C;
440      FETCH C INTO Recinfo;
441 
442      IF (C%NOTFOUND) THEN
443 	close C;
444 	fnd_message.set_name('FND', 'FORM_RECORD_DELETED');
445 	app_exception.raise_exception;
446      END IF;
447      CLOSE C;
448 
449      IF ( (   recinfo.commission_amount       = x_commission_amount
450 	      OR (    recinfo.commission_amount IS NULL
451 		      AND x_commission_amount IS NULL) 		)
452 	  AND (recinfo.commission_rate       = x_commission_rate
453 	       OR (    recinfo.commission_rate IS NULL
454 		       AND x_commission_rate IS NULL) )
455 	  ) THEN
456 	RETURN;
457 
458       ELSE
459 
460 	fnd_message.set_name('FND', 'FORM_RECORD_CHANGED');
461 	app_exception.raise_exception;
462      END IF;
463 
464   END Lock_Record;
465   ----------------------------------------------------------------------------+
466   -- PROCEDURE UPDATE_RECORD
467   ----------------------------------------------------------------------------  +
468   PROCEDURE Update_Record(
469 			  x_srp_plan_assign_id           NUMBER
470 			  ,x_srp_quota_assign_Id         NUMBER
471 			  ,x_srp_rate_assign_id          NUMBER
472 			  ,x_rate_tier_id                NUMBER
473 			  ,x_commission_rate             NUMBER
474 			  ,x_commission_rate_old         NUMBER
475 			  ,x_start_period_id		 NUMBER
476 			  ,x_salesrep_id		 NUMBER
477 			  ,x_commission_amount		 NUMBER
478 			  ,x_commission_amount_old	 NUMBER
479 			  ,x_last_update_date		 DATE
480 			  ,x_last_updated_by		 NUMBER
481 			  ,x_last_update_login		 NUMBER) IS
482   BEGIN
483 
487        ,last_updated_by        = x_last_updated_by
484      UPDATE  cn_srp_rate_assigns_all
485        SET  commission_amount  = x_commission_amount
486        ,last_update_date       = x_last_update_date
488        ,last_update_login      = x_last_update_login
489        WHERE  srp_rate_assign_id = x_srp_rate_assign_id
490        ;
491 
492      IF SQL%NOTFOUND THEN
493 	raise no_data_found;
494      END IF;
495 
496   END Update_Record;
497 
498   -- Procedure Name
499   --   Synch_rate
500   -- Purpose
501   --   Ensure that all rep/plan assignments get the correct commission rates
502   -- Notes
503   --   Not called unless quota type is target or revenue
504   -- +
505   -- When the procedure is called		  	Passed Parameters
506   -- 1. After update of cn_rate_tiers.commission_rate   x_rate_schedule_id
507   --							x_rate_tier_id
508 
509   -- 2. After user chooses to not to have custom quotas x_srp_plan_assign_id
510   --    and rates at srp level				x_srp_quota_assign_id
511   --							x_rate_schedule_id
512   ----------------------------------------------------------------------------+
513   -- PROCEDURE SYNCH_RATE
514   ----------------------------------------------------------------------------  +
515   PROCEDURE synch_rate(
516 		       x_srp_plan_assign_id     NUMBER
517 		       ,x_srp_quota_assign_id   NUMBER
518 		       ,x_rate_schedule_id	NUMBER
519 		       ,x_rate_tier_id	        NUMBER
520 		       ,x_commission_rate	NUMBER
521 		       ,x_salesrep_id		NUMBER
522 		       ,x_start_period_id	NUMBER
523 		       ,x_commission_amount     NUMBER ) IS
524   BEGIN
525      -- obsoleted as part of bug fix 3204833
526      NULL;
527   END synch_rate;
528 
529 END cn_srp_rate_assigns_pkg;