DBA Data[Home] [Help]

PACKAGE BODY: APPS.JTF_TERRITORY_PVT

Source


1 Package  BODY JTF_TERRITORY_PVT  AS
2 /* $Header: jtfvterb.pls 120.11 2011/05/12 20:29:07 srguntur ship $ */
3 --    ---------------------------------------------------
4 --  Start of Comments
5 --  ---------------------------------------------------
6 --  PACKAGE NAME:   JTF_TERRITORY_PVT
7 --  ---------------------------------------------------
8 --  PURPOSE
9 --    Joint task force core territory manager private api's.
10 --    This package is defins all private API for manupulating
11 --    territory related information in JTF Territory tables.
12 --
13 --  Procedures:
14 --    (see below for specification)
15 --
16 --  NOTES
17 --    This package is publicly available for use
18 --  HISTORY
19 --    06/09/99    VNEDUNGA     Created
20 --    11/29/99    VNEDUNGA     Fixing update_territory_record API
21 --                             for application_short_name
22 --    01/14/00    VNEDUNGA     PASSING ORG_ID to terr_api table handler
23 --    01/31/00    VNEDUNGA     Adding overlap_exists function
24 --    03/09/00    VNEDUNGA     Changing to validaton routines and
25 --                             adding FND_MESSAGE calls
26 --    04/04/00	  EIHSU	       Added Gen_Duplicate_Territory and relevant procs
27 --    04/20/94    VNEDUNGA     Fixing the qualifer validation from returning
28 --                             multiple rows
29 --    05/01/00    VNEDUNGA     Adding currency convertion routines
30 --    05/01/00    VNEDUNGA     changing the Delete_Territory API to use
31 --                             direct DELETE DMLs. Also changed the API
32 --                             to delete the whole hierarchy
33 --    05/03/00    VNEDUNGA     Eliminating ref to _all tables
34 --    06/14/00    VNEDUNGA     Changing the overlap exists function and
35 --                             added rownum < 2 to function to return desc
36 --    07/20/00    JDOCHERT     Changed as follows in Create_territory_record
37 --                             as this meant that a terr_id passed
38 --                             into Create API was ignored:
39 --                             l_terr_id := 0;
40 --                             TO
41 --                             l_terr_id                     NUMBER := P_TERR_ALL_REC.TERR_ID;
42 --    08/08/00    jdochert     Removing if statement that causes error when LOW_VALUE_CHAR = FND_API.G_MISS_CHAR
43 --                             and ID_USED_FLAG = 'Y": this was an error in logic.
44 --    08/21/00    jdochert     Changing overlap_exists procedure to do an UPPER on comparison operator
45 --    09/09/00    jdochert     Added Unique validation for JTF_TERR_USGS_ALL + JTF_TERR_QTYPE_USGS_ALL
46 --    09/17/00    jdochert     BUG#1408610 FIX
47 --
48 --    10/04/00    jdochert     Added validation for NUM_WINNERS
49 --    11/02/00    jdochert     Added processing for NUM_QUAL
50 --    12/07/00    jdochert
51 --    04/05/01    ARPATEL      Added processing for copy hierarchy in proc 'Copy Territory'
52 --    04/12/01    jdochert     Added PROCEDURE chk_num_copy_terr
53 --    04/20/01    ARPATEL      Added Concurrent_Copy_Territory procedure for concurrent requests
54 --    04/28/01    ARPATEL      Added FUNCTION conc_req_copy_terr returning concurrent request ID.
55 --    05/22/01	  ARPATEL      Added CNR_GROUP_ID to cursors selecting from JTF_TERR_VALUES.
56 --    07/13/01    ARPATEL      Added validation for territory templates without 'DYNAMIC QUALIFIERS'
57 --    09/06/01    ARPATEL      Added VALUE1_ID, VALUE2_ID AND VALUE3_ID to JTF_TERR_VALUES cursors
58 --                             and procedure create_new_terr_value_rec
59 --    09/18/01    ARPATEL      Removed debug message level checks to enable form to pick up these messages
60 --    12/03/04    achanda      Added value4_id : bug # 3726007
61 --
62 --
63 --  End of Comments
64 --
65 
66 -- ***************************************************
67 --              GLOBAL VARIABLES
68 -- ***************************************************
69    G_PKG_NAME      CONSTANT VARCHAR2(30):='JTF_TERRITORY_PVT';
70    G_FILE_NAME     CONSTANT VARCHAR2(12):='jtfvterb.pls';
71 
72 
73    G_APPL_ID         NUMBER       := FND_GLOBAL.Prog_Appl_Id;
74    G_LOGIN_ID        NUMBER       := FND_GLOBAL.Conc_Login_Id;
75    G_PROGRAM_ID      NUMBER       := FND_GLOBAL.Conc_Program_Id;
76    G_USER_ID         NUMBER       := FND_GLOBAL.User_Id;
77    G_REQUEST_ID      NUMBER       := FND_GLOBAL.Conc_Request_Id;
78    G_APP_SHORT_NAME  VARCHAR2(15) := FND_GLOBAL.Application_Short_Name;
79    /* ARPATEL 041801 */
80    G_Debug           BOOLEAN  := FALSE;
81 
82   /*-------------------*/
83   /* TYPE declarations */
84   /*-------------------*/
85 
86   /* stores info about each qualifier used in mass generation of templates
87   ** from a template territory
88   ** start_record stores a pointer to the first record for the qualifier
89   ** in g_values_table.
90   ** num_records stores the number of values for the qualifier in
91   ** g_values_table.
92   ** current_record stores pointer to the current record used during
93   ** the generation process.
94   */
95   TYPE Dynamic_Qual_Rec_Type IS RECORD (
96      Rowid                         VARCHAR2(50) ,   -- := FND_API.G_MISS_CHAR,
97      TERR_QUAL_ID                  NUMBER       ,   -- := FND_API.G_MISS_NUM,
98      LAST_UPDATE_DATE              DATE         ,   -- := FND_API.G_MISS_DATE,
99      LAST_UPDATED_BY               NUMBER       ,   -- := FND_API.G_MISS_NUM,
100      CREATION_DATE                 DATE         ,   -- := FND_API.G_MISS_DATE,
101      CREATED_BY                    NUMBER       ,   -- := FND_API.G_MISS_NUM,
102      LAST_UPDATE_LOGIN             NUMBER       ,   -- := FND_API.G_MISS_NUM,
103      TERR_ID                       NUMBER       ,   -- := FND_API.G_MISS_NUM,
104      QUAL_USG_ID                   NUMBER       ,   -- := FND_API.G_MISS_NUM,
105      USE_TO_NAME_FLAG              VARCHAR2(1)  ,   -- := FND_API.G_MISS_CHAR,
106      GENERATE_FLAG                 VARCHAR2(1)  ,   -- := FND_API.G_MISS_CHAR,
107      OVERLAP_ALLOWED_FLAG          VARCHAR2(1)  ,   -- := FND_API.G_MISS_CHAR,
108      QUALIFIER_MODE                VARCHAR2(30) ,   -- := FND_API.G_MISS_CHAR,
109      ORG_ID                        NUMBER           -- := FND_API.G_MISS_NUM
110    , START_RECORD                  NUMBER
111    , NUM_RECORDS                   NUMBER
112    , CURRENT_VALUE_SET             NUMBER
113    , CURRENT_RECORD                NUMBER );
114 
115   TYPE Dynamic_Qual_Tbl_Type IS TABLE OF Dynamic_Qual_Rec_Type
116                                INDEX BY BINARY_INTEGER;
117 
118 
119 --    ***************************************************
120 --    start of comments
121 --    ***************************************************
122 --    API name  : Create_Territory
123 --    Type      : PUBLIC
124 --    Function  : To create Territories - which inludes the creation of
125 --                following Territory Header, Territory Qualifier, terr Usages,
126 --                qualifier type usages Territory Qualifier Values
127 --
128 --    Pre-reqs  :
129 --    Parameters:
130 --     IN       :
131 --      Required
132 --      Parameter Name                Data Type                        Default
133 --      p_Api_Version_Number          NUMBER
134 --      p_Terr_All_Rec                Terr_All_Rec_Type           := G_Miss_Terr_All_Rec
135 --      p_Terr_Usgs_Tbl               Terr_Usgs_Tbl_Type          := G_MISS_Terr_Usgs_Tbl
136 --      p_Terr_QualTypeUsgs_Tbl       Terr_QualTypeUsgs_Tbl_Type  := G_Miss_Terr_QualTypeUsgs_Tbl
137 --      p_Terr_Qual_Tbl               Terr_Qual_Tbl_Type          := G_Miss_Terr_Qual_Tbl
138 --      p_Terr_Values_Tbl             Terr_Values_Tbl_Type        := G_Miss_Terr_Values_Tbl
139 --
140 --      Optional
141 --      Parameter Name                Data Type  Default
142 --      p_Init_Msg_List               VARCHAR2                    := FND_API.G_FALSE
143 --      p_Commit                      VARCHAR2                    := FND_API.G_FALSE
144 --      p_validation_level            NUMBER                      := FND_API.G_VALID_LEVEL_FULL,
145 --
146 --     OUT     :
147 --      Parameter Name                Data Type
148 --      x_Return_Status               VARCHAR2(1)
149 --      x_Msg_Count                   NUMBER
150 --      x_Msg_Data                    VARCHAR2(2000)
151 --      x_Terr_Id                     NUMBER
152 --      x_Terr_Usgs_Out_Tbl           Terr_Usgs_Out_Tbl,
153 --      x_Terr_QualTypeUsgs_Out_Tbl   Terr_QualTypeUsgs_Out_Tbl,
154 --      x_Terr_Qual_Out_Tbl           Terr_Qual_Out_Tbl,
155 --      x_Terr_Values_Out_Tbl         Terr_Values_Out_Tbl
156 --
157 --
158 --    Notes:
159 --    Business Rules:
160 --      1. Make sure terr usages and terr qual usages are specified.
161 --      2. Make sure the qualifer matches the qualifer type usage
162 --      3. Make sure value records exists for every qualifer
163 --
164 --    End of Comments
165 --
166  PROCEDURE Create_Territory
167  (p_Api_Version_Number          IN  NUMBER,
168   p_Init_Msg_List               IN  VARCHAR2                    := FND_API.G_FALSE,
169   p_Commit                      IN  VARCHAR2                    := FND_API.G_FALSE,
170   p_validation_level            IN  NUMBER                      := FND_API.G_VALID_LEVEL_FULL,
171   x_Return_Status               OUT NOCOPY VARCHAR2,
172   x_Msg_Count                   OUT NOCOPY NUMBER,
173   x_Msg_Data                    OUT NOCOPY VARCHAR2,
174   p_Terr_All_Rec                IN  Terr_All_Rec_Type           := G_Miss_Terr_All_Rec,
175   p_Terr_Usgs_Tbl               IN  Terr_Usgs_Tbl_Type          := G_MISS_Terr_Usgs_Tbl,
176   p_Terr_QualTypeUsgs_Tbl       IN  Terr_QualTypeUsgs_Tbl_Type  := G_Miss_Terr_QualTypeUsgs_Tbl,
177   p_Terr_Qual_Tbl               IN  Terr_Qual_Tbl_Type          := G_Miss_Terr_Qual_Tbl,
178   p_Terr_Values_Tbl             IN  Terr_Values_Tbl_Type        := G_Miss_Terr_Values_Tbl,
179   x_Terr_Id                     OUT NOCOPY NUMBER,
180   x_Terr_Usgs_Out_Tbl           OUT NOCOPY Terr_Usgs_Out_Tbl_Type,
181   x_Terr_QualTypeUsgs_Out_Tbl   OUT NOCOPY Terr_QualTypeUsgs_Out_Tbl_Type,
182   x_Terr_Qual_Out_Tbl           OUT NOCOPY Terr_Qual_Out_Tbl_Type,
183   x_Terr_Values_Out_Tbl         OUT NOCOPY Terr_Values_Out_Tbl_Type)
184  AS
185       l_api_name                  CONSTANT VARCHAR2(30) := 'Create_Territory';
186       l_api_version_number        CONSTANT NUMBER       := 1.0;
187 
188       -- Status Local Variables
189       l_return_status             VARCHAR2(1);  -- Return value from procedures
190       l_return_status_full        VARCHAR2(1);  -- Calculated return status from                                                -- all return values
191 
192       l_terr_all_out_rec          Terr_ALL_OUT_REC_TYPE;
193       l_Terr_Usgs_Out_Tbl         Terr_Usgs_Out_Tbl_Type;
194       l_Terr_QualTypeUsgs_Out_Tbl Terr_QualTypeUsgs_Out_Tbl_Type;
195       l_Terr_Qual_Out_Tbl         Terr_Qual_Out_Tbl_Type;
196       l_Terr_Values_Out_Tbl       Terr_Values_Out_Tbl_Type;
197 
198       l_Terr_Qual_Tbl             Terr_Qual_Tbl_Type;
199       l_Terr_Values_Tbl           Terr_Values_Tbl_Type;
200       l_Terr_Id                   NUMBER   := 0;
201       l_Terr_Qual_Id              NUMBER   := 0;
202       l_Qual_Counter              NUMBER   := 1;
203       l_QualVal_Counter           NUMBER   := 0;
204       l_counter                   NUMBER   := 0;
205       l_index                     NUMBER   := 0;
206 
207       l_msg_count                 NUMBER;
208       l_msg_data                  VARCHAR2(2000);
209       L_SHORT_NAME                VARCHAR2(15);
210 
211    BEGIN
212       --dbms_output('Create_Territory PVT: Entering API -' || G_APP_SHORT_NAME);
213 
214       -- Standard Start of API savepoint
215       SAVEPOINT CREATE_TERRITORY_PVT;
216 
217       -- Standard call to check for call compatibility.
218       IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
219                                            p_api_version_number,
220                                            l_api_name,
221                                            G_PKG_NAME)
222       THEN
223           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
224       END IF;
225 
226       -- Initialize message list if p_init_msg_list is set to TRUE.
227       IF FND_API.to_Boolean( p_init_msg_list ) THEN
228           FND_MSG_PUB.initialize;
229       END IF;
230 
231       -- Debug Message
232       IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
233       THEN
234           FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_START_MSG');
235           FND_MESSAGE.Set_Name('PROC_NAME', l_api_name);
236           FND_MSG_PUB.Add;
237       END IF;
238 
239       --  Initialize API return status to success
240       x_return_status := FND_API.G_RET_STS_SUCCESS;
241       --
242       --Check whether the Usage records are specified
243       If (p_Terr_Usgs_Tbl.COUNT  = 0 ) Then
244          IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
245             FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_TERR_USAGE');
246             FND_MSG_PUB.ADD;
247          END IF;
248          x_return_status := FND_API.G_RET_STS_ERROR;
249          raise FND_API.G_EXC_ERROR;
250       END IF;
251       --
252       --dbms_output('About to check p_Terr_Values_Tbl.count - ' || to_char(p_Terr_Values_Tbl.count));
253       --
254       /*
255       -- Check whether the Terr Transaction Types are specified.
256       If (p_Terr_QualTypeUsgs_Tbl.COUNT  = 0 and
257           p_Terr_All_Rec.ESCALATION_TERRITORY_FLAG <> 'Y') Then
258           IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
259              FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_TERR_QUAL_USG');
260              FND_MSG_PUB.ADD;
261           END IF;
262           x_return_status := FND_API.G_RET_STS_ERROR;
263           raise FND_API.G_EXC_ERROR;
264       END IF;
265       */
266       --
267       --
268       -- API body
269       --
270       --
271       -- If incomming data is good
272       -- Start creating territory related records
273       --
274       --dbms_output('Create_Territory PVT: Before Calling Create_Territory_Header');
275       --
276       Create_Territory_Header(P_Api_Version_Number          =>  P_Api_Version_Number,
277                               P_Init_Msg_List               =>  P_Init_Msg_List,
278                               P_Commit                      =>  P_Commit,
279                               p_validation_level            =>  p_validation_level,
280                               P_Terr_All_Rec                =>  P_Terr_All_Rec,
281                               P_Terr_Usgs_Tbl               =>  P_Terr_Usgs_Tbl,
282                               --P_Terr_QualTypeUsgs_Tbl       =>  P_Terr_QualTypeUsgs_Tbl,
283                               X_Return_Status               =>  l_Return_Status,
284                               X_Msg_Count                   =>  l_Msg_Count,
285                               X_Msg_Data                    =>  l_Msg_Data,
286                               X_Terr_All_Out_Rec            =>  l_Terr_All_Out_Rec,
287                               X_Terr_Usgs_Out_Tbl           =>  l_Terr_Usgs_Out_Tbl,
288                               X_Terr_QualTypeUsgs_Out_Tbl   =>  l_Terr_QualTypeUsgs_Out_Tbl
289                               );
290 
291       --Save the territory id for later use
292       l_terr_id := l_Terr_All_Out_Rec.terr_id;
293       X_terr_id := l_Terr_All_Out_Rec.terr_id;
294 
295       x_Terr_Usgs_Out_Tbl           := l_Terr_Usgs_Out_Tbl;
296       x_Terr_QualTypeUsgs_Out_Tbl   := l_Terr_QualTypeUsgs_Out_Tbl;
297 
298       IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
299          X_Return_Status := l_return_status;
300          RAISE FND_API.G_EXC_ERROR;
301       END IF;
302 
303      --dbms_output.put_line('Value of  x_return_status='|| x_return_status);
304 
305       --Check whether the Qualifer records are specified
306       --If (p_Terr_Qual_Tbl.count  = 0 ) Then
307       --   IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
308       --      FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_TERR_QUAL');
309       --      FND_MSG_PUB.ADD;
310       --   END IF;
311       --   x_return_status := FND_API.G_RET_STS_ERROR;
312       --   raise FND_API.G_EXC_ERROR;
313       --END IF;
314       --
315 
316       IF (p_Terr_Qual_Tbl.COUNT > 0 ) THEN
317 
318          For l_Qual_Counter IN p_Terr_Qual_Tbl.first .. p_Terr_Qual_Tbl.count LOOP
319              --
320              l_Terr_Qual_Tbl(1) := p_Terr_Qual_Tbl(l_Qual_Counter);
321 
322              --
323              --dbms_output('Create_Territory PVT: Inside the l_Qual_Counter LOOP');
324              --dbms_output('Create_Territory PVT: Before calling create terr qualifier');
325              --
326              -- Create the territory qualifier record
327                 --
328              --dbms_output('Create_Territory PVT: Before calling  Create_Terr_Qualifier');
329              Create_Terr_Qualifier(P_Api_Version_Number          =>  P_Api_Version_Number,
330                                    P_Init_Msg_List               =>  P_Init_Msg_List,
331                                    P_Commit                      =>  P_Commit,
332                                    p_validation_level            =>  p_validation_level,
333                                    P_Terr_Id                     =>  l_terr_id,
334                                    P_Terr_Qual_Tbl               =>  l_Terr_Qual_Tbl,
335                                    X_Return_Status               =>  l_Return_Status,
336                                    X_Msg_Count                   =>  l_Msg_Count,
337                                    X_Msg_Data                    =>  l_Msg_Data,
338                                    X_Terr_Qual_Out_Tbl           =>  l_Terr_Qual_Out_Tbl);
339 
340              --Save the output status
341              x_Terr_Qual_Out_Tbl(nvl(x_Terr_Qual_Out_Tbl.first, 0)+1)  := l_Terr_Qual_Out_Tbl(1);
342              -- Save the terr qualifier id
343              l_Terr_Qual_Id := l_Terr_Qual_Out_Tbl(1).terr_qual_id;
344 
345              IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
346                 X_Return_Status := l_return_status;
347                 RAISE FND_API.G_EXC_ERROR;
348              END IF;
349 
350              -- JDOCHERT 07/27 Territory Values no longer required
351              IF (p_Terr_Values_Tbl.COUNT  > 0) THEN
352 
353                  l_terr_values_tbl.DELETE;
354                  l_index := 0;
355 
356                  -- Save the qual value records for a particular qualifer into
357                  -- local table
358                  FOR l_QualVal_Counter IN p_Terr_Values_Tbl.FIRST .. p_Terr_Values_Tbl.LAST LOOP
359                      -- Initalize the table
360                      -- dbms_output('Create_Territory PVT: Inside l_QualVal_Counter loop - ' || to_char(l_QualVal_Counter) );
361                      -- If the table index changes, then skip the loop
362                      If p_Terr_Values_Tbl(l_QualVal_Counter).qualifier_tbl_index = l_Qual_Counter Then
363                         l_index := l_index + 1;
364                         --dbms_output('Create_Territory PVT: Found values - ' || to_char(l_Qual_Counter) || ' Index - ' || to_char(l_index) );
365                         l_Terr_Values_Tbl(l_index) :=  p_Terr_Values_Tbl(l_QualVal_Counter);
366                      End If;
367 
368                  END LOOP;
369 
370                  --Remove the qualifier if no values are specified.
371                  BEGIN
372                     IF l_index = 0 THEN
373                         JTF_TERR_QUAL_PKG.Delete_Row(x_terr_qual_id  => l_Terr_Qual_Id );
374                         FND_MESSAGE.Set_Name('JTF', 'JTY_TERR_MISSING_TERR_VALUES');
375                         FND_MESSAGE.Set_Token('QUAL_USG_ID', to_char(l_Terr_Qual_Tbl(1).QUAL_USG_ID));
376                         FND_MSG_PUB.ADD;
377                      End If;
378                  END;
379 
380                  IF  (l_terr_values_tbl.COUNT > 0) THEN
381 
382                      --dbms_output('Create_Territory PVT: Before calling create terr qualifier values');
383                      --
384                      l_Terr_Values_Out_Tbl.Delete;
385                      Create_Terr_Value( P_Api_Version_Number  =>  P_Api_Version_Number,
386                                         P_Init_Msg_List       =>  P_Init_Msg_List,
387                                         P_Commit              =>  P_Commit,
388                                         p_validation_level    =>  p_validation_level,
389                                         P_Terr_Id             =>  l_terr_id,
390                                         p_terr_qual_id        =>  l_Terr_Qual_Id,
391                                         P_Terr_Value_Tbl      =>  l_Terr_Values_Tbl,
392                                         X_Return_Status       =>  l_Return_Status,
393                                         X_Msg_Count           =>  l_Msg_Count,
394                                         X_Msg_Data            =>  l_Msg_Data,
395                                         X_Terr_Value_Out_Tbl  =>  l_Terr_Values_Out_Tbl);
396                      --
397                      l_index := x_Terr_Values_Out_Tbl.COUNT;
398                      --
399                      -- Save the OUT parameters to the original API out parametrs
400                      For l_Counter IN l_Terr_Values_Out_Tbl.FIRST .. l_Terr_Values_Out_Tbl.LAST LOOP
401                          l_index := l_index + 1;
402                          x_Terr_Values_Out_Tbl(l_index) := l_Terr_Values_Out_Tbl(l_counter);
403                      End LOOP;
404 
405                  END IF;
406 
407                  --
408                  IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
409                     X_Return_Status := l_return_status;
410                     RAISE FND_API.G_EXC_ERROR;
411                  END IF;
412 
413              END IF; /*  IF  (l_terr_values_tbl.COUNT > 0) */
414 
415               -- Reset the table and records to G_MISS_RECORD and G_MISS_TABLE
416              l_Terr_Qual_Tbl    := G_MISS_TERR_QUAL_TBL;
417              l_Terr_Values_Tbl  := G_MISS_TERR_VALUES_TBL;
418              --
419          End LOOP;
420 
421       END IF;   /* p_Terr_Qual_Tbl.count > 0 */
422 
423       IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
424          X_Return_Status := l_return_status;
425          RAISE FND_API.G_EXC_ERROR;
426       END IF;
427 
428       --If the program reached here, that mena evry thing went smooth
429       x_return_status := FND_API.G_RET_STS_SUCCESS;
430 
431       -- Debug Message
432       IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
433       THEN
434          FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_END_MSG');
435          FND_MESSAGE.Set_Name('PROC_NAME', l_api_name);
436          FND_MSG_PUB.Add;
437       END IF;
438 
439 
440       FND_MSG_PUB.Count_And_Get
441       (  p_count          =>   x_msg_count,
442          p_data           =>   x_msg_data
443       );
444 
445       -- Standard check for p_commit
446       IF FND_API.to_Boolean( p_commit )
447       THEN
448          COMMIT WORK;
449       END IF;
450   --
451   EXCEPTION
452   --
453     WHEN FND_API.G_EXC_ERROR THEN
454          --dbms_output('Create_Territory PVT: FND_API.G_EXC_ERROR');
455          ROLLBACK TO CREATE_TERRITORY_PVT;
456          x_return_status     := FND_API.G_RET_STS_ERROR ;
457          FND_MSG_PUB.Count_And_Get
458          (  p_count          =>   x_msg_count,
459             p_data           =>   x_msg_data
460          );
461 
462     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
463          --dbms_output('Create_Territory PVT: FND_API.G_EXC_UNEXPECTED_ERROR');
464          ROLLBACK TO CREATE_TERRITORY_PVT;
465          X_return_status     := FND_API.G_RET_STS_UNEXP_ERROR;
466          FND_MSG_PUB.Count_And_Get
467          (  p_count          =>   x_msg_count,
468             p_data           =>   x_msg_data
469          );
470 
471     WHEN OTHERS THEN
472          --dbms_output('Create_Territory PVT: OTHERS - ' || SQLERRM);
473          ROLLBACK TO CREATE_TERRITORY_PVT;
474          X_return_status     := FND_API.G_RET_STS_UNEXP_ERROR;
475          FND_MSG_PUB.Count_And_Get
476          (  p_count          =>   x_msg_count,
477             p_data           =>   x_msg_data
478          );
479    --
480    END Create_Territory;
481 
482 
483 --    ***************************************************
484 --    start of comments
485 --    ***************************************************
486 --
487 --    API name  : Delete_Territory
488 ---    Type      : PUBLIC
489 --    Function  : To delete Territories - which would also delete
490 --                Territory Header, Territory Qualifier,
491 --                Territory Qualifier Values and Resources.
492 --
493 --    Pre-reqs  :
494 --    Parameters:
495 --     IN       :
496 --      Required
497 --      Parameter Name             Data Type                        Default
498 --      p_Api_Version_Number       NUMBER
499 --      p_Terr_Id                  NUMBER
500 --
501 --      Optional
502 --      Parameter Name             Data Type                        Default
503 --      p_Init_Msg_List            VARCHAR2                         FND_API.G_FALSE
504 --      p_Commit                   VARCHAR2                         FND_API.G_FALSE
505 --      p_validation_level         NUMBER                           FND_API.G_VALID_LEVEL_FULL,
506 --
507 --     OUT     :
508 --      Parameter Name             Data Type
509 --      X_Return_Status            VARCHAR2(1)
510 --      X_Msg_Count                NUMBER
511 --      X_Msg_Data                 VARCHAR2(2000)
512 --
513 --
514 --    Notes:
515 --          Rules for deletion have to be very strict.
516 --
517 --    End of Comments
518 --
519 PROCEDURE Delete_Territory
520  (p_Api_Version_Number      IN  NUMBER,
521   p_Init_Msg_List           IN  VARCHAR2 := FND_API.G_FALSE,
522   p_Commit                  IN  VARCHAR2 := FND_API.G_FALSE,
523   p_validation_level        IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
524   X_Return_Status           OUT NOCOPY VARCHAR2,
525   X_Msg_Count               OUT NOCOPY NUMBER,
526   X_Msg_Data                OUT NOCOPY VARCHAR2,
527   p_Terr_Id                 IN  NUMBER)
528 AS
529   v_Terr_Id                 NUMBER := p_Terr_Id;
530 
531   --Declare cursor to get usages
532   Cursor C_Terr IS
533          select terr_id from jtf_terr_all
534          connect by  parent_territory_id = prior terr_id AND TERR_ID <> 1
535          start with terr_id = v_Terr_Id;
536 
537   CURSOR C_TERR_QUAL_IDS ( p_Terr_Id IN NUMBER) IS
538          SELECT TERR_QUAL_ID
539          FROM JTF_TERR_QUAL_ALL
540          WHERE TERR_ID = p_Terr_Id;
541 
542 
543 
544   l_api_name                  CONSTANT VARCHAR2(30) := 'Delete_Territory';
545   l_api_version_number        CONSTANT NUMBER       := 1.0;
546 
547   l_return_status             VARCHAR2(1);
548   l_Terr_Value_Id             NUMBER;
549   l_Terr_Qual_Id              NUMBER;
550   l_Terr_Usg_Id               NUMBER;
551   l_Terr_Qual_Type_Usg_Id     NUMBER;
552   l_Terr_Id                   NUMBER;
553 
554 BEGIN
555 --
556       --dbms_output('Delete_Territory PVT: Entering API');
557 
558       -- Standard Start of API savepoint
559       SAVEPOINT Delete_Territory_Pvt;
560 
561       -- Standard call to check for call compatibility.
562       IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
563                                            p_api_version_number,
564                                            l_api_name,
565                                            G_PKG_NAME)
566       THEN
567           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
568       END IF;
569 
570       -- Initialize message list if p_init_msg_list is set to TRUE.
571       IF FND_API.to_Boolean( p_init_msg_list ) THEN
572           FND_MSG_PUB.initialize;
573       END IF;
574 
575       -- Debug Message
576       IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
577       THEN
578           FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_START_MSG');
579           FND_MESSAGE.Set_Name('PROC_NAME', l_api_name);
580           FND_MSG_PUB.Add;
581       END IF;
582 
583       --  Initialize API return status to success
584       x_return_status := FND_API.G_RET_STS_SUCCESS;
585 
586       -- Get all the Territories in the Hierarchy
587       FOR c in c_Terr LOOP
588       --
589          BEGIN
590               OPEN C_TERR_QUAL_IDS(c.Terr_Id);
591               LOOP
592                   FETCH C_TERR_QUAL_IDS INTO l_terr_qual_id;
593                   EXIT WHEN C_TERR_QUAL_IDS%NOTFOUND;
594                   --Delete Territory Values
595                   DELETE from JTF_TERR_VALUES_ALL WHERE TERR_QUAL_ID = l_terr_qual_id;
596               END LOOP;
597               CLOSE C_TERR_QUAL_IDS;
598          EXCEPTION
599            WHEN NO_DATA_FOUND THEN
600                CLOSE C_TERR_QUAL_IDS;
601            WHEN OTHERS THEN
602                CLOSE C_TERR_QUAL_IDS;
603          END;
604 
605           --Delete Territory Qualifer records
606           DELETE from JTF_TERR_QUAL_ALL WHERE TERR_ID = c.Terr_Id;
607 
608           --Delete Territory qual type usgs
609           DELETE from JTF_TERR_QTYPE_USGS_ALL WHERE TERR_ID = c.Terr_Id;
610 
611           --Delete Territory usgs
612           DELETE from JTF_TERR_USGS_ALL WHERE TERR_ID = c.Terr_Id;
613 
614           --Delete Territory Resource Access
615           DELETE from JTF_TERR_RSC_ACCESS_ALL WHERE TERR_RSC_ID IN
616           ( SELECT TERR_RSC_ID FROM JTF_TERR_RSC_ALL WHERE TERR_ID = c.Terr_Id );
617 
618           -- Delete the Territory Resource records
619           DELETE from JTF_TERR_RSC_ALL Where TERR_ID = c.Terr_Id;
620 
621           --Delete Territory record
622           DELETE from JTF_TERR_ALL WHERE TERR_ID = c.Terr_Id;
623 
624       --
625       END LOOP;
626 
627       -- Debug Message
628       IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
629       THEN
630          FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_START_MSG');
631          FND_MESSAGE.Set_Name('PROC_NAME', l_api_name);
632          FND_MSG_PUB.Add;
633       END IF;
634 
635 
636       FND_MSG_PUB.Count_And_Get
637       (  p_count          =>   x_msg_count,
638          p_data           =>   x_msg_data
639       );
640 
641       -- Standard check for p_commit
642       IF FND_API.to_Boolean( p_commit )
643       THEN
644          COMMIT WORK;
645       END IF;
646       --
647       --dbms_output('Delete_Territory PVT: Exiting API');
648 
649   EXCEPTION
650   --
651     WHEN FND_API.G_EXC_ERROR THEN
652          --dbms_output('Delete_Territory PVT: FND_API.G_EXC_ERROR');
653          --
654          ROLLBACK TO DELETE_TERRITORY_PVT;
655          x_return_status     := FND_API.G_RET_STS_ERROR ;
656          FND_MSG_PUB.Count_And_Get
657          (  p_count          =>   x_msg_count,
658             p_data           =>   x_msg_data
659          );
660 
661     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
662          --dbms_output('Delete_Territory PVT: FND_API.G_EXC_UNEXPECTED_ERROR');
663          ROLLBACK TO DELETE_TERRITORY_PVT;
664          X_return_status     := FND_API.G_RET_STS_UNEXP_ERROR;
665          FND_MSG_PUB.Count_And_Get
666          (  p_count          =>   x_msg_count,
667             p_data           =>   x_msg_data
668          );
669 
670     WHEN OTHERS THEN
671          --dbms_output('Delete_Territory PVT: OTHERS - ' || SQLERRM);
672          ROLLBACK TO DELETE_TERRITORY_PVT;
673          X_return_status     := FND_API.G_RET_STS_UNEXP_ERROR;
674          FND_MSG_PUB.Count_And_Get
675          (  p_count          =>   x_msg_count,
676             p_data           =>   x_msg_data
677          );
678 --
679 END Delete_Territory;
680 
681 
682 --    ***************************************************
683 --    start of comments
684 --    ***************************************************
685 --    API name  : Update_Territory
686 --    Type      : PUBLIC
687 --    Function  : To update existINg Territories - which includes updates to the following tables
688 --                Territory Header, Territory Qualifier, terr Usages, qualifier type usages
689 --                Territory Qualifier Values and Assign Resources
690 --    Pre-reqs  :
691 --    Parameters:
692 --     IN       :
693 --      Required
694 --      Parameter Name                Data Type                        Default
695 --      p_Api_Version_Number          NUMBER
696 --      p_Terr_All_Rec                Terr_All_Rec_Type           := G_Miss_Terr_All_Rec
697 --      p_Terr_Usgs_Tbl               Terr_Usgs_Tbl_Type          := G_MISS_Terr_Usgs_Tbl
698 --      p_Terr_QualTypeUsgs_Tbl       Terr_QualTypeUsgs_Tbl_Type  := G_Miss_Terr_QualTypeUsgs_Tbl
699 --      p_Terr_Qual_Tbl               Terr_Qual_Tbl_Type          := G_Miss_Terr_Qual_Tbl
700 --      p_Terr_Values_Tbl             Terr_Values_Tbl_Type        := G_Miss_Terr_Values_Tbl
701 --
702 --      Optional
703 --      Parameter Name                Data Type  Default
704 --      p_Init_Msg_List               VARCHAR2                    := FND_API.G_FALSE
705 --      p_Commit                      VARCHAR2                    := FND_API.G_FALSE
706 --      p_validation_level            NUMBER                      := FND_API.G_VALID_LEVEL_FULL,
707 --
708 --     OUT     :
709 --      Parameter Name                Data Type
710 --      X_Return_Status               VARCHAR2(1)
711 --      X_Msg_Count                   NUMBER
712 --      X_Msg_Data                    VARCHAR2(2000)
713 --      X_Terr_All_Out_Rec            Terr_All_Out_Rec
714 --      X_Terr_Usgs_Out_Tbl           Terr_Usgs_Out_Tbl,
715 --      X_Terr_QualTypeUsgs_Out_Tbl   Terr_QualTypeUsgs_Out_Tbl,
716 --      X_Terr_Qual_Out_Tbl           Terr_Qual_Out_Tbl,
717 --      X_Terr_Values_Out_Tbl         Terr_Values_Out_Tbl
718 --
719 --
720 --    Notes:
721 --
722 --
723 --    End of Comments
724 --
725 PROCEDURE Update_Territory
726  (p_Api_Version_Number          IN  NUMBER,
727   p_Init_Msg_List               IN  VARCHAR2                    := FND_API.G_FALSE,
728   p_Commit                      IN  VARCHAR2                    := FND_API.G_FALSE,
729   p_validation_level            IN  NUMBER                      := FND_API.G_VALID_LEVEL_FULL,
730   X_Return_Status               OUT NOCOPY VARCHAR2,
731   X_Msg_Count                   OUT NOCOPY NUMBER,
732   X_Msg_Data                    OUT NOCOPY VARCHAR2,
733   p_Terr_All_Rec                IN  Terr_All_Rec_Type           := G_Miss_Terr_All_Rec,
734 --  p_Terr_Usgs_Tbl               IN  Terr_Usgs_Tbl_Type          := G_MISS_Terr_Usgs_Tbl,
735 --  p_Terr_QualTypeUsgs_Tbl       IN  Terr_QualTypeUsgs_Tbl_Type  := G_Miss_Terr_QualTypeUsgs_Tbl,
736 --  p_Terr_Qual_Tbl               IN  Terr_Qual_Tbl_Type          := G_Miss_Terr_Qual_Tbl,
737 --  p_Terr_Values_Tbl             IN  Terr_Values_Tbl_Type        := G_Miss_Terr_Values_Tbl,
738   X_Terr_All_Out_Rec            OUT NOCOPY Terr_All_Out_Rec_Type
739 --  X_Terr_Usgs_Out_Tbl           OUT NOCOPY Terr_Usgs_Out_Tbl_Type,
740 --  X_Terr_QualTypeUsgs_Out_Tbl   OUT NOCOPY Terr_QualTypeUsgs_Out_Tbl_Type,
741 --  X_Terr_Qual_Out_Tbl           OUT NOCOPY Terr_Qual_Out_Tbl_Type,
742 --  X_Terr_Values_Out_Tbl         OUT NOCOPY Terr_Values_Out_Tbl_Type
743 )
744 AS
745       l_api_name                  CONSTANT VARCHAR2(30) := 'Update_Territory';
746       l_api_version_number        CONSTANT NUMBER       := 1.0;
747       l_return_status             VARCHAR2(1);
748 BEGIN
749       --dbms_output('Update_Territory PVT: Entering API');
750 
751       -- Standard Start of API savepoint
752       SAVEPOINT UPDATE_TERRITORY_PVT;
753 
754       -- Standard call to check for call compatibility.
755       IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
756                                            p_api_version_number,
757                                            l_api_name,
758                                            G_PKG_NAME)
759       THEN
760           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
761       END IF;
762 
763       -- Initialize message list if p_init_msg_list is set to TRUE.
764       IF FND_API.to_Boolean( p_init_msg_list ) THEN
765           FND_MSG_PUB.initialize;
766       END IF;
767 
768       -- Debug Message
769       IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
770       THEN
771           FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_START_MSG');
772           FND_MESSAGE.Set_Name('PROC_NAME', l_api_name);
773           FND_MSG_PUB.Add;
774       END IF;
775 
776       --  Initialize API return status to success
777       x_return_status := FND_API.G_RET_STS_SUCCESS;
778       --
779       -- API body
780       --
781       --Check whether the Territory_Id is Valid
782       -- Parent Terr ID can't be null.
783       If (p_Terr_All_Rec.TERR_ID is null) OR
784          (p_Terr_All_Rec.TERR_ID = FND_API.G_MISS_NUM)
785       Then
786           IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
787              FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_COL_VALUE');
788              FND_MESSAGE.Set_Token('COL_NAME', 'TERR_ID' );
789              FND_MSG_PUB.ADD;
790           END IF;
791           x_Return_Status := FND_API.G_RET_STS_ERROR ;
792           RAISE FND_API.G_EXC_ERROR;
793       END IF;
794 
795       If p_Terr_All_Rec.Terr_Id <> FND_API.G_MISS_NUM     Then
796          --dbms_output('Update_Territory PVT: Before Calling Update_territory_Record');
797          Update_territory_Record( P_Api_Version_Number          =>  P_Api_Version_Number,
798                                   P_Init_Msg_List               =>  P_Init_Msg_List,
799                                   P_Commit                      =>  P_Commit,
800                                   p_validation_level            =>  p_validation_level,
801                                   P_Terr_All_Rec                =>  p_Terr_All_Rec,
802                                   X_Return_Status               =>  l_Return_Status,
803                                   X_Msg_Count                   =>  x_Msg_Count,
804                                   X_Msg_Data                    =>  x_Msg_Data,
805                                   X_Terr_All_Out_rec            => X_Terr_All_Out_Rec);
806          IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
807             RAISE FND_API.G_EXC_ERROR;
808          END IF;
809       --
810       End If;
811 
812      /* Usage can't be updated in R12. -- VPALLE
813       -- Check whether ant data is passed for update of value table
814      If P_Terr_Usgs_Tbl.Count > 0 Then
815       --
816          --dbms_output('Update_Territory PVT: Before Calling Update_Terr_QualType_Usage');
817          Update_Territory_Usages( P_Api_Version_Number          =>  P_Api_Version_Number,
818                                   P_Init_Msg_List               =>  P_Init_Msg_List,
819                                   P_Commit                      =>  P_Commit,
820                                   p_validation_level            =>  p_validation_level,
821                                   P_Terr_Usgs_Tbl               =>  p_Terr_Usgs_Tbl,
822                                   X_Return_Status               =>  l_Return_Status,
823                                   X_Msg_Count                   =>  x_Msg_Count,
824                                   X_Msg_Data                    =>  x_Msg_Data,
825                                   X_Terr_Usgs_Out_Tbl           =>  X_Terr_Usgs_Out_Tbl);
826           IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
827              RAISE FND_API.G_EXC_ERROR;
828           END IF;
829       --
830       End If;
831       */
832 
833       /* Transaction type usages are created based on the territory type while territory creation.
834          As the Territory Type associated with a territory can't be updated in R12, we can't update
835          Transaction Type usages. --VPALLE
836       -- Check whether ant data is passed for update of value table
837       If P_Terr_QualTypeUsgs_Tbl.Count > 0 Then
838       --
839          --dbms_output('Update_Territory PVT: Before Calling Update_Terr_QualType_Usage');
840          Update_Terr_QualType_Usage( P_Api_Version_Number          =>  P_Api_Version_Number,
841                                      P_Init_Msg_List               =>  P_Init_Msg_List,
842                                      P_Commit                      =>  P_Commit,
843                                      p_validation_level            =>  p_validation_level,
844                                      P_Terr_QualTypeUsgs_Tbl       =>  p_Terr_QualTypeUsgs_Tbl,
845                                      X_Return_Status               =>  l_Return_Status,
846                                      X_Msg_Count                   =>  x_Msg_Count,
847                                      X_Msg_Data                    =>  x_Msg_Data,
848                                      X_Terr_QualTypeUsgs_Out_Tbl   => X_Terr_QualTypeUsgs_Out_Tbl);
849          IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
850             RAISE FND_API.G_EXC_ERROR;
851          END IF;
852       --
853       End If;
854       */
855 
856       -- Check whether ant data is passed for update of Qualifier table
857  /*     If P_Terr_Qual_Tbl.Count > 0 Then
858       --
859          --dbms_output('Update_Territory PVT: Before Calling Update_Terr_Qualifier');
860          Update_Terr_Qualifier( P_Api_Version_Number          =>  P_Api_Version_Number,
861                                 P_Init_Msg_List               =>  P_Init_Msg_List,
862                                 P_Commit                      =>  P_Commit,
863                                 p_validation_level            =>  p_validation_level,
864                                 P_Terr_Qual_Tbl               =>  p_Terr_Qual_Tbl,
865                                 X_Return_Status               =>  l_Return_Status,
866                                 X_Msg_Count                   =>  x_Msg_Count,
867                                 X_Msg_Data                    =>  x_Msg_Data,
868                                 X_Terr_Qual_Out_Tbl           => X_Terr_Qual_Out_Tbl);
869          IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
870             RAISE FND_API.G_EXC_ERROR;
871          END IF;
872       --
873       End If;
874 
875       -- Check whether ant data is passed for update of value table
876       If P_Terr_Values_Tbl.Count > 0 Then
877          --dbms_output('Update_Territory PVT: Before Calling Update_Terr_Value');
878          Update_Terr_Value( P_Api_Version_Number          =>  P_Api_Version_Number,
879                             P_Init_Msg_List               =>  P_Init_Msg_List,
880                             P_Commit                      =>  P_Commit,
881                             p_validation_level            =>  p_validation_level,
882                             P_Terr_Value_Tbl              =>  p_Terr_Values_Tbl,
883                             X_Return_Status               =>  l_Return_Status,
884                             X_Msg_Count                   =>  x_Msg_Count,
885                             X_Msg_Data                    =>  x_Msg_Data,
886                             X_Terr_Value_Out_Tbl          =>  X_Terr_Values_Out_Tbl);
887          IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
888              RAISE FND_API.G_EXC_ERROR;
889          END IF;
890       End If;
891       --
892 */
893       -- Debug Message
894       IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
895       THEN
896          FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_START_MSG');
897          FND_MESSAGE.Set_Name('PROC_NAME', l_api_name);
898          FND_MSG_PUB.Add;
899       END IF;
900 
901 
902       FND_MSG_PUB.Count_And_Get
903       (  p_count          =>   x_msg_count,
904          p_data           =>   x_msg_data
905       );
906 
907       -- Standard check for p_commit
908       IF FND_API.to_Boolean( p_commit )
909       THEN
910          COMMIT WORK;
911       END IF;
912       --
913       --dbms_output('Update_Territory PVT: Exiting API');
914 
915   --
916   EXCEPTION
917   --
918     WHEN FND_API.G_EXC_ERROR THEN
919          --dbms_output('Update_Territory PVT: FND_API.G_EXC_ERROR');
920          ROLLBACK TO UPDATE_TERRITORY_PVT;
921          x_return_status     := FND_API.G_RET_STS_ERROR ;
922          FND_MSG_PUB.Count_And_Get
923          (  p_count          =>   x_msg_count,
924             p_data           =>   x_msg_data
925          );
926 
927     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
928          --dbms_output('Update_Territory PVT: FND_API.G_EXC_UNEXPECTED_ERROR');
929          ROLLBACK TO UPDATE_TERRITORY_PVT;
930          X_return_status     := FND_API.G_RET_STS_UNEXP_ERROR;
931          FND_MSG_PUB.Count_And_Get
932          (  p_count          =>   x_msg_count,
933             p_data           =>   x_msg_data
934          );
935 
936     WHEN OTHERS THEN
937          --dbms_output('Update_Territory PVT: OTHERS - ' || SQLERRM);
938          ROLLBACK TO UPDATE_TERRITORY_PVT;
939          X_return_status     := FND_API.G_RET_STS_UNEXP_ERROR;
940          FND_MSG_PUB.Count_And_Get
941          (  p_count          =>   x_msg_count,
942             p_data           =>   x_msg_data
943          );
944 --
945 END Update_Territory;
946 
947 
948 --    ***************************************************
949 --    start of comments
950 --    ***************************************************
951 --
952 --    API name  : Deactivate_Territory
953 --    Type      : PUBLIC
954 --    Function  : To deactivate Territories - this API also deactivates
955 --                any sub-territories of this territory.
956 --
957 --    Pre-reqs  :
958 --    Parameters:
959 --     IN       :
960 --      Required
961 --      Parameter Name             Data Type                        Default
962 --      p_Api_Version_Number       NUMBER
963 --      p_Terr_Id                  NUMBER
964 --
965 --      Optional
966 --      Parameter Name             Data Type                        Default
967 --      p_Init_Msg_List            VARCHAR2                         FND_API.G_FALSE
968 --      p_Commit                   VARCHAR2                         FND_API.G_FALSE
969 --      p_validation_level         NUMBER                           FND_API.G_VALID_LEVEL_FULL,
970 --
971 --     OUT     :
972 --      Parameter Name             Data Type
973 --      x_Return_Status            VARCHAR2(1)
974 --      x_Msg_Count                NUMBER
975 --      x_Msg_Data                 VARCHAR2(2000)
976 --
977 --
978 --    Notes:
979 --
980 --
981 --    End of Comments
982 --
983 PROCEDURE Deactivate_Territory
984  (p_api_version_number      IN NUMBER,
985   p_INit_msg_list           IN VARCHAR2 := FND_API.G_FALSE,
986   p_commit                  IN VARCHAR2 := FND_API.G_FALSE,
987   p_validation_level        IN NUMBER   := FND_API.G_VALID_LEVEL_FULL,
988   x_return_status           OUT NOCOPY VARCHAR2,
989   x_msg_count               OUT NOCOPY NUMBER,
990   x_msg_data                OUT NOCOPY VARCHAR2,
991   P_terr_Id                 IN NUMBER)
992 AS
993         Cursor C_GetTerritory(l_terr_id Number) IS
994           Select Rowid,
995                  TERR_ID,
996                  LAST_UPDATE_DATE,
997                  LAST_UPDATED_BY,
998                  CREATION_DATE,
999                  CREATED_BY,
1000                  LAST_UPDATE_LOGIN,
1001                  REQUEST_ID,
1002                  PROGRAM_APPLICATION_ID,
1003                  PROGRAM_ID,
1004                  PROGRAM_UPDATE_DATE,
1005                  APPLICATION_SHORT_NAME,
1006                  NAME,
1007                  ENABLED_FLAG,
1008                  START_DATE_ACTIVE,
1009                  END_DATE_ACTIVE,
1010                  PLANNED_FLAG,
1011                  PARENT_TERRITORY_ID,
1012                  TERRITORY_TYPE_ID,
1013                  TEMPLATE_TERRITORY_ID,
1014                  TEMPLATE_FLAG,
1015                  ESCALATION_TERRITORY_ID,
1016                  ESCALATION_TERRITORY_FLAG,
1017                  OVERLAP_ALLOWED_FLAG,
1018                  RANK,
1019                  DESCRIPTION,
1020                  UPDATE_FLAG,
1021                  AUTO_ASSIGN_RESOURCES_FLAG,
1022                  ATTRIBUTE_CATEGORY,
1023                  ATTRIBUTE1,
1024                  ATTRIBUTE2,
1025                  ATTRIBUTE3,
1026                  ATTRIBUTE4,
1027                  ATTRIBUTE5,
1028                  ATTRIBUTE6,
1029                  ATTRIBUTE7,
1030                  ATTRIBUTE8,
1031                  ATTRIBUTE9,
1032                  ATTRIBUTE10,
1033                  ATTRIBUTE11,
1034                  ATTRIBUTE12,
1035                  ATTRIBUTE13,
1036                  ATTRIBUTE14,
1037                  ATTRIBUTE15,
1038                  ORG_ID,
1039                  NUM_WINNERS,
1040                  NUM_QUAL
1041           From  JTF_TERR_ALL
1042           Where TERR_ID = l_terr_id
1043           For   Update NOWAIT;
1044 
1045       --Local variable declaration
1046       l_api_name                CONSTANT VARCHAR2(30) := 'Deactivate_territory';
1047       l_api_version_number      CONSTANT NUMBER   := 1.0;
1048 
1049       l_rowid                   VARCHAR2(50);
1050       l_return_status           VARCHAR2(1);
1051       l_ref_terr_all_rec        terr_all_rec_type;
1052 
1053 BEGIN
1054       --dbms_output('Deactivate_Territory PVT: Entering API');
1055 
1056       -- Standard Start of API savepoint
1057       SAVEPOINT DEACTIVATE_TERRITORY_PVT;
1058 
1059       -- Standard call to check for call compatibility.
1060       IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
1061                                            p_api_version_number,
1062                                            l_api_name,
1063                                            G_PKG_NAME)
1064       THEN
1065           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1066       END IF;
1067 
1068       -- Initialize message list if p_init_msg_list is set to TRUE.
1069       IF FND_API.to_Boolean( p_init_msg_list ) THEN
1070           FND_MSG_PUB.initialize;
1071       END IF;
1072 
1073       -- Debug Message
1074       IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
1075       THEN
1076           FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_START_MSG');
1077           FND_MESSAGE.Set_Name('PROC_NAME', l_api_name);
1078           FND_MSG_PUB.Add;
1079       END IF;
1080 
1081       --  Initialize API return status to success
1082       x_return_status := FND_API.G_RET_STS_SUCCESS;
1083       --
1084       -- API body
1085       --
1086       -- Initialize API return status to SUCCESS
1087       x_return_status := FND_API.G_RET_STS_SUCCESS;
1088 
1089       --dbms_output('Deactivate_Territory PVT: opening cursor C_GetTerrTypeUsage');
1090       OPEN C_GetTerritory( P_Terr_Id);
1091       FETCH C_GetTerritory into
1092             l_Rowid,
1093             l_ref_terr_all_rec.TERR_ID,
1094             l_ref_terr_all_rec.LAST_UPDATE_DATE,
1095             l_ref_terr_all_rec.LAST_UPDATED_BY,
1096             l_ref_terr_all_rec.CREATION_DATE,
1097             l_ref_terr_all_rec.CREATED_BY,
1098             l_ref_terr_all_rec.LAST_UPDATE_LOGIN,
1099             l_ref_terr_all_rec.REQUEST_ID,
1100             l_ref_terr_all_rec.PROGRAM_APPLICATION_ID,
1101             l_ref_terr_all_rec.PROGRAM_ID,
1102             l_ref_terr_all_rec.PROGRAM_UPDATE_DATE,
1103             l_ref_terr_all_rec.APPLICATION_SHORT_NAME,
1104             l_ref_terr_all_rec.NAME,
1105             l_ref_terr_all_rec.ENABLED_FLAG,
1106             l_ref_terr_all_rec.START_DATE_ACTIVE,
1107             l_ref_terr_all_rec.END_DATE_ACTIVE,
1108             l_ref_terr_all_rec.PLANNED_FLAG,
1109             l_ref_terr_all_rec.PARENT_TERRITORY_ID,
1110             l_ref_terr_all_rec.TERRITORY_TYPE_ID,
1111             l_ref_terr_all_rec.TEMPLATE_TERRITORY_ID,
1112             l_ref_terr_all_rec.TEMPLATE_FLAG,
1113             l_ref_terr_all_rec.ESCALATION_TERRITORY_ID,
1114             l_ref_terr_all_rec.ESCALATION_TERRITORY_FLAG,
1115             l_ref_terr_all_rec.OVERLAP_ALLOWED_FLAG,
1116             l_ref_terr_all_rec.RANK,
1117             l_ref_terr_all_rec.DESCRIPTION,
1118             l_ref_terr_all_rec.UPDATE_FLAG,
1119             l_ref_terr_all_rec.AUTO_ASSIGN_RESOURCES_FLAG,
1120             l_ref_terr_all_rec.ATTRIBUTE_CATEGORY,
1121             l_ref_terr_all_rec.ATTRIBUTE1,
1122             l_ref_terr_all_rec.ATTRIBUTE2,
1123             l_ref_terr_all_rec.ATTRIBUTE3,
1124             l_ref_terr_all_rec.ATTRIBUTE4,
1125             l_ref_terr_all_rec.ATTRIBUTE5,
1126             l_ref_terr_all_rec.ATTRIBUTE6,
1127             l_ref_terr_all_rec.ATTRIBUTE7,
1128             l_ref_terr_all_rec.ATTRIBUTE8,
1129             l_ref_terr_all_rec.ATTRIBUTE9,
1130             l_ref_terr_all_rec.ATTRIBUTE10,
1131             l_ref_terr_all_rec.ATTRIBUTE11,
1132             l_ref_terr_all_rec.ATTRIBUTE12,
1133             l_ref_terr_all_rec.ATTRIBUTE13,
1134             l_ref_terr_all_rec.ATTRIBUTE14,
1135             l_ref_terr_all_rec.ATTRIBUTE15,
1136             l_ref_terr_all_rec.ORG_ID,
1137             l_ref_terr_all_rec.NUM_WINNERS,
1138             l_ref_terr_all_rec.NUM_QUAL;
1139 
1140        If ( C_GetTerritory%NOTFOUND) Then
1141            IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
1142            THEN
1143               FND_MESSAGE.Set_Name('JTF', 'API_MISSING_UPDATE_TARGET');
1144               FND_MESSAGE.Set_Token('INFO', 'TERRITORY', FALSE);
1145               FND_MSG_PUB.Add;
1146            END IF;
1147            raise FND_API.G_EXC_ERROR;
1148        End if;
1149        CLOSE C_GetTerritory;
1150 
1151        --dbms_output('Deactivate_Territory PVT: Before Calling JTF_TERR_PKG.Update_Row');
1152        JTF_TERR_PKG.Update_Row(x_rowid                 => l_rowid,
1153                               x_terr_id                    => p_terr_id,
1154                               x_last_update_date           => l_ref_terr_all_rec.LAST_UPDATE_DATE,
1155                               x_last_updated_by            => l_ref_terr_all_rec.LAST_UPDATED_BY,
1156                               x_creation_date              => l_ref_terr_all_rec.CREATION_DATE,
1157                               x_created_by                 => l_ref_terr_all_rec.CREATED_BY,
1158                               x_last_update_login          => l_ref_terr_all_rec.LAST_UPDATE_LOGIN,
1159                               x_request_id                 => null,
1160                               x_program_application_id     => null,
1161                               x_program_id                 => null,
1162                               x_program_update_date        => null,
1163                               x_application_short_name     => l_ref_terr_all_rec.APPLICATION_SHORT_NAME,
1164                               x_name                       => l_ref_terr_all_rec.name,
1165                               --x_enabled_flag               => l_ref_terr_all_rec.enabled_flag,
1166                               x_start_date_active          => l_ref_terr_all_rec.start_date_active,
1167                               x_end_date_active            => (sysdate -1),
1168                               x_planned_flag               => l_ref_terr_all_rec.planned_flag,
1169                               x_parent_territory_id        => l_ref_terr_all_rec.parent_territory_id,
1170                               -- x_territory_type_id          => l_ref_terr_all_rec.territory_type_id,
1171                               x_template_territory_id      => l_ref_terr_all_rec.template_territory_id,
1172                               x_template_flag              => l_ref_terr_all_rec.template_flag,
1173                               x_escalation_territory_id    => l_ref_terr_all_rec.escalation_territory_id,
1174                               x_escalation_territory_flag  => l_ref_terr_all_rec.escalation_territory_flag,
1175                               x_overlap_allowed_flag       => l_ref_terr_all_rec.overlap_allowed_flag,
1176                               x_rank                       => l_ref_terr_all_rec.rank,
1177                               x_description                => l_ref_terr_all_rec.description,
1178                               x_update_flag                => l_ref_terr_all_rec.update_flag,
1179                               x_auto_assign_resources_flag => l_ref_terr_all_rec.AUTO_ASSIGN_RESOURCES_FLAG,
1180                               x_attribute_category         => l_ref_terr_all_rec.attribute_category,
1181                               x_attribute1                 => l_ref_terr_all_rec.attribute1,
1182                               x_attribute2                 => l_ref_terr_all_rec.attribute2,
1183                               x_attribute3                 => l_ref_terr_all_rec.attribute3,
1184                               x_attribute4                 => l_ref_terr_all_rec.attribute4,
1185                               x_attribute5                 => l_ref_terr_all_rec.attribute5,
1186                               x_attribute6                 => l_ref_terr_all_rec.attribute6,
1187                               x_attribute7                 => l_ref_terr_all_rec.attribute7,
1188                               x_attribute8                 => l_ref_terr_all_rec.attribute8,
1189                               x_attribute9                 => l_ref_terr_all_rec.attribute9,
1190                               x_attribute10                => l_ref_terr_all_rec.attribute10,
1191                               x_attribute11                => l_ref_terr_all_rec.attribute11,
1192                               x_attribute12                => l_ref_terr_all_rec.attribute12,
1193                               x_attribute13                => l_ref_terr_all_rec.attribute13,
1194                               x_attribute14                => l_ref_terr_all_rec.attribute14,
1195                               x_attribute15                => l_ref_terr_all_rec.attribute15,
1196                               x_org_id                     => l_ref_terr_all_rec.ORG_ID,
1197                               x_num_winners                => l_ref_terr_all_rec.NUM_WINNERS,
1198                               x_num_qual                   => l_ref_terr_all_rec.NUM_QUAL );
1199 
1200       X_return_status    := FND_API.G_RET_STS_SUCCESS;
1201 
1202       -- Debug Message
1203       IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
1204       THEN
1205          FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_START_MSG');
1206          FND_MESSAGE.Set_Name('PROC_NAME', l_api_name);
1207          FND_MSG_PUB.Add;
1208       END IF;
1209 
1210 
1211       FND_MSG_PUB.Count_And_Get
1212       (  p_count          =>   x_msg_count,
1213          p_data           =>   x_msg_data
1214       );
1215 
1216       -- Standard check for p_commit
1217       IF FND_API.to_Boolean( p_commit )
1218       THEN
1219          COMMIT WORK;
1220       END IF;
1221       --
1222       --dbms_output('Deactivate_Territory PVT: Exiting API');
1223 EXCEPTION
1224     WHEN FND_API.G_EXC_ERROR THEN
1225          --dbms_output('Deactivate_Territory PVT: FND_API.G_EXC_ERROR');
1226          ROLLBACK TO DEACTIVATE_TERRITORY_PVT;
1227          x_return_status     := FND_API.G_RET_STS_ERROR ;
1228          FND_MSG_PUB.Count_And_Get
1229          (  p_count          =>   x_msg_count,
1230             p_data           =>   x_msg_data
1231          );
1232 
1233     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1234          --dbms_output('Deactivate_Territory PVT: FND_API.G_EXC_UNEXPECTED_ERROR');
1235          ROLLBACK TO DEACTIVATE_TERRITORY_PVT;
1236          X_return_status     := FND_API.G_RET_STS_UNEXP_ERROR;
1237          FND_MSG_PUB.Count_And_Get
1238          (  p_count          =>   x_msg_count,
1239             p_data           =>   x_msg_data
1240          );
1241 
1242      WHEN OTHERS THEN
1243           --dbms_output('Deactivate_Territory PVT: OTHERS - ' || SQLERRM);
1244           ROLLBACK TO DEACTIVATE_TERRITORY_PVT;
1245           X_return_status    := FND_API.G_RET_STS_UNEXP_ERROR;
1246           IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR )
1247           THEN
1248              FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,
1249                                       'Others exception inside Deactivate_Territory'
1250                                       || sqlerrm);
1251           END IF;
1252 END Deactivate_Territory;
1253 
1254 
1255 --
1256 --    ***************************************************
1257 --    start of comments
1258 --    ***************************************************
1259 --    API name  : Create_Territory_Header
1260 --    Type      : PUBLIC
1261 --    Function  : To create Territories - which inludes the creation of following
1262 --                Territory Header, Territory Usages, Territory qualifier type usages
1263 --                table.
1264 --    Pre-reqs  :
1265 --    Parameters:
1266 --     IN       :
1267 --      Required
1268 --      Parameter Name                Data Type                        Default
1269 --      P_Api_Version_Number          NUMBER
1270 --      P_Terr_All_Rec                Terr_All_Rec_Type                := G_Miss_Terr_All_Rec
1271 --      P_Terr_Usgs_Tbl               Terr_Usgs_Tbl_Type               := G_MISS_Terr_Usgs_Tbl
1272 --      P_Terr_QualTypeUsgs_Tbl       Terr_QualTypeUsgs_Tbl_Type       := G_Miss_Terr_QualTypeUsgs_Tbl
1273 --
1274 --      Optional
1275 --      Parameter Name                Data Type  Default
1276 --      P_Init_Msg_List               VARCHAR2                         := FND_API.G_FALSE
1277 --      P_Commit                      VARCHAR2                         := FND_API.G_FALSE
1278 --      p_validation_level            NUMBER                           := FND_API.G_VALID_LEVEL_FULL,
1279 --
1280 --     OUT     :
1281 --      Parameter Name                Data Type
1282 --      X_Return_Status               VARCHAR2(1)
1283 --      X_Msg_Count                   NUMBER
1284 --      X_Msg_Data                    VARCHAR2(2000)
1285 --      X_Terr_All_Out_Rec            Terr_All_Out_Rec
1286 --      X_Terr_Usgs_Out_Tbl           Terr_Usgs_Out_Tbl,
1287 --      X_Terr_QualTypeUsgs_Out_Tbl   Terr_QualTypeUsgs_Out_Tbl,
1288 --
1289 --
1290 --    Notes:
1291 --
1292 --
1293 --    End of Comments
1294 --
1295 PROCEDURE Create_Territory_Header
1296  (P_Api_Version_Number          IN  NUMBER,
1297   P_Init_Msg_List               IN  VARCHAR2                         := FND_API.G_FALSE,
1298   P_Commit                      IN  VARCHAR2                         := FND_API.G_FALSE,
1299   p_validation_level            IN  NUMBER                           := FND_API.G_VALID_LEVEL_FULL,
1300   P_Terr_All_Rec                IN  Terr_All_Rec_Type                := G_Miss_Terr_All_Rec,
1301   P_Terr_Usgs_Tbl               IN  Terr_Usgs_Tbl_Type               := G_MISS_Terr_Usgs_Tbl,
1302  -- P_Terr_QualTypeUsgs_Tbl       IN  Terr_QualTypeUsgs_Tbl_Type       := G_Miss_Terr_QualTypeUsgs_Tbl,
1303   X_Return_Status               OUT NOCOPY VARCHAR2,
1304   X_Msg_Count                   OUT NOCOPY NUMBER,
1305   X_Msg_Data                    OUT NOCOPY VARCHAR2,
1306   X_Terr_All_Out_Rec            OUT NOCOPY Terr_All_Out_Rec_Type,
1307   X_Terr_Usgs_Out_Tbl           OUT NOCOPY Terr_Usgs_Out_Tbl_Type,
1308   X_Terr_QualTypeUsgs_Out_Tbl   OUT NOCOPY Terr_QualTypeUsgs_Out_Tbl_Type)
1309 AS
1310   l_api_name                    CONSTANT VARCHAR2(30) := 'Create_Territory_Header';
1311   l_rowid                       ROWID;
1312   l_return_status               VARCHAR2(1);
1313   l_Terr_id                     NUMBER;
1314   l_terr_usg_id                 NUMBER;
1315   l_terr_qual_type_usg_id       NUMBER;
1316   l_Terr_Usgs_Tbl_Count         NUMBER   := P_Terr_Usgs_Tbl.Count;
1317  -- l_Terr_QualTypeUsgs_Tbl_Count NUMBER   := P_Terr_QualTypeUsgs_Tbl.Count;
1318   l_Counter                     NUMBER;
1319   l_Terr_All_Out_Rec            Terr_All_Out_Rec_Type;
1320   l_Terr_Usgs_Out_Tbl           Terr_Usgs_Out_Tbl_Type;
1321   l_Terr_QualTypeUsgs_Out_Tbl   Terr_QualTypeUsgs_Out_Tbl_Type;
1322   l_qual_type_usg_id            NUMBER ;
1323   l_dummy                       NUMBER;
1324   l_iterator                    NUMBER;
1325   p_terr_qualtypeusgs_tbl       JTF_TERRITORY_PVT.terr_qualtypeusgs_tbl_type;
1326 
1327   CURSOR C_QUAL_TYPE_USG_ID (P_terr_type_id NUMBER)
1328   is
1329   SELECT QUAL_TYPE_USG_ID from JTF_TYPE_QTYPE_USGS_ALL WHERE terr_type_id = P_terr_type_id ;
1330 
1331 BEGIN
1332    --dbms_output('Create_Territory_Header PVT: Entering API');
1333 
1334    -- Debug Message
1335    IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
1336    THEN
1337       FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_START_MSG');
1338       FND_MESSAGE.Set_Name('PROC_NAME', l_api_name);
1339       FND_MSG_PUB.Add;
1340    END IF;
1341    --  Initialize API return status to success
1342    x_return_status := FND_API.G_RET_STS_SUCCESS;
1343 
1344        --
1345     -- Check if the Parent Terr ID is valid for the given source.
1346     BEGIN
1347         IF ( p_terr_all_rec.PARENT_TERRITORY_ID IS NOT NULL
1348              AND p_terr_all_rec.PARENT_TERRITORY_ID <> FND_API.G_MISS_NUM
1349              AND p_terr_all_rec.PARENT_TERRITORY_ID <> 1 ) THEN
1350 
1351             SELECT 1
1352               INTO l_dummy
1353               FROM  jtf_terr_usgs_all jtua
1354              WHERE jtua.terr_id      = p_terr_all_rec.PARENT_TERRITORY_ID
1355                AND jtua.source_id   = p_terr_usgs_tbl (1).source_id
1356                AND jtua.org_id      = p_terr_all_rec.org_id ;
1357         END IF;
1358 
1359      EXCEPTION
1360         WHEN NO_DATA_FOUND THEN
1361                 FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_PARENT_TERR');
1362                 FND_MESSAGE.Set_Token('TERR_ID', to_char(p_terr_all_rec.PARENT_TERRITORY_ID));
1363                 FND_MSG_PUB.ADD;
1364                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1365      END;
1366     -- Check if the Terr Type is valid for the given source.
1367     BEGIN
1368         SELECT 1
1369         INTO l_dummy
1370         FROM jtf_terr_types_all a,
1371              jtf_terr_type_usgs_all b
1372        WHERE a.enabled_flag = 'Y'
1373          AND a.terr_type_id     = b.terr_type_id
1374          AND a.org_id           = b.org_id
1375          AND b.source_id        = p_terr_usgs_tbl (1).source_id
1376          AND b.org_id           = p_terr_all_rec.org_id
1377          AND a.terr_type_id     = p_terr_all_rec.territory_type_id;
1378 
1379     EXCEPTION
1380         WHEN NO_DATA_FOUND THEN
1381             FND_MESSAGE.Set_Name('JTF', 'JTY_TERR_INVALID_TERR_TYPE');
1382             FND_MSG_PUB.ADD;
1383             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1384     END;
1385 
1386 
1387    --dbms_output('Create_Territory_Header PVT: Before Calling Create_Territory_Record');
1388    -- Call create_territory_record API
1389    IF p_terr_all_rec.terr_id IS NULL OR p_terr_all_rec.terr_creation_flag IS NULL
1390    THEN
1391         Create_Territory_Record(P_Api_Version_Number          =>  P_Api_Version_Number,
1392                            P_Init_Msg_List               =>  P_Init_Msg_List,
1393                            P_Commit                      =>  P_Commit,
1394                            p_validation_level            =>  p_validation_level,
1395                            P_Terr_All_Rec                =>  P_Terr_All_Rec,
1396                            X_Return_Status               =>  l_Return_Status,
1397                            X_Msg_Count                   =>  X_Msg_Count,
1398                            X_Msg_Data                    =>  X_Msg_Data,
1399                            X_Terr_Id                     =>  l_terr_id,
1400                            X_Terr_All_Out_Rec            =>  l_Terr_All_Out_Rec);
1401 
1402     ELSE
1403             UPDATE JTF_TERR_ALL
1404             SET terr_group_id      = p_terr_all_rec.territory_group_id,
1405                 LAST_UPDATED_BY    = p_terr_all_rec.LAST_UPDATED_BY,
1406                 LAST_UPDATE_LOGIN  = p_terr_all_rec.LAST_UPDATE_LOGIN,
1407                 NAME               = p_terr_all_rec.NAME,
1408                 START_DATE_ACTIVE  = p_terr_all_rec.START_DATE_ACTIVE,
1409                 END_DATE_ACTIVE    = p_terr_all_rec.END_DATE_ACTIVE,
1410                 PARENT_TERRITORY_ID= p_terr_all_rec.PARENT_TERRITORY_ID,
1411                 RANK               = p_terr_all_rec.RANK,
1412                 DESCRIPTION        = p_terr_all_rec.DESCRIPTION,
1413                 NUM_WINNERS        = p_terr_all_rec.NUM_WINNERS,
1414                 territory_type_id  = p_terr_all_rec.territory_type_id
1415             WHERE terr_id = p_terr_all_rec.terr_id;
1416 
1417             l_terr_id := p_terr_all_rec.terr_id;
1418             l_return_status :='S';
1419             l_terr_all_out_rec.terr_id := l_terr_id;
1420     END IF;
1421    --
1422    -- Save the statuses
1423    x_return_status     := l_return_status;
1424    --
1425    --Save the out status record
1426    X_Terr_All_Out_Rec  := l_Terr_All_Out_Rec;
1427    --If there is a major error
1428    IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1429       RAISE FND_API.G_EXC_ERROR;
1430    END IF;
1431    --
1432    --
1433    --dbms_output('Create_Territory_Header PVT: Before Calling Create_Territory_Usages');
1434    --
1435    Create_Territory_Usages(P_Api_Version_Number          =>  P_Api_Version_Number,
1436                            P_Init_Msg_List               =>  P_Init_Msg_List,
1437                            P_Commit                      =>  P_Commit,
1438                            p_validation_level            =>  p_validation_level,
1439                            P_Terr_Id                     =>  l_terr_id,
1440                            P_Terr_Usgs_Tbl               =>  P_Terr_Usgs_Tbl,
1441                            X_Return_Status               =>  l_Return_Status,
1442                            X_Msg_Count                   =>  X_Msg_Count,
1443                            X_Msg_Data                    =>  X_Msg_Data,
1444                            X_Terr_Usgs_Out_Tbl           => l_Terr_Usgs_Out_Tbl);
1445    --
1446    -- Save the statuses
1447    x_return_status        := l_return_status;
1448    --
1449    --Save the out status record
1450    X_Terr_Usgs_Out_Tbl    := l_Terr_Usgs_Out_Tbl;
1451    l_terr_usg_id          := l_Terr_Usgs_Out_Tbl(1).Terr_Usg_Id;
1452    --
1453    --If there is a major error
1454    IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1455       RAISE FND_API.G_EXC_ERROR;
1456    END IF;
1457    --
1458     -- Create the P_Terr_QualTypeUsgs_Tbl based on the Territory Type.
1459     BEGIN
1460         l_iterator := 1;
1461         OPEN C_QUAL_TYPE_USG_ID (p_terr_all_rec.territory_type_id);
1462         LOOP
1463             FETCH C_QUAL_TYPE_USG_ID
1464             INTO l_qual_type_usg_id;
1465             EXIT WHEN C_QUAL_TYPE_USG_ID%NOTFOUND;
1466             P_Terr_QualTypeUsgs_Tbl (l_iterator).terr_qual_type_usg_id := NULL ;
1467             P_Terr_QualTypeUsgs_Tbl (l_iterator).terr_id               := NULL ;
1468             P_Terr_QualTypeUsgs_Tbl (l_iterator).qual_type_usg_id      := l_qual_type_usg_id;
1469             P_Terr_QualTypeUsgs_Tbl (l_iterator).last_update_date      := p_terr_all_rec.last_update_date;
1470             P_Terr_QualTypeUsgs_Tbl (l_iterator).last_updated_by       := p_terr_all_rec.last_updated_by;
1471             P_Terr_QualTypeUsgs_Tbl (l_iterator).creation_date         := p_terr_all_rec.creation_date;
1472             P_Terr_QualTypeUsgs_Tbl (l_iterator).created_by            := p_terr_all_rec.created_by;
1473             P_Terr_QualTypeUsgs_Tbl (l_iterator).last_update_login     := p_terr_all_rec.LAST_UPDATE_LOGIN;
1474             P_Terr_QualTypeUsgs_Tbl (l_iterator).org_id                := p_terr_all_rec.org_id;
1475             l_iterator := l_iterator + 1 ;
1476         END LOOP;
1477         CLOSE C_QUAL_TYPE_USG_ID;
1478     EXCEPTION
1479      WHEN OTHERS THEN
1480         CLOSE C_QUAL_TYPE_USG_ID;
1481     END;
1482    --  Call api to insert records into jtf_terr_qualtype_usgs
1483    --
1484    --dbms_output('Create_Territory_Header PVT: Before Calling Create_Terr_QualType_Usage');
1485 
1486    Create_Terr_QualType_Usage(P_Api_Version_Number          => P_Api_Version_Number,
1487                               P_Init_Msg_List               => P_Init_Msg_List,
1488                               P_Commit                      => P_Commit,
1489                               p_validation_level            => p_validation_level,
1490                               P_Terr_Id                     => l_terr_id,
1491                               P_Terr_QualTypeUsgs_Tbl       => P_Terr_QualTypeUsgs_Tbl,
1492                               X_Return_Status               => l_Return_Status,
1493                               X_Msg_Count                   => X_Msg_Count,
1494                               X_Msg_Data                    => X_Msg_Data,
1495                               X_Terr_QualTypeUsgs_Out_Tbl   => l_Terr_QualTypeUsgs_Out_Tbl);
1496 
1497    --
1498    -- Save the statuses
1499    x_return_status            := l_return_status;
1500    --
1501    --Save the out status record
1502    X_Terr_QualTypeUsgs_Out_Tbl  := l_Terr_QualTypeUsgs_Out_Tbl;
1503    --If there is a major error
1504    IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1505       RAISE FND_API.G_EXC_ERROR;
1506    END IF;
1507    --
1508    -- Debug Message
1509    IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
1510    THEN
1511       FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_END_MSG');
1512       FND_MESSAGE.Set_Name('PROC_NAME', l_api_name);
1513       FND_MSG_PUB.Add;
1514    END IF;
1515 
1516    --dbms_output('Create_Territory_Header PVT: Exiting API');
1517 EXCEPTION
1518   WHEN FND_API.G_EXC_ERROR THEN
1519          --dbms_output('Create_Territory_Header PVT: FND_API.G_EXC_ERROR');
1520          x_return_status     := FND_API.G_RET_STS_ERROR ;
1521          FND_MSG_PUB.Count_And_Get
1522          (  P_count          =>   x_msg_count,
1523             P_data           =>   x_msg_data
1524          );
1525 
1526   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1527           --dbms_output('Create_Territory_Header PVT: FND_API.G_EXC_UNEXPECTED_ERROR');
1528           X_return_status     := FND_API.G_RET_STS_UNEXP_ERROR;
1529           FND_MSG_PUB.Count_And_Get
1530           (  p_count          =>   x_msg_count,
1531              p_data           =>   x_msg_data
1532           );
1533 
1534   WHEN OTHERS THEN
1535        --dbms_output('Create_Territory_Header PVT: OTHERS - ' || SQLERRM);
1536        x_return_status        := FND_API.G_RET_STS_UNEXP_ERROR;
1537        IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR )
1538        THEN
1539              FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,
1540                                       'Others exception inside Create_Territory_Header'
1541                                       || sqlerrm);
1542        END IF;
1543 END Create_Territory_Header;
1544 --
1545 --
1546 --    ***************************************************
1547 --    start of comments
1548 --    ***************************************************
1549 --    API name  : Create_Territory_record
1550 --    Type      : PUBLIC
1551 --    Function  : To create a records in jtf_Terr_all table
1552 --
1553 --    Pre-reqs  :
1554 --    Parameters:
1555 --     IN       :
1556 --      Required
1557 --      Parameter Name                Data Type                         Default
1558 --      X_Terr_All_Rec                Terr_All_Rec_Type			:= G_Miss_Terr_All_Rec,
1559 --
1560 --     OUT     :
1561 --      Parameter Name                Data Type
1562 --      X_terr_id                     NUMBER;
1563 --      X_Return_Status               VARCHAR2(1)
1564 --      X_Terr_All_Out_Rec            Terr_All_Out_Rec_Type
1565 --
1566 --
1567 --    Notes:
1568 --
1569 --
1570 --    End of Comments
1571 --
1572 PROCEDURE Create_Territory_Record
1573 ( P_Api_Version_Number          IN  NUMBER,
1574   P_Init_Msg_List               IN  VARCHAR2                         := FND_API.G_FALSE,
1575   P_Commit                      IN  VARCHAR2                         := FND_API.G_FALSE,
1576   p_validation_level            IN  NUMBER                           := FND_API.G_VALID_LEVEL_FULL,
1577   P_Terr_All_Rec                IN  Terr_All_Rec_Type                := G_Miss_Terr_All_Rec,
1578   X_Return_Status               OUT NOCOPY VARCHAR2,
1579   X_Msg_Count                   OUT NOCOPY NUMBER,
1580   X_Msg_Data                    OUT NOCOPY VARCHAR2,
1581   X_Terr_Id                     OUT NOCOPY NUMBER,
1582   X_Terr_All_Out_Rec            OUT NOCOPY Terr_All_Out_Rec_Type
1583 )
1584 AS
1585   l_rowid                       ROWID;
1586   l_terr_id                     NUMBER := P_TERR_ALL_REC.TERR_ID;
1587   l_api_name                    CONSTANT VARCHAR2(30) := 'Create_Territory_Record';
1588   l_api_version_number          CONSTANT NUMBER   := 1.0;
1589 BEGIN
1590   --dbms_output('Create_Territory_Record PVT: Entering API');
1591 
1592   -- Standard Start of API savepoint
1593   SAVEPOINT CREATE_TERR_REC_PVT;
1594 
1595   -- Standard call to check for call compatibility.
1596   IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
1597                                        p_api_version_number,
1598                                        l_api_name,
1599                                        G_PKG_NAME)
1600   THEN
1601       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1602   END IF;
1603 
1604   -- Initialize message list if p_init_msg_list is set to TRUE.
1605   IF FND_API.to_Boolean( p_init_msg_list )
1606   THEN
1607      FND_MSG_PUB.initialize;
1608   END IF;
1609 
1610   -- Debug Message
1611   IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
1612   THEN
1613      FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_START_MSG');
1614      FND_MESSAGE.Set_Name('PROC_NAME', l_api_name);
1615      FND_MSG_PUB.Add;
1616   END IF;
1617 
1618   --  Initialize API return status to success
1619   x_return_status := FND_API.G_RET_STS_SUCCESS;
1620 
1621   IF ( P_validation_level > FND_API.G_VALID_LEVEL_NONE)
1622   THEN
1623       -- Debug message
1624       IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
1625       THEN
1626          FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_VALIDATE_MSG');
1627          FND_MESSAGE.Set_Token('PROC_NAME', 'Validate_Territory_Record');
1628          FND_MSG_PUB.Add;
1629       END IF;
1630       --
1631       -- Invoke validation procedures
1632       Validate_Territory_Record(p_init_msg_list    => FND_API.G_FALSE,
1633                                 x_Return_Status    => x_return_status,
1634                                 x_msg_count        => x_msg_count,
1635                                 x_msg_data         => x_msg_data,
1636                                 p_Terr_All_Rec     => P_Terr_All_Rec);
1637 
1638       IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
1639          RAISE FND_API.G_EXC_ERROR;
1640       END IF;
1641   END IF;
1642 
1643   -- Call insert terr_all table handler
1644   --
1645   --dbms_output('Create_Territory_Record PVT: Before Calling JTF_TERR_PKG.Insert_Row APP_SHORT_NAME-' ||  G_APP_SHORT_NAME);
1646   --dbms_output('Create_Territory_Record PVT: Before Calling JTF_TERR_PKG.Insert_Row p_terr_all_rec.APPLICATION_SHORT_NAME-' ||  p_terr_all_rec.APPLICATION_SHORT_NAME);
1647 
1648       /* Intialise to NULL if FND_API.G_MISS_NUM,
1649       ** otherwise use passed in value
1650       */
1651       IF (l_terr_id = FND_API.G_MISS_NUM) THEN
1652           l_terr_id := NULL;
1653       END IF;
1654 
1655   JTF_TERR_PKG.Insert_Row(x_rowid                      => l_rowid,
1656                           x_terr_id                    => l_terr_id,
1657                           x_last_update_date           => p_terr_all_rec.LAST_UPDATE_DATE,
1658                           x_last_updated_by            => p_terr_all_rec.LAST_UPDATED_BY,
1659                           x_creation_date              => p_terr_all_rec.CREATION_DATE,
1660                           x_created_by                 => p_terr_all_rec.CREATED_BY,
1661                           x_last_update_login          => p_terr_all_rec.LAST_UPDATE_LOGIN,
1662                           x_request_id                 => p_terr_all_rec.request_id,
1663                           x_program_application_id     => p_terr_all_rec.program_application_id,
1664                           x_program_id                 => p_terr_all_rec.program_id,
1665                           x_program_update_date        => p_terr_all_rec.program_update_date,
1666                           x_application_short_name     => p_terr_all_rec.APPLICATION_SHORT_NAME,
1667                           x_name                       => p_terr_all_rec.name,
1668                           x_enabled_flag               => 'Y',
1669                           x_start_date_active          => p_terr_all_rec.start_date_active,
1670                           x_end_date_active            => p_terr_all_rec.end_date_active,
1671                           x_planned_flag               => p_terr_all_rec.planned_flag,
1672                           x_parent_territory_id        => p_terr_all_rec.parent_territory_id,
1673                           x_territory_type_id          => p_terr_all_rec.territory_type_id,
1674                           x_template_territory_id      => p_terr_all_rec.template_territory_id,
1675                           x_template_flag              => p_terr_all_rec.template_flag,
1676                           x_escalation_territory_id    => p_terr_all_rec.escalation_territory_id,
1677                           x_escalation_territory_flag  => p_terr_all_rec.escalation_territory_flag,
1678                           x_overlap_allowed_flag       => p_terr_all_rec.overlap_allowed_flag,
1679                           x_rank                       => p_terr_all_rec.rank,
1680                           x_description                => p_terr_all_rec.description,
1681                           x_update_flag                => p_terr_all_rec.update_flag,
1682                           x_auto_assign_resources_flag => p_terr_all_rec.AUTO_ASSIGN_RESOURCES_FLAG,
1683                           x_attribute_category         => p_terr_all_rec.attribute_category,
1684                           x_attribute1                 => p_terr_all_rec.attribute1,
1685                           x_attribute2                 => p_terr_all_rec.attribute2,
1686                           x_attribute3                 => p_terr_all_rec.attribute3,
1687                           x_attribute4                 => p_terr_all_rec.attribute4,
1688                           x_attribute5                 => p_terr_all_rec.attribute5,
1689                           x_attribute6                 => p_terr_all_rec.attribute6,
1690                           x_attribute7                 => p_terr_all_rec.attribute7,
1691                           x_attribute8                 => p_terr_all_rec.attribute8,
1692                           x_attribute9                 => p_terr_all_rec.attribute9,
1693                           x_attribute10                => p_terr_all_rec.attribute10,
1694                           x_attribute11                => p_terr_all_rec.attribute11,
1695                           x_attribute12                => p_terr_all_rec.attribute12,
1696                           x_attribute13                => p_terr_all_rec.attribute13,
1697                           x_attribute14                => p_terr_all_rec.attribute14,
1698                           x_attribute15                => p_terr_all_rec.attribute15,
1699                           x_org_id                     => P_terr_all_rec.ORG_ID,
1700                           x_num_winners                => p_terr_all_rec.NUM_WINNERS,
1701                           x_num_qual                   => p_terr_all_rec.NUM_QUAL);
1702 
1703      --
1704      --If there was no error in Table Handler Code gets here
1705      --else it goes to the exceptions block
1706      X_Terr_All_Out_Rec.Terr_id := l_terr_id;
1707      X_Terr_Id                  := l_terr_id;
1708      X_Terr_All_Out_Rec.return_status := FND_API.G_RET_STS_SUCCESS;
1709 
1710      -- Debug Message
1711      IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
1712      THEN
1713          FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_START_MSG');
1714          FND_MESSAGE.Set_Name('PROC_NAME', l_api_name);
1715          FND_MSG_PUB.Add;
1716      END IF;
1717 
1718      -- Standard check for p_commit
1719      IF FND_API.to_Boolean( p_commit )
1720      THEN
1721         COMMIT WORK;
1722      END IF;
1723 
1724 
1725      -- Standard call to get message count and if count is 1, get message info.
1726      FND_MSG_PUB.Count_And_Get
1727      (  p_count          =>   x_msg_count,
1728         p_data           =>   x_msg_data
1729      );
1730 
1731      --dbms_output('Create_Territory_Record PVT: Exiting API');
1732 
1733   EXCEPTION
1734     WHEN FND_API.G_EXC_ERROR THEN
1735          --dbms_output('Create_Territory_Record PVT: FND_API.G_EXC_ERROR');
1736          ROLLBACK TO CREATE_TERR_REC_PVT;
1737          x_return_status     := FND_API.G_RET_STS_ERROR ;
1738          FND_MSG_PUB.Count_And_Get
1739          (  p_count          =>   x_msg_count,
1740             p_data           =>   x_msg_data
1741          );
1742 
1743     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1744          --dbms_output('Create_Territory_Record PVT: FND_API.G_EXC_UNEXPECTED_ERROR');
1745          ROLLBACK TO CREATE_TERR_REC_PVT;
1746          X_return_status     := FND_API.G_RET_STS_UNEXP_ERROR;
1747          FND_MSG_PUB.Count_And_Get
1748          (  p_count          =>   x_msg_count,
1749             p_data           =>   x_msg_data
1750          );
1751 
1752 
1753      WHEN OTHERS THEN
1754           --dbms_output('Create_Territory_Record PVT: OTHERS - ' || SQLERRM);
1755           X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1756           X_Terr_All_Out_Rec.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1757           ROLLBACK TO CREATE_TERR_REC_PVT;
1758           IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR )
1759           THEN
1760              FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, 'Others exception in Create_Territory_Record');
1761           END IF;
1762 END Create_Territory_Record;
1763 --
1764 --
1765 --    ***************************************************
1766 --    start of comments
1767 --    ***************************************************
1768 --    API name  : Create_Territory_Usages
1769 --    Type      : PUBLIC
1770 --    Function  : To create Territories usages
1771 --
1772 --    Pre-reqs  :
1773 --    Parameters:
1774 --     IN       :
1775 --      Required
1776 --      Parameter Name                Data Type                        Default
1777 --      p_terr_id                     NUMBER;
1778 --      P_Terr_Usgs_Tbl               Terr_Usgs_Tbl_Type               := G_MISS_Terr_Usgs_Tbl
1779 --
1780 --     OUT     :
1781 --      Parameter Name                Data Type
1782 --      X_Return_Status               VARCHAR2(1)
1783 --      X_Terr_Usgs_Out_Tbl           Terr_Usgs_Out_Tbl,
1784 --
1785 --
1786 --    Notes:
1787 --
1788 --
1789 --    End of Comments
1790 --
1791 PROCEDURE Create_Territory_Usages
1792 ( P_Api_Version_Number          IN  NUMBER,
1793   P_Init_Msg_List               IN  VARCHAR2                         := FND_API.G_FALSE,
1794   P_Commit                      IN  VARCHAR2                         := FND_API.G_FALSE,
1795   p_validation_level            IN  NUMBER                           := FND_API.G_VALID_LEVEL_FULL,
1796   P_Terr_Id                     IN  NUMBER,
1797   P_Terr_Usgs_Tbl               IN  Terr_Usgs_Tbl_Type               := G_MISS_Terr_Usgs_Tbl,
1798   X_Return_Status               OUT NOCOPY VARCHAR2,
1799   X_Msg_Count                   OUT NOCOPY NUMBER,
1800   X_Msg_Data                    OUT NOCOPY VARCHAR2,
1801   X_Terr_Usgs_Out_Tbl           OUT NOCOPY Terr_Usgs_Out_Tbl_Type
1802 )
1803 AS
1804   l_rowid                       ROWID;
1805   l_terr_usg_id                 NUMBER;
1806   l_Terr_Usgs_Tbl_Count         NUMBER                      := P_Terr_Usgs_Tbl.Count;
1807   l_Terr_Usgs_Out_Tbl_Count     NUMBER;
1808   l_Terr_Usgs_Out_Tbl           Terr_Usgs_Out_Tbl_Type;
1809   l_Counter                     NUMBER;
1810   l_api_name                    CONSTANT VARCHAR2(30) := 'Create_Territory_Usages';
1811   l_api_version_number          CONSTANT NUMBER       := 1.0;
1812 BEGIN
1813   --dbms_output('Create_Territory_Usages PVT: Entering API');
1814   --
1815   -- Standard Start of API savepoint
1816   SAVEPOINT CREATE_TERR_USG_PVT;
1817 
1818   -- Standard call to check for call compatibility.
1819   IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
1820                                        p_api_version_number,
1821                                        l_api_name,
1822                                        G_PKG_NAME)
1823   THEN
1824       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1825   END IF;
1826 
1827   -- Initialize message list if p_init_msg_list is set to TRUE.
1828   IF FND_API.to_Boolean( p_init_msg_list )
1829   THEN
1830      FND_MSG_PUB.initialize;
1831   END IF;
1832 
1833   -- Debug Message
1834   IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
1835   THEN
1836      FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_START_MSG');
1837       FND_MESSAGE.Set_Token('PROC_NAME', l_api_name);
1838      FND_MSG_PUB.Add;
1839   END IF;
1840 
1841   --  Initialize API return status to success
1842   x_return_status := FND_API.G_RET_STS_SUCCESS;
1843 
1844   --
1845   If (p_Terr_Usgs_Tbl.count  = 0 ) Then
1846       IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1847          FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_TERR_USAGE');
1848          FND_MSG_PUB.ADD;
1849       END IF;
1850       x_return_status := FND_API.G_RET_STS_ERROR;
1851       RAISE FND_API.G_EXC_ERROR;
1852   END IF;
1853 
1854   --
1855   FOR l_Counter IN 1 ..  l_Terr_Usgs_Tbl_Count LOOP
1856    --
1857        BEGIN
1858 
1859           --dbms_output('Create_Territory_Usages PVT: Before Calling JTF_TERR_USGS_PKG.Insert_Row');
1860 
1861           --  Initialize API return status to success
1862           x_return_status := FND_API.G_RET_STS_SUCCESS;
1863 
1864          IF ( P_validation_level <> FND_API.G_VALID_LEVEL_NONE) THEN
1865 
1866              -- Debug message
1867              IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
1868              THEN
1869                    FND_MESSAGE.Set_Name('JTF', 'Create_Terr_Rec PVT: Valid');
1870                    FND_MSG_PUB.Add;
1871              END IF;
1872              --
1873              -- Invoke validation procedures
1874              Validate_Territory_Usage(p_init_msg_list    => FND_API.G_FALSE,
1875                                       x_Return_Status    => x_return_status,
1876                                       x_msg_count        => x_msg_count,
1877                                       x_msg_data         => x_msg_data,
1878                                       p_Terr_Id          => p_Terr_Id,
1879                                       p_Terr_Usgs_Rec    => P_Terr_Usgs_Tbl(l_Counter));
1880              --
1881              IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
1882                 RAISE FND_API.G_EXC_ERROR;
1883              END IF;
1884           --
1885 
1886              -- jdochert 09/09
1887              -- check for Unique Key constraint violation
1888              validate_terr_usgs_UK(  p_Terr_Id          => p_Terr_Id,
1889                            p_Source_Id        => P_Terr_Usgs_Tbl(l_counter).source_id,
1890                            p_init_msg_list    => FND_API.G_FALSE,
1891                            x_Return_Status    => x_return_status,
1892                            x_msg_count        => x_msg_count,
1893                            x_msg_data         => x_msg_data );
1894 
1895             IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
1896                RAISE FND_API.G_EXC_ERROR;
1897             END IF;
1898 
1899           END IF;
1900 
1901           l_terr_usg_id := P_Terr_Usgs_Tbl(l_Counter).terr_usg_id;
1902 
1903           /* Intialise to NULL if FND_API.G_MISS_NUM,
1904           ** otherwise used passed in value
1905           */
1906           IF (l_terr_usg_id = FND_API.G_MISS_NUM) THEN
1907              l_terr_usg_id := NULL;
1908           END IF;
1909 
1910           JTF_TERR_USGS_PKG.Insert_Row(x_Rowid                     => l_rowid,
1911                                        x_TERR_USG_ID               => l_terr_usg_id,
1912                                        x_LAST_UPDATE_DATE          => P_Terr_Usgs_Tbl(l_Counter).LAST_UPDATE_DATE,
1913                                        x_LAST_UPDATED_BY           => P_Terr_Usgs_Tbl(l_Counter).LAST_UPDATED_BY,
1914                                        x_CREATION_DATE             => P_Terr_Usgs_Tbl(l_Counter).CREATION_DATE,
1915                                        x_CREATED_BY                => P_Terr_Usgs_Tbl(l_Counter).CREATED_BY,
1916                                        x_LAST_UPDATE_LOGIN         => P_Terr_Usgs_Tbl(l_Counter).LAST_UPDATE_LOGIN,
1917                                        x_TERR_ID                   => P_terr_id,
1918                                        x_SOURCE_ID                 => P_Terr_Usgs_Tbl(l_Counter).source_id,
1919                                        x_Org_Id                    => P_Terr_Usgs_Tbl(l_Counter).Org_Id);
1920 
1921           -- Save the terr_usg_id and
1922           X_Terr_Usgs_Out_Tbl(l_Counter).terr_usg_id := l_terr_usg_id;
1923           -- If successful then save the success status for the record
1924           X_Terr_Usgs_Out_Tbl(l_Counter).return_status := FND_API.G_RET_STS_SUCCESS;
1925 
1926        EXCEPTION
1927          WHEN FND_API.G_EXC_ERROR THEN
1928               --dbms_output('Create_Territory_Record PVT: FND_API.G_EXC_ERROR');
1929               ROLLBACK TO CREATE_TERR_USG_PVT;
1930               x_return_status     := FND_API.G_RET_STS_ERROR ;
1931               X_Terr_Usgs_Out_Tbl(l_Counter).terr_usg_id := NULL;
1932               X_Terr_Usgs_Out_Tbl(l_Counter).return_status := X_return_status;
1933               FND_MSG_PUB.Count_And_Get
1934               (  p_count          =>   x_msg_count,
1935                  p_data           =>   x_msg_data
1936               );
1937 
1938          WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1939               --dbms_output('Create_Territory_Record PVT: FND_API.G_EXC_UNEXPECTED_ERROR');
1940               ROLLBACK TO CREATE_TERR_USG_PVT;
1941               X_return_status     := FND_API.G_RET_STS_UNEXP_ERROR;
1942               X_Terr_Usgs_Out_Tbl(l_Counter).terr_usg_id := NULL;
1943               X_Terr_Usgs_Out_Tbl(l_Counter).return_status := X_return_status;
1944               FND_MSG_PUB.Count_And_Get
1945               (  p_count          =>   x_msg_count,
1946                  p_data           =>   x_msg_data
1947               );
1948 
1949           WHEN OTHERS THEN
1950                --dbms_output('Create_Territory_Usages PVT: OTHERS - ' || SQLERRM);
1951                X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1952 	           X_Terr_Usgs_Out_Tbl(l_Counter).terr_usg_id := NULL;
1953                X_Terr_Usgs_Out_Tbl(l_Counter).return_status := X_return_status;
1954                IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR )
1955                THEN
1956                   FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, 'Others exception in Create_Territory_Usages');
1957                END IF;
1958        END;
1959    --
1960    END LOOP;
1961 
1962    -- Get the API overall return status
1963    -- Initialize API return status to success
1964    x_return_status := FND_API.G_RET_STS_SUCCESS;
1965    --Get number of records in the ouput table
1966    l_Terr_Usgs_Out_Tbl_Count     := X_Terr_Usgs_Out_Tbl.Count;
1967    l_Terr_Usgs_Out_Tbl           := X_Terr_Usgs_Out_Tbl;
1968 
1969    FOR l_Counter IN 1 ..  l_Terr_Usgs_Out_Tbl_Count LOOP
1970        If l_Terr_Usgs_Out_Tbl(l_Counter).return_status = FND_API.G_RET_STS_UNEXP_ERROR OR
1971           l_Terr_Usgs_Out_Tbl(l_Counter).return_status = FND_API.G_RET_STS_ERROR
1972        THEN
1973           X_return_status := FND_API.G_RET_STS_ERROR;
1974        END IF;
1975    END LOOP;
1976    --
1977    IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
1978    THEN
1979          FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_END_MSG');
1980          FND_MESSAGE.Set_Token('PROC_NAME', l_api_name);
1981          FND_MSG_PUB.Add;
1982    END IF;
1983    --
1984    -- Standard check for p_commit
1985    IF FND_API.to_Boolean( p_commit )
1986    THEN
1987       COMMIT WORK;
1988    END IF;
1989 
1990    -- Standard call to get message count and if count is 1, get message info.
1991    FND_MSG_PUB.Count_And_Get
1992    (  p_count          =>   x_msg_count,
1993       p_data           =>   x_msg_data
1994    );
1995    --
1996    --dbms_output('Create_Territory_Usages PVT: Exiting API');
1997    --
1998 End Create_Territory_Usages;
1999 --
2000 --
2001 --    ***************************************************
2002 --    start of comments
2003 --    ***************************************************
2004 --    API name  : Create_Terr_QualType_Usage
2005 --    Type      : PUBLIC
2006 --    Function  : To create Territories qualifier usages
2007 --
2008 --    Pre-reqs  :
2009 --    Parameters:
2010 --     IN       :
2011 --      Required
2012 --      Parameter Name                Data Type                        Default
2013 --      p_terr_id                     NUMBER
2014 --      p_terr_usg_id                 NUMBER;
2015 --      P_Terr_QualTypeUsgs_Rec       Terr_QualTypeUsgs_Rec_Type       := G_Miss_Terr_QualTypeUsgs_Rec
2016 --
2017 --     OUT     :
2018 --      Parameter Name                Data Type
2019 --      X_Return_Status               VARCHAR2(1)
2020 --      X_Terr_QualTypeUsgs_Out_Tbl   Terr_QualTypeUsgs_Out_Tbl,
2021 --
2022 --    Notes:
2023 --
2024 --
2025 --    End of Comments
2026 --
2027 PROCEDURE Create_Terr_QualType_Usage
2028 ( P_Api_Version_Number          IN  NUMBER,
2029   P_Init_Msg_List               IN  VARCHAR2                         := FND_API.G_FALSE,
2030   P_Commit                      IN  VARCHAR2                         := FND_API.G_FALSE,
2031   p_validation_level            IN  NUMBER                           := FND_API.G_VALID_LEVEL_FULL,
2032   P_Terr_Id                     IN  NUMBER,
2033   P_Terr_QualTypeUsgs_Rec       IN  Terr_QualTypeUsgs_Rec_Type       := G_Miss_Terr_QualTypeUsgs_Rec,
2034   X_Return_Status               OUT NOCOPY VARCHAR2,
2035   X_Msg_Count                   OUT NOCOPY NUMBER,
2036   X_Msg_Data                    OUT NOCOPY VARCHAR2,
2037   X_Terr_QualTypeUsgs_Id        OUT NOCOPY NUMBER,
2038   X_Terr_QualTypeUsgs_Out_Rec   OUT NOCOPY Terr_QualTypeUsgs_Out_Rec_Type
2039 )
2040 AS
2041   l_rowid                       ROWID;
2042   l_terr_qual_type_usg_id       NUMBER := P_Terr_QualTypeUsgs_Rec.TERR_QUAL_TYPE_USG_ID;
2043   l_api_name                    CONSTANT VARCHAR2(30) := 'Create_Terr_Qualtype_Usage';
2044   l_api_version_number          CONSTANT NUMBER       := 1.0;
2045 BEGIN
2046    --dbms_output('Create_Terr_QualType_Usage PVT(REC): Entering API');
2047 
2048    -- Standard Start of API savepoint
2049    SAVEPOINT CREATE_TERR_QTYPE_USG_PVT;
2050 
2051    -- Standard call to check for call compatibility.
2052    IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
2053                                         p_api_version_number,
2054                                         l_api_name,
2055                                         G_PKG_NAME)
2056    THEN
2057       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2058    END IF;
2059 
2060    -- Initialize message list if p_init_msg_list is set to TRUE.
2061    IF FND_API.to_Boolean( p_init_msg_list )
2062    THEN
2063       FND_MSG_PUB.initialize;
2064    END IF;
2065 
2066    -- Debug Message
2067    IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
2068    THEN
2069       FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_START_MSG');
2070       FND_MESSAGE.Set_Token('PROC_NAME', l_api_name);
2071       FND_MSG_PUB.Add;
2072    END IF;
2073 
2074    --  Initialize API return status to success
2075    x_return_status := FND_API.G_RET_STS_SUCCESS;
2076 
2077 
2078    IF ( P_validation_level >= FND_API.G_VALID_LEVEL_FULL) THEN
2079 
2080         -- Debug message
2081         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
2082         THEN
2083            FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_VALIDATE_MSG');
2084            FND_MESSAGE.Set_Token('PROC_NAME', 'Validate_Terr_Qtype_Usage');
2085            FND_MSG_PUB.Add;
2086         END IF;
2087 
2088         -- Invoke validation procedures
2089         Validate_Terr_Qtype_Usage(p_init_msg_list         => FND_API.G_FALSE,
2090                                   x_Return_Status         => x_return_status,
2091                                   x_msg_count             => x_msg_count,
2092                                   x_msg_data              => x_msg_data,
2093                                   p_Terr_Id               => p_Terr_Id,
2094                                   P_Terr_QualTypeUsgs_Rec => P_Terr_QualTypeUsgs_Rec);
2095         IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
2096            RAISE FND_API.G_EXC_ERROR;
2097         END IF;
2098 
2099 
2100       -- jdochert 09/09
2101       -- check for Unique Key constraint violation
2102       validate_terr_qtype_usgs_UK(  p_Terr_Id          => p_Terr_Id,
2103                            p_Qual_Type_Usg_id       => p_Terr_QualTypeUsgs_Rec.qual_type_usg_id,
2104                            p_init_msg_list    => FND_API.G_FALSE,
2105                            x_Return_Status    => x_return_status,
2106                            x_msg_count        => x_msg_count,
2107                            x_msg_data         => x_msg_data );
2108 
2109       IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
2110          RAISE FND_API.G_EXC_ERROR;
2111       END IF;
2112 
2113    END IF;
2114    --dbms_output('Create_Terr_QualType_Usage PVT(REC): Before Calling JTF_TERR_QTYPE_USGS_PKG.Insert_Row');
2115 
2116    /* Intialise to NULL if FND_API.G_MISS_NUM,
2117    ** otherwise used passed in value
2118    */
2119    IF (l_TERR_QUAL_TYPE_USG_ID = FND_API.G_MISS_NUM) THEN
2120        l_TERR_QUAL_TYPE_USG_ID := NULL;
2121    END IF;
2122 
2123 
2124    -- Call insert terr_Qual_Type_Usgs table handler
2125    JTF_TERR_QTYPE_USGS_PKG.Insert_Row(x_Rowid                      => l_rowid,
2126                                       x_TERR_QTYPE_USG_ID          => l_TERR_QUAL_TYPE_USG_ID,
2127                                       x_LAST_UPDATED_BY            => P_Terr_QualTypeUsgs_Rec.LAST_UPDATED_BY,
2128                                       x_LAST_UPDATE_DATE           => P_Terr_QualTypeUsgs_Rec.LAST_UPDATE_DATE,
2129                                       x_CREATED_BY                 => P_Terr_QualTypeUsgs_Rec.CREATED_BY,
2130                                       x_CREATION_DATE              => P_Terr_QualTypeUsgs_Rec.CREATION_DATE,
2131                                       x_LAST_UPDATE_LOGIN          => P_Terr_QualTypeUsgs_Rec.LAST_UPDATE_LOGIN,
2132                                       x_TERR_ID                    => p_terr_id,
2133                                       x_QUAL_TYPE_USG_ID           => P_Terr_QualTypeUsgs_Rec.QUAL_TYPE_USG_ID,
2134                                       x_ORG_ID                     => P_Terr_QualTypeUsgs_Rec.ORG_ID);
2135 
2136     -- Save the Save the terr_usg_id
2137     X_Terr_QualTypeUsgs_Id := l_TERR_QUAL_TYPE_USG_ID;
2138     X_Terr_QualTypeUsgs_Out_Rec.TERR_QUAL_TYPE_USG_ID := l_TERR_QUAL_TYPE_USG_ID;
2139 
2140     -- If successful then save the success status for the record
2141     X_Return_Status                                   := FND_API.G_RET_STS_SUCCESS;
2142     X_Terr_QualTypeUsgs_Out_Rec.return_status         := FND_API.G_RET_STS_SUCCESS;
2143 
2144     IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
2145     THEN
2146          FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_END_MSG');
2147          FND_MESSAGE.Set_Token('PROC_NAME', l_api_name);
2148          FND_MSG_PUB.Add;
2149     END IF;
2150 
2151     -- Standard check for p_commit
2152     IF FND_API.to_Boolean( p_commit )
2153     THEN
2154        COMMIT WORK;
2155     END IF;
2156 
2157     -- Standard call to get message count and if count is 1, get message info.
2158     FND_MSG_PUB.Count_And_Get
2159     (  p_count          =>   x_msg_count,
2160        p_data           =>   x_msg_data
2161     );
2162 
2163     --dbms_output('Create_Terr_QualType_Usage PVT(REC): Exiting API');
2164 
2165 EXCEPTION
2166     WHEN FND_API.G_EXC_ERROR THEN
2167          --dbms_output('Create_Terr_QualType_Usage PVT(REC): FND_API.G_EXC_ERROR');
2168          ROLLBACK TO CREATE_TERR_QTYPE_USG_PVT;
2169          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2170          X_Terr_QualTypeUsgs_Out_Rec.TERR_QUAL_TYPE_USG_ID   := NULL;
2171          X_Terr_QualTypeUsgs_Out_Rec.return_status := x_return_status;
2172          FND_MSG_PUB.Count_And_Get
2173          (  p_count          =>   x_msg_count,
2174             p_data           =>   x_msg_data
2175          );
2176 
2177     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2178          --dbms_output('Create_Terr_QualType_Usage PVT(REC): FND_API.G_EXC_UNEXPECTED_ERROR');
2179          ROLLBACK TO CREATE_TERR_QTYPE_USG_PVT;
2180          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2181          X_Terr_QualTypeUsgs_Out_Rec.TERR_QUAL_TYPE_USG_ID   := NULL;
2182          X_Terr_QualTypeUsgs_Out_Rec.return_status := x_return_status;
2183          FND_MSG_PUB.Count_And_Get
2184          (  p_count          =>   x_msg_count,
2185             p_data           =>   x_msg_data
2186          );
2187 
2188     WHEN OTHERS THEN
2189          --dbms_output('Create_Terr_QualType_Usage PVT(REC): OTHERS - ' || SQLERRM);
2190          ROLLBACK TO CREATE_TERR_QTYPE_USG_PVT;
2191          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2192          X_Terr_QualTypeUsgs_Out_Rec.TERR_QUAL_TYPE_USG_ID   := NULL;
2193          X_Terr_QualTypeUsgs_Out_Rec.return_status := x_return_status;
2194          IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR )
2195          THEN
2196             FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, 'Others exception in Create_Terr_QualType_Usage(REC)');
2197          END IF;
2198 --
2199 End Create_Terr_QualType_Usage;
2200 --
2201 --
2202 --    ***************************************************
2203 --    start of comments
2204 --    ***************************************************
2205 --    API name  : Create_Terr_QualType_Usage
2206 --    Type      : PUBLIC
2207 --    Function  : To create Territories qualifier usages
2208 --
2209 --    Pre-reqs  :
2210 --    Parameters:
2211 --     IN       :
2212 --      Required
2213 --      Parameter Name                Data Type                        Default
2214 --      p_terr_id                     NUMBER
2215 --      p_terr_usg_id                 NUMBER;
2216 --      P_Terr_QualTypeUsgs_Tbl       Terr_QualTypeUsgs_Tbl_Type       := G_Miss_Terr_QualTypeUsgs_Tbl
2217 --
2218 --     OUT     :
2219 --      Parameter Name                Data Type
2220 --      X_Return_Status               VARCHAR2(1)
2221 --      X_Terr_QualTypeUsgs_Out_Tbl   Terr_QualTypeUsgs_Out_Tbl,
2222 --
2223 --    Notes:
2224 --
2225 --
2226 --    End of Comments
2227 --
2228 PROCEDURE Create_Terr_QualType_Usage
2229 ( P_Api_Version_Number          IN  NUMBER,
2230   P_Init_Msg_List               IN  VARCHAR2                         := FND_API.G_FALSE,
2231   P_Commit                      IN  VARCHAR2                         := FND_API.G_FALSE,
2232   p_validation_level            IN  NUMBER                           := FND_API.G_VALID_LEVEL_FULL,
2233   P_Terr_Id                     IN  NUMBER,
2234   P_Terr_QualTypeUsgs_Tbl       IN  Terr_QualTypeUsgs_Tbl_Type       := G_Miss_Terr_QualTypeUsgs_Tbl,
2235   X_Return_Status               OUT NOCOPY VARCHAR2,
2236   X_Msg_Count                   OUT NOCOPY NUMBER,
2237   X_Msg_Data                    OUT NOCOPY VARCHAR2,
2238   X_Terr_QualTypeUsgs_Out_Tbl   OUT NOCOPY Terr_QualTypeUsgs_Out_Tbl_Type
2239 )
2240 AS
2241   l_rowid                       ROWID;
2242   l_return_Status               VARCHAR2(1);
2243   l_terr_qual_type_usg_id       NUMBER;
2244   l_Terr_QualTypeUsgs_Tbl_Count NUMBER                               := P_Terr_QualTypeUsgs_Tbl.Count;
2245   l_Terr_QTypUsg_Out_Tbl_Count  NUMBER;
2246   l_Terr_QTypUsg_Out_Rec        Terr_QualTypeUsgs_Out_Rec_Type;
2247   l_Terr_QTypUsg_Out_Tbl        Terr_QualTypeUsgs_Out_Tbl_Type;
2248   l_Counter                     NUMBER;
2249   l_api_name                    CONSTANT VARCHAR2(30) := 'Create_Terr_Qtype_Usage(Tbl)';
2250   l_api_version_number          CONSTANT NUMBER       := 1.0;
2251 BEGIN
2252    --dbms_output('Create_Terr_QualType_Usage PVT(TBL): Entering API');
2253 
2254    -- Standard Start of API savepoint
2255    SAVEPOINT CREATE_TERR_QTYPE_USG_PVT;
2256 
2257    -- Standard call to check for call compatibility.
2258    IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
2259                                         p_api_version_number,
2260                                         l_api_name,
2261                                         G_PKG_NAME)
2262    THEN
2263        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2264    END IF;
2265 
2266    -- Initialize message list if p_init_msg_list is set to TRUE.
2267    IF FND_API.to_Boolean( p_init_msg_list )
2268    THEN
2269       FND_MSG_PUB.initialize;
2270    END IF;
2271 
2272    -- Debug Message
2273    IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
2274    THEN
2275       FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_START_MSG');
2276       FND_MESSAGE.Set_Token('PROC_NAME', l_api_name);
2277       FND_MSG_PUB.Add;
2278    END IF;
2279 
2280    --  Initialize API return status to success
2281    x_return_status := FND_API.G_RET_STS_SUCCESS;
2282 
2283    -- Call insert terr_Qual_Type_Usgs table handler
2284    --
2285    FOR l_Counter IN 1 ..  l_Terr_QualTypeUsgs_Tbl_Count LOOP
2286    --
2287        --dbms_output('Create_Terr_QualType_Usage PVT(TBL): Before Calling Create_Terr_QualType_Usage');
2288 
2289        Create_Terr_QualType_Usage( P_Api_Version_Number          =>  P_Api_Version_Number,
2290                                    P_Init_Msg_List               =>  P_Init_Msg_List,
2291                                    P_Commit                      =>  P_Commit,
2292                                    p_validation_level            =>  p_validation_level,
2293                                    P_Terr_Id                     =>  P_Terr_Id,
2294                                    P_Terr_QualTypeUsgs_Rec       =>  P_Terr_QualTypeUsgs_Tbl(l_counter),
2295                                    X_Return_Status               =>  l_Return_Status,
2296                                    X_Msg_Count                   =>  X_Msg_Count,
2297                                    X_Msg_Data                    =>  X_Msg_Data,
2298                                    X_Terr_QualTypeUsgs_Id        =>  l_terr_qual_type_usg_id,
2299                                    X_Terr_QualTypeUsgs_Out_Rec   =>  l_Terr_QTypUsg_Out_Rec);
2300        --
2301        --If there is a major error
2302        IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2303            --dbms_output('Create_Terr_QualType_Usage PVT(TBL): l_return_status <> FND_API.G_RET_STS_SUCCESS');
2304            -- Save the terr_usg_id and
2305            X_Terr_QualTypeUsgs_Out_Tbl(l_counter).TERR_QUAL_TYPE_USG_ID  := NULL;
2306            -- If save the ERROR status for the record
2307            X_Terr_QualTypeUsgs_Out_Tbl(l_counter).return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2308        ELSE
2309            --dbms_output('Create_Terr_QualType_Usage PVT(TBL): l_return_status = FND_API.G_RET_STS_SUCCESS');
2310            -- Save the terr_usg_id and
2311            X_Terr_QualTypeUsgs_Out_Tbl(l_counter).TERR_QUAL_TYPE_USG_ID := l_terr_qual_type_usg_id;
2312            -- If successful then save the success status for the record
2313            X_Terr_QualTypeUsgs_Out_Tbl(l_counter).return_status := FND_API.G_RET_STS_SUCCESS;
2314        END IF;
2315    --
2316    END LOOP;
2317 
2318    -- Get the API overall return status
2319    -- Initialize API return status to success
2320    x_return_status := FND_API.G_RET_STS_SUCCESS;
2321 
2322    --Get number of records in the ouput table
2323    l_Terr_QTypUsg_Out_Tbl_Count  := X_Terr_QualTypeUsgs_Out_Tbl.Count;
2324    l_Terr_QTypUsg_Out_Tbl        := X_Terr_QualTypeUsgs_Out_Tbl;
2325 
2326    FOR l_Counter IN 1 ..  l_Terr_QTypUsg_Out_Tbl_Count LOOP
2327        If l_Terr_QTypUsg_Out_Tbl(l_Counter).return_status = FND_API.G_RET_STS_UNEXP_ERROR OR
2328           l_Terr_QTypUsg_Out_Tbl(l_Counter).return_status = FND_API.G_RET_STS_ERROR
2329        THEN
2330           X_return_status := FND_API.G_RET_STS_ERROR;
2331        END IF;
2332    END LOOP;
2333 
2334    IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
2335    THEN
2336          FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_END_MSG');
2337          FND_MESSAGE.Set_Token('PROC_NAME', l_api_name);
2338          FND_MSG_PUB.Add;
2339    END IF;
2340 
2341    -- Standard check for p_commit
2342    IF FND_API.to_Boolean( p_commit )
2343    THEN
2344       COMMIT WORK;
2345    END IF;
2346 
2347    -- Standard call to get message count and if count is 1, get message info.
2348    FND_MSG_PUB.Count_And_Get
2349    (  p_count          =>   x_msg_count,
2350       p_data           =>   x_msg_data
2351    );
2352 
2353    --dbms_output('Create_Terr_QualType_Usage PVT(TBL): Exiting API');
2354    --
2355 End Create_Terr_QualType_Usage;
2356 --
2357 
2358 
2359 /* update territory's number of qualifiers
2360 */
2361 PROCEDURE update_terr_num_qual(p_terr_id IN NUMBER, p_qual_type_id IN NUMBER) AS
2362 BEGIN
2363 
2364      UPDATE jtf_terr_ALL jt
2365      SET jt.num_qual = (
2366         SELECT COUNT(jtq.qual_usg_id)
2367         FROM jtf_terr_qual_ALL jtq, jtf_qual_usgs_ALL jqu, jtf_qual_type_usgs_ALL jqtu
2368         WHERE jtq.terr_id = jt.terr_id
2369           AND jtq.qual_usg_id = jqu.qual_usg_id
2370           AND jqu.qual_type_usg_id = jqtu.qual_type_usg_id
2371           AND jqtu.qual_type_id = p_qual_type_id
2372           AND jqtu.qual_type_id <> -1001
2373         )
2374      WHERE jt.terr_id = p_terr_id;
2375 
2376 EXCEPTION
2377   WHEN NO_DATA_FOUND THEN
2378         NULL;
2379   WHEN OTHERS THEN
2380         NULL;
2381 
2382 END update_terr_num_qual;
2383 
2384 --
2385 --    ***************************************************
2386 --    start of comments
2387 --    ***************************************************
2388 --    API name  : Create_Terr_QualIfier
2389 --    Type      : PUBLIC
2390 --    Function  : To create Territories qualifier
2391 --
2392 --
2393 --    Pre-reqs  :
2394 --    Parameters:
2395 --     IN       :
2396 --      Required
2397 --      Parameter Name                Data Type                        Default
2398 --      p_terr_id                     NUMBER
2399 --      P_Terr_Qual_Tbl               Terr_Qual_Rec_Type               := G_Miss_Terr_Qual_Rec
2400 --
2401 --     OUT     :
2402 --      Parameter Name                Data Type
2403 --      X_Terr_Qual_Id                NUMBER
2404 --      X_Return_Status               VARCHAR2(1)
2405 --      X_Terr_Qual_Out_Tbl           Terr_Qual_Out_Tbl
2406 --
2407 --    Notes:    This is a an overloaded procedure for a SINGLE RECORD
2408 --
2409 --
2410 --    End of Comments
2411 --
2412 PROCEDURE Create_Terr_Qualifier
2413 ( P_Api_Version_Number          IN  NUMBER,
2414   P_Init_Msg_List               IN  VARCHAR2                         := FND_API.G_FALSE,
2415   P_Commit                      IN  VARCHAR2                         := FND_API.G_FALSE,
2416   p_validation_level            IN  NUMBER                           := FND_API.G_VALID_LEVEL_FULL,
2417   P_Terr_Id                     IN  NUMBER,
2418   P_Terr_Qual_Rec               IN  Terr_Qual_Rec_Type     := G_Miss_Terr_Qual_Rec,
2419   X_Return_Status               OUT NOCOPY VARCHAR2,
2420   X_Msg_Count                   OUT NOCOPY NUMBER,
2421   X_Msg_Data                    OUT NOCOPY VARCHAR2,
2422   X_Terr_Qual_Id                OUT NOCOPY NUMBER,
2423   X_Terr_Qual_Out_Rec           OUT NOCOPY Terr_Qual_Out_Rec_Type
2424 )
2425 AS
2426   l_rowid                       ROWID;
2427   l_terr_qual_id                NUMBER := P_Terr_Qual_Rec.terr_qual_id;
2428   l_api_name                    CONSTANT VARCHAR2(30) := 'Create_Terr_Qualifier';
2429   l_api_version_number          CONSTANT NUMBER       := 1.0;
2430 BEGIN
2431    --dbms_output('Create_Terr_Qualifier REC: Entering API');
2432 
2433    -- Standard Start of API savepoint
2434    SAVEPOINT CREATE_TERR_QUAL_PVT;
2435 
2436    -- Standard call to check for call compatibility.
2437    IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
2438                                         p_api_version_number,
2439                                         l_api_name,
2440                                         G_PKG_NAME)
2441    THEN
2442       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2443    END IF;
2444 
2445    -- Initialize message list if p_init_msg_list is set to TRUE.
2446    IF FND_API.to_Boolean( p_init_msg_list )
2447    THEN
2448       FND_MSG_PUB.initialize;
2449    END IF;
2450 
2451    -- Debug Message
2452    IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
2453    THEN
2454       FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_START_MSG');
2455       FND_MESSAGE.Set_Token('PROC_NAME', l_api_name);
2456       FND_MSG_PUB.Add;
2457    END IF;
2458 
2459    --  Initialize API return status to success
2460    x_return_status := FND_API.G_RET_STS_SUCCESS;
2461 
2462    -- Check the validation level
2463    IF ( P_validation_level >= FND_API.G_VALID_LEVEL_FULL)  THEN
2464 
2465         -- Debug message
2466         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
2467         THEN
2468            FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_VALIDATE_MSG');
2469            FND_MESSAGE.Set_Token('PROC_NAME', 'Validate_Qualifier');
2470            FND_MSG_PUB.Add;
2471         END IF;
2472         --  Check for ORG_ID
2473         IF (P_Terr_Qual_Rec.ORG_ID is NULL OR
2474             P_Terr_Qual_Rec.ORG_ID = FND_API.G_MISS_NUM ) THEN
2475            IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2476               FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_COL_VALUE');
2477               FND_MESSAGE.Set_Token('COL_NAME', 'ORG_ID' );
2478               FND_MSG_PUB.ADD;
2479            END IF;
2480            x_Return_Status := FND_API.G_RET_STS_ERROR ;
2481         End If;
2482 
2483         --Check created by
2484         IF ( P_Terr_Qual_Rec.CREATED_BY is NULL OR
2485            P_Terr_Qual_Rec.CREATED_BY = FND_API.G_MISS_NUM )  THEN
2486            IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2487               FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_COL_VALUE');
2488               FND_MESSAGE.Set_Token('COL_NAME', 'CREATED_BY' );
2489               FND_MSG_PUB.ADD;
2490            END IF;
2491            x_Return_Status := FND_API.G_RET_STS_ERROR ;
2492         End If;
2493 
2494         --Check creation date
2495         If ( P_Terr_Qual_Rec.CREATION_DATE is NULL OR
2496              P_Terr_Qual_Rec.CREATION_DATE = FND_API.G_MISS_DATE ) THEN
2497            IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2498               FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_COL_VALUE');
2499               FND_MESSAGE.Set_Token('COL_NAME', 'ORG_ID' );
2500               FND_MSG_PUB.ADD;
2501            END IF;
2502            x_Return_Status := FND_API.G_RET_STS_ERROR ;
2503         End If;
2504         --
2505         -- Invoke validation procedures
2506         Validate_Qualifier(p_init_msg_list         => FND_API.G_FALSE,
2507                            x_Return_Status         => x_return_status,
2508                            x_msg_count             => x_msg_count,
2509                            x_msg_data              => x_msg_data,
2510                            p_Terr_Id               => p_Terr_Id,
2511                            P_Terr_Qual_Rec         => P_Terr_Qual_Rec);
2512 
2513        --dbms_output('Create_Terr_Qualifier REC: x_return_status = ' || x_return_status);
2514 
2515         IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
2516            RAISE FND_API.G_EXC_ERROR;
2517         END IF;
2518    --
2519    END IF;
2520 
2521    /* Intialise to NULL if FND_API.G_MISS_NUM,
2522    ** otherwise used passed in value
2523    */
2524    IF (l_terr_qual_id = FND_API.G_MISS_NUM) THEN
2525        l_terr_qual_id := NULL;
2526    END IF;
2527 
2528    -- Call insert terr_Qual_Type_Usgs table handler
2529    JTF_TERR_QUAL_PKG.Insert_Row(x_Rowid                          => l_rowid,
2530                                 x_TERR_QUAL_ID                   => l_terr_qual_id,
2531                                 x_LAST_UPDATE_DATE               => P_Terr_Qual_Rec.LAST_UPDATE_DATE,
2532                                 x_LAST_UPDATED_BY                => P_Terr_Qual_Rec.LAST_UPDATED_BY,
2533                                 x_CREATION_DATE                  => P_Terr_Qual_Rec.CREATION_DATE,
2534                                 x_CREATED_BY                     => P_Terr_Qual_Rec.CREATED_BY,
2535                                 x_LAST_UPDATE_LOGIN              => P_Terr_Qual_Rec.LAST_UPDATE_LOGIN,
2536                                 x_TERR_ID                        => P_terr_id,
2537                                 x_QUAL_USG_ID                    => P_Terr_Qual_Rec.QUAL_USG_ID,
2538                                 x_USE_TO_NAME_FLAG               => P_Terr_Qual_Rec.USE_TO_NAME_FLAG,
2539                                 x_GENERATE_FLAG                  => P_Terr_Qual_Rec.GENERATE_FLAG,
2540                                 x_OVERLAP_ALLOWED_FLAG           => P_Terr_Qual_Rec.OVERLAP_ALLOWED_FLAG,
2541                                 x_QUALIFIER_MODE                 => P_Terr_Qual_Rec.QUALIFIER_MODE,
2542                                 x_ORG_ID                         => P_Terr_Qual_Rec.ORG_ID);
2543 
2544    --
2545    -- Save the terr_qual_id returned by the table handler
2546    X_Terr_Qual_Id                   := l_Terr_Qual_Id;
2547    X_Terr_Qual_Out_Rec.TERR_QUAL_ID := l_TERR_QUAL_ID;
2548 
2549    -- If successful then save the success status for the record
2550    X_Terr_Qual_Out_Rec.return_status := FND_API.G_RET_STS_SUCCESS;
2551 
2552 
2553    /* update Sales territory's number of Account qualifiers
2554    */
2555    --update_terr_num_qual(p_terr_id, -1002);
2556    --
2557 
2558    --
2559    IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
2560    THEN
2561          FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_END_MSG');
2562          FND_MESSAGE.Set_Token('PROC_NAME', l_api_name);
2563          FND_MSG_PUB.Add;
2564    END IF;
2565 
2566    -- Standard check for p_commit
2567    IF FND_API.to_Boolean( p_commit )
2568    THEN
2569       COMMIT WORK;
2570    END IF;
2571 
2572    -- Standard call to get message count and if count is 1, get message info.
2573    FND_MSG_PUB.Count_And_Get
2574    (  p_count          =>   x_msg_count,
2575       p_data           =>   x_msg_data
2576    );
2577 
2578 
2579    --dbms_output('Create_Terr_Qualifier REC: Exiting API');
2580 EXCEPTION
2581     WHEN FND_API.G_EXC_ERROR THEN
2582          --dbms_output('Create_Territory_Record PVT: FND_API.G_EXC_ERROR');
2583          ROLLBACK TO CREATE_TERR_QUAL_PVT;
2584          x_return_status     := FND_API.G_RET_STS_ERROR ;
2585          X_Terr_Qual_Out_Rec.TERR_QUAL_ID  := NULL;
2586          X_Terr_Qual_Out_Rec.return_status := x_return_status;
2587          FND_MSG_PUB.Count_And_Get
2588          (  p_count          =>   x_msg_count,
2589             p_data           =>   x_msg_data
2590          );
2591 
2592     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2593          --dbms_output('Create_Territory_Record PVT: FND_API.G_EXC_UNEXPECTED_ERROR');
2594          ROLLBACK TO CREATE_TERR_QUAL_PVT;
2595          X_return_status                   := FND_API.G_RET_STS_UNEXP_ERROR;
2596          X_Terr_Qual_Out_Rec.TERR_QUAL_ID  := NULL;
2597          X_Terr_Qual_Out_Rec.return_status := x_return_status;
2598          FND_MSG_PUB.Count_And_Get
2599          (  p_count          =>   x_msg_count,
2600             p_data           =>   x_msg_data
2601          );
2602 
2603 
2604      WHEN OTHERS THEN
2605          --dbms_output('Create_Terr_Qualifier REC: OTHERS - ' || SQLERRM);
2606          ROLLBACK TO CREATE_TERR_QUAL_PVT;
2607          x_return_status                   := FND_API.G_RET_STS_UNEXP_ERROR;
2608          X_Terr_Qual_Out_Rec.TERR_QUAL_ID  := NULL;
2609          X_Terr_Qual_Out_Rec.return_status := x_return_status;
2610          --
2611          IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR )
2612          THEN
2613             FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, 'Others exception in Create_Terr_Qualifier');
2614          END IF;
2615 --
2616 End Create_Terr_Qualifier;
2617 --
2618 --
2619 --    ***************************************************
2620 --    start of comments
2621 --    ***************************************************
2622 --    API name  : Create_Terr_QualIfier
2623 --    Type      : PUBLIC
2624 --    Function  : To create Territories qualifier
2625 --
2626 --    Pre-reqs  :
2627 --    Parameters:
2628 --     IN       :
2629 --      Required
2630 --      Parameter Name                Data Type                        Default
2631 --      p_terr_id                     NUMBER
2632 --      P_Terr_Qual_Tbl               Terr_Qual_Tbl_Type               := G_Miss_Terr_Qual_Tbl
2633 --
2634 --     OUT     :
2635 --      Parameter Name                Data Type
2636 --      X_Terr_Qual_Id                NUMBER
2637 --      X_Return_Status               VARCHAR2(1)
2638 --      X_Terr_Qual_Out_Tbl           Terr_Qual_Out_Tbl
2639 --
2640 --    Notes:    This is a an overloaded procedure. This one
2641 --              will call the overloade procedure for records
2642 --              creation
2643 --
2644 --
2645 --    End of Comments
2646 --
2647 PROCEDURE Create_Terr_Qualifier
2648 ( P_Api_Version_Number          IN  NUMBER,
2649   P_Init_Msg_List               IN  VARCHAR2                         := FND_API.G_FALSE,
2650   P_Commit                      IN  VARCHAR2                         := FND_API.G_FALSE,
2651   p_validation_level            IN  NUMBER                           := FND_API.G_VALID_LEVEL_FULL,
2652   P_Terr_Id                     IN  NUMBER,
2653   P_Terr_Qual_Tbl               IN  Terr_Qual_Tbl_Type               := G_Miss_Terr_Qual_Tbl,
2654   X_Return_Status               OUT NOCOPY VARCHAR2,
2655   X_Msg_Count                   OUT NOCOPY NUMBER,
2656   X_Msg_Data                    OUT NOCOPY VARCHAR2,
2657   X_Terr_Qual_Out_Tbl           OUT NOCOPY Terr_Qual_Out_Tbl_Type
2658 )
2659 AS
2660   --l_rowid                     ROWID;
2661   l_terr_qual_id                NUMBER;
2662   l_return_Status               VARCHAR2(1);
2663   l_Terr_Qual_Tbl_Count         NUMBER                       := P_Terr_Qual_Tbl.Count;
2664   l_Terr_Qual_Out_Tbl_Count     NUMBER;
2665   l_Terr_Qual_Out_Tbl           Terr_Qual_Out_Tbl_Type;
2666   l_Terr_Qual_Out_Rec           Terr_Qual_Out_Rec_Type;
2667   --l_Terr_Qual_Tbl               Terr_Qual_Tbl_Type;
2668   l_Counter                     NUMBER;
2669   l_api_name                    CONSTANT VARCHAR2(30) := 'Create_Terr_Qualifier (Tbl)';
2670   l_api_version_number          CONSTANT NUMBER       := 1.0;
2671 BEGIN
2672    --dbms_output('Create_Terr_Qualifier TBL: Entering API');
2673 
2674    -- Standard Start of API savepoint
2675    SAVEPOINT CREATE_TERR_QUAL_PVT;
2676 
2677    -- Standard call to check for call compatibility.
2678    IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
2679                                         p_api_version_number,
2680                                         l_api_name,
2681                                         G_PKG_NAME)
2682    THEN
2683        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2684    END IF;
2685 
2686    -- Initialize message list if p_init_msg_list is set to TRUE.
2687    IF FND_API.to_Boolean( p_init_msg_list )
2688    THEN
2689       FND_MSG_PUB.initialize;
2690    END IF;
2691 
2692    -- Debug Message
2693    IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
2694    THEN
2695       FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_START_MSG');
2696       FND_MESSAGE.Set_Token('PROC_NAME', l_api_name);
2697       FND_MSG_PUB.Add;
2698    END IF;
2699 
2700    --  Initialize API return status to success
2701    x_return_status := FND_API.G_RET_STS_SUCCESS;
2702 
2703    -- Call overloaded Create_Terr_Qualifier procedure
2704    --
2705    FOR l_Counter IN 1 ..  l_Terr_Qual_Tbl_Count LOOP
2706    --
2707        --dbms_output('Create_Terr_Qualifier TBL: Before Calling Create_Terr_Qualifier');
2708        --
2709        Create_Terr_Qualifier( P_Api_Version_Number          =>  P_Api_Version_Number,
2710                               P_Init_Msg_List               =>  P_Init_Msg_List,
2711                               P_Commit                      =>  P_Commit,
2712                               p_validation_level            =>  p_validation_level,
2713                               P_Terr_Id                     =>  p_Terr_Id,
2714                               P_Terr_Qual_Rec               =>  P_Terr_Qual_Tbl(l_counter),
2715                               X_Return_Status               =>  l_Return_Status,
2716                               X_Msg_Count                   =>  X_Msg_Count,
2717                               X_Msg_Data                    =>  X_Msg_Data,
2718                               X_Terr_Qual_Id                =>  l_Terr_qual_id,
2719                               X_Terr_Qual_Out_Rec           =>  l_Terr_Qual_Out_Rec);
2720        --
2721        --If there is a major error
2722        IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2723           --dbms_output('Create_Terr_Qualifier TBL: l_return_status <> FND_API.G_RET_STS_SUCCESS');
2724            -- Save the terr_usg_id and
2725            X_Terr_Qual_Out_Tbl(l_counter).TERR_QUAL_ID  := NULL;
2726            -- If save the ERROR status for the record
2727            X_Terr_Qual_Out_Tbl(l_counter).return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2728        ELSE
2729           --dbms_output('Create_Terr_Qualifier TBL: l_return_status = FND_API.G_RET_STS_SUCCESS');
2730            -- Save the terr_usg_id and
2731            X_Terr_Qual_Out_Tbl(l_counter).TERR_QUAL_ID := l_TERR_QUAL_ID;
2732            -- If successful then save the success status for the record
2733            X_Terr_Qual_Out_Tbl(l_counter).return_status := FND_API.G_RET_STS_SUCCESS;
2734        END IF;
2735    --
2736    END LOOP;
2737 
2738    -- Initialize API return status to success
2739    x_return_status := FND_API.G_RET_STS_SUCCESS;
2740 
2741    --Get number of records in the ouput table
2742    l_Terr_Qual_Out_Tbl_Count  := X_Terr_Qual_Out_Tbl.Count;
2743    l_Terr_Qual_Out_Tbl        := X_Terr_Qual_Out_Tbl;
2744 
2745    -- Get the API overall return status
2746    FOR l_Counter IN 1 ..  l_Terr_Qual_Out_Tbl_Count  LOOP
2747        If l_Terr_Qual_Out_Tbl(l_Counter).return_status = FND_API.G_RET_STS_UNEXP_ERROR OR
2748           l_Terr_Qual_Out_Tbl(l_Counter).return_status = FND_API.G_RET_STS_ERROR
2749        THEN
2750           X_return_status := FND_API.G_RET_STS_ERROR;
2751        END IF;
2752    END LOOP;
2753    --
2754    IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
2755    THEN
2756          FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_END_MSG');
2757          FND_MESSAGE.Set_Token('PROC_NAME', l_api_name);
2758          FND_MSG_PUB.Add;
2759    END IF;
2760 
2761    -- Standard check for p_commit
2762    IF FND_API.to_Boolean( p_commit )
2763    THEN
2764       COMMIT WORK;
2765    END IF;
2766 
2767    -- Standard call to get message count and if count is 1, get message info.
2768    FND_MSG_PUB.Count_And_Get
2769    (  p_count          =>   x_msg_count,
2770       p_data           =>   x_msg_data
2771    );
2772 
2773    --dbms_output('Create_Terr_Qualifier TBL: Exiting API');
2774 --
2775 End Create_Terr_Qualifier;
2776 
2777 --    ***************************************************
2778 --    start of comments
2779 --    ***************************************************
2780 --    API name  : Create_Territory_Qualifier
2781 --    Type      :  PUBLIC
2782 --    Function  : To create Territories Qualifiers and Territory Qualifier Values.
2783 --                       Atleast one qualifier value need to provided  to create qualfier.
2784 --    Pre-reqs  :
2785 --    Parameters:
2786 --     IN       :
2787 --      Required
2788 --      Parameter Name                Data Type                        Default
2789 --      p_Api_Version_Number          NUMBER
2790 --      p_Terr_Qual_Tbl               Terr_Qual_Tbl_Type          := G_Miss_Terr_Qual_Tbl
2791 --      p_Terr_Values_Tbl             Terr_Values_Tbl_Type        := G_Miss_Terr_Values_Tbl
2792 --
2793 --      Optional
2794 --      Parameter Name                Data Type  Default
2795 --      p_Init_Msg_List               VARCHAR2                    := FND_API.G_FALSE
2796 --      p_Commit                      VARCHAR2                    := FND_API.G_FALSE
2797 --      p_validation_level            NUMBER                      := FND_API.G_VALID_LEVEL_FULL,
2798 --
2799 --     OUT     :
2800 --      Parameter Name                Data Type
2801 --      x_Return_Status               VARCHAR2(1)
2802 --      x_Msg_Count                   NUMBER
2803 --      x_Msg_Data                    VARCHAR2(2000)
2804 --      x_Terr_Qual_Out_Tbl           Terr_Qual_Out_Tbl,
2805 --      x_Terr_Values_Out_Tbl         Terr_Values_Out_Tbl
2806 --
2807 --    End of Comments
2808 --
2809 PROCEDURE Create_Terr_qualifier
2810   (
2811     p_Api_Version_Number  IN  NUMBER,
2812     p_Init_Msg_List       IN  VARCHAR2 := FND_API.G_FALSE,
2813     p_Commit              IN  VARCHAR2 := FND_API.G_FALSE,
2814     p_validation_level    IN  NUMBER := FND_API.G_VALID_LEVEL_FULL,
2815     x_Return_Status       OUT NOCOPY VARCHAR2,
2816     x_Msg_Count           OUT NOCOPY NUMBER,
2817     x_Msg_Data            OUT NOCOPY VARCHAR2,
2818     P_Terr_Qual_Rec       IN  Terr_Qual_Rec_Type := G_Miss_Terr_Qual_Rec,
2819     p_Terr_Values_Tbl     IN  Terr_Values_Tbl_Type := G_Miss_Terr_Values_Tbl,
2820     X_Terr_Qual_Out_Rec   OUT NOCOPY Terr_Qual_Out_Rec_Type,
2821     x_Terr_Values_Out_Tbl OUT NOCOPY Terr_Values_Out_Tbl_Type
2822  )
2823 AS
2824 	l_api_name           CONSTANT VARCHAR2(30) := 'Create_Terr_Qualifier';
2825 	l_api_version_number CONSTANT NUMBER       := 1.0;
2826 	-- Status Local Variables
2827 	l_return_status      VARCHAR2(1); -- Return value from procedures
2828 	l_return_status_full VARCHAR2(1); -- Calculated return status from                                                -- all return values
2829 	l_Terr_Qual_Out_Tbl Terr_Qual_Out_Tbl_Type;
2830 	l_Terr_Values_Out_Tbl Terr_Values_Out_Tbl_Type;
2831 	l_Terr_Qual_Id NUMBER := 0;
2832 	l_msg_count    NUMBER;
2833 	l_msg_data     VARCHAR2(2000);
2834 	L_SHORT_NAME   VARCHAR2(15);
2835 BEGIN
2836 	--dbms_output('Create_Territory PVT: Entering API -' || G_APP_SHORT_NAME);
2837 	-- Standard Start of API savepoint
2838 	SAVEPOINT CREATE_TERRITORY_PVT;
2839 	-- Standard call to check for call compatibility.
2840 	IF NOT FND_API.Compatible_API_Call ( l_api_version_number, p_api_version_number, l_api_name, G_PKG_NAME) THEN
2841 		RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2842 	END IF;
2843 
2844 	-- Initialize message list if p_init_msg_list is set to TRUE.
2845 	IF FND_API.to_Boolean( p_init_msg_list ) THEN
2846 		FND_MSG_PUB.initialize;
2847 	END IF;
2848 
2849 	-- Debug Message
2850 	IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
2851 		FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_START_MSG');
2852 		FND_MESSAGE.Set_Name('PROC_NAME', l_api_name);
2853 		FND_MSG_PUB.ADD;
2854 	END IF;
2855 	--  Initialize API return status to success
2856 	x_return_status := FND_API.G_RET_STS_SUCCESS;
2857 	--
2858 	--Check whether the territory values are specified
2859 	IF (p_Terr_Values_Tbl.COUNT = 0 ) THEN
2860 		IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2861 			FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_TERR_VALUES');
2862 			FND_MSG_PUB.ADD;
2863 		END IF;
2864 		x_return_status := FND_API.G_RET_STS_ERROR;
2865 		RAISE FND_API.G_EXC_ERROR;
2866 	END IF;
2867 
2868 	-- Terr ID can't be null.
2869 	IF (P_Terr_Qual_Rec.TERR_ID IS NULL) OR (P_Terr_Qual_Rec.TERR_ID = FND_API.G_MISS_NUM) THEN
2870 		IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2871 			FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_COL_VALUE');
2872 			FND_MESSAGE.Set_Token('COL_NAME', 'TERR_ID' );
2873 			FND_MSG_PUB.ADD;
2874 		END IF;
2875 		x_Return_Status := FND_API.G_RET_STS_ERROR ;
2876 		RAISE FND_API.G_EXC_ERROR;
2877 	END IF;
2878 
2879     -- Validate the territory Id
2880     If ( P_Terr_Qual_Rec.TERR_ID IS NOT NULL )AND (P_Terr_Qual_Rec.TERR_ID = FND_API.G_MISS_NUM ) Then
2881        --dbms_output('Validate_Terr_Qtype_Usage: TERR_ID(' || to_char(l_Validate_id) || ')');
2882        If JTF_CTM_UTILITY_PVT.fk_id_is_valid(P_Terr_Qual_Rec.TERR_ID, 'TERR_ID', 'JTF_TERR_ALL') <> FND_API.G_TRUE Then
2883           --dbms_output('Validate_Foreign_Key: l_status <> FND_API.G_TRUE');
2884           IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2885              FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_INVALID_FOREIGN_KEY');
2886              FND_MESSAGE.Set_Token('TABLE_NAME', 'JTF_TERR_ALL');
2887              FND_MESSAGE.Set_Token('COLUMN_NAME', 'TERR_ID');
2888              FND_MSG_PUB.ADD;
2889           END IF;
2890           x_Return_Status := FND_API.G_RET_STS_ERROR ;
2891        End If;
2892     End If;
2893 	-- Create the territory qualifier record
2894 	--
2895 	Create_Terr_Qualifier( P_Api_Version_Number          =>  P_Api_Version_Number,
2896                            P_Init_Msg_List               =>  P_Init_Msg_List,
2897                            P_Commit                      =>  P_Commit,
2898                            p_validation_level            =>  p_validation_level,
2899                            P_Terr_Id                     =>  P_Terr_Qual_Rec.TERR_ID,
2900                            P_Terr_Qual_Rec               =>  P_Terr_Qual_Rec,
2901                            X_Return_Status               =>  l_Return_Status,
2902                            X_Msg_Count                   =>  X_Msg_Count,
2903                            X_Msg_Data                    =>  X_Msg_Data,
2904                            X_Terr_Qual_Id                =>  l_Terr_qual_id,
2905                            X_Terr_Qual_Out_Rec           =>  X_Terr_Qual_Out_Rec);
2906     --
2907 
2908     --If there is a major error
2909 	IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2910 		-- Save the terr_usg_id and
2911 		X_Terr_Qual_Out_Rec.TERR_QUAL_ID := NULL;
2912 		-- If save the ERROR status for the record
2913 		X_Terr_Qual_Out_Rec.return_status := X_Return_Status;
2914 		X_Return_Status                   := l_return_status;
2915 		RAISE FND_API.G_EXC_ERROR;
2916 	ELSE
2917 		-- Save the terr_usg_id and
2918 		X_Terr_Qual_Out_Rec.TERR_QUAL_ID := l_TERR_QUAL_ID;
2919 		-- If successful then save the success status for the record
2920 		X_Terr_Qual_Out_Rec.return_status := FND_API.G_RET_STS_SUCCESS;
2921 	END IF;
2922 
2923 	IF (p_Terr_Values_Tbl.COUNT > 0) THEN
2924 		--
2925 		Create_Terr_Value( P_Api_Version_Number  =>  P_Api_Version_Number,
2926                            P_Init_Msg_List       =>  P_Init_Msg_List,
2927                            P_Commit              =>  P_Commit,
2928                            p_validation_level    =>  p_validation_level,
2929                            P_Terr_Id             =>  P_Terr_Qual_Rec.TERR_ID,
2930                            p_terr_qual_id        =>  l_Terr_Qual_Id,
2931                            P_Terr_Value_Tbl      =>  p_Terr_Values_Tbl,
2932                            X_Return_Status       =>  l_Return_Status,
2933                            X_Msg_Count           =>  l_Msg_Count,
2934                            X_Msg_Data            =>  l_Msg_Data,
2935                            X_Terr_Value_Out_Tbl  =>  x_Terr_Values_Out_Tbl);
2936 
2937 		IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2938 			X_Return_Status   := l_return_status;
2939 			RAISE FND_API.G_EXC_ERROR;
2940 		END IF;
2941 	END IF;	/* p_Terr_Qual_Tbl.count > 0 */
2942 
2943 	--If the program reached here, that mena evry thing went smooth
2944 	x_return_status := FND_API.G_RET_STS_SUCCESS;
2945 
2946 	-- Debug Message
2947 	IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
2948 		FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_END_MSG');
2949 		FND_MESSAGE.Set_Name('PROC_NAME', l_api_name);
2950 		FND_MSG_PUB.ADD;
2951 	END IF;
2952 	FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data );
2953 
2954 	-- Standard check for p_commit
2955 	IF FND_API.to_Boolean( p_commit ) THEN
2956 		COMMIT WORK;
2957 	END IF;
2958 	--
2959  EXCEPTION
2960     --
2961     WHEN FND_API.G_EXC_ERROR THEN
2962         ROLLBACK TO CREATE_TERRITORY_PVT;
2963         x_return_status                    := FND_API.G_RET_STS_ERROR ;
2964         FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data );
2965     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2966         ROLLBACK TO CREATE_TERRITORY_PVT;
2967         X_return_status                    := FND_API.G_RET_STS_UNEXP_ERROR;
2968         FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data );
2969     WHEN OTHERS THEN
2970         ROLLBACK TO CREATE_TERRITORY_PVT;
2971         X_return_status                    := FND_API.G_RET_STS_UNEXP_ERROR;
2972         FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data );
2973 
2974 END Create_Terr_Qualifier;
2975 
2976 
2977 
2978 
2979 --
2980 --
2981 --    ***************************************************
2982 --    start of comments
2983 --    ***************************************************
2984 --    API name  : Create_Terr_Value
2985 --    Type      : PUBLIC
2986 --    Function  : To create Territories qualifier values
2987 --
2988 --
2989 --    Pre-reqs  :
2990 --    Parameters:
2991 --     IN       :
2992 --      Required
2993 --      Parameter Name                Data Type                        Default
2994 --      p_terr_id                     NUMBER
2995 --      p_terr_value_id               NUMBER
2996 --      P_Terr_Value_Rec              Terr_Values_Rec_Type             := G_Miss_Terr_Values_Tbl
2997 --
2998 --     OUT     :
2999 --      Parameter Name                Data Type
3000 --      X_Terr_Value_Id               NUMBER
3001 --      X_Return_Status               VARCHAR2(1)
3002 --      X_Terr_Value_Out_Rec          Terr_Values_Out_Rec
3003 --
3004 --    Notes:    This is a an overloaded procedure
3005 --
3006 --
3007 --    End of Comments
3008 --
3009 PROCEDURE Create_Terr_Value
3010  (P_Api_Version_Number          IN  NUMBER,
3011   P_Init_Msg_List               IN  VARCHAR2                         := FND_API.G_FALSE,
3012   P_Commit                      IN  VARCHAR2                         := FND_API.G_FALSE,
3013   p_validation_level            IN  NUMBER                           := FND_API.G_VALID_LEVEL_FULL,
3014   P_Terr_Id                     IN  NUMBER,
3015   p_terr_qual_id                IN  NUMBER,
3016   P_Terr_Value_Rec              IN  Terr_Values_Rec_Type     := G_Miss_Terr_Values_Rec,
3017   X_Return_Status               OUT NOCOPY VARCHAR2,
3018   X_Msg_Count                   OUT NOCOPY NUMBER,
3019   X_Msg_Data                    OUT NOCOPY VARCHAR2,
3020   X_Terr_Value_Id               OUT NOCOPY NUMBER,
3021   X_Terr_Value_Out_Rec          OUT NOCOPY Terr_Values_Out_Rec_Type
3022 )
3023 AS
3024   l_rowid                       ROWID;
3025   l_terr_Value_id               NUMBER := P_Terr_Value_Rec.terr_value_id;
3026   l_api_name                    CONSTANT VARCHAR2(30) := 'Create_Terr_Values';
3027   l_api_version_number          CONSTANT NUMBER       := 1.0;
3028   l_dummy                       VARCHAR2(3);
3029 BEGIN
3030    --dbms_output('Create_Terr_Value PVT: Entering API');
3031       -- Standard Start of API savepoint
3032    SAVEPOINT CREATE_TERR_VALUE_PVT;
3033 
3034    -- Standard call to check for call compatibility.
3035    IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
3036                                         p_api_version_number,
3037                                         l_api_name,
3038                                         G_PKG_NAME)
3039    THEN
3040       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3041    END IF;
3042 
3043    -- Initialize message list if p_init_msg_list is set to TRUE.
3044    IF FND_API.to_Boolean( p_init_msg_list )
3045    THEN
3046       FND_MSG_PUB.initialize;
3047    END IF;
3048 
3049    -- Debug Message
3050    IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
3051    THEN
3052       FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_START_MSG');
3053       FND_MESSAGE.Set_Token('PROC_NAME', l_api_name);
3054       FND_MSG_PUB.Add;
3055    END IF;
3056 
3057    --  Initialize API return status to success
3058    x_return_status := FND_API.G_RET_STS_SUCCESS;
3059 
3060    -- Check the validation level
3061    IF ( P_validation_level >= FND_API.G_VALID_LEVEL_FULL)   THEN
3062         -- Debug message
3063         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
3064         THEN
3065            FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_VALIDATE_MSG');
3066            FND_MESSAGE.Set_Token('PROC_NAME', 'Validate_terr_Value_Rec');
3067            FND_MSG_PUB.Add;
3068         END IF;
3069 
3070 
3071         --Check created by
3072         IF ( p_Terr_Value_Rec.CREATED_BY is NULL OR
3073              p_Terr_Value_Rec.CREATED_BY = FND_API.G_MISS_NUM )  THEN
3074            IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
3075               FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_COL_VALUE');
3076               FND_MESSAGE.Set_Token('COL_NAME', 'CREATED_BY' );
3077               FND_MSG_PUB.ADD;
3078            END IF;
3079            x_Return_Status := FND_API.G_RET_STS_ERROR ;
3080         End If;
3081 
3082         --Check creation date
3083         If ( p_Terr_Value_Rec.CREATION_DATE is NULL OR
3084              p_Terr_Value_Rec.CREATION_DATE = FND_API.G_MISS_DATE ) THEN
3085            IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
3086               FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_COL_VALUE');
3087               FND_MESSAGE.Set_Token('COL_NAME', 'CREATION_DATE' );
3088               FND_MSG_PUB.ADD;
3089            END IF;
3090            x_Return_Status := FND_API.G_RET_STS_ERROR ;
3091         End If;
3092 
3093         IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
3094            RAISE FND_API.G_EXC_ERROR;
3095         END IF;
3096         -- Invoke validation procedures
3097         Validate_Terr_Value_Rec(p_init_msg_list    => FND_API.G_FALSE,
3098                                 x_return_status    => x_return_status,
3099                                 x_msg_count        => x_msg_count,
3100                                 x_msg_data         => x_msg_data,
3101                                 p_terr_qual_id     => p_terr_qual_id,
3102                                 p_Terr_Value_Rec   => P_Terr_Value_Rec);
3103 
3104         IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
3105            RAISE FND_API.G_EXC_ERROR;
3106         END IF;
3107         -- Check for duplicate values
3108                 -- Invoke validation procedures
3109         Check_duplicate_Value(p_init_msg_list    => FND_API.G_FALSE,
3110                                 x_return_status    => x_return_status,
3111                                 x_msg_count        => x_msg_count,
3112                                 x_msg_data         => x_msg_data,
3113                                 p_terr_qual_id     => p_terr_qual_id,
3114                                 p_Terr_Value_Rec   => P_Terr_Value_Rec);
3115 
3116         IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
3117            RAISE FND_API.G_EXC_ERROR;
3118         END IF;
3119 
3120    END IF;
3121 
3122    /* Intialise to NULL if FND_API.G_MISS_NUM,
3123    ** otherwise used passed in value
3124    */
3125    IF (l_terr_value_id = FND_API.G_MISS_NUM) THEN
3126        l_terr_value_id := NULL;
3127    END IF;
3128    --
3129    --dbms_output('Create_Terr_Value PVT: Before Calling JTF_TERR_VALUES_PKG.Insert_Row');
3130    JTF_TERR_VALUES_PKG.Insert_Row(x_Rowid                       => l_rowid,
3131                                   x_TERR_VALUE_ID               => l_terr_value_id,
3132                                   x_LAST_UPDATED_BY             => P_Terr_Value_Rec.LAST_UPDATED_BY,
3133                                   x_LAST_UPDATE_DATE            => P_Terr_Value_Rec.LAST_UPDATE_DATE,
3134                                   x_CREATED_BY                  => P_Terr_Value_Rec.CREATED_BY,
3135                                   x_CREATION_DATE               => P_Terr_Value_Rec.CREATION_DATE,
3136                                   x_LAST_UPDATE_LOGIN           => P_Terr_Value_Rec.LAST_UPDATE_LOGIN,
3137                                   x_TERR_QUAL_ID                => P_terr_qual_id,
3138                                   x_INCLUDE_FLAG                => P_Terr_Value_Rec.INCLUDE_FLAG,
3139                                   x_COMPARISON_OPERATOR         => P_Terr_Value_Rec.COMPARISON_OPERATOR,
3140                                   x_LOW_VALUE_CHAR              => P_Terr_Value_Rec.LOW_VALUE_CHAR,
3141                                   x_HIGH_VALUE_CHAR             => P_Terr_Value_Rec.HIGH_VALUE_CHAR,
3142                                   x_LOW_VALUE_NUMBER            => P_Terr_Value_Rec.LOW_VALUE_NUMBER,
3143                                   x_HIGH_VALUE_NUMBER           => P_Terr_Value_Rec.HIGH_VALUE_NUMBER,
3144                                   x_VALUE_SET                   => P_Terr_Value_Rec.VALUE_SET,
3145                                   x_INTEREST_TYPE_ID            => P_Terr_Value_Rec.INTEREST_TYPE_ID,
3146                                   x_PRIMARY_INTEREST_CODE_ID    => P_Terr_Value_Rec.PRIMARY_INTEREST_CODE_ID,
3147                                   x_SECONDARY_INTEREST_CODE_ID  => P_Terr_Value_Rec.SECONDARY_INTEREST_CODE_ID,
3148                                   x_CURRENCY_CODE               => P_Terr_Value_Rec.CURRENCY_CODE,
3149                                   x_ID_USED_FLAG                => P_Terr_Value_Rec.ID_USED_FLAG,
3150                                   x_LOW_VALUE_CHAR_ID           => P_Terr_Value_Rec.LOW_VALUE_CHAR_ID,
3151                                   x_ORG_ID                      => P_Terr_Value_Rec.ORG_ID,
3152                                   x_CNR_GROUP_ID                => p_terr_value_rec.CNR_GROUP_ID,
3153                                   x_VALUE1_ID                   => p_terr_value_rec.VALUE1_ID,
3154                                   x_VALUE2_ID                   => p_terr_value_rec.VALUE2_ID,
3155                                   x_VALUE3_ID                   => p_terr_value_rec.VALUE3_ID,
3156                                   x_VALUE4_ID                   => p_terr_value_rec.VALUE4_ID );
3157 
3158    --
3159    -- Save the terr_qual_id returned by the table handler
3160    X_Terr_Value_Id                    := l_Terr_Value_Id;
3161    X_Terr_Value_Out_Rec.TERR_VALUE_ID := l_TERR_VALUE_ID;
3162 
3163    -- If successful then save the success status for the record
3164    X_Terr_Value_Out_Rec.return_status := FND_API.G_RET_STS_SUCCESS;
3165 
3166       --
3167    IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
3168    THEN
3169          FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_END_MSG');
3170          FND_MESSAGE.Set_Token('PROC_NAME', l_api_name);
3171          FND_MSG_PUB.Add;
3172    END IF;
3173 
3174    -- Standard check for p_commit
3175    IF FND_API.to_Boolean( p_commit )
3176    THEN
3177       COMMIT WORK;
3178    END IF;
3179 
3180    -- Standard call to get message count and if count is 1, get message info.
3181    FND_MSG_PUB.Count_And_Get
3182    (  p_count          =>   x_msg_count,
3183       p_data           =>   x_msg_data
3184    );
3185 
3186    --dbms_output('Create_Terr_Value PVT: Exiting API');
3187 EXCEPTION
3188     WHEN FND_API.G_EXC_ERROR THEN
3189          --dbms_output('Create_Territory_Record PVT: FND_API.G_EXC_ERROR');
3190          ROLLBACK TO CREATE_TERR_VALUE_PVT;
3191          x_return_status                     := FND_API.G_RET_STS_ERROR ;
3192          X_Terr_Value_Out_Rec.TERR_VALUE_ID  := NULL;
3193          X_Terr_Value_Out_Rec.return_status  := x_return_status;
3194          FND_MSG_PUB.Count_And_Get
3195          (  p_count          =>   x_msg_count,
3196             p_data           =>   x_msg_data
3197          );
3198 
3199     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3200          --dbms_output('Create_Territory_Record PVT: FND_API.G_EXC_UNEXPECTED_ERROR');
3201          ROLLBACK TO CREATE_TERR_VALUE_PVT;
3202          x_return_status                     := FND_API.G_RET_STS_UNEXP_ERROR;
3203          X_Terr_Value_Out_Rec.TERR_VALUE_ID  := NULL;
3204          X_Terr_Value_Out_Rec.return_status  := x_return_status;
3205 
3206          FND_MSG_PUB.Count_And_Get
3207          (  p_count          =>   x_msg_count,
3208             p_data           =>   x_msg_data
3209          );
3210 
3211     WHEN OTHERS THEN
3212          --dbms_output('Create_Terr_Value PVT: OTHERS - ' || SQLERRM);
3213          ROLLBACK TO CREATE_TERR_VALUE_PVT;
3214          x_return_status                     := FND_API.G_RET_STS_UNEXP_ERROR;
3215          X_Terr_Value_Out_Rec.TERR_VALUE_ID  := NULL;
3216          X_Terr_Value_Out_Rec.return_status  := x_return_status;
3217          --
3218          IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR )
3219          THEN
3220             FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, 'Others exception in Create_Terr_Value');
3221          END IF;
3222 --
3223 End Create_Terr_Value;
3224 
3225 --
3226 --
3227 --    ***************************************************
3228 --    start of comments
3229 --    ***************************************************
3230 --    API name  : Create_Terr_Value
3231 --    Type      : PUBLIC
3232 --    Function  : To create Territories qualifier values
3233 --
3234 --    Pre-reqs  :
3235 --    Parameters:
3236 --     IN       :
3237 --      Required
3238 --      Parameter Name                Data Type                        Default
3239 --      p_terr_id                     NUMBER
3240 --      p_terr_Value_id                NUMBER
3241 --      P_Terr_Qual_Tbl               Terr_Qual_Tbl_Type               := G_Miss_Terr_Qual_Tbl
3242 --
3243 --     OUT     :
3244 --      Parameter Name                Data Type
3245 --      X_Terr_Qual_Id                NUMBER
3246 --      X_Return_Status               VARCHAR2(1)
3247 --      X_Terr_Qual_Out_Tbl           Terr_Qual_Out_Tbl
3248 --
3249 --    Notes:    This is a an overloaded procedure. This one
3250 --              will call the overloade procedure for records
3251 --              creation
3252 --
3253 --
3254 --    End of Comments
3255 --
3256 PROCEDURE Create_Terr_Value
3257  (P_Api_Version_Number          IN  NUMBER,
3258   P_Init_Msg_List               IN  VARCHAR2                         := FND_API.G_FALSE,
3259   P_Commit                      IN  VARCHAR2                         := FND_API.G_FALSE,
3260   p_validation_level            IN  NUMBER                           := FND_API.G_VALID_LEVEL_FULL,
3261   P_Terr_Id                   IN  NUMBER,
3262   p_terr_qual_id                IN  NUMBER,
3263   P_Terr_Value_Tbl              IN  Terr_Values_Tbl_Type             := G_Miss_Terr_Values_Tbl,
3264   X_Return_Status               OUT NOCOPY VARCHAR2,
3265   X_Msg_Count                   OUT NOCOPY NUMBER,
3266   X_Msg_Data                    OUT NOCOPY VARCHAR2,
3267   X_Terr_Value_Out_Tbl          OUT NOCOPY Terr_Values_Out_Tbl_Type
3268 )
3269 AS
3270   --l_rowid                     ROWID;
3271   l_terr_value_id               NUMBER;
3272   l_return_Status               VARCHAR2(1);
3273   l_Terr_Value_Tbl_Count        NUMBER                          := P_Terr_Value_Tbl.Count;
3274   l_Terr_Value_Out_Tbl_Count    NUMBER;
3275   l_Terr_Value_Out_Tbl          Terr_Values_Out_Tbl_Type;
3276   l_Terr_Value_Out_Rec          Terr_Values_Out_Rec_Type;
3277   l_Counter                     NUMBER;
3278 
3279   l_api_name                    CONSTANT VARCHAR2(30) := 'Create_Terr_Value (Tbl)';
3280   l_api_version_number          CONSTANT NUMBER       := 1.0;
3281 BEGIN
3282    --dbms_output('Create_Terr_Value TBL: Entering API');
3283 
3284    -- Standard Start of API savepoint
3285    SAVEPOINT CREATE_TERR_VALUE_PVT;
3286 
3287    -- Standard call to check for call compatibility.
3288    IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
3289                                         p_api_version_number,
3290                                         l_api_name,
3291                                         G_PKG_NAME)
3292    THEN
3293        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3294    END IF;
3295 
3296    -- Initialize message list if p_init_msg_list is set to TRUE.
3297    IF FND_API.to_Boolean( p_init_msg_list )
3298    THEN
3299       FND_MSG_PUB.initialize;
3300    END IF;
3301 
3302    -- Debug Message
3303    IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
3304    THEN
3305       FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_START_MSG');
3306       FND_MESSAGE.Set_Token('PROC_NAME', l_api_name);
3307       FND_MSG_PUB.Add;
3308    END IF;
3309 
3310    --  Initialize API return status to success
3311    x_return_status := FND_API.G_RET_STS_SUCCESS;
3312 
3313    -- Call overloaded Create_Terr_Qualifier procedure
3314    --
3315    FOR l_Counter IN 1 ..  l_Terr_Value_Tbl_Count LOOP
3316    --
3317        --dbms_output('Create_Terr_Value TBL: Before Calling Create_Terr_Value -' || to_char(P_Terr_Value_Tbl(l_counter).QUALIFIER_TBL_INDEX) );
3318        --
3319        Create_Terr_Value( P_Api_Version_Number          =>  P_Api_Version_Number,
3320                           P_Init_Msg_List               =>  P_Init_Msg_List,
3321                           P_Commit                      =>  P_Commit,
3322                           p_validation_level            =>  p_validation_level,
3323                           P_Terr_Id                     =>  p_Terr_Id,
3324                           P_Terr_Qual_Id                =>  p_Terr_Qual_Id,
3325                           P_Terr_Value_Rec              =>  P_Terr_Value_Tbl(l_counter),
3326                           X_Return_Status               =>  l_Return_Status,
3327                           X_Msg_Count                   =>  X_Msg_Count,
3328                           X_Msg_Data                    =>  X_Msg_Data,
3329                           X_Terr_Value_Id               =>  l_Terr_Value_id,
3330                           X_Terr_Value_Out_Rec          =>  l_Terr_Value_Out_Rec);
3331        --
3332        --If there is a major error
3333        IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3334            --dbms_output('Create_Terr_Value TBL: l_return_status <> FND_API.G_RET_STS_SUCCESS');
3335            -- Save the terr_usg_id and
3336            X_Terr_Value_Out_Tbl(l_counter).TERR_VALUE_ID  := NULL;
3337            -- If save the ERROR status for the record
3338            X_Terr_Value_Out_Tbl(l_counter).return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3339        ELSE
3340            --dbms_output('Create_Terr_Value TBL: l_return_status = FND_API.G_RET_STS_SUCCESS');
3341            -- Save the terr_usg_id and
3342            X_Terr_Value_Out_Tbl(l_counter).TERR_VALUE_ID := l_TERR_VALUE_ID;
3343            -- If successful then save the success status for the record
3344            X_Terr_Value_Out_Tbl(l_counter).return_status := FND_API.G_RET_STS_SUCCESS;
3345        END IF;
3346    --
3347    END LOOP;
3348 
3349    -- Get the API overall return status
3350    -- Initialize API return status to success
3351    x_return_status := FND_API.G_RET_STS_SUCCESS;
3352 
3353    --Get number of records in the ouput table
3354    l_Terr_Value_Out_Tbl_Count   := X_Terr_Value_Out_Tbl.Count;
3355    l_Terr_Value_Out_Tbl         := X_Terr_Value_Out_Tbl;
3356 
3357    FOR l_Counter IN 1 ..  l_Terr_Value_Out_Tbl_Count  LOOP
3358        If l_Terr_Value_Out_Tbl(l_Counter).return_status = FND_API.G_RET_STS_UNEXP_ERROR OR
3359           l_Terr_Value_Out_Tbl(l_Counter).return_status = FND_API.G_RET_STS_ERROR
3360        THEN
3361           X_return_status := FND_API.G_RET_STS_ERROR;
3362        END IF;
3363    END LOOP;
3364    --
3365    --
3366    -- Debug Message
3367    IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
3368    THEN
3369       FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_END_MSG');
3370       FND_MESSAGE.Set_Token('PROC_NAME', l_api_name);
3371       FND_MSG_PUB.Add;
3372    END IF;
3373 
3374    --
3375    -- Standard check for p_commit
3376    IF FND_API.to_Boolean( p_commit )
3377    THEN
3378       COMMIT WORK;
3379    END IF;
3380 
3381    -- Standard call to get message count and if count is 1, get message info.
3382    FND_MSG_PUB.Count_And_Get
3383    (  p_count          =>   x_msg_count,
3384       p_data           =>   x_msg_data
3385    );
3386 
3387    --dbms_output('Create_Terr_Value TBL: Exiting API');
3388 --
3389 End Create_Terr_Value;
3390 
3391 ----------------------------------------------------------------------------------
3392 --                              UPDATE  PROCEDURE STARTS HERE
3393 ----------------------------------------------------------------------------------
3394 --
3395 --   *******************************************************
3396 --    Start of Comments
3397 --   *******************************************************
3398 --   API Name:  Update_territory
3399 --   Type    :
3400 --   Pre-Req :
3401 --   Parameters:
3402 --    IN
3403 --     Required:
3404 --     Parameter Name              Data Type          Default
3405 --
3406 --     Optional:
3407 --    OUT:
3408 --     Parameter Name              Data Type          Default
3409 --
3410 --   Note:
3411 --
3412 --   End of Comments
3413 --
3414 PROCEDURE Update_Territory_Record
3415 ( P_Api_Version_Number          IN  NUMBER,
3416   P_Init_Msg_List               IN  VARCHAR2                         := FND_API.G_FALSE,
3417   P_Commit                      IN  VARCHAR2                         := FND_API.G_FALSE,
3418   p_validation_level            IN  NUMBER                           := FND_API.G_VALID_LEVEL_FULL,
3419   P_Terr_All_Rec                IN  Terr_All_Rec_Type                := G_Miss_Terr_All_Rec,
3420   X_Return_Status               OUT NOCOPY VARCHAR2,
3421   X_Msg_Count                   OUT NOCOPY NUMBER,
3422   X_Msg_Data                    OUT NOCOPY VARCHAR2,
3423   X_Terr_All_Out_Rec            OUT NOCOPY Terr_All_Out_Rec_Type
3424 )
3425 AS
3426    Cursor C_GetTerritory(l_terr_id Number) IS
3427           Select Rowid,
3428                  TERR_ID,
3429                  LAST_UPDATE_DATE,
3430                  LAST_UPDATED_BY,
3431                  CREATION_DATE,
3432                  CREATED_BY,
3433                  LAST_UPDATE_LOGIN,
3434                  REQUEST_ID,
3435                  PROGRAM_APPLICATION_ID,
3436                  PROGRAM_ID,
3437                  PROGRAM_UPDATE_DATE,
3438                  APPLICATION_SHORT_NAME,
3439                  NAME,
3440                  ENABLED_FLAG,
3441                  START_DATE_ACTIVE,
3442                  END_DATE_ACTIVE,
3443                  PLANNED_FLAG,
3444                  PARENT_TERRITORY_ID,
3445                  TERRITORY_TYPE_ID,
3446                  TEMPLATE_TERRITORY_ID,
3447                  TEMPLATE_FLAG,
3448                  ESCALATION_TERRITORY_ID,
3449                  ESCALATION_TERRITORY_FLAG,
3450                  OVERLAP_ALLOWED_FLAG,
3451                  RANK,
3452                  DESCRIPTION,
3453                  UPDATE_FLAG,
3454                  AUTO_ASSIGN_RESOURCES_FLAG,
3455                  ATTRIBUTE_CATEGORY,
3456                  ATTRIBUTE1,
3457                  ATTRIBUTE2,
3458                  ATTRIBUTE3,
3459                  ATTRIBUTE4,
3460                  ATTRIBUTE5,
3461                  ATTRIBUTE6,
3462                  ATTRIBUTE7,
3463                  ATTRIBUTE8,
3464                  ATTRIBUTE9,
3465                  ATTRIBUTE10,
3466                  ATTRIBUTE11,
3467                  ATTRIBUTE12,
3468                  ATTRIBUTE13,
3469                  ATTRIBUTE14,
3470                  ATTRIBUTE15,
3471                  ORG_ID,
3472                  NUM_WINNERS,
3473                  NUM_QUAL
3474           From  JTF_TERR_ALL
3475           Where TERR_ID = l_terr_id
3476           For   Update NOWAIT;
3477 
3478       --Local variable declaration
3479       l_api_name                CONSTANT VARCHAR2(30) := 'Update_territory';
3480       l_rowid                   VARCHAR2(50);
3481       l_api_version_number      CONSTANT NUMBER   := 1.0;
3482       l_return_status           VARCHAR2(1);
3483       l_ref_terr_all_rec        terr_all_rec_type;
3484  BEGIN
3485       --dbms_output('Create_Terr_Value TBL: Entering API');
3486 
3487       -- Debug Message
3488       IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
3489       THEN
3490          FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_START_MSG');
3491          FND_MESSAGE.Set_Name('PROC_NAME', l_api_name);
3492          FND_MSG_PUB.Add;
3493       END IF;
3494       -- Initialize API return status to SUCCESS
3495       x_return_status := FND_API.G_RET_STS_SUCCESS;
3496 
3497       IF ( P_validation_level > FND_API.G_VALID_LEVEL_NONE)
3498       THEN
3499            -- Debug message
3500            IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
3501            THEN
3502               FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_VALIDATE_MSG');
3503               FND_MESSAGE.Set_Token('PROC_NAME', 'Validate_TerrRec_Update');
3504               FND_MSG_PUB.Add;
3505            END IF;
3506            --
3507            -- Invoke validation procedures
3508            Validate_TerrRec_Update (p_init_msg_list    => FND_API.G_FALSE,
3509                                      x_Return_Status    => x_return_status,
3510                                      x_msg_count        => x_msg_count,
3511                                      x_msg_data         => x_msg_data,
3512                                      p_Terr_All_Rec     => P_Terr_All_Rec);
3513 
3514            IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
3515               RAISE FND_API.G_EXC_ERROR;
3516           END IF;
3517       END IF;
3518 
3519       --dbms_output('Update_territory_Record: opening cursor C_GetTerritory');
3520       OPEN C_GetTerritory( P_Terr_All_Rec.Terr_Id);
3521 
3522       FETCH C_GetTerritory into
3523             l_Rowid,
3524             l_ref_terr_all_rec.TERR_ID,
3525             l_ref_terr_all_rec.LAST_UPDATE_DATE,
3526             l_ref_terr_all_rec.LAST_UPDATED_BY,
3527             l_ref_terr_all_rec.CREATION_DATE,
3528             l_ref_terr_all_rec.CREATED_BY,
3529             l_ref_terr_all_rec.LAST_UPDATE_LOGIN,
3530             l_ref_terr_all_rec.REQUEST_ID,
3531             l_ref_terr_all_rec.PROGRAM_APPLICATION_ID,
3532             l_ref_terr_all_rec.PROGRAM_ID,
3533             l_ref_terr_all_rec.PROGRAM_UPDATE_DATE,
3534             l_ref_terr_all_rec.APPLICATION_SHORT_NAME,
3535             l_ref_terr_all_rec.NAME,
3536             l_ref_terr_all_rec.ENABLED_FLAG,
3537             l_ref_terr_all_rec.START_DATE_ACTIVE,
3538             l_ref_terr_all_rec.END_DATE_ACTIVE,
3539             l_ref_terr_all_rec.PLANNED_FLAG,
3540             l_ref_terr_all_rec.PARENT_TERRITORY_ID,
3541             l_ref_terr_all_rec.TERRITORY_TYPE_ID,
3542             l_ref_terr_all_rec.TEMPLATE_TERRITORY_ID,
3543             l_ref_terr_all_rec.TEMPLATE_FLAG,
3544             l_ref_terr_all_rec.ESCALATION_TERRITORY_ID,
3545             l_ref_terr_all_rec.ESCALATION_TERRITORY_FLAG,
3546             l_ref_terr_all_rec.OVERLAP_ALLOWED_FLAG,
3547             l_ref_terr_all_rec.RANK,
3548             l_ref_terr_all_rec.DESCRIPTION,
3549             l_ref_terr_all_rec.UPDATE_FLAG,
3550             l_ref_terr_all_rec.AUTO_ASSIGN_RESOURCES_FLAG,
3551             l_ref_terr_all_rec.ATTRIBUTE_CATEGORY,
3552             l_ref_terr_all_rec.ATTRIBUTE1,
3553             l_ref_terr_all_rec.ATTRIBUTE2,
3554             l_ref_terr_all_rec.ATTRIBUTE3,
3555             l_ref_terr_all_rec.ATTRIBUTE4,
3556             l_ref_terr_all_rec.ATTRIBUTE5,
3557             l_ref_terr_all_rec.ATTRIBUTE6,
3558             l_ref_terr_all_rec.ATTRIBUTE7,
3559             l_ref_terr_all_rec.ATTRIBUTE8,
3560             l_ref_terr_all_rec.ATTRIBUTE9,
3561             l_ref_terr_all_rec.ATTRIBUTE10,
3562             l_ref_terr_all_rec.ATTRIBUTE11,
3563             l_ref_terr_all_rec.ATTRIBUTE12,
3564             l_ref_terr_all_rec.ATTRIBUTE13,
3565             l_ref_terr_all_rec.ATTRIBUTE14,
3566             l_ref_terr_all_rec.ATTRIBUTE15,
3567             l_ref_terr_all_rec.ORG_ID,
3568             l_ref_terr_all_rec.NUM_WINNERS,
3569             l_ref_terr_all_rec.NUM_QUAL;
3570 
3571        If ( C_GetTerritory%NOTFOUND) Then
3572            --dbms_output('Update_territory_Record: NO-RCORDS-FOUND');
3573            IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
3574            THEN
3575               FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_UPDT_TARGET');
3576               FND_MESSAGE.Set_Token('TABLE_NAME', 'JTF_TERR_QTYPE_USGS');
3577               FND_MESSAGE.Set_Token('PK_ID', TO_CHAR(p_terr_all_rec.terr_id));
3578               FND_MSG_PUB.Add;
3579            END IF;
3580            raise FND_API.G_EXC_ERROR;
3581        End if;
3582        CLOSE C_GetTerritory;
3583 
3584        --dbms_output('Update_territory_Record: Before Calling JTF_TERR_PKG.Update_Row');
3585        JTF_TERR_PKG.Update_Row(x_rowid                 => l_rowid,
3586                               x_terr_id                    => p_terr_all_rec.terr_id,
3587                               x_last_update_date           => p_terr_all_rec.LAST_UPDATE_DATE,
3588                               x_last_updated_by            => p_terr_all_rec.LAST_UPDATED_BY,
3589                               x_creation_date              => p_terr_all_rec.CREATION_DATE,
3590                               x_created_by                 => p_terr_all_rec.CREATED_BY,
3591                               x_last_update_login          => p_terr_all_rec.LAST_UPDATE_LOGIN,
3592                               x_request_id                 => null,
3593                               x_program_application_id     => null,
3594                               x_program_id                 => null,
3595                               x_program_update_date        => null,
3596                               x_application_short_name     => p_terr_all_rec.application_short_name,
3597                               x_name                       => p_terr_all_rec.name,
3598                               -- x_enabled_flag               => p_terr_all_rec.enabled_flag,
3599                               x_start_date_active          => p_terr_all_rec.start_date_active,
3600                               x_end_date_active            => p_terr_all_rec.end_date_active,
3601                               x_planned_flag               => p_terr_all_rec.planned_flag,
3602                               x_parent_territory_id        => p_terr_all_rec.parent_territory_id,
3603                               --One Can't update the Territory Type in R12. -- VPALLE
3604                               -- x_territory_type_id          => p_terr_all_rec.territory_type_id,
3605                               x_template_territory_id      => p_terr_all_rec.template_territory_id,
3606                               x_template_flag              => p_terr_all_rec.template_flag,
3607                               x_escalation_territory_id    => p_terr_all_rec.escalation_territory_id,
3608                               x_escalation_territory_flag  => p_terr_all_rec.escalation_territory_flag,
3609                               x_overlap_allowed_flag       => p_terr_all_rec.overlap_allowed_flag,
3610                               x_rank                       => p_terr_all_rec.rank,
3611                               x_description                => p_terr_all_rec.description,
3612                               x_update_flag                => p_terr_all_rec.update_flag,
3613                               x_auto_assign_resources_flag => p_terr_all_rec.AUTO_ASSIGN_RESOURCES_FLAG,
3614                               x_attribute_category         => p_terr_all_rec.attribute_category,
3615                               x_attribute1                 => p_terr_all_rec.attribute1,
3616                               x_attribute2                 => p_terr_all_rec.attribute2,
3617                               x_attribute3                 => p_terr_all_rec.attribute3,
3618                               x_attribute4                 => p_terr_all_rec.attribute4,
3619                               x_attribute5                 => p_terr_all_rec.attribute5,
3620                               x_attribute6                 => p_terr_all_rec.attribute6,
3621                               x_attribute7                 => p_terr_all_rec.attribute7,
3622                               x_attribute8                 => p_terr_all_rec.attribute8,
3623                               x_attribute9                 => p_terr_all_rec.attribute9,
3624                               x_attribute10                => p_terr_all_rec.attribute10,
3625                               x_attribute11                => p_terr_all_rec.attribute11,
3626                               x_attribute12                => p_terr_all_rec.attribute12,
3627                               x_attribute13                => p_terr_all_rec.attribute13,
3628                               x_attribute14                => p_terr_all_rec.attribute14,
3629                               x_attribute15                => p_terr_all_rec.attribute15,
3630                               -- We can't update the ORG_ID   -- VPALLE
3631                               x_org_id                     => FND_API.G_MISS_NUM,
3632                               x_num_winners                => p_terr_all_rec.NUM_WINNERS,
3633                               x_num_qual                   => p_terr_all_rec.NUM_QUAL);
3634 
3635        X_Terr_All_Out_Rec.Terr_id          := P_Terr_All_Rec.Terr_Id;
3636        X_Terr_All_Out_Rec.return_status    := FND_API.G_RET_STS_SUCCESS;
3637 
3638       -- Debug Message
3639       IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
3640       THEN
3641          FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_END_MSG');
3642          FND_MESSAGE.Set_Name('PROC_NAME', l_api_name);
3643          FND_MSG_PUB.Add;
3644       END IF;
3645 
3646       --dbms_output('Update_territory_Record PVT: Exiting API');
3647    EXCEPTION
3648      WHEN FND_API.G_EXC_ERROR THEN
3649           --dbms_output('Validate_Territory_Record: FND_API.G_EXC_ERROR');
3650           x_return_status := FND_API.G_RET_STS_ERROR ;
3651           FND_MSG_PUB.Count_And_Get
3652           (  P_count          =>   x_msg_count,
3653              P_data           =>   x_msg_data
3654           );
3655 
3656 
3657      WHEN OTHERS THEN
3658           --dbms_output('Update_territory_Record PVT: OTHERS - ' || SQLERRM);
3659           X_return_status                  := FND_API.G_RET_STS_UNEXP_ERROR;
3660           X_Terr_All_Out_Rec.Terr_id       := P_Terr_All_Rec.Terr_Id;
3661           X_Terr_All_Out_Rec.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3662           IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR )
3663           THEN
3664              FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, 'Update error inside Update_Territory_Record');
3665           END IF;
3666 --
3667 End Update_territory_Record;
3668 --
3669 --
3670 --   *******************************************************
3671 --    Start of Comments
3672 --   *******************************************************
3673 --   API Name:  Update_Territory_Usages
3674 --   Type    :
3675 --   Pre-Req :
3676 --   Parameters:
3677 --    IN
3678 --     Required:
3679 --     Parameter Name              Data Type               Default
3680 --     P_Terr_Usgs_Rec             Terr_Usgs_Rec_Type      G_MISS_TERR_USGS_REC
3681 --
3682 --     Optional:
3683 --    OUT:
3684 --     Parameter Name              Data Type               Default
3685 --     X_Return_Status             VARCHAR2
3686 --     X_Terr_Usgs_Out_Rec         Terr_Usgs_Out_Rec_Type
3687 --
3688 --
3689 --   Note:
3690 --
3691 --   End of Comments
3692 --
3693 PROCEDURE Update_Territory_Usages
3694 ( P_Api_Version_Number          IN  NUMBER,
3695   P_Init_Msg_List               IN  VARCHAR2            := FND_API.G_FALSE,
3696   P_Commit                      IN  VARCHAR2            := FND_API.G_FALSE,
3697   p_validation_level            IN  NUMBER              := FND_API.G_VALID_LEVEL_FULL,
3698   P_Terr_Usgs_Rec               IN  Terr_Usgs_Rec_Type  := G_MISS_TERR_USGS_REC,
3699   X_Return_Status               OUT NOCOPY VARCHAR2,
3700   X_Msg_Count                   OUT NOCOPY NUMBER,
3701   X_Msg_Data                    OUT NOCOPY VARCHAR2,
3702   X_Terr_Usgs_Out_Rec           OUT NOCOPY Terr_Usgs_Out_Rec_Type
3703 )
3704 AS
3705    Cursor C_GetTerritoryUsage(l_terr_usg_id Number) IS
3706           Select Rowid,
3707                  TERR_USG_ID,
3708                  LAST_UPDATE_DATE,
3709                  LAST_UPDATED_BY,
3710                  CREATION_DATE,
3711                  CREATED_BY,
3712                  LAST_UPDATE_LOGIN,
3713                  TERR_ID,
3714                  SOURCE_ID
3715           From   JTF_TERR_USGS_ALL
3716           Where  terr_usg_id = l_terr_usg_id
3717           FOR    Update NOWAIT;
3718       --Local variable declaration
3719       l_api_name                CONSTANT VARCHAR2(30) := 'Update_territory_Usages';
3720       l_rowid                   VARCHAR2(50);
3721       l_api_version_number      CONSTANT NUMBER   := 1.0;
3722       l_return_status           VARCHAR2(1);
3723       l_ref_terr_Usg_rec        Terr_Usgs_Rec_Type;
3724  BEGIN
3725       -- Debug Message
3726       IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
3727       THEN
3728          FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_START_MSG');
3729          FND_MESSAGE.Set_Name('PROC_NAME', l_api_name);
3730          FND_MSG_PUB.Add;
3731       END IF;
3732 
3733       -- Initialize API return status to SUCCESS
3734       x_return_status := FND_API.G_RET_STS_SUCCESS;
3735 
3736       IF ( P_validation_level >= FND_API.G_VALID_LEVEL_FULL)
3737       THEN
3738            -- Debug message
3739            IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
3740            THEN
3741               FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_VALIDATE_MSG');
3742               FND_MESSAGE.Set_Token('PROC_NAME', 'Validate_Territory_Usage');
3743               FND_MSG_PUB.Add;
3744            END IF;
3745            --
3746            -- Invoke validation procedures
3747            Validate_Territory_Usage(p_init_msg_list    => FND_API.G_FALSE,
3748                                     x_Return_Status    => x_return_status,
3749                                     x_msg_count        => x_msg_count,
3750                                     x_msg_data         => x_msg_data,
3751                                     p_Terr_Id          => P_Terr_Usgs_Rec.Terr_Id,
3752                                     P_Terr_Usgs_Rec    => P_Terr_Usgs_Rec);
3753            --
3754            IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
3755               RAISE FND_API.G_EXC_ERROR;
3756            END IF;
3757       --
3758       END IF;
3759 
3760       --dbms_output('Update_Territory_Usages PVT: Entering API');
3761       OPEN  C_GetTerritoryUsage( P_Terr_Usgs_Rec.Terr_Usg_Id);
3762 
3763       --dbms_output('Update_Territory_Usages PVT: Opening cursor C_GetTerritoryUsage');
3764       FETCH C_GetTerritoryUsage into
3765             l_Rowid,
3766             l_ref_terr_Usg_rec.TERR_USG_ID,
3767             l_ref_terr_Usg_rec.LAST_UPDATE_DATE,
3768             l_ref_terr_Usg_rec.LAST_UPDATED_BY,
3769             l_ref_terr_Usg_rec.CREATION_DATE,
3770             l_ref_terr_Usg_rec.CREATED_BY,
3771             l_ref_terr_Usg_rec.LAST_UPDATE_LOGIN,
3772             l_ref_terr_Usg_rec.TERR_ID,
3773             l_ref_terr_Usg_rec.SOURCE_ID;
3774 
3775        If ( C_GetTerritoryUsage%NOTFOUND) Then
3776            --dbms_output('Update_Territory_Usages PVT: NO-RCORDS-FOUND');
3777            IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
3778            THEN
3779               FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_UPDT_TARGET');
3780               FND_MESSAGE.Set_Token('TABLE_NAME', 'JTF_TERR_QTYPE_USGS');
3781               FND_MESSAGE.Set_Token('PK_ID', TO_CHAR(P_Terr_Usgs_Rec.terr_usg_id));
3782               FND_MSG_PUB.Add;
3783            END IF;
3784            raise FND_API.G_EXC_ERROR;
3785        End if;
3786        CLOSE C_GetTerritoryUsage;
3787 
3788        --dbms_output('Update_Territory_Usages PVT: Before Calling JTF_TERR_USGS_PKG.Update_Row');
3789        -- Call insert terr_Qual_Type_Usgs table handler
3790        JTF_TERR_USGS_PKG.Update_Row(x_Rowid                     => l_rowid,
3791                                     x_TERR_USG_ID               => P_Terr_Usgs_Rec.terr_usg_id,
3792                                     x_LAST_UPDATE_DATE          => P_Terr_Usgs_Rec.LAST_UPDATE_DATE,
3793                                     x_LAST_UPDATED_BY           => P_Terr_Usgs_Rec.LAST_UPDATED_BY,
3794                                     x_CREATION_DATE             => P_Terr_Usgs_Rec.CREATION_DATE,
3795                                     x_CREATED_BY                => P_Terr_Usgs_Rec.CREATED_BY,
3796                                     x_LAST_UPDATE_LOGIN         => P_Terr_Usgs_Rec.LAST_UPDATE_LOGIN,
3797                                     x_TERR_ID                   => P_Terr_Usgs_Rec.Terr_Id,
3798                                     x_SOURCE_ID                 => P_Terr_Usgs_Rec.source_id,
3799                                     x_ORG_ID                    => P_Terr_Usgs_Rec.org_id);
3800 
3801        X_Terr_Usgs_Out_Rec.TERR_USG_ID      := P_Terr_Usgs_Rec.Terr_Usg_Id;
3802        X_Terr_Usgs_Out_Rec.return_status    := FND_API.G_RET_STS_SUCCESS;
3803 
3804        -- Debug Message
3805        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
3806        THEN
3807           FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_END_MSG');
3808           FND_MESSAGE.Set_Name('PROC_NAME', l_api_name);
3809           FND_MSG_PUB.Add;
3810        END IF;
3811 
3812        --dbms_output('Update_Territory_Usages PVT: Exiting API');
3813    EXCEPTION
3814      WHEN FND_API.G_EXC_ERROR THEN
3815           --dbms_output('Update_Territory_Usages: FND_API.G_EXC_ERROR');
3816           x_return_status := FND_API.G_RET_STS_ERROR ;
3817           FND_MSG_PUB.Count_And_Get
3818           (  P_count          =>   x_msg_count,
3819              P_data           =>   x_msg_data
3820           );
3821 
3822 
3823      WHEN OTHERS THEN
3824           --dbms_output('Update_Territory_Usages PVT: OTHERS - ' || SQLERRM);
3825           X_return_status                   := FND_API.G_RET_STS_UNEXP_ERROR;
3826           X_Terr_Usgs_Out_Rec.Terr_Usg_Id   := P_Terr_Usgs_Rec.Terr_Usg_Id;
3827           X_Terr_Usgs_Out_Rec.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3828           IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR )
3829           THEN
3830              FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, 'Update error inside Update_Territory_Usages');
3831           END IF;
3832 --
3833 End Update_Territory_Usages;
3834 --
3835 --   *******************************************************
3836 --    Start of Comments
3837 --   *******************************************************
3838 --   API Name:  Update_Territory_Usages
3839 --   Type    :
3840 --   Pre-Req :
3841 --   Parameters:
3842 --    IN
3843 --     Required:
3844 --     Parameter Name              Data Type               Default
3845 --     P_Terr_Usgs_Tbl             Terr_Usgs_Tbl_Type      G_MISS_TERR_USGS_TBL
3846 --
3847 --     Optional:
3848 --    OUT:
3849 --     Parameter Name              Data Type               Default
3850 --     X_Return_Status             VARCHAR2
3851 --     X_Terr_Usgs_Out_Tbl         Terr_Usgs_Out_Tbl_Type
3852 --
3853 --
3854 --   Note:
3855 --
3856 --   End of Comments
3857 --
3858 PROCEDURE Update_Territory_Usages
3859 ( P_Api_Version_Number          IN  NUMBER,
3860   P_Init_Msg_List               IN  VARCHAR2                         := FND_API.G_FALSE,
3861   P_Commit                      IN  VARCHAR2                         := FND_API.G_FALSE,
3862   p_validation_level            IN  NUMBER                           := FND_API.G_VALID_LEVEL_FULL,
3863   P_Terr_Usgs_Tbl               IN  Terr_Usgs_Tbl_Type               := G_MISS_Terr_Usgs_Tbl,
3864   X_Return_Status               OUT NOCOPY VARCHAR2,
3865   X_Msg_Count                   OUT NOCOPY NUMBER,
3866   X_Msg_Data                    OUT NOCOPY VARCHAR2,
3867   X_Terr_Usgs_Out_Tbl           OUT NOCOPY Terr_Usgs_Out_Tbl_Type
3868 )
3869 AS
3870   l_api_name                    CONSTANT VARCHAR2(30) := 'Update_territory_Usages (Tbl)';
3871   l_rowid                       ROWID;
3872   l_return_Status               VARCHAR2(1);
3873   l_terr_qual_type_usg_id       NUMBER;
3874   l_Terr_Usgs_Tbl_Count         NUMBER                := P_Terr_Usgs_Tbl.Count;
3875   l_Terr_Usgs_Out_Tbl_Count     NUMBER;
3876   l_Terr_Usgs_Out_Tbl           Terr_Usgs_Out_Tbl_Type;
3877   l_Terr_Usg_Out_Rec            Terr_Usgs_Out_Rec_Type;
3878   l_Counter                     NUMBER;
3879 BEGIN
3880    --dbms_output('Update_Territory_Usages TBL: Entering API');
3881 
3882    -- Debug Message
3883    IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
3884    THEN
3885       FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_START_MSG');
3886       FND_MESSAGE.Set_Name('PROC_NAME', l_api_name);
3887       FND_MSG_PUB.Add;
3888    END IF;
3889 
3890    --  Initialize API return status to success
3891    x_return_status := FND_API.G_RET_STS_SUCCESS;
3892 
3893    -- Call insert terr_Qual_Type_Usgs table handler
3894    --
3895    FOR l_Counter IN 1 ..  l_Terr_Usgs_Tbl_Count LOOP
3896    --
3897        --dbms_output('Update_Territory_Usages TBL: Before Calling Update_Territory_Usages');
3898        Update_Territory_Usages( P_Api_Version_Number          =>  P_Api_Version_Number,
3899                                 P_Init_Msg_List               =>  P_Init_Msg_List,
3900                                 P_Commit                      =>  P_Commit,
3901                                 p_validation_level            =>  p_validation_level,
3902                                 P_Terr_Usgs_Rec               =>  P_Terr_Usgs_Tbl(l_counter),
3903                                 X_Return_Status               =>  l_Return_Status,
3904                                 X_Msg_Count                   =>  X_Msg_Count,
3905                                 X_Msg_Data                    =>  X_Msg_Data,
3906                                 X_Terr_Usgs_Out_Rec           =>  l_Terr_Usg_Out_Rec);
3907        --
3908        --If there is a major error
3909        IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3910            --dbms_output('Update_Territory_Usages TBL: l_return_status <> FND_API.G_RET_STS_SUCCESS');
3911            -- Save the terr_usg_id and
3912            X_Terr_Usgs_Out_Tbl(l_counter).TERR_USG_ID  := l_Terr_Usg_Out_Rec.terr_usg_id;
3913            -- If save the ERROR status for the record
3914            X_Terr_Usgs_Out_Tbl(l_counter).return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3915        ELSE
3916            --dbms_output('Update_Territory_Usages TBL: l_return_status = FND_API.G_RET_STS_SUCCESS');
3917            -- Save the terr_usg_id and
3918            X_Terr_Usgs_Out_Tbl(l_counter).TERR_USG_ID := l_Terr_Usg_Out_Rec.terr_usg_id;
3919            -- If successful then save the success status for the record
3920            X_Terr_Usgs_Out_Tbl(l_counter).return_status := FND_API.G_RET_STS_SUCCESS;
3921        END IF;
3922    --
3923    END LOOP;
3924 
3925    -- Initialize API return status to success
3926    x_return_status := FND_API.G_RET_STS_SUCCESS;
3927    --
3928    --Get number of records in the ouput table
3929    l_Terr_Usgs_Out_Tbl_Count     := X_Terr_Usgs_Out_Tbl.Count;
3930    l_Terr_Usgs_Out_Tbl           := X_Terr_Usgs_Out_Tbl;
3931 
3932    --
3933    -- Get the API overall return status
3934    FOR l_Counter IN 1 ..  l_Terr_Usgs_Out_Tbl_Count LOOP
3935        If l_Terr_Usgs_Out_Tbl(l_Counter).return_status = FND_API.G_RET_STS_UNEXP_ERROR OR
3936           l_Terr_Usgs_Out_Tbl(l_Counter).return_status = FND_API.G_RET_STS_ERROR
3937        THEN
3938           X_return_status := FND_API.G_RET_STS_ERROR;
3939        END IF;
3940    END LOOP;
3941 
3942    -- Debug Message
3943    IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
3944    THEN
3945       FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_END_MSG');
3946       FND_MESSAGE.Set_Name('PROC_NAME', l_api_name);
3947       FND_MSG_PUB.Add;
3948    END IF;
3949    --dbms_output('Update_Territory_Usages TBL: Exiting API');
3950 --
3951 END Update_Territory_Usages;
3952 --
3953 --   *******************************************************
3954 --    Start of Comments
3955 --   *******************************************************
3956 --   API Name:  Update_Terr_QualType_Usage
3957 --   Type    :
3958 --   Pre-Req :
3959 --   Parameters:
3960 --    IN
3961 --     Required:
3962 --     Parameter Name              Data Type                      Default
3963 --     P_Terr_QualTypeUsgs_Rec     Terr_QualTypeUsgs_Rec_Type     G_Miss_Terr_QualTypeUsgs_Rec
3964 --
3965 --     Optional:
3966 --    OUT:
3967 --     Parameter Name              Data Type                      Default
3968 --     X_Return_Status             VARCHAR2
3969 --     X_Terr_QualTypeUsgs_Out_Rec Terr_QualTypeUsgs_Out_Rec_Type
3970 --
3971 --   Note:
3972 --
3973 --   End of Comments
3974 --
3975 PROCEDURE Update_Terr_QualType_Usage
3976 ( P_Api_Version_Number          IN  NUMBER,
3977   P_Init_Msg_List               IN  VARCHAR2                         := FND_API.G_FALSE,
3978   P_Commit                      IN  VARCHAR2                         := FND_API.G_FALSE,
3979   p_validation_level            IN  NUMBER                           := FND_API.G_VALID_LEVEL_FULL,
3980   P_Terr_QualTypeUsgs_Rec       IN  Terr_QualTypeUsgs_Rec_Type       := G_Miss_Terr_QualTypeUsgs_Rec,
3981   X_Return_Status               OUT NOCOPY VARCHAR2,
3982   X_Msg_Count                   OUT NOCOPY NUMBER,
3983   X_Msg_Data                    OUT NOCOPY VARCHAR2,
3984   X_Terr_QualTypeUsgs_Out_Rec   OUT NOCOPY Terr_QualTypeUsgs_Out_Rec_Type
3985 )
3986 AS
3987    Cursor C_GetTerrQualTypeUsgs(l_terr_qual_type_usg_id Number) IS
3988           Select rowid,
3989                  TERR_QTYPE_USG_ID,
3990                  LAST_UPDATED_BY,
3991                  LAST_UPDATE_DATE,
3992                  CREATED_BY,
3993                  CREATION_DATE,
3994                  LAST_UPDATE_LOGIN,
3995                  TERR_ID,
3996                  QUAL_TYPE_USG_ID
3997         From     JTF_TERR_QTYPE_USGS_ALL
3998         Where    terr_qtype_usg_id = l_terr_qual_type_usg_id
3999         FOR      Update NOWAIT;
4000       --Local variable declaration
4001       l_api_name                   CONSTANT VARCHAR2(30) := 'Update_Terr_QualType_Usage';
4002       l_rowid                      VARCHAR2(50);
4003       l_api_version_number         CONSTANT NUMBER   := 1.0;
4004       l_return_status              VARCHAR2(1);
4005       l_ref_Terr_QualTypeUsgs_Rec  Terr_QualTypeUsgs_Rec_Type;
4006  BEGIN
4007      --dbms_output('Update_Terr_QualType_Usage REC: Entering API');
4008 
4009      -- Debug Message
4010      IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
4011      THEN
4012         FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_START_MSG');
4013         FND_MESSAGE.Set_Name('PROC_NAME', l_api_name);
4014         FND_MSG_PUB.Add;
4015      END IF;
4016 
4017      -- Initialize API return status to SUCCESS
4018      x_return_status := FND_API.G_RET_STS_SUCCESS;
4019 
4020      IF ( P_validation_level >= FND_API.G_VALID_LEVEL_FULL)
4021      THEN
4022            -- Debug message
4023            IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
4024            THEN
4025               FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_VALIDATE_MSG');
4026               FND_MESSAGE.Set_Token('PROC_NAME', 'Validate_Terr_Qtype_Usage');
4027               FND_MSG_PUB.Add;
4028            END IF;
4029            -- Invoke validation procedures
4030            Validate_Terr_Qtype_Usage(p_init_msg_list         => FND_API.G_FALSE,
4031                                      x_Return_Status         => x_return_status,
4032                                      x_msg_count             => x_msg_count,
4033                                      x_msg_data              => x_msg_data,
4034                                      p_Terr_Id               => P_Terr_QualTypeUsgs_Rec.Terr_Id,
4035                                      P_Terr_QualTypeUsgs_Rec => P_Terr_QualTypeUsgs_Rec);
4036            IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
4037               RAISE FND_API.G_EXC_ERROR;
4038            END IF;
4039            --
4040       END IF;
4041 
4042       --dbms_output('Update_Terr_QualType_Usage REC: opening cursor C_GetTerrQualTypeUsgs');
4043       OPEN  C_GetTerrQualTypeUsgs( P_Terr_QualTypeUsgs_Rec.TERR_QUAL_TYPE_USG_ID);
4044       FETCH C_GetTerrQualTypeUsgs into
4045             l_Rowid,
4046             l_ref_Terr_QualTypeUsgs_Rec.TERR_QUAL_TYPE_USG_ID,
4047             l_ref_Terr_QualTypeUsgs_Rec.LAST_UPDATED_BY,
4048             l_ref_Terr_QualTypeUsgs_Rec.LAST_UPDATE_DATE,
4049             l_ref_Terr_QualTypeUsgs_Rec.CREATED_BY,
4050             l_ref_Terr_QualTypeUsgs_Rec.CREATION_DATE,
4051             l_ref_Terr_QualTypeUsgs_Rec.LAST_UPDATE_LOGIN,
4052             l_ref_Terr_QualTypeUsgs_Rec.TERR_ID,
4053             l_ref_Terr_QualTypeUsgs_Rec.QUAL_TYPE_USG_ID;
4054        If (C_GetTerrQualTypeUsgs%NOTFOUND) Then
4055            --dbms_output('Update_Terr_QualType_Usage REC: NO-RCORDS-FOUND');
4056            IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
4057            THEN
4058               FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_UPDT_TARGET');
4059               FND_MESSAGE.Set_Token('TABLE_NAME', 'JTF_TERR_QTYPE_USGS');
4060               FND_MESSAGE.Set_Token('PK_ID', TO_CHAR(P_Terr_QualTypeUsgs_Rec.TERR_QUAL_TYPE_USG_ID));
4061               FND_MSG_PUB.Add;
4062            END IF;
4063            raise FND_API.G_EXC_ERROR;
4064        End if;
4065        CLOSE C_GetTerrQualTypeUsgs;
4066 
4067        --dbms_output('Update_Terr_QualType_Usage REC: Before Calling JTF_TERR_QTYPE_USGS_PKG.Update_Row');
4068        JTF_TERR_QTYPE_USGS_PKG.Update_Row(x_Rowid                   => l_rowid,
4069                                           x_TERR_QTYPE_USG_ID       => P_Terr_QualTypeUsgs_Rec.TERR_QUAL_TYPE_USG_ID,
4070                                           x_LAST_UPDATED_BY         => P_Terr_QualTypeUsgs_Rec.LAST_UPDATED_BY,
4071                                           x_LAST_UPDATE_DATE        => P_Terr_QualTypeUsgs_Rec.LAST_UPDATE_DATE,
4072                                           x_CREATED_BY              => P_Terr_QualTypeUsgs_Rec.CREATED_BY,
4073                                           x_CREATION_DATE           => P_Terr_QualTypeUsgs_Rec.CREATION_DATE,
4074                                           x_LAST_UPDATE_LOGIN       => P_Terr_QualTypeUsgs_Rec.LAST_UPDATE_LOGIN,
4075                                           x_TERR_ID                 => P_Terr_QualTypeUsgs_Rec.terr_id,
4076                                           x_QUAL_TYPE_USG_ID        => P_Terr_QualTypeUsgs_Rec.QUAL_TYPE_USG_ID,
4077                                           x_ORG_ID                  => P_Terr_QualTypeUsgs_Rec.ORG_ID);
4078        --
4079        X_Terr_QualTypeUsgs_Out_Rec.TERR_QUAL_TYPE_USG_ID     := P_Terr_QualTypeUsgs_Rec.TERR_QUAL_TYPE_USG_ID;
4080        X_Terr_QualTypeUsgs_Out_Rec.return_status             := FND_API.G_RET_STS_SUCCESS;
4081 
4082        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
4083        THEN
4084           FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_END_MSG');
4085           FND_MESSAGE.Set_Name('PROC_NAME', l_api_name);
4086           FND_MSG_PUB.Add;
4087        END IF;
4088 
4089        --dbms_output('Update_Terr_QualType_Usage REC: Exiting API');
4090    EXCEPTION
4091      WHEN FND_API.G_EXC_ERROR THEN
4092           --dbms_output('Update_Terr_QualType_Usage: FND_API.G_EXC_ERROR');
4093           x_return_status := FND_API.G_RET_STS_ERROR ;
4094           FND_MSG_PUB.Count_And_Get
4095           (  P_count          =>   x_msg_count,
4096              P_data           =>   x_msg_data
4097           );
4098 
4099      WHEN OTHERS THEN
4100           --dbms_output('Update_Terr_QualType_Usage REC: OTHERS - ' || SQLERRM);
4101           X_return_status                                    := FND_API.G_RET_STS_UNEXP_ERROR;
4102           X_Terr_QualTypeUsgs_Out_Rec.TERR_QUAL_TYPE_USG_ID  := P_Terr_QualTypeUsgs_Rec.TERR_QUAL_TYPE_USG_ID;
4103           X_Terr_QualTypeUsgs_Out_Rec.return_status          := FND_API.G_RET_STS_UNEXP_ERROR;
4104           IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR )
4105           THEN
4106              FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, 'Error: Inside Update_Terr_QualType_Usage');
4107           END IF;
4108 --
4109 End Update_Terr_QualType_Usage;
4110 --
4111 --
4112 --   *******************************************************
4113 --    Start of Comments
4114 --   *******************************************************
4115 --   API Name:  Update_Terr_QualType_Usage
4116 --   Type    :
4117 --   Pre-Req :
4118 --   Parameters:
4119 --    IN
4120 --     Required:
4121 --     Parameter Name              Data Type                       Default
4122 --     P_Terr_QualTypeUsgs_Tbl     Terr_QualTypeUsgs_Tbl_Type      G_Miss_Terr_QualTypeUsgs_Tbl
4123 --
4124 --     Optional:
4125 --    OUT:
4126 --     Parameter Name              Data Type                       Default
4127 --     X_Return_Status             VARCHAR2
4128 --     X_Terr_QualTypeUsgs_Out_Tbl Terr_QualTypeUsgs_Out_Tbl_Type
4129 --
4130 --   Note:
4131 --
4132 --   End of Comments
4133 --
4134 PROCEDURE Update_Terr_QualType_Usage
4135 ( P_Api_Version_Number          IN  NUMBER,
4136   P_Init_Msg_List               IN  VARCHAR2                         := FND_API.G_FALSE,
4137   P_Commit                      IN  VARCHAR2                         := FND_API.G_FALSE,
4138   p_validation_level            IN  NUMBER                           := FND_API.G_VALID_LEVEL_FULL,
4139   P_Terr_QualTypeUsgs_Tbl       IN  Terr_QualTypeUsgs_Tbl_Type       := G_Miss_Terr_QualTypeUsgs_Tbl,
4140   X_Return_Status               OUT NOCOPY VARCHAR2,
4141   X_Msg_Count                   OUT NOCOPY NUMBER,
4142   X_Msg_Data                    OUT NOCOPY VARCHAR2,
4143   X_Terr_QualTypeUsgs_Out_Tbl   OUT NOCOPY Terr_QualTypeUsgs_Out_Tbl_Type
4144 )
4145 AS
4146   l_api_name                    CONSTANT VARCHAR2(30) := 'Update_Terr_QualType_Usage Tbl';
4147   l_rowid                       ROWID;
4148   l_return_Status               VARCHAR2(1);
4149   l_terr_qual_type_usg_id       NUMBER;
4150   l_Terr_QualTypeUsgs_Tbl_Count NUMBER                := P_Terr_QualTypeUsgs_Tbl.Count;
4151   l_Terr_QTypUsg_Out_Tbl_Count  NUMBER;
4152   l_Terr_QTypUsg_Out_Tbl        Terr_QualTypeUsgs_Out_Tbl_Type;
4153   l_Terr_QTypUsg_Out_Rec        Terr_QualTypeUsgs_Out_Rec_Type;
4154   l_Counter                     NUMBER;
4155 BEGIN
4156    --dbms_output('Update_Terr_QualType_Usage TBL: Entering API');
4157 
4158    -- Debug Message
4159    IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
4160    THEN
4161       FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_START_MSG');
4162       FND_MESSAGE.Set_Name('PROC_NAME', l_api_name);
4163       FND_MSG_PUB.Add;
4164    END IF;
4165 
4166    --  Initialize API return status to success
4167    x_return_status := FND_API.G_RET_STS_SUCCESS;
4168    -- Call insert terr_Qual_Type_Usgs table handler
4169    --
4170    FOR l_Counter IN 1 ..  l_Terr_QualTypeUsgs_Tbl_Count LOOP
4171    --
4172        --dbms_output('Update_Terr_QualType_Usage TBL: Before Calling Create_TerrType_Qualifier TBL');
4173        Update_Terr_QualType_Usage( P_Api_Version_Number          =>  P_Api_Version_Number,
4174                                    P_Init_Msg_List               =>  P_Init_Msg_List,
4175                                    P_Commit                      =>  P_Commit,
4176                                    p_validation_level            =>  p_validation_level,
4177                                    P_Terr_QualTypeUsgs_Rec       =>  P_Terr_QualTypeUsgs_Tbl(l_counter),
4178                                    X_Return_Status               =>  l_Return_Status,
4179                                    X_Msg_Count                   =>  X_Msg_Count,
4180                                    X_Msg_Data                    =>  X_Msg_Data,
4181                                    X_Terr_QualTypeUsgs_Out_Rec   =>  l_Terr_QTypUsg_Out_Rec);
4182        --
4183        --If there is a major error
4184        IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4185            --dbms_output('Update_Terr_QualType_Usage TBL: l_return_status <> FND_API.G_RET_STS_SUCCESS');
4186            -- Save the terr_usg_id and
4187            X_Terr_QualTypeUsgs_Out_Tbl(l_counter).TERR_QUAL_TYPE_USG_ID  := l_Terr_QTypUsg_Out_Rec.terr_qual_type_usg_id;
4188            -- If save the ERROR status for the record
4189            X_Terr_QualTypeUsgs_Out_Tbl(l_counter).return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4190        ELSE
4191            --dbms_output('Update_Terr_QualType_Usage TBL: l_return_status = FND_API.G_RET_STS_SUCCESS');
4192            -- Save the terr_usg_id and
4193            X_Terr_QualTypeUsgs_Out_Tbl(l_counter).TERR_QUAL_TYPE_USG_ID := l_Terr_QTypUsg_Out_Rec.terr_qual_type_usg_id;
4194            -- If successful then save the success status for the record
4195            X_Terr_QualTypeUsgs_Out_Tbl(l_counter).return_status := FND_API.G_RET_STS_SUCCESS;
4196        END IF;
4197    --
4198    END LOOP;
4199 
4200    -- Initialize API return status to success
4201    x_return_status := FND_API.G_RET_STS_SUCCESS;
4202 
4203    --Get number of records in the ouput table
4204    l_Terr_QTypUsg_Out_Tbl_Count  := X_Terr_QualTypeUsgs_Out_Tbl.Count;
4205    l_Terr_QTypUsg_Out_Tbl        := X_Terr_QualTypeUsgs_Out_Tbl;
4206 
4207    --Get the API overall return status
4208    FOR l_Counter IN 1 ..  l_Terr_QTypUsg_Out_Tbl_Count LOOP
4209        If l_Terr_QTypUsg_Out_Tbl(l_Counter).return_status = FND_API.G_RET_STS_UNEXP_ERROR OR
4210           l_Terr_QTypUsg_Out_Tbl(l_Counter).return_status = FND_API.G_RET_STS_ERROR
4211        THEN
4212           X_return_status := FND_API.G_RET_STS_ERROR;
4213        END IF;
4214    END LOOP;
4215 
4216    -- Debug Message
4217    IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
4218    THEN
4219       FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_END_MSG');
4220       FND_MESSAGE.Set_Name('PROC_NAME', l_api_name);
4221       FND_MSG_PUB.Add;
4222    END IF;
4223 
4224    --dbms_output('Update_Terr_QualType_Usage TBL: Exiting API');
4225 --
4226 END Update_Terr_QualType_Usage;
4227 --
4228 --   *******************************************************
4229 --    Start of Comments
4230 --   *******************************************************
4231 --   API Name:  Update_Terr_Qualifier
4232 --   Type    :
4233 --   Pre-Req :
4234 --   Parameters:
4235 --     IN       :
4236 --      Required
4237 --      Parameter Name                Data Type                        Default
4238 --      P_Terr_Qual_Rec               Terr_Qual_Rec_Type               := G_Miss_Terr_Qual_Rec
4239 --
4240 --     OUT NOCOPY     :
4241 --      Parameter Name                Data Type
4242 --      X_Return_Status               VARCHAR2
4243 --      X_Terr_Qual_Out_Rec           Terr_Qual_Out_Rec_Type
4244 --
4245 --   Note:
4246 --
4247 --   End of Comments
4248 --
4249 PROCEDURE Update_Terr_Qualifier
4250 ( P_Api_Version_Number          IN  NUMBER,
4251   P_Init_Msg_List               IN  VARCHAR2                         := FND_API.G_FALSE,
4252   P_Commit                      IN  VARCHAR2                         := FND_API.G_FALSE,
4253   p_validation_level            IN  NUMBER                           := FND_API.G_VALID_LEVEL_FULL,
4254   P_Terr_Qual_Rec               IN  Terr_Qual_Rec_Type               := G_Miss_Terr_Qual_Rec,
4255   X_Return_Status               OUT NOCOPY VARCHAR2,
4256   X_Msg_Count                   OUT NOCOPY NUMBER,
4257   X_Msg_Data                    OUT NOCOPY VARCHAR2,
4258   X_Terr_Qual_Out_Rec           OUT NOCOPY Terr_Qual_Out_Rec_Type
4259 )
4260 AS
4261    Cursor C_GetTerrQualifier(l_terr_qual_id Number) IS
4262           Select Rowid,
4263                  TERR_QUAL_ID,
4264                  LAST_UPDATE_DATE,
4265                  LAST_UPDATED_BY,
4266                  CREATION_DATE,
4267                  CREATED_BY,
4268                  LAST_UPDATE_LOGIN,
4269                  TERR_ID,
4270                  QUAL_USG_ID,
4271                  USE_TO_NAME_FLAG,
4272                  GENERATE_FLAG,
4273                  OVERLAP_ALLOWED_FLAG
4274           From   JTF_TERR_QUAL_ALL
4275           Where  terr_qual_id = l_terr_qual_id
4276           FOR    Update NOWAIT;
4277       --Local variable declaration
4278       l_api_name                CONSTANT VARCHAR2(30) := 'Update_Terr_Qualifier';
4279       l_rowid                   VARCHAR2(50);
4280       l_api_version_number      CONSTANT NUMBER   := 1.0;
4281       l_return_status           VARCHAR2(1);
4282       l_ref_Terr_Qual_Rec       Terr_Qual_Rec_type;
4283  BEGIN
4284       --dbms_output('Update_Terr_Qualifier  REC: Entering API');
4285 
4286       -- Debug Message
4287       IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
4288       THEN
4289          FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_START_MSG');
4290          FND_MESSAGE.Set_Name('PROC_NAME', l_api_name);
4291          FND_MSG_PUB.Add;
4292       END IF;
4293 
4294       -- Initialize API return status to SUCCESS
4295       x_return_status := FND_API.G_RET_STS_SUCCESS;
4296 
4297       IF ( P_validation_level >= FND_API.G_VALID_LEVEL_FULL)
4298       THEN
4299            -- Debug message
4300            IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
4301            THEN
4302               FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_VALIDATE_MSG');
4303               FND_MESSAGE.Set_Token('PROC_NAME', 'Validate_Qualifier');
4304               FND_MSG_PUB.Add;
4305            END IF;
4306            --
4307            -- Invoke validation procedures
4308            Validate_Qualifier(p_init_msg_list         => FND_API.G_FALSE,
4309                               x_Return_Status         => x_return_status,
4310                               x_msg_count             => x_msg_count,
4311                               x_msg_data              => x_msg_data,
4312                               p_Terr_Id               => P_Terr_Qual_Rec.Terr_Id,
4313                               P_Terr_Qual_Rec         => P_Terr_Qual_Rec);
4314 
4315            IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
4316               RAISE FND_API.G_EXC_ERROR;
4317            END IF;
4318       --
4319       END IF;
4320 
4321       --dbms_output('Update_Terr_Qualifier  REC: opening cursor C_GetTerrQualifier');
4322       OPEN C_GetTerrQualifier( P_Terr_Qual_Rec.TERR_QUAL_ID);
4323 
4324       Fetch C_GetTerrQualifier into
4325                l_Rowid,
4326                l_ref_Terr_Qual_Rec.TERR_QUAL_ID,
4327                l_ref_Terr_Qual_Rec.LAST_UPDATE_DATE,
4328                l_ref_Terr_Qual_Rec.LAST_UPDATED_BY,
4329                l_ref_Terr_Qual_Rec.CREATION_DATE,
4330                l_ref_Terr_Qual_Rec.CREATED_BY,
4331                l_ref_Terr_Qual_Rec.LAST_UPDATE_LOGIN,
4332                l_ref_Terr_Qual_Rec.TERR_ID,
4333                l_ref_Terr_Qual_Rec.QUAL_USG_ID,
4334                l_ref_Terr_Qual_Rec.USE_TO_NAME_FLAG,
4335                l_ref_Terr_Qual_Rec.GENERATE_FLAG,
4336                l_ref_Terr_Qual_Rec.OVERLAP_ALLOWED_FLAG;
4337        If ( C_GetTerrQualifier%NOTFOUND) Then
4338            --dbms_output('Update_Terr_Qualifier  REC: NO-RCORDS-FOUND');
4339            IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
4340            THEN
4341               FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_UPDT_TARGET');
4342               FND_MESSAGE.Set_Token('TABLE_NAME', 'JTF_TERR_QUAL');
4343               FND_MESSAGE.Set_Token('PK_ID', TO_CHAR(P_Terr_Qual_Rec.terr_qual_id));
4344               FND_MSG_PUB.Add;
4345            END IF;
4346            raise FND_API.G_EXC_ERROR;
4347        End if;
4348        CLOSE C_GetTerrQualifier;
4349        -- P_Terr_Qual_Rec.terr_qual_id cant be null
4350        --dbms_output('Update_Terr_Qualifier  REC: Before Calling JTF_TERR_QUAL_PKG.Update_Row');
4351        JTF_TERR_QUAL_PKG.Update_Row(x_Rowid                      => l_rowid,
4352                                 x_TERR_QUAL_ID                   => P_Terr_Qual_Rec.terr_qual_id,
4353                                 x_LAST_UPDATE_DATE               => P_Terr_Qual_Rec.LAST_UPDATE_DATE,
4354                                 x_LAST_UPDATED_BY                => P_Terr_Qual_Rec.LAST_UPDATED_BY,
4355                                 x_CREATION_DATE                  => P_Terr_Qual_Rec.creation_date,
4356                                 x_CREATED_BY                     => P_Terr_Qual_Rec.created_by,
4357                                 x_LAST_UPDATE_LOGIN              => P_Terr_Qual_Rec.LAST_UPDATE_LOGIN,
4358                                 x_TERR_ID                        => P_Terr_Qual_Rec.Terr_Id,
4359                                 x_QUAL_USG_ID                    => P_Terr_Qual_Rec.QUAL_USG_ID,
4360                                 x_USE_TO_NAME_FLAG               => P_Terr_Qual_Rec.USE_TO_NAME_FLAG,
4361                                 x_GENERATE_FLAG                  => P_Terr_Qual_Rec.GENERATE_FLAG,
4362                                 x_OVERLAP_ALLOWED_FLAG           => P_Terr_Qual_Rec.OVERLAP_ALLOWED_FLAG,
4363                                 x_QUALIFIER_MODE                 => P_Terr_Qual_Rec.QUALIFIER_MODE,
4364                                 -- We can't update the ORG_ID   -- VPALLE
4365                                 x_ORG_ID                         => FND_API.G_MISS_NUM );
4366 
4367        --Call the update table handler
4368        X_Terr_Qual_Out_Rec.TERR_QUAL_ID     := P_Terr_Qual_Rec.TERR_QUAL_ID;
4369        X_Terr_Qual_Out_Rec.return_status    := FND_API.G_RET_STS_SUCCESS;
4370 
4371        -- Debug Message
4372        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
4373        THEN
4374           FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_START_MSG');
4375           FND_MESSAGE.Set_Name('PROC_NAME', l_api_name);
4376           FND_MSG_PUB.Add;
4377        END IF;
4378 
4379        --dbms_output('Update_Terr_Qualifier  REC: Exiting API');
4380    EXCEPTION
4381      WHEN FND_API.G_EXC_ERROR THEN
4382           --dbms_output('Validate_Territory_Record: FND_API.G_EXC_ERROR');
4383           x_return_status := FND_API.G_RET_STS_ERROR ;
4384           FND_MSG_PUB.Count_And_Get
4385           (  P_count          =>   x_msg_count,
4386              P_data           =>   x_msg_data
4387           );
4388 
4389      WHEN OTHERS THEN
4390           --dbms_output('Update_Terr_Qualifier  REC: OTHERS - ' || SQLERRM);
4391           X_return_status                   := FND_API.G_RET_STS_UNEXP_ERROR;
4392           X_Terr_Qual_Out_Rec.TERR_QUAL_ID  := P_Terr_Qual_Rec.TERR_QUAL_ID;
4393           X_Terr_Qual_Out_Rec.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4394           IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR )
4395           THEN
4396              FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, 'Update error inside Update_Terr_Qualifier');
4397           END IF;
4398 End  Update_Terr_Qualifier;
4399 --
4400 --
4401 --   *******************************************************
4402 --    Start of Comments
4403 --   *******************************************************
4404 --   API Name:  Update_Terr_Qualifier
4405 --   Type    :
4406 --   Pre-Req :
4407 --   Parameters:
4408 --     IN       :
4409 --      Required
4410 --      Parameter Name                Data Type                        Default
4411 --      P_Terr_Qual_Rec               Terr_Qual_Rec_Type               := G_Miss_Terr_Qual_Rec
4412 --
4413 --     OUT NOCOPY     :
4414 --      Parameter Name                Data Type
4415 --      X_Return_Status               VARCHAR2
4416 --      X_Terr_Qual_Out_Rec           Terr_Qual_Out_Rec_Type
4417 --
4418 --   Note:
4419 --
4420 --   End of Comments
4421 --
4422 PROCEDURE Update_Terr_Qualifier
4423 ( P_Api_Version_Number          IN  NUMBER,
4424   P_Init_Msg_List               IN  VARCHAR2                         := FND_API.G_FALSE,
4425   P_Commit                      IN  VARCHAR2                         := FND_API.G_FALSE,
4426   p_validation_level            IN  NUMBER                           := FND_API.G_VALID_LEVEL_FULL,
4427   P_Terr_Qual_Tbl               IN  Terr_Qual_Tbl_Type               := G_Miss_Terr_Qual_Tbl,
4428   X_Return_Status               OUT NOCOPY VARCHAR2,
4429   X_Msg_Count                   OUT NOCOPY NUMBER,
4430   X_Msg_Data                    OUT NOCOPY VARCHAR2,
4431   X_Terr_Qual_Out_Tbl           OUT NOCOPY Terr_Qual_Out_Tbl_Type
4432 )
4433 AS
4434   l_api_name                    CONSTANT VARCHAR2(30) := 'Update_Terr_Qualifier (Tbl)';
4435   l_terr_qual_id                NUMBER;
4436   l_return_Status               VARCHAR2(1);
4437   l_Terr_Qual_Tbl_Count         NUMBER                := P_Terr_Qual_Tbl.Count;
4438   l_Terr_Qual_Out_Tbl_Count     NUMBER;
4439   l_Terr_Qual_Out_Tbl           Terr_Qual_Out_Tbl_Type;
4440   l_Terr_Qual_Out_Rec           Terr_Qual_Out_Rec_Type;
4441   l_Counter                     NUMBER;
4442 BEGIN
4443    --dbms_output('Update_Terr_Qualifier TBL: Entering API');
4444 
4445    -- Debug Message
4446    IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
4447    THEN
4448       FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_START_MSG');
4449       FND_MESSAGE.Set_Name('PROC_NAME', l_api_name);
4450       FND_MSG_PUB.Add;
4451    END IF;
4452 
4453    --  Initialize API return status to success
4454    x_return_status := FND_API.G_RET_STS_SUCCESS;
4455    -- Call overloaded Create_Terr_Qualifier procedure
4456    --
4457    FOR l_Counter IN 1 ..  l_Terr_Qual_Tbl_Count LOOP
4458    --
4459        --dbms_output('Update_Terr_Qualifier TBL: Before Calling Create_TerrType_Qualifier TBL');
4460        Update_Terr_Qualifier( P_Api_Version_Number          =>  P_Api_Version_Number,
4461                               P_Init_Msg_List               =>  P_Init_Msg_List,
4462                               P_Commit                      =>  P_Commit,
4463                               p_validation_level            =>  p_validation_level,
4464                               P_Terr_Qual_Rec               =>  P_Terr_Qual_Tbl(l_counter),
4465                               X_Return_Status               =>  l_Return_Status,
4466                               X_Msg_Count                   =>  X_Msg_Count,
4467                               X_Msg_Data                    =>  X_Msg_Data,
4468                               X_Terr_Qual_Out_Rec           =>  l_Terr_Qual_Out_Rec);
4469        --
4470        --If there is a major error
4471        IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4472            --dbms_output('Update_Terr_Qualifier TBL: l_return_status <> FND_API.G_RET_STS_SUCCESS');
4473            -- Save the terr_usg_id and
4474            X_Terr_Qual_Out_Tbl(l_counter).TERR_QUAL_ID  := l_Terr_Qual_Out_Rec.TERR_QUAL_ID;
4475            -- If save the ERROR status for the record
4476            X_Terr_Qual_Out_Tbl(l_counter).return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4477        ELSE
4478            --dbms_output('Update_Terr_Qualifier TBL: l_return_status = FND_API.G_RET_STS_SUCCESS');
4479            -- Save the terr_usg_id and
4480            X_Terr_Qual_Out_Tbl(l_counter).TERR_QUAL_ID := l_Terr_Qual_Out_Rec.TERR_QUAL_ID;
4481            -- If successful then save the success status for the record
4482            X_Terr_Qual_Out_Tbl(l_counter).return_status := FND_API.G_RET_STS_SUCCESS;
4483        END IF;
4484    --
4485    END LOOP;
4486    --Get the API overall return status
4487    -- Initialize API return status to success
4488    x_return_status := FND_API.G_RET_STS_SUCCESS;
4489    --Get number of records in the ouput table
4490    l_Terr_Qual_Out_Tbl_Count  := X_Terr_Qual_Out_Tbl.Count;
4491    l_Terr_Qual_Out_Tbl        := X_Terr_Qual_Out_Tbl;
4492    FOR l_Counter IN 1 ..  l_Terr_Qual_Out_Tbl_Count  LOOP
4493        If l_Terr_Qual_Out_Tbl(l_Counter).return_status = FND_API.G_RET_STS_UNEXP_ERROR OR
4494           l_Terr_Qual_Out_Tbl(l_Counter).return_status = FND_API.G_RET_STS_ERROR
4495        THEN
4496           X_return_status := FND_API.G_RET_STS_ERROR;
4497        END IF;
4498    END LOOP;
4499 
4500    -- Debug Message
4501    IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
4502    THEN
4503       FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_END_MSG');
4504       FND_MESSAGE.Set_Name('PROC_NAME', l_api_name);
4505       FND_MSG_PUB.Add;
4506    END IF;
4507    --dbms_output('Update_Terr_Qualifier TBL: Exiting API');
4508 --
4509 END Update_Terr_Qualifier;
4510 --
4511 --
4512 --   *******************************************************
4513 --    Start of Comments
4514 --   *******************************************************
4515 --   API Name:  Update_Terr_Value
4516 --   Type    :
4517 --   Pre-Req :
4518 --   Parameters:
4519 --     IN       :
4520 --      Required
4521 --      Parameter Name                Data Type                        Default
4522 --      P_Terr_Value_Rec              Terr_Values_Rec_Type             := G_Miss_Terr_Value_Rec
4523 --
4524 --     OUT NOCOPY     :
4525 --      Parameter Name                Data Type
4526 --      X_Return_Status               VARCHAR2
4527 --      X_Terr_Value_Out_Tbl          Terr_Values_Out_Tbl_Type
4528 --
4529 --   Note:
4530 --
4531 --   End of Comments
4532 --
4533 PROCEDURE Update_Terr_Value
4534 ( P_Api_Version_Number          IN  NUMBER,
4535   P_Init_Msg_List               IN  VARCHAR2                         := FND_API.G_FALSE,
4536   P_Commit                      IN  VARCHAR2                         := FND_API.G_FALSE,
4537   p_validation_level            IN  NUMBER                           := FND_API.G_VALID_LEVEL_FULL,
4538   P_Terr_Value_Rec              IN  Terr_Values_Rec_Type             := G_Miss_Terr_Values_Rec,
4539   X_Return_Status               OUT NOCOPY VARCHAR2,
4540   X_Msg_Count                   OUT NOCOPY NUMBER,
4541   X_Msg_Data                    OUT NOCOPY VARCHAR2,
4542   X_Terr_Value_Out_Rec          OUT NOCOPY Terr_Values_Out_Rec_Type
4543 )
4544 AS
4545    Cursor C_GetTerritoryValue(l_TERR_VALUE_ID Number) IS
4546           Select Rowid,
4547                TERR_VALUE_ID,
4548                LAST_UPDATED_BY,
4549                LAST_UPDATE_DATE,
4550                CREATED_BY,
4551                CREATION_DATE,
4552                LAST_UPDATE_LOGIN,
4553                TERR_QUAL_ID,
4554                INCLUDE_FLAG,
4555                COMPARISON_OPERATOR,
4556                LOW_VALUE_CHAR,
4557                HIGH_VALUE_CHAR,
4558                LOW_VALUE_NUMBER,
4559                HIGH_VALUE_NUMBER,
4560                VALUE_SET,
4561                INTEREST_TYPE_ID,
4562                PRIMARY_INTEREST_CODE_ID,
4563                SECONDARY_INTEREST_CODE_ID,
4564                CURRENCY_CODE,
4565                ID_USED_FLAG,
4566                LOW_VALUE_CHAR_ID,
4567                ORG_ID,
4568                CNR_GROUP_ID
4569         From  JTF_TERR_VALUES_ALL
4570         Where TERR_VALUE_ID = l_TERR_VALUE_ID
4571         For   Update NOWAIT;
4572 
4573    Cursor C_GetTerr_qual_id(l_TERR_VALUE_ID Number) IS
4574         Select TERR_QUAL_ID
4575         From  JTF_TERR_VALUES_ALL
4576         Where TERR_VALUE_ID = l_TERR_VALUE_ID ;
4577 
4578       --Local variable declaration
4579       l_api_name                CONSTANT VARCHAR2(30) := 'Update_Terr_Value';
4580       l_rowid                   VARCHAR2(50);
4581       l_api_version_number      CONSTANT NUMBER   := 1.0;
4582       l_return_status           VARCHAR2(1);
4583       l_ref_Terr_Value_Rec      Terr_Values_Rec_type;
4584 BEGIN
4585       --dbms_output('Update_Terr_Value REC: Entering API');
4586 
4587       -- Debug Message
4588       IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
4589       THEN
4590          FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_START_MSG');
4591          FND_MESSAGE.Set_Name('PROC_NAME', l_api_name);
4592          FND_MSG_PUB.Add;
4593       END IF;
4594 
4595       -- Initialize API return status to SUCCESS
4596       x_return_status := FND_API.G_RET_STS_SUCCESS;
4597 
4598       --dbms_output('Update_Terr_Value REC: opening cursor C_GetTerritoryValue');
4599       OPEN C_GetTerr_qual_id( P_Terr_Value_Rec.TERR_VALUE_ID);
4600 
4601       FETCH C_GetTerr_qual_id into
4602             l_ref_Terr_Value_Rec.TERR_QUAL_ID;
4603        --
4604        If ( C_GetTerr_qual_id%NOTFOUND) Then
4605        --
4606            --dbms_output('Update_Terr_Value REC: NO-RCORDS-FOUND');
4607            IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
4608            THEN
4609               FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_UPDT_TARGET');
4610               FND_MESSAGE.Set_Token('TABLE_NAME', 'JTF_TERR_VALUES');
4611               FND_MESSAGE.Set_Token('PK_ID', TO_CHAR(P_Terr_Value_Rec.TERR_VALUE_ID));
4612               FND_MSG_PUB.Add;
4613            END IF;
4614            raise FND_API.G_EXC_ERROR;
4615 
4616        End if;
4617        CLOSE C_GetTerr_qual_id;
4618 
4619              -- Check the validation level
4620       IF ( P_validation_level >= FND_API.G_VALID_LEVEL_FULL)
4621       THEN
4622            -- Debug message
4623            IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
4624            THEN
4625               FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_VALIDATE_MSG');
4626               FND_MESSAGE.Set_Token('PROC_NAME', 'Validate_terr_Value_Rec');
4627               FND_MSG_PUB.Add;
4628            END IF;
4629 
4630            -- Invoke validation procedures
4631            Validate_Terr_Value_Rec(p_init_msg_list    => FND_API.G_FALSE,
4632                                    x_return_status    => x_return_status,
4633                                    x_msg_count        => x_msg_count,
4634                                    x_msg_data         => x_msg_data,
4635                                    p_terr_qual_id     => nvl(P_Terr_Value_Rec.terr_qual_id, l_ref_Terr_Value_Rec.TERR_QUAL_ID),
4636                                    p_Terr_Value_Rec   => P_Terr_Value_Rec);
4637 
4638            IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
4639               RAISE FND_API.G_EXC_ERROR;
4640            END IF;
4641 
4642       END IF;
4643                -- Check for duplicate values
4644                 -- Invoke validation procedures
4645         Check_duplicate_Value_update(p_init_msg_list    => FND_API.G_FALSE,
4646                                 x_return_status    => x_return_status,
4647                                 x_msg_count        => x_msg_count,
4648                                 x_msg_data         => x_msg_data,
4649                                 p_terr_qual_id     => nvl(P_Terr_Value_Rec.terr_qual_id, l_ref_Terr_Value_Rec.TERR_QUAL_ID),
4650                                 p_Terr_Value_Rec   => P_Terr_Value_Rec);
4651 
4652         IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
4653            RAISE FND_API.G_EXC_ERROR;
4654         END IF;
4655        --
4656        -- Add check for concurrency
4657        -- X_TERR_VALUE_ID cant be null
4658       OPEN C_GetTerritoryValue( P_Terr_Value_Rec.TERR_VALUE_ID);
4659 
4660       FETCH C_GetTerritoryValue into
4661             l_Rowid,
4662             l_ref_Terr_Value_Rec.TERR_VALUE_ID,
4663             l_ref_Terr_Value_Rec.LAST_UPDATED_BY,
4664             l_ref_Terr_Value_Rec.LAST_UPDATE_DATE,
4665             l_ref_Terr_Value_Rec.CREATED_BY,
4666             l_ref_Terr_Value_Rec.CREATION_DATE,
4667             l_ref_Terr_Value_Rec.LAST_UPDATE_LOGIN,
4668             l_ref_Terr_Value_Rec.TERR_QUAL_ID,
4669             l_ref_Terr_Value_Rec.INCLUDE_FLAG,
4670             l_ref_Terr_Value_Rec.COMPARISON_OPERATOR,
4671             l_ref_Terr_Value_Rec.LOW_VALUE_CHAR,
4672             l_ref_Terr_Value_Rec.HIGH_VALUE_CHAR,
4673             l_ref_Terr_Value_Rec.LOW_VALUE_NUMBER,
4674             l_ref_Terr_Value_Rec.HIGH_VALUE_NUMBER,
4675             l_ref_Terr_Value_Rec.VALUE_SET,
4676             l_ref_Terr_Value_Rec.INTEREST_TYPE_ID,
4677             l_ref_Terr_Value_Rec.PRIMARY_INTEREST_CODE_ID,
4678             l_ref_Terr_Value_Rec.SECONDARY_INTEREST_CODE_ID,
4679             l_ref_Terr_Value_Rec.CURRENCY_CODE,
4680             l_ref_Terr_Value_Rec.ID_USED_FLAG,
4681             l_ref_Terr_Value_Rec.LOW_VALUE_CHAR_ID,
4682             l_ref_Terr_Value_Rec.ORG_ID,
4683             l_ref_Terr_Value_Rec.CNR_GROUP_ID;
4684        --
4685        If ( C_GetTerritoryValue%NOTFOUND) Then
4686        --
4687            --dbms_output('Update_Terr_Value REC: NO-RCORDS-FOUND');
4688            IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
4689            THEN
4690               FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_UPDT_TARGET');
4691               FND_MESSAGE.Set_Token('TABLE_NAME', 'JTF_TERR_VALUES');
4692               FND_MESSAGE.Set_Token('PK_ID', TO_CHAR(P_Terr_Value_Rec.TERR_VALUE_ID));
4693               FND_MSG_PUB.Add;
4694            END IF;
4695            raise FND_API.G_EXC_ERROR;
4696 
4697        End if;
4698        CLOSE C_GetTerritoryValue;
4699        --dbms_output('Update_Terr_Value REC: Before Calling JTF_TERR_VALUES_PKG.Update_Row');
4700        --call the table handler
4701        JTF_TERR_VALUES_PKG.Update_Row(x_Rowid                       => l_rowid,
4702                                       x_TERR_VALUE_ID               => P_Terr_Value_Rec.TERR_VALUE_ID,
4703                                       x_LAST_UPDATED_BY             => P_Terr_Value_Rec.LAST_UPDATED_BY,
4704                                       x_LAST_UPDATE_DATE            => P_Terr_Value_Rec.LAST_UPDATE_DATE,
4705                                       x_CREATED_BY                  => P_Terr_Value_Rec.created_by,
4706                                       x_CREATION_DATE               => P_Terr_Value_Rec.creation_date,
4707                                       x_LAST_UPDATE_LOGIN           => P_Terr_Value_Rec.LAST_UPDATE_LOGIN,
4708                                        x_TERR_QUAL_ID                => P_Terr_Value_Rec.terr_qual_id,
4709                                       x_INCLUDE_FLAG                => P_Terr_Value_Rec.INCLUDE_FLAG,
4710                                       x_COMPARISON_OPERATOR         => P_Terr_Value_Rec.COMPARISON_OPERATOR,
4711                                       x_LOW_VALUE_CHAR              => P_Terr_Value_Rec.LOW_VALUE_CHAR,
4712                                       x_HIGH_VALUE_CHAR             => P_Terr_Value_Rec.HIGH_VALUE_CHAR,
4713                                       x_LOW_VALUE_NUMBER            => P_Terr_Value_Rec.LOW_VALUE_NUMBER,
4714                                       x_HIGH_VALUE_NUMBER           => P_Terr_Value_Rec.HIGH_VALUE_NUMBER,
4715                                       x_VALUE_SET                   => P_Terr_Value_Rec.VALUE_SET,
4716                                       x_INTEREST_TYPE_ID            => P_Terr_Value_Rec.INTEREST_TYPE_ID,
4717                                       x_PRIMARY_INTEREST_CODE_ID    => P_Terr_Value_Rec.PRIMARY_INTEREST_CODE_ID,
4718                                       x_SECONDARY_INTEREST_CODE_ID  => P_Terr_Value_Rec.SECONDARY_INTEREST_CODE_ID,
4719                                       x_CURRENCY_CODE               => P_Terr_Value_Rec.CURRENCY_CODE,
4720                                       x_ID_USED_FLAG                => P_Terr_Value_Rec.ID_USED_FLAG,
4721                                       x_LOW_VALUE_CHAR_ID           => P_Terr_Value_Rec.LOW_VALUE_CHAR_ID,
4722                                       -- Can't update the ORG_ID  -- VPALLE
4723                                       x_ORG_ID                      => FND_API.G_MISS_NUM,
4724                                       x_CNR_GROUP_ID                => P_Terr_Value_Rec.CNR_GROUP_ID,
4725                                       x_VALUE1_ID                   => p_terr_value_rec.VALUE1_ID,
4726                                       x_VALUE2_ID                   => p_terr_value_rec.VALUE2_ID,
4727                                       x_VALUE3_ID                   => p_terr_value_rec.VALUE3_ID,
4728                                       x_VALUE4_ID                   => p_terr_value_rec.VALUE4_ID );
4729 
4730        X_Terr_Value_Out_Rec.TERR_VALUE_ID         := P_Terr_Value_Rec.TERR_VALUE_ID;
4731        X_Terr_Value_Out_Rec.return_status         := FND_API.G_RET_STS_SUCCESS;
4732 
4733        -- Debug Message
4734        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
4735        THEN
4736           FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_END_MSG');
4737           FND_MESSAGE.Set_Name('PROC_NAME', l_api_name);
4738           FND_MSG_PUB.Add;
4739        END IF;
4740 
4741        --dbms_output('Update_Terr_Value REC: Exiting API');
4742 EXCEPTION
4743      WHEN FND_API.G_EXC_ERROR THEN
4744           --dbms_output('Validate_Territory_Record: FND_API.G_EXC_ERROR');
4745           x_return_status := FND_API.G_RET_STS_ERROR ;
4746           FND_MSG_PUB.Count_And_Get
4747           (  P_count          =>   x_msg_count,
4748              P_data           =>   x_msg_data
4749           );
4750 
4751      WHEN OTHERS THEN
4752           --dbms_output('Update_Terr_Value REC: OTHERS - ' || SQLERRM);
4753           X_return_status                    := FND_API.G_RET_STS_UNEXP_ERROR;
4754           X_Terr_Value_Out_Rec.TERR_VALUE_ID := P_Terr_Value_Rec.TERR_VALUE_ID;
4755           X_Terr_Value_Out_Rec.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4756           IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR )
4757           THEN
4758              FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, 'Update error inside Update_Terr_Value');
4759           END IF;
4760 End Update_Terr_Value;
4761 
4762 --
4763 --    ***************************************************
4764 --    start of comments
4765 --    ***************************************************
4766 --    API name  : Update_Terr_Value
4767 --    Type      : PRIVATE
4768 --    Function  : To create Territories qualifier values
4769 --
4770 --    Pre-reqs  :
4771 --    Parameters:
4772 --     IN       :
4773 --      Required
4774 --      Parameter Name                Data Type                        Default
4775 --      P_Terr_Value_Tbl              Terr_Values_Tbl_Type             := G_Miss_Terr_Value_Tbl
4776 --
4777 --     OUT NOCOPY     :
4778 --      Parameter Name                Data Type
4779 --      X_Return_Status               VARCHAR2(1)
4780 --      X_Terr_Value_Out_Tbl          Terr_Values_Out_Tbl_Type
4781 --
4782 --    Notes:    This is a an overloaded procedure. This one
4783 --              will call the overloade procedure for records
4784 --              creation
4785 --
4786 --
4787 --    End of Comments
4788 --
4789 PROCEDURE Update_Terr_Value
4790 ( P_Api_Version_Number          IN  NUMBER,
4791   P_Init_Msg_List               IN  VARCHAR2                         := FND_API.G_FALSE,
4792   P_Commit                      IN  VARCHAR2                         := FND_API.G_FALSE,
4793   p_validation_level            IN  NUMBER                           := FND_API.G_VALID_LEVEL_FULL,
4794   P_Terr_Value_Tbl              IN  Terr_Values_Tbl_Type             := G_Miss_Terr_Values_Tbl,
4795   X_Return_Status               OUT NOCOPY VARCHAR2,
4796   X_Msg_Count                   OUT NOCOPY NUMBER,
4797   X_Msg_Data                    OUT NOCOPY VARCHAR2,
4798   X_Terr_Value_Out_Tbl          OUT NOCOPY Terr_Values_Out_Tbl_Type
4799 )
4800 AS
4801   l_api_name                    CONSTANT VARCHAR2(30) := 'Update_Terr_Value (Tbl)';
4802   l_return_Status               VARCHAR2(1);
4803   l_Terr_Value_Tbl_Count        NUMBER                          := P_Terr_Value_Tbl.Count;
4804   l_Terr_Value_Out_Tbl_Count    NUMBER;
4805   l_Terr_Value_Out_Tbl          Terr_Values_Out_Tbl_Type;
4806   l_Terr_Value_Out_Rec          Terr_Values_Out_Rec_Type;
4807   l_Terr_Qual_Tbl               Terr_Qual_Tbl_Type;
4808   l_Counter                     NUMBER;
4809 BEGIN
4810    --dbms_output('Update_Terr_Value TBL: Entering API');
4811 
4812    -- Debug Message
4813    IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
4814    THEN
4815       FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_START_MSG');
4816       FND_MESSAGE.Set_Name('PROC_NAME', l_api_name);
4817       FND_MSG_PUB.Add;
4818    END IF;
4819 
4820    --  Initialize API return status to success
4821    x_return_status := FND_API.G_RET_STS_SUCCESS;
4822    -- -- Call overloaded Create_Terr_Qualifier procedure
4823    --
4824    FOR l_Counter IN 1 ..  l_Terr_Value_Tbl_Count LOOP
4825    --
4826        --dbms_output('Update_Terr_Value TBL: Before Calling Update_Terr_Value');
4827        Update_Terr_Value( P_Api_Version_Number          =>  P_Api_Version_Number,
4828                           P_Init_Msg_List               =>  P_Init_Msg_List,
4829                           P_Commit                      =>  P_Commit,
4830                           p_validation_level            =>  p_validation_level,
4831                           P_Terr_Value_Rec              =>  P_Terr_Value_Tbl(l_counter),
4832                           X_Return_Status               =>  l_Return_Status,
4833                           X_Msg_Count                   =>  X_Msg_Count,
4834                           X_Msg_Data                    =>  X_Msg_Data,
4835                           X_Terr_Value_Out_Rec          =>  l_Terr_Value_Out_Rec);
4836        --
4837        --If there is a major error
4838        IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4839            --dbms_output('Update_Terr_Value TBL: l_return_status <> FND_API.G_RET_STS_SUCCESS');
4840            -- Save the terr_usg_id and
4841            X_Terr_Value_Out_Tbl(l_counter).TERR_VALUE_ID := l_Terr_Value_Out_Rec.TERR_VALUE_ID;
4842            -- If save the ERROR status for the record
4843            X_Terr_Value_Out_Tbl(l_counter).return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4844        ELSE
4845            --dbms_output('Update_Terr_Value TBL: l_return_status = FND_API.G_RET_STS_SUCCESS');
4846            -- Save the terr_usg_id and
4847            X_Terr_Value_Out_Tbl(l_counter).TERR_VALUE_ID := l_Terr_Value_Out_Rec.TERR_VALUE_ID;
4848            -- If successful then save the success status for the record
4849            X_Terr_Value_Out_Tbl(l_counter).return_status := FND_API.G_RET_STS_SUCCESS;
4850        END IF;
4851    --
4852    END LOOP;
4853 
4854    --Get the API overall return status
4855    -- Initialize API return status to success
4856    x_return_status := FND_API.G_RET_STS_SUCCESS;
4857 
4858    --Get number of records in the ouput table
4859    l_Terr_Value_Out_Tbl_Count   := X_Terr_Value_Out_Tbl.Count;
4860    l_Terr_Value_Out_Tbl         := X_Terr_Value_Out_Tbl;
4861    FOR l_Counter IN 1 ..  l_Terr_Value_Out_Tbl_Count  LOOP
4862        If l_Terr_Value_Out_Tbl(l_Counter).return_status = FND_API.G_RET_STS_UNEXP_ERROR OR
4863           l_Terr_Value_Out_Tbl(l_Counter).return_status = FND_API.G_RET_STS_ERROR
4864        THEN
4865           X_return_status := FND_API.G_RET_STS_ERROR;
4866        END IF;
4867    END LOOP;
4868 
4869    -- Debug Message
4870    IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
4871    THEN
4872       FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_END_MSG');
4873       FND_MESSAGE.Set_Name('PROC_NAME', l_api_name);
4874       FND_MSG_PUB.Add;
4875    END IF;
4876 
4877 
4878    --dbms_output('Update_Terr_Value TBL: Exiting API');
4879 --
4880 End Update_Terr_Value;
4881 -------------------------------------------------------------------------------------------------------
4882 --                         DELETE PROCEDURE SECTION STARTS HERE
4883 -------------------------------------------------------------------------------------------------------
4884 
4885 --   *******************************************************
4886 --    Start of Comments
4887 --   *******************************************************
4888 --   API Name:  Delete_territory_Record
4889 --   Type    :
4890 --   Pre-Req :
4891 --   Parameters:
4892 --    IN
4893 --     Required:
4894 --     Parameter Name              Data Type          Default
4895 --     P_Terr_Id                   NUMBER
4896 --
4897 --     Optional:
4898 --    OUT:
4899 --     Parameter Name              Data Type          Default
4900 --     X_Return_Status             VARCHAR2
4901 --
4902 --   Note:
4903 --
4904 --   End of Comments
4905 --
4906 PROCEDURE Delete_territory_Record
4907   (P_Api_Version_Number         IN   NUMBER,
4908    P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
4909    P_Commit                     IN   VARCHAR2     := FND_API.G_FALSE,
4910    P_Terr_Id                    IN   NUMBER,
4911    X_Return_Status              OUT NOCOPY  VARCHAR2,
4912    X_Msg_Count                  OUT NOCOPY  VARCHAR2,
4913    X_Msg_Data                   OUT NOCOPY  VARCHAR2)
4914 AS
4915    l_row_count                  NUMBER;
4916    l_api_name                   CONSTANT VARCHAR2(30) := 'Delete_territory_Record';
4917    l_api_version_number         CONSTANT NUMBER   := 1.0;
4918    l_return_status              VARCHAR2(1);
4919 BEGIN
4920    --dbms_output('Delete_territory_Record: Entering API');
4921 
4922    -- Standard start of PAI savepoint
4923    SAVEPOINT  Delete_territory_Record_Pvt;
4924 
4925    -- Standard call to check for call compatibility.
4926    IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
4927                          	           p_api_version_number,
4928                           	           l_api_name,
4929                         	           G_PKG_NAME)
4930    THEN
4931       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4932    END IF;
4933    -- Initialize message list if p_init_msg_list is set to TRUE.
4934    IF FND_API.to_Boolean( p_init_msg_list )
4935    THEN
4936       FND_MSG_PUB.initialize;
4937    END IF;
4938 
4939    -- Debug Message
4940    IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
4941    THEN
4942       FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_START_MSG');
4943       FND_MESSAGE.Set_Name('PROC_NAME', l_api_name);
4944       FND_MSG_PUB.Add;
4945    END IF;
4946 
4947    --Initialize the return status to success
4948    x_return_status := FND_API.G_RET_STS_SUCCESS;
4949    --
4950    --dbms_output('Delete_territory_Record: Before Calling Create_TerrType_Qualifier TBL');
4951    --
4952    JTF_TERR_PKG.Delete_Row(x_terr_Id  => P_Terr_Id);
4953    --
4954       --Prepare message name
4955    FND_MESSAGE.SET_NAME('JTF','JTF_TERR_RECORD_DELETED');
4956 
4957    IF SQL%FOUND THEN
4958       --dbms_output('Delete_territory_Record: # Records deleted -' || to_char(SQL%ROWCOUNT));
4959       x_return_status := FND_API.G_RET_STS_SUCCESS;
4960       l_row_count     := SQL%ROWCOUNT;
4961    END IF;
4962    --prepare the message
4963    FND_MESSAGE.SET_TOKEN('NO_OF_REC', TO_CHAR(l_row_count));
4964    FND_MESSAGE.SET_TOKEN('TABLE_NAME', 'JTF_TERR');
4965    FND_MSG_PUB.ADD;
4966 
4967    -- Debug Message
4968    IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
4969    THEN
4970       FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_END_MSG');
4971       FND_MESSAGE.Set_Name('PROC_NAME', l_api_name);
4972       FND_MSG_PUB.Add;
4973    END IF;
4974 
4975 
4976    FND_MSG_PUB.Count_And_Get
4977    (  p_count          =>   x_msg_count,
4978       p_data           =>   x_msg_data
4979    );
4980 
4981    -- Standard check for p_commit
4982    IF FND_API.to_Boolean( p_commit )
4983    THEN
4984       COMMIT WORK;
4985    END IF;
4986    --dbms_output('Delete_territory_Record: Exiting API');
4987 --
4988 EXCEPTION
4989      WHEN NO_DATA_FOUND THEN
4990           X_return_status                    := FND_API.G_RET_STS_UNEXP_ERROR;
4991           l_row_count                        := 0;
4992           --Prepare message token
4993           FND_MESSAGE.SET_TOKEN('NO_OF_REC', TO_CHAR(l_row_count));
4994           FND_MESSAGE.SET_TOKEN('TABLE_NAME', 'JTF_TERR');
4995           FND_MSG_PUB.ADD;
4996           --
4997           FND_MSG_PUB.Count_And_Get
4998           (  p_count          =>   x_msg_count,
4999              p_data           =>   x_msg_data
5000           );
5001 
5002      WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5003           --dbms_output('Delete_territory_Record: FND_API.G_EXC_UNEXPECTED_ERROR');
5004           ROLLBACK TO  Delete_territory_Record_Pvt;
5005           X_return_status                    := FND_API.G_RET_STS_UNEXP_ERROR;
5006           FND_MSG_PUB.Count_And_Get
5007           (  p_count          =>   x_msg_count,
5008              p_data           =>   x_msg_data
5009           );
5010 
5011      WHEN OTHERS THEN
5012           --dbms_output('Delete_territory_Record: OTHERS - ' || SQLERRM);
5013           X_return_status                    := FND_API.G_RET_STS_UNEXP_ERROR;
5014           IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR )
5015           THEN
5016              FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, 'Delete error inside Delete_territory_Record');
5017           END IF;
5018 --
5019 END  Delete_territory_Record;
5020 --
5021 --   *******************************************************
5022 --    Start of Comments
5023 --   *******************************************************
5024 --   API Name:  Delete_Territory_Usages
5025 --   Type    :
5026 --   Pre-Req :
5027 --   Parameters:
5028 --    IN
5029 --     Required:
5030 --     Parameter Name              Data Type          Default
5031 --     P_Terr_Id                   NUMBER
5032 --
5033 --     Optional:
5034 --    OUT:
5035 --     Parameter Name              Data Type          Default
5036 --     X_Return_Status             VARCHAR2
5037 --
5038 --   Note:
5039 --
5040 --   End of Comments
5041 --
5042 PROCEDURE Delete_Territory_Usages
5043   (P_Api_Version_Number         IN   NUMBER,
5044    P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
5045    P_Commit                     IN   VARCHAR2     := FND_API.G_FALSE,
5046    P_Terr_usg_Id                IN   NUMBER,
5047    X_Return_Status              OUT NOCOPY  VARCHAR2,
5048    X_Msg_Count                  OUT NOCOPY  VARCHAR2,
5049    X_Msg_Data                   OUT NOCOPY  VARCHAR2)
5050 AS
5051    l_row_count                  NUMBER;
5052    l_api_name                   CONSTANT VARCHAR2(30) := 'Delete_Territory_Usages';
5053    l_api_version_number         CONSTANT NUMBER   := 1.0;
5054    l_return_status              VARCHAR2(1);
5055 BEGIN
5056    --dbms_output('Delete_Territory_Usages: Entering API');
5057 
5058    -- Standard start of PAI savepoint
5059    SAVEPOINT  Delete_Territory_Usages_Pvt;
5060 
5061    -- Standard call to check for call compatibility.
5062    IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
5063                          	           p_api_version_number,
5064                           	           l_api_name,
5065                         	           G_PKG_NAME)
5066    THEN
5067       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5068    END IF;
5069    -- Initialize message list if p_init_msg_list is set to TRUE.
5070    IF FND_API.to_Boolean( p_init_msg_list )
5071    THEN
5072       FND_MSG_PUB.initialize;
5073    END IF;
5074 
5075    -- Debug Message
5076    IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
5077    THEN
5078       FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_START_MSG');
5079       FND_MESSAGE.Set_Name('PROC_NAME', l_api_name);
5080       FND_MSG_PUB.Add;
5081    END IF;
5082 
5083    --Initialize the return status to success
5084    x_return_status := FND_API.G_RET_STS_SUCCESS;
5085    --
5086    --dbms_output('Delete_Territory_Usages: Before Calling Create_TerrType_Qualifier TBL');
5087    --
5088    JTF_TERR_USGS_PKG.Delete_Row(x_TERR_USG_ID  =>   P_Terr_usg_Id);
5089    --
5090    --Prepare message name
5091    FND_MESSAGE.SET_NAME('JTF','JTF_TERR_RECORD_DELETED');
5092    IF SQL%FOUND THEN
5093       --dbms_output('Delete_Territory_Usages: # Records deleted -' || to_char(SQL%ROWCOUNT));
5094       x_return_status := FND_API.G_RET_STS_SUCCESS;
5095       l_row_count     := SQL%ROWCOUNT;
5096    END IF;
5097    --Prepare message token
5098    FND_MESSAGE.SET_TOKEN('NO_OF_REC', TO_CHAR(l_row_count));
5099    FND_MESSAGE.SET_TOKEN('TABLE_NAME', 'JTF_TERR_USGS');
5100    FND_MSG_PUB.ADD;
5101 
5102       -- Debug Message
5103    IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
5104    THEN
5105       FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_END_MSG');
5106       FND_MESSAGE.Set_Name('PROC_NAME', l_api_name);
5107       FND_MSG_PUB.Add;
5108    END IF;
5109 
5110 
5111    FND_MSG_PUB.Count_And_Get
5112    (  p_count          =>   x_msg_count,
5113       p_data           =>   x_msg_data
5114    );
5115 
5116    -- Standard check for p_commit
5117    IF FND_API.to_Boolean( p_commit )
5118    THEN
5119       COMMIT WORK;
5120    END IF;
5121    --dbms_output('Delete_Territory_Usages: Exiting API');
5122 --
5123 EXCEPTION
5124      WHEN NO_DATA_FOUND THEN
5125           X_return_status                    := FND_API.G_RET_STS_UNEXP_ERROR;
5126           l_row_count                        := 0;
5127           --Prepare message token
5128           FND_MESSAGE.SET_TOKEN('NO_OF_REC', TO_CHAR(l_row_count));
5129           FND_MESSAGE.SET_TOKEN('TABLE_NAME', 'JTF_TERR_USGS');
5130           FND_MSG_PUB.ADD;
5131           --
5132           FND_MSG_PUB.Count_And_Get
5133           (  p_count          =>   x_msg_count,
5134              p_data           =>   x_msg_data
5135           );
5136 
5137      WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5138           --dbms_output('Delete_Territory_Usages: FND_API.G_EXC_UNEXPECTED_ERROR');
5139           ROLLBACK TO  Delete_Territory_Usages_Pvt;
5140           X_return_status                    := FND_API.G_RET_STS_UNEXP_ERROR;
5141           FND_MSG_PUB.Count_And_Get
5142           (  p_count          =>   x_msg_count,
5143              p_data           =>   x_msg_data
5144           );
5145 
5146      WHEN OTHERS THEN
5147           --dbms_output('Delete_Territory_Usages: OTHERS - ' || SQLERRM);
5148           X_return_status                    := FND_API.G_RET_STS_UNEXP_ERROR;
5149           IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR )
5150           THEN
5151              FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, 'Delete error inside Delete_Territory_Usages');
5152           END IF;
5153 END Delete_Territory_Usages;
5154 --
5155 --   *******************************************************
5156 --    Start of Comments
5157 --   *******************************************************
5158 --   API Name:  Delete_Terr_QualType_Usage
5159 --   Type    :
5160 --   Pre-Req :
5161 --   Parameters
5162 --    IN
5163 --     Required:
5164 --     Parameter Name              Data Type          Default
5165 --     P_Terr_Qual_Type_Usg_Id     NUMBER
5166 --
5167 --     Optional:
5168 --    OUT:
5169 --     Parameter Name              Data Type          Default
5170 --     X_Return_Status             VARCHAR2
5171 --
5172 --   Note:
5173 --
5174 --   End of Comments
5175 --
5176 PROCEDURE Delete_Terr_QualType_Usage
5177   (P_Api_Version_Number         IN   NUMBER,
5178    P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
5179    P_Commit                     IN   VARCHAR2     := FND_API.G_FALSE,
5180    P_Terr_Qual_Type_Usg_Id      IN   NUMBER,
5181    X_Return_Status              OUT NOCOPY  VARCHAR2,
5182    X_Msg_Count                  OUT NOCOPY  VARCHAR2,
5183    X_Msg_Data                   OUT NOCOPY  VARCHAR2)
5184 AS
5185    l_row_count                  NUMBER;
5186    l_api_name                   CONSTANT VARCHAR2(30) := 'Delete_Terr_QualType_Usage';
5187    l_api_version_number         CONSTANT NUMBER   := 1.0;
5188    l_return_status              VARCHAR2(1);
5189 
5190 BEGIN
5191    --dbms_output('Delete_Terr_QualType_Usage: Entering API');
5192 
5193    -- Standard start of PAI savepoint
5194    SAVEPOINT  Delete_Terr_QualType_Usage_Pvt;
5195 
5196    -- Standard call to check for call compatibility.
5197    IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
5198                          	           p_api_version_number,
5199                           	           l_api_name,
5200                         	           G_PKG_NAME)
5201    THEN
5202       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5203    END IF;
5204    -- Initialize message list if p_init_msg_list is set to TRUE.
5205    IF FND_API.to_Boolean( p_init_msg_list )
5206    THEN
5207       FND_MSG_PUB.initialize;
5208    END IF;
5209 
5210    -- Debug Message
5211    IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
5212    THEN
5213       FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_START_MSG');
5214       FND_MESSAGE.Set_Name('PROC_NAME', l_api_name);
5215       FND_MSG_PUB.Add;
5216    END IF;
5217 
5218    --Initialize the return status to success
5219    x_return_status := FND_API.G_RET_STS_SUCCESS;
5220 
5221    --dbms_output('Delete_Terr_QualType_Usage: Before Calling JTF_TERR_QTYPE_USGS_PKG.Delete_Row');
5222    --
5223    JTF_TERR_QTYPE_USGS_PKG.Delete_Row(x_terr_qtype_usg_id =>  P_Terr_Qual_Type_Usg_Id);
5224    --
5225    --
5226    --Prepare message name
5227    FND_MESSAGE.SET_NAME('JTF','JTF_TERR_RECORD_DELETED');
5228 
5229    IF SQL%FOUND THEN
5230       --dbms_output('Delete_Terr_QualType_Usage: # Records deleted -' || to_char(SQL%ROWCOUNT));
5231       x_return_status := FND_API.G_RET_STS_SUCCESS;
5232       l_row_count     := SQL%ROWCOUNT;
5233    END IF;
5234 
5235    --Prepare message token
5236    FND_MESSAGE.SET_TOKEN('NO_OF_REC', TO_CHAR(l_row_count));
5237    FND_MESSAGE.SET_TOKEN('TABLE_NAME', 'JTF_TERR_QTYPE_USGS');
5238    FND_MSG_PUB.ADD;
5239 
5240    -- Debug Message
5241    IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
5242    THEN
5243       FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_END_MSG');
5244       FND_MESSAGE.Set_Name('PROC_NAME', l_api_name);
5245       FND_MSG_PUB.Add;
5246    END IF;
5247 
5248 
5249    FND_MSG_PUB.Count_And_Get
5250    (  p_count          =>   x_msg_count,
5251       p_data           =>   x_msg_data
5252    );
5253 
5254    -- Standard check for p_commit
5255    IF FND_API.to_Boolean( p_commit )
5256    THEN
5257       COMMIT WORK;
5258    END IF;
5259    --dbms_output('Delete_Terr_QualType_Usage: Exiting API');
5260 --
5261 EXCEPTION
5262      WHEN NO_DATA_FOUND THEN
5263           --dbms_output('Delete_Terr_QualType_Usage: NO_DATA_FOUND');
5264           X_return_status                    := FND_API.G_RET_STS_UNEXP_ERROR;
5265           l_row_count                        := 0;
5266 
5267           --Prepare message token
5268           FND_MESSAGE.SET_TOKEN('NO_OF_REC', TO_CHAR(l_row_count));
5269           FND_MESSAGE.SET_TOKEN('TABLE_NAME', 'JTF_TERR_QTYPE_USGS');
5270           FND_MSG_PUB.ADD;
5271           --
5272           FND_MSG_PUB.Count_And_Get
5273           (  p_count          =>   x_msg_count,
5274              p_data           =>   x_msg_data
5275           );
5276 
5277      WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5278           --dbms_output('Delete_Terr_QualType_Usage: FND_API.G_EXC_UNEXPECTED_ERROR');
5279           ROLLBACK TO  Delete_Terr_QualType_Usage_Pvt;
5280           X_return_status                    := FND_API.G_RET_STS_UNEXP_ERROR;
5281           FND_MSG_PUB.Count_And_Get
5282           (  p_count          =>   x_msg_count,
5283              p_data           =>   x_msg_data
5284           );
5285 
5286      WHEN OTHERS THEN
5287           --dbms_output('Delete_Terr_QualType_Usage: OTHERS - ' || SQLERRM);
5288           X_return_status                    := FND_API.G_RET_STS_UNEXP_ERROR;
5289 
5290           IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR )
5291           THEN
5292              FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, 'Delete error inside Delete_Terr_QualType_Usage');
5293           END IF;
5294 END Delete_Terr_QualType_Usage;
5295 --
5296 --   *******************************************************
5297 --    Start of Comments
5298 --   *******************************************************
5299 --   API Name:  Delete_Terr_Qualifier
5300 --   Type    :
5301 --   Pre-Req :
5302 --   Parameters:
5303 --    IN
5304 --     Required:
5305 --     Parameter Name              Data Type          Default
5306 --     P_Terr_Qual_Id              NUMBER
5307 --
5308 --     Optional:
5309 --    OUT:
5310 --     Parameter Name              Data Type          Default
5311 --     X_Return_Status             VARCHAR2
5312 --
5313 --   Note:
5314 --
5315 --   End of Comments
5316 --
5317 PROCEDURE  Delete_Terr_Qualifier
5318   (P_Api_Version_Number         IN   NUMBER,
5319    P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
5320    P_Commit                     IN   VARCHAR2     := FND_API.G_FALSE,
5321    P_Terr_Qual_Id               IN   NUMBER,
5322    X_Return_Status              OUT NOCOPY  VARCHAR2,
5323    X_Msg_Count                  OUT NOCOPY  VARCHAR2,
5324    X_Msg_Data                   OUT NOCOPY  VARCHAR2)
5325 AS
5326    l_row_count                  NUMBER;
5327    l_api_name                   CONSTANT VARCHAR2(30) := 'Delete_Terr_Qualifier';
5328    l_api_version_number         CONSTANT NUMBER   := 1.0;
5329    l_return_status              VARCHAR2(1);
5330 
5331 
5332    /* for BULK deletes */
5333    TYPE NumTab                  IS TABLE OF NUMBER;
5334    deletedIds                   NUMTAB;
5335 
5336    lp_terr_id                   NUMBER;
5337 
5338 BEGIN
5339    --dbms_output('Delete_Terr_Qualifier: Entering API');
5340 
5341    -- Standard start of PAI savepoint
5342    SAVEPOINT  Delete_Terr_Qualifier_Pvt;
5343 
5344    -- Standard call to check for call compatibility.
5345    IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
5346                          	           p_api_version_number,
5347                           	           l_api_name,
5348                         	           G_PKG_NAME)
5349    THEN
5350       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5351    END IF;
5352    -- Initialize message list if p_init_msg_list is set to TRUE.
5353    IF FND_API.to_Boolean( p_init_msg_list )
5354    THEN
5355       FND_MSG_PUB.initialize;
5356    END IF;
5357 
5358    -- Debug Message
5359    IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
5360    THEN
5361       FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_START_MSG');
5362       FND_MESSAGE.Set_Name('PROC_NAME', l_api_name);
5363       FND_MSG_PUB.Add;
5364    END IF;
5365 
5366    --Initialize the return status to success
5367    x_return_status := FND_API.G_RET_STS_SUCCESS;
5368    --
5369    --dbms_output('Delete_Terr_Qualifier: Before Calling Create_TerrType_Qualifier TBL');
5370    --
5371 
5372    /* anonymous block to get territory id */
5373    BEGIN
5374      SELECT terr_id
5375        INTO lp_terr_id
5376      FROM jtf_terr_qual_ALL jtq
5377      WHERE jtq.terr_qual_id = p_terr_qual_id;
5378    EXCEPTION
5379      WHEN NO_DATA_FOUND THEN
5380         NULL;
5381      WHEN OTHERS THEN
5382         NULL;
5383    END;
5384 
5385    /* Do a bulk delete of Territory Qualifier VALUES */
5386    DELETE jtf_terr_values_ALL
5387    WHERE terr_qual_id = p_terr_qual_id
5388    RETURNING terr_value_id
5389    BULK COLLECT INTO deletedIds;
5390 
5391    JTF_TERR_QUAL_PKG.Delete_Row(x_terr_qual_id  => P_Terr_Qual_Id );
5392       --
5393    --Prepare message name
5394    FND_MESSAGE.SET_NAME('JTF','JTF_TERR_RECORD_DELETED');
5395    IF SQL%FOUND THEN
5396        --dbms_output('Delete_Terr_Qualifier: # Records deleted -' || to_char(SQL%ROWCOUNT));
5397       x_return_status := FND_API.G_RET_STS_SUCCESS;
5398       l_row_count     := SQL%ROWCOUNT;
5399    END IF;
5400 
5401    /* update Sales territory's number of Account qualifiers
5402    */
5403    -- update_terr_num_qual(lp_terr_id, -1002);
5404 
5405    --Prepare message token
5406    FND_MESSAGE.SET_TOKEN('NO_OF_REC', TO_CHAR(l_row_count));
5407    FND_MESSAGE.SET_TOKEN('TABLE_NAME', 'JTF_TERR_QUALIFIERS');
5408    FND_MSG_PUB.ADD();
5409 
5410    -- Debug Message
5411    IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
5412    THEN
5413       FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_END_MSG');
5414       FND_MESSAGE.Set_Name('PROC_NAME', l_api_name);
5415       FND_MSG_PUB.Add;
5416    END IF;
5417 
5418 
5419    FND_MSG_PUB.Count_And_Get
5420    (  p_count          =>   x_msg_count,
5421       p_data           =>   x_msg_data
5422    );
5423 
5424    -- Standard check for p_commit
5425    IF FND_API.to_Boolean( p_commit )
5426    THEN
5427       COMMIT WORK;
5428    END IF;
5429    --
5430    --dbms_output('Delete_Terr_Qualifier: Exiting API');
5431    --
5432 EXCEPTION
5433      WHEN NO_DATA_FOUND THEN
5434           X_return_status                    := FND_API.G_RET_STS_UNEXP_ERROR;
5435           l_row_count                        := 0;
5436           --Prepare message token
5437           FND_MESSAGE.SET_TOKEN('NO_OF_REC', TO_CHAR(l_row_count));
5438           FND_MESSAGE.SET_TOKEN('TABLE_NAME', 'JTF_TERR_QUALIFIERS');
5439           --Add message to API message list
5440           FND_MSG_PUB.ADD();
5441           --
5442           FND_MSG_PUB.Count_And_Get
5443           (  p_count          =>   x_msg_count,
5444              p_data           =>   x_msg_data
5445           );
5446 
5447      WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5448           --dbms_output('Delete_Terr_Qualifier: FND_API.G_EXC_UNEXPECTED_ERROR');
5449           ROLLBACK TO  Delete_Terr_Qualifier_Pvt;
5450           X_return_status                    := FND_API.G_RET_STS_UNEXP_ERROR;
5451           FND_MSG_PUB.Count_And_Get
5452           (  p_count          =>   x_msg_count,
5453              p_data           =>   x_msg_data
5454           );
5455 
5456      WHEN OTHERS THEN
5457           --dbms_output('Delete_Terr_Qualifier: OTHERS - ' || SQLERRM);
5458           X_return_status                    := FND_API.G_RET_STS_UNEXP_ERROR;
5459           IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR )
5460           THEN
5461              FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, 'Delete error inside Delete_Terr_Qualifier');
5462           END IF;
5463 END Delete_Terr_Qualifier;
5464 --
5465 --   *******************************************************
5466 --    Start of Comments
5467 --   *******************************************************
5468 --   API Name:  Delete_Terr_Value
5469 --   Type    :
5470 --   Pre-Req :
5471 --   Parameters:
5472 --    IN
5473 --     Required:
5474 --     Parameter Name              Data Type          Default
5475 --     P_Terr_Value_Id             NUMBER
5476 --
5477 --     Optional:
5478 --    OUT:
5479 --     Parameter Name              Data Type          Default
5480 --     X_Return_Status             VARCHAR2
5481 --
5482 --   Note:
5483 --
5484 --   End of Comments
5485 --
5486 PROCEDURE Delete_Terr_Value
5487   (P_Api_Version_Number         IN   NUMBER,
5488    P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
5489    P_Commit                     IN   VARCHAR2     := FND_API.G_FALSE,
5490    P_Terr_Value_Id              IN   NUMBER,
5491    X_Return_Status              OUT NOCOPY  VARCHAR2,
5492    X_Msg_Count                  OUT NOCOPY  VARCHAR2,
5493    X_Msg_Data                   OUT NOCOPY  VARCHAR2)
5494 AS
5495    l_row_count                  NUMBER;
5496    l_api_name                   CONSTANT VARCHAR2(30) := 'Delete_Terr_Value';
5497    l_api_version_number         CONSTANT NUMBER   := 1.0;
5498    l_return_status              VARCHAR2(1);
5499 BEGIN
5500    --dbms_output('Delete_Terr_Value: Entering API');
5501 
5502    -- Standard start of PAI savepoint
5503    SAVEPOINT  Delete_Terr_Value_Pvt;
5504 
5505    -- Standard call to check for call compatibility.
5506    IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
5507                          	           p_api_version_number,
5508                           	           l_api_name,
5509                         	           G_PKG_NAME)
5510    THEN
5511       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5512    END IF;
5513    -- Initialize message list if p_init_msg_list is set to TRUE.
5514    IF FND_API.to_Boolean( p_init_msg_list )
5515    THEN
5516       FND_MSG_PUB.initialize;
5517    END IF;
5518 
5519    -- Debug Message
5520    IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
5521    THEN
5522       FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_START_MSG');
5523       FND_MESSAGE.Set_Name('PROC_NAME', l_api_name);
5524       FND_MSG_PUB.Add;
5525    END IF;
5526 
5527    --Initialize the return status to success
5528    x_return_status := FND_API.G_RET_STS_SUCCESS;
5529    --
5530 
5531    JTF_TERR_VALUES_PKG.Delete_Row(X_TERR_VALUE_ID   => P_Terr_Value_Id);
5532    --
5533    --Prepare message name
5534    FND_MESSAGE.SET_NAME('JTF','JTF_TERR_RECORD_DELETED');
5535    IF SQL%FOUND THEN
5536       --dbms_output('Delete_Terr_Value: # Records deleted -' || to_char(SQL%ROWCOUNT));
5537       x_return_status := FND_API.G_RET_STS_SUCCESS;
5538       l_row_count     := SQL%ROWCOUNT;
5539    END IF;
5540    --Prepare message token
5541    FND_MESSAGE.SET_TOKEN('NO_OF_REC', TO_CHAR(l_row_count));
5542    FND_MESSAGE.SET_TOKEN('TABLE_NAME', 'JTF_TERR_VALUES');
5543    FND_MSG_PUB.ADD();
5544 
5545       -- Debug Message
5546    IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
5547    THEN
5548       FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_END_MSG');
5549       FND_MESSAGE.Set_Token('PROC_NAME', l_api_name );
5550       FND_MSG_PUB.Add;
5551    END IF;
5552 
5553 
5554    FND_MSG_PUB.Count_And_Get
5555    (  p_count          =>   x_msg_count,
5556       p_data           =>   x_msg_data
5557    );
5558 
5559    -- Standard check for p_commit
5560    IF FND_API.to_Boolean( p_commit )
5561    THEN
5562       COMMIT WORK;
5563    END IF;
5564    --
5565    --dbms_output('Delete_Terr_Value: Exiting API');
5566    --
5567 EXCEPTION
5568      WHEN NO_DATA_FOUND THEN
5569           --dbms_output('Delete_Terr_Value: NO-DATA-FOUND');
5570           X_return_status                    := FND_API.G_RET_STS_UNEXP_ERROR;
5571           l_row_count                        := 0;
5572           --Prepare message token
5573           FND_MESSAGE.SET_TOKEN('NO_OF_REC', TO_CHAR(l_row_count));
5574           FND_MESSAGE.SET_TOKEN('TABLE_NAME', 'JTF_TERR_VALUES');
5575           --Add message to API message list
5576           FND_MSG_PUB.ADD();
5577           --
5578           FND_MSG_PUB.Count_And_Get
5579           (  p_count          =>   x_msg_count,
5580              p_data           =>   x_msg_data
5581           );
5582 
5583      WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5584           --dbms_output('Delete_Terr_Value: FND_API.G_EXC_UNEXPECTED_ERROR');
5585           ROLLBACK TO  Delete_Terr_Value_Pvt;
5586           X_return_status                    := FND_API.G_RET_STS_UNEXP_ERROR;
5587           FND_MSG_PUB.Count_And_Get
5588           (  p_count          =>   x_msg_count,
5589              p_data           =>   x_msg_data
5590           );
5591 
5592      WHEN OTHERS THEN
5593           --dbms_output('Delete_Terr_Value: OTHERS - ' || SQLERRM);
5594           X_return_status                    := FND_API.G_RET_STS_UNEXP_ERROR;
5595           IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR )
5596           THEN
5597              FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, 'Delete error inside Delete_Terr_Value');
5598           END IF;
5599   End Delete_Terr_Value;
5600   --
5601   -- This procedure will check whether the qualifiers passed are
5602   -- valid.
5603   --
5604   PROCEDURE Validate_Qualifier
5605   (p_Terr_Id                     IN  NUMBER,
5606    P_Terr_Qual_Rec               IN  Terr_Qual_Rec_Type     := G_Miss_Terr_Qual_Rec,
5607    p_init_msg_list               IN  VARCHAR2               := FND_API.G_FALSE,
5608    x_Return_Status               OUT NOCOPY VARCHAR2,
5609    x_msg_count                   OUT NOCOPY NUMBER,
5610    x_msg_data                    OUT NOCOPY VARCHAR2 )
5611   AS
5612     l_Temp        VARCHAR2(01);
5613     l_qual_count  NUMBER;
5614   BEGIN
5615     --dbms_output('Validate_Qualifier: Entering API');
5616 
5617     -- Initialize the status to success
5618     x_return_status := FND_API.G_RET_STS_SUCCESS;
5619     --
5620     --dbms_output('Validate P_Terr_Qual_Rec.Qual_Usg_Id - ' || to_char(P_Terr_Qual_Rec.Qual_Usg_Id));
5621     --
5622     if (P_Terr_Qual_Rec.Qual_Usg_Id IS NULL) OR
5623        (P_Terr_Qual_Rec.Qual_Usg_Id = FND_API.G_MISS_NUM ) THEN
5624        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5625           FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_COL_VALUE');
5626           FND_MESSAGE.Set_Token('COL_NAME', 'QUAL_USG_ID' );
5627           FND_MSG_PUB.ADD;
5628        END IF;
5629        x_Return_Status := FND_API.G_RET_STS_ERROR ;
5630     END IF;
5631 
5632     --
5633 
5634     -- Check whether the qualfier is enabled or not.
5635     BEGIN
5636        IF ( p_Terr_Id IS NOT NULL ) AND
5637           ( P_Terr_Qual_Rec.Qual_Usg_Id IS NOT NULL ) Then
5638          /*  SELECT  'x'
5639             into  l_Temp
5640             from  jtf_qual_usgs_ALL jqu,
5641                   jtf_qual_type_usgs_ALL jqtu,
5642                   jtf_terr_qtype_usgs_ALL jtqu
5643            where  jtqu.terr_id = p_Terr_Id and
5644                   jqtu.qual_type_usg_id = jtqu.qual_type_usg_id and
5645                   jqu.qual_usg_id = P_Terr_Qual_Rec.Qual_Usg_Id and
5646                   jqu.enabled_flag = 'Y' and
5647                   jqtu.qual_type_id IN ( SELECT related_id
5648                                            FROM jtf_qual_type_denorm_v
5649                                           WHERE qual_type_id = jqtu.qual_type_id )
5650                   AND ROWNUM < 2; */
5651 
5652              SELECT 'x'
5653              INTO  l_Temp
5654              FROM  jtf_terr_all jta,
5655                    jtf_terr_type_qual_all jtqa,
5656                    jtf_qual_usgs_all jqua
5657              WHERE jta.terr_id = p_Terr_Id
5658                AND jta.territory_type_id = jtqa.terr_type_id
5659                AND jtqa.qual_usg_id = jqua.qual_usg_id
5660                AND jqua.org_id = jtqa.org_id
5661                AND jqua.enabled_flag = 'Y'
5662                AND jqua.qual_usg_id = P_Terr_Qual_Rec.Qual_Usg_Id
5663                AND ROWNUM < 2;
5664         END IF;
5665     EXCEPTION
5666        WHEN NO_DATA_FOUND THEN
5667             --dbms_output('Validate_Qualifier: NO_DATA_FOUND Exception');
5668             x_return_status := FND_API.G_RET_STS_ERROR ;
5669             FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_DISABLED_TERR_QUAL');
5670             FND_MSG_PUB.ADD;
5671             FND_MSG_PUB.Count_And_Get
5672             (  P_count          =>   x_msg_count,
5673                P_data           =>   x_msg_data
5674             );
5675     END;
5676 
5677     -- Check for duplicate qualifiers.
5678     IF ( p_Terr_Id IS NOT NULL ) AND
5679        ( P_Terr_Qual_Rec.Qual_Usg_Id IS NOT NULL ) Then
5680 
5681         SELECT COUNT(*) INTO l_qual_count
5682         FROM JTF_TERR_QUAL_ALL
5683         WHERE TERR_ID = p_Terr_Id
5684         AND QUAL_USG_ID = P_Terr_Qual_Rec.Qual_Usg_Id ;
5685 
5686         IF ( l_qual_count IS NOT NULL ) AND
5687            ( l_qual_count > 0 ) THEN
5688             IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5689                 FND_MESSAGE.Set_Name('JTF', 'JTY_DUPLICATE_QUALIFIER');
5690                 FND_MSG_PUB.ADD;
5691             END IF;
5692             x_Return_Status := FND_API.G_RET_STS_ERROR ;
5693         END IF;
5694     END IF ;
5695 
5696     /* --  Check for ORG_ID - obsolete: org_id is optional
5697     IF (P_Terr_Qual_Rec.ORG_ID is NULL OR
5698         P_Terr_Qual_Rec.ORG_ID = FND_API.G_MISS_NUM ) THEN
5699        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5700           FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_COL_VALUE');
5701           FND_MESSAGE.Set_Token('COL_NAME', 'ORG_ID' );
5702           FND_MSG_PUB.ADD;
5703        END IF;
5704        x_Return_Status := FND_API.G_RET_STS_ERROR ;
5705     End If;
5706     */
5707 
5708     -- Validate last updated by
5709     IF  ( P_Terr_Qual_Rec.LAST_UPDATED_BY is NULL OR
5710           P_Terr_Qual_Rec.LAST_UPDATED_BY = FND_API.G_MISS_NUM) Then
5711         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5712           FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_COL_VALUE');
5713           FND_MESSAGE.Set_Token('COL_NAME', 'LAST_UPDATED_BY' );
5714           FND_MSG_PUB.ADD;
5715        END IF;
5716        x_Return_Status := FND_API.G_RET_STS_ERROR ;
5717     End If;
5718 
5719     -- Check last update date
5720     If ( P_Terr_Qual_Rec.LAST_UPDATE_DATE IS NULL OR
5721          P_Terr_Qual_Rec.LAST_UPDATE_DATE = FND_API.G_MISS_DATE ) THEN
5722        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5723           FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_COL_VALUE');
5724           FND_MESSAGE.Set_Token('COL_NAME', 'LAST_UPDATE_DATE' );
5725           FND_MSG_PUB.ADD;
5726        END IF;
5727        x_Return_Status := FND_API.G_RET_STS_ERROR ;
5728     End If;
5729 
5730     --
5731     --Check last update login
5732     If ( P_Terr_Qual_Rec.LAST_UPDATE_LOGIN  is NULL OR
5733          P_Terr_Qual_Rec.LAST_UPDATE_LOGIN  = FND_API.G_MISS_NUM )  THEN
5734        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5735           FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_COL_VALUE');
5736           FND_MESSAGE.Set_Token('COL_NAME', 'LAST_UPDATE_LOGIN' );
5737           FND_MSG_PUB.ADD;
5738        END IF;
5739        x_Return_Status := FND_API.G_RET_STS_ERROR ;
5740     End If;
5741     --
5742 
5743     --
5744     FND_MSG_PUB.Count_And_Get( p_count => x_msg_count,
5745                                p_data  => x_msg_data);
5746 
5747     --dbms_output('Validate_Qualifier: Exiting API');
5748   EXCEPTION
5749   --
5750     WHEN NO_DATA_FOUND THEN
5751          --dbms_output('Validate_Qualifier: NO_DATA_FOUND Exception');
5752          x_return_status := FND_API.G_RET_STS_ERROR ;
5753          FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_DISABLED_TERR_QUAL');
5754          FND_MSG_PUB.ADD;
5755          FND_MSG_PUB.Count_And_Get
5756          (  P_count          =>   x_msg_count,
5757             P_data           =>   x_msg_data
5758          );
5759 
5760     WHEN OTHERS THEN
5761          --dbms_output('Validate_Qualifier: Others Exception');
5762          X_return_status      := FND_API.G_RET_STS_UNEXP_ERROR;
5763          FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_UNEXPECTED_ERROR');
5764          FND_MESSAGE.Set_Token('PROC_NAME', 'Validate_Qualifer' );
5765          FND_MESSAGE.Set_Token('ERROR', sqlerrm );
5766          FND_MSG_PUB.ADD;
5767          FND_MSG_PUB.Count_And_Get
5768          (  P_count          =>   x_msg_count,
5769             P_data           =>   x_msg_data
5770          );
5771   --
5772   END Validate_Qualifier;
5773 
5774   -- Validate the Territory RECORD
5775   -- Validate Territory Name is specified and also check for not null columns
5776   -- If Parent Territory_id, ESCALATION_TERRITORY_ID, territory_type_id is specified
5777   PROCEDURE Validate_Territory_Record
5778     (p_init_msg_list               IN  VARCHAR2               := FND_API.G_FALSE,
5779      x_Return_Status               OUT NOCOPY VARCHAR2,
5780      x_msg_count                   OUT NOCOPY NUMBER,
5781      x_msg_data                    OUT NOCOPY VARCHAR2,
5782      p_Terr_All_Rec                IN  Terr_All_Rec_Type      := G_Miss_Terr_All_Rec)
5783   AS
5784 
5785      l_Return_Status               VARCHAR2(1);
5786      l_reason                      VARCHAR2(1);
5787      l_ter_name_count               NUMBER;
5788 
5789   BEGIN
5790     --dbms_output('Validate_Territory_Record: Entering API');
5791 
5792     -- Initialize the status to success
5793     x_return_status := FND_API.G_RET_STS_SUCCESS;
5794 
5795     -- Check whether the territory Name is specified
5796     --
5797     IF (p_Terr_All_Rec.NAME is NULL) OR (p_Terr_All_Rec.NAME = FND_API.G_MISS_CHAR) THEN
5798         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5799            FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_COL_VALUE');
5800            FND_MESSAGE.Set_Token('COL_NAME', 'NAME' );
5801            FND_MSG_PUB.ADD;
5802         END IF;
5803         x_Return_Status := FND_API.G_RET_STS_ERROR ;
5804     ELSE -- Territory Name is not null.
5805         -- Check for Duplicate Territory Names.
5806         IF p_Terr_All_Rec.START_DATE_ACTIVE IS NOT NULL
5807            AND p_Terr_All_Rec.END_DATE_ACTIVE IS NOT NULL
5808            AND p_Terr_All_Rec.PARENT_TERRITORY_ID IS NOT NULL THEN
5809 
5810               Select count(*) INTO l_ter_name_count
5811                 FROM JTF_TERR_ALL childterr,
5812                      HR_OPERATING_UNITS hr,
5813                      JTF_TERR_ALL parentterr
5814                 WHERE childterr.org_id = hr.organization_id
5815                   AND childterr.parent_territory_id =   parentTerr.terr_id
5816                   AND childterr.org_id = parentTerr.org_id
5817                   AND childterr.NAME = p_Terr_All_Rec.NAME
5818                   AND childterr.terr_id <>  p_Terr_All_Rec.PARENT_TERRITORY_ID
5819                   AND (   ((childterr.END_DATE_ACTIVE  >=  p_Terr_All_Rec.START_DATE_ACTIVE and  childterr.START_DATE_ACTIVE <= p_Terr_All_Rec.START_DATE_ACTIVE)
5820                            or (childterr.END_DATE_ACTIVE >= p_Terr_All_Rec.END_DATE_ACTIVE and  childterr.START_DATE_ACTIVE <= p_Terr_All_Rec.END_DATE_ACTIVE ))
5821                         or ((childterr.START_DATE_ACTIVE  >=  p_Terr_All_Rec.START_DATE_ACTIVE and  childterr.START_DATE_ACTIVE <= p_Terr_All_Rec.END_DATE_ACTIVE)
5822                            or (childterr.END_DATE_ACTIVE >=  p_Terr_All_Rec.START_DATE_ACTIVE and  childterr.END_DATE_ACTIVE <= p_Terr_All_Rec.END_DATE_ACTIVE)));
5823 
5824                 IF l_ter_name_count IS NOT NULL AND  l_ter_name_count > 0 THEN
5825                    IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5826                        FND_MESSAGE.Set_Name('JTF', 'JTY_TERR_DUP_NAME');
5827                        FND_MESSAGE.Set_Token('TERR_NAME', p_Terr_All_Rec.NAME );
5828                        FND_MSG_PUB.ADD;
5829                     END IF;
5830                     x_Return_Status := FND_API.G_RET_STS_ERROR ;
5831                 END IF;
5832         END IF;
5833     End If;
5834 
5835     -- Parent Terr ID can't be null.
5836     If (p_Terr_All_Rec.PARENT_TERRITORY_ID is null) OR
5837        (p_Terr_All_Rec.PARENT_TERRITORY_ID = FND_API.G_MISS_NUM)
5838     Then
5839         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5840            FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_COL_VALUE');
5841            FND_MESSAGE.Set_Token('COL_NAME', 'PARENT_TERRITORY_ID' );
5842            FND_MSG_PUB.ADD;
5843         END IF;
5844         x_Return_Status := FND_API.G_RET_STS_ERROR ;
5845     END IF;
5846 
5847     --dbms_output('Validate_Foreign_Key: Checking for Territory Type Id');
5848     -- Territory Type ID can't be null.
5849     If (p_Terr_All_Rec.TERRITORY_TYPE_ID is null) OR
5850        (p_Terr_All_Rec.TERRITORY_TYPE_ID = FND_API.G_MISS_NUM)
5851     then
5852 
5853        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5854           FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_COL_VALUE');
5855           FND_MESSAGE.Set_Token('COL_NAME', 'TERRITORY_TYPE_ID' );
5856           FND_MSG_PUB.ADD;
5857        END IF;
5858        x_Return_Status := FND_API.G_RET_STS_ERROR ;
5859     End If;
5860 
5861     -- Check whether application short name is specified
5862     --
5863     IF (p_Terr_All_Rec.APPLICATION_SHORT_NAME is NULL) OR
5864        (p_Terr_All_Rec.APPLICATION_SHORT_NAME = FND_API.G_MISS_CHAR) THEN
5865         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5866            FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_COL_VALUE');
5867            FND_MESSAGE.Set_Token('COL_NAME', 'APPLICATION_SHORT_NAME' );
5868            FND_MSG_PUB.ADD;
5869         END IF;
5870         x_Return_Status := FND_API.G_RET_STS_ERROR ;
5871     End If;
5872 
5873     /* Check whether the enabled_flag is specified
5874     -- Obsolete: use date effectivity to determine
5875     -- whether territory is enabled
5876     IF (p_Terr_All_Rec.ENABLED_FLAG is NULL) OR
5877        (p_Terr_All_Rec.ENABLED_FLAG = FND_API.G_MISS_CHAR) THEN
5878         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5879            FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_COL_VALUE');
5880            FND_MESSAGE.Set_Token('COL_NAME', 'ENABLED_FLAG' );
5881            FND_MSG_PUB.ADD;
5882         END IF;
5883         x_Return_Status := FND_API.G_RET_STS_ERROR ;
5884     End If;
5885     */
5886 
5887     -- Check for ORG_ID
5888     IF (p_Terr_All_Rec.ORG_ID is NULL) OR
5889        (p_Terr_All_Rec.ORG_ID = FND_API.G_MISS_NUM) THEN
5890        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5891           FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_COL_VALUE');
5892           FND_MESSAGE.Set_Token('COL_NAME', 'ORG_ID' );
5893           FND_MSG_PUB.ADD;
5894        END IF;
5895        x_Return_Status := FND_API.G_RET_STS_ERROR ;
5896     End If;
5897 
5898     If (p_Terr_All_Rec.ESCALATION_TERRITORY_FLAG = 'Y' and
5899         p_Terr_All_Rec.TEMPLATE_FLAG = 'Y' ) Then
5900         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5901            FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_OVERLAPPING_FLAG');
5902            FND_MSG_PUB.ADD;
5903         END IF;
5904         x_Return_Status := FND_API.G_RET_STS_ERROR ;
5905     End If;
5906 
5907     --Check created by
5908     IF ( p_Terr_All_Rec.CREATED_BY is NULL OR
5909          p_Terr_All_Rec.CREATED_BY = FND_API.G_MISS_NUM )  THEN
5910        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5911           FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_COL_VALUE');
5912           FND_MESSAGE.Set_Token('COL_NAME', 'CREATED_BY' );
5913           FND_MSG_PUB.ADD;
5914        END IF;
5915        x_Return_Status := FND_API.G_RET_STS_ERROR ;
5916     End If;
5917 
5918     --Check creation date
5919     If ( p_Terr_All_Rec.CREATION_DATE is NULL OR
5920          p_Terr_All_Rec.CREATION_DATE = FND_API.G_MISS_DATE ) THEN
5921        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5922           FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_COL_VALUE');
5923           FND_MESSAGE.Set_Token('COL_NAME', 'CREATION_DATE' );
5924           FND_MSG_PUB.ADD;
5925        END IF;
5926        x_Return_Status := FND_API.G_RET_STS_ERROR ;
5927     End If;
5928 
5929     -- Validate last updated by
5930     IF ( p_Terr_All_Rec.LAST_UPDATED_BY is NULL OR
5931          p_Terr_All_Rec.LAST_UPDATED_BY = FND_API.G_MISS_NUM) Then
5932        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5933           FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_COL_VALUE');
5934           FND_MESSAGE.Set_Token('COL_NAME', 'LAST_UPDATED_BY' );
5935           FND_MSG_PUB.ADD;
5936        END IF;
5937        x_Return_Status := FND_API.G_RET_STS_ERROR ;
5938     End If;
5939 
5940     -- Check last update date
5941     If ( p_Terr_All_Rec.LAST_UPDATE_DATE IS NULL OR
5942          p_Terr_All_Rec.LAST_UPDATE_DATE = FND_API.G_MISS_DATE ) THEN
5943        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5944           FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_COL_VALUE');
5945           FND_MESSAGE.Set_Token('COL_NAME', 'LAST_UPDATE_DATE' );
5946           FND_MSG_PUB.ADD;
5947        END IF;
5948        x_Return_Status := FND_API.G_RET_STS_ERROR ;
5949     End If;
5950 
5951     --Check last update login
5952     --If ( p_Terr_All_Rec.LAST_UPDATE_LOGIN  is NULL OR
5953     --     p_Terr_All_Rec.LAST_UPDATE_LOGIN  = FND_API.G_MISS_NUM )  THEN
5954     --   IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5955     --      FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_COL_VALUE');
5956     --      FND_MESSAGE.Set_Token('COL_NAME', 'LAST_UPDATE_LOGIN' );
5957     --      FND_MSG_PUB.ADD;
5958     --   END IF;
5959     --   x_Return_Status := FND_API.G_RET_STS_ERROR ;
5960     --End If;
5961 
5962     --Check start date active
5963     If ( p_Terr_All_Rec.START_DATE_ACTIVE IS NULL OR
5964          p_Terr_All_Rec.START_DATE_ACTIVE = FND_API.G_MISS_DATE ) THEN
5965        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5966           FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_COL_VALUE');
5967           FND_MESSAGE.Set_Token('COL_NAME', 'START_DATE_ACTIVE' );
5968           FND_MSG_PUB.ADD;
5969        END IF;
5970        x_Return_Status := FND_API.G_RET_STS_ERROR ;
5971     End If;
5972 
5973     --Check End date active
5974     If ( p_Terr_All_Rec.END_DATE_ACTIVE IS NULL OR
5975          p_Terr_All_Rec.END_DATE_ACTIVE = FND_API.G_MISS_DATE ) THEN
5976        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5977           FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_COL_VALUE');
5978           FND_MESSAGE.Set_Token('COL_NAME', 'END_DATE_ACTIVE' );
5979           FND_MSG_PUB.ADD;
5980        END IF;
5981        x_Return_Status := FND_API.G_RET_STS_ERROR ;
5982     End If;
5983 
5984     IF (p_Terr_All_Rec.START_DATE_ACTIVE IS NOT NULL AND p_Terr_All_Rec.START_DATE_ACTIVE <> FND_API.G_MISS_DATE )
5985         AND (p_Terr_All_Rec.END_DATE_ACTIVE IS NOT NULL AND p_Terr_All_Rec.END_DATE_ACTIVE <> FND_API.G_MISS_DATE ) THEN
5986         IF ( p_Terr_All_Rec.START_DATE_ACTIVE > p_Terr_All_Rec.END_DATE_ACTIVE ) THEN
5987             IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5988                 FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_START_END_BAD');
5989                 FND_MSG_PUB.ADD;
5990             END IF;
5991             x_Return_Status := FND_API.G_RET_STS_ERROR ;
5992         END IF;
5993     END IF;
5994 
5995     --Check Rank
5996     If ( p_Terr_All_Rec.RANK IS NULL OR
5997          p_Terr_All_Rec.RANK = FND_API.G_MISS_NUM ) THEN
5998        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5999           FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_COL_VALUE');
6000           FND_MESSAGE.Set_Token('COL_NAME', 'RANK' );
6001           FND_MSG_PUB.ADD;
6002        END IF;
6003        x_Return_Status := FND_API.G_RET_STS_ERROR ;
6004     End If;
6005 
6006     /* Check Number Of Winners not set at
6007     ** a higher/lower level in the hierarchy
6008     ** 10/04/00 JDOCHERT
6009     */
6010     /* JDOCHERT: 06/27/03: bug#3020630
6011     IF ( p_terr_all_rec.NUM_WINNERS IS NOT NULL AND
6012          p_terr_all_rec.NUM_WINNERS <> FND_API.G_MISS_NUM )  THEN
6013 
6014        validate_num_winners(
6015                p_terr_all_rec     => p_terr_all_rec,
6016                p_init_msg_list    => p_init_msg_list,
6017                x_Return_Status    => l_Return_Status,
6018                x_msg_count        => x_msg_count,
6019                x_msg_data         => x_msg_data,
6020                x_Reason           => l_reason );
6021 
6022 
6023        IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
6024           x_Return_Status := l_return_Status;
6025        End If;
6026 
6027     End If;
6028     */
6029 
6030 
6031     --
6032     -- Validate foreign key references
6033     Validate_Foreign_Key(p_Terr_All_Rec    => p_Terr_All_Rec,
6034                          p_init_msg_list   => p_init_msg_list,
6035                          x_Return_Status   => l_Return_Status,
6036                          x_msg_count       => x_msg_count,
6037                          x_msg_data        => x_msg_data);
6038 
6039     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6040        x_Return_Status := l_return_Status;
6041     End If;
6042 
6043     -- Since the message stack is already set
6044     --
6045     FND_MSG_PUB.Count_And_Get( p_count => x_msg_count,
6046                                p_data  => x_msg_data);
6047 
6048   EXCEPTION
6049   --
6050     WHEN FND_API.G_EXC_ERROR THEN
6051          --dbms_output('Validate_Territory_Record: FND_API.G_EXC_ERROR');
6052          x_return_status := FND_API.G_RET_STS_ERROR ;
6053          FND_MSG_PUB.Count_And_Get
6054          (  P_count          =>   x_msg_count,
6055             P_data           =>   x_msg_data
6056          );
6057 
6058     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6059          --dbms_output('Validate_Territory_Record: FND_API.G_EXC_UNEXPECTED_ERROR');
6060          X_return_status                   := FND_API.G_RET_STS_UNEXP_ERROR;
6061          FND_MSG_PUB.Count_And_Get
6062          (  P_count          =>   x_msg_count,
6063             P_data           =>   x_msg_data
6064          );
6065 
6066     WHEN OTHERS THEN
6067          --dbms_output('Validate_Territory_Record: OTHERS - ' || SQLERRM);
6068          X_return_status                    := FND_API.G_RET_STS_UNEXP_ERROR;
6069          FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_UNEXPECTED_ERROR');
6070          FND_MESSAGE.Set_Token('PROC_NAME', 'Validate_Territory_Record' );
6071          FND_MESSAGE.Set_Token('ERROR', sqlerrm );
6072          FND_MSG_PUB.ADD;
6073          FND_MSG_PUB.Count_And_Get
6074          (  P_count          =>   x_msg_count,
6075             P_data           =>   x_msg_data
6076          );
6077   --
6078   END Validate_Territory_Record;
6079 
6080   -- Validate the Territory RECORD while updating the territory
6081   PROCEDURE Validate_TerrRec_Update
6082     (p_init_msg_list               IN  VARCHAR2               := FND_API.G_FALSE,
6083      x_Return_Status               OUT NOCOPY VARCHAR2,
6084      x_msg_count                   OUT NOCOPY NUMBER,
6085      x_msg_data                    OUT NOCOPY VARCHAR2,
6086      p_Terr_All_Rec                IN  Terr_All_Rec_Type      := G_Miss_Terr_All_Rec)
6087   AS
6088 
6089      l_Return_Status                 VARCHAR2(1);
6090      l_reason                        VARCHAR2(1);
6091      l_ter_name                      VARCHAR2(200);
6092      l_ter_name_count                NUMBER;
6093      l_dummy                         NUMBER;
6094      l_start_date_active             DATE;
6095      l_end_date_active               DATE;
6096      l_pterr_start_date              DATE;
6097      l_pterr_end_date                DATE;
6098      l_parent_territory_id           NUMBER;
6099      l_Validate_id                   NUMBER;
6100   BEGIN
6101     --dbms_output('Validate_Territory_Record: Entering API');
6102     -- Initialize the status to success
6103     x_return_status := FND_API.G_RET_STS_SUCCESS;
6104 
6105     -- Validate the territory Id
6106     l_Validate_id := p_Terr_All_Rec.TERR_ID;
6107     If l_Validate_id IS NOT NULL THEN
6108         If JTF_CTM_UTILITY_PVT.fk_id_is_valid(l_Validate_id, 'TERR_ID', 'JTF_TERR_ALL') <> FND_API.G_TRUE Then
6109             --dbms_output('Validate_Territory_Usage: l_status <> FND_API.G_TRUE');
6110             FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_INVALID_FOREIGN_KEY');
6111             FND_MESSAGE.Set_Token('TABLE_NAME', 'JTF_TERR');
6112             FND_MESSAGE.Set_Token('COLUMN_NAME', 'TERR_ID');
6113             FND_MSG_PUB.ADD;
6114             x_Return_Status := FND_API.G_RET_STS_ERROR ;
6115         ELSE
6116          -- Terr_ID Is valid.
6117             SELECT name,
6118                    START_DATE_ACTIVE,
6119                    END_DATE_ACTIVE,
6120                    PARENT_TERRITORY_ID
6121               INTO l_ter_name,
6122                    l_start_date_active,
6123                    l_end_date_active,
6124                    l_parent_territory_id
6125               FROM JTF_TERR_ALL
6126              WHERE TERR_ID = p_Terr_All_Rec.TERR_ID;
6127             -- Following values are used in finding the duplicate names.
6128             IF (p_Terr_All_Rec.START_DATE_ACTIVE IS NOT NULL AND p_Terr_All_Rec.START_DATE_ACTIVE <> FND_API.G_MISS_DATE ) THEN
6129                 l_start_date_active := p_Terr_All_Rec.START_DATE_ACTIVE ;
6130             END IF;
6131 
6132             IF (p_Terr_All_Rec.END_DATE_ACTIVE IS NOT NULL AND p_Terr_All_Rec.END_DATE_ACTIVE <> FND_API.G_MISS_DATE ) THEN
6133                 l_end_date_active := p_Terr_All_Rec.END_DATE_ACTIVE ;
6134             END IF;
6135 
6136             IF (p_Terr_All_Rec.PARENT_TERRITORY_ID IS NOT NULL
6137                 AND p_Terr_All_Rec.PARENT_TERRITORY_ID <> FND_API.G_MISS_NUM ) THEN
6138                 l_parent_territory_id := p_Terr_All_Rec.PARENT_TERRITORY_ID ;
6139             END IF;
6140         END IF;
6141     END IF;
6142     -- Check whether the territory Name is specified
6143     --
6144     IF ( (p_Terr_All_Rec.NAME IS NOT NULL)
6145          AND (p_Terr_All_Rec.NAME <> FND_API.G_MISS_CHAR) )
6146         AND ( p_Terr_All_Rec.NAME <> l_ter_name )  THEN
6147 
6148         IF l_start_date_active IS NOT NULL
6149            AND l_end_date_active IS NOT NULL
6150            AND l_parent_territory_id IS NOT NULL THEN
6151 
6152               Select count(*) INTO l_ter_name_count
6153                 FROM JTF_TERR_ALL childterr,
6154                      HR_OPERATING_UNITS hr,
6155                      JTF_TERR_ALL parentterr
6156                 WHERE childterr.org_id = hr.organization_id
6157                   AND childterr.parent_territory_id =   parentTerr.terr_id
6158                   AND childterr.org_id = parentTerr.org_id
6159                   AND childterr.NAME = p_Terr_All_Rec.NAME
6160                   AND childterr.terr_id <> l_parent_territory_id
6161                   AND (   ((childterr.END_DATE_ACTIVE  >=  l_start_date_active and  childterr.START_DATE_ACTIVE <= l_start_date_active)
6162                            or (childterr.END_DATE_ACTIVE >= l_end_date_active and  childterr.START_DATE_ACTIVE <= l_end_date_active ))
6163                         or ((childterr.START_DATE_ACTIVE  >=  l_start_date_active and  childterr.START_DATE_ACTIVE <= l_end_date_active)
6164                            or (childterr.END_DATE_ACTIVE >=  l_start_date_active and  childterr.END_DATE_ACTIVE <= l_end_date_active)));
6165 
6166                 IF l_ter_name_count IS NOT NULL AND  l_ter_name_count > 0 THEN
6167                    IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6168                        FND_MESSAGE.Set_Name('JTF', 'JTY_TERR_DUP_NAME');
6169                        FND_MESSAGE.Set_Token('TERR_NAME', p_Terr_All_Rec.NAME );
6170                        FND_MSG_PUB.ADD;
6171                     END IF;
6172                     x_Return_Status := FND_API.G_RET_STS_ERROR ;
6173                 END IF;
6174         END IF;
6175     End If;
6176 
6177     IF (l_start_date_active IS NOT NULL )
6178         AND (l_end_date_active IS NOT NULL ) THEN
6179         IF ( l_start_date_active > l_end_date_active ) THEN
6180             IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6181                 FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_START_END_BAD');
6182                 FND_MSG_PUB.ADD;
6183             END IF;
6184             x_Return_Status := FND_API.G_RET_STS_ERROR ;
6185         END IF;
6186     END IF;
6187 
6188     -- Territory start and end active dates should fall in territory dates.
6189     IF (l_parent_territory_id IS NOT NULL AND l_parent_territory_id <> 1 )THEN
6190         BEGIN
6191 
6192             SELECT jta.start_date_active,jta.end_date_active
6193               INTO l_pterr_start_date,l_pterr_end_date
6194               FROM jtf_terr_all jta
6195              WHERE jta.terr_id = l_parent_territory_id ;
6196 
6197             -- Validate Terr start date .
6198             IF ( l_start_date_active IS NOT NULL ) AND ( ( l_start_date_active < l_pterr_start_date ) OR ( l_start_date_active > l_pterr_end_date ) ) THEN
6199                 IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6200                     FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_STARTDATE_NOT_VALID');
6201                     FND_MESSAGE.Set_Token('RES_NAME', ' ' );
6202                     FND_MSG_PUB.ADD;
6203                 END IF;
6204                 x_Return_Status := FND_API.G_RET_STS_ERROR ;
6205             END IF;
6206 
6207             -- Validate Terr end date.
6208             IF (l_end_date_active IS NOT NULL ) AND (( l_end_date_active < l_pterr_start_date ) OR ( l_end_date_active > l_pterr_end_date ) ) THEN
6209                 IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6210                     FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_ENDDATE_NOT_VALID');
6211                     FND_MESSAGE.Set_Token('RES_NAME', ' ' );
6212                     FND_MSG_PUB.ADD;
6213                 END IF;
6214                 x_Return_Status := FND_API.G_RET_STS_ERROR ;
6215             END IF;
6216 
6217         EXCEPTION
6218           WHEN OTHERS THEN
6219               X_return_status   := FND_API.G_RET_STS_UNEXP_ERROR;
6220               IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
6221                   FND_MSG_PUB.Add_Exc_Msg (  G_PKG_NAME, 'Others Exception in Validate_Terr_Record ' || SQLERRM);
6222                END IF;
6223         END;
6224     END IF; --l_parent_terr_id IS NOT NULL AND l_parent_terr_id <> 1
6225 
6226     --
6227     -- Check if the Parent Terr ID is valid for the given source.
6228     BEGIN
6229         IF ( p_terr_all_rec.PARENT_TERRITORY_ID IS NOT NULL
6230              AND p_terr_all_rec.PARENT_TERRITORY_ID <> FND_API.G_MISS_NUM
6231              AND p_terr_all_rec.PARENT_TERRITORY_ID <> 1) THEN
6232 
6233             SELECT 1
6234               INTO l_dummy
6235               FROM jtf_terr_usgs_all childusg, jtf_terr_usgs_all parusg
6236              WHERE childusg.terr_id     = p_terr_all_rec.TERR_ID
6237                AND parusg.terr_id       = p_terr_all_rec.PARENT_TERRITORY_ID
6238                AND childusg.source_id   = parusg.source_id
6239                AND childusg.org_id      = parusg.org_id ;
6240 
6241         END IF;
6242 
6243      EXCEPTION
6244         WHEN NO_DATA_FOUND THEN
6245                 FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_PARENT_TERR');
6246                 FND_MESSAGE.Set_Token('TERR_ID', to_char(p_terr_all_rec.PARENT_TERRITORY_ID));
6247                 FND_MSG_PUB.ADD;
6248      END;
6249 
6250     If (p_Terr_All_Rec.ESCALATION_TERRITORY_FLAG = 'Y' and
6251         p_Terr_All_Rec.TEMPLATE_FLAG = 'Y' ) Then
6252         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6253            FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_OVERLAPPING_FLAG');
6254            FND_MSG_PUB.ADD;
6255         END IF;
6256         x_Return_Status := FND_API.G_RET_STS_ERROR ;
6257     End If;
6258 
6259     -- Validate last updated by
6260     IF ( p_Terr_All_Rec.LAST_UPDATED_BY is NULL OR
6261          p_Terr_All_Rec.LAST_UPDATED_BY = FND_API.G_MISS_NUM) Then
6262        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6263           FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_COL_VALUE');
6264           FND_MESSAGE.Set_Token('COL_NAME', 'LAST_UPDATED_BY' );
6265           FND_MSG_PUB.ADD;
6266        END IF;
6267        x_Return_Status := FND_API.G_RET_STS_ERROR ;
6268     End If;
6269 
6270     -- Check last update date
6271     If ( p_Terr_All_Rec.LAST_UPDATE_DATE IS NULL OR
6272          p_Terr_All_Rec.LAST_UPDATE_DATE = FND_API.G_MISS_DATE ) THEN
6273        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6274           FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_COL_VALUE');
6275           FND_MESSAGE.Set_Token('COL_NAME', 'LAST_UPDATE_DATE' );
6276           FND_MSG_PUB.ADD;
6277        END IF;
6278        x_Return_Status := FND_API.G_RET_STS_ERROR ;
6279     End If;
6280 
6281     --Check last update login
6282     If ( p_Terr_All_Rec.LAST_UPDATE_LOGIN  is NULL OR
6283          p_Terr_All_Rec.LAST_UPDATE_LOGIN  = FND_API.G_MISS_NUM )  THEN
6284        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6285           FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_COL_VALUE');
6286           FND_MESSAGE.Set_Token('COL_NAME', 'LAST_UPDATE_LOGIN' );
6287           FND_MSG_PUB.ADD;
6288        END IF;
6289        x_Return_Status := FND_API.G_RET_STS_ERROR ;
6290     End If;
6291 
6292     -- check that parent territory is not already a child of this territory
6293          validate_parent(p_Terr_All_Rec    => p_Terr_All_Rec,
6294                          p_init_msg_list   => p_init_msg_list,
6295                          x_Return_Status   => l_Return_Status,
6296                          x_msg_count       => x_msg_count,
6297                          x_msg_data        => x_msg_data);
6298 
6299     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6300        x_Return_Status := l_return_Status;
6301     End If;
6302 
6303     -- Since the message stack is already set
6304     --
6305     FND_MSG_PUB.Count_And_Get( p_count => x_msg_count,
6306                                p_data  => x_msg_data);
6307 
6308   EXCEPTION
6309   --
6310     WHEN FND_API.G_EXC_ERROR THEN
6311          --dbms_output('Validate_Territory_Record: FND_API.G_EXC_ERROR');
6312          x_return_status := FND_API.G_RET_STS_ERROR ;
6313          FND_MSG_PUB.Count_And_Get
6314          (  P_count          =>   x_msg_count,
6315             P_data           =>   x_msg_data
6316          );
6317 
6318     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6319          --dbms_output('Validate_Territory_Record: FND_API.G_EXC_UNEXPECTED_ERROR');
6320          X_return_status                   := FND_API.G_RET_STS_UNEXP_ERROR;
6321          FND_MSG_PUB.Count_And_Get
6322          (  P_count          =>   x_msg_count,
6323             P_data           =>   x_msg_data
6324          );
6325 
6326     WHEN OTHERS THEN
6327          --dbms_output('Validate_Territory_Record: OTHERS - ' || SQLERRM);
6328          X_return_status                    := FND_API.G_RET_STS_UNEXP_ERROR;
6329          FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_UNEXPECTED_ERROR');
6330          FND_MESSAGE.Set_Token('PROC_NAME', 'Validate_TerrRec_Update' );
6331          FND_MESSAGE.Set_Token('ERROR', sqlerrm );
6332          FND_MSG_PUB.ADD;
6333          FND_MSG_PUB.Count_And_Get
6334          (  P_count          =>   x_msg_count,
6335             P_data           =>   x_msg_data
6336          );
6337   --
6338   END Validate_TerrRec_Update;
6339 
6340 --
6341 --
6342 -- Validate Foreign Key references
6343 PROCEDURE Validate_Foreign_Key
6344   (p_Terr_All_Rec                IN  Terr_All_Rec_Type      := G_Miss_Terr_All_Rec,
6345    p_init_msg_list               IN  VARCHAR2               := FND_API.G_FALSE,
6346    x_Return_Status               OUT NOCOPY VARCHAR2,
6347    x_msg_count                   OUT NOCOPY NUMBER,
6348    x_msg_data                    OUT NOCOPY VARCHAR2 )
6349   AS
6350    l_Status                      VARCHAR2(01);
6351    l_parent_terr_id              NUMBER;
6352    PSTART_DATE_ACTIVE            DATE;
6353    PEND_DATE_ACTIVE              DATE;
6354   BEGIN
6355         --dbms_output('Validate_Foreign_Key: Entering API');
6356     -- Initialize the status to success
6357     x_return_status := FND_API.G_RET_STS_SUCCESS;
6358     --
6359     --dbms_output('Validate_Foreign_Key: Checking for PARENT Territory' || TO_CHAR(p_Terr_All_Rec.parent_territory_Id));
6360     If (p_Terr_All_Rec.PARENT_TERRITORY_ID is not null) AND
6361        (p_Terr_All_Rec.PARENT_TERRITORY_ID <> FND_API.G_MISS_NUM)
6362     Then
6363         --
6364         l_parent_terr_id := p_Terr_All_Rec.parent_territory_Id;
6365         --dbms_output('Validate_Foreign_Key: Returned from JTF_CTM_UTILITY_PVT.fk_id_is_valid');
6366         IF JTF_CTM_UTILITY_PVT.fk_id_is_valid(l_parent_terr_id, 'TERR_ID', 'JTF_TERR_ALL') <> FND_API.G_TRUE Then
6367             IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6368                 --dbms_output('PARENT Validate_Foreign_Key: l_status <> FND_API.G_TRUE');
6369                 FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_PARENT_TERR');
6370                 FND_MESSAGE.Set_Token('TERR_ID', to_char(l_parent_terr_id));
6371                 FND_MSG_PUB.ADD;
6372             End If;
6373             x_return_status := FND_API.G_RET_STS_ERROR;
6374         ELSE
6375             -- Parent Terr is Valid. Hence compare the Start Date active and End Date Active with Child's
6376             -- Start Date Active and End_date_active.
6377             IF (p_Terr_All_Rec.START_DATE_ACTIVE IS NOT NULL
6378                 AND p_Terr_All_Rec.END_DATE_ACTIVE IS NOT NULL AND p_Terr_All_Rec.PARENT_TERRITORY_ID <> 1 ) THEN
6379 
6380                 SELECT START_DATE_ACTIVE, END_DATE_ACTIVE INTO PSTART_DATE_ACTIVE, PEND_DATE_ACTIVE
6381                 FROM JTF_TERR_ALL
6382                 WHERE TERR_ID = p_Terr_All_Rec.PARENT_TERRITORY_ID;
6383 
6384                 IF PSTART_DATE_ACTIVE is NOT NULL
6385                    AND PSTART_DATE_ACTIVE > p_Terr_All_Rec.START_DATE_ACTIVE THEN
6386                     IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6387                         FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_STARTDATE_NOT_VALID');
6388                         FND_MSG_PUB.ADD;
6389                      END IF;
6390                      x_Return_Status := FND_API.G_RET_STS_ERROR ;
6391                  END IF;
6392 
6393                  IF PEND_DATE_ACTIVE is NOT NULL
6394                     AND PEND_DATE_ACTIVE < p_Terr_All_Rec.END_DATE_ACTIVE THEN
6395                     IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6396                         FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_ENDDATE_NOT_VALID');
6397                         FND_MSG_PUB.ADD;
6398                      END IF;
6399                      x_Return_Status := FND_API.G_RET_STS_ERROR ;
6400                 END IF;
6401              END IF ;
6402         END IF;
6403     END IF;
6404 
6405     --
6406     --dbms_output('Validate_Foreign_Key: Checking for Territory Type Id');
6407     --
6408     If (p_Terr_All_Rec.TERRITORY_TYPE_ID is not null) AND
6409        (p_Terr_All_Rec.TERRITORY_TYPE_ID <> FND_API.G_MISS_NUM)
6410     then
6411        l_status := JTF_CTM_UTILITY_PVT.fk_id_is_valid(p_Terr_All_Rec.TERRITORY_TYPE_ID, 'TERR_TYPE_ID', 'JTF_TERR_TYPES_ALL');
6412        If l_status <> FND_API.G_TRUE Then
6413           x_return_status := FND_API.G_RET_STS_ERROR;
6414           IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6415              --dbms_output('TERR TYPE: Validate_Foreign_Key: l_status <> FND_API.G_TRUE');
6416              FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_TERR_TYPE');
6417              FND_MESSAGE.Set_Token('TERR_TYPE_ID', to_char(p_Terr_All_Rec.TERRITORY_TYPE_ID));
6418              FND_MSG_PUB.ADD;
6419           End If;
6420        End If;
6421     End If;
6422     --
6423     --dbms_output('Validate_Foreign_Key: Checking for Organization ID');
6424     --
6425     If (p_Terr_All_Rec.ORG_ID is not null) AND
6426        (p_Terr_All_Rec.ORG_ID <> FND_API.G_MISS_NUM)
6427     then
6428        l_status := JTF_CTM_UTILITY_PVT.fk_id_is_valid(p_Terr_All_Rec.ORG_ID, 'ORGANIZATION_ID', 'HR_OPERATING_UNITS');
6429        If l_status <> FND_API.G_TRUE Then
6430           x_return_status := FND_API.G_RET_STS_ERROR;
6431           IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6432              --dbms_output('TERR TYPE: Validate_Foreign_Key: l_status <> FND_API.G_TRUE');
6433              --Change the message name here
6434              FND_MESSAGE.Set_Name('JTF', 'JTY_TERR_MISSING_ORG_ID');
6435              FND_MESSAGE.Set_Token('ORG_ID', to_char(p_Terr_All_Rec.ORG_ID));
6436              FND_MSG_PUB.ADD;
6437           End If;
6438        End If;
6439     End If;
6440     --
6441     --dbms_output('Validate_Foreign_Key: Checking for TEMPLATE_TERRITORY_ID');
6442     --
6443     iF (p_Terr_All_Rec.TEMPLATE_TERRITORY_ID is not null) AND
6444        (p_Terr_All_Rec.TEMPLATE_TERRITORY_ID <> FND_API.G_MISS_NUM) Then
6445        l_status := JTF_CTM_UTILITY_PVT.fk_id_is_valid(p_Terr_All_Rec.TEMPLATE_TERRITORY_ID, 'TERR_ID', 'JTF_TERR_ALL');
6446        if l_status <> FND_API.G_TRUE Then
6447           x_return_status := FND_API.G_RET_STS_ERROR;
6448           IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6449              --dbms_output('TEMP: Validate_Foreign_Key: l_status <> FND_API.G_TRUE');
6450              FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_TEMP_TERR');
6451              FND_MESSAGE.Set_Token('TERR_ID', to_char(p_Terr_All_Rec.TEMPLATE_TERRITORY_ID));
6452              FND_MSG_PUB.ADD;
6453           End If;
6454        End If;
6455     End If;
6456     --
6457     --dbms_output('Validate_Foreign_Key: Checking for ESCALATION_TERRITORY_ID');
6458     --
6459     If (p_Terr_All_Rec.ESCALATION_TERRITORY_ID is not null)  AND
6460        (p_Terr_All_Rec.ESCALATION_TERRITORY_ID <> FND_API.G_MISS_NUM) Then
6461        l_status := JTF_CTM_UTILITY_PVT.fk_id_is_valid(p_Terr_All_Rec.escalation_territory_id, 'TERR_ID', 'JTF_TERR_ALL');
6462        if l_status <> FND_API.G_TRUE Then
6463           x_return_status := FND_API.G_RET_STS_ERROR;
6464           IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6465              --dbms_output('ESC TERR: Validate_Foreign_Key: l_status <> FND_API.G_TRUE');
6466              FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_ESC_TERR');
6467              FND_MESSAGE.Set_Token('TERR_ID', to_char(p_Terr_All_Rec.terr_Id));
6468              FND_MSG_PUB.ADD;
6469           End If;
6470        End If;
6471     End If;
6472 
6473     --
6474     FND_MSG_PUB.Count_And_Get( p_count => x_msg_count,
6475                                p_data  => x_msg_data);
6476  EXCEPTION
6477  --
6478     WHEN OTHERS THEN
6479          --dbms_output('Validate_Foreign_Key: Others exception' || SQLERRM);
6480          X_return_status   := FND_API.G_RET_STS_ERROR;
6481          FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_UNEXPECTED_ERROR');
6482          FND_MESSAGE.Set_Token('PROC_NAME', 'Validate_Foreign_Key' );
6483          FND_MESSAGE.Set_Token('ERROR', sqlerrm );
6484          FND_MSG_PUB.ADD;
6485          FND_MSG_PUB.Count_And_Get
6486          (  p_count          =>   x_msg_count,
6487             p_data           =>   x_msg_data
6488          );
6489 --
6490 END Validate_Foreign_Key;
6491 
6492 ---------------------------------------------------------------------
6493 --                Validae the Territory Usage
6494 ---------------------------------------------------------------------
6495 -- Columns Validated
6496 --         Make sure a Territory Usage is specified
6497 --         Make sure the Territory Id is valid
6498 --         Make sure the territory usage Id is Valid
6499 ---------------------------------------------------------------------
6500 PROCEDURE Validate_Territory_Usage
6501   (p_init_msg_list               IN  VARCHAR2               := FND_API.G_FALSE,
6502    x_Return_Status               OUT NOCOPY VARCHAR2,
6503    x_msg_count                   OUT NOCOPY NUMBER,
6504    x_msg_data                    OUT NOCOPY VARCHAR2,
6505    p_Terr_Usgs_Rec               IN  Terr_Usgs_Rec_Type     := G_MISS_Terr_Usgs_Rec,
6506    p_Terr_Id                     IN  NUMBER)
6507 AS
6508    l_Rec_Counter                 NUMBER;
6509    l_Validate_id                 NUMBER;
6510 BEGIN
6511     --dbms_output('Validate_Territory_Usage: Entering API');
6512 
6513     -- Initialize the status to success
6514     x_return_status := FND_API.G_RET_STS_SUCCESS;
6515 
6516     -- Validate the territory Id
6517     If p_Terr_Id IS NOT NULL THEN
6518        l_Validate_id := p_Terr_Id;
6519        If JTF_CTM_UTILITY_PVT.fk_id_is_valid(l_Validate_id, 'TERR_ID', 'JTF_TERR_ALL') <> FND_API.G_TRUE Then
6520           --dbms_output('Validate_Territory_Usage: l_status <> FND_API.G_TRUE');
6521           FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_INVALID_FOREIGN_KEY');
6522           FND_MESSAGE.Set_Token('TABLE_NAME', 'JTF_TERR');
6523           FND_MESSAGE.Set_Token('COLUMN_NAME', 'TERR_ID');
6524           FND_MSG_PUB.ADD;
6525           x_Return_Status := FND_API.G_RET_STS_ERROR ;
6526        End If;
6527        --dbms_output('Validate_Territory_Usage: TERR_ID(' || to_char(l_Validate_id) || ') is valid');
6528     End If;
6529 
6530     -- Validate the source_id
6531     l_Validate_id := p_Terr_Usgs_rec.SOURCE_ID;
6532     -- Make sure the foreign key source_id is valid
6533     If JTF_CTM_UTILITY_PVT.fk_id_is_valid(l_Validate_id, 'SOURCE_ID', 'JTF_SOURCES_ALL') <> FND_API.G_TRUE Then
6534         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6535             --dbms_output('Validate_Territory_Usage: FND_MSG_PUB.ADD');
6536             FND_MESSAGE.Set_Name('JTF',  'JTF_TERR_INVALID_FOREIGN_KEY');
6537             FND_MESSAGE.Set_Token('TABLE_NAME', 'JTF_SOURCES');
6538             FND_MESSAGE.Set_Token('COLUMN_NAME', 'SOURCE_ID');
6539             FND_MSG_PUB.ADD;
6540         End If;
6541         x_Return_Status := FND_API.G_RET_STS_ERROR ;
6542     End If;
6543 
6544 
6545 
6546    --  Check for ORG_ID
6547    IF JTF_CTM_UTILITY_PVT.fk_id_is_valid(p_Terr_Usgs_rec.ORG_ID, 'ORGANIZATION_ID', 'HR_OPERATING_UNITS') <> FND_API.G_TRUE THEN
6548        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6549            --dbms_output('TERR TYPE: Validate_Foreign_Key: l_status <> FND_API.G_TRUE');
6550            FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_TERR_TYPE');
6551            FND_MESSAGE.Set_Token('ORG_ID', to_char(p_Terr_Usgs_rec.ORG_ID));
6552            FND_MSG_PUB.ADD;
6553         End If;
6554         x_return_status := FND_API.G_RET_STS_ERROR;
6555     End If;
6556 
6557    --Check created by
6558    IF ( p_Terr_Usgs_rec.CREATED_BY is NULL OR
6559         p_Terr_Usgs_rec.CREATED_BY = FND_API.G_MISS_NUM )  THEN
6560         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6561            FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_COL_VALUE');
6562            FND_MESSAGE.Set_Token('COL_NAME', 'CREATED_BY' );
6563            FND_MSG_PUB.ADD;
6564         END IF;
6565         x_Return_Status := FND_API.G_RET_STS_ERROR ;
6566    End If;
6567 
6568    --Check creation date
6569    If ( p_Terr_Usgs_rec.CREATION_DATE is NULL OR
6570         p_Terr_Usgs_rec.CREATION_DATE = FND_API.G_MISS_DATE ) THEN
6571         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6572            FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_COL_VALUE');
6573            FND_MESSAGE.Set_Token('COL_NAME', 'CREATION_DATE' );
6574            FND_MSG_PUB.ADD;
6575         END IF;
6576         x_Return_Status := FND_API.G_RET_STS_ERROR ;
6577    End If;
6578 
6579    -- Validate last updated by
6580    IF  ( p_Terr_Usgs_rec.LAST_UPDATED_BY is NULL OR
6581          p_Terr_Usgs_rec.LAST_UPDATED_BY = FND_API.G_MISS_NUM) Then
6582          IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6583             FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_COL_VALUE');
6584             FND_MESSAGE.Set_Token('COL_NAME', 'LAST_UPDATED_BY' );
6585             FND_MSG_PUB.ADD;
6586          END IF;
6587          x_Return_Status := FND_API.G_RET_STS_ERROR ;
6588    End If;
6589 
6590    -- Check last update date
6591    If ( p_Terr_Usgs_rec.LAST_UPDATE_DATE IS NULL OR
6592         p_Terr_Usgs_rec.LAST_UPDATE_DATE = FND_API.G_MISS_DATE ) THEN
6593         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6594            FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_COL_VALUE');
6595            FND_MESSAGE.Set_Token('COL_NAME', 'LAST_UPDATE_DATE' );
6596            FND_MSG_PUB.ADD;
6597         END IF;
6598         x_Return_Status := FND_API.G_RET_STS_ERROR ;
6599    End If;
6600 
6601    --Check last update login
6602    --If ( p_Terr_Usgs_rec.LAST_UPDATE_LOGIN  is NULL OR
6603    --     p_Terr_Usgs_rec.LAST_UPDATE_LOGIN  = FND_API.G_MISS_NUM )  THEN
6604    --     IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6605    --        FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_COL_VALUE');
6606    --        FND_MESSAGE.Set_Token('COL_NAME', 'LAST_UPDATE_LOGIN' );
6607    --        FND_MSG_PUB.ADD;
6608    --     END IF;
6609    --     x_Return_Status := FND_API.G_RET_STS_ERROR ;
6610    --End If;
6611 
6612    --
6613    FND_MSG_PUB.Count_And_Get( p_count => x_msg_count,
6614                               p_data  => x_msg_data);
6615 
6616 EXCEPTION
6617   --
6618     WHEN FND_API.G_EXC_ERROR THEN
6619          --dbms_output('Validate_Territory_Usage: FND_API.G_EXC_ERROR');
6620          x_return_status := FND_API.G_RET_STS_ERROR ;
6621          FND_MSG_PUB.Count_And_Get
6622          (  P_count          =>   x_msg_count,
6623             P_data           =>   x_msg_data
6624          );
6625 
6626     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6627          --dbms_output('Validate_Territory_Usage: FND_API.G_EXC_UNEXPECTED_ERROR');
6628          X_return_status   := FND_API.G_RET_STS_UNEXP_ERROR;
6629          FND_MSG_PUB.Count_And_Get
6630          (  P_count          =>   x_msg_count,
6631             P_data           =>   x_msg_data
6632          );
6633 
6634     WHEN OTHERS THEN
6635          --dbms_output('Validate_Territory_Usage: OTHERS - ' || SQLERRM);
6636          X_return_status                    := FND_API.G_RET_STS_UNEXP_ERROR;
6637          FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_UNEXPECTED_ERROR');
6638          FND_MESSAGE.Set_Token('PROC_NAME', 'Validate_Territory_Usage' );
6639          FND_MESSAGE.Set_Token('ERROR', sqlerrm );
6640          FND_MSG_PUB.ADD;
6641          FND_MSG_PUB.Count_And_Get
6642          (  P_count          =>   x_msg_count,
6643             P_data           =>   x_msg_data
6644          );
6645 --
6646 END Validate_Territory_Usage;
6647 
6648 ---------------------------------------------------------------------
6649 --             Validate the Territory Qualifer Type Usage
6650 ---------------------------------------------------------------------
6651 -- Columns Validated
6652 --         Make sure a Territory Qual Type Usage is specified
6653 --         Make sure the Territory Id is valid
6654 --         Make sure the QUAL_TYPE_USG_ID is valid
6655 ---------------------------------------------------------------------
6656 PROCEDURE Validate_Terr_Qtype_Usage
6657   (p_init_msg_list               IN  VARCHAR2                    := FND_API.G_FALSE,
6658    x_Return_Status               OUT NOCOPY VARCHAR2,
6659    x_msg_count                   OUT NOCOPY NUMBER,
6660    x_msg_data                    OUT NOCOPY VARCHAR2,
6661    p_Terr_QualTypeUsgs_Rec       IN  Terr_QualTypeUsgs_Rec_Type  := G_Miss_Terr_QualTypeUsgs_Rec,
6662    p_Terr_Id                     IN  NUMBER)
6663 AS
6664    l_Rec_Counter                 NUMBER;
6665    l_Validate_id                 NUMBER;
6666    l_dummy                       NUMBER := NULL;
6667    l_source_id                   NUMBER;
6668    l_qual_Type_Usg_id            NUMBER;
6669 BEGIN
6670     --dbms_output('Validate_Terr_Qtype_Usage: Entering API');
6671 
6672     -- Initialize the status to success
6673     x_return_status := FND_API.G_RET_STS_SUCCESS;
6674 
6675     -- This block will validate territory
6676     -- qual_Type_Usg_id specified
6677     BEGIN
6678        l_qual_Type_Usg_id  := p_Terr_QualTypeUsgs_Rec.QUAL_TYPE_USG_ID;
6679        --Check the qual_type_usg_id specified is valid
6680        Select 1
6681          into l_dummy
6682          From jtf_terr_usgs_ALL jtu, jtf_qual_type_usgs_ALL jqtu
6683         where jtu.terr_id = p_Terr_Id and
6684               jqtu.source_id = jtu.source_id and
6685               jqtu.qual_type_usg_id = l_qual_Type_Usg_id;
6686 
6687     EXCEPTION
6688        WHEN NO_DATA_FOUND THEN
6689             FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_INVALID_TERR_QTYPE');
6690             FND_MSG_PUB.ADD;
6691             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6692     END;
6693 
6694     -- Validate the territory Id
6695     l_Validate_id := p_Terr_Id;
6696     If p_Terr_Id IS NOT NULL Then
6697        --dbms_output('Validate_Terr_Qtype_Usage: TERR_ID(' || to_char(l_Validate_id) || ')');
6698        If JTF_CTM_UTILITY_PVT.fk_id_is_valid(l_Validate_id, 'TERR_ID', 'JTF_TERR_ALL') <> FND_API.G_TRUE Then
6699           --dbms_output('Validate_Foreign_Key: l_status <> FND_API.G_TRUE');
6700           IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6701              FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_INVALID_FOREIGN_KEY');
6702              FND_MESSAGE.Set_Token('TABLE_NAME', 'JTF_TERR_ALL');
6703              FND_MESSAGE.Set_Token('COLUMN_NAME', 'TERR_ID');
6704              FND_MSG_PUB.ADD;
6705           END IF;
6706           x_Return_Status := FND_API.G_RET_STS_ERROR ;
6707        End If;
6708     End If;
6709 
6710     --
6711     --
6712     /*--  Check for ORG_ID - obsolete: org_id is optional
6713     IF (p_Terr_QualTypeUsgs_Rec.ORG_ID is NULL) OR
6714        (p_Terr_QualTypeUsgs_Rec.ORG_ID = FND_API.G_MISS_NUM) THEN
6715        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6716           FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_COL_VALUE');
6717           FND_MESSAGE.Set_Token('COL_NAME', 'ORG_ID' );
6718           FND_MSG_PUB.ADD;
6719        END IF;
6720        x_Return_Status := FND_API.G_RET_STS_ERROR ;
6721    End If;
6722    */
6723 
6724     --Check created by
6725     IF ( p_Terr_QualTypeUsgs_Rec.CREATED_BY is NULL OR
6726          p_Terr_QualTypeUsgs_Rec.CREATED_BY = FND_API.G_MISS_NUM )  THEN
6727        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6728           FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_COL_VALUE');
6729           FND_MESSAGE.Set_Token('COL_NAME', 'CREATED_BY' );
6730           FND_MSG_PUB.ADD;
6731        END IF;
6732        x_Return_Status := FND_API.G_RET_STS_ERROR ;
6733     End If;
6734 
6735     --Check creation date
6736     If ( p_Terr_QualTypeUsgs_Rec.CREATION_DATE is NULL OR
6737          p_Terr_QualTypeUsgs_Rec.CREATION_DATE = FND_API.G_MISS_DATE ) THEN
6738        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6739           FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_COL_VALUE');
6740           FND_MESSAGE.Set_Token('COL_NAME', 'CREATION_DATE' );
6741           FND_MSG_PUB.ADD;
6742        END IF;
6743        x_Return_Status := FND_API.G_RET_STS_ERROR ;
6744     End If;
6745 
6746     -- Validate last updated by
6747     IF  ( p_Terr_QualTypeUsgs_Rec.LAST_UPDATED_BY is NULL OR
6748           p_Terr_QualTypeUsgs_Rec.LAST_UPDATED_BY = FND_API.G_MISS_NUM) Then
6749         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6750           FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_COL_VALUE');
6751           FND_MESSAGE.Set_Token('COL_NAME', 'LAST_UPDATED_BY' );
6752           FND_MSG_PUB.ADD;
6753        END IF;
6754        x_Return_Status := FND_API.G_RET_STS_ERROR ;
6755     End If;
6756 
6757     -- Check last update date
6758     If ( p_Terr_QualTypeUsgs_Rec.LAST_UPDATE_DATE IS NULL OR
6759          p_Terr_QualTypeUsgs_Rec.LAST_UPDATE_DATE = FND_API.G_MISS_DATE ) THEN
6760        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6761           FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_COL_VALUE');
6762           FND_MESSAGE.Set_Token('COL_NAME', 'LAST_UPDATE_DATE' );
6763           FND_MSG_PUB.ADD;
6764        END IF;
6765        x_Return_Status := FND_API.G_RET_STS_ERROR ;
6766     End If;
6767 
6768     --Check last update login
6769     --If ( p_Terr_QualTypeUsgs_Rec.LAST_UPDATE_LOGIN  is NULL OR
6770     --     p_Terr_QualTypeUsgs_Rec.LAST_UPDATE_LOGIN  = FND_API.G_MISS_NUM )  THEN
6771     --   IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6772     --      FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_COL_VALUE');
6773     --      FND_MESSAGE.Set_Token('COL_NAME', 'LAST_UPDATE_LOGIN' );
6774     --      FND_MSG_PUB.ADD;
6775     --   END IF;
6776     --   x_Return_Status := FND_API.G_RET_STS_ERROR ;
6777     --End If;
6778 
6779     --
6780     FND_MSG_PUB.Count_And_Get( p_count => x_msg_count,
6781                                p_data  => x_msg_data);
6782 EXCEPTION
6783   --
6784     WHEN FND_API.G_EXC_ERROR THEN
6785          --dbms_output('Validate_Terr_Qtype_Usage: FND_API.G_EXC_ERROR');
6786          x_return_status := FND_API.G_RET_STS_ERROR ;
6787          FND_MSG_PUB.Count_And_Get
6788          (  P_count          =>   x_msg_count,
6789             P_data           =>   x_msg_data
6790          );
6791 
6792     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6793          --dbms_output('Validate_Terr_Qtype_Usage: FND_API.G_EXC_UNEXPECTED_ERROR');
6794          X_return_status                   := FND_API.G_RET_STS_UNEXP_ERROR;
6795          FND_MSG_PUB.Count_And_Get
6796          (  P_count          =>   x_msg_count,
6797             P_data           =>   x_msg_data
6798          );
6799 
6800     WHEN OTHERS THEN
6801          --dbms_output.put_line('Validate_Terr_Qtype_Usage: OTHERS - ' || SQLERRM);
6802          X_return_status                    := FND_API.G_RET_STS_UNEXP_ERROR;
6803 
6804          FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_UNEXPECTED_ERROR');
6805          FND_MESSAGE.Set_Token('PROC_NAME', 'Validate_Terr_Qtype_Usage' );
6806          FND_MESSAGE.Set_Token('ERROR', sqlerrm );
6807          FND_MSG_PUB.ADD;
6808          FND_MSG_PUB.Count_And_Get
6809          (  P_count          =>   x_msg_count,
6810             P_data           =>   x_msg_data
6811          );
6812   --
6813   END Validate_Terr_Qtype_Usage;
6814 
6815 /* Function used in JTF_TERR_VALUES_DESC_V to return
6816 ** descriptive values for ids and lookup_codes
6817 */
6818 PROCEDURE Validate_terr_Value
6819     (p_init_msg_list               IN           VARCHAR2              := FND_API.G_FALSE,
6820      x_Return_Status               OUT NOCOPY   VARCHAR2,
6821      x_msg_count                   OUT NOCOPY   NUMBER,
6822      x_msg_data                    OUT NOCOPY   VARCHAR2,
6823      p_convert_to_id_flag          IN           VARCHAR2,
6824      p_display_type                IN           VARCHAR2,
6825      p_display_sql                 IN           VARCHAR2              := FND_API.G_MISS_CHAR,
6826      p_terr_value1                 IN           VARCHAR2,
6827      p_terr_value2                 IN           VARCHAR2              :=  FND_API.G_MISS_CHAR )
6828 IS
6829     query_str       VARCHAR2(1000);
6830     value_desc      VARCHAR2(1000);
6831     l_terr_value1    VARCHAR2(360);
6832     l_terr_value2    VARCHAR2(360);
6833 
6834 BEGIN
6835     -- Initialize the status to success
6836     x_return_status := FND_API.G_RET_STS_SUCCESS;
6837 
6838     IF ( p_display_sql IS NOT NULL AND p_display_sql <> FND_API.G_MISS_CHAR ) THEN
6839         query_str := p_display_sql;
6840         l_terr_value1 := p_terr_value1;
6841         l_terr_value2 := p_terr_value2;
6842 
6843         IF (p_display_type IN ('CHAR_2IDS', 'DEP_2FIELDS_CHAR_2IDS', 'DEP_3FIELDS_CHAR_3IDS')) THEN
6844             query_str := p_display_sql;
6845         /* check if value is NUMBER or VARCHAR2 */
6846         ELSIF (  ( p_display_type = 'CHAR' AND  p_convert_to_id_flag = 'Y' )
6847                OR  p_display_type = 'NUMERIC'
6848                OR  p_display_type = 'INTEREST_TYPE'
6849                OR  p_display_type = 'COMPETENCE' ) THEN
6850 
6851             query_str := query_str || ' TO_NUMBER(:terr_value)' ;
6852         ELSE
6853             query_str := query_str || ' :terr_value1' ;
6854         END IF;
6855 
6856         query_str := query_str || ' AND rownum < 2' ;
6857 
6858         IF (p_display_type IN ('CHAR_2IDS', 'DEP_2FIELDS_CHAR_2IDS', 'DEP_3FIELDS_CHAR_3IDS')) THEN
6859             EXECUTE IMMEDIATE query_str
6860             INTO value_desc
6861             USING l_terr_value1, l_terr_value2;
6862         ELSE
6863             EXECUTE IMMEDIATE query_str
6864             INTO value_desc
6865             USING l_terr_value1;
6866         END IF;
6867 
6868     END IF; -- p_display_sql IS NOT NULL
6869 
6870 EXCEPTION
6871     WHEN NO_DATA_FOUND THEN
6872         X_return_status   := FND_API.G_RET_STS_ERROR;
6873         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6874             FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_INVALID_TERR_VALUE');
6875             FND_MSG_PUB.ADD;
6876         END IF;
6877 
6878     WHEN OTHERS THEN
6879          X_return_status                    := FND_API.G_RET_STS_UNEXP_ERROR;
6880          FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_UNEXPECTED_ERROR');
6881          FND_MESSAGE.Set_Token('PROC_NAME', 'Validate_terr_Value' );
6882          FND_MESSAGE.Set_Token('ERROR', sqlerrm );
6883          FND_MSG_PUB.ADD;
6884          FND_MSG_PUB.Count_And_Get
6885          (  P_count          =>   x_msg_count,
6886             P_data           =>   x_msg_data
6887          );
6888 
6889 
6890 END Validate_terr_Value;
6891 
6892 ---------------------------------------------------------------------
6893 --          Validate the Territory Qualifer Values passed in
6894 ---------------------------------------------------------------------
6895 -- Columns Validated
6896 --         Make sure the values are in the right columns as per the
6897 --         qualifer setup
6898 --         Eg:
6899 --               If the qualifer, diplay_type    = 'CHAR' and
6900 --                                col1_data_type =  'NUMBER'
6901 --               then make sure the ID is passed in LOW_VALUE_CHAR_ID
6902 --
6903 --
6904 ---------------------------------------------------------------------
6905 PROCEDURE Validate_terr_Value_Rec
6906   (p_init_msg_list               IN  VARCHAR2              := FND_API.G_FALSE,
6907    x_Return_Status               OUT NOCOPY VARCHAR2,
6908    x_msg_count                   OUT NOCOPY NUMBER,
6909    x_msg_data                    OUT NOCOPY VARCHAR2,
6910    p_Terr_Qual_Id                IN  NUMBER,
6911    p_Terr_Value_Rec              IN  Terr_Values_Rec_Type  := G_Miss_Terr_Values_Rec)
6912 AS
6913    Cursor C_QualDef1 IS
6914           -- Get the qualifier usage related information
6915           select jqu.qual_usg_id,
6916                  jqu.qual_col1_datatype,
6917                  jqu.display_type,
6918                  jqu.convert_to_id_flag,
6919                  jqu.display_sql1,
6920                  jqu.display_sql2,
6921                  jqu.display_sql3,
6922                  html_lov_sql1
6923             from jtf_qual_usgs_ALL jqu, jtf_terr_qual_ALL jtq
6924            where jqu.qual_usg_id = jtq.qual_Usg_Id and
6925 		         jqu.org_id = jtq.org_id AND
6926                  jtq.terr_qual_id = p_Terr_Qual_Id;
6927 
6928    l_display_type       VARCHAR2(30);
6929    l_qual_col1_datatype VARCHAR2(30);
6930    l_convert_to_id_flag VARCHAR2(01);
6931    l_display_sql1        VARCHAR2(31000);
6932    l_display_sql2        VARCHAR2(31000);
6933    l_display_sql3        VARCHAR2(31000);
6934    l_html_lov_sql1       VARCHAR2(31000);
6935    l_qual_usg_id         VARCHAR2(20);
6936 BEGIN
6937     --dbms_output('Validate_terr_Value_Rec: - terr_qual_id' || to_char(p_Terr_Qual_Id) );
6938 
6939     -- Initialize the status to success
6940     x_return_status := FND_API.G_RET_STS_SUCCESS;
6941 
6942     OPEN   C_QualDef1;
6943     FETCH  C_QualDef1
6944     INTO l_qual_usg_id,
6945          l_qual_col1_datatype,
6946          l_display_type,
6947          l_convert_to_id_flag,
6948          l_display_sql1,
6949          l_display_sql2,
6950          l_display_sql3,
6951          l_html_lov_sql1;
6952     CLOSE  C_QualDef1;
6953 
6954     --dbms_output('l_display_type - ' || l_display_type );
6955     --dbms_output('l_qual_col1_datatype - ' || l_qual_col1_datatype );
6956     --dbms_output('l_convert_to_id_flag - ' || l_convert_to_id_flag );
6957 
6958     /*-- Check for ORG_ID - obsolete: org_id is optional
6959     IF (p_Terr_Value_Rec.ORG_ID is NULL) OR
6960        (p_Terr_Value_Rec.ORG_ID = FND_API.G_MISS_NUM) THEN
6961        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6962           FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_COL_VALUE');
6963           FND_MESSAGE.Set_Token('COL_NAME', 'ORG_ID' );
6964           FND_MSG_PUB.ADD;
6965        END IF;
6966        x_Return_Status := FND_API.G_RET_STS_ERROR ;
6967    End If;
6968    */
6969 
6970 
6971    /* ----- ARPATEL 041101 Bug#1508750 FIX -----------------------------------
6972 
6973    If ( p_Terr_Value_Rec.ID_USED_FLAG IS NULL  OR
6974         p_Terr_Value_Rec.ID_USED_FLAG = FND_API.G_MISS_CHAR ) Then
6975       IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6976           FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_COL_VALUE');
6977           FND_MESSAGE.Set_Token('COL_NAME', 'ID_USED_FLAG' );
6978           FND_MSG_PUB.ADD;
6979        END IF;
6980        x_Return_Status := FND_API.G_RET_STS_ERROR ;
6981    End If;
6982    -------------------------------------------------------------------------*/
6983 
6984 
6985     -- Validate last updated by
6986     IF  ( p_Terr_Value_Rec.LAST_UPDATED_BY is NULL OR
6987           p_Terr_Value_Rec.LAST_UPDATED_BY = FND_API.G_MISS_NUM) Then
6988         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6989           FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_COL_VALUE');
6990           FND_MESSAGE.Set_Token('COL_NAME', 'LAST_UPDATED_BY' );
6991           FND_MSG_PUB.ADD;
6992        END IF;
6993        x_Return_Status := FND_API.G_RET_STS_ERROR ;
6994     End If;
6995 
6996     -- Check last update date
6997     If ( p_Terr_Value_Rec.LAST_UPDATE_DATE IS NULL OR
6998          p_Terr_Value_Rec.LAST_UPDATE_DATE = FND_API.G_MISS_DATE ) THEN
6999        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
7000           FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_COL_VALUE');
7001           FND_MESSAGE.Set_Token('COL_NAME', 'LAST_UPDATE_DATE' );
7002           FND_MSG_PUB.ADD;
7003        END IF;
7004        x_Return_Status := FND_API.G_RET_STS_ERROR ;
7005     End If;
7006 
7007     --Check last update login
7008     If ( p_Terr_Value_Rec.LAST_UPDATE_LOGIN  is NULL OR
7009          p_Terr_Value_Rec.LAST_UPDATE_LOGIN  = FND_API.G_MISS_NUM )  THEN
7010        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
7011           FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_MISSING_COL_VALUE');
7012           FND_MESSAGE.Set_Token('COL_NAME', 'LAST_UPDATE_LOGIN' );
7013           FND_MSG_PUB.ADD;
7014        END IF;
7015        x_Return_Status := FND_API.G_RET_STS_ERROR ;
7016     End If;
7017 
7018     -- Check the operator.
7019     /*  All the qualifiers are divided into four groups based on their
7020         display type and html_lov_sql1.  Below logic is to find the group,
7021         and retrun the error status if the comparison operator doesnot match.
7022 
7023         ----------------------------
7024         Group       Operators Supported
7025         ----------------------------
7026         GROUP1 	    =
7027         GROUP2 	    =, BETWEEN, LIKE
7028         GROUP3 	    =, BETWEEN
7029         GROUP4 	    =
7030         -----------------------------
7031 
7032     */
7033     IF ( ( (l_display_type = 'CHAR_2IDS')
7034             OR (l_display_type = 'CHAR')
7035             OR (l_display_type = 'NUMERIC') )
7036        AND (l_html_lov_sql1 IS NOT NULL)) THEN
7037 
7038         --  groupType = "GROUP1";
7039         IF ( p_Terr_Value_Rec.COMPARISON_OPERATOR <> '=' ) THEN
7040 
7041             IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
7042 
7043                 FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_INVALID_TERR_VALUE');
7044                 FND_MSG_PUB.ADD;
7045 
7046             END IF;
7047 
7048             x_Return_Status := FND_API.G_RET_STS_ERROR ;
7049 
7050         END IF;
7051 
7052     ELSIF (  (l_display_type = 'CHAR') AND ( l_html_lov_sql1 IS NUll )) THEN
7053 
7054         /* for DUNS qualifier and Registry_ID only "=" should be allowed 3402736 */
7055         IF((l_qual_usg_id = '-1120') OR (l_qual_usg_id = '-1129')) THEN
7056 
7057             --   groupType = "GROUP4";
7058             IF ( p_Terr_Value_Rec.COMPARISON_OPERATOR <> '=' ) THEN
7059 
7060                 IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
7061 
7062                     FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_INVALID_TERR_VALUE');
7063                     FND_MSG_PUB.ADD;
7064 
7065                 END IF;
7066 
7067                 x_Return_Status := FND_API.G_RET_STS_ERROR ;
7068 
7069             END IF;
7070 
7071         ELSE
7072             --  groupType = "GROUP2";
7073             IF ( p_Terr_Value_Rec.COMPARISON_OPERATOR <> '='
7074                 AND p_Terr_Value_Rec.COMPARISON_OPERATOR <> 'LIKE'
7075                 AND p_Terr_Value_Rec.COMPARISON_OPERATOR <> 'BETWEEN' ) THEN
7076 
7077                 IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
7078 
7079                     FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_INVALID_TERR_VALUE');
7080                     FND_MSG_PUB.ADD;
7081 
7082                 END IF;
7083 
7084                 x_Return_Status := FND_API.G_RET_STS_ERROR ;
7085 
7086             END IF;
7087 
7088         END IF;
7089 
7090     ELSIF ((  (l_display_type = 'NUMERIC') OR (l_display_type = 'CURRENCY') )
7091           AND ( l_html_lov_sql1 IS NOT NULL)) THEN
7092 
7093         -- groupType = "GROUP3";
7094         IF ( p_Terr_Value_Rec.COMPARISON_OPERATOR <> '='
7095             AND p_Terr_Value_Rec.COMPARISON_OPERATOR <> 'BETWEEN') THEN
7096 
7097             IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
7098 
7099                 FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_INVALID_TERR_VALUE');
7100                 FND_MSG_PUB.ADD;
7101 
7102             END IF;
7103 
7104             x_Return_Status := FND_API.G_RET_STS_ERROR ;
7105 
7106         END IF;
7107 
7108     ELSE
7109         -- Display Types : INTEREST_TYPE,
7110         --                  DEP_2FIELDS
7111         --                  DEP_2FIELDS_1CHAR_1ID
7112         --                  DEP_2FIELDS_CHAR_2IDS
7113         --                  DEP_3FIELDS_CHAR_3IDS
7114         -- groupType = "GROUP4";
7115         IF ( p_Terr_Value_Rec.COMPARISON_OPERATOR <> '=' ) THEN
7116 
7117             IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
7118 
7119                 FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_INVALID_TERR_VALUE');
7120                 FND_MSG_PUB.ADD;
7121 
7122             END IF;
7123 
7124             x_Return_Status := FND_API.G_RET_STS_ERROR ;
7125 
7126         END IF;
7127 
7128     END IF;
7129 
7130     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7131         RAISE FND_API.G_EXC_ERROR;
7132     END IF;
7133 
7134     --dbms_output('Before the main validation.');
7135     ---------- Start Qualifier Value Validation. --------------
7136     -- Character Type
7137     IF ( l_display_type = 'CHAR' AND
7138          ( l_convert_to_id_flag = 'N' or l_convert_to_id_flag is NULL ) ) THEN
7139 
7140         IF (   ( p_Terr_Value_Rec.LOW_VALUE_CHAR IS NULL or
7141                  p_Terr_Value_Rec.LOW_VALUE_CHAR = FND_API.G_MISS_CHAR  ) OR
7142                  p_Terr_Value_Rec.ID_USED_FLAG   = 'Y'  OR
7143                ( p_Terr_Value_Rec.COMPARISON_OPERATOR IS NULL OR
7144                  p_Terr_Value_Rec.COMPARISON_OPERATOR = FND_API.G_MISS_CHAR ) OR
7145                ( p_Terr_Value_Rec.LOW_VALUE_CHAR_ID IS NOT NULL and
7146                  p_Terr_Value_Rec.LOW_VALUE_CHAR_ID <> FND_API.G_MISS_NUM ) OR
7147                ( p_Terr_Value_Rec.LOW_VALUE_NUMBER IS NOT NULL  and
7148                  p_Terr_Value_Rec.LOW_VALUE_NUMBER <> FND_API.G_MISS_NUM ) OR
7149                ( p_Terr_Value_Rec.HIGH_VALUE_NUMBER IS NOT NULL and
7150                  p_Terr_Value_Rec.HIGH_VALUE_NUMBER <> FND_API.G_MISS_NUM ) OR
7151                ( p_Terr_Value_Rec.INTEREST_TYPE_ID IS NOT NULL and
7152                  p_Terr_Value_Rec.INTEREST_TYPE_ID <> FND_API.G_MISS_NUM ) ) THEN
7153 
7154                IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
7155                   FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_INVALID_TERR_VALUE');
7156                   FND_MSG_PUB.ADD;
7157                END IF;
7158 
7159                x_Return_Status := FND_API.G_RET_STS_ERROR ;
7160         ELSE
7161             IF  ( p_Terr_Value_Rec.LOW_VALUE_CHAR IS NOT NULL AND
7162                   p_Terr_Value_Rec.LOW_VALUE_CHAR <> FND_API.G_MISS_CHAR  ) THEN
7163                 --Validate the value being passed.
7164                 Validate_terr_Value(
7165                     p_init_msg_list      => p_init_msg_list,
7166                     x_Return_Status      => x_Return_Status,
7167                     x_msg_count          => x_msg_count,
7168                     x_msg_data           => x_msg_data,
7169                     p_convert_to_id_flag => l_convert_to_id_flag,
7170                     p_display_type       => l_display_type,
7171                     p_display_sql        => l_display_sql1,
7172                     p_terr_value1        => p_Terr_Value_Rec.LOW_VALUE_CHAR);
7173 
7174                  IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7175                     RAISE FND_API.G_EXC_ERROR;
7176                  END IF;
7177 
7178              END IF;
7179         END IF;
7180     -- Numeric with CHAR dsiplay as in Customer Name
7181     ElsIf ( l_display_type = 'CHAR' AND
7182             ( l_convert_to_id_flag = 'Y' or l_convert_to_id_flag is NULL ) ) Then
7183         --dbms_output('Inside CHAR');
7184         -- If the Id is not specified in low_value_char_id or
7185         -- id_used_flag is not null or the operation is not
7186         -- specified, then flag exception
7187         If  (  (p_Terr_Value_Rec.LOW_VALUE_CHAR_ID   IS NULL or
7188                 p_Terr_Value_Rec.LOW_VALUE_CHAR_ID   = FND_API.G_MISS_NUM ) OR
7189                (p_Terr_Value_Rec.COMPARISON_OPERATOR IS NULL OR
7190                 p_Terr_Value_Rec.COMPARISON_OPERATOR = FND_API.G_MISS_CHAR ) OR
7191                 -- Description may be null
7192                 -- 08/08/00 Change jdochert
7193                 --p_Terr_Value_Rec.LOW_VALUE_CHAR      = FND_API.G_MISS_CHAR OR
7194                (p_Terr_Value_Rec.ID_USED_FLAG        IS NULL OR
7195                 p_Terr_Value_Rec.ID_USED_FLAG        =  FND_API.G_MISS_CHAR OR
7196                 p_Terr_Value_Rec.ID_USED_FLAG        <> 'Y' ) OR
7197                (p_Terr_Value_Rec.LOW_VALUE_NUMBER    IS NOT NULL  and
7198                 p_Terr_Value_Rec.LOW_VALUE_NUMBER    <> FND_API.G_MISS_NUM ) OR
7199                (p_Terr_Value_Rec.HIGH_VALUE_NUMBER   IS NOT NULL  and
7200                 p_Terr_Value_Rec.LOW_VALUE_NUMBER    <> FND_API.G_MISS_NUM ) OR
7201                (p_Terr_Value_Rec.INTEREST_TYPE_ID    IS NOT NULL and
7202                 p_Terr_Value_Rec.INTEREST_TYPE_ID    <> FND_API.G_MISS_NUM ) ) THEN
7203 
7204                IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
7205                   FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_INVALID_TERR_VALUE');
7206                   FND_MSG_PUB.ADD;
7207                END IF;
7208 
7209                x_Return_Status := FND_API.G_RET_STS_ERROR ;
7210 
7211         ELSE
7212             IF  ( p_Terr_Value_Rec.LOW_VALUE_CHAR_ID IS NOT NULL AND
7213                   p_Terr_Value_Rec.LOW_VALUE_CHAR_ID <> FND_API.G_MISS_NUM  ) THEN
7214 
7215                 --Validate the value being passed.
7216                 Validate_terr_Value(
7217                     p_init_msg_list      => p_init_msg_list,
7218                     x_Return_Status      => x_Return_Status,
7219                     x_msg_count          => x_msg_count,
7220                     x_msg_data           => x_msg_data,
7221                     p_convert_to_id_flag => l_convert_to_id_flag,
7222                     p_display_type       => l_display_type,
7223                     p_display_sql        => l_display_sql1,
7224                     p_terr_value1        => p_Terr_Value_Rec.LOW_VALUE_CHAR_ID);
7225 
7226                  IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7227                     RAISE FND_API.G_EXC_ERROR;
7228                  END IF;
7229 
7230              END IF;
7231         END IF;
7232 
7233     ElsIf ( l_display_type = 'NUMERIC' ) Then
7234 
7235         --dbms_output('Inside NUMERIC');
7236         -- Check whether the atleast LOW_VALUE_NUMBER, operator
7237         -- is specified
7238         If (  (p_Terr_Value_Rec.LOW_VALUE_NUMBER    IS NULL OR
7239                p_Terr_Value_Rec.LOW_VALUE_NUMBER    =  FND_API.G_MISS_NUM ) OR
7240               (p_Terr_Value_Rec.COMPARISON_OPERATOR IS NULL OR
7241                p_Terr_Value_Rec.COMPARISON_OPERATOR = FND_API.G_MISS_CHAR ) ) THEN
7242 
7243                IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
7244                   FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_INVALID_TERR_VALUE');
7245                   FND_MSG_PUB.ADD;
7246                END IF;
7247 
7248                x_Return_Status := FND_API.G_RET_STS_ERROR ;
7249 
7250 /*        ELSIF -- No values validation is required for 'NUMERIC' data type.
7251 */
7252          END IF; -- l_display_type = 'CHAR'
7253 
7254     ElsIf ( l_display_type = 'CURRENCY' ) Then
7255 
7256         --dbms_output('Inside CURRENCY');
7257         -- Check whether the atleast LOW_VALUE_NUMBER, operator
7258         -- is specified
7259         If (  (p_Terr_Value_Rec.LOW_VALUE_NUMBER IS NULL OR
7260                p_Terr_Value_Rec.LOW_VALUE_NUMBER = FND_API.G_MISS_NUM ) OR
7261               (p_Terr_Value_Rec.COMPARISON_OPERATOR IS NULL OR
7262                p_Terr_Value_Rec.COMPARISON_OPERATOR = FND_API.G_MISS_CHAR ) OR
7263               (p_Terr_Value_Rec.CURRENCY_CODE       IS NULL OR
7264                p_Terr_Value_Rec.CURRENCY_CODE       = FND_API.G_MISS_CHAR ) OR
7265               (p_Terr_Value_Rec.LOW_VALUE_CHAR    IS NOT NULL  and
7266                p_Terr_Value_Rec.LOW_VALUE_CHAR    <> FND_API.G_MISS_CHAR ) OR
7267               (p_Terr_Value_Rec.INTEREST_TYPE_ID    IS NOT NULL and
7268                p_Terr_Value_Rec.INTEREST_TYPE_ID    <> FND_API.G_MISS_NUM ) ) THEN
7269 
7270                IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
7271                   FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_INVALID_TERR_VALUE');
7272                   FND_MSG_PUB.ADD;
7273                END IF;
7274 
7275                x_Return_Status := FND_API.G_RET_STS_ERROR ;
7276         --ELSIF
7277         -- No validations required for CURRENCY display type. Display sql1 is not defined for this.
7278 
7279         END IF;
7280 
7281     ElsIf ( l_display_type = 'INTEREST_TYPE' ) Then
7282 
7283         --dbms_output('Inside INTEREST_TYPE');
7284         -- Check whether the atleast LOW_VALUE_NUMBER, operator
7285         -- is specified
7286         If (  (p_Terr_Value_Rec.INTEREST_TYPE_ID IS NULL OR
7287                p_Terr_Value_Rec.INTEREST_TYPE_ID = FND_API.G_MISS_NUM ) OR
7288               (p_Terr_Value_Rec.COMPARISON_OPERATOR IS NULL OR
7289                p_Terr_Value_Rec.COMPARISON_OPERATOR = FND_API.G_MISS_CHAR ) OR
7290               (p_Terr_Value_Rec.LOW_VALUE_NUMBER    IS NOT NULL  and
7291                p_Terr_Value_Rec.LOW_VALUE_NUMBER    <> FND_API.G_MISS_NUM ) OR
7292               (p_Terr_Value_Rec.LOW_VALUE_CHAR    IS NOT NULL  and
7293                p_Terr_Value_Rec.LOW_VALUE_CHAR    <> FND_API.G_MISS_CHAR ) )  THEN
7294 
7295                --dbms_output('Error INTEREST_TYPE');
7296                IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
7297                   FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_INVALID_TERR_VALUE');
7298                   FND_MSG_PUB.ADD;
7299                END IF;
7300 
7301                x_Return_Status := FND_API.G_RET_STS_ERROR ;
7302 
7303         ELSE
7304             -- Validate the Intrest Type ID being passed if it is not null.
7305             IF  ( p_Terr_Value_Rec.INTEREST_TYPE_ID IS NOT NULL AND
7306                  p_Terr_Value_Rec.INTEREST_TYPE_ID <> FND_API.G_MISS_NUM  ) THEN
7307 
7308                 --Validate the value being passed.
7309                 Validate_terr_Value(
7310                     p_init_msg_list      => p_init_msg_list,
7311                     x_Return_Status      => x_Return_Status,
7312                     x_msg_count          => x_msg_count,
7313                     x_msg_data           => x_msg_data,
7314                     p_convert_to_id_flag => l_convert_to_id_flag,
7315                     p_display_type       => l_display_type,
7316                     p_display_sql        => l_display_sql1,
7317                     p_terr_value1        => p_Terr_Value_Rec.INTEREST_TYPE_ID);
7318 
7319                  IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7320                     RAISE FND_API.G_EXC_ERROR;
7321                  END IF;
7322 
7323             END IF ;
7324 
7325             IF  ( p_Terr_Value_Rec.PRIMARY_INTEREST_CODE_ID IS NOT NULL AND
7326                  p_Terr_Value_Rec.PRIMARY_INTEREST_CODE_ID <> FND_API.G_MISS_NUM  ) THEN
7327 
7328                 --Validate the value being passed.
7329                 Validate_terr_Value(
7330                     p_init_msg_list      => p_init_msg_list,
7331                     x_Return_Status      => x_Return_Status,
7332                     x_msg_count          => x_msg_count,
7333                     x_msg_data           => x_msg_data,
7334                     p_convert_to_id_flag => l_convert_to_id_flag,
7335                     p_display_type       => l_display_type,
7336                     p_display_sql        => l_display_sql2,
7337                     p_terr_value1        => p_Terr_Value_Rec.PRIMARY_INTEREST_CODE_ID);
7338 
7339                  IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7340                     RAISE FND_API.G_EXC_ERROR;
7341                  END IF;
7342 
7343             END IF ;
7344             -- Validate SECONDARY_INTEREST_CODE_ID value if it is not null.
7345             IF  ( p_Terr_Value_Rec.SECONDARY_INTEREST_CODE_ID IS NOT NULL AND
7346                  p_Terr_Value_Rec.SECONDARY_INTEREST_CODE_ID <> FND_API.G_MISS_NUM  ) THEN
7347 
7348                 --Validate the value being passed.
7349                 Validate_terr_Value(
7350                     p_init_msg_list      => p_init_msg_list,
7351                     x_Return_Status      => x_Return_Status,
7352                     x_msg_count          => x_msg_count,
7353                     x_msg_data           => x_msg_data,
7354                     p_convert_to_id_flag => l_convert_to_id_flag,
7355                     p_display_type       => l_display_type,
7356                     p_display_sql        => l_display_sql3,
7357                     p_terr_value1        => p_Terr_Value_Rec.SECONDARY_INTEREST_CODE_ID);
7358 
7359                  IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7360                     RAISE FND_API.G_EXC_ERROR;
7361                  END IF;
7362 
7363             END IF  ;
7364          END IF;
7365     ElsIf ( l_display_type = 'CHAR_2IDS' ) Then
7366         --
7367         If (  (p_Terr_Value_Rec.VALUE1_ID IS NULL OR
7368                p_Terr_Value_Rec.VALUE1_ID = FND_API.G_MISS_NUM ) OR
7369               (p_Terr_Value_Rec.VALUE2_ID IS NULL OR
7370                p_Terr_Value_Rec.VALUE2_ID = FND_API.G_MISS_NUM ) OR
7371               (p_Terr_Value_Rec.COMPARISON_OPERATOR IS NULL OR
7372                p_Terr_Value_Rec.COMPARISON_OPERATOR = FND_API.G_MISS_CHAR ) OR
7373               (p_Terr_Value_Rec.LOW_VALUE_NUMBER    IS NOT NULL  and
7374                p_Terr_Value_Rec.LOW_VALUE_NUMBER    <> FND_API.G_MISS_NUM ) OR
7375               (p_Terr_Value_Rec.LOW_VALUE_CHAR    IS NOT NULL  and
7376                p_Terr_Value_Rec.LOW_VALUE_CHAR    <> FND_API.G_MISS_CHAR ) )  THEN
7377 
7378                --dbms_output('Error INTEREST_TYPE');
7379                IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
7380                   FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_INVALID_TERR_VALUE');
7381                   FND_MSG_PUB.ADD;
7382                END IF;
7383 
7384                x_Return_Status := FND_API.G_RET_STS_ERROR ;
7385 
7386         ELSIF  ( p_Terr_Value_Rec.VALUE1_ID IS NOT NULL AND
7387                  p_Terr_Value_Rec.VALUE1_ID <> FND_API.G_MISS_NUM AND
7388                  p_Terr_Value_Rec.VALUE2_ID IS NOT NULL AND
7389                  p_Terr_Value_Rec.VALUE2_ID <> FND_API.G_MISS_NUM ) THEN
7390 
7391                 --Validate the value being passed.
7392                 Validate_terr_Value(
7393                     p_init_msg_list      => p_init_msg_list,
7394                     x_Return_Status      => x_Return_Status,
7395                     x_msg_count          => x_msg_count,
7396                     x_msg_data           => x_msg_data,
7397                     p_convert_to_id_flag => l_convert_to_id_flag,
7398                     p_display_type       => l_display_type,
7399                     p_display_sql        => l_display_sql1,
7400                     p_terr_value1        => p_Terr_Value_Rec.VALUE1_ID,
7401                     p_terr_value2        => p_Terr_Value_Rec.VALUE2_ID);
7402 
7403                  IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7404                     RAISE FND_API.G_EXC_ERROR;
7405                  END IF;
7406 
7407         END IF; -- l_display_type = 'CHAR_2IDS'
7408 
7409     ElsIf ( l_display_type = 'DEP_2FIELDS' ) Then
7410 
7411         If (  (p_Terr_Value_Rec.VALUE1_ID IS NULL OR
7412                p_Terr_Value_Rec.VALUE1_ID = FND_API.G_MISS_NUM ) OR
7413               (p_Terr_Value_Rec.COMPARISON_OPERATOR IS NULL OR
7414                p_Terr_Value_Rec.COMPARISON_OPERATOR = FND_API.G_MISS_CHAR ) )  THEN
7415 
7416                --dbms_output('Error INTEREST_TYPE');
7417                IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
7418                   FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_INVALID_TERR_VALUE');
7419                   FND_MSG_PUB.ADD;
7420                END IF;
7421 
7422                x_Return_Status := FND_API.G_RET_STS_ERROR ;
7423 
7424         ELSE
7425             IF  ( p_Terr_Value_Rec.VALUE1_ID IS NOT NULL AND
7426                   p_Terr_Value_Rec.VALUE1_ID <> FND_API.G_MISS_NUM ) THEN
7427 
7428                 --Validate the value being passed.
7429                 Validate_terr_Value(
7430                     p_init_msg_list      => p_init_msg_list,
7431                     x_Return_Status      => x_Return_Status,
7432                     x_msg_count          => x_msg_count,
7433                     x_msg_data           => x_msg_data,
7434                     p_convert_to_id_flag => l_convert_to_id_flag,
7435                     p_display_type       => l_display_type,
7436                     p_display_sql        => l_display_sql1,
7437                     p_terr_value1        => p_Terr_Value_Rec.VALUE1_ID);
7438 
7439                  IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7440                     RAISE FND_API.G_EXC_ERROR;
7441                  END IF;
7442 
7443             END IF;
7444 
7445             IF  ( p_Terr_Value_Rec.VALUE2_ID IS NOT NULL AND
7446                   p_Terr_Value_Rec.VALUE2_ID <> FND_API.G_MISS_NUM  ) THEN
7447 
7448                 --Validate the value being passed.
7449                 Validate_terr_Value(
7450                     p_init_msg_list      => p_init_msg_list,
7451                     x_Return_Status      => x_Return_Status,
7452                     x_msg_count          => x_msg_count,
7453                     x_msg_data           => x_msg_data,
7454                     p_convert_to_id_flag => l_convert_to_id_flag,
7455                     p_display_type       => l_display_type,
7456                     p_display_sql        => l_display_sql2,
7457                     p_terr_value1        => p_Terr_Value_Rec.VALUE2_ID);
7458 
7459                  IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7460                     RAISE FND_API.G_EXC_ERROR;
7461                  END IF;
7462 
7463             END IF;
7464         END IF; -- l_display_type = 'DEP_2FIELDS'
7465 
7466     ElsIf ( l_display_type = 'DEP_2FIELDS_CHAR_2IDS' ) Then
7467 
7468         IF (  (p_Terr_Value_Rec.VALUE1_ID IS NULL OR
7469                p_Terr_Value_Rec.VALUE1_ID = FND_API.G_MISS_NUM ) OR
7470               (p_Terr_Value_Rec.COMPARISON_OPERATOR IS NULL OR
7471                p_Terr_Value_Rec.COMPARISON_OPERATOR = FND_API.G_MISS_CHAR ) )  THEN
7472 
7473                IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
7474                   FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_INVALID_TERR_VALUE');
7475                   FND_MSG_PUB.ADD;
7476                END IF;
7477                x_Return_Status := FND_API.G_RET_STS_ERROR ;
7478         ELSE
7479             IF  ( p_Terr_Value_Rec.VALUE1_ID IS NOT NULL AND
7480                   p_Terr_Value_Rec.VALUE1_ID <> FND_API.G_MISS_NUM ) THEN
7481 
7482                 --Validate the value being passed.
7483                 Validate_terr_Value(
7484                     p_init_msg_list      => p_init_msg_list,
7485                     x_Return_Status      => x_Return_Status,
7486                     x_msg_count          => x_msg_count,
7487                     x_msg_data           => x_msg_data,
7488                     p_convert_to_id_flag => l_convert_to_id_flag,
7489                     p_display_type       => l_display_type,
7490                     p_display_sql        => l_display_sql1,
7491                     p_terr_value1        => p_Terr_Value_Rec.VALUE1_ID,
7492                     p_terr_value2        => -9999 );
7493 
7494                  IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7495                     RAISE FND_API.G_EXC_ERROR;
7496                  END IF;
7497 
7498             END IF;
7499 
7500             IF  ( p_Terr_Value_Rec.VALUE2_ID IS NOT NULL AND
7501                   p_Terr_Value_Rec.VALUE2_ID <> FND_API.G_MISS_NUM  ) THEN
7502 
7503                 --Validate the value being passed.
7504                 Validate_terr_Value(
7505                     p_init_msg_list      => p_init_msg_list,
7506                     x_Return_Status      => x_Return_Status,
7507                     x_msg_count          => x_msg_count,
7508                     x_msg_data           => x_msg_data,
7509                     p_convert_to_id_flag => l_convert_to_id_flag,
7510                     p_display_type       => l_display_type,
7511                     p_display_sql        => l_display_sql2,
7512                     p_terr_value1        => p_Terr_Value_Rec.VALUE1_ID,
7513                     p_terr_value2        => p_Terr_Value_Rec.VALUE2_ID);
7514 
7515                  IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7516                     RAISE FND_API.G_EXC_ERROR;
7517                  END IF;
7518 
7519             END IF;
7520         END IF; -- l_display_type = 'DEP_2FIELDS_CHAR_2IDS'
7521 
7522     ElsIf ( l_display_type = 'DEP_3FIELDS_CHAR_3IDS' ) Then
7523 
7524         IF (  (p_Terr_Value_Rec.VALUE1_ID IS NULL OR
7525                p_Terr_Value_Rec.VALUE1_ID = FND_API.G_MISS_NUM ) OR
7526               (p_Terr_Value_Rec.COMPARISON_OPERATOR IS NULL OR
7527                p_Terr_Value_Rec.COMPARISON_OPERATOR = FND_API.G_MISS_CHAR ) )  THEN
7528 
7529                IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
7530                   FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_INVALID_TERR_VALUE');
7531                   FND_MSG_PUB.ADD;
7532                END IF;
7533                x_Return_Status := FND_API.G_RET_STS_ERROR ;
7534         ELSE
7535             IF  ( p_Terr_Value_Rec.VALUE1_ID IS NOT NULL AND
7536                   p_Terr_Value_Rec.VALUE1_ID <> FND_API.G_MISS_NUM ) THEN
7537 
7538                 --Validate the value being passed.
7539                 Validate_terr_Value(
7540                     p_init_msg_list      => p_init_msg_list,
7541                     x_Return_Status      => x_Return_Status,
7542                     x_msg_count          => x_msg_count,
7543                     x_msg_data           => x_msg_data,
7544                     p_convert_to_id_flag => l_convert_to_id_flag,
7545                     p_display_type       => l_display_type,
7546                     p_display_sql        => l_display_sql1,
7547                     p_terr_value1        => p_Terr_Value_Rec.VALUE1_ID,
7548                     p_terr_value2        => -9999 );
7549 
7550                  IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7551                     RAISE FND_API.G_EXC_ERROR;
7552                  END IF;
7553 
7554             END IF;
7555 
7556             IF  ( p_Terr_Value_Rec.VALUE2_ID IS NOT NULL AND
7557                   p_Terr_Value_Rec.VALUE2_ID <> FND_API.G_MISS_NUM  ) THEN
7558 
7559                 --Validate the value being passed.
7560                 Validate_terr_Value(
7561                     p_init_msg_list      => p_init_msg_list,
7562                     x_Return_Status      => x_Return_Status,
7563                     x_msg_count          => x_msg_count,
7564                     x_msg_data           => x_msg_data,
7565                     p_convert_to_id_flag => l_convert_to_id_flag,
7566                     p_display_type       => l_display_type,
7567                     p_display_sql        => l_display_sql2,
7568                     p_terr_value1        => p_Terr_Value_Rec.VALUE1_ID,
7569                     p_terr_value2        => -9999);
7570 
7571                  IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7572                     RAISE FND_API.G_EXC_ERROR;
7573                  END IF;
7574 
7575             END IF;
7576 
7577                IF  ( p_Terr_Value_Rec.VALUE3_ID IS NOT NULL AND
7578                   p_Terr_Value_Rec.VALUE3_ID <> FND_API.G_MISS_NUM  ) THEN
7579 
7580                 --Validate the value being passed.
7581                 Validate_terr_Value(
7582                     p_init_msg_list      => p_init_msg_list,
7583                     x_Return_Status      => x_Return_Status,
7584                     x_msg_count          => x_msg_count,
7585                     x_msg_data           => x_msg_data,
7586                     p_convert_to_id_flag => l_convert_to_id_flag,
7587                     p_display_type       => l_display_type,
7588                     p_display_sql        => l_display_sql2,
7589                     p_terr_value1        => p_Terr_Value_Rec.VALUE3_ID,
7590                     p_terr_value2        => -9999);
7591 
7592                  IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7593                     RAISE FND_API.G_EXC_ERROR;
7594                  END IF;
7595 
7596             END IF;
7597 
7598         END IF; -- l_display_type = 'DEP_3FIELDS_CHAR_3IDS'
7599 
7600     ElsIf ( l_display_type = 'DEP_2FIELDS_1CHAR_1ID' ) Then
7601 
7602         IF (   ( p_Terr_Value_Rec.LOW_VALUE_CHAR IS NULL or
7603                  p_Terr_Value_Rec.LOW_VALUE_CHAR = FND_API.G_MISS_CHAR  ) OR
7604                ( p_Terr_Value_Rec.COMPARISON_OPERATOR IS NULL OR
7605                  p_Terr_Value_Rec.COMPARISON_OPERATOR = FND_API.G_MISS_CHAR )  )  THEN
7606 
7607                IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
7608                   FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_INVALID_TERR_VALUE');
7609                   FND_MSG_PUB.ADD;
7610                END IF;
7611                x_Return_Status := FND_API.G_RET_STS_ERROR ;
7612         ELSE
7613             IF  ( p_Terr_Value_Rec.LOW_VALUE_CHAR IS NOT NULL AND
7614                   p_Terr_Value_Rec.LOW_VALUE_CHAR <> FND_API.G_MISS_CHAR ) THEN
7615 
7616                 --Validate the value being passed.
7617                 Validate_terr_Value(
7618                     p_init_msg_list      => p_init_msg_list,
7619                     x_Return_Status      => x_Return_Status,
7620                     x_msg_count          => x_msg_count,
7621                     x_msg_data           => x_msg_data,
7622                     p_convert_to_id_flag => l_convert_to_id_flag,
7623                     p_display_type       => l_display_type,
7624                     p_display_sql        => l_display_sql1,
7625                     p_terr_value1        => p_Terr_Value_Rec.LOW_VALUE_CHAR);
7626 
7627                  IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7628                     RAISE FND_API.G_EXC_ERROR;
7629                  END IF;
7630 
7631             END IF;
7632 
7633             IF  ( p_Terr_Value_Rec.LOW_VALUE_CHAR_ID IS NOT NULL AND
7634                   p_Terr_Value_Rec.LOW_VALUE_CHAR_ID <> FND_API.G_MISS_NUM  ) THEN
7635 
7636                 --Validate the value being passed.
7637                 Validate_terr_Value(
7638                     p_init_msg_list      => p_init_msg_list,
7639                     x_Return_Status      => x_Return_Status,
7640                     x_msg_count          => x_msg_count,
7641                     x_msg_data           => x_msg_data,
7642                     p_convert_to_id_flag => l_convert_to_id_flag,
7643                     p_display_type       => l_display_type,
7644                     p_display_sql        => l_display_sql2,
7645                     p_terr_value1        => p_Terr_Value_Rec.LOW_VALUE_CHAR_ID);
7646 
7647                  IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7648                     RAISE FND_API.G_EXC_ERROR;
7649                  END IF;
7650 
7651             END IF;
7652 
7653         END IF; -- l_display_type = 'DEP_2FIELDS_1CHAR_1ID  '
7654 
7655      End If;
7656 
7657 
7658     --
7659    /* FND_MSG_PUB.Count_And_Get( p_count => x_msg_count,
7660                                p_data  => x_msg_data);
7661 */
7662 EXCEPTION
7663   --
7664     WHEN FND_API.G_EXC_ERROR THEN
7665          --dbms_output('Validate_Terr_Qtype_Usage: FND_API.G_EXC_ERROR');
7666          x_return_status := FND_API.G_RET_STS_ERROR ;
7667          FND_MSG_PUB.Count_And_Get
7668          (  P_count          =>   x_msg_count,
7669             P_data           =>   x_msg_data
7670          );
7671 
7672     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7673          --dbms_output('Validate_Terr_Qtype_Usage: FND_API.G_EXC_UNEXPECTED_ERROR');
7674          X_return_status                   := FND_API.G_RET_STS_UNEXP_ERROR;
7675          FND_MSG_PUB.Count_And_Get
7676          (  P_count          =>   x_msg_count,
7677             P_data           =>   x_msg_data
7678          );
7679 
7680     WHEN OTHERS THEN
7681          --dbms_output('Validate_Terr_Qtype_Usage: OTHERS - ' || SQLERRM);
7682          X_return_status                    := FND_API.G_RET_STS_UNEXP_ERROR;
7683 
7684          FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_UNEXPECTED_ERROR');
7685          FND_MESSAGE.Set_Token('PROC_NAME', 'Validate_terr_Value_Rec' );
7686          FND_MESSAGE.Set_Token('ERROR', sqlerrm );
7687          FND_MSG_PUB.ADD;
7688 
7689          FND_MSG_PUB.Count_And_Get
7690          (  P_count          =>   x_msg_count,
7691             P_data           =>   x_msg_data
7692          );
7693 
7694 End Validate_terr_Value_Rec;
7695 
7696    -- CHECK FOR DUPLICATES VALUES
7697    --
7698 PROCEDURE Check_duplicate_Value
7699   (p_init_msg_list               IN  VARCHAR2              := FND_API.G_FALSE,
7700    x_Return_Status               OUT NOCOPY VARCHAR2,
7701    x_msg_count                   OUT NOCOPY NUMBER,
7702    x_msg_data                    OUT NOCOPY VARCHAR2,
7703    p_Terr_Qual_Id                IN  NUMBER,
7704    p_Terr_Value_Rec              IN  Terr_Values_Rec_Type  := G_Miss_Terr_Values_Rec)
7705 AS
7706     l_dummy        VARCHAR2(5);
7707     BEGIN
7708 
7709          Select 'X'
7710          into l_dummy
7711          From  JTF_TERR_VALUES_ALL
7712          WHERE TERR_QUAL_ID  =  P_terr_qual_id
7713           AND nvl(COMPARISON_OPERATOR , '-9999')    = nvl( decode(P_Terr_Value_Rec.COMPARISON_OPERATOR, FND_API.G_MISS_CHAR, NULL , P_Terr_Value_Rec.COMPARISON_OPERATOR ) , '-9999')
7714           AND nvl(LOW_VALUE_CHAR , '-9999')         = nvl( decode(P_Terr_Value_Rec.LOW_VALUE_CHAR, FND_API.G_MISS_CHAR, NULL , P_Terr_Value_Rec.LOW_VALUE_CHAR ) , '-9999')
7715           AND nvl(HIGH_VALUE_CHAR , '-9999')        = nvl( decode(P_Terr_Value_Rec.HIGH_VALUE_CHAR, FND_API.G_MISS_CHAR, NULL , P_Terr_Value_Rec.HIGH_VALUE_CHAR ) , '-9999')
7716           AND nvl(LOW_VALUE_NUMBER , -9999)         = nvl( decode(P_Terr_Value_Rec.LOW_VALUE_NUMBER, FND_API.G_MISS_NUM, NULL , P_Terr_Value_Rec.LOW_VALUE_NUMBER ) , -9999)
7717           AND nvl(HIGH_VALUE_NUMBER , -9999)        = nvl( decode(P_Terr_Value_Rec.HIGH_VALUE_NUMBER, FND_API.G_MISS_NUM, NULL , P_Terr_Value_Rec.HIGH_VALUE_NUMBER ) , -9999)
7718           AND nvl(VALUE_SET , -9999)                = nvl( decode(P_Terr_Value_Rec.VALUE_SET, FND_API.G_MISS_NUM, NULL , P_Terr_Value_Rec.VALUE_SET ) , -9999)
7719           AND nvl(INTEREST_TYPE_ID , -9999)         = nvl( decode(P_Terr_Value_Rec.INTEREST_TYPE_ID, FND_API.G_MISS_NUM, NULL , P_Terr_Value_Rec.INTEREST_TYPE_ID ) , -9999)
7720           AND nvl(PRIMARY_INTEREST_CODE_ID,-9999)   = nvl( decode(P_Terr_Value_Rec.PRIMARY_INTEREST_CODE_ID, FND_API.G_MISS_NUM, NULL , P_Terr_Value_Rec.PRIMARY_INTEREST_CODE_ID ) , -9999)
7721           AND nvl(SECONDARY_INTEREST_CODE_ID,-9999) = nvl( decode(P_Terr_Value_Rec.SECONDARY_INTEREST_CODE_ID, FND_API.G_MISS_NUM, NULL , P_Terr_Value_Rec.SECONDARY_INTEREST_CODE_ID ), -9999)
7722           AND nvl(CURRENCY_CODE , '-9999')          = nvl( decode(P_Terr_Value_Rec.CURRENCY_CODE, FND_API.G_MISS_CHAR, NULL , P_Terr_Value_Rec.CURRENCY_CODE ) , '-9999')
7723           AND nvl(LOW_VALUE_CHAR_ID , -9999)        = nvl( decode(P_Terr_Value_Rec.LOW_VALUE_CHAR_ID, FND_API.G_MISS_NUM, NULL , P_Terr_Value_Rec.LOW_VALUE_CHAR_ID ) , -9999)
7724           AND nvl(ORG_ID , -9999)                   = nvl( decode(P_Terr_Value_Rec.ORG_ID, FND_API.G_MISS_NUM, NULL , P_Terr_Value_Rec.ORG_ID ) , -9999)
7725           AND nvl(CNR_GROUP_ID , -9999)             = nvl( decode(P_Terr_Value_Rec.CNR_GROUP_ID, FND_API.G_MISS_NUM, NULL , P_Terr_Value_Rec.CNR_GROUP_ID ) , -9999)
7726           AND nvl(VALUE1_ID , -9999)                = nvl( decode(P_Terr_Value_Rec.VALUE1_ID, FND_API.G_MISS_NUM, NULL , P_Terr_Value_Rec.VALUE1_ID ) , -9999)
7727           AND nvl(VALUE2_ID , -9999)                = nvl( decode(P_Terr_Value_Rec.VALUE2_ID, FND_API.G_MISS_NUM, NULL , P_Terr_Value_Rec.VALUE2_ID ) , -9999)
7728           AND nvl(VALUE3_ID , -9999)                = nvl( decode(P_Terr_Value_Rec.VALUE3_ID, FND_API.G_MISS_NUM, NULL , P_Terr_Value_Rec.VALUE3_ID ) , -9999)
7729           AND nvl(VALUE4_ID , -9999)                = nvl( decode(P_Terr_Value_Rec.VALUE4_ID, FND_API.G_MISS_NUM, NULL , P_Terr_Value_Rec.VALUE4_ID ) , -9999) ;
7730 
7731         IF l_dummy = 'X' THEN
7732             IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
7733                 FND_MESSAGE.Set_Name('JTF', 'JTY_DUP_TRANS_ATTR_VAL');
7734                 FND_MSG_PUB.ADD;
7735             END IF;
7736             x_Return_Status := FND_API.G_RET_STS_ERROR ;
7737         End If;
7738     EXCEPTION
7739           --
7740     WHEN NO_DATA_FOUND THEN
7741            NULL;
7742     WHEN FND_API.G_EXC_ERROR THEN
7743          --dbms_output('Validate_Terr_Qtype_Usage: FND_API.G_EXC_ERROR');
7744          x_return_status := FND_API.G_RET_STS_ERROR ;
7745          FND_MSG_PUB.Count_And_Get
7746          (  P_count          =>   x_msg_count,
7747             P_data           =>   x_msg_data
7748          );
7749 
7750     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7751          --dbms_output('Validate_Terr_Qtype_Usage: FND_API.G_EXC_UNEXPECTED_ERROR');
7752          X_return_status                   := FND_API.G_RET_STS_UNEXP_ERROR;
7753          FND_MSG_PUB.Count_And_Get
7754          (  P_count          =>   x_msg_count,
7755             P_data           =>   x_msg_data
7756          );
7757 
7758     WHEN OTHERS THEN
7759          --dbms_output('Validate_Terr_Qtype_Usage: OTHERS - ' || SQLERRM);
7760          X_return_status                    := FND_API.G_RET_STS_UNEXP_ERROR;
7761 
7762          FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_UNEXPECTED_ERROR');
7763          FND_MESSAGE.Set_Token('PROC_NAME', 'Check_duplicate_Value');
7764          FND_MESSAGE.Set_Token('ERROR', sqlerrm );
7765          FND_MSG_PUB.ADD;
7766 
7767          FND_MSG_PUB.Count_And_Get
7768          (  P_count          =>   x_msg_count,
7769             P_data           =>   x_msg_data
7770          );
7771 
7772     END Check_duplicate_Value;
7773   -- CHECK FOR DUPLICATES VALUES
7774    --
7775 PROCEDURE Check_duplicate_Value_update
7776   (p_init_msg_list               IN  VARCHAR2              := FND_API.G_FALSE,
7777    x_Return_Status               OUT NOCOPY VARCHAR2,
7778    x_msg_count                   OUT NOCOPY NUMBER,
7779    x_msg_data                    OUT NOCOPY VARCHAR2,
7780    p_Terr_Qual_Id                IN  NUMBER,
7781    p_Terr_Value_Rec              IN  Terr_Values_Rec_Type  := G_Miss_Terr_Values_Rec)
7782 AS
7783     l_dummy        VARCHAR2(5);
7784     BEGIN
7785          Select 'X'
7786          into l_dummy
7787          From  JTF_TERR_VALUES_ALL
7788          WHERE TERR_VALUE_ID <> P_Terr_Value_Rec.TERR_VALUE_ID
7789           AND TERR_QUAL_ID  =  P_terr_qual_id
7790           AND nvl(COMPARISON_OPERATOR , '-9999')    = nvl( decode(P_Terr_Value_Rec.COMPARISON_OPERATOR, FND_API.G_MISS_CHAR, NULL , P_Terr_Value_Rec.COMPARISON_OPERATOR ) , '-9999')
7791           AND nvl(LOW_VALUE_CHAR , '-9999')         = nvl( decode(P_Terr_Value_Rec.LOW_VALUE_CHAR, FND_API.G_MISS_CHAR, NULL , P_Terr_Value_Rec.LOW_VALUE_CHAR ) , '-9999')
7792           AND nvl(HIGH_VALUE_CHAR , '-9999')        = nvl( decode(P_Terr_Value_Rec.HIGH_VALUE_CHAR, FND_API.G_MISS_CHAR, NULL , P_Terr_Value_Rec.HIGH_VALUE_CHAR ) , '-9999')
7793           AND nvl(LOW_VALUE_NUMBER , -9999)         = nvl( decode(P_Terr_Value_Rec.LOW_VALUE_NUMBER, FND_API.G_MISS_NUM, NULL , P_Terr_Value_Rec.LOW_VALUE_NUMBER ) , -9999)
7794           AND nvl(HIGH_VALUE_NUMBER , -9999)        = nvl( decode(P_Terr_Value_Rec.HIGH_VALUE_NUMBER, FND_API.G_MISS_NUM, NULL , P_Terr_Value_Rec.HIGH_VALUE_NUMBER ) , -9999)
7795           AND nvl(VALUE_SET , -9999)                = nvl( decode(P_Terr_Value_Rec.VALUE_SET, FND_API.G_MISS_NUM, NULL , P_Terr_Value_Rec.VALUE_SET ) , -9999)
7796           AND nvl(INTEREST_TYPE_ID , -9999)         = nvl( decode(P_Terr_Value_Rec.INTEREST_TYPE_ID, FND_API.G_MISS_NUM, NULL , P_Terr_Value_Rec.INTEREST_TYPE_ID ) , -9999)
7797           AND nvl(PRIMARY_INTEREST_CODE_ID,-9999)   = nvl( decode(P_Terr_Value_Rec.PRIMARY_INTEREST_CODE_ID, FND_API.G_MISS_NUM, NULL , P_Terr_Value_Rec.PRIMARY_INTEREST_CODE_ID ) , -9999)
7798           AND nvl(SECONDARY_INTEREST_CODE_ID,-9999) = nvl( decode(P_Terr_Value_Rec.SECONDARY_INTEREST_CODE_ID, FND_API.G_MISS_NUM, NULL , P_Terr_Value_Rec.SECONDARY_INTEREST_CODE_ID ), -9999)
7799           AND nvl(CURRENCY_CODE , '-9999')          = nvl( decode(P_Terr_Value_Rec.CURRENCY_CODE, FND_API.G_MISS_CHAR, NULL , P_Terr_Value_Rec.CURRENCY_CODE ) , '-9999')
7800           AND nvl(LOW_VALUE_CHAR_ID , -9999)        = nvl( decode(P_Terr_Value_Rec.LOW_VALUE_CHAR_ID, FND_API.G_MISS_NUM, NULL , P_Terr_Value_Rec.LOW_VALUE_CHAR_ID ) , -9999)
7801           AND nvl(ORG_ID , -9999)                   = nvl( decode(P_Terr_Value_Rec.ORG_ID, FND_API.G_MISS_NUM, NULL , P_Terr_Value_Rec.ORG_ID ) , -9999)
7802           AND nvl(CNR_GROUP_ID , -9999)             = nvl( decode(P_Terr_Value_Rec.CNR_GROUP_ID, FND_API.G_MISS_NUM, NULL , P_Terr_Value_Rec.CNR_GROUP_ID ) , -9999)
7803           AND nvl(VALUE1_ID , -9999)                = nvl( decode(P_Terr_Value_Rec.VALUE1_ID, FND_API.G_MISS_NUM, NULL , P_Terr_Value_Rec.VALUE1_ID ) , -9999)
7804           AND nvl(VALUE2_ID , -9999)                = nvl( decode(P_Terr_Value_Rec.VALUE2_ID, FND_API.G_MISS_NUM, NULL , P_Terr_Value_Rec.VALUE2_ID ) , -9999)
7805           AND nvl(VALUE3_ID , -9999)                = nvl( decode(P_Terr_Value_Rec.VALUE3_ID, FND_API.G_MISS_NUM, NULL , P_Terr_Value_Rec.VALUE3_ID ) , -9999)
7806           AND nvl(VALUE4_ID , -9999)                = nvl( decode(P_Terr_Value_Rec.VALUE4_ID, FND_API.G_MISS_NUM, NULL , P_Terr_Value_Rec.VALUE4_ID ) , -9999) ;
7807 
7808         IF l_dummy = 'X' THEN
7809             IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
7810                 FND_MESSAGE.Set_Name('JTF', 'JTY_DUP_TRANS_ATTR_VAL');
7811                 FND_MSG_PUB.ADD;
7812             END IF;
7813             x_Return_Status := FND_API.G_RET_STS_ERROR ;
7814         End If;
7815     EXCEPTION
7816           --
7817     WHEN NO_DATA_FOUND THEN
7818            NULL;
7819     WHEN FND_API.G_EXC_ERROR THEN
7820          --dbms_output('Validate_Terr_Qtype_Usage: FND_API.G_EXC_ERROR');
7821          x_return_status := FND_API.G_RET_STS_ERROR ;
7822          FND_MSG_PUB.Count_And_Get
7823          (  P_count          =>   x_msg_count,
7824             P_data           =>   x_msg_data
7825          );
7826 
7827     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7828          --dbms_output('Validate_Terr_Qtype_Usage: FND_API.G_EXC_UNEXPECTED_ERROR');
7829          X_return_status                   := FND_API.G_RET_STS_UNEXP_ERROR;
7830          FND_MSG_PUB.Count_And_Get
7831          (  P_count          =>   x_msg_count,
7832             P_data           =>   x_msg_data
7833          );
7834 
7835     WHEN OTHERS THEN
7836          --dbms_output('Validate_Terr_Qtype_Usage: OTHERS - ' || SQLERRM);
7837          X_return_status                    := FND_API.G_RET_STS_UNEXP_ERROR;
7838 
7839          FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_UNEXPECTED_ERROR');
7840          FND_MESSAGE.Set_Token('PROC_NAME', 'Check_duplicate_Value');
7841          FND_MESSAGE.Set_Token('ERROR', sqlerrm );
7842          FND_MSG_PUB.ADD;
7843 
7844          FND_MSG_PUB.Count_And_Get
7845          (  P_count          =>   x_msg_count,
7846             P_data           =>   x_msg_data
7847          );
7848 
7849     END Check_duplicate_Value_update;
7850   ---------------------------------------------------------------------
7851   --             Get_Max_Rank
7852   ---------------------------------------------------------------------
7853   --
7854   --         Gets the maximum rank at a particular Level
7855   ---------------------------------------------------------------------
7856   PROCEDURE Get_Max_Rank
7857   (p_Parent_Terr_Id              IN  NUMBER,
7858    p_Source_Id                   IN  NUMBER,
7859    X_Rank                        OUT NOCOPY NUMBER)
7860   AS
7861   BEGIN
7862           Select Max(rank)
7863            into  x_Rank
7864           from   jtf_terr_ALL jt, jtf_terr_usgs_ALL jtu
7865           where  jt.Parent_Territory_id = p_Parent_Terr_Id and
7866                  jt.Terr_Id = jtu.Terr_Id and
7867                  jtu.source_id = p_Source_Id;
7868 
7869           If x_Rank is NULL Then
7870              x_Rank := 0;
7871           End If;
7872 
7873   Exception
7874           When NO_DATA_FOUND Then
7875                x_Rank := 0;
7876   END Get_Max_Rank;
7877 --
7878 --
7879 --
7880 --
7881 ---------------------------------------
7882 ---------------------------------------
7883 --  MASS CREATE TERRITORY FUNCTIONALITY
7884 ---------------------------------------
7885 ---------------------------------------
7886 --
7887 /*--------------------------------------------------------------------------------------*/
7888   /* This function does validation checks for the template territory record
7889   ** Validations:
7890   ** 1. id passed is a valid template id
7891   ** 2. At least 1 qualifier should be specified for use in generation.
7892   ** 3. lock the template so that no other user can use that template for
7893   ** generation or update the template.
7894   */
7895   PROCEDURE Validate_Template_Record (
7896      p_init_msg_list               IN  VARCHAR2               := FND_API.G_FALSE,
7897      p_template_terr_id            IN  NUMBER,
7898      x_Return_Status               OUT NOCOPY VARCHAR2,
7899      x_msg_count                   OUT NOCOPY NUMBER,
7900      x_msg_data                    OUT NOCOPY VARCHAR2
7901   )
7902   AS
7903 
7904     /* (1) check template exists */
7905     CURSOR c_chk_template (p_template_terr_id NUMBER) IS
7906     SELECT 'X'
7907     FROM   jtf_terr_ALL j
7908     WHERE  j.terr_id = p_template_terr_id
7909     AND    j.template_flag = 'Y';
7910 
7911 
7912     /* (2) check that at least 1 dynamic is specified for use in generation */
7913     CURSOR c_chk_qual_mode (p_template_terr_id NUMBER) IS
7914     SELECT COUNT(*)
7915     FROM   jtf_terr_qual j
7916     WHERE  j.terr_id = p_template_terr_id
7917     AND    j.qualifier_mode = 'DYNAMIC';
7918 
7919     l_terr_id             NUMBER := 0;
7920     l_qualifier_code      VARCHAR2(30);
7921     l_qualifier_name      VARCHAR2(60);
7922 
7923     l_csr_rtn             VARCHAR2(1);
7924     l_use_to_name_count   NUMBER := 0;
7925     l_dynamic_qual_count  NUMBER := 0;
7926 
7927   BEGIN
7928 
7929     --dbms_output('Validate_Template_Record: Entering API');
7930 
7931     -- Initialize the status to success
7932     x_return_status := FND_API.G_RET_STS_SUCCESS;
7933 
7934     /* (1) check template exists  */
7935     OPEN c_chk_template (p_template_terr_id);
7936     FETCH c_chk_template INTO l_csr_rtn;
7937     IF (c_chk_template%NOTFOUND) THEN
7938 
7939       fnd_message.set_name('JTF', 'JTF_TERR_INVALID_TEMPLATE');
7940       --fnd_msg_pub.add;
7941       x_return_status := FND_API.G_RET_STS_ERROR;
7942 
7943     END IF;
7944     CLOSE c_chk_template;
7945 
7946     /* (3)  check that at least 1 qualifier is specified for use in generation */
7947     OPEN c_chk_qual_mode(p_template_terr_id);
7948     FETCH c_chk_qual_mode INTO l_dynamic_qual_count;
7949 
7950     --arpatel 07/13 bug#1872642
7951     --IF (c_chk_qual_mode%NOTFOUND) THEN
7952 
7953       IF (l_dynamic_qual_count = 0) THEN
7954       fnd_message.set_name ('JTF', 'JTF_TERR_NO_DYNAMIC_QUALIFIERS');
7955       fnd_msg_pub.add;
7956       x_return_status := FND_API.G_RET_STS_ERROR;
7957 
7958     END IF;
7959     CLOSE c_chk_qual_mode;
7960 
7961     /* (4) lock the template so that no other user can use that template for
7962     **     generation or update the template
7963     */
7964     BEGIN
7965 
7966       --OPEN c_lock_template (p_template_terr_id);
7967 
7968       SELECT j1.terr_id
7969       INTO   l_terr_id
7970       FROM   jtf_terr j1
7971       WHERE  j1.terr_id = p_template_terr_id
7972       FOR UPDATE NOWAIT;
7973 
7974     EXCEPTION
7975       WHEN OTHERS THEN
7976         fnd_message.set_name('JTF','JTF_TERR_TEMPLATE_LOCKED');
7977         x_return_status := FND_API.G_RET_STS_ERROR;
7978     END;  /* block for validation (4) */
7979 
7980     --dbms_output('Validate_Template_Record: x_return_status = '|| x_return_status);
7981 
7982     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7983        RAISE FND_API.G_EXC_ERROR;
7984     END IF;
7985 
7986     FND_MSG_PUB.Count_And_Get( p_count => x_msg_count,
7987                                p_data  => x_msg_data);
7988 
7989   EXCEPTION
7990     WHEN FND_API.G_EXC_ERROR THEN
7991          --dbms_output('Validate_Template_Record: FND_API.G_EXC_ERROR');
7992          x_return_status := FND_API.G_RET_STS_ERROR ;
7993          FND_MSG_PUB.Count_And_Get
7994          (  P_count          =>   x_msg_count,
7995             P_data           =>   x_msg_data
7996          );
7997 
7998     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7999          --dbms_output('Validate_Template_Record: FND_API.G_EXC_UNEXPECTED_ERROR');
8000          X_return_status                   := FND_API.G_RET_STS_UNEXP_ERROR;
8001          FND_MSG_PUB.Count_And_Get
8002          (  P_count          =>   x_msg_count,
8003             P_data           =>   x_msg_data
8004          );
8005 
8006     WHEN OTHERS THEN
8007          --dbms_output('Validate_Template_Record: OTHERS - ' || SQLERRM);
8008          X_return_status                    := FND_API.G_RET_STS_UNEXP_ERROR;
8009          FND_MSG_PUB.Count_And_Get
8010          (  P_count          =>   x_msg_count,
8011             P_data           =>   x_msg_data
8012          );
8013 
8014   END validate_template_record;
8015 
8016 /*--------------------------------------------------------------------------------------*/
8017   /* 1. returns template territory record
8018   ** 2. returns number of territories that will be generated
8019   ** 3. returns a table of terr usages for the territory
8020   ** 4. returns a table of terr qual type usgs for the territory
8021   */
8022   PROCEDURE initialise ( p_template_terr_id     IN  NUMBER
8023                        , x_tmpl_terr_rec        OUT NOCOPY Terr_All_Rec_Type
8024                        , x_num_gen_terr         OUT NOCOPY NUMBER
8025                        , x_tmpl_usgs_tbl        OUT NOCOPY Terr_Usgs_Tbl_Type
8026                        , x_tmpl_qtype_usgs_tbl  OUT NOCOPY Terr_QualTypeUsgs_Tbl_Type) IS
8027 
8028    /* cursor to get template territory's setails */
8029     CURSOR c_get_terr ( p_template_terr_id NUMBER ) IS
8030        SELECT j1.TERR_ID
8031             , j1.LAST_UPDATE_DATE
8032             , j1.LAST_UPDATED_BY
8033             , j1.CREATION_DATE
8034             , j1.CREATED_BY
8035             , j1.LAST_UPDATE_LOGIN
8036             , j1.APPLICATION_SHORT_NAME
8037             , j1.NAME
8038             , j1.ENABLED_FLAG
8039             , j1.REQUEST_ID
8040             , j1.PROGRAM_APPLICATION_ID
8041             , j1.PROGRAM_ID
8042             , j1.PROGRAM_UPDATE_DATE
8043             , j1.START_DATE_ACTIVE
8044             , j1.RANK
8045             , j1.END_DATE_ACTIVE
8046             , j1.DESCRIPTION
8047             , j1.UPDATE_FLAG
8048             , j1.AUTO_ASSIGN_RESOURCES_FLAG
8049             , j1.PLANNED_FLAG
8050             , j1.TERRITORY_TYPE_ID
8051             , j1.PARENT_TERRITORY_ID
8052             , j1.TEMPLATE_FLAG
8053             , j1.TEMPLATE_TERRITORY_ID
8054             , j1.ESCALATION_TERRITORY_FLAG
8055             , j1.ESCALATION_TERRITORY_ID
8056             , j1.OVERLAP_ALLOWED_FLAG
8057             , j1.ATTRIBUTE_CATEGORY
8058             , j1.ATTRIBUTE1
8059             , j1.ATTRIBUTE2
8060             , j1.ATTRIBUTE3
8061             , j1.ATTRIBUTE4
8062             , j1.ATTRIBUTE5
8063             , j1.ATTRIBUTE6
8064             , j1.ATTRIBUTE7
8065             , j1.ATTRIBUTE8
8066             , j1.ATTRIBUTE9
8067             , j1.ATTRIBUTE10
8068             , j1.ATTRIBUTE11
8069             , j1.ATTRIBUTE12
8070             , j1.ATTRIBUTE13
8071             , j1.ATTRIBUTE14
8072             , j1.ATTRIBUTE15
8073             , j1.ORG_ID
8074             , j1.NUM_WINNERS
8075          FROM   jtf_terr j1
8076          WHERE  j1.terr_id = p_template_terr_id;
8077 
8078    /* cursor to get the number of territories that will be generated */
8079     CURSOR c_get_max_value_set (p_template_terr_id NUMBER) IS
8080        SELECT MAX (j1.VALUE_SET)
8081        FROM jtf_terr_values j1, jtf_terr_qual j2, jtf_terr j3
8082        WHERE j1.terr_qual_id = j2.terr_qual_id
8083          AND j2.terr_id = j3.terr_id
8084          AND j3.terr_id = p_template_terr_id
8085          AND j2.qualifier_mode = 'DYNAMIC'
8086        GROUP BY j2.qual_usg_id;
8087 
8088    /* cursor to get territory's usages */
8089    CURSOR c_get_terr_usgs (p_template_terr_id NUMBER) IS
8090       SELECT j1.TERR_USG_ID
8091            , j1.SOURCE_ID
8092            , j1.TERR_ID
8093            , j1.LAST_UPDATE_DATE
8094            , j1.LAST_UPDATED_BY
8095            , j1.CREATION_DATE
8096            , j1.CREATED_BY
8097            , j1.LAST_UPDATE_LOGIN
8098            , j1.ORG_ID
8099       FROM jtf_terr_usgs j1
8100       WHERE j1.terr_id = p_template_terr_id;
8101 
8102    /* cursor to get territory's qual type usages */
8103    CURSOR c_get_terr_qtype_usgs (p_template_terr_id NUMBER) IS
8104       SELECT j1.TERR_QTYPE_USG_ID
8105            , j1.TERR_ID
8106            , j1.QUAL_TYPE_USG_ID
8107            , j1.LAST_UPDATE_DATE
8108            , j1.LAST_UPDATED_BY
8109            , j1.CREATION_DATE
8110            , j1.CREATED_BY
8111            , j1.LAST_UPDATE_LOGIN
8112            , j1.ORG_ID
8113       from jtf_terr_qtype_usgs j1
8114       WHERE j1.terr_id = p_template_terr_id;
8115 
8116     l_product         NUMBER := 1;
8117     l_num_gen_terr    NUMBER := 1;
8118 
8119     /* table counters */
8120     i                 NUMBER := 0;
8121     j                 NUMBER := 0;
8122 
8123   BEGIN
8124 
8125 
8126        --dbms_output('Initialise: start');
8127 
8128        /* load the template record  */
8129        OPEN c_get_terr (p_template_terr_id);
8130        FETCH c_get_terr INTO
8131               x_tmpl_terr_rec.TERR_ID
8132             , x_tmpl_terr_rec.LAST_UPDATE_DATE
8133             , x_tmpl_terr_rec.LAST_UPDATED_BY
8134             , x_tmpl_terr_rec.CREATION_DATE
8135             , x_tmpl_terr_rec.CREATED_BY
8136             , x_tmpl_terr_rec.LAST_UPDATE_LOGIN
8137             , x_tmpl_terr_rec.APPLICATION_SHORT_NAME
8138             , x_tmpl_terr_rec.NAME
8139             , x_tmpl_terr_rec.ENABLED_FLAG
8140             , x_tmpl_terr_rec.REQUEST_ID
8141             , x_tmpl_terr_rec.PROGRAM_APPLICATION_ID
8142             , x_tmpl_terr_rec.PROGRAM_ID
8143             , x_tmpl_terr_rec.PROGRAM_UPDATE_DATE
8144             , x_tmpl_terr_rec.START_DATE_ACTIVE
8145             , x_tmpl_terr_rec.RANK
8146             , x_tmpl_terr_rec.END_DATE_ACTIVE
8147             , x_tmpl_terr_rec.DESCRIPTION
8148             , x_tmpl_terr_rec.UPDATE_FLAG
8149             , x_tmpl_terr_rec.AUTO_ASSIGN_RESOURCES_FLAG
8150             , x_tmpl_terr_rec.PLANNED_FLAG
8151             , x_tmpl_terr_rec.TERRITORY_TYPE_ID
8152             , x_tmpl_terr_rec.PARENT_TERRITORY_ID
8153             , x_tmpl_terr_rec.TEMPLATE_FLAG
8154             , x_tmpl_terr_rec.TEMPLATE_TERRITORY_ID
8155             , x_tmpl_terr_rec.ESCALATION_TERRITORY_FLAG
8156             , x_tmpl_terr_rec.ESCALATION_TERRITORY_ID
8157             , x_tmpl_terr_rec.OVERLAP_ALLOWED_FLAG
8158             , x_tmpl_terr_rec.ATTRIBUTE_CATEGORY
8159             , x_tmpl_terr_rec.ATTRIBUTE1
8160             , x_tmpl_terr_rec.ATTRIBUTE2
8161             , x_tmpl_terr_rec.ATTRIBUTE3
8162             , x_tmpl_terr_rec.ATTRIBUTE4
8163             , x_tmpl_terr_rec.ATTRIBUTE5
8164             , x_tmpl_terr_rec.ATTRIBUTE6
8165             , x_tmpl_terr_rec.ATTRIBUTE7
8166             , x_tmpl_terr_rec.ATTRIBUTE8
8167             , x_tmpl_terr_rec.ATTRIBUTE9
8168             , x_tmpl_terr_rec.ATTRIBUTE10
8169             , x_tmpl_terr_rec.ATTRIBUTE11
8170             , x_tmpl_terr_rec.ATTRIBUTE12
8171             , x_tmpl_terr_rec.ATTRIBUTE13
8172             , x_tmpl_terr_rec.ATTRIBUTE14
8173             , x_tmpl_terr_rec.ATTRIBUTE15
8174             , x_tmpl_terr_rec.ORG_ID
8175             , x_tmpl_terr_rec.NUM_WINNERS;
8176 
8177        CLOSE c_get_terr;
8178 
8179        --dbms_output('Initialise: [1]');
8180 
8181        /* get the number of territories that will be generated
8182        ** this is the product (X) of the maximum value_sets for
8183        ** each dynamic qualifier
8184        */
8185        OPEN c_get_max_value_set (p_template_terr_id);
8186        LOOP
8187 
8188          FETCH c_get_max_value_set INTO l_product;
8189          EXIT WHEN c_get_max_value_set%NOTFOUND;
8190 
8191          l_num_gen_terr := l_num_gen_terr * l_product;
8192 
8193        END LOOP;
8194        CLOSE c_get_max_value_set;
8195 
8196        x_num_gen_terr := l_num_gen_terr;
8197 
8198        --dbms_output('Initialise: Value of x_num_gen_terr = '||TO_CHAR(x_num_gen_terr));
8199 
8200        /* load terr usages */
8201        OPEN c_get_terr_usgs (p_template_terr_id);
8202        LOOP
8203           FETCH c_get_terr_usgs INTO
8204              x_tmpl_usgs_tbl(i).TERR_USG_ID
8205            , x_tmpl_usgs_tbl(i).SOURCE_ID
8206            , x_tmpl_usgs_tbl(i).TERR_ID
8207            , x_tmpl_usgs_tbl(i).LAST_UPDATE_DATE
8208            , x_tmpl_usgs_tbl(i).LAST_UPDATED_BY
8209            , x_tmpl_usgs_tbl(i).CREATION_DATE
8210            , x_tmpl_usgs_tbl(i).CREATED_BY
8211            , x_tmpl_usgs_tbl(i).LAST_UPDATE_LOGIN
8212            , x_tmpl_usgs_tbl(i).ORG_ID;
8213 
8214           EXIT WHEN c_get_terr_usgs%NOTFOUND;
8215           --dbms_output('Initialise: Value of i = '||TO_CHAR(i) || ' source_id = ' || x_tmpl_usgs_tbl(i).source_id);
8216           i := i + 1;
8217        END LOOP;
8218        CLOSE c_get_terr_usgs;
8219 
8220        /* load terr qual type usages */
8221        OPEN c_get_terr_qtype_usgs (p_template_terr_id);
8222        LOOP
8223           FETCH c_get_terr_qtype_usgs INTO
8224              x_tmpl_qtype_usgs_tbl(j).TERR_QUAL_TYPE_USG_ID
8225            , x_tmpl_qtype_usgs_tbl(j).TERR_ID
8226            , x_tmpl_qtype_usgs_tbl(j).QUAL_TYPE_USG_ID
8227            , x_tmpl_qtype_usgs_tbl(j).LAST_UPDATE_DATE
8228            , x_tmpl_qtype_usgs_tbl(j).LAST_UPDATED_BY
8229            , x_tmpl_qtype_usgs_tbl(j).CREATION_DATE
8230            , x_tmpl_qtype_usgs_tbl(j).CREATED_BY
8231            , x_tmpl_qtype_usgs_tbl(j).LAST_UPDATE_LOGIN
8232            , x_tmpl_qtype_usgs_tbl(j).ORG_ID;
8233 
8234           EXIT WHEN c_get_terr_qtype_usgs%NOTFOUND;
8235           --dbms_output('Initialise: Value of j = '||TO_CHAR(j) || ' qual_type_usg_id = ' || x_tmpl_qtype_usgs_tbl(j).qual_type_usg_id);
8236           j := j + 1;
8237        END LOOP;
8238        CLOSE c_get_terr_qtype_usgs;
8239 
8240 
8241    END initialise;
8242 
8243 
8244 /*--------------------------------------------------------------------------------------*/
8245   PROCEDURE create_new_terr( p_template_terr_rec  IN  Terr_All_Rec_Type
8246                            , p_num                IN  NUMBER
8247                            , x_new_terr_id        OUT NOCOPY NUMBER )
8248   IS
8249 
8250      /* local standard API variables */
8251      l_return_status             VARCHAR2(200);
8252      l_msg_count                 NUMBER;
8253      l_msg_data                  VARCHAR2(2000);
8254 
8255      /* local variables */
8256      l_new_terr_rec          Terr_All_Rec_Type;
8257      l_terr_out_rec          Terr_All_Out_Rec_Type;
8258      l_new_terr_id           NUMBER;
8259 
8260   BEGIN
8261 
8262      --dbms_output('create_new_terr START');
8263 
8264      l_new_terr_rec.TERR_ID                      := FND_API.G_MISS_NUM;
8265      l_new_terr_rec.LAST_UPDATE_DATE             := SYSDATE;
8266      l_new_terr_rec.LAST_UPDATED_BY              := FND_GLOBAL.USER_ID;
8267      l_new_terr_rec.CREATION_DATE                := SYSDATE;
8268      l_new_terr_rec.CREATED_BY                   := FND_GLOBAL.USER_ID;
8269      l_new_terr_rec.LAST_UPDATE_LOGIN            := FND_GLOBAL.LOGIN_ID;
8270      l_new_terr_rec.APPLICATION_SHORT_NAME       := FND_GLOBAL.APPLICATION_SHORT_NAME;
8271 
8272      /* name of new territory is derived from template name */
8273      l_new_terr_rec.NAME                         := p_template_terr_rec.name ||
8274                                                     ' - ' || ' #';
8275 
8276      l_new_terr_rec.ENABLED_FLAG                 := 'Y';
8277      l_new_terr_rec.REQUEST_ID                   := FND_API.G_MISS_NUM;
8278      l_new_terr_rec.PROGRAM_APPLICATION_ID       := FND_API.G_MISS_NUM;
8279      l_new_terr_rec.PROGRAM_ID                   := FND_API.G_MISS_NUM;
8280      l_new_terr_rec.PROGRAM_UPDATE_DATE          := FND_API.G_MISS_DATE;
8281      l_new_terr_rec.START_DATE_ACTIVE            := p_template_terr_rec.start_date_active;
8282      l_new_terr_rec.RANK                         := p_template_terr_rec.rank;
8283      l_new_terr_rec.END_DATE_ACTIVE              := p_template_terr_rec.end_date_active;
8284      l_new_terr_rec.DESCRIPTION                  := p_template_terr_rec.description;
8285      l_new_terr_rec.ORG_ID                       := p_template_terr_rec.org_id;
8286      l_new_terr_rec.UPDATE_FLAG                  := p_template_terr_rec.update_flag;
8287      l_new_terr_rec.AUTO_ASSIGN_RESOURCES_FLAG   := p_template_terr_rec.auto_assign_resources_flag;
8288      l_new_terr_rec.PLANNED_FLAG                 := p_template_terr_rec.planned_flag;
8289      l_new_terr_rec.TERRITORY_TYPE_ID            := p_template_terr_rec.territory_type_id;
8290      l_new_terr_rec.PARENT_TERRITORY_ID          := p_template_terr_rec.parent_territory_id;
8291      l_new_terr_rec.TEMPLATE_FLAG                := 'N';
8292      l_new_terr_rec.TEMPLATE_TERRITORY_ID        := p_template_terr_rec.terr_id;
8293      l_new_terr_rec.ESCALATION_TERRITORY_FLAG    := p_template_terr_rec.escalation_territory_flag;
8294      l_new_terr_rec.ESCALATION_TERRITORY_ID      := p_template_terr_rec.escalation_territory_id;
8295      l_new_terr_rec.OVERLAP_ALLOWED_FLAG         := p_template_terr_rec.overlap_allowed_flag;
8296      l_new_terr_rec.ATTRIBUTE_CATEGORY           := p_template_terr_rec.attribute_category;
8297      l_new_terr_rec.ATTRIBUTE1                   := p_template_terr_rec.attribute1;
8298      l_new_terr_rec.ATTRIBUTE2                   := p_template_terr_rec.attribute2;
8299      l_new_terr_rec.ATTRIBUTE3                   := p_template_terr_rec.attribute3;
8300      l_new_terr_rec.ATTRIBUTE4                   := p_template_terr_rec.attribute4;
8301      l_new_terr_rec.ATTRIBUTE5                   := p_template_terr_rec.attribute5;
8302      l_new_terr_rec.ATTRIBUTE6                   := p_template_terr_rec.attribute6;
8303      l_new_terr_rec.ATTRIBUTE7                   := p_template_terr_rec.attribute7;
8304      l_new_terr_rec.ATTRIBUTE8                   := p_template_terr_rec.attribute8;
8305      l_new_terr_rec.ATTRIBUTE9                   := p_template_terr_rec.attribute9;
8306      l_new_terr_rec.ATTRIBUTE10                  := p_template_terr_rec.attribute10;
8307      l_new_terr_rec.ATTRIBUTE11                  := p_template_terr_rec.attribute11;
8308      l_new_terr_rec.ATTRIBUTE12                  := p_template_terr_rec.attribute12;
8309      l_new_terr_rec.ATTRIBUTE13                  := p_template_terr_rec.attribute13;
8310      l_new_terr_rec.ATTRIBUTE14                  := p_template_terr_rec.attribute14;
8311      l_new_terr_rec.ATTRIBUTE15                  := p_template_terr_rec.attribute15;
8312      l_new_terr_rec.ORG_ID                       := p_template_terr_rec.org_id;
8313      l_new_terr_rec.NUM_WINNERS                  := p_template_terr_rec.NUM_WINNERS;
8314 
8315      /* create the territory record */
8316      create_territory_record (
8317           P_Api_Version_Number  => 1.0,
8318           P_Init_Msg_List       => FND_API.G_TRUE,
8319           P_Commit              => FND_API.G_FALSE,
8320           p_validation_level    => FND_API.G_VALID_LEVEL_FULL,
8321           P_Terr_All_Rec        => l_new_terr_rec,
8322           X_Return_Status       => l_return_status,
8323           X_Msg_Count           => l_msg_count,
8324           X_Msg_Data            => l_msg_data,
8325           X_Terr_Id             => l_new_terr_id,
8326           X_Terr_All_Out_Rec    => l_terr_out_rec );
8327 
8328      /* store the terr_id */
8329      l_new_terr_rec.TERR_ID := l_new_terr_id;
8330      /* update the territory's name */
8331      l_new_terr_rec.NAME := l_new_terr_rec.name || TO_CHAR(l_new_terr_id);
8332 
8333      update_territory_record (
8334           P_Api_Version_Number  => 1.0,
8335           P_Init_Msg_List       => FND_API.G_TRUE,
8336           P_Commit              => FND_API.G_FALSE,
8337           p_validation_level    => FND_API.G_VALID_LEVEL_FULL,
8338           P_Terr_All_Rec        => l_new_terr_rec,
8339           X_Return_Status       => l_return_status,
8340           X_Msg_Count           => l_msg_count,
8341           X_Msg_Data            => l_msg_data,
8342           X_Terr_All_Out_Rec    => l_terr_out_rec );
8343 
8344      x_new_terr_id := l_new_terr_id;
8345 
8346      --dbms_output( 'create_new_terr END => l_return_status = ' ||  l_return_status || ' name = ' || l_new_terr_rec.NAME ||' x_new_terr_id = ' || TO_CHAR (x_new_terr_id));
8347 
8348   END create_new_terr;
8349 
8350 /*--------------------------------------------------------------------------------------*/
8351   PROCEDURE create_copied_terr( p_copied_terr_rec      IN  Terr_All_Rec_Type
8352                               , p_new_terr_rec         IN  Terr_All_Rec_Type
8353                               , p_num                  IN  NUMBER
8354                               , p_copy_hierarchy_flag  IN  VARCHAR2
8355                               , p_first_terr_node_flag IN  VARCHAR2
8356                               , x_new_terr_id          OUT NOCOPY NUMBER )
8357   IS
8358 
8359      /* local standard API variables */
8360      l_return_status             VARCHAR2(200);
8361      l_msg_count                 NUMBER;
8362      l_msg_data                  VARCHAR2(2000);
8363 
8364      /* local variables */
8365      l_new_terr_rec          Terr_All_Rec_Type;
8366      l_terr_out_rec          Terr_All_Out_Rec_Type;
8367      l_new_terr_id           NUMBER;
8368 
8369   BEGIN
8370 
8371     --dbms_output('create_copied_terr START');
8372 
8373      l_new_terr_rec.TERR_ID                      := FND_API.G_MISS_NUM;
8374      l_new_terr_rec.LAST_UPDATE_DATE             := SYSDATE;
8375      l_new_terr_rec.LAST_UPDATED_BY              := FND_GLOBAL.USER_ID;
8376      l_new_terr_rec.CREATION_DATE                := SYSDATE;
8377      l_new_terr_rec.CREATED_BY                   := FND_GLOBAL.USER_ID;
8378      l_new_terr_rec.LAST_UPDATE_LOGIN            := FND_GLOBAL.LOGIN_ID;
8379      l_new_terr_rec.APPLICATION_SHORT_NAME       := FND_GLOBAL.APPLICATION_SHORT_NAME;
8380 
8381      -- dbms_output.put_line('JTF_TERRITORY_PVT:create_copied_terr:l_new_terr_rec.APPLICATION_SHORT_NAME-' || l_new_terr_rec.APPLICATION_SHORT_NAME);
8382 
8383      -- 04/06/01 ARPATEL - START
8384      IF (p_copy_hierarchy_flag = 'Y') THEN
8385 
8386         IF (p_first_terr_node_flag = 'Y') THEN
8387            l_new_terr_rec.NAME                         := p_new_terr_rec.name;
8388            l_new_terr_rec.START_DATE_ACTIVE            := p_new_terr_rec.start_date_active;
8389            l_new_terr_rec.END_DATE_ACTIVE              := p_new_terr_rec.end_date_active;
8390            l_new_terr_rec.DESCRIPTION                  := p_new_terr_rec.description;
8391            l_new_terr_rec.RANK                         := p_new_terr_rec.rank;
8392         ELSE
8393            l_new_terr_rec.NAME                         := p_copied_terr_rec.name;
8394            l_new_terr_rec.RANK                         := p_copied_terr_rec.rank;
8395            l_new_terr_rec.DESCRIPTION                  := p_copied_terr_rec.description;
8396            l_new_terr_rec.START_DATE_ACTIVE            := p_copied_terr_rec.start_date_active;
8397            l_new_terr_rec.END_DATE_ACTIVE              := p_copied_terr_rec.end_date_active;
8398         END IF;
8399 
8400      ELSE
8401 
8402         /* set new territory record details */
8403         l_new_terr_rec.NAME                         := p_new_terr_rec.name;
8404         l_new_terr_rec.START_DATE_ACTIVE            := p_new_terr_rec.start_date_active;
8405         l_new_terr_rec.END_DATE_ACTIVE              := p_new_terr_rec.end_date_active;
8406         l_new_terr_rec.DESCRIPTION                  := p_new_terr_rec.description;
8407         l_new_terr_rec.RANK                         := p_new_terr_rec.rank;
8408      END IF;
8409      -- 04/06/01 ARPATEL - END
8410 
8411      l_new_terr_rec.ENABLED_FLAG                 := 'Y';
8412      l_new_terr_rec.REQUEST_ID                   := FND_API.G_MISS_NUM;
8413      l_new_terr_rec.PROGRAM_APPLICATION_ID       := FND_API.G_MISS_NUM;
8414      l_new_terr_rec.PROGRAM_ID                   := FND_API.G_MISS_NUM;
8415      l_new_terr_rec.PROGRAM_UPDATE_DATE          := FND_API.G_MISS_DATE;
8416 
8417      l_new_terr_rec.ORG_ID                       := p_copied_terr_rec.org_id;
8418      l_new_terr_rec.UPDATE_FLAG                  := 'Y';    --- p_copied_terr_rec.update_flag;
8419      l_new_terr_rec.AUTO_ASSIGN_RESOURCES_FLAG   := p_copied_terr_rec.auto_assign_resources_flag;
8420      l_new_terr_rec.PLANNED_FLAG                 := p_copied_terr_rec.planned_flag;
8421      l_new_terr_rec.TERRITORY_TYPE_ID            := p_copied_terr_rec.territory_type_id;
8422      l_new_terr_rec.PARENT_TERRITORY_ID          := p_copied_terr_rec.parent_territory_id;
8423      l_new_terr_rec.TEMPLATE_FLAG                := p_copied_terr_rec.template_flag;
8424      l_new_terr_rec.TEMPLATE_TERRITORY_ID        := FND_API.G_MISS_NUM;
8425      l_new_terr_rec.ESCALATION_TERRITORY_FLAG    := p_copied_terr_rec.escalation_territory_flag;
8426      l_new_terr_rec.ESCALATION_TERRITORY_ID      := p_copied_terr_rec.escalation_territory_id;
8427      l_new_terr_rec.OVERLAP_ALLOWED_FLAG         := p_copied_terr_rec.overlap_allowed_flag;
8428      l_new_terr_rec.ATTRIBUTE_CATEGORY           := p_copied_terr_rec.attribute_category;
8429      l_new_terr_rec.ATTRIBUTE1                   := p_copied_terr_rec.attribute1;
8430      l_new_terr_rec.ATTRIBUTE2                   := p_copied_terr_rec.attribute2;
8431      l_new_terr_rec.ATTRIBUTE3                   := p_copied_terr_rec.attribute3;
8432      l_new_terr_rec.ATTRIBUTE4                   := p_copied_terr_rec.attribute4;
8433      l_new_terr_rec.ATTRIBUTE5                   := p_copied_terr_rec.attribute5;
8434      l_new_terr_rec.ATTRIBUTE6                   := p_copied_terr_rec.attribute6;
8435      l_new_terr_rec.ATTRIBUTE7                   := p_copied_terr_rec.attribute7;
8436      l_new_terr_rec.ATTRIBUTE8                   := p_copied_terr_rec.attribute8;
8437      l_new_terr_rec.ATTRIBUTE9                   := p_copied_terr_rec.attribute9;
8438      l_new_terr_rec.ATTRIBUTE10                  := p_copied_terr_rec.attribute10;
8439      l_new_terr_rec.ATTRIBUTE11                  := p_copied_terr_rec.attribute11;
8440      l_new_terr_rec.ATTRIBUTE12                  := p_copied_terr_rec.attribute12;
8441      l_new_terr_rec.ATTRIBUTE13                  := p_copied_terr_rec.attribute13;
8442      l_new_terr_rec.ATTRIBUTE14                  := p_copied_terr_rec.attribute14;
8443      l_new_terr_rec.ATTRIBUTE15                  := p_copied_terr_rec.attribute15;
8444      l_new_terr_rec.ORG_ID                       := p_copied_terr_rec.org_id;
8445      l_new_terr_rec.NUM_WINNERS                  := p_copied_terr_rec.NUM_WINNERS;
8446 
8447      /* create the territory record */
8448      create_territory_record (
8449           P_Api_Version_Number  => 1.0,
8450           P_Init_Msg_List       => FND_API.G_TRUE,
8451           P_Commit              => FND_API.G_FALSE,
8452           p_validation_level    => FND_API.G_VALID_LEVEL_FULL,
8453           P_Terr_All_Rec        => l_new_terr_rec,
8454           X_Return_Status       => l_return_status,
8455           X_Msg_Count           => l_msg_count,
8456           X_Msg_Data            => l_msg_data,
8457           X_Terr_Id             => l_new_terr_id,
8458           X_Terr_All_Out_Rec    => l_terr_out_rec );
8459 
8460 
8461      /* update the territory's name */
8462      l_new_terr_rec.NAME := l_new_terr_rec.name || TO_CHAR(l_new_terr_id);
8463 
8464      x_new_terr_id := l_new_terr_id;
8465 
8466     --dbms_output( 'create_copied_terr END => l_return_status = ' ||  l_return_status || ' name = ' || l_new_terr_rec.NAME ||  ' x_new_terr_id = ' || TO_CHAR (x_new_terr_id));
8467 
8468   END create_copied_terr;
8469 
8470 
8471 /*--------------------------------------------------------------------------------------*/
8472   PROCEDURE create_new_terr_usgs(  p_new_terr_id         IN  NUMBER
8473                                  , p_terr_usgs_tbl       IN  Terr_Usgs_Tbl_Type )
8474   IS
8475       /* local standard API variables */
8476       l_api_version_number        NUMBER := 1.0;
8477       l_return_status             VARCHAR2(200);
8478       l_msg_count                 NUMBER;
8479       l_msg_data                  VARCHAR2(2000);
8480 
8481       /* local record variables */
8482       l_terr_usgs_rec             Terr_Usgs_Rec_Type;
8483       l_terr_usgs_tbl             Terr_Usgs_Tbl_Type;
8484       l_terr_usgs_out_tbl         Terr_Usgs_Out_Tbl_Type;
8485 
8486   BEGIN
8487 
8488     --dbms_output('create_new_terr_usgs_rec START');
8489 
8490      FOR i IN 0..p_terr_usgs_tbl.COUNT-1 LOOP
8491 
8492         /* Instantiate record items from FORM items */
8493         l_terr_usgs_rec.TERR_USG_ID             := FND_API.G_MISS_NUM;
8494         l_terr_usgs_rec.LAST_UPDATE_DATE        := SYSDATE;
8495         l_terr_usgs_rec.LAST_UPDATED_BY         := FND_GLOBAL.USER_ID;
8496         l_terr_usgs_rec.CREATION_DATE           := SYSDATE;
8497         l_terr_usgs_rec.CREATED_BY              := FND_GLOBAL.USER_ID;
8498         l_terr_usgs_rec.LAST_UPDATE_LOGIN       := FND_GLOBAL.LOGIN_ID;
8499         l_terr_usgs_rec.TERR_ID                 := p_new_terr_id;
8500 
8501         l_terr_usgs_rec.SOURCE_ID               := p_terr_usgs_tbl(i).source_id;
8502         l_terr_usgs_rec.ORG_ID                  := p_terr_usgs_tbl(i).org_id;
8503 
8504         --dbms_output( '    Value of p_terr_usgs_tbl(i).source_id = ' || TO_CHAR(p_terr_usgs_tbl(i).source_id));
8505 
8506         l_terr_usgs_tbl(1) :=  l_terr_usgs_rec;
8507 
8508         /* 11i - territory can only have one usage */
8509         create_territory_usages (
8510           P_Api_Version_Number  => l_api_version_number,
8511           P_Init_Msg_List       => FND_API.G_TRUE,
8512           P_Commit              => FND_API.G_FALSE,
8513           p_validation_level    => FND_API.G_VALID_LEVEL_FULL,
8514           P_Terr_id             => p_new_terr_id,
8515           P_Terr_Usgs_Tbl       => l_terr_usgs_tbl,
8516           X_Return_Status       => l_return_status,
8517           X_Msg_Count           => l_msg_count,
8518           X_Msg_Data            => l_msg_data,
8519           X_Terr_Usgs_Out_Tbl   => l_terr_usgs_out_Tbl );
8520 
8521         --dbms_output( 'create_new_terr_usgs_rec END: l_return_status = ' || l_return_status || ' terr_usg_id = ' || TO_CHAR(l_terr_usgs_out_tbl(1).terr_usg_id));
8522 
8523      END LOOP;
8524 
8525   END create_new_terr_usgs;
8526 
8527 /*--------------------------------------------------------------------------------------*/
8528   PROCEDURE create_new_terr_qtype_usgs (
8529                p_new_terr_id         IN  NUMBER
8530              , p_terr_qtype_usgs_tbl IN  Terr_QualTypeUsgs_Tbl_Type ) IS
8531 
8532       /* local standard API variables */
8533       l_api_version_number              NUMBER := 1.0;
8534       l_return_status                   VARCHAR2(200);
8535       l_msg_count                       NUMBER;
8536       l_msg_data                        VARCHAR2(2000);
8537 
8538       /* local record variables */
8539       l_terr_qtype_usgs_rec             Terr_QualTypeUsgs_Rec_Type;
8540       l_terr_qtype_usgs_out_rec         Terr_QualTypeUsgs_Out_Rec_Type;
8541       l_terr_qtype_usg_id               NUMBER;
8542 
8543   BEGIN
8544 
8545      --dbms_output('create_new_terr_qtype_usg_rec START');
8546 
8547      FOR i IN 0..p_terr_qtype_usgs_tbl.COUNT-1 LOOP
8548 
8549         /* Instantiate record items from appropriate items */
8550         l_terr_qtype_usgs_rec.TERR_QUAL_TYPE_USG_ID    := FND_API.G_MISS_NUM;
8551         l_terr_qtype_usgs_rec.TERR_ID                  := p_new_terr_id;
8552         l_terr_qtype_usgs_rec.QUAL_TYPE_USG_ID         := p_terr_qtype_usgs_tbl(i).qual_type_usg_id;
8553         l_terr_qtype_usgs_rec.LAST_UPDATE_DATE         := SYSDATE;
8554         l_terr_qtype_usgs_rec.LAST_UPDATED_BY          := FND_GLOBAL.USER_ID;
8555         l_terr_qtype_usgs_rec.CREATION_DATE            := SYSDATE;
8556         l_terr_qtype_usgs_rec.CREATED_BY               := FND_GLOBAL.USER_ID;
8557         l_terr_qtype_usgs_rec.LAST_UPDATE_LOGIN        := FND_GLOBAL.LOGIN_ID;
8558         l_terr_qtype_usgs_rec.ORG_ID                   := p_terr_qtype_usgs_tbl(i).org_id;
8559 
8560 
8561         create_terr_qualtype_usage(
8562               P_Api_Version_Number        => l_api_version_number,
8563               P_Init_Msg_List             => FND_API.G_TRUE,
8564               P_Commit                    => FND_API.G_FALSE,
8565               p_validation_level          => FND_API.G_VALID_LEVEL_FULL,
8566               P_Terr_Id                   => p_new_terr_id,
8567               P_Terr_QualTypeUsgs_Rec     => l_terr_qtype_usgs_rec,
8568               X_Return_Status             => l_return_status,
8569               X_Msg_Count                 => l_msg_count,
8570               X_Msg_Data                  => l_msg_data,
8571               X_Terr_QualTypeUsgs_Id      => l_terr_qtype_usg_id,
8572               X_Terr_QualTypeUsgs_Out_Rec => l_terr_qtype_usgs_out_rec);
8573 
8574         --dbms_output( 'create_new_terr_qtype_usgs END: l_return_status = ' ||l_return_status || ' terr_qtype_usg_id = ' || TO_CHAR(l_terr_qtype_usgs_out_rec.terr_qual_type_usg_id));
8575 
8576      END LOOP;
8577 
8578      --dbms_output('create_new_terr_qtype_usg_rec END');
8579 
8580   END create_new_terr_qtype_usgs;
8581 
8582 /*--------------------------------------------------------------------------------------*/
8583   PROCEDURE create_new_terr_qual_rec( p_new_terr_id         IN  NUMBER
8584                                     , p_terr_qual_rec       IN  Terr_Qual_Rec_Type
8585                                     , x_new_terr_qual_id    OUT NOCOPY NUMBER )
8586   IS
8587       /* local standard API variables */
8588       l_api_version_number        NUMBER := 1.0;
8589       l_return_status             VARCHAR2(200);
8590       l_msg_count                 NUMBER;
8591       l_msg_data                  VARCHAR2(2000);
8592 
8593       /* local record variables */
8594       l_new_terr_qual_rec         Terr_Qual_Rec_Type;
8595       l_terr_qual_out_rec         Terr_Qual_Out_Rec_Type;
8596 
8597       l_new_terr_qual_id          NUMBER;
8598 
8599       /* START OF 1520656 BUG FIX - JDOCHERT 12/07 */
8600       CURSOR c_get_terr(lp_terr_id NUMBER)
8601       IS SELECT 'Y'
8602       FROM jtf_terr_ALL
8603       WHERE template_flag = 'Y'
8604         AND terr_id = lp_terr_id;
8605 
8606       l_template_flag      VARCHAR2(1);
8607       /* END OF 1520656 BUG FIX - JDOCHERT 12/07 */
8608 
8609   BEGIN
8610 
8611      --dbms_output('create_new_terr_qual_rec START');
8612 
8613      /* Instantiate record items from appropriate template items */
8614      l_new_terr_qual_rec.Rowid                   := NULL;
8615      l_new_terr_qual_rec.TERR_QUAL_ID            := FND_API.G_MISS_NUM;
8616      l_new_terr_qual_rec.LAST_UPDATE_DATE        := SYSDATE;
8617      l_new_terr_qual_rec.LAST_UPDATED_BY         := FND_GLOBAL.USER_ID;
8618      l_new_terr_qual_rec.CREATION_DATE           := SYSDATE;
8619      l_new_terr_qual_rec.CREATED_BY              := FND_GLOBAL.USER_ID;
8620      l_new_terr_qual_rec.LAST_UPDATE_LOGIN       := FND_GLOBAL.LOGIN_ID;
8621 
8622      /* this value is passed into procedure */
8623      l_new_terr_qual_rec.TERR_ID                 := p_new_terr_id;
8624 
8625      l_new_terr_qual_rec.QUAL_USG_ID             := p_terr_qual_rec.qual_usg_id;
8626      l_new_terr_qual_rec.USE_TO_NAME_FLAG        := p_terr_qual_rec.use_to_name_flag;
8627      l_new_terr_qual_rec.GENERATE_FLAG           := p_terr_qual_rec.generate_flag;
8628      l_new_terr_qual_rec.OVERLAP_ALLOWED_FLAG    := p_terr_qual_rec.overlap_allowed_flag;
8629      l_new_terr_qual_rec.QUALIFIER_MODE          := '';
8630      l_new_terr_qual_rec.ORG_ID                  := p_terr_qual_rec.org_id;
8631 
8632 
8633      /* START OF 1520656 BUG FIX - JDOCHERT 12/07 */
8634      OPEN c_get_terr(p_new_terr_id);
8635      FETCH c_get_terr INTO l_template_flag;
8636      CLOSE c_get_terr;
8637 
8638      IF (l_template_flag = 'Y') THEN
8639         l_new_terr_qual_rec.QUALIFIER_MODE  := p_terr_qual_rec.qualifier_mode;
8640      ELSE
8641         l_new_terr_qual_rec.QUALIFIER_MODE  := NULL;
8642      END IF;
8643      /* END OF 1520656 BUG FIX - JDOCHERT 12/07 */
8644 
8645      create_terr_qualifier(
8646            P_Api_Version_Number   => l_api_version_number,
8647            P_Init_Msg_List        => FND_API.G_TRUE,
8648            P_Commit               => FND_API.G_FALSE,
8649            p_validation_level     => FND_API.G_VALID_LEVEL_FULL,
8650            P_Terr_Id              => l_new_terr_qual_rec.terr_id,
8651            P_Terr_Qual_rec        => l_new_terr_qual_rec,
8652            X_Return_Status        => l_return_status,
8653            X_Msg_Count            => l_msg_count,
8654            X_Msg_Data             => l_msg_data,
8655            X_Terr_Qual_Id         => l_new_terr_qual_id,
8656            X_Terr_Qual_Out_Rec    => l_terr_qual_out_rec);
8657 
8658 
8659     x_new_terr_qual_id := l_new_terr_qual_id;
8660 
8661     --dbms_output('create_new_terr_qual_rec END: l_return_status = ' || l_return_status);
8662     --dbms_output('create_new_terr_qual_rec END: terr_qual_id = ' || TO_CHAR(x_new_terr_qual_id));
8663 
8664   END create_new_terr_qual_rec;
8665 
8666 
8667 /*--------------------------------------------------------------------------------------*/
8668   PROCEDURE create_new_terr_value_rec( p_new_terr_id         IN  NUMBER
8669                                      , p_new_terr_qual_id    IN  NUMBER
8670                                      , p_terr_value_rec      IN  Terr_Values_Rec_Type
8671                                      , x_new_terr_value_id   OUT NOCOPY NUMBER )
8672   IS
8673       /* local standard API variables */
8674       l_api_version_number        NUMBER := 1.0;
8675       l_return_status             VARCHAR2(200);
8676       l_msg_count                 NUMBER;
8677       l_msg_data                  VARCHAR2(2000);
8678 
8679       /* local record variables */
8680       l_new_terr_value_rec        Terr_Values_Rec_Type;
8681       l_terr_value_out_rec        Terr_Values_Out_Rec_Type;
8682 
8683       l_new_terr_value_id             NUMBER;
8684 
8685       /* START OF 1520656 BUG FIX - JDOCHERT 12/07 */
8686       CURSOR c_get_terr(lp_terr_id NUMBER)
8687       IS SELECT 'Y'
8688       FROM jtf_terr
8689       WHERE template_flag = 'Y'
8690         AND terr_id = lp_terr_id;
8691 
8692       l_template_flag      VARCHAR2(1);
8693       /* END OF 1520656 BUG FIX - JDOCHERT 12/07 */
8694 
8695   BEGIN
8696 
8697      --dbms_output('create_new_terr_value_rec START');
8698 
8699           /* Instantiate record items from template qualifier value record */
8700           l_new_terr_value_rec.TERR_VALUE_ID                    := NULL;
8701           l_new_terr_value_rec.LAST_UPDATE_DATE                 := SYSDATE;
8702           l_new_terr_value_rec.LAST_UPDATED_BY                  := fnd_global.user_id;
8703           l_new_terr_value_rec.CREATION_DATE                    := SYSDATE;
8704           l_new_terr_value_rec.CREATED_BY                       := fnd_global.user_id;
8705           l_new_terr_value_rec.LAST_UPDATE_LOGIN                := fnd_global.login_id;
8706 
8707           /* this value comes from newly created territory qualifier (above) */
8708           l_new_terr_value_rec.TERR_QUAL_ID                     := p_new_terr_qual_id;
8709 
8710           l_new_terr_value_rec.INCLUDE_FLAG                     := p_terr_value_rec.include_flag;
8711           l_new_terr_value_rec.COMPARISON_OPERATOR              := p_terr_value_rec.comparison_operator;
8712           l_new_terr_value_rec.LOW_VALUE_CHAR                   := p_terr_value_rec.low_value_char;
8713           l_new_terr_value_rec.HIGH_VALUE_CHAR                  := p_terr_value_rec.high_value_char;
8714           l_new_terr_value_rec.LOW_VALUE_NUMBER                 := p_terr_value_rec.low_value_number;
8715           l_new_terr_value_rec.HIGH_VALUE_NUMBER                := p_terr_value_rec.high_value_number;
8716           l_new_terr_value_rec.VALUE_SET                        := NULL;
8717           l_new_terr_value_rec.INTEREST_TYPE_ID                 := p_terr_value_rec.interest_type_id;
8718           l_new_terr_value_rec.PRIMARY_INTEREST_CODE_ID         := p_terr_value_rec.primary_interest_code_id;
8719           l_new_terr_value_rec.SECONDARY_INTEREST_CODE_ID       := p_terr_value_rec.secondary_interest_code_id;
8720           l_new_terr_value_rec.CURRENCY_CODE                    := p_terr_value_rec.currency_code;
8721           l_new_terr_value_rec.ID_USED_FLAG                     := p_terr_value_rec.id_used_flag;
8722           l_new_terr_value_rec.LOW_VALUE_CHAR_ID                := p_terr_value_rec.low_value_char_id;
8723           --l_new_terr_value_rec.QUALIFIER_TBL_INDEX            := p_terr_value_rec.qualifier_tbl_index;
8724           l_new_terr_value_rec.ORG_ID                           := p_terr_value_rec.org_id;
8725           l_new_terr_value_rec.CNR_GROUP_ID                     := p_terr_value_rec.cnr_group_id;
8726 
8727           --arpatel 09/06
8728           l_new_terr_value_rec.VALUE1_ID                        := p_terr_value_rec.value1_id;
8729           l_new_terr_value_rec.VALUE2_ID                        := p_terr_value_rec.value2_id;
8730           l_new_terr_value_rec.VALUE3_ID                        := p_terr_value_rec.value3_id;
8731           l_new_terr_value_rec.VALUE4_ID                        := p_terr_value_rec.value4_id;
8732 
8733            /* START OF 1520656 BUG FIX - JDOCHERT 12/07 */
8734            OPEN c_get_terr(p_new_terr_id);
8735            FETCH c_get_terr INTO l_template_flag;
8736            CLOSE c_get_terr;
8737 
8738            IF (l_template_flag = 'Y') THEN
8739               l_new_terr_value_rec.value_set  := p_terr_value_rec.value_set;
8740            ELSE
8741               l_new_terr_value_rec.value_set      := NULL;
8742            END IF;
8743            /* END OF 1520656 BUG FIX - JDOCHERT 12/07 */
8744 
8745           /* insert value */
8746           create_terr_value(
8747              P_Api_Version_Number   => 1.0,
8748              P_Init_Msg_List        => FND_API.G_TRUE,
8749              P_Commit               => FND_API.G_FALSE,
8750              p_validation_level     => FND_API.G_VALID_LEVEL_FULL,
8751              P_Terr_Id              => p_new_terr_id,
8752              P_Terr_Qual_id         => l_new_terr_value_rec.terr_qual_id,
8753              P_Terr_Value_Rec       => l_new_terr_value_rec,
8754              X_Return_Status        => l_return_status,
8755              X_Msg_Count            => l_msg_count,
8756              X_Msg_Data             => l_msg_data,
8757              X_Terr_Value_Id        => l_new_terr_value_id,
8758              X_Terr_Value_Out_Rec   => l_terr_value_out_rec);
8759 
8760 
8761     x_new_terr_value_id := l_new_terr_value_id;
8762 
8763     --dbms_output('create_new_terr_value_rec END: terr_value_id = ' || TO_CHAR(x_new_terr_value_id));
8764 
8765   END create_new_terr_value_rec;
8766 
8767 /*--------------------------------------------------------------------------------------*/
8768   -- inserts the constant qualifiers and values for copied territories
8769   PROCEDURE insert_copied_qual_values ( p_template_terr_id    NUMBER
8770                                       , p_new_terr_id         NUMBER ) IS
8771 
8772       /* local standard API variables */
8773       l_api_version_number        NUMBER := 1.0;
8774       l_return_status             VARCHAR2(200);
8775       l_msg_count                 NUMBER;
8776       l_msg_data                  VARCHAR2(2000);
8777 
8778       /* cursor to get STATIC qualifiers */
8779       CURSOR c_get_terr_qual (p_template_terr_id NUMBER) IS
8780        SELECT j1.rowid
8781             , j1.TERR_QUAL_ID
8782             , j1.LAST_UPDATE_DATE
8783             , j1.LAST_UPDATED_BY
8784             , j1.CREATION_DATE
8785             , j1.CREATED_BY
8786             , j1.LAST_UPDATE_LOGIN
8787             , j1.TERR_ID
8788             , j1.QUAL_USG_ID
8789             , j1.USE_TO_NAME_FLAG
8790             , j1.GENERATE_FLAG
8791             , j1.OVERLAP_ALLOWED_FLAG
8792             , j1.QUALIFIER_MODE
8793             , j1.ORG_ID
8794       FROM   jtf_terr_qual j1
8795       WHERE  j1.terr_id = p_template_terr_id;
8796 
8797       /* cursor to get values for STATIC qualifiers' values */
8798       CURSOR c_get_terr_value (p_terr_qual_id NUMBER) IS
8799        SELECT j1.TERR_VALUE_ID
8800             , j1.LAST_UPDATE_DATE
8801             , j1.LAST_UPDATED_BY
8802             , j1.CREATION_DATE
8803             , j1.CREATED_BY
8804             , j1.LAST_UPDATE_LOGIN
8805             , j1.TERR_QUAL_ID
8806             , j1.INCLUDE_FLAG
8807             , j1.COMPARISON_OPERATOR
8808             , j1.LOW_VALUE_CHAR
8809             , j1.HIGH_VALUE_CHAR
8810             , j1.LOW_VALUE_NUMBER
8811             , j1.HIGH_VALUE_NUMBER
8812             , j1.VALUE_SET
8813             , j1.INTEREST_TYPE_ID
8814             , j1.PRIMARY_INTEREST_CODE_ID
8815             , j1.SECONDARY_INTEREST_CODE_ID
8816             , j1.CURRENCY_CODE
8817             , j1.ORG_ID
8818             , j1.ID_USED_FLAG
8819             , j1.LOW_VALUE_CHAR_ID
8820             , NULL QUALIFIER_TBL_INDEX
8821             , j1.CNR_GROUP_ID
8822             , j1.VALUE1_ID
8823             , j1.VALUE2_ID
8824             , j1.VALUE3_ID
8825             , j1.VALUE4_ID
8826       FROM   jtf_terr_values j1
8827       WHERE  j1.terr_qual_id = p_terr_qual_id;
8828 
8829       /* local record variables */
8830       l_tmpl_terr_qual_rec        Terr_Qual_Rec_Type;
8831 
8832       l_tmpl_terr_value_rec       Terr_Values_Rec_Type;
8833       l_terr_value_out_rec        Terr_Values_Out_Rec_Type;
8834 
8835       l_new_terr_qual_id          NUMBER;
8836       l_new_terr_value_id         NUMBER;
8837 
8838    BEGIN
8839 
8840      --dbms_output('insert_copied_qual_values START');
8841 
8842       /* get the STATIC qualifiers for this template */
8843       OPEN c_get_terr_qual (p_template_terr_id);
8844       LOOP
8845 
8846         FETCH c_get_terr_qual INTO
8847               l_tmpl_terr_qual_rec.rowid
8848             , l_tmpl_terr_qual_rec.TERR_QUAL_ID
8849             , l_tmpl_terr_qual_rec.LAST_UPDATE_DATE
8850             , l_tmpl_terr_qual_rec.LAST_UPDATED_BY
8851             , l_tmpl_terr_qual_rec.CREATION_DATE
8852             , l_tmpl_terr_qual_rec.CREATED_BY
8853             , l_tmpl_terr_qual_rec.LAST_UPDATE_LOGIN
8854             , l_tmpl_terr_qual_rec.TERR_ID
8855             , l_tmpl_terr_qual_rec.QUAL_USG_ID
8856             , l_tmpl_terr_qual_rec.USE_TO_NAME_FLAG
8857             , l_tmpl_terr_qual_rec.GENERATE_FLAG
8858             , l_tmpl_terr_qual_rec.OVERLAP_ALLOWED_FLAG
8859             , l_tmpl_terr_qual_rec.QUALIFIER_MODE
8860             , l_tmpl_terr_qual_rec.ORG_ID;
8861 
8862         EXIT WHEN c_get_terr_qual%NOTFOUND;
8863 
8864         --dbms_output('qual id = ' || l_tmpl_terr_qual_rec.QUAL_USG_ID);
8865 
8866         create_new_terr_qual_rec( p_new_terr_id, l_tmpl_terr_qual_rec, l_new_terr_qual_id);
8867 
8868         /* get the values for this template qualifier */
8869         OPEN c_get_terr_value (l_tmpl_terr_qual_rec.terr_qual_id);
8870         LOOP
8871 
8872           FETCH c_get_terr_value INTO
8873               l_tmpl_terr_value_rec.TERR_VALUE_ID
8874             , l_tmpl_terr_value_rec.LAST_UPDATE_DATE
8875             , l_tmpl_terr_value_rec.LAST_UPDATED_BY
8876             , l_tmpl_terr_value_rec.CREATION_DATE
8877             , l_tmpl_terr_value_rec.CREATED_BY
8878             , l_tmpl_terr_value_rec.LAST_UPDATE_LOGIN
8879             , l_tmpl_terr_value_rec.TERR_QUAL_ID
8880             , l_tmpl_terr_value_rec.INCLUDE_FLAG
8881             , l_tmpl_terr_value_rec.COMPARISON_OPERATOR
8882             , l_tmpl_terr_value_rec.LOW_VALUE_CHAR
8883             , l_tmpl_terr_value_rec.HIGH_VALUE_CHAR
8884             , l_tmpl_terr_value_rec.LOW_VALUE_NUMBER
8885             , l_tmpl_terr_value_rec.HIGH_VALUE_NUMBER
8886             , l_tmpl_terr_value_rec.VALUE_SET
8887             , l_tmpl_terr_value_rec.INTEREST_TYPE_ID
8888             , l_tmpl_terr_value_rec.PRIMARY_INTEREST_CODE_ID
8889             , l_tmpl_terr_value_rec.SECONDARY_INTEREST_CODE_ID
8890             , l_tmpl_terr_value_rec.CURRENCY_CODE
8891             , l_tmpl_terr_value_rec.ORG_ID
8892             , l_tmpl_terr_value_rec.ID_USED_FLAG
8893             , l_tmpl_terr_value_rec.LOW_VALUE_CHAR_ID
8894             , l_tmpl_terr_value_rec.QUALIFIER_TBL_INDEX
8895             , l_tmpl_terr_value_rec.CNR_GROUP_ID
8896             , l_tmpl_terr_value_rec.VALUE1_ID
8897             , l_tmpl_terr_value_rec.VALUE2_ID
8898             , l_tmpl_terr_value_rec.VALUE3_ID
8899             , l_tmpl_terr_value_rec.VALUE4_ID;
8900 
8901           EXIT WHEN c_get_terr_value%NOTFOUND;
8902 
8903           create_new_terr_value_rec( p_new_terr_id
8904                                    , l_new_terr_qual_id
8905                                    , l_tmpl_terr_value_rec
8906                                    , l_new_terr_value_id);
8907 
8908         END LOOP;
8909         CLOSE c_get_terr_value;
8910 
8911      END LOOP;
8912      CLOSE c_get_terr_qual;
8913 
8914      --dbms_output('insert_copied_qual_values END');
8915 
8916   END insert_copied_qual_values;
8917 
8918 
8919 /*--------------------------------------------------------------------------------------*/
8920   -- inserts the constant qualifiers and values
8921   PROCEDURE insert_static_qual_values ( p_template_terr_id    NUMBER
8922                                       , p_new_terr_id         NUMBER ) IS
8923 
8924       /* local standard API variables */
8925       l_api_version_number        NUMBER := 1.0;
8926       l_return_status             VARCHAR2(200);
8927       l_msg_count                 NUMBER;
8928       l_msg_data                  VARCHAR2(2000);
8929 
8930 
8931       /* cursor to get STATIC qualifiers */
8932       CURSOR c_get_terr_qual (p_template_terr_id NUMBER) IS
8933        SELECT j1.rowid
8934             , j1.TERR_QUAL_ID
8935             , j1.LAST_UPDATE_DATE
8936             , j1.LAST_UPDATED_BY
8937             , j1.CREATION_DATE
8938             , j1.CREATED_BY
8939             , j1.LAST_UPDATE_LOGIN
8940             , j1.TERR_ID
8941             , j1.QUAL_USG_ID
8942             , j1.USE_TO_NAME_FLAG
8943             , j1.GENERATE_FLAG
8944             , j1.OVERLAP_ALLOWED_FLAG
8945             , j1.QUALIFIER_MODE
8946             , j1.ORG_ID
8947       FROM   jtf_terr_qual j1
8948       WHERE  j1.terr_id = p_template_terr_id
8949       AND    j1.qualifier_mode = 'STATIC';
8950 
8951       /* cursor to get values for STATIC qualifiers' values */
8952       CURSOR c_get_terr_value (p_terr_qual_id NUMBER) IS
8953        SELECT j1.TERR_VALUE_ID
8954             , j1.LAST_UPDATE_DATE
8955             , j1.LAST_UPDATED_BY
8956             , j1.CREATION_DATE
8957             , j1.CREATED_BY
8958             , j1.LAST_UPDATE_LOGIN
8959             , j1.TERR_QUAL_ID
8960             , j1.INCLUDE_FLAG
8961             , j1.COMPARISON_OPERATOR
8962             , j1.LOW_VALUE_CHAR
8963             , j1.HIGH_VALUE_CHAR
8964             , j1.LOW_VALUE_NUMBER
8965             , j1.HIGH_VALUE_NUMBER
8966             , j1.VALUE_SET
8967             , j1.INTEREST_TYPE_ID
8968             , j1.PRIMARY_INTEREST_CODE_ID
8969             , j1.SECONDARY_INTEREST_CODE_ID
8970             , j1.CURRENCY_CODE
8971             , j1.ORG_ID
8972             , j1.ID_USED_FLAG
8973             , j1.LOW_VALUE_CHAR_ID
8974             , NULL QUALIFIER_TBL_INDEX
8975             , j1.CNR_GROUP_ID
8976             , j1.VALUE1_ID
8977             , j1.VALUE2_ID
8978             , j1.VALUE3_ID
8979             , j1.VALUE4_ID
8980       FROM   jtf_terr_values j1
8981       WHERE  j1.terr_qual_id = p_terr_qual_id;
8982 
8983       /* local record variables */
8984       l_tmpl_terr_qual_rec        Terr_Qual_Rec_Type;
8985 
8986       l_tmpl_terr_value_rec       Terr_Values_Rec_Type;
8987       l_terr_value_out_rec        Terr_Values_Out_Rec_Type;
8988 
8989       l_new_terr_qual_id          NUMBER;
8990       l_new_terr_value_id         NUMBER;
8991 
8992    BEGIN
8993 
8994      --dbms_output('insert_static_qual_values START');
8995 
8996       /* get the STATIC qualifiers for this template */
8997       OPEN c_get_terr_qual (p_template_terr_id);
8998       LOOP
8999 
9000         FETCH c_get_terr_qual INTO
9001               l_tmpl_terr_qual_rec.rowid
9002             , l_tmpl_terr_qual_rec.TERR_QUAL_ID
9003             , l_tmpl_terr_qual_rec.LAST_UPDATE_DATE
9004             , l_tmpl_terr_qual_rec.LAST_UPDATED_BY
9005             , l_tmpl_terr_qual_rec.CREATION_DATE
9006             , l_tmpl_terr_qual_rec.CREATED_BY
9007             , l_tmpl_terr_qual_rec.LAST_UPDATE_LOGIN
9008             , l_tmpl_terr_qual_rec.TERR_ID
9009             , l_tmpl_terr_qual_rec.QUAL_USG_ID
9010             , l_tmpl_terr_qual_rec.USE_TO_NAME_FLAG
9011             , l_tmpl_terr_qual_rec.GENERATE_FLAG
9012             , l_tmpl_terr_qual_rec.OVERLAP_ALLOWED_FLAG
9013             , l_tmpl_terr_qual_rec.QUALIFIER_MODE
9014             , l_tmpl_terr_qual_rec.ORG_ID;
9015 
9016         EXIT WHEN c_get_terr_qual%NOTFOUND;
9017 
9018         create_new_terr_qual_rec( p_new_terr_id, l_tmpl_terr_qual_rec, l_new_terr_qual_id);
9019 
9020         /* get the values for this template qualifier */
9021         OPEN c_get_terr_value (l_tmpl_terr_qual_rec.terr_qual_id);
9022         LOOP
9023 
9024           FETCH c_get_terr_value INTO
9025               l_tmpl_terr_value_rec.TERR_VALUE_ID
9026             , l_tmpl_terr_value_rec.LAST_UPDATE_DATE
9027             , l_tmpl_terr_value_rec.LAST_UPDATED_BY
9028             , l_tmpl_terr_value_rec.CREATION_DATE
9029             , l_tmpl_terr_value_rec.CREATED_BY
9030             , l_tmpl_terr_value_rec.LAST_UPDATE_LOGIN
9031             , l_tmpl_terr_value_rec.TERR_QUAL_ID
9032             , l_tmpl_terr_value_rec.INCLUDE_FLAG
9033             , l_tmpl_terr_value_rec.COMPARISON_OPERATOR
9034             , l_tmpl_terr_value_rec.LOW_VALUE_CHAR
9035             , l_tmpl_terr_value_rec.HIGH_VALUE_CHAR
9036             , l_tmpl_terr_value_rec.LOW_VALUE_NUMBER
9037             , l_tmpl_terr_value_rec.HIGH_VALUE_NUMBER
9038             , l_tmpl_terr_value_rec.VALUE_SET
9039             , l_tmpl_terr_value_rec.INTEREST_TYPE_ID
9040             , l_tmpl_terr_value_rec.PRIMARY_INTEREST_CODE_ID
9041             , l_tmpl_terr_value_rec.SECONDARY_INTEREST_CODE_ID
9042             , l_tmpl_terr_value_rec.CURRENCY_CODE
9043             , l_tmpl_terr_value_rec.ORG_ID
9044             , l_tmpl_terr_value_rec.ID_USED_FLAG
9045             , l_tmpl_terr_value_rec.LOW_VALUE_CHAR_ID
9046             , l_tmpl_terr_value_rec.QUALIFIER_TBL_INDEX
9047             , l_tmpl_terr_value_rec.CNR_GROUP_ID
9048             , l_tmpl_terr_value_rec.VALUE1_ID
9049             , l_tmpl_terr_value_rec.VALUE2_ID
9050             , l_tmpl_terr_value_rec.VALUE3_ID
9051             , l_tmpl_terr_value_rec.VALUE4_ID;
9052 
9053           EXIT WHEN c_get_terr_value%NOTFOUND;
9054 
9055           create_new_terr_value_rec( p_new_terr_id
9056                                    , l_new_terr_qual_id
9057                                    , l_tmpl_terr_value_rec
9058                                    , l_new_terr_value_id);
9059 
9060         END LOOP;
9061         CLOSE c_get_terr_value;
9062 
9063      END LOOP;
9064      CLOSE c_get_terr_qual;
9065 
9066      --dbms_output('insert_static_qual_values END');
9067 
9068   END insert_static_qual_values;
9069 
9070 
9071 /*--------------------------------------------------------------------------------------*/
9072   -- loads the values for generation into a PL/SQL table
9073   PROCEDURE load_dynamic_qual_values ( p_template_terr_id IN  NUMBER
9074                                      , x_qual_tbl         OUT NOCOPY Dynamic_Qual_Tbl_Type
9075                                      , x_val_tbl          OUT NOCOPY Terr_Values_Tbl_Type ) IS
9076 
9077     /* cursor to get dynamic qualifiers */
9078     CURSOR c_get_terr_qual (p_template_terr_id NUMBER) IS
9079        SELECT j1.rowid
9080             , j1.TERR_QUAL_ID
9081             , j1.LAST_UPDATE_DATE
9082             , j1.LAST_UPDATED_BY
9083             , j1.CREATION_DATE
9084             , j1.CREATED_BY
9085             , j1.LAST_UPDATE_LOGIN
9086             , j1.TERR_ID
9087             , j1.QUAL_USG_ID
9088             , j1.USE_TO_NAME_FLAG
9089             , j1.GENERATE_FLAG
9090             , j1.OVERLAP_ALLOWED_FLAG
9091             , j1.QUALIFIER_MODE
9092             , j1.ORG_ID
9093       FROM   jtf_terr_qual j1
9094       WHERE  j1.terr_id = p_template_terr_id
9095       AND    j1.qualifier_mode = 'DYNAMIC';
9096 
9097     /* cursor to get values for dynamic qualifier values */
9098     CURSOR c_get_terr_values (p_terr_qual_id NUMBER) IS
9099        SELECT j1.TERR_VALUE_ID
9100             , j1.LAST_UPDATE_DATE
9101             , j1.LAST_UPDATED_BY
9102             , j1.CREATION_DATE
9103             , j1.CREATED_BY
9104             , j1.LAST_UPDATE_LOGIN
9105             , j1.TERR_QUAL_ID
9106             , j1.INCLUDE_FLAG
9107             , j1.COMPARISON_OPERATOR
9108             , j1.LOW_VALUE_CHAR
9109             , j1.HIGH_VALUE_CHAR
9110             , j1.LOW_VALUE_NUMBER
9111             , j1.HIGH_VALUE_NUMBER
9112             , j1.VALUE_SET
9113             , j1.INTEREST_TYPE_ID
9114             , j1.PRIMARY_INTEREST_CODE_ID
9115             , j1.SECONDARY_INTEREST_CODE_ID
9116             , j1.CURRENCY_CODE
9117             , j1.ID_USED_FLAG
9118             , j1.LOW_VALUE_CHAR_ID
9119             , NULL QUALIFIER_TBL_INDEX
9120             , j1.ORG_ID
9121             , j1.CNR_GROUP_ID
9122             , j1.VALUE1_ID
9123             , j1.VALUE2_ID
9124             , j1.VALUE3_ID
9125             , j1.VALUE4_ID
9126       FROM   jtf_terr_values j1
9127       WHERE  j1.terr_qual_id = p_terr_qual_id
9128       ORDER BY j1.value_set;
9129 
9130     l_tmpl_terr_qual_rec        Terr_Qual_Rec_Type;
9131 
9132     l_qual_curr_rec_num         NUMBER := 0;
9133     l_val_curr_rec_num          NUMBER := 0;
9134 
9135   BEGIN
9136 
9137     --dbms_output('[1] load_dynamic_qual_values');
9138 
9139     /* get the DYNAMIC qualifiers for this template territory */
9140     OPEN c_get_terr_qual(p_template_terr_id);
9141     LOOP
9142        FETCH c_get_terr_qual INTO
9143               l_tmpl_terr_qual_rec.rowid
9144             , l_tmpl_terr_qual_rec.TERR_QUAL_ID
9145             , l_tmpl_terr_qual_rec.LAST_UPDATE_DATE
9146             , l_tmpl_terr_qual_rec.LAST_UPDATED_BY
9147             , l_tmpl_terr_qual_rec.CREATION_DATE
9148             , l_tmpl_terr_qual_rec.CREATED_BY
9149             , l_tmpl_terr_qual_rec.LAST_UPDATE_LOGIN
9150             , l_tmpl_terr_qual_rec.TERR_ID
9151             , l_tmpl_terr_qual_rec.QUAL_USG_ID
9152             , l_tmpl_terr_qual_rec.USE_TO_NAME_FLAG
9153             , l_tmpl_terr_qual_rec.GENERATE_FLAG
9154             , l_tmpl_terr_qual_rec.OVERLAP_ALLOWED_FLAG
9155             , l_tmpl_terr_qual_rec.QUALIFIER_MODE
9156             , l_tmpl_terr_qual_rec.ORG_ID;
9157 
9158        EXIT WHEN c_get_terr_qual%NOTFOUND;
9159 
9160        --dbms_output('[2] load_dynamic_qual_values');
9161 
9162        x_qual_tbl(l_qual_curr_rec_num).QUAL_USG_ID             := l_tmpl_terr_qual_rec.qual_usg_id;
9163 
9164        x_qual_tbl(l_qual_curr_rec_num).USE_TO_NAME_FLAG        := l_tmpl_terr_qual_rec.use_to_name_flag;
9165        x_qual_tbl(l_qual_curr_rec_num).GENERATE_FLAG           := l_tmpl_terr_qual_rec.generate_flag;
9166        x_qual_tbl(l_qual_curr_rec_num).OVERLAP_ALLOWED_FLAG    := l_tmpl_terr_qual_rec.overlap_allowed_flag;
9167        x_qual_tbl(l_qual_curr_rec_num).QUALIFIER_MODE          := '';
9168        x_qual_tbl(l_qual_curr_rec_num).ORG_ID                  := l_tmpl_terr_qual_rec.org_id;
9169 
9170 
9171        x_qual_tbl(l_qual_curr_rec_num).start_record            := l_val_curr_rec_num;
9172        x_qual_tbl(l_qual_curr_rec_num).current_record          := 0;
9173 
9174        x_qual_tbl(l_qual_curr_rec_num).current_value_set       := 1;
9175 
9176        --dbms_output('[3] load_dynamic_qual_values');
9177 
9178        /* get the values for this territory qualifier */
9179        OPEN c_get_terr_values(l_tmpl_terr_qual_rec.terr_qual_id);
9180        LOOP
9181           FETCH c_get_terr_values INTO
9182               x_val_tbl(l_val_curr_rec_num).TERR_VALUE_ID
9183             , x_val_tbl(l_val_curr_rec_num).LAST_UPDATE_DATE
9184             , x_val_tbl(l_val_curr_rec_num).LAST_UPDATED_BY
9185             , x_val_tbl(l_val_curr_rec_num).CREATION_DATE
9186             , x_val_tbl(l_val_curr_rec_num).CREATED_BY
9187             , x_val_tbl(l_val_curr_rec_num).LAST_UPDATE_LOGIN
9188             , x_val_tbl(l_val_curr_rec_num).TERR_QUAL_ID
9189             , x_val_tbl(l_val_curr_rec_num).INCLUDE_FLAG
9190             , x_val_tbl(l_val_curr_rec_num).COMPARISON_OPERATOR
9191             , x_val_tbl(l_val_curr_rec_num).LOW_VALUE_CHAR
9192             , x_val_tbl(l_val_curr_rec_num).HIGH_VALUE_CHAR
9193             , x_val_tbl(l_val_curr_rec_num).LOW_VALUE_NUMBER
9194             , x_val_tbl(l_val_curr_rec_num).HIGH_VALUE_NUMBER
9195             , x_val_tbl(l_val_curr_rec_num).VALUE_SET
9196             , x_val_tbl(l_val_curr_rec_num).INTEREST_TYPE_ID
9197             , x_val_tbl(l_val_curr_rec_num).PRIMARY_INTEREST_CODE_ID
9198             , x_val_tbl(l_val_curr_rec_num).SECONDARY_INTEREST_CODE_ID
9199             , x_val_tbl(l_val_curr_rec_num).CURRENCY_CODE
9200             , x_val_tbl(l_val_curr_rec_num).ID_USED_FLAG
9201             , x_val_tbl(l_val_curr_rec_num).LOW_VALUE_CHAR_ID
9202             , x_val_tbl(l_val_curr_rec_num).QUALIFIER_TBL_INDEX
9203             , x_val_tbl(l_val_curr_rec_num).ORG_ID
9204             , x_val_tbl(l_val_curr_rec_num).CNR_GROUP_ID
9205             , x_val_tbl(l_val_curr_rec_num).VALUE1_ID
9206             , x_val_tbl(l_val_curr_rec_num).VALUE2_ID
9207             , x_val_tbl(l_val_curr_rec_num).VALUE3_ID
9208             , x_val_tbl(l_val_curr_rec_num).VALUE4_ID;
9209 
9210           EXIT WHEN c_get_terr_values%NOTFOUND;
9211 
9212           /* increment loop counter */
9213           l_val_curr_rec_num := l_val_curr_rec_num + 1;
9214 
9215           --dbms_output('Value of l_val_curr_rec_num = '||TO_CHAR(l_val_curr_rec_num ));
9216 
9217        END LOOP;
9218 
9219        /* get number of value records for this qualifier */
9220        x_qual_tbl(l_qual_curr_rec_num).num_records := c_get_terr_values%ROWCOUNT;
9221 
9222       CLOSE c_get_terr_values;
9223 
9224       /* increment loop counter */
9225       l_qual_curr_rec_num := l_qual_curr_rec_num + 1;
9226 
9227     END LOOP;
9228 
9229     CLOSE c_get_terr_qual;
9230 
9231   END load_dynamic_qual_values;
9232 
9233 
9234 /*--------------------------------------------------------------------------------------*/
9235   /* increments counter for the values used in generation
9236   ** THis is called after generation of each territory.
9237   ** Works like a digital counter where the last (right-most) digit is
9238   ** incremented. If it reaches its max value, it is set to zero and the
9239   ** previous digit is incremented. THis is done recursively until you reach
9240   ** a digit which has not reached its max value.
9241   ** THe number of digits here is the number of qualifiers used in generation.
9242   ** THe max value for each digit is the number of values for each qualifier.
9243   */
9244   FUNCTION increment_counter( p_dyn_qual_tbl      IN OUT NOCOPY Dynamic_Qual_Tbl_Type
9245                             , p_qual_index        IN     NUMBER
9246                             , p_dyn_qual_val_tbl  IN     Terr_Values_Tbl_Type)
9247   RETURN BOOLEAN
9248   IS
9249 
9250      i              NUMBER;
9251      l_start_rec    NUMBER;
9252      l_rec_counter  NUMBER := 0;
9253 
9254   BEGIN
9255 
9256     --dbms_output( '[1]Increment Counter: p_qual_index = ' || p_qual_index);
9257 
9258     --dbms_output(  '[2]Increment Counter: p_dyn_qual_tbl(i).current_record = ' || TO_char(p_dyn_qual_tbl(p_qual_index).current_record));
9259 
9260     --dbms_output( '[3]Increment Counter:p_dyn_qual_tbl(i).start_record = ' || TO_CHAR(p_dyn_qual_tbl(p_qual_index).start_record));
9261 
9262     /**/
9263     l_start_rec := p_dyn_qual_tbl(p_qual_index).start_record +
9264                    p_dyn_qual_tbl(p_qual_index).current_record;
9265 
9266     i := l_start_rec;
9267 
9268     --dbms_output( '[4]Increment Counter: l_start_rec = ' || TO_CHAR(l_start_rec));
9269 
9270     FOR i in l_start_rec .. p_dyn_qual_val_tbl.COUNT-1 LOOP
9271 
9272       /* added March 4 */
9273       EXIT WHEN ( p_dyn_qual_val_tbl(i).value_set <>
9274                        p_dyn_qual_tbl(p_qual_index).current_value_set );
9275 
9276       l_rec_counter := l_rec_counter + 1;
9277 
9278       --dbms_output( '[5]Increment Counter: value_set = ' || TO_CHAR(p_dyn_qual_val_tbl(i).value_set) || ' l_rec_counter = ' || l_rec_counter );
9279 
9280     END LOOP;
9281     /**/
9282 
9283     /* move current record pointer to start of next value set */
9284     p_dyn_qual_tbl(p_qual_index).current_record :=
9285                                       p_dyn_qual_tbl(p_qual_index).current_record + l_rec_counter;
9286     /**/
9287 
9288     --dbms_output(  '[6]Increment Counter: p_dyn_qual_tbl(i).current_record = ' || TO_char(p_dyn_qual_tbl(p_qual_index).current_record));
9289 
9290     /* increment current value_set counter */
9291     p_dyn_qual_tbl(p_qual_index).current_value_set :=
9292                                       p_dyn_qual_tbl(p_qual_index).current_value_set + 1;
9293     /**/
9294 
9295       --dbms_output( '[7]Increment Counter: value_set = ' || TO_CHAR(p_dyn_qual_tbl(p_qual_index).current_value_set));
9296 
9297     /* last value for qualifier reached, so reset and increment previous qualifier */
9298     IF ( p_dyn_qual_tbl(p_qual_index).current_record =
9299                                    p_dyn_qual_tbl(p_qual_index).num_records ) THEN
9300 
9301          --dbms_output( '[-]last value for the CURRENT qualifier reached');
9302          p_dyn_qual_tbl(p_qual_index).current_record := 0;
9303 
9304          /* added March 3 */
9305          p_dyn_qual_tbl(p_qual_index).current_value_set := 1;
9306          /**/
9307 
9308          IF (p_qual_index = 0) THEN
9309             --dbms_output( '[-]last value for the first qualifier reached');
9310 
9311              -- last value for the first qualifier reached
9312              RETURN FALSE;
9313          ELSE
9314             --dbms_output( '[-]Recursively calling increment_counter');
9315 
9316             RETURN increment_counter(p_dyn_qual_tbl, p_qual_index -1, p_dyn_qual_val_tbl);
9317          END IF;
9318 
9319     ELSE
9320       RETURN TRUE;
9321     END IF;
9322 
9323   END increment_counter;
9324 
9325   /* for debugging */
9326   --PROCEDURE print_qual_table (p_qualifier_table Dynamic_Qual_Tbl_Type) IS
9327   --BEGIN
9328   --  dbms_output.put_line('--------');
9329   --  FOR i IN 0 .. p_qualifier_table.COUNT-1 LOOP
9330   --    dbms_output.put_line('Qual_Usg_Id: ' || to_char(p_qualifier_table(i).qual_usg_id));
9331   --    dbms_output.put_line('Start_record: '||to_char(p_qualifier_table(i).start_record)
9332   --            ||'  Number of records: '||to_char(p_qualifier_table(i).num_records)
9333   --            ||'   Current record: '||to_char(p_qualifier_table(i).current_record));
9334   --  END LOOP;
9335   --END print_qual_table;
9336 
9337 
9338 /*--------------------------------------------------------------------------------------*/
9339    PROCEDURE Gen_Template_Territories (
9340     p_Api_Version_Number          IN  NUMBER,
9341     p_Init_Msg_List               IN  VARCHAR2     := FND_API.G_FALSE,
9342     p_Commit                      IN  VARCHAR2     := FND_API.G_FALSE,
9343     p_validation_level            IN  NUMBER       := FND_API.G_VALID_LEVEL_FULL,
9344     p_Template_Terr_Id            IN  NUMBER,
9345     x_Return_Status               OUT NOCOPY VARCHAR2,
9346     x_Msg_Count                   OUT NOCOPY NUMBER,
9347     x_Msg_Data                    OUT NOCOPY VARCHAR2,
9348     x_num_gen_terr                OUT NOCOPY NUMBER
9349    )
9350    AS
9351 
9352       /* local standard API variables */
9353       l_api_name              CONSTANT VARCHAR2(30) := 'Generate_Template_Territories';
9354       l_api_version_number    CONSTANT NUMBER       := 1.0;
9355       l_return_status         VARCHAR2(200);
9356       l_msg_count             NUMBER;
9357       l_msg_data              VARCHAR2(2000);
9358 
9359       /* local variables */
9360       l_template_terr_rec     Terr_All_Rec_Type;
9361       l_new_terr_id           NUMBER;
9362 
9363       l_tmpl_usgs_tbl         Terr_Usgs_Tbl_Type;
9364       l_tmpl_qtype_usgs_tbl   Terr_QualTypeUsgs_Tbl_Type;
9365 
9366       l_dyn_qual_tbl          Dynamic_Qual_Tbl_Type;
9367       l_tmpl_terr_qual_rec    Terr_Qual_Rec_Type;
9368       l_new_terr_qual_id      NUMBER;
9369 
9370       l_dyn_qual_val_tbl      Terr_Values_Tbl_Type;
9371       l_new_terr_value_id     NUMBER;
9372 
9373       l_num_gen_terr          NUMBER := 0;
9374       l_rec_index             NUMBER := 0;
9375       l_terr_count            NUMBER := 0;
9376       l_tbl_count             NUMBER;
9377 
9378    BEGIN
9379 
9380       -- Standard Start of API savepoint
9381       SAVEPOINT GEN_TEMPLATE_TERR_PVT;
9382 
9383       -- Standard call to check for call compatibility.
9384       IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
9385                                            p_api_version_number,
9386                                            l_api_name,
9387                                            G_PKG_NAME)
9388       THEN
9389           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9390       END IF;
9391 
9392       -- Initialize message list if p_init_msg_list is set to TRUE.
9393       IF FND_API.to_Boolean( p_init_msg_list ) THEN
9394           FND_MSG_PUB.initialize;
9395       END IF;
9396 
9397       -- Debug Message
9398       IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
9399       THEN
9400           FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_START_MSG');
9401           FND_MESSAGE.Set_Token('PROC_NAME', l_api_name);
9402           FND_MSG_PUB.Add;
9403       END IF;
9404 
9405       --  Initialize API return status to success
9406       x_return_status := FND_API.G_RET_STS_SUCCESS;
9407 
9408 
9409       /* ===================== */
9410       /*    API BODY START     */
9411       /* ======================*/
9412 
9413       --arpatel 07/13 bug#1872642
9414       --IF (p_validation_level >= FND_API.G_VALID_LEVEL_FULL) THEN
9415 
9416          /* Debug message */
9417          IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
9418          THEN
9419             FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_VALIDATE_MSG');
9420             FND_MESSAGE.Set_Token('PROC_NAME', 'Validate_Template_Record');
9421             FND_MSG_PUB.Add;
9422          END IF;
9423 
9424          /* Invoke validation procedures */
9425          Validate_Template_Record( p_init_msg_list    => FND_API.G_FALSE
9426                                  , p_Template_Terr_Id => p_template_terr_id
9427                                  , x_Return_Status    => x_return_status
9428                                  , x_msg_count        => x_msg_count
9429                                  , x_msg_data         => x_msg_data );
9430 
9431          IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
9432          RAISE FND_API.G_EXC_ERROR;
9433          END IF;
9434 
9435       --END IF;
9436 
9437       initialise( p_template_terr_id
9438                 , l_template_terr_rec
9439                 , l_num_gen_terr
9440                 , l_tmpl_usgs_tbl
9441                 , l_tmpl_qtype_usgs_tbl);
9442 
9443       --dbms_output( '[1] After Initialize: l_num_gen_terr = ' || TO_CHAR(l_num_gen_terr) );
9444 
9445       load_dynamic_qual_values(p_template_terr_id, l_dyn_qual_tbl, l_dyn_qual_val_tbl);
9446 
9447       /* for debugging purposes */
9448       --print_qual_table(l_dyn_qual_tbl);
9449 
9450       LOOP
9451 
9452          /* create new territory record */
9453          create_new_terr(l_template_terr_rec, l_terr_count, l_new_terr_id);
9454 
9455          --dbms_output('------------------------------------------------------');
9456          --dbms_output('------------------------------------------------------');
9457          --dbms_output( '[' || l_terr_count || '] AFTER create_new_terr PVT: l_new_terr_id = ' || TO_CHAR(l_new_terr_id));
9458 
9459          /* create new territory usages record(s) */
9460          create_new_terr_usgs(l_new_terr_id, l_tmpl_usgs_tbl);
9461 
9462          /* create new territory qual type usages record(s) */
9463          create_new_terr_qtype_usgs(l_new_terr_id, l_tmpl_qtype_usgs_tbl);
9464 
9465          /* for all STATIC qualifier values */
9466          insert_static_qual_values(p_template_terr_id, l_new_terr_id);
9467 
9468          FOR i IN 0 .. l_dyn_qual_tbl.COUNT-1 LOOP
9469 
9470             /* Instantiate record items from appropriate items */
9471             l_tmpl_terr_qual_rec.qual_usg_id           := l_dyn_qual_tbl(i).QUAL_USG_ID;
9472             l_tmpl_terr_qual_rec.use_to_name_flag      := l_dyn_qual_tbl(i).USE_TO_NAME_FLAG;
9473             l_tmpl_terr_qual_rec.generate_flag         := l_dyn_qual_tbl(i).GENERATE_FLAG;
9474             l_tmpl_terr_qual_rec.overlap_allowed_flag  := l_dyn_qual_tbl(i).OVERLAP_ALLOWED_FLAG;
9475             l_tmpl_terr_qual_rec.qualifier_mode        := l_dyn_qual_tbl(i).QUALIFIER_MODE;
9476             l_tmpl_terr_qual_rec.org_id                := l_dyn_qual_tbl(i).ORG_ID;
9477 
9478             /* insert record IN JTF_TERR_QUAL_ALL  */
9479             create_new_terr_qual_rec(l_new_terr_id, l_tmpl_terr_qual_rec, l_new_terr_qual_id);
9480 
9481            l_rec_index := l_dyn_qual_tbl(i).start_record + l_dyn_qual_tbl(i).current_record;
9482 
9483            --dbms_output( '      Inserting Terr Qual: Qual_Usg_id = ' || TO_CHAR(l_dyn_qual_tbl(i).QUAL_USG_ID) || ' L_REC_INDEX = ' || l_rec_index);
9484 
9485     /*******************************************************************************************/
9486            LOOP
9487 
9488               /* exit if last qualifier's last value is reached - */
9489               /* prevents NO_DATA_FOUND exception being raised */
9490               /* by referring to a non-existent table element */
9491               EXIT WHEN ( l_tbl_count = l_rec_index );
9492 
9493               --EXIT WHEN ( l_dyn_qual_val_tbl(l_rec_index).value_set =
9494               --                             l_dyn_qual_tbl(i).current_value_set + 1);
9495 
9496               /* added March 3rd - JDOCHERT */
9497               /* exit when value set changes */
9498               EXIT WHEN ( l_dyn_qual_val_tbl(l_rec_index).value_set <>
9499                                            l_dyn_qual_tbl(i).current_value_set);
9500 
9501               --OR l_dyn_qual_val_tbl(l_rec_index).qual_usg_id
9502               --                             <> l_dyn_qual_tbl(i).qual_usg_id
9503 
9504               create_new_terr_value_rec( l_new_terr_id
9505                                        , l_new_terr_qual_id
9506                                        , l_dyn_qual_val_tbl(l_rec_index)
9507                                        , l_new_terr_value_id );
9508 /*
9509               --dbms_output( '           Inserting Terr Val: Value_Set = ' ||
9510               --                      TO_CHAR(l_dyn_qual_val_tbl(l_rec_index).value_set) ||
9511               --                      ' l_rec_index = ' || l_rec_index ||
9512               --                      ' table_count = ' || l_dyn_qual_val_tbl.COUNT);
9513 */
9514 
9515              l_tbl_count := l_dyn_qual_val_tbl.COUNT;
9516 
9517              /* increment counter to point to next value in value set */
9518              l_rec_index := l_rec_index + 1;
9519              --dbms_output('l_tbl_count = ' || l_tbl_count);
9520 
9521              --IF (l_tbl_count = l_rec_index) THEN
9522              --  dbms_output.put_line('l_rec_index = l_tbl_count = ' || l_tbl_count);
9523              --END IF;
9524 
9525             END LOOP;
9526 
9527             --dbms_output('exited values inner loop');
9528 
9529 
9530     /*******************************************************************************************/
9531 
9532          END LOOP;
9533 
9534          l_terr_count := l_terr_count + 1;
9535 
9536          IF (increment_counter( l_dyn_qual_tbl
9537                               , l_dyn_qual_tbl.COUNT-1
9538                               , l_dyn_qual_val_tbl) = FALSE) THEN
9539             EXIT;
9540          END IF;
9541 
9542         ----dbms_output( 'Generate_Template_Territories PVT: l_terr_count = ' ||  TO_CHAR(l_terr_count));
9543 
9544         --EXIT WHEN l_terr_count =  l_num_gen_terr;
9545 
9546       END LOOP;
9547 
9548       /* return number of territories that
9549       ** were generated from template
9550       */
9551       x_num_gen_terr := l_terr_count;
9552 
9553       IF (l_terr_count <>  l_num_gen_terr) THEN
9554          x_return_status     := FND_API.G_RET_STS_ERROR ;
9555       END IF;
9556 
9557       /* ===================== */
9558       /*    API BODY END       */
9559       /* ======================*/
9560 
9561       -- Debug Message
9562       IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
9563       THEN
9564          FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_END_MSG');
9565          FND_MESSAGE.Set_Token('PROC_NAME', l_api_name);
9566          FND_MSG_PUB.Add;
9567       END IF;
9568 
9569       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9570          RAISE FND_API.G_EXC_ERROR;
9571       END IF;
9572 
9573       FND_MSG_PUB.Count_And_Get
9574       (  p_count          =>   x_msg_count,
9575          p_data           =>   x_msg_data
9576       );
9577 
9578       -- Standard check for p_commit
9579       IF FND_API.to_Boolean( p_commit )
9580       THEN
9581          COMMIT WORK;
9582       END IF;
9583   EXCEPTION
9584 
9585      WHEN FND_API.G_EXC_ERROR THEN
9586          --dbms_output('Generate_Template_Territories PVT: FND_API.G_EXC_ERROR');
9587          ROLLBACK TO GEN_TEMPLATE_TERR_PVT;
9588          x_return_status     := FND_API.G_RET_STS_ERROR ;
9589          FND_MSG_PUB.Count_And_Get
9590          (  p_count          =>   x_msg_count,
9591             p_data           =>   x_msg_data
9592          );
9593 
9594      WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
9595          --dbms_output('Generate_Template_Territories PVT: FND_API.G_EXC_UNEXPECTED_ERROR');
9596          ROLLBACK TO GEN_TEMPLATE_TERR_PVT;
9597          X_return_status     := FND_API.G_RET_STS_UNEXP_ERROR;
9598          FND_MSG_PUB.Count_And_Get
9599          (  p_count          =>   x_msg_count,
9600             p_data           =>   x_msg_data
9601          );
9602 
9603      WHEN OTHERS THEN
9604          --dbms_output('Generate_Template_Territories PVT: OTHERS - ' || SQLERRM);
9605          ROLLBACK TO GEN_TEMPLATE_TERR_PVT;
9606          X_return_status     := FND_API.G_RET_STS_UNEXP_ERROR;
9607          FND_MSG_PUB.Count_And_Get
9608          (  p_count          =>   x_msg_count,
9609             p_data           =>   x_msg_data
9610          );
9611 
9612 END Gen_Template_Territories;
9613 
9614 
9615 
9616 /*--------------------------------------------------------------------------------------*/
9617 -- eihsu100
9618    PROCEDURE Copy_Territory (
9619     p_Api_Version_Number          IN  NUMBER,
9620     p_Init_Msg_List               IN  VARCHAR2     := FND_API.G_FALSE,
9621     p_Commit                      IN  VARCHAR2     := FND_API.G_FALSE,
9622     p_validation_level            IN  NUMBER       := FND_API.G_VALID_LEVEL_FULL,
9623     p_copy_source_terr_Id         IN  NUMBER,
9624     p_new_terr_rec                IN  Terr_All_Rec_Type,
9625     p_copy_rsc_flag               IN  VARCHAR2 := 'N',
9626     p_copy_hierarchy_flag         IN  VARCHAR2 := 'N',
9627     p_first_terr_node_flag        IN  VARCHAR2 := 'N',
9628     x_Return_Status               OUT NOCOPY VARCHAR2,
9629     x_Msg_Count                   OUT NOCOPY NUMBER,
9630     x_Msg_Data                    OUT NOCOPY VARCHAR2,
9631     x_Terr_Id                     OUT NOCOPY NUMBER
9632    )
9633    AS
9634       /* local standard API variables */
9635       l_api_name              CONSTANT VARCHAR2(30) := 'Copy_Territory';
9636       l_api_version_number    CONSTANT NUMBER       := 1.0;
9637       l_return_status         VARCHAR2(200);
9638       l_msg_count             NUMBER;
9639       l_msg_data              VARCHAR2(2000);
9640 
9641       /* local variables */
9642       l_copy_source_terr_rec     Terr_All_Rec_Type;
9643       l_new_terr_id           NUMBER;
9644       l_terr_id               NUMBER;
9645 
9646       l_tmpl_usgs_tbl         Terr_Usgs_Tbl_Type;
9647       l_tmpl_qtype_usgs_tbl   Terr_QualTypeUsgs_Tbl_Type;
9648 
9649       l_dyn_qual_tbl          Dynamic_Qual_Tbl_Type;
9650       l_tmpl_terr_qual_rec    Terr_Qual_Rec_Type;
9651       l_new_terr_qual_id      NUMBER;
9652 
9653       l_dyn_qual_val_tbl      Terr_Values_Tbl_Type;
9654       l_new_terr_value_id     NUMBER;
9655 
9656       l_num_gen_terr          NUMBER := 0;
9657       l_rec_index             NUMBER := 0;
9658       l_terr_count            NUMBER := 0;
9659       l_tbl_count             NUMBER;
9660 
9661       CURSOR csr_child_terrs (p_terr_id NUMBER) IS
9662 	  select jta.terr_id
9663 	  from JTF_TERR_ALL jta
9664 	  where jta.parent_territory_id = p_terr_Id;
9665 
9666    BEGIN
9667 
9668       -- Standard Start of API savepoint
9669       SAVEPOINT COPY_TERR_PVT;
9670 
9671       -- Standard call to check for call compatibility.
9672       IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
9673                                            p_api_version_number,
9674                                            l_api_name,
9675                                            G_PKG_NAME)
9676       THEN
9677           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9678       END IF;
9679 
9680       -- Initialize message list if p_init_msg_list is set to TRUE.
9681       IF FND_API.to_Boolean( p_init_msg_list ) THEN
9682           FND_MSG_PUB.initialize;
9683       END IF;
9684 
9685       -- Debug Message
9686       IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
9687       THEN
9688           FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_START_MSG');
9689           FND_MESSAGE.Set_Token('PROC_NAME', l_api_name);
9690           FND_MSG_PUB.Add;
9691       END IF;
9692 
9693       --  Initialize API return status to success
9694       x_return_status := FND_API.G_RET_STS_SUCCESS;
9695 
9696 
9697       /* ===================== */
9698       /*    API BODY START     */
9699       /* ======================*/
9700 
9701       /* (validation procedures not necessary) */
9702 
9703       --dbms_output('JTF_TERRITORY_PVT:gen_dupliacte_territory: - BEGIN');
9704       -- get table of terr usages and terr qual type usages for the source territory
9705       initialise( p_copy_source_terr_id        -- input TERR_ID
9706                 , l_copy_source_terr_rec       -- output desc
9707                 , l_num_gen_terr            -- output (irrelevant)
9708                 , l_tmpl_usgs_tbl           -- output usages
9709                 , l_tmpl_qtype_usgs_tbl);   -- output transaction types
9710 
9711       --dbms_output( '[1] After Initialize: l_num_gen_terr = ' || TO_CHAR(l_num_gen_terr) );
9712 
9713          /* create new territory record */
9714          -- (l_copy_source_terr_rec, l_terr_count, l_new_terr_id);
9715          create_copied_terr(l_copy_source_terr_rec, p_new_terr_rec, 1, p_copy_hierarchy_flag, p_first_terr_node_flag, l_new_terr_id);
9716 
9717          /* create new territory usages record(s) */
9718          create_new_terr_usgs(l_new_terr_id, l_tmpl_usgs_tbl);
9719 
9720          /* create new territory qual type usages record(s) */
9721          create_new_terr_qtype_usgs(l_new_terr_id, l_tmpl_qtype_usgs_tbl);
9722 
9723          /* for all qualifier values */
9724          insert_copied_qual_values(p_copy_source_terr_id, l_new_terr_id);
9725       --dbms_output('JTF_TERRITORY_PVT:gen_dupliacte_territory: - END');
9726 
9727        /* START: 09/17/00 - JDOCHERT  */
9728        IF (p_copy_rsc_flag = 'Y') THEN
9729 
9730           JTF_TERRITORY_RESOURCE_PVT.copy_terr_resources( p_Api_Version_Number  => p_Api_Version_Number,
9731                                                           p_Init_Msg_List       => p_Init_Msg_List,
9732                                                           p_Commit              => p_Commit,
9733                                                           p_validation_level    => FND_API.G_VALID_LEVEL_FULL,
9734                                                           p_source_terr_id      => p_copy_source_terr_id,
9735                                                           p_dest_terr_id        => l_new_terr_id,
9736                                                           x_msg_count           => x_msg_count,
9737                                                           x_msg_data            => x_msg_data,
9738                                                           x_return_status       => x_return_status );
9739 
9740         END IF;
9741         /* END: 09/17/00 - JDOCHERT  */
9742 
9743       /* START: 04/05/01 - ARPATEL */
9744       IF (p_copy_hierarchy_flag = 'Y') THEN
9745 
9746 
9747         for terr_rec in csr_child_terrs(p_copy_Source_terr_id)
9748 	    loop
9749 
9750         --p_new_terr_rec.parent_territory_id := l_new_terr_id;
9751 
9752         JTF_TERRITORY_PVT.Copy_Territory (
9753            p_Api_Version_Number   =>  p_Api_Version_Number,
9754            p_Init_Msg_List        =>  p_Init_Msg_List,
9755            p_Commit               =>  p_Commit,
9756            p_validation_level     =>  p_validation_level,
9757            p_copy_source_terr_Id  =>  terr_rec.terr_id,
9758            p_new_terr_rec         =>  p_new_terr_rec,
9759            p_copy_rsc_flag        =>  p_copy_rsc_flag,
9760 	       p_copy_hierarchy_flag  =>  p_copy_hierarchy_flag,
9761            p_first_terr_node_flag =>  'N',
9762            x_Return_Status        =>  l_return_status,
9763            x_Msg_Count            =>  l_msg_count,
9764            x_Msg_Data             =>  l_msg_data,
9765            x_terr_id              =>  l_terr_id );
9766 
9767         update JTF_TERR_ALL
9768 	    set parent_territory_id = l_new_terr_id
9769 	    where terr_id = l_terr_id;
9770 
9771         end loop;
9772 
9773       END IF;
9774 
9775         /* END: 04/05/01 - ARPATEL */
9776 
9777       /* return new territory id */
9778       x_terr_id := l_new_terr_id;
9779 
9780       /* ===================== */
9781       /*    API BODY END       */
9782       /* ======================*/
9783 
9784       -- Debug Message
9785       IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)
9786       THEN
9787          FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_END_MSG');
9788          FND_MESSAGE.Set_Token('PROC_NAME', l_api_name);
9789          FND_MSG_PUB.Add;
9790       END IF;
9791 
9792       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9793          RAISE FND_API.G_EXC_ERROR;
9794       END IF;
9795 
9796       FND_MSG_PUB.Count_And_Get
9797       (  p_count          =>   x_msg_count,
9798          p_data           =>   x_msg_data
9799       );
9800 
9801       -- Standard check for p_commit
9802       IF FND_API.to_Boolean( p_commit )
9803       THEN
9804          COMMIT WORK;
9805       END IF;
9806   EXCEPTION
9807 
9808      WHEN FND_API.G_EXC_ERROR THEN
9809          --dbms_output('Generate_Duplicate_Territory PVT: FND_API.G_EXC_ERROR');
9810          ROLLBACK TO COPY_TERR_PVT;
9811          x_return_status     := FND_API.G_RET_STS_ERROR ;
9812          FND_MSG_PUB.Count_And_Get
9813          (  p_count          =>   x_msg_count,
9814             p_data           =>   x_msg_data
9815          );
9816 
9817      WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
9818          --dbms_output('Generate_Duplicate_Territory PVT: FND_API.G_EXC_UNEXPECTED_ERROR');
9819          ROLLBACK TO COPY_TERR_PVT;
9820          X_return_status     := FND_API.G_RET_STS_UNEXP_ERROR;
9821          FND_MSG_PUB.Count_And_Get
9822          (  p_count          =>   x_msg_count,
9823             p_data           =>   x_msg_data
9824          );
9825 
9826      WHEN OTHERS THEN
9827          --dbms_output('Generate_Duplicate_Territory PVT: OTHERS - ' || SQLERRM);
9828          ROLLBACK TO COPY_TERR_PVT;
9829          X_return_status     := FND_API.G_RET_STS_UNEXP_ERROR;
9830          FND_MSG_PUB.Count_And_Get
9831          (  p_count          =>   x_msg_count,
9832             p_data           =>   x_msg_data
9833          );
9834 
9835 END Copy_Territory;
9836 
9837 
9838 ---------------------------------------------------------------------
9839 --                overlap_exists
9840 ---------------------------------------------------------------------
9841 --
9842 --        Check whether overlap exists for a
9843 --        qualifier usage value passed in. Overlap is
9844 --        checked only under a single parent.
9845 ---------------------------------------------------------------------
9846 FUNCTION Overlap_Exists(p_Parent_Terr_Id              IN  NUMBER,
9847                         p_Qual_Usg_Id                 IN  NUMBER,
9848                         p_terr_value_record           IN  jtf_terr_values%ROWTYPE )
9849 RETURN VARCHAR2
9850 AS
9851     dummy                  NUMBER        := 0;
9852     l_found                NUMBER        := 0;
9853     l_qual_col1_datatype   VARCHAR2(25);
9854     l_display_type         VARCHAR2(25);
9855     l_convert_to_id_flag   VARCHAR2(2);
9856 BEGIN
9857     -- Get the qualifier usage related information
9858     select jqu.qual_col1_datatype, jqu.display_type, jqu.convert_to_id_flag
9859       into l_qual_col1_datatype, l_display_type, l_convert_to_id_flag
9860       from jtf_qual_usgs jqu
9861      where jqu.qual_usg_id = p_Qual_Usg_Id;
9862 
9863     -- Character
9864     -- low value char
9865     IF ( l_display_type = 'CHAR' and
9866          l_qual_col1_datatype = 'VARCHAR2' and
9867          ( l_convert_to_id_flag IN ('N', FND_API.G_MISS_CHAR) or
9868            l_convert_to_id_flag is NULL ) )
9869     Then
9870        If  p_terr_value_record.low_value_char is NOT NULL Then
9871            Select count(*)
9872              into dummy
9873              from jtf_terr_values jtv, jtf_terr_qual jtq, jtf_terr jt
9874             Where jt.parent_territory_id = p_Parent_Terr_Id
9875                   and jtq.terr_id = jt.terr_id
9876                   and jtq.qual_usg_id = p_Qual_Usg_Id
9877                   and jtv.terr_qual_id = jtq.terr_qual_id
9878                   and (   ( jtv.COMPARISON_OPERATOR = '<'  and p_terr_value_record.low_value_char < jtv.low_value_char )
9879                        or ( jtv.COMPARISON_OPERATOR = '<=' and p_terr_value_record.low_value_char <= jtv.low_value_char )
9880                        or ( jtv.COMPARISON_OPERATOR IN ('!=', '<>') and p_terr_value_record.low_value_char <> jtv.low_value_char )
9881                        or ( jtv.COMPARISON_OPERATOR = '='  and p_terr_value_record.low_value_char = jtv.low_value_char )
9882                        or ( jtv.COMPARISON_OPERATOR = '=' and jtv.low_value_char
9883                             between p_terr_value_record.low_value_char and p_terr_value_record.high_value_char )
9884                        or ( jtv.COMPARISON_OPERATOR = '>'  and p_terr_value_record.low_value_char > jtv.low_value_char )
9885                        or ( jtv.COMPARISON_OPERATOR = '>=' and p_terr_value_record.low_value_char >= jtv.low_value_char )
9886                        or ( UPPER(jtv.COMPARISON_OPERATOR) = 'BETWEEN' and p_terr_value_record.low_value_char between jtv.low_value_char and jtv.high_value_char )
9887                        or ( UPPER(jtv.COMPARISON_OPERATOR) = 'LIKE' and p_terr_value_record.low_value_char LIKE jtv.low_value_char )
9888                        or ( UPPER(jtv.COMPARISON_OPERATOR) = 'NOT BETWEEN' and p_terr_value_record.low_value_char not between jtv.low_value_char and jtv.high_value_char )
9889                        or ( UPPER(jtv.COMPARISON_OPERATOR) = 'NOT LIKE' and p_terr_value_record.low_value_char NOT LIKE jtv.low_value_char ) )
9890                    and rownum < 2;
9891              If dummy > 0 Then
9892                 l_found := dummy;
9893              End If;
9894         End If;
9895 
9896         -- Check the high_value_char
9897         If  p_terr_value_record.high_value_char is NOT NULL Then
9898            Select count(*)
9899              into dummy
9900              from jtf_terr_values jtv, jtf_terr_qual jtq, jtf_terr jt
9901             Where jt.parent_territory_id = p_Parent_Terr_Id
9902                   and jtq.terr_id = jt.terr_id
9903                   and jtq.qual_usg_id = p_Qual_Usg_Id
9904                   and jtv.terr_qual_id = jtq.terr_qual_id
9905                   and (   ( jtv.COMPARISON_OPERATOR = '<'  and p_terr_value_record.high_value_char < jtv.high_value_char )
9906                        or ( jtv.COMPARISON_OPERATOR = '<=' and p_terr_value_record.high_value_char <= jtv.high_value_char )
9907                        or ( jtv.COMPARISON_OPERATOR IN ('!=', '<>') and p_terr_value_record.high_value_char <> jtv.high_value_char )
9908                        or ( jtv.COMPARISON_OPERATOR = '='  and p_terr_value_record.high_value_char = jtv.high_value_char )
9909                        or ( jtv.COMPARISON_OPERATOR = '>'  and p_terr_value_record.high_value_char > jtv.high_value_char )
9910                        or ( jtv.COMPARISON_OPERATOR = '>=' and p_terr_value_record.high_value_char >= jtv.high_value_char )
9911                        or ( UPPER(jtv.COMPARISON_OPERATOR) = 'BETWEEN' and p_terr_value_record.high_value_char between jtv.low_value_char and jtv.high_value_char )
9912                        or ( UPPER(jtv.COMPARISON_OPERATOR) = 'LIKE' and p_terr_value_record.high_value_char LIKE jtv.low_value_char )
9913                        or ( UPPER(jtv.COMPARISON_OPERATOR) = 'NOT BETWEEN' and p_terr_value_record.high_value_char not between jtv.low_value_char and jtv.high_value_char )
9914                        or ( UPPER(jtv.COMPARISON_OPERATOR) = 'NOT LIKE' and p_terr_value_record.high_value_char NOT LIKE jtv.low_value_char ) )
9915                    and rownum < 2;
9916              If dummy > 0 Then
9917                 l_found := dummy;
9918              End If;
9919         End If;
9920 
9921     -- Numeric with CHAR display WHERE id is stored, e.g., Company Name
9922     ElsIf ( l_qual_col1_datatype = 'NUMBER' AND
9923             l_display_type = 'CHAR' AND
9924             l_convert_to_id_flag = 'Y' )
9925     Then
9926 
9927        -- only check for a subset of the availabel operator as these are the only
9928        -- available one for this combination
9929        Select count(*)
9930          into dummy
9931          from jtf_terr_values jtv, jtf_terr_qual jtq, jtf_terr jt
9932         Where jt.parent_territory_id = p_Parent_Terr_Id
9933               and jtq.terr_id = jt.terr_id
9934               and jtq.qual_usg_id = p_Qual_Usg_Id
9935               and jtv.terr_qual_id = jtq.terr_qual_id
9936               and jtv.LOW_VALUE_CHAR_ID =  p_terr_value_record.LOW_VALUE_CHAR_ID
9937               and rownum < 2;
9938        If dummy > 0 Then
9939           l_found := dummy;
9940        End If;
9941 
9942     ElsIf ( l_qual_col1_datatype = 'NUMBER' and l_display_type = 'NUMERIC'
9943             and  ( l_convert_to_id_flag = 'N' or l_convert_to_id_flag is NULL ) )
9944     Then
9945 
9946         If  p_terr_value_record.low_value_number is NOT NULL Then
9947             Select 1
9948               into dummy
9949              from jtf_terr_values jtv, jtf_terr_qual jtq, jtf_terr jt
9950              Where jt.parent_territory_id = p_Parent_Terr_Id
9951                    and jtq.terr_id = jt.terr_id
9952                    and jtq.qual_usg_id = p_Qual_Usg_Id
9953                    and jtv.terr_qual_id = jtq.terr_qual_id
9954                    and (   ( jtv.COMPARISON_OPERATOR = '<'  and p_terr_value_record.LOW_VALUE_number < jtv.low_value_number )
9955                         or ( jtv.COMPARISON_OPERATOR = '<=' and p_terr_value_record.LOW_VALUE_number <= jtv.low_value_number )
9956                         or ( jtv.COMPARISON_OPERATOR IN ('!=', '<>') and p_terr_value_record.LOW_VALUE_number <> jtv.low_value_number )
9957                         or ( jtv.COMPARISON_OPERATOR = '='  and p_terr_value_record.LOW_VALUE_number = jtv.low_value_number )
9958                         or ( jtv.COMPARISON_OPERATOR = '>'  and p_terr_value_record.LOW_VALUE_number > jtv.low_value_number )
9959                         or ( jtv.COMPARISON_OPERATOR = '>=' and p_terr_value_record.LOW_VALUE_number >= jtv.low_value_number )
9960                         or ( UPPER(jtv.COMPARISON_OPERATOR) = 'BETWEEN' and p_terr_value_record.LOW_VALUE_number between jtv.low_value_number and jtv.high_value_number )
9961                         or ( UPPER(jtv.COMPARISON_OPERATOR) = 'NOT BETWEEN' and p_terr_value_record.LOW_VALUE_number not between jtv.low_value_number and jtv.high_value_number ))
9962                    and rownum < 2;
9963             If dummy > 0 Then
9964                l_found := dummy;
9965             End If;
9966          End If;
9967 
9968          If  p_terr_value_record.high_value_number is NOT NULL Then
9969              Select 1
9970                into dummy
9971               from jtf_terr_values jtv, jtf_terr_qual jtq, jtf_terr jt
9972               Where jt.parent_territory_id = p_Parent_Terr_Id
9973                     and jtq.terr_id = jt.terr_id
9974                     and jtq.qual_usg_id = p_Qual_Usg_Id
9975                     and jtv.terr_qual_id = jtq.terr_qual_id
9976                     and (   ( jtv.COMPARISON_OPERATOR = '<'  and p_terr_value_record.high_value_number < jtv.high_value_number )
9977                          or ( jtv.COMPARISON_OPERATOR = '<=' and p_terr_value_record.high_value_number <= jtv.high_value_number )
9978                          or ( jtv.COMPARISON_OPERATOR IN ('!=', '<>') and p_terr_value_record.high_value_number <> jtv.high_value_number )
9979                          or ( jtv.COMPARISON_OPERATOR = '='  and p_terr_value_record.high_value_number = jtv.high_value_number )
9980                          or ( jtv.COMPARISON_OPERATOR = '>'  and p_terr_value_record.high_value_number > jtv.high_value_number )
9981                          or ( jtv.COMPARISON_OPERATOR = '>=' and p_terr_value_record.high_value_number >= jtv.high_value_number )
9982                          or ( UPPER(jtv.COMPARISON_OPERATOR) = 'BETWEEN' and p_terr_value_record.high_value_number between jtv.low_value_number and jtv.high_value_number )
9983                          or ( UPPER(jtv.COMPARISON_OPERATOR) = 'NOT BETWEEN' and p_terr_value_record.high_value_number not between jtv.low_value_number and jtv.high_value_number ))
9984                     and rownum < 2;
9985              If dummy > 0 Then
9986                 l_found := dummy;
9987              End If;
9988          End If;
9989 
9990     ElsIf ( l_qual_col1_datatype = 'NUMBER' AND
9991             l_display_type = 'CURRENCY' AND
9992             ( l_convert_to_id_flag IN ('N', FND_API.G_MISS_CHAR) OR
9993               l_convert_to_id_flag is NULL ) )
9994     Then
9995 
9996        If  p_terr_value_record.low_value_number is NOT NULL Then
9997            Select count(*)
9998              into dummy
9999             from jtf_terr_values jtv, jtf_terr_qual jtq, jtf_terr jt
10000             Where jt.parent_territory_id = p_Parent_Terr_Id
10001                   and jtq.terr_id = jt.terr_id
10002                   and jtq.qual_usg_id = p_Qual_Usg_Id
10003                   and jtv.terr_qual_id = jtq.terr_qual_id
10004                   and (   ( jtv.COMPARISON_OPERATOR = '<'  and p_terr_value_record.LOW_VALUE_number < jtv.low_value_number )
10005                        or ( jtv.COMPARISON_OPERATOR = '<=' and p_terr_value_record.LOW_VALUE_number <= jtv.low_value_number )
10006                        or ( jtv.COMPARISON_OPERATOR IN ('!=', '<>') and p_terr_value_record.LOW_VALUE_number <> jtv.low_value_number )
10007                        or ( jtv.COMPARISON_OPERATOR = '='  and p_terr_value_record.LOW_VALUE_number = jtv.low_value_number )
10008                        or ( jtv.COMPARISON_OPERATOR = '>'  and p_terr_value_record.LOW_VALUE_number > jtv.low_value_number )
10009                        or ( jtv.COMPARISON_OPERATOR = '>=' and p_terr_value_record.LOW_VALUE_number >= jtv.low_value_number )
10010                        or ( UPPER(jtv.COMPARISON_OPERATOR) = 'BETWEEN' and p_terr_value_record.LOW_VALUE_number between jtv.low_value_number and jtv.high_value_number )
10011                        or ( UPPER(jtv.COMPARISON_OPERATOR) = 'NOT BETWEEN' and p_terr_value_record.LOW_VALUE_number not between jtv.low_value_number and jtv.high_value_number ))
10012                and rownum < 2;
10013                If dummy > 0 Then
10014                   l_found := dummy;
10015                End If;
10016         End If;
10017 
10018         If  p_terr_value_record.high_value_number is NOT NULL Then
10019             Select count(*)
10020               into dummy
10021              from jtf_terr_values jtv, jtf_terr_qual jtq, jtf_terr jt
10022              Where jt.parent_territory_id = p_Parent_Terr_Id
10023                    and jtq.terr_id = jt.terr_id
10024                    and jtq.qual_usg_id = p_Qual_Usg_Id
10025                    and jtv.terr_qual_id = jtq.terr_qual_id
10026                    and (   ( jtv.COMPARISON_OPERATOR = '<'  and p_terr_value_record.HIGH_VALUE_number < jtv.high_value_number )
10027                         or ( jtv.COMPARISON_OPERATOR = '<=' and p_terr_value_record.HIGH_VALUE_number <= jtv.high_value_number )
10028                         or ( jtv.COMPARISON_OPERATOR IN ('!=', '<>') and p_terr_value_record.HIGH_VALUE_number <> jtv.high_value_number )
10029                         or ( jtv.COMPARISON_OPERATOR = '='  and p_terr_value_record.HIGH_VALUE_number = jtv.high_value_number )
10030                         or ( jtv.COMPARISON_OPERATOR = '>'  and p_terr_value_record.HIGH_VALUE_number > jtv.high_value_number )
10031                         or ( jtv.COMPARISON_OPERATOR = '>=' and p_terr_value_record.HIGH_VALUE_number >= jtv.high_value_number )
10032                         or ( UPPER(jtv.COMPARISON_OPERATOR) = 'BETWEEN' and p_terr_value_record.HIGH_VALUE_number between jtv.low_value_number and jtv.high_value_number )
10033                         or ( UPPER(jtv.COMPARISON_OPERATOR) = 'NOT BETWEEN' and p_terr_value_record.HIGH_VALUE_number not between jtv.low_value_number and jtv.high_value_number ))
10034                    and rownum < 2;
10035                If dummy > 0 Then
10036                   l_found := dummy;
10037                End If;
10038         End If;
10039 
10040     ElsIf ( l_qual_col1_datatype = 'NUMBER' AND
10041             l_display_type = 'INTEREST_TYPE'AND
10042             ( l_convert_to_id_flag IN ('N', FND_API.G_MISS_CHAR) OR
10043               l_convert_to_id_flag is NULL ) )
10044     Then
10045        Select count(*)
10046          into dummy
10047         from jtf_terr_values jtv, jtf_terr_qual jtq, jtf_terr jt
10048         Where jt.parent_territory_id = p_Parent_Terr_Id
10049               and jtq.terr_id = jt.terr_id
10050               and jtq.qual_usg_id = p_Qual_Usg_Id
10051               and jtv.terr_qual_id = jtq.terr_qual_id
10052               and ( ( jtv.interest_type_id = p_terr_value_record.interest_type_id )
10053               and ( jtv.primary_interest_code_id = p_terr_value_record.primary_interest_code_id or
10054                     ( jtv.primary_interest_code_id IS NULL and p_terr_value_record.primary_interest_code_id is NULL) )
10055               and ( jtv.secondary_interest_code_id = p_terr_value_record.secondary_interest_code_id or
10056                     ( jtv.secondary_interest_code_id is NULL  and p_terr_value_record.secondary_interest_code_id is NULL) ) )
10057               and rownum < 2;
10058        If dummy > 0 Then
10059           l_found := dummy;
10060        End If;
10061     End If;
10062 
10063     If l_found > 0 Then
10064        RETURN FND_API.G_TRUE;
10065     Else
10066        RETURN FND_API.G_FALSE;
10067     End If;
10068 EXCEPTION
10069     WHEN NO_DATA_FOUND Then
10070          RETURN FND_API.G_FALSE;
10071 
10072     WHEN OTHERS THEN
10073          RETURN FND_API.G_FALSE;
10074 
10075 END Overlap_Exists;
10076 
10077   -- jdochert 09/09
10078   -- check for Unique Key constraint violation on JTF_TERR_USGS table
10079   PROCEDURE validate_terr_usgs_UK(
10080                p_Terr_Id          IN  NUMBER,
10081                p_Source_Id        IN  NUMBER,
10082                p_init_msg_list    IN  VARCHAR2 := FND_API.G_FALSE,
10083                x_Return_Status    OUT NOCOPY VARCHAR2,
10084                x_msg_count        OUT NOCOPY NUMBER,
10085                x_msg_data         OUT NOCOPY VARCHAR2 )
10086   AS
10087 
10088      -- cursor to check that Unique Key constraint not violated
10089      CURSOR csr_chk_uk_violation ( lp_terr_id       NUMBER
10090                                  , lp_source_id     NUMBER) IS
10091       SELECT 'X'
10092       FROM JTF_TERR_USGS_ALL
10093       WHERE terr_id = lp_terr_id
10094         AND source_id = lp_source_id;
10095 
10096      l_return_csr  VARCHAR2(1);
10097 
10098   BEGIN
10099 
10100     --dbms_output.put_line('Validate TERR USGS Unique_Key: Entering API ' || p_terr_id || '   ' || p_source_id);
10101     -- Initialize the status to success
10102     x_return_status := FND_API.G_RET_STS_SUCCESS;
10103 
10104     /* check that Unique Key constraint not violated */
10105     IF ( p_terr_id IS NOT NULL AND p_terr_id <> FND_API.G_MISS_NUM  AND
10106          p_source_id IS NOT NULL AND p_source_id <> FND_API.G_MISS_NUM ) THEN
10107 
10108          /* check if rec already exists */
10109          OPEN csr_chk_uk_violation (p_terr_id, p_source_id);
10110          FETCH csr_chk_uk_violation INTO l_return_csr;
10111 
10112          IF csr_chk_uk_violation%FOUND THEN
10113 
10114             --dbms_output.put_line('Validate_Unique_Key: jtf_terr_usgs: VIOLATION');
10115 
10116             x_return_status := FND_API.G_RET_STS_ERROR;
10117 
10118             /* Debug message */
10119             IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
10120                FND_MESSAGE.Set_Name ('JTF', 'JTF_TERR_USGS_UK_CON');
10121                FND_MSG_PUB.ADD;
10122             END IF;
10123 
10124          END IF; /* c_chk_uk_violation%FOUND */
10125          CLOSE csr_chk_uk_violation;
10126 
10127       END IF;
10128 
10129       FND_MSG_PUB.Count_And_Get( p_count => x_msg_count,
10130                                  p_data  => x_msg_data);
10131 
10132  EXCEPTION
10133 
10134     WHEN OTHERS THEN
10135          --dbms_output('Validate_Foreign_Key: Others exception' || SQLERRM);
10136          X_return_status   := FND_API.G_RET_STS_ERROR;
10137          FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_UNEXPECTED_ERROR');
10138          FND_MESSAGE.Set_Token('PROC_NAME', 'Validate_Unique_Key' );
10139          FND_MESSAGE.Set_Token('ERROR', sqlerrm );
10140          FND_MSG_PUB.ADD;
10141          FND_MSG_PUB.Count_And_Get
10142          (  p_count          =>   x_msg_count,
10143             p_data           =>   x_msg_data
10144          );
10145 
10146 END validate_terr_usgs_UK;
10147 
10148   -- jdochert 09/09
10149   -- check for Unique Key constraint violation on JTF_TERR_QTYPE_USGS table
10150   PROCEDURE validate_terr_qtype_usgs_UK(
10151                p_Terr_Id                 IN  NUMBER,
10152                p_Qual_Type_Usg_Id        IN  NUMBER,
10153                p_init_msg_list           IN  VARCHAR2 := FND_API.G_FALSE,
10154                x_Return_Status           OUT NOCOPY VARCHAR2,
10155                x_msg_count               OUT NOCOPY NUMBER,
10156                x_msg_data                OUT NOCOPY VARCHAR2 )
10157   AS
10158 
10159      -- cursor to check that Unique Key constraint not violated
10160      CURSOR csr_chk_uk_violation ( lp_terr_id              NUMBER
10161                                  , lp_qual_type_usg_id     NUMBER) IS
10162       SELECT 'X'
10163       FROM JTF_TERR_QTYPE_USGS_ALL
10164       WHERE terr_id = lp_terr_id
10165         AND qual_type_usg_id = lp_qual_type_usg_id;
10166 
10167      l_return_csr  VARCHAR2(1);
10168 
10169   BEGIN
10170 
10171     --dbms_output.put_line('Validate QUAL_TYPE_USGS Unique_Key: Entering API');
10172     -- Initialize the status to success
10173     x_return_status := FND_API.G_RET_STS_SUCCESS;
10174 
10175     /* check that Unique Key constraint not violated */
10176     IF ( p_terr_id IS NOT NULL AND p_terr_id <> FND_API.G_MISS_NUM  AND
10177          p_qual_type_usg_id IS NOT NULL AND p_qual_type_usg_id <> FND_API.G_MISS_NUM ) THEN
10178 
10179          /* check if rec already exists */
10180          OPEN csr_chk_uk_violation ( p_terr_id
10181                                    , p_qual_type_usg_id);
10182          FETCH csr_chk_uk_violation INTO l_return_csr;
10183 
10184          IF csr_chk_uk_violation%FOUND THEN
10185          --dbms_output.put_line('Validate QUAL_TYPE_USGS Unique_Key Violation');
10186 
10187             x_return_status := FND_API.G_RET_STS_ERROR;
10188 
10189             /* Debug message */
10190             --arpatel 09/18 - set message for form to pick up.
10191             --IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
10192                FND_MESSAGE.Set_Name ('JTF', 'JTF_TERR_QTYPE_USGS_UK_CON');
10193                FND_MSG_PUB.ADD;
10194 
10195                FND_MSG_PUB.Count_And_Get( p_count => x_msg_count,
10196                                  p_data  => x_msg_data);
10197 
10198             --END IF;
10199 
10200          END IF; /* c_chk_uk_violation%FOUND */
10201          CLOSE csr_chk_uk_violation;
10202 
10203       END IF;
10204 
10205       FND_MSG_PUB.Count_And_Get( p_count => x_msg_count,
10206                                  p_data  => x_msg_data);
10207 
10208  EXCEPTION
10209 
10210     WHEN OTHERS THEN
10211          --dbms_output('Validate_Foreign_Key: Others exception' || SQLERRM);
10212          X_return_status   := FND_API.G_RET_STS_ERROR;
10213          FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_UNEXPECTED_ERROR');
10214          FND_MESSAGE.Set_Token('PROC_NAME', 'Validate_Unique_Key' );
10215          FND_MESSAGE.Set_Token('ERROR', sqlerrm );
10216          FND_MSG_PUB.ADD;
10217          FND_MSG_PUB.Count_And_Get
10218          (  p_count          =>   x_msg_count,
10219             p_data           =>   x_msg_data
10220          );
10221 
10222 END validate_terr_qtype_usgs_UK;
10223 
10224 
10225   -- jdochert 10/04
10226   -- check that Number of Winners is valid for this territory
10227   PROCEDURE validate_num_winners(
10228                p_Terr_All_Rec     IN  Terr_All_Rec_Type  := G_Miss_Terr_All_Rec,
10229                p_init_msg_list    IN  VARCHAR2           := FND_API.G_FALSE,
10230                x_Return_Status    OUT NOCOPY VARCHAR2,
10231                x_msg_count        OUT NOCOPY NUMBER,
10232                x_msg_data         OUT NOCOPY VARCHAR2,
10233                x_reason           OUT NOCOPY VARCHAR2 )
10234   AS
10235 
10236      /* Check Number Of Winners not set ABOVE
10237      ** this territory in the hierarchy
10238      ** 09/17/00 JDOCHERT BUG#1408610 FIX
10239      */
10240      CURSOR csr_chk_num_winners (lp_terr_id       NUMBER) IS
10241       SELECT 'X'
10242       FROM jtf_terr_ALL j
10243       WHERE j.parent_territory_id = 1
10244         AND j.terr_id = lp_terr_id;
10245 
10246      l_return_csr  VARCHAR2(1);
10247 
10248   BEGIN
10249 
10250     --dbms_output.put_line('Validate_Num_Winners: Entering API ' || p_terr_id || '   ' || p_source_id);
10251     -- Initialize the status to success
10252     x_return_status := FND_API.G_RET_STS_SUCCESS;
10253 
10254     If ( p_terr_all_rec.parent_territory_id <> 1 AND
10255          p_terr_all_rec.num_winners IS NOT NULL AND
10256          p_terr_all_rec.num_winners <> FND_API.G_MISS_NUM ) THEN
10257 
10258          IF ( p_terr_all_rec.template_flag = 'Y' OR
10259               p_terr_all_rec.escalation_territory_flag = 'Y' ) THEN
10260 
10261             x_reason := 'F';
10262 
10263          ELSE
10264 
10265             x_reason := 'A';
10266 
10267          END IF;
10268 
10269          x_return_status := FND_API.G_RET_STS_ERROR;
10270 
10271          /* Debug message */
10272          IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
10273             FND_MESSAGE.Set_Name ('JTF', 'JTF_TERR_NUM_WINNERS_TOP_LEVEL');
10274             FND_MSG_PUB.ADD;
10275          END IF;
10276 
10277      END IF;
10278 
10279       FND_MSG_PUB.Count_And_Get( p_count => x_msg_count,
10280                                  p_data  => x_msg_data);
10281 
10282  EXCEPTION
10283 
10284     WHEN OTHERS THEN
10285          --dbms_output('Validate_Num_Winners: Others exception' || SQLERRM);
10286          X_return_status   := FND_API.G_RET_STS_ERROR;
10287          FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_UNEXPECTED_ERROR');
10288          FND_MESSAGE.Set_Token('PROC_NAME', 'Validate_Num_Winners' );
10289          FND_MESSAGE.Set_Token('ERROR', sqlerrm );
10290          FND_MSG_PUB.ADD;
10291          FND_MSG_PUB.Count_And_Get
10292          (  p_count          =>   x_msg_count,
10293             p_data           =>   x_msg_data
10294          );
10295 
10296 END validate_num_winners;
10297 
10298 
10299 /* JDOCHERT - 041201 */
10300 PROCEDURE chk_num_copy_terr( p_node_terr_id     IN  NUMBER,
10301                              p_limit_num        IN  NUMBER := 10,
10302                              x_Return_Status    OUT NOCOPY VARCHAR2,
10303                              x_msg_count        OUT NOCOPY NUMBER,
10304                              x_msg_data         OUT NOCOPY VARCHAR2,
10305                              x_terr_num         OUT NOCOPY NUMBER,
10306                              x_copy_status      OUT NOCOPY VARCHAR2 )
10307 AS
10308 
10309   CURSOR csr_get_terr_num (lp_terr_id NUMBER) IS
10310   SELECT COUNT(*)
10311   FROM jtf_terr_all jt
10312   CONNECT BY PRIOR jt.terr_id = jt.parent_territory_id
10313   START WITH jt.terr_id = lp_terr_id;
10314 
10315 BEGIN
10316 
10317     --dbms_output.put_line('chk_num_copy_terr: Entering API ' || p_terr_id );
10318     -- Initialize the status to success
10319     x_return_status := FND_API.G_RET_STS_SUCCESS;
10320 
10321    OPEN csr_get_terr_num(p_node_terr_id);
10322    FETCH csr_get_terr_num INTO x_terr_num;
10323    CLOSE csr_get_terr_num;
10324 
10325    IF (x_terr_num <= p_limit_num) THEN
10326 
10327       x_copy_status := FND_API.G_TRUE;
10328 
10329    ELSE
10330       x_copy_status := FND_API.G_FALSE;
10331 
10332    END IF;
10333 
10334 
10335    /* Debug message */
10336    IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
10337       FND_MESSAGE.Set_Name ('JTF', 'JTF_TERR_NUM_COPY_TERR');
10338       FND_MSG_PUB.ADD;
10339    END IF;
10340 
10341    FND_MSG_PUB.Count_And_Get( p_count => x_msg_count,
10342                               p_data  => x_msg_data);
10343 
10344 EXCEPTION
10345    WHEN OTHERS THEN
10346          --dbms_output('chk_num_copy_terr: Others exception' || SQLERRM);
10347          X_return_status   := FND_API.G_RET_STS_ERROR;
10348          FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_UNEXPECTED_ERROR');
10349          FND_MESSAGE.Set_Token('PROC_NAME', 'chk_num_copy_terr' );
10350          FND_MESSAGE.Set_Token('ERROR', sqlerrm );
10351          FND_MSG_PUB.ADD;
10352          FND_MSG_PUB.Count_And_Get
10353          (  p_count          =>   x_msg_count,
10354             p_data           =>   x_msg_data
10355          );
10356 
10357 END chk_num_copy_terr;
10358 
10359 PROCEDURE Concurrent_Copy_Territory (
10360                            errbuf                        OUT NOCOPY VARCHAR2,
10361                            retcode                       OUT NOCOPY VARCHAR2,
10362                            p_copy_source_terr_Id         IN  NUMBER,
10363                            p_name                        IN  VARCHAR2,
10364                            p_description                 IN  VARCHAR2     := FND_API.G_MISS_CHAR,
10365                            p_rank                        IN  NUMBER       := FND_API.G_MISS_NUM,
10366                            p_start_date                  IN  DATE,
10367                            p_end_date                    IN  DATE         := FND_API.G_MISS_DATE,
10368                            p_copy_rsc_flag               IN  VARCHAR2     := 'N',
10369                            p_copy_hierarchy_flag         IN  VARCHAR2     := 'N',
10370                            p_first_terr_node_flag        IN  VARCHAR2     := 'N',
10371                            p_debug_flag                  IN  VARCHAR2     := 'N',
10372                            p_sql_trace                   IN  VARCHAR2     := 'N'   ) AS
10373 
10374     /* local record variables */
10375     l_terr_rec     	   JTF_TERRITORY_PVT.TERR_ALL_REC_TYPE;
10376 
10377     /* local item variables */
10378     l_terr_id		   NUMBER;
10379     l_hier_terr_count  NUMBER;
10380 
10381     /* local standard API variables */
10382       l_api_name              CONSTANT VARCHAR2(30) := 'Concurrent_Copy_Territory';
10383       l_api_version_number    CONSTANT NUMBER       := 1.0;
10384       l_return_status         VARCHAR2(200);
10385       l_msg_count             NUMBER;
10386       l_msg_data              VARCHAR2(2000);
10387 
10388     BEGIN
10389 
10390       --dbms_output.put_line('ENTERING Concurrent_Copy_Territory');
10391     -- Standard Start of API savepoint
10392       SAVEPOINT CONC_COPY_TERR_PVT;
10393 
10394       /* If the SQL trace flag is turned on, then turn on the trace */
10395       /* ARPATEL: 12/15/2003: Bug#3305019 fix */
10396       --If lower(p_SQL_Trace) = 'Y' Then
10397       --   dbms_session.set_sql_trace(TRUE);
10398       --Else
10399       --   dbms_session.set_sql_trace(FALSE);
10400       --End If;
10401 
10402       /* If the debug flag is set, Then turn on the debug message logging */
10403       If upper( rtrim(p_Debug_Flag) ) = 'Y' Then
10404          G_Debug := TRUE;
10405       End If;
10406 
10407       If G_Debug Then
10408          Write_Log(2, 'Concurrent Copy Territory Start');
10409          Write_Log(2, 'Source Territory ID is - ' || TO_CHAR(p_copy_source_terr_Id) );
10410          Write_Log(2, 'Source Territory Name is - ' || p_name );
10411       End If;
10412 
10413 
10414       /* ===================== */
10415       /*    API BODY START     */
10416       /* ======================*/
10417 
10418      l_terr_rec.NAME := p_name;
10419      l_terr_rec.DESCRIPTION := p_description;
10420      l_terr_rec.RANK := p_rank;
10421      l_terr_rec.START_DATE_ACTIVE := p_start_date;
10422      l_terr_rec.END_DATE_ACTIVE := p_end_date;
10423 
10424      l_terr_rec.ENABLED_FLAG := 'Y';
10425      l_terr_rec.TERR_ID			            := FND_API.G_MISS_NUM;
10426      l_terr_rec.LAST_UPDATE_DATE  	        := FND_API.G_MISS_DATE;
10427      l_terr_rec.LAST_UPDATED_BY             := FND_API.G_MISS_NUM;
10428      l_terr_rec.CREATION_DATE               := FND_API.G_MISS_DATE;
10429      l_terr_rec.CREATED_BY                  := FND_API.G_MISS_NUM;
10430      l_terr_rec.LAST_UPDATE_LOGIN           := FND_API.G_MISS_NUM;
10431      l_terr_rec.APPLICATION_SHORT_NAME      := FND_API.G_MISS_CHAR;
10432      l_terr_rec.REQUEST_ID                  := FND_API.G_MISS_NUM;
10433      l_terr_rec.PROGRAM_APPLICATION_ID      := FND_API.G_MISS_NUM;
10434      l_terr_rec.PROGRAM_ID                  := FND_API.G_MISS_NUM;
10435      l_terr_rec.PROGRAM_UPDATE_DATE         := FND_API.G_MISS_DATE;
10436      l_terr_rec.ORG_ID                      := FND_API.G_MISS_NUM;
10437      l_terr_rec.UPDATE_FLAG                 := FND_API.G_MISS_CHAR;
10438      l_terr_rec.AUTO_ASSIGN_RESOURCES_FLAG  := FND_API.G_MISS_CHAR;
10439      l_terr_rec.PLANNED_FLAG                := FND_API.G_MISS_CHAR;
10440      l_terr_rec.TERRITORY_TYPE_ID           := FND_API.G_MISS_NUM;
10441      l_terr_rec.PARENT_TERRITORY_ID         := FND_API.G_MISS_NUM;
10442      l_terr_rec.TEMPLATE_FLAG               := FND_API.G_MISS_CHAR;
10443      l_terr_rec.TEMPLATE_TERRITORY_ID       := FND_API.G_MISS_NUM;
10444      l_terr_rec.ESCALATION_TERRITORY_FLAG   := FND_API.G_MISS_CHAR;
10445      l_terr_rec.ESCALATION_TERRITORY_ID     := FND_API.G_MISS_NUM;
10446      l_terr_rec.OVERLAP_ALLOWED_FLAG        := FND_API.G_MISS_CHAR;
10447      l_terr_rec.ATTRIBUTE_CATEGORY          := FND_API.G_MISS_CHAR;
10448      l_terr_rec.ATTRIBUTE1                  := FND_API.G_MISS_CHAR;
10449      l_terr_rec.ATTRIBUTE2                  := FND_API.G_MISS_CHAR;
10450      l_terr_rec.ATTRIBUTE3                  := FND_API.G_MISS_CHAR;
10451      l_terr_rec.ATTRIBUTE4                  := FND_API.G_MISS_CHAR;
10452      l_terr_rec.ATTRIBUTE5                  := FND_API.G_MISS_CHAR;
10453      l_terr_rec.ATTRIBUTE6                  := FND_API.G_MISS_CHAR;
10454      l_terr_rec.ATTRIBUTE7                  := FND_API.G_MISS_CHAR;
10455      l_terr_rec.ATTRIBUTE8                  := FND_API.G_MISS_CHAR;
10456      l_terr_rec.ATTRIBUTE9                  := FND_API.G_MISS_CHAR;
10457      l_terr_rec.ATTRIBUTE10                 := FND_API.G_MISS_CHAR;
10458      l_terr_rec.ATTRIBUTE11                 := FND_API.G_MISS_CHAR;
10459      l_terr_rec.ATTRIBUTE12                 := FND_API.G_MISS_CHAR;
10460      l_terr_rec.ATTRIBUTE13                 := FND_API.G_MISS_CHAR;
10461      l_terr_rec.ATTRIBUTE14                 := FND_API.G_MISS_CHAR;
10462      l_terr_rec.ATTRIBUTE15                 := FND_API.G_MISS_CHAR;
10463      l_terr_rec.ORG_ID                      := FND_API.G_MISS_NUM;
10464      l_terr_rec.NUM_WINNERS                 := FND_API.G_MISS_NUM;
10465 
10466     JTF_TERRITORY_PVT.Copy_Territory (
10467            p_Api_Version_Number   =>  l_Api_Version_Number,
10468            p_Init_Msg_List        =>  FND_API.G_TRUE,
10469            p_Commit               =>  FND_API.G_TRUE,
10470            p_validation_level     =>  FND_API.G_VALID_LEVEL_FULL,
10471            p_copy_source_terr_Id  =>  p_copy_source_terr_Id,
10472            p_new_terr_rec         =>  l_terr_rec,
10473            p_copy_rsc_flag        =>  p_copy_rsc_flag,
10474 	       p_copy_hierarchy_flag  =>  p_copy_hierarchy_flag,
10475            p_first_terr_node_flag =>  p_first_terr_node_flag,
10476            x_Return_Status        =>  l_return_status,
10477            x_Msg_Count            =>  l_msg_count,
10478            x_Msg_Data             =>  l_msg_data,
10479            x_terr_id              =>  l_terr_id );
10480 
10481       --dbms_output.put_line('***l_return_status ' ||l_return_status);
10482 
10483     IF  (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10484 
10485         IF (G_Debug) THEN
10486              Write_Log(2, 'Copy Territories hierarchy has NOT completed successfully');
10487              errbuf := 'Program completed with errors';
10488              retcode := 1;
10489         END IF;
10490 
10491     ELSE
10492 
10493         IF (G_Debug) THEN
10494              Write_Log(2, 'Copy Territories hierarchy has completed successfully');
10495              errbuf := 'Program completed successfully';
10496              retcode := 0;
10497         END IF;
10498 
10499     END IF;
10500 
10501     IF (G_Debug) THEN
10502 
10503             SELECT COUNT(*)
10504             INTO l_hier_terr_count
10505             FROM jtf_terr_all jt
10506             CONNECT BY PRIOR jt.terr_id = jt.parent_territory_id
10507             START WITH jt.terr_id = p_copy_source_terr_Id;
10508 
10509             Write_Log(2, ' ');
10510             Write_Log(2, '/***************** BEGIN: COPY TERRITORY STATUS *********************/');
10511             Write_Log(2, 'Populating JTF_TERR_ALL table. Copied ' || l_hier_terr_count || ' territories.');
10512             Write_Log(2, 'Inserted ' || l_hier_terr_count || ' rows into JTF_TERR_ALL ');
10513             Write_Log(2, '/***************** END: COPY TERRITORY STATUS *********************/');
10514 
10515     END IF;
10516 
10517       /* ===================== */
10518       /*    API BODY END       */
10519       /* ======================*/
10520 
10521       Write_Log(2,ERRBUF);
10522 
10523   EXCEPTION
10524 
10525      WHEN utl_file.invalid_path OR utl_file.invalid_mode  OR
10526            utl_file.invalid_filehandle OR utl_file.invalid_operation OR
10527            utl_file.write_error Then
10528            ERRBUF := 'Program terminated with exception. Error writing to output file.';
10529            RETCODE := 2;
10530 
10531       WHEN OTHERS THEN
10532            If G_Debug Then
10533               Write_Log(1,'Program terminated with OTHERS exception. ' || SQLERRM);
10534            End If;
10535            ERRBUF  := 'Program terminated with OTHERS exception. ' || SQLERRM;
10536            RETCODE := 2;
10537 
10538   END Concurrent_Copy_Territory;
10539 
10540   --------------------------------------------------------------------
10541    --                  Logging PROCEDURE
10542    --
10543    --     which = 1. write to log
10544    --     which = 2, write to output
10545    --------------------------------------------------------------------
10546    --
10547    PROCEDURE Write_Log(which number, mssg  varchar2 )
10548    IS
10549    BEGIN
10550    --
10551        --dbms_output.put_line(' LOG: ' || mssg );
10552        FND_FILE.put(which, mssg);
10553        FND_FILE.NEW_LINE(which, 1);
10554        --
10555        -- If the output message and if debug flag is set then also write
10556        -- to the log file
10557        --
10558        If Which = 2 Then
10559           If G_Debug Then
10560              FND_FILE.put(1, mssg);
10561              FND_FILE.NEW_LINE(1, 1);
10562           End If;
10563        End IF;
10564    --
10565    END Write_Log;
10566 
10567  FUNCTION conc_req_copy_terr (
10568                            p_copy_source_terr_Id         IN  NUMBER,
10569                            p_name                        IN  VARCHAR2,
10570                            p_description                 IN  VARCHAR2     := FND_API.G_MISS_CHAR,
10571                            p_rank                        IN  NUMBER       := FND_API.G_MISS_NUM,
10572                            p_start_date                  IN  DATE,
10573                            p_end_date                    IN  DATE         := FND_API.G_MISS_DATE,
10574                            p_copy_rsc_flag               IN  VARCHAR2     := 'N',
10575                            p_copy_hierarchy_flag         IN  VARCHAR2     := 'N',
10576                            p_first_terr_node_flag        IN  VARCHAR2     := 'N'
10577                             )
10578  RETURN NUMBER
10579    AS
10580    l_process_id NUMBER;
10581    BEGIN
10582 
10583    l_process_id := FND_REQUEST.submit_request (
10584 			  application    => 'JTF' ,
10585 			  program        => 'COPY_TERR_HIERARCHY_NODE' ,
10586 			  argument1      => p_copy_source_terr_Id ,
10587 			  argument2   	 => p_name ,
10588   			  argument3   	 => p_description ,
10589 			  argument4   	 => p_rank ,
10590 			  argument5   	 => p_start_date ,
10591 			  argument6   	 => p_end_date ,
10592 			  argument7   	 => p_copy_rsc_flag ,
10593 			  argument8   	 => p_copy_hierarchy_flag ,
10594 			  argument9      => p_first_terr_node_flag ,
10595 			  argument10	 => 'Y' ,
10596 			  argument11	 => 'Y'
10597                        );
10598 
10599     /* Debug message */
10600 
10601       FND_MESSAGE.Set_Name ('JTF', 'JTF_CONC_REQ_COPY_TERR');
10602       FND_MESSAGE.Set_Token ('Template Territory ID', p_copy_source_terr_Id);
10603       FND_MESSAGE.Set_Token('Concurrent request ID',l_process_id);
10604       FND_MSG_PUB.add;
10605 
10606       RETURN l_process_id;
10607    END conc_req_copy_terr;
10608 
10609 
10610 
10611   -- jdochert 06/06/01
10612   -- check that parent territory is not already a child of this territory
10613   -- circular reference check
10614   PROCEDURE validate_parent(
10615                p_Terr_All_Rec     IN  Terr_All_Rec_Type  := G_Miss_Terr_All_Rec,
10616                p_init_msg_list    IN  VARCHAR2           := FND_API.G_FALSE,
10617                x_Return_Status    OUT NOCOPY VARCHAR2,
10618                x_msg_count        OUT NOCOPY NUMBER,
10619                x_msg_data         OUT NOCOPY VARCHAR2 )
10620   AS
10621 
10622      e_Circular_Reference    EXCEPTION;
10623      PRAGMA                  EXCEPTION_INIT(e_Circular_Reference, -01436);
10624 
10625      l_return_csr               NUMBER;
10626      l_existing_parent_terr_id  NUMBER;
10627 
10628   BEGIN
10629 
10630     --dbms_output.put_line('[1]Validate_Parent: Entering API ');
10631     -- Initialize the status to success
10632     x_return_status := FND_API.G_RET_STS_SUCCESS;
10633 
10634     --dbms_output.put_line('[2]Validate_Parent: Entering API ');
10635 
10636     BEGIN
10637 
10638        SELECT j.parent_territory_id
10639        INTO l_existing_parent_terr_id
10640        FROM jtf_terr_all j
10641        WHERE j.terr_id = p_terr_all_rec.terr_id;
10642 
10643     EXCEPTION
10644        WHEN NO_DATA_FOUND THEN
10645            NULL;
10646     END;
10647 
10648     IF ( p_terr_all_rec.parent_territory_id <> l_existing_parent_terr_id) THEN
10649 
10650        /* Top down checking if new parent
10651        ** territory is already a child
10652        ** of the current territory
10653        */
10654        SELECT COUNT(*)
10655        INTO l_return_csr
10656        FROM jtf_terr_all j
10657        WHERE j.terr_id = p_terr_all_rec.parent_territory_id -- new parent territory id
10658        CONNECT BY PRIOR j.terr_id = j.parent_territory_id
10659        START WITH j.terr_id = p_terr_all_rec.terr_id; -- territory_id
10660 
10661        IF (l_return_csr <> 0 )THEN
10662           RAISE e_Circular_Reference;
10663        END IF;
10664 
10665    END IF;
10666 
10667     --dbms_output.put_line('[3]l_return_csr =  ' || l_return_csr);
10668 
10669     /* Debug message */
10670     IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
10671         FND_MESSAGE.Set_Name ('JTF', 'JTF_TERR_CIRCULAR_REFERENCE');
10672         FND_MSG_PUB.ADD;
10673     END IF;
10674 
10675     FND_MSG_PUB.Count_And_Get( p_count => x_msg_count,
10676                                p_data  => x_msg_data);
10677 
10678  EXCEPTION
10679 
10680      WHEN e_Circular_Reference THEN
10681          --dbms_output.put_line('Validate_Parent: e_Circular_Reference exception' || SQLERRM);
10682 
10683          X_return_status   := FND_API.G_RET_STS_ERROR;
10684 
10685          FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_CIRCULAR_REFERENCE');
10686          FND_MESSAGE.Set_Token('PROC_NAME', 'Validate_Parent' );
10687          FND_MESSAGE.Set_Token('ERROR', sqlerrm );
10688          FND_MSG_PUB.ADD;
10689 
10690          FND_MSG_PUB.Count_And_Get
10691          (  p_count          =>   x_msg_count,
10692             p_data           =>   x_msg_data
10693          );
10694 
10695     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
10696          --dbms_output.put_line('Validate_Parent: FND_API.G_EXC_UNEXPECTED_ERROR');
10697          X_return_status                   := FND_API.G_RET_STS_UNEXP_ERROR;
10698          FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_UNEXPECTED_ERROR');
10699          FND_MESSAGE.Set_Token('PROC_NAME', 'Validate_Parent' );
10700          FND_MSG_PUB.Count_And_Get
10701          (  P_count          =>   x_msg_count,
10702             P_data           =>   x_msg_data
10703          );
10704 
10705     WHEN OTHERS THEN
10706          --dbms_output.put_line('Validate_Parent: Others exception' || SQLERRM);
10707          X_return_status   := FND_API.G_RET_STS_UNEXP_ERROR;
10708          FND_MESSAGE.Set_Name('JTF', 'JTF_TERR_UNEXPECTED_ERROR');
10709          FND_MESSAGE.Set_Token('PROC_NAME', 'Validate_Parent' );
10710          FND_MESSAGE.Set_Token('ERROR', sqlerrm );
10711          FND_MSG_PUB.ADD;
10712          FND_MSG_PUB.Count_And_Get
10713          (  p_count          =>   x_msg_count,
10714             p_data           =>   x_msg_data
10715          );
10716 END validate_parent;
10717 
10718 
10719 /* Function used in JTF_TERR_VALUES_DESC_V to return
10720 ** descriptive values for ids and lookup_codes
10721 */
10722 FUNCTION get_terr_value_desc (
10723                            p_convert_to_id_flag  VARCHAR2
10724                          , p_display_type        VARCHAR2
10725                          , p_column_count        NUMBER   := FND_API.G_MISS_NUM
10726                          , p_display_sql         VARCHAR2 := FND_API.G_MISS_CHAR
10727                          , p_terr_value1         VARCHAR2
10728                          , p_terr_value2         VARCHAR2 :=  FND_API.G_MISS_CHAR
10729                          )
10730 RETURN VARCHAR2 IS
10731 
10732     query_str       VARCHAR2(1000);
10733     value_desc      VARCHAR2(1000);
10734     l_terr_value1    VARCHAR2(360);
10735     l_terr_value2    VARCHAR2(360);
10736 
10737 BEGIN
10738 
10739     IF ( p_display_sql = FND_API.G_MISS_CHAR OR
10740          p_display_sql IS NULL) THEN
10741 
10742       --dbms_output( 'LOV_SQL IS NULL, returning value = ' || p_terr_value);
10743 
10744       RETURN p_terr_value1;
10745 
10746     ELSE  /* build dynamic SQl */
10747 
10748       query_str := p_display_sql;
10749 
10750       l_terr_value1 := p_terr_value1;
10751       l_terr_value2 := p_terr_value2;
10752 
10753       IF (p_display_type IN ('CHAR_2IDS', 'DEP_2FIELDS_CHAR_2IDS', 'DEP_3FIELDS_CHAR_3IDS')) THEN
10754 
10755          query_str := p_display_sql;
10756 
10757       /* check if value is NUMBER or VARCHAR2 */
10758       ELSIF ( ( p_display_type = 'CHAR' AND
10759              p_convert_to_id_flag = 'Y' ) OR
10760            p_display_type = 'NUMERIC' OR
10761            p_display_type = 'INTEREST_TYPE' OR
10762            p_display_type = 'COMPETENCE' ) THEN
10763 
10764           query_str := query_str || ' TO_NUMBER(:terr_value)' ;
10765 
10766       ELSE
10767         --dbms_output( 'convert_to_id_flag = N');
10768 
10769         query_str := query_str || ' :terr_value1' ;
10770 
10771       END IF;
10772 
10773       query_str := query_str || ' AND rownum < 2' ;
10774 
10775       --dbms_output('query_str = ' || query_str);
10776 
10777       IF (p_display_type IN ('CHAR_2IDS', 'DEP_2FIELDS_CHAR_2IDS', 'DEP_3FIELDS_CHAR_3IDS')) THEN
10778 
10779           /* execute dynamic SQl */
10780           EXECUTE IMMEDIATE query_str
10781             INTO value_desc
10782             USING l_terr_value1, l_terr_value2;
10783 
10784       ELSE
10785 
10786           /* execute dynamic SQl */
10787           EXECUTE IMMEDIATE query_str
10788             INTO value_desc
10789             USING l_terr_value1;
10790 
10791       END IF;
10792 
10793       --dbms_output( 'returning value = ' || p_terr_value);
10794 
10795       RETURN value_desc;
10796 
10797     END IF;
10798 
10799 EXCEPTION
10800  WHEN NO_DATA_FOUND THEN
10801    RETURN NULL;
10802 
10803 END get_terr_value_desc;
10804 
10805 FUNCTION get_qual_value(
10806     v_qual_usg_id                IN NUMBER,
10807     v_display_type               IN VARCHAR2,
10808     v_convert_to_id_flag         IN VARCHAR2,
10809     v_COMPARISON_OPERATOR        IN VARCHAR2,
10810     v_display_sql1               IN VARCHAR2,
10811     v_display_sql2               IN VARCHAR2,
10812     v_display_sql3               IN VARCHAR2,
10813     v_low_value_char_id          IN NUMBER,
10814     v_low_value_char             IN VARCHAR2,
10815     v_interest_type_id           IN NUMBER,
10816     v_primary_interest_code_id   IN NUMBER,
10817     v_secondary_interest_code_id IN NUMBER,
10818     v_value1_id_1                IN NUMBER,
10819     v_value2_id_2                IN NUMBER,
10820     v_currency_code              IN VARCHAR2,
10821     select_flag                  IN VARCHAR2)
10822   RETURN VARCHAR2
10823 IS
10824   v_tot_query  VARCHAR2(1000);
10825   v_return_val VARCHAR2(100);
10826   v_value1_id  NUMBER(30);
10827   v_value2_id  NUMBER(30);
10828   v_comparision_group fnd_lookups.lookup_type%type;
10829   v_lookup_code fnd_lookups.lookup_code%type;
10830   v_meaning fnd_lookups.meaning%type;
10831   v_currency_name fnd_currencies_vl.NAME%type;
10832   v_curr_code fnd_currencies_vl.CURRENCY_CODE%type;
10833   CURSOR c_comparision_operator
10834   IS
10835     SELECT 'GROUP1' COMPARISION_GROUP,
10836       f.lookup_code,
10837       f.meaning
10838     FROM fnd_lookups f
10839     WHERE f.lookup_type = 'JTF_TERR_COMP_OPERATOR'
10840     AND f.lookup_code  IN ('=', '<>')
10841     AND f.enabled_flag  = 'Y'
10842   UNION ALL
10843   SELECT 'GROUP2' COMPARISION_GROUP,
10844     f.lookup_code,
10845     f.meaning
10846   FROM fnd_lookups f
10847   WHERE f.lookup_type = 'JTF_TERR_COMP_OPERATOR'
10848   AND f.lookup_code  IN ( '=', '<>', 'LIKE', 'NOT LIKE' , 'BETWEEN', 'NOT BETWEEN')
10849   AND f.enabled_flag  = 'Y'
10850   UNION ALL
10851   SELECT 'GROUP3' COMPARISION_GROUP,
10852     f.lookup_code,
10853     f.meaning
10854   FROM fnd_lookups f
10855   WHERE f.lookup_type = 'JTF_TERR_COMP_OPERATOR'
10856   AND f.lookup_code  IN ( '=', '<>' , 'BETWEEN', 'NOT BETWEEN')
10857   AND f.enabled_flag  = 'Y'
10858   UNION ALL
10859   SELECT 'GROUP4' COMPARISION_GROUP,
10860     f.lookup_code,
10861     f.meaning
10862   FROM fnd_lookups f
10863   WHERE f.lookup_type = 'JTF_TERR_COMP_OPERATOR'
10864   AND f.lookup_code   = '='
10865   AND f.enabled_flag  = 'Y';
10866   CURSOR c_get_currency_code
10867   IS
10868     SELECT f.name currency_name,
10869       f.currency_code
10870     FROM fnd_currencies_vl f
10871     WHERE f.enabled_flag = 'Y'
10872     ORDER BY 1;
10873 BEGIN
10874   IF (select_flag ='CO' AND v_COMPARISON_OPERATOR IS NOT NULL) THEN
10875     OPEN c_comparision_operator;
10876     LOOP
10877       FETCH c_comparision_operator
10878       INTO v_comparision_group,
10879         v_lookup_code,
10880         v_meaning;
10881       IF(v_COMPARISON_OPERATOR=v_lookup_code) THEN
10882         v_return_val:=v_meaning;
10883       END IF;
10884       EXIT
10885     WHEN c_comparision_operator%NOTFOUND;
10886     END LOOP;
10887     CLOSE c_comparision_operator;
10888   END IF;
10889   --check whether the v_value1_id_1 is null or not
10890   IF (v_value1_id_1 IS NULL) THEN
10891     v_value1_id :=-9999;
10892   ELSE
10893     v_value1_id:=v_value1_id_1;
10894   END IF;
10895   --check whether the v_value2_id_2 is null or not
10896   IF (v_value2_id_2 IS NULL) THEN
10897     v_value2_id :=-9999;
10898   ELSE
10899     v_value2_id :=v_value2_id_2;
10900   END IF;
10901   -- check whether it is for VALUE1 or VALUE2 or VALUE3
10902   IF (select_flag  ='1') THEN
10903     IF(v_display_type='INTEREST_TYPE') THEN
10904       v_tot_query :=(v_display_sql1||''||v_interest_type_id);
10905       EXECUTE IMMEDIATE v_tot_query INTO v_return_val;
10906 
10907     ELSIF (v_display_type = 'CHAR_2IDS') THEN
10908       EXECUTE IMMEDIATE v_display_sql1 INTO v_return_val USING IN v_value1_id, IN v_value2_id;
10909 
10910     ELSIF (v_display_type = 'DEP_2FIELDS') THEN
10911       v_tot_query := (v_display_sql1||''||v_value1_id);
10912       EXECUTE IMMEDIATE v_tot_query INTO v_return_val;
10913 
10914     ELSIF (v_display_type = 'DEP_2FIELDS_CHAR_2IDS') THEN
10915       EXECUTE IMMEDIATE v_display_sql1 INTO v_return_val USING IN v_value1_id, IN v_value2_id;
10916 
10917     ELSIF (v_display_type = 'DEP_3FIELDS_CHAR_3IDS') THEN
10918       EXECUTE IMMEDIATE v_display_sql1 INTO v_return_val USING IN v_value1_id, IN v_value2_id;
10919 
10920     ELSIF (v_display_type = 'DEP_2FIELDS_1CHAR_1ID') THEN
10921       v_tot_query := v_display_sql1||''''||v_low_value_char||'''';
10922       EXECUTE IMMEDIATE v_tot_query INTO v_return_val;
10923 
10924     ELSIF (v_display_type = 'CHAR') THEN
10925       IF(v_convert_to_id_flag='Y') THEN
10926         v_tot_query := (v_display_sql1||''||v_low_value_char_id);
10927 
10928         EXECUTE IMMEDIATE v_tot_query INTO v_return_val;
10929       ELSIF(v_display_sql1 IS NOT NULL AND v_display_sql1<>'') THEN
10930         v_tot_query := v_display_sql1||''''||v_low_value_char||'''';
10931       END IF;
10932     END IF;
10933 
10934   ELSIF SELECT_FLAG  ='2' THEN
10935     IF(v_display_type='INTEREST_TYPE') THEN
10936       v_tot_query := (v_display_sql2||''||v_primary_interest_code_id);
10937       EXECUTE IMMEDIATE v_tot_query INTO v_return_val;
10938 
10939     ELSIF (v_display_type='DEP_2FIELDS') THEN
10940       v_tot_query := (v_display_sql2||''||v_value2_id);
10941       EXECUTE IMMEDIATE v_tot_query INTO v_return_val;
10942 
10943     ELSIF (v_display_type = 'DEP_2FIELDS_CHAR_2IDS') THEN
10944       EXECUTE IMMEDIATE v_display_sql2 INTO v_return_val USING IN v_value1_id, IN v_value2_id;
10945 
10946     ELSIF (v_display_type = 'DEP_3FIELDS_CHAR_3IDS') THEN
10947       EXECUTE IMMEDIATE v_display_sql2 INTO v_return_val USING IN v_value1_id, IN v_value2_id;
10948 
10949     ELSIF (v_display_type = 'DEP_2FIELDS_1CHAR_1ID') THEN
10950       v_tot_query := v_display_sql2||''||v_low_value_char_id;
10951       EXECUTE IMMEDIATE v_tot_query INTO v_return_val;
10952     END IF;
10953 
10954   ELSIF (SELECT_FLAG ='3') THEN
10955 
10956     IF(v_display_type='INTEREST_TYPE') THEN
10957       v_tot_query := (v_display_sql3||''||v_secondary_interest_code_id);
10958       EXECUTE IMMEDIATE v_tot_query INTO v_return_val;
10959 
10960     ELSIF (v_display_type ='DEP_3FIELDS_CHAR_3IDS') THEN
10961       EXECUTE IMMEDIATE v_display_sql3 INTO v_return_val USING IN v_value1_id, IN v_value2_id;
10962 
10963     ELSIF (v_display_type ='CURRENCY') THEN
10964       OPEN c_get_currency_code;
10965       LOOP
10966         FETCH c_get_currency_code INTO v_currency_name, v_curr_code;
10967         IF(v_currency_code=v_currency_code)THEN
10968           v_return_val   :=v_currency_name;
10969         END IF;
10970         EXIT
10971       WHEN c_get_currency_code%NOTFOUND;
10972       END LOOP;
10973       CLOSE c_get_currency_code;
10974     END IF;
10975   END IF;
10976   RETURN v_return_val;
10977 EXCEPTION
10978 WHEN NO_DATA_FOUND THEN
10979   RETURN NULL;
10980 WHEN OTHERS THEN
10981   raise_application_error(-20001,'An error was encountered while executing the Function QualValue- '||SQLCODE||' -ERROR- '||SQLERRM);
10982 END get_qual_value;
10983 
10984    -- Package Body
10985 END JTF_TERRITORY_PVT;
10986