DBA Data[Home] [Help]

PACKAGE BODY: APPS.JTF_TERRITORY_PVT

Source


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