DBA Data[Home] [Help]

PACKAGE BODY: APPS.CN_QUOTA_ASSIGN_PUB

Source


1 PACKAGE BODY CN_QUOTA_ASSIGN_PUB AS
2   /*$Header: cnpqtasb.pls 120.4 2005/11/08 03:23:47 kjayapau noship $*/
3 
4 G_PKG_NAME         CONSTANT VARCHAR2(30):='CN_QUOTA_ASSIGN_PUB';
5 G_LAST_UPDATE_DATE          DATE := Sysdate;
6 G_LAST_UPDATED_BY           NUMBER := fnd_global.user_id;
7 G_CREATION_DATE             DATE := Sysdate;
8 G_CREATED_BY                NUMBER := fnd_global.user_id;
9 G_LAST_UPDATE_LOGIN         NUMBER := fnd_global.login_id;
10 
11 -- validate_input_record
12 procedure validate_input_record(p_quota_assign_rec quota_assign_rec_type) IS
13 BEGIN
14    if (p_quota_assign_rec.comp_plan_name is NULL OR
15      p_quota_assign_rec.comp_plan_name = fnd_api.g_miss_char OR
16      p_quota_assign_rec.quota_name IS NULL OR
17      p_quota_assign_rec.quota_name = fnd_api.g_miss_char) OR
18      p_quota_assign_rec.ORG_ID IS NULL OR
19 			p_quota_assign_rec.org_id = fnd_api.g_miss_num
20      then
21       IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
22          FND_MESSAGE.SET_NAME ('CN' , 'CN_REQ_PAR_MISSING');
23          FND_MSG_PUB.Add;
24       END IF;
25       RAISE FND_API.G_EXC_ERROR ;
26    end if;
27 END;
28 
29 -- validate_cp_name
30 function validate_cp_name(p_cp_name varchar2,p_org_id number) RETURN number IS
31    l_cp_id number := 0;
32    CURSOR l_cp_id_csr(p_plan_name varchar2) IS
33      SELECT comp_plan_id
34        FROM cn_comp_plans
35        WHERE name = p_plan_name
36        and org_id = p_org_id;
37 BEGIN
38    OPEN l_cp_id_csr(p_cp_name);
39    FETCH l_cp_id_csr INTO l_cp_id;
40    CLOSE l_cp_id_csr;
41    if (l_cp_id IS NULL OR l_cp_id = 0) then
42       IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
43          FND_MESSAGE.SET_NAME ('CN' , 'CN_CP_NOT_EXIST');
44          FND_MESSAGE.SET_token('CP_NAME', p_cp_name);
45          FND_MSG_PUB.Add;
46       END IF;
47       RAISE FND_API.G_EXC_ERROR ;
48    end if;
49    RETURN l_cp_id;
50 END;
51 
52 -- validate_cp_name
53 function validate_pe_name(p_pe_name varchar2,p_org_id number) RETURN number IS
54    l_pe_id number := 0;
55    CURSOR l_pe_id_csr(p_element_name varchar2) IS
56      SELECT quota_id
57        FROM cn_quotas_v
58        WHERE name = p_element_name and org_id = p_org_id;
59 BEGIN
60    OPEN l_pe_id_csr(p_pe_name);
61    FETCH l_pe_id_csr INTO l_pe_id;
62    CLOSE l_pe_id_csr;
63    if (l_pe_id IS NULL OR l_pe_id = 0) then
64       IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
65          FND_MESSAGE.SET_NAME ('CN' , 'CN_INVALID_QUOTA');
66          FND_MSG_PUB.Add;
67       END IF;
68       RAISE FND_API.G_EXC_ERROR ;
69    end if;
70    RETURN l_pe_id;
71 END;
72 
73 -- Start of comments
74 --    API name        : Create_Quota_Assign
75 --    Type            : Public
76 --    Function        :
77 --    Pre-reqs        : None.
78 --    Parameters      :
79 --    IN              : p_api_version         IN NUMBER       Required
80 --                      p_init_msg_list       IN VARCHAR2     Optional
81 --                        Default = FND_API.G_FALSE
82 --                      p_commit              IN VARCHAR2     Optional
83 --                        Default = FND_API.G_FALSE
84 --                      p_validation_level    IN NUMBER       Optional
85 --                        Default = FND_API.G_VALID_LEVEL_FULL
86 --                      p_quota_assign_rec    IN  quota_assign_rec_type
87 --    OUT             : x_return_status         OUT     VARCHAR2(1)
88 --                      x_msg_count                     OUT     NUMBER
89 --                      x_msg_data                      OUT     VARCHAR2(2000)
90 --    Version :         Current version       1.0
91 --                      Initial version       1.0
92 --
93 --    Notes           : None
94 --
95 -- End of comments
96 PROCEDURE Create_Quota_Assign
97   (p_api_version                IN      NUMBER                          ,
98    p_init_msg_list              IN      VARCHAR2 := FND_API.G_FALSE     ,
99   p_commit                      IN      VARCHAR2 := FND_API.G_FALSE     ,
100   p_validation_level            IN      NUMBER  :=
101   FND_API.G_VALID_LEVEL_FULL                                            ,
102   p_quota_assign_rec            IN      quota_assign_rec_type           ,
103   x_return_status               OUT NOCOPY    VARCHAR2                        ,
104   x_msg_count                   OUT NOCOPY     NUMBER                          ,
105   x_msg_data                    OUT NOCOPY     VARCHAR2                        ) IS
106    l_api_name                      CONSTANT VARCHAR2(30)
107      := 'Create_Quota_Assign';
108    l_api_version                   CONSTANT NUMBER                 := 1.0;
109    l_quota_assign_rec  quota_assign_rec_type := p_quota_assign_rec;
110    l_comp_plan_id  number := 0;
111    l_quota_id  number := 0;
112    l_pvt_quota_assign_rec   cn_quota_assign_pvt.quota_assign_rec_type;
113    l_return_status  varchar2(1);
114    l_msg_count  number;
115    l_msg_data   varchar2(2000);
116 
117    l_org_id NUMBER;
118    l_status VARCHAR2(1);
119 
120 BEGIN
121    -- Standard Start of API savepoint
122    SAVEPOINT   Create_Quota_Assign_Pub;
123    -- Standard call to check for call compatibility.
124    IF NOT FND_API.Compatible_API_Call
125      (l_api_version           ,
126      p_api_version           ,
127      l_api_name              ,
128      G_PKG_NAME )
129    THEN
130       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
131    END IF;
132    -- Initialize message list if p_init_msg_list is set to TRUE.
133    IF FND_API.to_Boolean( p_init_msg_list ) THEN
134       FND_MSG_PUB.initialize;
135    END IF;
136    --  Initialize API return status to success
137    x_return_status := FND_API.G_RET_STS_SUCCESS;
138    -- API body
139    -- Validate and Default OrgId
140    l_org_id := l_quota_assign_rec.org_id;
141    mo_global.validate_orgid_pub_api(org_id => l_org_id, status => l_status);
142 
143    if (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) then
144        FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,
145                       'cn.plsql.CN_QUOTA_ASSIGN_PUB.Create_Quota_Assign.org_validate',
146                         'Validated org_id = ' || l_org_id || ' status = '|| l_status);
147    end if;
148    l_quota_assign_rec.org_id := l_org_id;
149 
150    -- Validate the input first
151    validate_input_record(l_quota_assign_rec);
152    l_comp_plan_id := validate_cp_name(l_quota_assign_rec.comp_plan_name,l_org_id);
153    l_quota_id := validate_pe_name(l_quota_assign_rec.quota_name,l_org_id);
154 
155    -- Now call the private api
156    l_pvt_quota_assign_rec.comp_plan_id := l_comp_plan_id;
157    l_pvt_quota_assign_rec.quota_id := l_quota_id;
158    l_pvt_quota_assign_rec.quota_sequence := l_quota_assign_rec.quota_sequence;
159    l_pvt_quota_assign_rec.org_id := l_org_id;
160 
161    IF (l_pvt_quota_assign_rec.quota_sequence IS NULL OR l_pvt_quota_assign_rec.quota_sequence = FND_API.G_MISS_NUM) THEN
162      l_pvt_quota_assign_rec.quota_sequence :=1 ;
163    END IF;
164 
165 
166    cn_quota_assign_pvt.create_quota_assign
167      ( p_api_version           =>1.0,
168      p_init_msg_list         => FND_API.G_FALSE,
169      p_commit                => FND_API.G_FALSE,
170      p_validation_level      => FND_API.G_VALID_LEVEL_FULL,
171      p_quota_assign          => l_pvt_quota_assign_rec,
172      x_return_status         => l_return_status,
173      x_msg_count             => l_msg_count,
174      x_msg_data              => l_msg_data);
175 
176    x_return_status := l_return_status;
177    x_msg_count := l_msg_count;
178    x_msg_data := l_msg_data;
179 
180    -- if the private API returned anything other than S just pass on
181    -- the errors and exit
182    if (l_return_status = 'E') then
183       RAISE FND_API.G_EXC_ERROR;
184    ELSIF (l_return_status = 'U') THEN
185       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
186    end if;
187 
188    -- End of API body.
189    -- Standard check of p_commit.
190    IF FND_API.To_Boolean( p_commit ) THEN
191       COMMIT WORK;
192    END IF;
193    -- Standard call to get message count and if count is 1, get message info.
194    FND_MSG_PUB.Count_And_Get
195      (p_count                 =>      x_msg_count             ,
196      p_data                   =>      x_msg_data              ,
197      p_encoded                =>      FND_API.G_FALSE         );
198 EXCEPTION
199    WHEN FND_API.G_EXC_ERROR THEN
200      ROLLBACK TO Create_Quota_Assign_Pub;
201      x_return_status := FND_API.G_RET_STS_ERROR ;
202      FND_MSG_PUB.Count_And_Get
203        (p_count                 =>      x_msg_count             ,
204        p_data                   =>      x_msg_data              ,
205        p_encoded                =>      FND_API.G_FALSE         );
206    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
207      ROLLBACK TO Create_Quota_Assign_Pub;
208      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
209      FND_MSG_PUB.Count_And_Get
210        (p_count                 =>      x_msg_count             ,
211        p_data                   =>      x_msg_data              ,
212        p_encoded                =>      FND_API.G_FALSE         );
213    WHEN OTHERS THEN
214      ROLLBACK TO Create_Quota_Assign_Pub;
215      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
216      IF      FND_MSG_PUB.Check_Msg_Level
217        (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
218      THEN
219         FND_MSG_PUB.Add_Exc_Msg
220           (G_PKG_NAME          ,
221           l_api_name           );
222      END IF;
223      FND_MSG_PUB.Count_And_Get
224        (p_count                 =>      x_msg_count             ,
225        p_data                   =>      x_msg_data              ,
226        p_encoded                =>      FND_API.G_FALSE         );
227 END Create_Quota_Assign;
228 
229 -- Start of comments
230 --      API name      : Update_Quota_Assign
231 --      Type          : Public
232 --      Function      :
233 --      Pre-reqs      : None.
234 --      Parameters    :
235 --      IN            : p_api_version       IN NUMBER       Required
236 --                      p_init_msg_list     IN VARCHAR2     Optional
237 --                        Default = FND_API.G_FALSE
238 --                      p_commit            IN VARCHAR2     Optional
239 --                        Default = FND_API.G_FALSE
240 --                      p_validation_level  IN NUMBER       Optional
241 --                        Default = FND_API.G_VALID_LEVEL_FULL
242 --                      p_quota_assign_rec  IN  quota_assign_rec_type
243 --      OUT           : x_return_status     OUT     VARCHAR2(1)
244 --                      x_msg_count         OUT     NUMBER
245 --                      x_msg_data          OUT     VARCHAR2(2000)
246 --      Version :       Current version       1.0
247 --                      Initial version       1.0
248 --
249 --      Notes         : Note text
250 --
251 -- End of comments
252 PROCEDURE Update_Quota_Assign
253   (p_api_version                  IN      NUMBER                          ,
254    p_init_msg_list                IN      VARCHAR2 := FND_API.G_FALSE     ,
255   p_commit                        IN      VARCHAR2 := FND_API.G_FALSE     ,
256   p_validation_level              IN      NUMBER  :=
257   FND_API.G_VALID_LEVEL_FULL                                              ,
258   p_quota_assign_rec          IN      quota_assign_rec_type           ,
259   x_return_status                 OUT NOCOPY     VARCHAR2                        ,
260   x_msg_count                     OUT NOCOPY     NUMBER                          ,
261   x_msg_data                      OUT NOCOPY    VARCHAR2                        ) IS
262    l_api_name                      CONSTANT VARCHAR2(30)
263      := 'Update_Quota_Assign';
264    l_api_version                   CONSTANT NUMBER                 := 1.0;
265    l_quota_assign_rec  quota_assign_rec_type := p_quota_assign_rec;
266    /*l_new_quota_assign_rec  quota_assign_rec_type := p_new_quota_assign_rec;*/
267    l_comp_plan_id  number := 0;
268    l_quota_id  number := 0;
269    l_pvt_quota_assign_rec   cn_quota_assign_pvt.quota_assign_rec_type;
270    l_return_status  varchar2(1);
271    l_msg_count  number;
272    l_msg_data   varchar2(2000);
273    l_quota_assign_id  number := 0;
274    l_object_version_number  number := 0;
275    CURSOR l_quota_assign_id_csr(p_cp_id number, p_pe_id number)IS
276      SELECT quota_assign_id, object_version_number, org_id
277        FROM cn_quota_assigns
278        WHERE comp_plan_id = p_cp_id
279        AND quota_id = p_pe_id;
280 
281    l_org_id NUMBER;
282    l_status VARCHAR2(1);
283    old_org_id NUMBER;
284    old_quota_id NUMBER;
285 
286 BEGIN
287    -- Standard Start of API savepoint
288    SAVEPOINT   Update_Quota_Assign_Pub;
289    -- Standard call to check for call compatibility.
290    IF NOT FND_API.Compatible_API_Call
291      (l_api_version           ,
292      p_api_version           ,
293      l_api_name              ,
294      G_PKG_NAME )
295    THEN
296       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
297    END IF;
298    -- Initialize message list if p_init_msg_list is set to TRUE.
299    IF FND_API.to_Boolean( p_init_msg_list ) THEN
300       FND_MSG_PUB.initialize;
301    END IF;
302    --  Initialize API return status to success
303    x_return_status := FND_API.G_RET_STS_SUCCESS;
304    -- API body
305 
306    -- Validate and Default OrgId
307    l_org_id := l_quota_assign_rec.org_id;
308    mo_global.validate_orgid_pub_api(org_id => l_org_id, status => l_status);
309 
310    if (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) then
311        FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,
312                       'cn.plsql.CN_QUOTA_ASSIGN_PUB.Update_Quota_Assign.org_validate',
313                         'Validated org_id = ' || l_org_id || ' status = '|| l_status);
314    end if;
315 
316    l_quota_assign_rec.org_id := l_org_id;
317 
318    -- Validate the input first
319    validate_input_record(l_quota_assign_rec);
320 
321    if (l_quota_assign_rec.old_quota_name is NULL OR
322         l_quota_assign_rec.old_quota_name = fnd_api.g_miss_char) then
323 
324          IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
325             FND_MESSAGE.SET_NAME ('CN' , 'CN_REQ_PAR_MISSING');
326             FND_MSG_PUB.Add;
327          END IF;
328          RAISE FND_API.G_EXC_ERROR ;
329    end if;
330 
331 
332    l_comp_plan_id := validate_cp_name(l_quota_assign_rec.comp_plan_name, l_quota_assign_rec.org_id);
333    l_quota_id := validate_pe_name(l_quota_assign_rec.quota_name, l_quota_assign_rec.org_id);
334    old_quota_id := validate_pe_name(l_quota_assign_rec.old_quota_name, l_quota_assign_rec.org_id);
335 
336 
337    -- get the quota assignment id from the old rec
338    OPEN l_quota_assign_id_csr(l_comp_plan_id, old_quota_id);
339    FETCH l_quota_assign_id_csr INTO l_quota_assign_id , l_object_version_number, old_org_id;
340    CLOSE l_quota_assign_id_csr;
341 
342    -- Org id validation
343 
344    if (l_org_id <> old_org_id) then
345 
346        FND_MESSAGE.SET_NAME ('FND' , 'FND_MO_OU_CANNOT_UPDATE');
347        if (FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) then
348             FND_LOG.MESSAGE(FND_LOG.LEVEL_ERROR,
349                          'cn.plsql.CN_QUOTA_ASSIGN_PUB.Update_Quota_Assign.error',
350                          true);
351        end if;
352 
353        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
354          FND_MESSAGE.SET_NAME ('FND' , 'FND_MO_OU_CANNOT_UPDATE');
355          FND_MSG_PUB.Add;
356        END IF;
357 
358        RAISE FND_API.G_EXC_ERROR ;
359   end if;
360 
361    -- now get the quota id for the new rec if necessary
362  /*  if (l_quota_assign_rec.quota_name <> fnd_api.g_miss_char OR
363       l_quota_assign_rec.quota_name IS NOT NULL) then
364       l_quota_id := validate_pe_name(l_quota_assign_rec.quota_name);
365    end if;*/
366 
367    if (l_quota_assign_id is null or l_quota_assign_id = 0) then
368       IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
369          FND_MESSAGE.SET_NAME ('CN' , 'CN_INVALID_PLAN_ASSIGNS');
370          FND_MSG_PUB.Add;
371       END IF;
372       RAISE FND_API.G_EXC_ERROR ;
373    end if;
374 
375    -- Now call the private api
376    l_pvt_quota_assign_rec.comp_plan_id := l_comp_plan_id;
377    l_pvt_quota_assign_rec.quota_id := l_quota_id;
378    l_pvt_quota_assign_rec.quota_sequence := l_quota_assign_rec.quota_sequence;
379    IF (l_pvt_quota_assign_rec.quota_sequence IS NULL OR l_pvt_quota_assign_rec.quota_sequence = FND_API.G_MISS_NUM) THEN
380       l_pvt_quota_assign_rec.quota_sequence := 1;
381    END IF;
382 
383    l_pvt_quota_assign_rec.object_version_number := l_object_version_number;
384    l_pvt_quota_assign_rec.quota_assign_id := l_quota_assign_id;
385    l_pvt_quota_assign_rec.org_id := l_quota_assign_rec.org_id;
386 
387    cn_quota_assign_pvt.update_quota_assign
388      ( p_api_version           =>1.0,
389      p_init_msg_list         => FND_API.G_FALSE,
390      p_commit                => FND_API.G_FALSE,
391      p_validation_level      => FND_API.G_VALID_LEVEL_FULL,
392      p_quota_assign          => l_pvt_quota_assign_rec,
393      x_return_status         => l_return_status,
394      x_msg_count             => l_msg_count,
395      x_msg_data              => l_msg_data);
396 
397    x_return_status := l_return_status;
398    x_msg_count := l_msg_count;
399    x_msg_data := l_msg_data;
400 
401    -- if the private API returned anything other than S just pass on
402    -- the errors and exit
403    if (l_return_status = 'E') then
404       RAISE FND_API.G_EXC_ERROR;
405    ELSIF (l_return_status = 'U') THEN
406       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
407    end if;
408 
409    -- End of API body.
410    -- Standard check of p_commit.
411    IF FND_API.To_Boolean( p_commit ) THEN
412       COMMIT WORK;
413    END IF;
414    -- Standard call to get message count and if count is 1, get message info.
415    FND_MSG_PUB.Count_And_Get
416      (p_count                 =>      x_msg_count             ,
417      p_data                   =>      x_msg_data              ,
418      p_encoded                =>      FND_API.G_FALSE         );
419 EXCEPTION
420    WHEN FND_API.G_EXC_ERROR THEN
421      ROLLBACK TO Update_Quota_Assign_Pub;
422      x_return_status := FND_API.G_RET_STS_ERROR ;
423      FND_MSG_PUB.Count_And_Get
424        (p_count                 =>      x_msg_count             ,
425        p_data                   =>      x_msg_data              ,
426        p_encoded                =>      FND_API.G_FALSE         );
427    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
428      ROLLBACK TO Update_Quota_Assign_Pub;
429      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
430      FND_MSG_PUB.Count_And_Get
431        (p_count                 =>      x_msg_count             ,
432        p_data                   =>      x_msg_data              ,
433        p_encoded                =>      FND_API.G_FALSE         );
434    WHEN OTHERS THEN
435      ROLLBACK TO Update_Quota_Assign_Pub;
436      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
437      IF      FND_MSG_PUB.Check_Msg_Level
438        (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
439      THEN
440         FND_MSG_PUB.Add_Exc_Msg
441           (G_PKG_NAME          ,
442           l_api_name           );
443      END IF;
444      FND_MSG_PUB.Count_And_Get
445        (p_count                 =>      x_msg_count             ,
446        p_data                   =>      x_msg_data              ,
447        p_encoded                =>      FND_API.G_FALSE         );
448 END Update_Quota_Assign;
449 
450 -- Start of comments
451 --      API name      : Delete_Quota_Assign
452 --      Type          : Public
453 --      Function      :
454 --      Pre-reqs      : None.
455 --      Parameters    :
456 --      IN            : p_api_version       IN NUMBER       Required
457 --                      p_init_msg_list     IN VARCHAR2     Optional
458 --                        Default = FND_API.G_FALSE
459 --                      p_commit            IN VARCHAR2     Optional
460 --                        Default = FND_API.G_FALSE
461 --                      p_validation_level  IN NUMBER       Optional
462 --                        Default = FND_API.G_VALID_LEVEL_FULL
463 --                      p_quota_assign_rec  IN  quota_assign_rec_type
464 --      OUT           : x_return_status     OUT     VARCHAR2(1)
465 --                      x_msg_count         OUT     NUMBER
466 --                      x_msg_data          OUT     VARCHAR2(2000)
467 --      Version :       Current version       1.0
468 --                      Initial version       1.0
469 --
470 --      Notes         : Note text
471 --
472 -- End of comments
473 PROCEDURE Delete_Quota_Assign
474   (p_api_version                  IN      NUMBER                          ,
475    p_init_msg_list                IN      VARCHAR2 := FND_API.G_FALSE     ,
476   p_commit                        IN      VARCHAR2 := FND_API.G_FALSE     ,
477   p_validation_level              IN      NUMBER  :=
478   FND_API.G_VALID_LEVEL_FULL                                              ,
479   p_quota_assign_rec            IN      quota_assign_rec_type           ,
480   x_return_status                 OUT NOCOPY     VARCHAR2                        ,
481   x_msg_count                     OUT NOCOPY    NUMBER                          ,
482   x_msg_data                      OUT NOCOPY    VARCHAR2                        ) IS
483    l_api_name                      CONSTANT VARCHAR2(30)
484      := 'Delete_Quota_Assign';
485    l_api_version                   CONSTANT NUMBER                 := 1.0;
486    l_quota_assign_rec  quota_assign_rec_type := p_quota_assign_rec;
487    l_comp_plan_id  number := 0;
488    l_quota_id  number := 0;
489    l_pvt_quota_assign_rec   cn_quota_assign_pvt.quota_assign_rec_type;
490    l_return_status  varchar2(1);
491    l_msg_count  number;
492    l_msg_data   varchar2(2000);
493    l_quota_assign_id  number := 0;
494    l_object_version_number  number := 0;
495    CURSOR l_quota_assign_id_csr(p_cp_id number, p_pe_id number)IS
496      SELECT quota_assign_id, object_version_number, org_id
497        FROM cn_quota_assigns
498        WHERE comp_plan_id = p_cp_id
499        AND quota_id = p_pe_id;
500 
501    l_org_id NUMBER;
502    l_status VARCHAR2(1);
503    old_org_id NUMBER;
504 
505 BEGIN
506    -- Standard Start of API savepoint
507    SAVEPOINT   Delete_Quota_Assign_Pub;
508    -- Standard call to check for call compatibility.
509    IF NOT FND_API.Compatible_API_Call
510      (l_api_version           ,
511      p_api_version           ,
512      l_api_name              ,
513      G_PKG_NAME )
514    THEN
515       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
516    END IF;
517    -- Initialize message list if p_init_msg_list is set to TRUE.
518    IF FND_API.to_Boolean( p_init_msg_list ) THEN
519       FND_MSG_PUB.initialize;
520    END IF;
521    --  Initialize API return status to success
522    x_return_status := FND_API.G_RET_STS_SUCCESS;
523    -- API body
524    -- Validate and Default OrgId
525    l_org_id := l_quota_assign_rec.org_id;
526    mo_global.validate_orgid_pub_api(org_id => l_org_id, status => l_status);
527 
528    if (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) then
529        FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,
530                       'cn.plsql.CN_QUOTA_ASSIGN_PUB.Delete_Quota_Assign.org_validate',
531                         'Validated org_id = ' || l_org_id || ' status = '|| l_status);
532    end if;
533 
534    l_quota_assign_rec.org_id := l_org_id;
535 
536 
537    -- Validate the input first
538    validate_input_record(l_quota_assign_rec);
539    l_comp_plan_id := validate_cp_name(l_quota_assign_rec.comp_plan_name,l_quota_assign_rec.org_id);
540    l_quota_id := validate_pe_name(l_quota_assign_rec.quota_name,l_quota_assign_rec.org_id);
541 
542    -- get the quota assignment id
543    OPEN l_quota_assign_id_csr(l_comp_plan_id, l_quota_id);
544    FETCH l_quota_assign_id_csr INTO l_quota_assign_id , l_object_version_number, old_org_id;
545    CLOSE l_quota_assign_id_csr;
546 
547    -- Org id validation
548 
549     if (l_org_id <> old_org_id) then
550 
551 	  FND_MESSAGE.SET_NAME ('FND' , 'FND_MO_OU_CANNOT_UPDATE');
552 	  if (FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) then
553 	       FND_LOG.MESSAGE(FND_LOG.LEVEL_ERROR,
554 			    'cn.plsql.CN_QUOTA_ASSIGN_PUB.Delete_Quota_Assign.error',
555 			    true);
556 	  end if;
557 
558 	  IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
559 	    FND_MESSAGE.SET_NAME ('FND' , 'FND_MO_OU_CANNOT_UPDATE');
560 	    FND_MSG_PUB.Add;
561 	  END IF;
562 
563 	  RAISE FND_API.G_EXC_ERROR ;
564    end if;
565 
566    if (l_quota_assign_id is null or l_quota_assign_id = 0) then
567       IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
568          FND_MESSAGE.SET_NAME ('CN' , 'CN_INVALID_PLAN_ASSIGNS');
569          FND_MSG_PUB.Add;
570       END IF;
571       RAISE FND_API.G_EXC_ERROR ;
572    end if;
573 
574    -- Now call the private api
575    l_pvt_quota_assign_rec.comp_plan_id := l_comp_plan_id;
576    l_pvt_quota_assign_rec.quota_id := l_quota_id;
577    l_pvt_quota_assign_rec.quota_sequence := l_quota_assign_rec.quota_sequence;
578    l_pvt_quota_assign_rec.object_version_number := l_object_version_number;
579    l_pvt_quota_assign_rec.quota_assign_id := l_quota_assign_id;
580 	 l_pvt_quota_assign_rec.org_id := l_quota_assign_rec.org_id;
581 
582    cn_quota_assign_pvt.delete_quota_assign
583      ( p_api_version           =>1.0,
584      p_init_msg_list         => FND_API.G_FALSE,
585      p_commit                => FND_API.G_FALSE,
586      p_validation_level      => FND_API.G_VALID_LEVEL_FULL,
587      p_quota_assign          => l_pvt_quota_assign_rec,
588      x_return_status         => l_return_status,
589      x_msg_count             => l_msg_count,
590      x_msg_data              => l_msg_data);
591 
592    x_return_status := l_return_status;
593    x_msg_count := l_msg_count;
594    x_msg_data := l_msg_data;
595 
596    -- if the private API returned anything other than S just pass on
597    -- the errors and exit
598    if (l_return_status = 'E') then
599       RAISE FND_API.G_EXC_ERROR;
600    ELSIF (l_return_status = 'U') THEN
601       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
602    end if;
603 
604    -- End of API body.
605    -- Standard check of p_commit.
606    IF FND_API.To_Boolean( p_commit ) THEN
607       COMMIT WORK;
608    END IF;
609    -- Standard call to get message count and if count is 1, get message info.
610    FND_MSG_PUB.Count_And_Get
611      (p_count                 =>      x_msg_count             ,
612      p_data                   =>      x_msg_data              ,
613      p_encoded                =>      FND_API.G_FALSE         );
614 EXCEPTION
615    WHEN FND_API.G_EXC_ERROR THEN
616      ROLLBACK TO Delete_Quota_Assign_Pub;
617      x_return_status := FND_API.G_RET_STS_ERROR ;
618      FND_MSG_PUB.Count_And_Get
619        (p_count                 =>      x_msg_count             ,
620        p_data                   =>      x_msg_data              ,
621        p_encoded                =>      FND_API.G_FALSE         );
622    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
623      ROLLBACK TO Delete_Quota_Assign_Pub;
624      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
625      FND_MSG_PUB.Count_And_Get
626        (p_count                 =>      x_msg_count             ,
627        p_data                   =>      x_msg_data              ,
628        p_encoded                =>      FND_API.G_FALSE         );
629    WHEN OTHERS THEN
630      ROLLBACK TO Delete_Quota_Assign_Pub;
631      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
632      IF      FND_MSG_PUB.Check_Msg_Level
633        (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
634      THEN
635         FND_MSG_PUB.Add_Exc_Msg
636           (G_PKG_NAME          ,
637           l_api_name           );
638      END IF;
639      FND_MSG_PUB.Count_And_Get
640        (p_count                 =>      x_msg_count             ,
641        p_data                   =>      x_msg_data              ,
642        p_encoded                =>      FND_API.G_FALSE         );
643 END Delete_Quota_Assign;
644 
645 END CN_QUOTA_ASSIGN_PUB;