DBA Data[Home] [Help]

PACKAGE BODY: APPS.CN_RATE_TIERS_PKG

Source


1 PACKAGE BODY CN_RATE_TIERS_PKG as
2 /* $Header: cnplirtb.pls 120.2 2005/07/12 16:28:26 appldev ship $ */
3 /* Name    : CN_RATE_TIERS_PKG
4 Purpose : Holds all server side packages used to proces a commission rate
5           table tier.
6 
7 Notes   : If we add, update or delete a tier we must 'INCOMPLETE' any comp
8           plans that this schedule is assigned to (via a quota).
9 	  This is done in the calls to cn_comp_plans_pkg.set_status.
10           Since there is no custom validation in this package the com plan
11 	  status update could've gone at the start of the begin procedure.
12 	  But for consistency with the other packages we call it in each
13 	  individual insert, update and delete procedure.*/
14 
15 PROCEDURE INSERT_ROW
16   (X_RATE_TIER_ID          IN OUT NOCOPY CN_RATE_TIERS.RATE_TIER_ID%TYPE,
17    X_RATE_SCHEDULE_ID      IN     CN_RATE_TIERS.RATE_SCHEDULE_ID%TYPE,
18    X_COMMISSION_AMOUNT     IN     CN_RATE_TIERS.COMMISSION_AMOUNT%TYPE,
19    X_RATE_SEQUENCE         IN     CN_RATE_TIERS.RATE_SEQUENCE%TYPE,
20    --R12 MOAC Changes--Start
21    X_ORG_ID                IN     CN_RATE_TIERS.ORG_ID%TYPE,
22    --R12 MOAC Changes--End
23    X_CREATION_DATE         IN     CN_RATE_TIERS.CREATION_DATE%TYPE    := SYSDATE,
24    X_CREATED_BY            IN     CN_RATE_TIERS.CREATED_BY%TYPE       := FND_GLOBAL.USER_ID,
25    X_LAST_UPDATE_DATE      IN     CN_RATE_TIERS.LAST_UPDATE_DATE%TYPE := SYSDATE,
26    X_LAST_UPDATED_BY       IN     CN_RATE_TIERS.LAST_UPDATED_BY%TYPE  := FND_GLOBAL.USER_ID,
27    X_LAST_UPDATE_LOGIN     IN     CN_RATE_TIERS.LAST_UPDATE_LOGIN%TYPE:= FND_GLOBAL.LOGIN_ID) IS
28 
29   CURSOR C IS SELECT RATE_TIER_ID FROM CN_RATE_TIERS
30     WHERE RATE_TIER_ID = X_RATE_TIER_ID;
31 
32   CURSOR id IS SELECT CN_RATE_TIERS_S.NEXTVAL FROM DUAL;
33 BEGIN
34    IF (x_rate_tier_id IS NULL) THEN
35       OPEN id;
36       FETCH id INTO x_rate_tier_id;
37       IF (id%notfound) THEN
38 	 CLOSE id;
39 	 RAISE no_data_found;
40       END IF;
41       CLOSE id;
42    END IF;
43 
44    -- invalidate all comp plans using a rate table with this tier
45    cn_comp_plans_pkg.set_status
46      (x_comp_plan_id	 => NULL,
47       x_quota_id	 => NULL,
48       x_rate_schedule_id => X_rate_schedule_id,
49       x_status_code 	 => 'INCOMPLETE',
50       x_event		 => 'CHANGE_TIERS');
51 
52    insert into CN_RATE_TIERS
53      (RATE_TIER_ID,
54       RATE_SCHEDULE_ID,
55       COMMISSION_AMOUNT,
56       RATE_SEQUENCE,
57       --R12 MOAC Changes--Start
58       ORG_ID,
59       --R12 MOAC Changes--End
60       CREATED_BY,
61       CREATION_DATE,
62       LAST_UPDATE_LOGIN,
63       LAST_UPDATE_DATE,
64       LAST_UPDATED_BY,
65       OBJECT_VERSION_NUMBER)
66      VALUES
67      (X_RATE_TIER_ID,
68       X_RATE_SCHEDULE_ID,
69       X_COMMISSION_AMOUNT,
70       X_RATE_SEQUENCE,
71       --R12 MOAC Changes--Start
72       X_ORG_ID,
73       --R12 MOAC Changes--End
74       X_CREATED_BY,
75       X_CREATION_DATE,
76       X_LAST_UPDATE_LOGIN,
77       X_LAST_UPDATE_DATE,
78       X_LAST_UPDATED_BY,
79       0);
80 
81    open c;
82    fetch c into x_rate_tier_id;
83    if (c%notfound) then
84       close c;
85       raise no_data_found;
86    end if;
87    close c;
88 
89    -- assign this rate tier to all salesreps with this rate schedule
90    cn_srp_rate_assigns_pkg.insert_record
91      (x_rate_schedule_id     => x_rate_schedule_id,
92       x_rate_tier_id	     => x_rate_tier_id,
93       x_rate_sequence        => x_rate_sequence,
94 
95       -- these are not used anymore
96       x_srp_plan_assign_id   => null,
97       x_srp_quota_assign_id  => null,
98       x_srp_rate_assign_id   => null,
99       x_quota_id	     => null,
100       x_commission_Rate      => null,
101       x_commission_amount    => null,
102       x_disc_rate_table_flag => null);
103 
104   END INSERT_ROW;
105 
106   PROCEDURE LOCK_ROW
107     (X_RATE_TIER_ID          IN     CN_RATE_TIERS.RATE_TIER_ID%TYPE,
108      X_OBJECT_VERSION_NUMBER IN     CN_RATE_TIERS.OBJECT_VERSION_NUMBER%TYPE) IS
109 
110    cursor c is
111    select object_version_number
112      from CN_RATE_TIERS
113     where RATE_TIER_ID = X_RATE_TIER_ID
114       for update of RATE_TIER_ID nowait;
115 
116    tlinfo c%rowtype ;
117 BEGIN
118    open  c;
119    fetch c into tlinfo;
120    if (c%notfound) then
121       close c;
122       fnd_message.set_name('CN', 'CN_RECORD_DELETED');
123       fnd_msg_pub.add;
124       raise fnd_api.g_exc_unexpected_error;
125    end if;
126    close c;
127 
128    if (tlinfo.object_version_number <> x_object_version_number) then
129       fnd_message.set_name('CN', 'CN_RECORD_CHANGED');
130       fnd_msg_pub.add;
131       raise fnd_api.g_exc_unexpected_error;
132    end if;
133 
134 END LOCK_ROW;
135 
136 PROCEDURE UPDATE_ROW
137   (X_RATE_TIER_ID          IN     CN_RATE_TIERS.RATE_TIER_ID%TYPE,
138    X_RATE_SCHEDULE_ID      IN     CN_RATE_TIERS.RATE_SCHEDULE_ID%TYPE,
139    X_COMMISSION_AMOUNT     IN     CN_RATE_TIERS.COMMISSION_AMOUNT%TYPE,
140    X_RATE_SEQUENCE         IN     CN_RATE_TIERS.RATE_SEQUENCE%TYPE,
141    X_OBJECT_VERSION_NUMBER IN OUT NOCOPY    CN_RATE_TIERS.OBJECT_VERSION_NUMBER%TYPE,
142    X_LAST_UPDATE_DATE      IN     CN_RATE_TIERS.LAST_UPDATE_DATE%TYPE := SYSDATE,
143    X_LAST_UPDATED_BY       IN     CN_RATE_TIERS.LAST_UPDATED_BY%TYPE  := FND_GLOBAL.USER_ID,
144    X_LAST_UPDATE_LOGIN     IN     CN_RATE_TIERS.LAST_UPDATE_LOGIN%TYPE:= FND_GLOBAL.LOGIN_ID) IS
145 
146    l_commission_amount_old   number := 0;
147 BEGIN
148    X_OBJECT_VERSION_NUMBER := X_OBJECT_VERSION_NUMBER + 1;
149    -- invalidate all comp plans using a rate schedule with this tier
150    cn_comp_plans_pkg.set_status
151      (x_comp_plan_id	 => NULL,
152       x_quota_id	 => NULL,
153       x_rate_schedule_id => x_rate_schedule_id,
154       x_status_code 	 => 'INCOMPLETE',
155       x_event		 => 'CHANGE_TIERS');
156 
157    UPDATE cn_rate_tiers SET
158      rate_schedule_id                  =     x_rate_schedule_id,
159      commission_amount                 =     x_commission_amount,
160      RATE_SEQUENCE                     =     X_RATE_SEQUENCE,
161      last_update_date                  =     X_Last_Update_Date,
162      last_updated_by                   =     X_Last_Updated_By,
163      last_update_login                 =     X_Last_Update_Login,
164      OBJECT_VERSION_NUMBER             =     X_OBJECT_VERSION_NUMBER
165    WHERE rate_tier_id = X_rate_tier_id;
166 
167    IF (SQL%NOTFOUND) then
168      raise no_data_found;
169    END IF;
170 
171    -- see if the commission amount changed
172    select commission_amount into l_commission_amount_old
173      from cn_rate_tiers
174     where rate_tier_id = x_rate_tier_id;
175 
176    IF x_commission_amount <> l_commission_amount_old THEN
177 
178      -- Only the commission amount is denormalized no srp_tiers to maintain
179      cn_srp_rate_assigns_pkg.synch_rate(
180 			  x_srp_plan_assign_id  => null
181 			 ,x_srp_quota_assign_id => null
182   			 ,x_rate_schedule_id	=> x_rate_schedule_id
183 			 ,x_rate_tier_id	=> x_rate_tier_id
184 			 ,x_commission_rate	=> null
185 			 ,x_salesrep_id		=> null
186 			 ,x_start_period_id	=> null
187 			 ,x_commission_amount   => x_commission_amount);
188    END IF;
189 
190   END UPDATE_ROW;
191 
192 
193   -- Procedure Name
194   --
195   -- Purpose
196   --
197   -- Notes
198   --   If the rate tier id is null this routine has been called on delete
199   --   or a rate schedule. You cannot delete a schedule that is assigned to a
200   --   quota so there's no need to try and update the status of the plans.
201   --   If the tier_id is not null then we delete an individual tier.
202 
203   PROCEDURE Delete_Row
204     (X_RATE_SCHEDULE_ID      IN     CN_RATE_TIERS.RATE_SCHEDULE_ID%TYPE,
205      X_RATE_TIER_ID          IN     CN_RATE_TIERS.RATE_TIER_ID%TYPE) IS
206 
207   BEGIN
208 
209     IF X_Rate_Schedule_Id IS NOT NULL THEN
210 
211       IF X_Rate_Tier_Id IS NULL THEN
212 
213         DELETE FROM cn_rate_tiers
214         WHERE rate_schedule_id = X_Rate_Schedule_Id;
215 
216       ELSE
217         cn_comp_plans_pkg.set_status(
218 		  x_comp_plan_id	=> NULL
219 		 ,x_quota_id		=> NULL
220 		 ,x_rate_schedule_id	=> X_rate_schedule_id
221 	         ,x_status_code 	=> 'INCOMPLETE'
222 		 ,x_event		=> 'CHANGE_TIERS');
223 
224         DELETE FROM cn_rate_tiers
225         WHERE  rate_tier_id = x_rate_tier_id;
226 
227         IF (SQL%NOTFOUND) then
228            Raise NO_DATA_FOUND;
229         END if;
230 
231         cn_srp_rate_assigns_pkg.delete_record(
232 			   x_srp_plan_assign_id	=> null
233 		          ,x_srp_rate_assign_id	=> null
234 		          ,x_quota_id		=> null
235 		          ,x_rate_schedule_id	=> x_rate_schedule_id
236 		          ,x_rate_tier_id	=> x_rate_tier_id);
237 
238       END IF;
239 
240     END IF;
241 
242 
243   END Delete_Row;
244 
245 END CN_RATE_TIERS_PKG;