DBA Data[Home] [Help]

PACKAGE BODY: APPS.ASO_COPY_QUOTE_PVT

Source


1 PACKAGE BODY ASO_COPY_QUOTE_PVT AS
2 /* $Header: asovcpyb.pls 120.18 2006/06/28 21:08:48 skulkarn ship $ */
3 -- Start of Comments
4 -- Package name     : ASO_COPY_QUOTE_PVT
5 -- Purpose         :
6 -- History         :
7 --    12-03-2002 hyang - bug 2692785, checking running concurrent pricing request.
8 --    10-13-2003 hyang - new okc integration.
9 --    06/21/04   skulkarn - fixed bug 3704719
10 --    08/05/04   skulkarn - fixed bug3805575
11 --    12/02/04   skulkarn - fixed bug4036748
12 -- NOTE       :
13 -- End of Comments
14 
15 
16    G_USER_ID     NUMBER                := FND_GLOBAL.USER_ID;
17    G_LOGIN_ID    NUMBER                := FND_GLOBAL.CONC_LOGIN_ID;
18    G_PKG_NAME CONSTANT VARCHAR2 ( 30 ) := 'ASO_COPY_QUOTE_PVT';
19    G_FILE_NAME CONSTANT VARCHAR2 ( 12 ) := 'asovcpyb.pls';
20 
21 
22    PROCEDURE Copy_Quote (
23        P_Api_Version_Number IN NUMBER
24     , P_Init_Msg_List IN VARCHAR2 := FND_API.G_FALSE
25     , P_Commit IN VARCHAR2 := FND_API.G_FALSE
26     , P_Copy_Quote_Header_Rec IN ASO_COPY_QUOTE_PUB.Copy_Quote_Header_Rec_Type
27             := ASO_COPY_QUOTE_PUB.G_MISS_Copy_Quote_Header_Rec
28     , P_Copy_Quote_Control_Rec IN ASO_COPY_QUOTE_PUB.Copy_Quote_Control_Rec_Type
29             := ASO_COPY_QUOTE_PUB.G_MISS_Copy_Quote_Control_Rec
30     , X_Qte_Header_Id OUT NOCOPY /* file.sql.39 change */   NUMBER
31     , X_Qte_Number OUT NOCOPY /* file.sql.39 change */   NUMBER
32     , X_Return_Status OUT NOCOPY /* file.sql.39 change */   VARCHAR2
33     , X_Msg_Count OUT NOCOPY /* file.sql.39 change */   VARCHAR2
34     , X_Msg_Data OUT NOCOPY /* file.sql.39 change */   VARCHAR2
35     ) IS
36 
37       CURSOR C_Validate_Quote (
38           x_qte_header_id NUMBER
39        ) IS
40          SELECT 'X'
41          FROM   ASO_QUOTE_HEADERS_ALL
42          WHERE  quote_header_id = x_qte_header_id;
43 
44       CURSOR C_Qte_Number IS
45          SELECT ASO_QUOTE_NUMBER_S.NEXTVAL
46          FROM   sys.DUAL;
47 
48       CURSOR C_Qte_Status_Id (
49           c_status_code VARCHAR2
50        ) IS
51          SELECT quote_status_id
52          FROM   ASO_QUOTE_STATUSES_B
53          WHERE  status_code = c_status_code;
54 
55       CURSOR C_Qte_Number_exists (
56           X_qte_number NUMBER
57        ) IS
58          SELECT quote_number
59          FROM   ASO_QUOTE_HEADERS_ALL
60          WHERE  quote_number = X_qte_number;
61 
62       CURSOR C_Curr_Qte_Info (
63           qte_numb NUMBER
64        ) IS
65          SELECT quote_status_id, quote_header_id, quote_version
66          FROM   ASO_QUOTE_HEADERS_ALL
67          WHERE  quote_number = qte_numb
68          AND    max_version_flag = 'Y';
69 
70       CURSOR C_Check_Qte_Status (
71           qte_status_id NUMBER
72        ) IS
73          SELECT 'X'
74          FROM   ASO_QUOTE_STATUSES_B
75          WHERE  quote_status_id = qte_status_id
76          AND    status_code NOT IN ('ORDER SUBMITTED'
77                                   , 'APPROVAL PENDING'
78                                   , 'FINANCING PENDING'
79                                     );
80 
81       CURSOR C_Get_Qte_Num (
82           qte_hdr_id NUMBER
83        ) IS
84          SELECT Quote_Number
85          FROM   ASO_QUOTE_HEADERS_ALL
86          WHERE  Quote_Header_Id = qte_hdr_id;
87 
88       l_api_name CONSTANT VARCHAR2 ( 30 ) := 'Copy_quote';
89       l_api_version_number CONSTANT NUMBER := 1.0;
90       l_return_status VARCHAR2 ( 1 );
91       l_val VARCHAR2 ( 1 );
92       l_enabled_flag VARCHAR2 ( 1 );
93       l_qte_header_rec ASO_QUOTE_PUB.Qte_Header_Rec_Type;
94       l_HEADER_RELATIONSHIP_ID NUMBER;
95       l_qte_num NUMBER;
96       l_qte_header_id NUMBER;
97       l_qte_status_id NUMBER;
98       l_dummy VARCHAR2 ( 2 );
99       lx_Price_Index_Link_Tbl ASO_QUOTE_HEADERS_PVT.Index_Link_Tbl_Type;
100       G_USER_ID NUMBER := FND_GLOBAL.USER_ID;
101       G_LOGIN_ID NUMBER := FND_GLOBAL.CONC_LOGIN_ID;
102       X_New_Qte_Line_Id  NUMBER;
103       -- hyang: for bug 2692785
104       lx_status                     VARCHAR2(1);
105       l_copy_line_qte_header_rec ASO_QUOTE_PUB.Qte_Header_Rec_Type;
106 
107       -- vtariker Price/Tax enh
108       CURSOR C_Get_Last_Upd_Date (
109           qte_hdr_id NUMBER
110        ) IS
111          SELECT last_update_date
112          FROM aso_quote_headers_all
113          WHERE quote_header_id = qte_hdr_id;
114 
115       CURSOR C_Get_RSA ( l_qte_hdr_id NUMBER) IS
116 	 Select assistance_requested
117 	 FROM   aso_quote_headers_all
118 	 WHERE  quote_header_id = l_qte_hdr_id;
119 
120 
121       CURSOR get_note_id ( l_qte_hdr_id NUMBER) IS
122 	 Select jtf_note_id
123 	 FROM   jtf_notes_vl
124 	 WHERE  note_type = 'QOT_SALES_ASSIST'
125       AND    source_object_id  = l_qte_hdr_id;
126 
127       l_upd_qte_header_rec ASO_QUOTE_PUB.Qte_Header_Rec_Type := ASO_QUOTE_PUB.G_MISS_qte_header_rec;
128 	 l_control_rec    ASO_QUOTE_PUB.Control_Rec_Type;
129       x_qte_header_rec              aso_quote_pub.qte_header_rec_type;
130       x_qte_line_tbl                aso_quote_pub.qte_line_tbl_type;
131       x_qte_line_dtl_tbl            aso_quote_pub.qte_line_dtl_tbl_type;
132       x_hd_price_attributes_tbl     aso_quote_pub.price_attributes_tbl_type;
133       x_hd_payment_tbl              aso_quote_pub.payment_tbl_type;
134       x_hd_shipment_tbl             aso_quote_pub.shipment_tbl_type;
135       x_hd_freight_charge_tbl       aso_quote_pub.freight_charge_tbl_type;
136       x_hd_tax_detail_tbl           aso_quote_pub.tax_detail_tbl_type;
137       x_line_attr_ext_tbl           aso_quote_pub.line_attribs_ext_tbl_type;
138       x_line_rltship_tbl            aso_quote_pub.line_rltship_tbl_type;
139       x_price_adjustment_tbl        aso_quote_pub.price_adj_tbl_type;
140       x_price_adj_attr_tbl          aso_quote_pub.price_adj_attr_tbl_type;
141       x_price_adj_rltship_tbl       aso_quote_pub.price_adj_rltship_tbl_type;
142       x_ln_price_attributes_tbl     aso_quote_pub.price_attributes_tbl_type;
143       x_ln_payment_tbl              aso_quote_pub.payment_tbl_type;
144       x_ln_shipment_tbl             aso_quote_pub.shipment_tbl_type;
145       x_ln_freight_charge_tbl       aso_quote_pub.freight_charge_tbl_type;
146       x_ln_tax_detail_tbl           aso_quote_pub.tax_detail_tbl_type;
147       -- vtariker Price/Tax enh
148 
149       -- hyang new okc
150       l_terms_template_name               VARCHAR2(240);
151       l_target_doc_type                   VARCHAR2(30);
152       l_target_doc_id                     NUMBER;
153       -- end of hyang new okc
154       lx_jtf_note_context_id              NUMBER;
155       l_note_id                           NUMBER;
156       l_rsa                               varchar2(1);
157       l_copy_for_amendment                varchar2(1);
158 	 l_copy_abstract_yn                  varchar2(1);
159       l_has_terms                         varchar2(1):= 'N';
160    BEGIN
161       -- Standard Start of API savepoint
162       SAVEPOINT COPY_QUOTE_PVT;
163 
164       -- Standard call to check for call compatibility.
165       IF NOT FND_API.Compatible_API_Call (
166                  l_api_version_number
167               , p_api_version_number
168               , l_api_name
169               , G_PKG_NAME
170               ) THEN
171          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
172       END IF;
173 
174       -- Initialize message list if p_init_msg_list is set to TRUE.
175       IF FND_API.to_Boolean ( p_init_msg_list ) THEN
176          FND_MSG_PUB.initialize;
177       END IF;
178 
179       -- Debug Message
180       IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW ) THEN
181          FND_MESSAGE.Set_Name ('ASO' , 'Copy Quote API: Start' );
182          FND_MSG_PUB.ADD;
183       END IF;
184 
185       --  Initialize API return status to success
186       l_return_status            := FND_API.G_RET_STS_SUCCESS;
187 
188 --
189 -- API body
190 --
191 -- ******************************************************************
192 -- Validate Environment
193 -- ******************************************************************
194       IF FND_GLOBAL.User_Id IS NULL THEN
195          IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
196             FND_MESSAGE.Set_Name ('ASO' , 'UT_CANNOT_GET_PROFILE_VALUE' );
197             FND_MESSAGE.Set_Token ('PROFILE' , 'USER_ID', FALSE );
198             FND_MSG_PUB.ADD;
199          END IF;
200          RAISE FND_API.G_EXC_ERROR;
201       END IF;
202 
203 -- ******************************************************************
204 
205 
206 
207       OPEN C_Validate_Quote ( P_Copy_Quote_Header_Rec.Quote_Header_Id );
208       FETCH C_Validate_Quote INTO l_val;
209 
210       IF C_Validate_Quote%NOTFOUND THEN
211          IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
212             FND_MESSAGE.Set_Name ('ASO' , 'ASO_API_INVALID_ID' );
213             FND_MESSAGE.Set_Token ('COLUMN' , 'ORIGINAL_QUOTE_ID', FALSE );
214             FND_MESSAGE.Set_Token ( 'VALUE' , TO_CHAR ( P_Copy_Quote_Header_Rec.Quote_Header_Id ) , FALSE );
215             FND_MSG_PUB.ADD;
216          END IF;
217          CLOSE C_Validate_Quote;
218          RAISE FND_API.G_EXC_ERROR;
219       END IF;
220 
221       CLOSE C_Validate_Quote;
222 
223       IF aso_debug_pub.g_debug_flag = 'Y' THEN
224 	 aso_debug_pub.ADD ( 'Copy_Quote - Begin- ASO_COPY_QUOTE_PVT.Copy_Quote ' , 1 , 'Y' );
225       aso_debug_pub.ADD ( 'Copy_Quote - P_Copy_Quote_Header_Rec.Quote_Header_Id: ' || P_Copy_Quote_Header_Rec.Quote_Header_Id , 1 , 'N' );
226       aso_debug_pub.ADD ( 'Copy_Quote - P_Copy_Quote_Control_Rec.Copy_Header_Only ' || P_Copy_Quote_Control_Rec.Copy_Header_Only , 1 , 'N' );
227       aso_debug_pub.ADD ( 'Copy_Quote - P_Copy_Quote_Control_Rec.New_Version ' || P_Copy_Quote_Control_Rec.New_Version , 1 , 'N' );
228       aso_debug_pub.ADD ( 'Copy_Quote - P_Copy_Quote_Header_Rec.Quote_Number ' || P_Copy_Quote_Header_Rec.Quote_Number , 1 , 'N' );
229       aso_debug_pub.ADD ( 'Copy_Quote - P_Copy_Quote_Header_Rec.Resource_Id ' || P_Copy_Quote_Header_Rec.Resource_Id , 1 , 'N' );
230       aso_debug_pub.ADD ( 'Copy_Quote - P_Copy_Quote_Header_Rec.Resource_Grp_Id ' || P_Copy_Quote_Header_Rec.Resource_Grp_Id , 1 , 'N' );
231       aso_debug_pub.ADD ( 'Copy_Quote - P_Copy_Quote_Header_Rec.Quote_Name ' || P_Copy_Quote_Header_Rec.Quote_Name , 1 , 'N' );
232       END IF;
233 
234       l_qte_header_rec := ASO_UTILITY_PVT.Query_Header_Row ( P_Copy_Quote_Header_Rec.Quote_Header_Id );
235 
236       IF ( P_Copy_Quote_Control_Rec.New_Version = FND_API.G_FALSE ) THEN
237          IF (    P_Copy_Quote_Header_Rec.Quote_Number IS NULL
238              OR P_Copy_Quote_Header_Rec.Quote_Number = FND_API.G_MISS_NUM
239              ) THEN
240             IF ( NVL ( FND_PROFILE.VALUE ('ASO_AUTO_NUMBERING' ), 'Y' ) = 'Y' ) THEN
241                IF aso_debug_pub.g_debug_flag = 'Y' THEN
242 			aso_debug_pub.ADD ( 'Copy_Quote - AUTO_NUMBERING is Y ' , 1 , 'N' );
243 			END IF;
244 
245                OPEN C_Qte_Number;
246                FETCH C_Qte_Number INTO l_qte_header_rec.quote_number;
247                CLOSE C_Qte_Number;
248 
249                l_qte_header_rec.quote_version := 1;
250                l_qte_header_rec.max_version_flag := 'Y';
251             ELSE
252                IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
253                   FND_MESSAGE.Set_Name ('ASO' , 'ASO_API_MISSING_COLUMN' );
254                   FND_MESSAGE.Set_Token ('COLUMN' , 'QUOTE_NUMBER', FALSE );
255                   FND_MSG_PUB.ADD;
256                END IF;
257                RAISE FND_API.G_EXC_ERROR;
258             END IF; -- profile auto numbering
259          ELSE
260 
261             OPEN C_Qte_Number_Exists ( P_Copy_Quote_Header_Rec.Quote_Number );
262             FETCH C_Qte_Number_Exists INTO l_qte_num;
263             CLOSE C_Qte_Number_Exists;
264 
265             IF l_qte_num = P_Copy_Quote_Header_Rec.Quote_Number THEN
266                IF aso_debug_pub.g_debug_flag = 'Y' THEN
267 			aso_debug_pub.ADD ( 'Copy_Quote - AUTO_NUMBERING is N ' , 1 , 'N' );
268 			END IF;
269                IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
270                   FND_MESSAGE.Set_Name ('ASO' , 'ASO_CANNOT_COPY_QTE' );
271                   FND_MSG_PUB.ADD;
272                END IF;
273                RAISE FND_API.G_EXC_ERROR;
274             ELSE
275                l_qte_header_rec.quote_number := P_Copy_Quote_Header_Rec.Quote_Number;
276                l_qte_header_rec.quote_version := 1;
277                l_qte_header_rec.max_version_flag := 'Y';
278             END IF;
279          END IF; -- p_qte_number is null
280 
281 -- Qte_Exp_Date
282          IF P_Copy_Quote_Header_Rec.Quote_Expiration_Date = FND_API.G_MISS_DATE THEN
283             ASO_COPY_QUOTE_PVT.Get_Quote_Exp_Date (
284                 X_Quote_Exp_Date =>             l_qte_header_rec.quote_expiration_date
285              , X_Return_Status =>               l_return_status
286              , X_Msg_Count =>                   x_msg_count
287              , X_Msg_Data =>                    x_msg_data
288              );
289             IF ( l_return_status = FND_API.G_RET_STS_ERROR ) THEN
290                x_return_status            := FND_API.G_RET_STS_ERROR;
291                RAISE FND_API.G_EXC_ERROR;
292             END IF;
293          END IF;
294 
295 -- Quote_Exp_Date
296 
297       ELSE -- new_version is TRUE
298 
299         -- hyang: for bug 2692785
300         ASO_CONC_REQ_INT.Lock_Exists(
301           p_quote_header_id => P_Copy_Quote_Header_Rec.Quote_Header_Id,
302           x_status          => lx_status);
303 
304         IF (lx_status = FND_API.G_TRUE) THEN
305           IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
306             FND_MESSAGE.Set_Name('ASO', 'ASO_CONC_REQUEST_RUNNING');
307             FND_MSG_PUB.ADD;
308           END IF;
309           RAISE FND_API.G_EXC_ERROR;
310         END IF;
311 
312          IF      P_Copy_Quote_Header_Rec.Quote_Number IS NOT NULL
313              AND P_Copy_Quote_Header_Rec.Quote_Number <> FND_API.G_MISS_NUM THEN
314 
315             OPEN C_Qte_Number_Exists ( P_Copy_Quote_Header_Rec.Quote_Number );
316             FETCH C_Qte_Number_Exists INTO l_qte_num;
317 
318             IF C_Qte_Number_Exists%NOTFOUND THEN
319                IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
320                   FND_MESSAGE.Set_Name ('ASO' , 'ASO_API_INVALID_ID' );
321                   FND_MESSAGE.Set_Token ('COLUMN' , 'QUOTE_NUMBER', FALSE );
322                   FND_MSG_PUB.ADD;
323                END IF;
324                CLOSE C_Qte_Number_Exists;
325                RAISE FND_API.G_EXC_ERROR;
326             ELSE
327                IF aso_debug_pub.g_debug_flag = 'Y' THEN
328 			aso_debug_pub.ADD ( 'Copy_Quote - P_Qte_Number Exists' , 1 , 'N' );
329 			END IF;
330                l_qte_header_rec.quote_number := P_Copy_Quote_Header_Rec.Quote_Number;
331                CLOSE C_Qte_Number_Exists;
332             END IF;
333 
334          END IF; -- qte_number not null
335 
336          OPEN C_Curr_Qte_Info ( l_qte_header_rec.quote_number );
337          FETCH C_Curr_Qte_Info INTO l_qte_status_id
338                                   , l_qte_header_id
339                                   , l_qte_header_rec.quote_version;
340          CLOSE C_Curr_Qte_Info;
341 
342          IF aso_debug_pub.g_debug_flag = 'Y' THEN
343 	    aso_debug_pub.ADD ( 'Copy_Quote - l_qte_status_id ' || l_qte_status_id , 1 , 'N' );
344          aso_debug_pub.ADD ( 'Copy_Quote - l_qte_header_id ' || l_qte_header_id , 1 , 'N' );
345          aso_debug_pub.ADD ( 'Copy_Quote - l_qte_header_rec.quote_version ' || l_qte_header_rec.quote_version , 1 , 'N' );
346 	    END IF;
347 
348          OPEN C_Check_Qte_Status ( l_qte_status_id );
349          FETCH C_Check_Qte_Status INTO l_dummy;
350 
351          IF C_Check_Qte_Status%NOTFOUND THEN
352             IF aso_debug_pub.g_debug_flag = 'Y' THEN
353 		  aso_debug_pub.ADD ('Copy_Quote - invalid status ' , 1, 'N' );
354 		  END IF;
355             IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
356                FND_MESSAGE.Set_Name ('ASO' , 'ASO_CANNOT_COPY_FOR_STATUS' );
357                FND_MSG_PUB.ADD;
358             END IF;
359             CLOSE C_Check_Qte_Status;
360             RAISE FND_API.G_EXC_ERROR;
361          END IF;
362 
363          CLOSE C_Check_Qte_Status;
364 
365          l_qte_header_rec.quote_version := NVL ( l_qte_header_rec.quote_version, 0 ) + 1;
366          l_qte_header_rec.max_version_flag := 'Y';
367 
368          UPDATE ASO_QUOTE_HEADERS_ALL
369             SET Max_Version_Flag = 'N'
370               ,last_update_date =sysdate
371               ,last_updated_by = G_USER_ID
372               ,last_update_login = G_LOGIN_ID
373 
374           WHERE Quote_Header_Id = l_qte_header_id;
375 
376       END IF; -- p_new_version
377 
378       OPEN c_qte_status_id ( fnd_profile.VALUE ('ASO_DEFAULT_STATUS_CODE' ) );
379       FETCH c_qte_status_id INTO l_qte_header_rec.quote_status_id;
380 
381       IF c_qte_status_id%NOTFOUND THEN
382          x_return_status            := FND_API.G_RET_STS_ERROR;
383          IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
384             FND_MESSAGE.Set_Name ('ASO' , 'ASO_API_NO_PROFILE_VALUE' );
385             FND_MESSAGE.Set_Token ( 'PROFILE' , 'ASO_DEFAULT_STATUS_CODE' , FALSE );
386             FND_MSG_PUB.ADD;
387          END IF;
388          CLOSE c_qte_status_id;
389          RAISE FND_API.G_EXC_ERROR;
390       END IF;
391 
392       CLOSE c_qte_status_id;
393 
394       IF P_Copy_Quote_Header_Rec.Quote_Name <> FND_API.G_MISS_CHAR THEN
395          l_qte_header_rec.Quote_Name := P_Copy_Quote_Header_Rec.Quote_Name;
396 
397       ELSE
398           -- since the quote name is not passed in, set the quote name
399         IF ( P_Copy_Quote_Control_Rec.New_Version = FND_API.G_FALSE ) THEN
400          IF (l_qte_header_rec.quote_name is not null and l_qte_header_rec.quote_name <> fnd_api.g_miss_char) then
401             l_qte_header_rec.quote_name := 'Copy Of '||substr(l_qte_header_rec.quote_name,1,232);
402          Else
403             l_qte_header_rec.quote_name := 'Copy Of ';
404          end if;
405         end if;
406 
407       END IF;
408 
409       IF P_Copy_Quote_Header_Rec.Quote_Source_Code <> FND_API.G_MISS_CHAR THEN
410          l_qte_header_rec.Quote_Source_Code := P_Copy_Quote_Header_Rec.Quote_Source_Code;
411       END IF;
412 
413       IF P_Copy_Quote_Header_Rec.Quote_Expiration_Date <> FND_API.G_MISS_DATE THEN
414          l_qte_header_rec.Quote_Expiration_Date := P_Copy_Quote_Header_Rec.Quote_Expiration_Date;
415       END IF;
416 
417       IF P_Copy_Quote_Header_Rec.Resource_Id <> FND_API.G_MISS_NUM THEN
418          l_qte_header_rec.Resource_Id := P_Copy_Quote_Header_Rec.Resource_Id;
419       END IF;
420 
421       IF P_Copy_Quote_Header_Rec.Resource_Grp_Id <> FND_API.G_MISS_NUM THEN
422          l_qte_header_rec.Resource_Grp_Id := P_Copy_Quote_Header_Rec.Resource_Grp_Id;
423       END IF;
424 
425   -- added four new fields as per changes to the copy quote header rec
426       IF P_Copy_Quote_Header_Rec.pricing_status_indicator <> FND_API.G_MISS_CHAR THEN
427          l_qte_header_rec.pricing_status_indicator := P_Copy_Quote_Header_Rec.pricing_status_indicator;
428       END IF;
429 
430       IF P_Copy_Quote_Header_Rec.tax_status_indicator <> FND_API.G_MISS_CHAR THEN
431          l_qte_header_rec.tax_status_indicator := P_Copy_Quote_Header_Rec.tax_status_indicator;
432       END IF;
433 
434       IF P_Copy_Quote_Header_Rec.price_updated_date <> FND_API.G_MISS_DATE THEN
435          l_qte_header_rec.price_updated_date := P_Copy_Quote_Header_Rec.price_updated_date;
436       END IF;
437 
438       IF P_Copy_Quote_Header_Rec.tax_updated_date <> FND_API.G_MISS_DATE THEN
439          l_qte_header_rec.tax_updated_date := P_Copy_Quote_Header_Rec.tax_updated_date;
440       END IF;
441 
442 
443       IF aso_debug_pub.g_debug_flag = 'Y' THEN
444 	 aso_debug_pub.ADD ('Copy_Quote - Begin- before copy_rows ' , 1, 'Y' );
445 	 END IF;
446       Copy_Header_Rows (
447           P_Api_Version_Number =>         1.0
448        , P_Init_Msg_List =>               FND_API.G_FALSE
449        , P_Commit =>                      FND_API.G_FALSE
450        , P_qte_Header_Rec =>              l_qte_header_rec
451        , P_Copy_Quote_Control_Rec =>      P_Copy_Quote_Control_Rec
452        , X_Qte_Header_id =>               x_qte_header_id
453        , X_Price_Index_Link_Tbl =>        lx_Price_Index_Link_Tbl
454        , X_Return_Status =>               l_return_status
455        , X_Msg_Count =>                   x_msg_count
456        , X_Msg_Data =>                    x_msg_data
457        );
458       IF aso_debug_pub.g_debug_flag = 'Y' THEN
459 	 aso_debug_pub.ADD ( 'Copy_Quote - After copy_rows ' || l_return_status , 1 , 'Y' );
460 	 END IF;
461 
462       IF ( l_return_status = FND_API.G_RET_STS_UNEXP_ERROR ) THEN
463          x_return_status            := FND_API.G_RET_STS_UNEXP_ERROR;
464          IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
465             FND_MESSAGE.Set_Name ('ASO' , 'ASO_API_UNEXP_ERROR' );
466             FND_MESSAGE.Set_Token ('ROW' , 'ASO_QUOTE_HEADER', TRUE );
467             FND_MSG_PUB.ADD;
468          END IF;
469          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
470       ELSIF ( l_return_status = FND_API.G_RET_STS_ERROR ) THEN
471          x_return_status            := FND_API.G_RET_STS_ERROR;
472          RAISE FND_API.G_EXC_ERROR;
473       END IF;
474 
475       IF P_Copy_Quote_Control_Rec.Copy_Header_Only <> FND_API.G_TRUE THEN
476 
477          IF aso_debug_pub.g_debug_flag = 'Y' THEN
478 	    aso_debug_pub.ADD ('Copy_Quote - Begin- before copy_rows ' , 1, 'Y' );
479 	    END IF;
480 
481 
482 	    l_copy_line_qte_header_rec.batch_price_flag := FND_API.G_FALSE;
483 
484          Copy_Line_Rows (
485             P_Api_Version_Number =>         1.0
486           , P_Init_Msg_List =>               FND_API.G_FALSE
487           , P_Commit =>                      FND_API.G_FALSE
488           , P_qte_Header_Id =>               P_Copy_Quote_Header_Rec.Quote_Header_Id
489           , P_new_qte_header_id =>           x_qte_header_id
490           , P_Qte_Line_Id =>                 FND_API.G_MISS_NUM
491           , P_Price_Index_Link_Tbl =>        lx_Price_Index_Link_Tbl
492           , P_Copy_Quote_Control_Rec =>      P_Copy_Quote_Control_Rec
493           , P_Qte_Header_Rec         =>   l_copy_line_qte_header_rec
494           , P_Control_Rec            =>   ASO_QUOTE_PUB.G_MISS_Control_Rec
495           , X_Qte_Line_Id            =>  X_New_Qte_Line_Id
496           , X_Return_Status =>               l_return_status
497           , X_Msg_Count =>                   x_msg_count
498           , X_Msg_Data =>                    x_msg_data
499           );
500          IF aso_debug_pub.g_debug_flag = 'Y' THEN
501 	    aso_debug_pub.ADD ( 'Copy_Quote - After copy_rows ' || l_return_status , 1 , 'Y' );
502 	    END IF;
503       END IF;
504 
505       IF ( l_return_status = FND_API.G_RET_STS_UNEXP_ERROR ) THEN
506          x_return_status            := FND_API.G_RET_STS_UNEXP_ERROR;
507          IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
508             FND_MESSAGE.Set_Name ('ASO' , 'ASO_API_UNEXP_ERROR' );
509             FND_MESSAGE.Set_Token ('ROW' , 'ASO_QUOTE_HEADER', TRUE );
510             FND_MSG_PUB.ADD;
511          END IF;
512          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
513       ELSIF ( l_return_status = FND_API.G_RET_STS_ERROR ) THEN
514          x_return_status            := FND_API.G_RET_STS_ERROR;
515          RAISE FND_API.G_EXC_ERROR;
516       END IF;
517 
518       OPEN C_Get_Qte_Num ( x_qte_header_id );
519       FETCH C_Get_Qte_Num INTO x_qte_number;
520       CLOSE C_Get_Qte_Num;
521 
522       IF P_Copy_Quote_Control_Rec.New_Version = FND_API.G_TRUE THEN
523          COPY_SALES_SUPPLEMENT (
524              P_Api_Version_Number =>         1.0
525           , P_Init_Msg_List =>               FND_API.G_FALSE
526           , P_Commit =>                      FND_API.G_FALSE
527           , p_old_quote_header_id =>         P_Copy_Quote_Header_Rec.quote_header_id
528           , p_new_quote_header_id =>         x_qte_header_id
529           , X_Return_Status =>               l_return_status
530           , X_Msg_Count =>                   x_msg_count
531           , X_Msg_Data =>                    x_msg_data
532           );
533          IF ( l_return_status = FND_API.G_RET_STS_UNEXP_ERROR ) THEN
534             x_return_status            := FND_API.G_RET_STS_UNEXP_ERROR;
535             IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
536                FND_MESSAGE.Set_Name ('ASO' , 'ASO_API_UNEXP_ERROR' );
537                FND_MESSAGE.Set_Token ('ROW' , 'ASO_QUOTE_HEADER', TRUE );
538                FND_MSG_PUB.ADD;
539             END IF;
540             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
541          ELSIF ( l_return_status = FND_API.G_RET_STS_ERROR ) THEN
542             x_return_status            := FND_API.G_RET_STS_ERROR;
543             RAISE FND_API.G_EXC_ERROR;
544          END IF;
545 
546 	    IF aso_debug_pub.g_debug_flag = 'Y' THEN
547 	    aso_debug_pub.ADD ( 'Copy_Quote - Before Copy_Opp_Quote: ' , 1 , 'N' );
548 	    END IF;
549          ASO_COPY_QUOTE_PVT.Copy_Opp_Quote(
550                p_api_version_number  => 1.0,
551                p_qte_header_id       => P_Copy_Quote_Header_Rec.quote_header_id,
552                p_new_qte_header_id   => x_qte_header_id,
553                X_Return_Status       => l_return_status,
554                X_Msg_Count           => x_msg_count,
555                X_Msg_Data            => x_msg_data
556              );
557           IF aso_debug_pub.g_debug_flag = 'Y' THEN
558 		aso_debug_pub.ADD ( 'Copy_Quote - After Copy_Opp_Quote: l_return_status '||l_return_status , 1 , 'N' );
559 		END IF;
560           IF ( l_return_status <> FND_API.G_RET_STS_SUCCESS ) THEN
561              x_return_status            := l_return_status;
562              RAISE FND_API.G_EXC_ERROR;
563           END IF;
564 
565       END IF;
566 
567       -- vtariker Price/Tax Enh
568       IF aso_debug_pub.g_debug_flag = 'Y' THEN
569       aso_debug_pub.ADD ( 'Copy_Quote - P_Copy_Quote_Control_Rec.Pricing_Request_Type'||
570 					  P_Copy_Quote_Control_Rec.Pricing_Request_Type , 1 , 'N' );
571       aso_debug_pub.ADD ( 'Copy_Quote - P_Copy_Quote_Control_Rec.Header_Pricing_Event'||
572 					  P_Copy_Quote_Control_Rec.Header_Pricing_Event , 1 , 'N' );
573       aso_debug_pub.ADD ( 'Copy_Quote - P_Copy_Quote_Control_Rec.Price_Mode'||
574 					  P_Copy_Quote_Control_Rec.Price_Mode , 1 , 'N' );
575       aso_debug_pub.ADD ( 'Copy_Quote - P_Copy_Quote_Control_Rec.Calculate_Tax_Flag'||
576 					  P_Copy_Quote_Control_Rec.Calculate_Tax_Flag , 1 , 'N' );
577       aso_debug_pub.ADD ( 'Copy_Quote - P_Copy_Quote_Control_Rec.Calculate_Freight_Charge_Flag'||
578 					  P_Copy_Quote_Control_Rec.Calculate_Freight_Charge_Flag , 1 , 'N' );
579       END IF;
580 
581       IF (P_Copy_Quote_Control_Rec.Header_Pricing_Event <> FND_API.G_MISS_CHAR
582           AND P_Copy_Quote_Control_Rec.Header_Pricing_Event IS NOT NULL) OR
583          P_Copy_Quote_Control_Rec.Calculate_Tax_Flag = 'Y' THEN
584 
585          IF P_Copy_Quote_Control_Rec.Header_Pricing_Event <> FND_API.G_MISS_CHAR
586             AND P_Copy_Quote_Control_Rec.Header_Pricing_Event IS NOT NULL THEN
587 
588              l_control_rec.pricing_request_type := P_Copy_Quote_Control_Rec.Pricing_Request_Type;
589              l_control_rec.header_pricing_event := P_Copy_Quote_Control_Rec.Header_Pricing_Event;
590              l_control_rec.price_mode           := P_Copy_Quote_Control_Rec.Price_Mode;
591              l_control_rec.Calculate_Freight_Charge_Flag
592 							   := P_Copy_Quote_Control_Rec.Calculate_Freight_Charge_Flag;
593              l_control_rec.calculate_tax_flag   := 'N';
594          END IF;
595 
596          IF P_Copy_Quote_Control_Rec.Calculate_Tax_Flag = 'Y' THEN
597              l_control_rec.calculate_tax_flag   :=  'Y';
598          END IF;
599 
600          l_control_rec.auto_version_flag            :=  FND_API.G_TRUE;
601 
602          OPEN C_Get_Last_Upd_Date ( x_qte_header_id );
603          FETCH C_Get_Last_Upd_Date INTO l_upd_qte_header_rec.last_update_date;
604          CLOSE C_Get_Last_Upd_Date;
605 
606          l_upd_qte_header_rec.quote_header_id := x_qte_header_id;
607 
608          IF aso_debug_pub.g_debug_flag = 'Y' THEN
609          aso_debug_pub.ADD ( 'Copy_Quote - Before Update_Qte: x_qte_header_id '||x_qte_header_id , 1 , 'N' );
610          END IF;
611          aso_quote_pub.update_quote (
612             p_api_version_number         => 1.0,
613             p_init_msg_list              => fnd_api.g_false,
614             p_commit                     => fnd_api.g_false,
615             p_control_rec                => l_control_rec,
616             p_qte_header_rec             => l_upd_qte_header_rec,
617             p_hd_price_attributes_tbl    => aso_quote_pub.g_miss_price_attributes_tbl,
618             p_hd_payment_tbl             => aso_quote_pub.g_miss_payment_tbl,
619             p_hd_shipment_tbl            => aso_quote_pub.g_miss_shipment_tbl,
620             p_hd_freight_charge_tbl      => aso_quote_pub.g_miss_freight_charge_tbl,
621             p_hd_tax_detail_tbl          => aso_quote_pub.g_miss_tax_detail_tbl,
622             p_qte_line_tbl               => aso_quote_pub.g_miss_qte_line_tbl,
623             p_qte_line_dtl_tbl           => aso_quote_pub.g_miss_qte_line_dtl_tbl,
624             p_line_attr_ext_tbl          => aso_quote_pub.g_miss_Line_Attribs_Ext_TBL,
625             p_line_rltship_tbl           => aso_quote_pub.g_miss_line_rltship_tbl,
626             p_price_adjustment_tbl       => aso_quote_pub.g_miss_price_adj_tbl,
627             p_price_adj_attr_tbl         => aso_quote_pub.g_miss_price_adj_attr_tbl,
628             p_price_adj_rltship_tbl      => aso_quote_pub.g_miss_price_adj_rltship_tbl,
629             p_ln_price_attributes_tbl    => aso_quote_pub.g_miss_price_attributes_tbl,
630             p_ln_payment_tbl             => aso_quote_pub.g_miss_payment_tbl,
631             p_ln_shipment_tbl            => aso_quote_pub.g_miss_shipment_tbl,
632             p_ln_freight_charge_tbl      => aso_quote_pub.g_miss_freight_charge_tbl,
633             p_ln_tax_detail_tbl          => aso_quote_pub.g_miss_tax_detail_tbl,
634             x_qte_header_rec             => x_qte_header_rec,
635             x_qte_line_tbl               => x_qte_line_tbl,
636             x_qte_line_dtl_tbl           => x_qte_line_dtl_tbl,
637             x_hd_price_attributes_tbl    => x_hd_price_attributes_tbl,
638             x_hd_payment_tbl             => x_hd_payment_tbl,
639             x_hd_shipment_tbl            => x_hd_shipment_tbl,
640             x_hd_freight_charge_tbl      => x_hd_freight_charge_tbl,
641             x_hd_tax_detail_tbl          => x_hd_tax_detail_tbl,
642             x_line_attr_ext_tbl          => x_line_attr_ext_tbl,
643             x_line_rltship_tbl           => x_line_rltship_tbl,
644             x_price_adjustment_tbl       => x_price_adjustment_tbl,
645             x_price_adj_attr_tbl         => x_price_adj_attr_tbl,
646             x_price_adj_rltship_tbl      => x_price_adj_rltship_tbl,
647             x_ln_price_attributes_tbl    => x_ln_price_attributes_tbl,
648             x_ln_payment_tbl             => x_ln_payment_tbl,
649             x_ln_shipment_tbl            => x_ln_shipment_tbl,
650             x_ln_freight_charge_tbl      => x_ln_freight_charge_tbl,
651             x_ln_tax_detail_tbl          => x_ln_tax_detail_tbl,
652             x_return_status              => l_return_status,
653             x_msg_count                  => x_msg_count,
654             x_msg_data                   => x_msg_data
655           );
656 
657           IF aso_debug_pub.g_debug_flag = 'Y' THEN
658           aso_debug_pub.ADD ( 'Copy_Quote - After Update_Quote (Reprice/tax): l_return_status '||
659 						 l_return_status , 1 ,'N' );
660           END IF;
661           IF ( l_return_status <> FND_API.G_RET_STS_SUCCESS ) THEN
662              x_return_status            := l_return_status;
663              RAISE FND_API.G_EXC_ERROR;
664           END IF;
665 
666       END IF; -- Header_pricing_event/Tax_flag = TRUE
667 
668       -- hyang new okc
669 
670       IF NVL(FND_PROFILE.Value('OKC_ENABLE_SALES_CONTRACTS'),'N') = 'Y'
671       THEN
672 
673         IF aso_debug_pub.g_debug_flag = 'Y' THEN
674   	      aso_debug_pub.add(
675   	        'Copy_Quote - Checking whether the old quote has terms associated with.',
676   	        1,
677   	        'Y');
678   	    END IF;
679         -- bug 5314615
680         l_has_terms := OKC_TERMS_UTIL_GRP.has_terms('QUOTE', p_copy_quote_header_rec.quote_header_id);
681 
682         IF aso_debug_pub.g_debug_flag = 'Y' THEN
683   	      aso_debug_pub.add(
684   	        'Copy_Quote - l_has_terms ' || l_has_terms,
685   	        1,
686   	        'Y');
687   	    END IF;
688 
689 
690         IF l_has_terms  = 'Y'
691         THEN
692 
693           l_target_doc_type := 'QUOTE';
694           l_target_doc_Id   := x_qte_header_id;
695 
696           IF aso_debug_pub.g_debug_flag = 'Y' THEN
697     	      aso_debug_pub.add(
698     	        'Copy_Quote - P_Source_Doc_ID ' ||  P_Copy_Quote_Header_Rec.Quote_Header_Id,
699     	        1,
700     	        'Y');
701     	      aso_debug_pub.add(
702     	        'Copy_Quote - P_Target_Doc_ID ' ||  l_target_doc_Id,
703     	        1,
704     	        'Y');
705     	      aso_debug_pub.add(
706     	        'Copy_Quote - P_Target_Doc_Type ' ||  l_target_doc_type,
707     	        1,
708     	        'Y');
709     	    END IF;
710 
711          -- bug 4932493,always copying the contract documents
712             IF aso_debug_pub.g_debug_flag = 'Y' THEN
713       	      aso_debug_pub.add(
714       	        'Copy_Quote - Copying terms, as well as contract documents',
715       	        1,
716       	        'Y');
717             END IF;
718          -- bug 5314615
719 	    IF P_Copy_Quote_Control_Rec.New_Version = FND_API.G_TRUE THEN
720             l_copy_for_amendment := 'Y';
721 		  l_copy_abstract_yn   := 'Y';
722 	    ELSE
723             l_copy_for_amendment := 'N';
724 		  l_copy_abstract_yn   := 'N';
725          END IF;
726 
727     	      OKC_TERMS_COPY_GRP.Copy_Doc (
728                  P_Api_Version			   => 1.0,
729 	            P_Source_doc_Type		        => 'QUOTE',
730                  P_Source_Doc_ID			   => P_Copy_Quote_Header_Rec.Quote_Header_Id,
731           	  P_Target_Doc_ID			   => l_target_doc_Id,
732           	  P_Target_Doc_Type		        => l_target_doc_type,
733            	  P_Keep_Version			   => 'Y',
734           	  P_Article_Effective_Date	   => NULL,
735           	  P_Copy_Deliverables		   => 'N',
736           	  P_Copy_Doc_Attachments	        => 'Y',
737                  P_copy_for_amendment           => l_copy_for_amendment,
738 		       P_copy_abstract_yn             => l_copy_abstract_yn,
739                  X_Return_Status        	   => X_Return_Status,
740                  X_Msg_Count             	   => X_Msg_Count,
741                  X_Msg_Data              	   => X_Msg_Data
742             );
743 
744 
745           IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
746             IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
747               FND_MESSAGE.Set_Name('ASO', 'ASO_API_ERROR_COPY_DOC');
748               FND_MSG_PUB.ADD;
749             END IF;
750 
751             IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
752                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
753             ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
754                 RAISE FND_API.G_EXC_ERROR;
755             END IF;
756           END IF;
757         END IF; -- has_terms
758 
759       END IF;  -- profile
760 
761       -- end of hyang new okc
762 
763       -- vtariker Price/Tax Enh
764 
765       -- bug 5162246
766 	 OPEN C_Get_RSA(x_qte_header_id);
767 	 FETCH C_Get_RSA INTO l_rsa;
768 	 CLOSE C_Get_RSA;
769 
770 	 IF aso_debug_pub.g_debug_flag = 'Y' THEN
771 	 aso_debug_pub.ADD ( 'Copy_Quote - l_rsa: '|| l_rsa  , 1 , 'Y' );
772 	 END IF;
773 
774 	 IF  ( (P_Copy_Quote_Control_Rec.New_Version = FND_API.G_TRUE) and (nvl(l_rsa,'N') = 'Y') ) then
775 
776         -- get the note id for the original quote
777         OPEN get_note_id(P_Copy_Quote_Header_Rec.quote_header_id);
778 	   FETCH get_note_id into l_note_id;
779 	   CLOSE get_note_id;
780 
781 	    IF aso_debug_pub.g_debug_flag = 'Y' THEN
782 	       aso_debug_pub.ADD ( 'Copy_Quote - l_note_id: '|| l_note_id  , 1 , 'Y' );
783 	       aso_debug_pub.ADD ( 'Copy_Quote - Before Calling JTF_NOTES_PUB.Create_Note_Context', 1 , 'Y' );
784 	    END IF;
785 
786         JTF_NOTES_PUB.Create_Note_Context(
787                p_validation_level      => FND_API.G_VALID_LEVEL_NONE,
788                x_return_status         => x_return_status           ,
789                p_jtf_note_id           => l_note_id                 ,
790                p_last_update_date      => sysdate                   ,
791                p_last_updated_by       => FND_Global.USER_ID        ,
792                p_creation_date         => sysdate                   ,
793                p_created_by            => FND_Global.USER_ID        ,
794                p_last_update_login     => FND_GLOBAL.LOGIN_ID       ,
795                p_note_context_type_id  => x_qte_header_id           ,
796                p_note_context_type     => 'ASO_QUOTE'               ,
797                x_note_context_id       => lx_jtf_note_context_id
798                );
799 
800 	     IF aso_debug_pub.g_debug_flag = 'Y' THEN
801 	       aso_debug_pub.ADD ( 'Copy_Quote - After Calling JTF_NOTES_PUB.Create_Note_Context', 1 , 'Y' );
802 	       aso_debug_pub.ADD ( 'Copy_Quote - x_return_status       : ' || x_return_status, 1 , 'Y' );
803 	       aso_debug_pub.ADD ( 'Copy_Quote - lx_jtf_note_context_id: ' || lx_jtf_note_context_id, 1 , 'Y' );
804 	     END IF;
805           IF x_return_status = FND_API.G_RET_STS_ERROR THEN
806             RAISE FND_API.G_EXC_ERROR;
807           ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
808             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
809           END IF;
810 
811       END IF; -- end if for the new version and rsa check
812 
813 
814 	 IF aso_debug_pub.g_debug_flag = 'Y' THEN
815 	 aso_debug_pub.ADD ( 'Copy_Quote - END ' , 1 , 'Y' );
816 	 END IF;
817 
818       x_return_status            := FND_API.G_RET_STS_SUCCESS;
819 
820       --
821       -- End of API body
822       --
823 
824       -- Standard check for p_commit
825       IF FND_API.to_Boolean ( p_commit ) THEN
826          COMMIT WORK;
827       END IF;
828       -- Standard call to get message count and if count is 1, get message info.
829       FND_MSG_PUB.Count_And_Get (
830           p_count =>                      x_msg_count
831        , p_data =>                        x_msg_data
832        );
833 
834    EXCEPTION
835       WHEN FND_API.G_EXC_ERROR THEN
836          ASO_UTILITY_PVT.HANDLE_EXCEPTIONS (
837              P_API_NAME =>                   L_API_NAME
838           , P_PKG_NAME =>                    G_PKG_NAME
839           , P_EXCEPTION_LEVEL =>             FND_MSG_PUB.G_MSG_LVL_ERROR
840           , P_PACKAGE_TYPE =>                ASO_UTILITY_PVT.G_PVT
841           , X_MSG_COUNT =>                   X_MSG_COUNT
842           , X_MSG_DATA =>                    X_MSG_DATA
843           , X_RETURN_STATUS =>               X_RETURN_STATUS
844           );
845 
846       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
847          ASO_UTILITY_PVT.HANDLE_EXCEPTIONS (
848              P_API_NAME =>                   L_API_NAME
849           , P_PKG_NAME =>                    G_PKG_NAME
850           , P_EXCEPTION_LEVEL =>             FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
851           , P_PACKAGE_TYPE =>                ASO_UTILITY_PVT.G_PVT
852           , X_MSG_COUNT =>                   X_MSG_COUNT
853           , X_MSG_DATA =>                    X_MSG_DATA
854           , X_RETURN_STATUS =>               X_RETURN_STATUS
855           );
856 
857       WHEN OTHERS THEN
858          ASO_UTILITY_PVT.HANDLE_EXCEPTIONS (
859              P_API_NAME =>                   L_API_NAME
860           , P_PKG_NAME =>                    G_PKG_NAME
861           , P_SQLCODE =>                     SQLCODE
862           , P_SQLERRM =>                     SQLERRM
863           , P_EXCEPTION_LEVEL =>             ASO_UTILITY_PVT.G_EXC_OTHERS
864           , P_PACKAGE_TYPE =>                ASO_UTILITY_PVT.G_PVT
865           , X_MSG_COUNT =>                   X_MSG_COUNT
866           , X_MSG_DATA =>                    X_MSG_DATA
867           , X_RETURN_STATUS =>               X_RETURN_STATUS
868           );
869 
870    END Copy_Quote;
871 
872 
873    PROCEDURE Copy_Header_Rows (
874        P_Api_Version_Number IN NUMBER
875     , P_Init_Msg_List IN VARCHAR2 := FND_API.G_FALSE
876     , P_Commit IN VARCHAR2 := FND_API.G_FALSE
877     , P_Qte_Header_Rec IN ASO_QUOTE_PUB.qte_header_rec_Type
878     , P_Copy_Quote_Control_Rec IN ASO_COPY_QUOTE_PUB.Copy_Quote_Control_Rec_Type
879     , X_Qte_Header_Id OUT NOCOPY /* file.sql.39 change */   NUMBER
880     , X_Price_Index_Link_Tbl OUT NOCOPY /* file.sql.39 change */   ASO_QUOTE_HEADERS_PVT.Index_Link_Tbl_Type
881     , X_Return_Status OUT NOCOPY /* file.sql.39 change */   VARCHAR2
882     , X_Msg_Count OUT NOCOPY /* file.sql.39 change */   NUMBER
883     , X_Msg_Data OUT NOCOPY /* file.sql.39 change */   VARCHAR2
884     ) IS
885 
886       l_qte_header_id NUMBER := P_qte_Header_Rec.quote_header_id;
887       l_old_qte_header_id NUMBER := P_qte_Header_Rec.quote_header_id;
888       l_qte_header_rec ASO_QUOTE_PUB.Qte_Header_Rec_Type := P_qte_Header_Rec;
889       l_payment_tbl ASO_QUOTE_PUB.Payment_Tbl_Type;
890       l_shipment_tbl ASO_QUOTE_PUB.Shipment_Tbl_Type;
891       l_shipment_rec ASO_QUOTE_PUB.Shipment_Rec_Type;
892       l_freight_charge_tbl ASO_QUOTE_PUB.Freight_Charge_Tbl_Type;
893       l_tax_detail_tbl ASO_QUOTE_PUB.Tax_Detail_Tbl_Type;
894       l_Price_Attr_Tbl ASO_QUOTE_PUB.Price_Attributes_Tbl_Type;
895       l_Price_Adj_Tbl ASO_QUOTE_PUB.Price_Adj_Tbl_Type;
896       l_Price_Adj_Attr_Tbl ASO_QUOTE_PUB.Price_Adj_Attr_Tbl_Type;
897       lx_hd_Price_Adj_Tbl ASO_QUOTE_PUB.Price_Adj_Tbl_Type;
898       l_control_rec ASO_QUOTE_PUB.Control_Rec_Type;
899       X_hd_Attr_Ext_Tbl ASO_QUOTE_PUB.Line_Attribs_Ext_Tbl_Type;
900       X_Sales_Credit_Tbl ASO_QUOTE_PUB.Sales_Credit_Tbl_Type;
901       X_Quote_Party_Tbl ASO_QUOTE_PUB.Quote_Party_Tbl_Type;
902       l_hd_Attr_Ext_Tbl ASO_QUOTE_PUB.Line_Attribs_Ext_Tbl_Type;
903       l_quote_party_tbl ASO_QUOTE_PUB.Quote_Party_Tbl_Type;
904       l_quote_party_rec ASO_QUOTE_PUB.Quote_Party_rec_Type;
905       l_sales_credit_tbl ASO_QUOTE_PUB.Sales_Credit_Tbl_Type;
906       l_sales_credit_rec ASO_QUOTE_PUB.Sales_Credit_rec_Type;
907       l_Line_Attr_Ext_Tbl ASO_QUOTE_PUB.Line_Attribs_Ext_Tbl_Type;
908       l_api_version CONSTANT NUMBER := 1.0;
909       l_return_status VARCHAR2 ( 1 );
910       l_api_name CONSTANT VARCHAR2 ( 30 ) := 'Copy_Header_Rows';
911       l_api_version_number CONSTANT NUMBER := 1.0;
912 
913 
914       l_qte_header_rec_out ASO_QUOTE_PUB.Qte_Header_Rec_Type;
915       l_Price_Attr_Tbl_out ASO_QUOTE_PUB.Price_Attributes_Tbl_Type;
916 	 l_Price_Adj_Attr_Tbl_out ASO_QUOTE_PUB.Price_Adj_Attr_Tbl_Type;
917 	 l_freight_charge_tbl_out ASO_QUOTE_PUB.Freight_Charge_Tbl_Type;
918 	 l_tax_detail_tbl_out ASO_QUOTE_PUB.Tax_Detail_Tbl_Type;
919       l_payment_tbl_out ASO_QUOTE_PUB.Payment_Tbl_Type;
920 
921       l_old_qte_num                   NUMBER;
922       l_sequence                      NUMBER := null;
923       l_sales_team_prof               VARCHAR2(30) := FND_PROFILE.value('ASO_AUTO_TEAM_ASSIGN');
924 
925 	 --BC4J Fix
926       l_dup_Price_Adj_Tbl ASO_QUOTE_PUB.Price_Adj_Tbl_Type;
927 
928       CURSOR C_Get_Sales_Team (l_qte_num NUMBER) IS
929        SELECT RESOURCE_ID,
930               RESOURCE_GRP_ID,
931               REQUEST_ID,
932               PROGRAM_APPLICATION_ID,
933               PROGRAM_ID,
934               PROGRAM_UPDATE_DATE,
935               KEEP_FLAG,
936               UPDATE_ACCESS_FLAG,
937               CREATED_BY_TAP_FLAG,
938               TERRITORY_ID,
939               TERRITORY_SOURCE_FLAG,
940               ROLE_ID,
941               ATTRIBUTE_CATEGORY,
942               ATTRIBUTE1,
943               ATTRIBUTE2,
944               ATTRIBUTE3,
945               ATTRIBUTE4,
946               ATTRIBUTE5,
947               ATTRIBUTE6,
948               ATTRIBUTE7,
949               ATTRIBUTE8,
950               ATTRIBUTE9,
951               ATTRIBUTE10,
952               ATTRIBUTE11,
953               ATTRIBUTE12,
954               ATTRIBUTE13,
955               ATTRIBUTE14,
956               ATTRIBUTE15,
957 		    ATTRIBUTE16,
958 		    ATTRIBUTE17,
959 		    ATTRIBUTE18,
960 		    ATTRIBUTE19,
961 		    ATTRIBUTE20,
962 		    OBJECT_VERSION_NUMBER
963        FROM ASO_QUOTE_ACCESSES
964        WHERE QUOTE_NUMBER = l_qte_num;
965 
966       CURSOR C_Get_Old_Qte (l_hdr_id NUMBER) IS
967        SELECT Quote_Number
968        FROM ASO_QUOTE_HEADERS_ALL
969        WHERE QUote_Header_Id = l_hdr_id;
970 
971 	 l_qte_access_tbl    aso_quote_pub.qte_access_tbl_type  := aso_quote_pub.g_miss_qte_access_tbl;
972 	 x_qte_access_tbl    aso_quote_pub.qte_access_tbl_type;
973 
974 
975    BEGIN
976 
977       -- Standard Start of API savepoint
978       SAVEPOINT COPY_HEADER_ROWS_PVT;
979 
980       -- Standard call to check for call compatibility.
981       IF NOT FND_API.Compatible_API_Call (
982                  l_api_version_number
983               , p_api_version_number
984               , l_api_name
985               , G_PKG_NAME
986               ) THEN
987          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
988       END IF;
989 
990       -- Initialize message list if p_init_msg_list is set to TRUE.
991       IF FND_API.to_Boolean ( p_init_msg_list ) THEN
992          FND_MSG_PUB.initialize;
993       END IF;
994 
995       -- Debug Message
996       IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW ) THEN
997          FND_MESSAGE.Set_Name ('ASO' , 'Copy Quote Header API: Start' );
998          FND_MSG_PUB.ADD;
999       END IF;
1000 
1001       --  Initialize API return status to success
1002       l_return_status            := FND_API.G_RET_STS_SUCCESS;
1003 
1004       --
1005       -- API body
1006       --
1007 
1008       l_price_adj_tbl            :=
1009             ASO_UTILITY_PVT.Query_Price_Adj_Rows (
1010                 p_qte_header_id =>              l_qte_header_id
1011              , p_qte_line_id =>                 NULL
1012              );
1013 
1014       l_dup_Price_Adj_Tbl := l_price_adj_tbl;
1015 
1016       l_price_adj_attr_tbl       :=
1017             ASO_UTILITY_PVT.Query_Price_Adj_Attr_Rows (
1018                 p_price_adj_tbl =>              l_price_adj_tbl
1019              );
1020 
1021       l_price_attr_tbl           :=
1022             ASO_UTILITY_PVT.Query_Price_Attr_Rows (
1023                 p_qte_header_id =>              l_qte_header_id
1024              , p_qte_line_id =>                 NULL
1025              );
1026 
1027       /* l_payment_tbl              :=
1028             ASO_UTILITY_PVT.Query_Payment_Rows (
1029                 p_qte_header_id =>              l_qte_header_id
1030              , p_qte_line_id =>                 NULL
1031              ); */
1032 
1033       IF aso_debug_pub.g_debug_flag = 'Y' THEN
1034 	 aso_debug_pub.ADD ( 'Copy_Rows - payment_tbl.count: ' || TO_CHAR ( l_payment_tbl.COUNT ) , 1 , 'N' );
1035 	 END IF;
1036 
1037       l_tax_detail_tbl           :=
1038             ASO_UTILITY_PVT.Query_Tax_Detail_Rows (
1039                 p_qte_header_id =>              l_qte_header_id
1040              , p_qte_line_id =>                 NULL
1041              , p_shipment_tbl =>                ASO_QUOTE_PUB.g_miss_shipment_tbl
1042              );
1043       IF aso_debug_pub.g_debug_flag = 'Y' THEN
1044 	 aso_debug_pub.ADD ( 'Copy_Rows - tax_dtl_tbl.count: ' || TO_CHAR ( l_tax_detail_tbl.COUNT ) , 1 , 'N' );
1045 	 END IF;
1046 
1047       l_shipment_tbl             :=
1048             ASO_UTILITY_PVT.Query_Shipment_Rows (
1049                 p_qte_header_id =>              l_qte_header_id
1050              , p_qte_line_id =>                 NULL
1051              );
1052       IF aso_debug_pub.g_debug_flag = 'Y' THEN
1053 	 aso_debug_pub.ADD ( 'Copy_Rows - shipment_tbl.count: ' || TO_CHAR ( l_shipment_tbl.COUNT ) , 1 , 'N' );
1054 	 END IF;
1055 
1056       l_freight_charge_tbl       :=
1057             ASO_UTILITY_PVT.Query_Freight_Charge_Rows (
1058                 P_Shipment_Tbl =>               l_shipment_tbl
1059              );
1060 
1061       l_Line_Attr_Ext_Tbl        :=
1062             ASO_UTILITY_PVT.Query_Line_Attribs_header_Rows (
1063                 P_Qte_header_Id =>              l_qte_header_id
1064              );
1065 
1066       l_sales_credit_tbl         :=
1067             ASO_UTILITY_PVT.Query_Sales_Credit_Row (
1068                 P_qte_header_Id =>              l_qte_header_id
1069              , P_qte_line_id =>                 NULL
1070              );
1071 
1072       l_quote_party_tbl          :=
1073             ASO_UTILITY_PVT.Query_Quote_Party_Row (
1074                 P_Qte_header_Id =>              l_qte_header_id
1075              , P_qte_line_id =>                 NULL
1076              );
1077 
1078       IF P_Copy_Quote_Control_Rec.Copy_Header_Only = FND_API.G_TRUE THEN
1079          l_qte_header_rec.TOTAL_LIST_PRICE := NULL;
1080          l_qte_header_rec.TOTAL_ADJUSTED_AMOUNT := NULL;
1081          l_qte_header_rec.TOTAL_ADJUSTED_PERCENT := NULL;
1082          l_qte_header_rec.TOTAL_TAX := NULL;
1083          l_qte_header_rec.TOTAL_SHIPPING_CHARGE := NULL;
1084          l_qte_header_rec.SURCHARGE := NULL;
1085          l_qte_header_rec.TOTAL_QUOTE_PRICE := NULL;
1086          l_qte_header_rec.PAYMENT_AMOUNT := NULL;
1087          l_qte_header_rec.ORDERED_DATE := NULL;
1088       END IF;
1089 
1090       l_qte_header_rec.PUBLISH_FLAG := NULL;
1091       l_qte_header_rec.ORDER_ID  := NULL;
1092       l_qte_header_rec.ORDER_NUMBER := NULL;
1093       l_qte_header_rec.quote_header_id := NULL;
1094       l_qte_header_rec.price_updated_date := NULL;
1095 	 l_qte_header_rec.tax_updated_date := NULL;
1096       l_qte_header_rec.price_request_id := NULL;
1097       l_qte_header_rec.price_frozen_date := NULL;
1098 
1099 -- hyang new okc
1100     l_qte_header_rec.Customer_Name_And_Title := NULL;
1101     l_qte_header_rec.Customer_Signature_Date := NULL;
1102     l_qte_header_rec.Supplier_Name_And_Title := NULL;
1103     l_qte_header_rec.Supplier_Signature_Date := NULL;
1104 -- end of hyang new okc
1105 
1106    -- bug 5159758
1107         IF ( P_Copy_Quote_Control_Rec.New_Version = FND_API.G_FALSE ) THEN
1108             l_qte_header_rec.ASSISTANCE_REQUESTED := null;
1109             l_qte_header_rec.ASSISTANCE_REASON_CODE := null;
1110             IF aso_debug_pub.g_debug_flag = 'Y' THEN
1111 	          aso_debug_pub.ADD ( 'Copy_Rows - Nulled out the ASSISTANCE_REQUESTED and ASSISTANCE_REASON_CODE' , 1 , 'N' );
1112 	       END IF;
1113         END IF;
1114 
1115 
1116 
1117 --BC4J Primary Key Fix
1118 
1119 
1120                FOR j IN 1 .. l_price_adj_tbl.COUNT LOOP
1121                   l_price_adj_tbl ( j ).price_adjustment_id := null;
1122                   l_price_adj_tbl ( j ).object_version_number := FND_API.G_MISS_NUM;
1123 			END LOOP;
1124 
1125                FOR j IN 1 .. l_price_adj_attr_tbl.COUNT LOOP
1126                   l_price_adj_attr_tbl(j).price_adj_attrib_id := null;
1127                   l_price_adj_attr_tbl(j).object_version_number := FND_API.G_MISS_NUM;
1128 			END LOOP;
1129 
1130                FOR j IN 1 .. l_price_attr_tbl.COUNT LOOP
1131                   l_price_attr_tbl ( j ).price_attribute_id := null;
1132                   l_price_attr_tbl ( j ).object_version_number := FND_API.G_MISS_NUM;
1133 			END LOOP;
1134 
1135                /*
1136                FOR j IN 1 .. l_payment_tbl.COUNT LOOP
1137                   l_payment_tbl ( j ).CREDIT_CARD_APPROVAL_CODE := NULL;
1138                   l_payment_tbl ( j ).CREDIT_CARD_APPROVAL_DATE := NULL;
1139                   l_payment_tbl ( j ).payment_id := NULL;
1140                   l_payment_tbl ( j ).object_version_number := FND_API.G_MISS_NUM;
1141 			END LOOP; */
1142 
1143                FOR j IN 1 .. l_shipment_tbl.COUNT LOOP
1144                   l_shipment_tbl ( j ).shipment_id := null;
1145                   l_shipment_tbl ( j ).object_version_number := FND_API.G_MISS_NUM;
1146 			END LOOP;
1147 
1148                FOR j IN 1 .. l_sales_credit_tbl.COUNT LOOP
1149                   l_sales_credit_tbl(j).sales_credit_id := null;
1150 			   l_sales_credit_tbl(j).object_version_number := FND_API.G_MISS_NUM;
1151                END LOOP;
1152 
1153                FOR j IN 1 .. l_quote_party_tbl.COUNT LOOP
1154                   l_quote_party_tbl(j).QUOTE_PARTY_ID  := null;
1155                   l_quote_party_tbl(j).object_version_number := FND_API.G_MISS_NUM;
1156 			END LOOP;
1157 
1158                FOR j IN 1 .. l_tax_detail_tbl.COUNT LOOP
1159                   l_tax_detail_tbl(j).tax_detail_id  := null;
1160                   l_tax_detail_tbl(j).object_version_number := FND_API.G_MISS_NUM;
1161 			END LOOP;
1162 
1163                FOR j IN 1 .. l_Line_Attr_Ext_Tbl.COUNT LOOP
1164                   l_Line_Attr_Ext_Tbl(j).line_attribute_id  := null;
1165                   l_Line_Attr_Ext_Tbl(j).object_version_number := FND_API.G_MISS_NUM;
1166 			END LOOP;
1167 
1168 			l_qte_header_rec.object_version_number := FND_API.G_MISS_NUM;
1169 
1170        --End of BC4J Primary Key Fix
1171 
1172       ASO_QUOTE_HEADERS_PVT.Insert_Rows (
1173           p_qte_header_rec =>             l_qte_header_rec
1174        , p_Price_Attributes_Tbl =>        l_price_attr_tbl
1175        , P_Price_Adjustment_Tbl =>        l_price_adj_tbl
1176        , P_Price_Adj_Attr_Tbl =>          l_price_adj_attr_tbl
1177        , P_Payment_Tbl =>                 l_payment_tbl
1178        , P_Shipment_Tbl =>                l_shipment_tbl
1179        , P_Freight_Charge_Tbl =>          l_freight_charge_tbl
1180        , P_Tax_Detail_Tbl =>              l_tax_detail_tbl
1181        , P_hd_Attr_Ext_Tbl =>             l_Line_Attr_Ext_Tbl
1182        , P_Sales_Credit_Tbl =>            l_sales_credit_tbl
1183        , P_Quote_Party_Tbl =>             l_Quote_Party_Tbl
1184        , P_qte_access_Tbl =>              l_qte_access_tbl
1185 	  , x_qte_header_rec =>              l_qte_header_rec_out
1186        , x_Price_Attributes_Tbl =>        l_price_attr_tbl_out
1187        , x_Price_Adjustment_Tbl =>        lx_hd_Price_Adj_Tbl
1188        , x_Price_Adj_Attr_Tbl =>          l_price_adj_attr_tbl_out
1189        , x_Payment_Tbl =>                 l_payment_tbl_out
1190        , x_Shipment_Rec =>                l_shipment_rec
1191        , x_Freight_Charge_Tbl =>          l_freight_charge_tbl_out
1192        , x_Tax_Detail_Tbl =>              l_tax_detail_tbl_out
1193        , x_hd_Attr_Ext_Tbl =>             x_hd_Attr_Ext_Tbl
1194        , x_sales_credit_tbl =>            x_sales_credit_tbl
1195        , x_quote_party_tbl =>             x_quote_party_tbl
1196        , x_qte_access_Tbl =>              x_qte_access_tbl
1197        , X_Return_Status =>               l_return_status
1198        , X_Msg_Count =>                   x_msg_count
1199        , X_Msg_Data =>                    x_msg_data
1200        );
1201 
1202 
1203 
1204       l_qte_header_rec :=l_qte_header_rec_out ;
1205       l_Price_Attr_Tbl := l_Price_Attr_Tbl_out ;
1206       l_Price_Adj_Attr_Tbl := l_Price_Adj_Attr_Tbl_out ;
1207       l_freight_charge_tbl :=l_freight_charge_tbl_out ;
1208       l_tax_detail_tbl := l_tax_detail_tbl_out ;
1209 	 l_payment_tbl := l_payment_tbl_out;
1210 
1211 
1212 	 IF aso_debug_pub.g_debug_flag = 'Y' THEN
1213 	 aso_debug_pub.ADD ( 'Copy_Rows - After insert_rows - status: ' || l_return_status , 1 , 'Y' );
1214 	 END IF;
1215 
1216       IF ( l_return_status = FND_API.G_RET_STS_UNEXP_ERROR ) THEN
1217          x_return_status            := FND_API.G_RET_STS_UNEXP_ERROR;
1218          IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
1219             FND_MESSAGE.Set_Name ('ASO' , 'ASO_API_UNEXP_ERROR' );
1220             FND_MESSAGE.Set_Token ( 'ROW' , 'ASO_COPYHEADER AFTER_INSERT' , TRUE );
1221             FND_MSG_PUB.ADD;
1222          END IF;
1223          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1224       ELSIF ( l_return_status = FND_API.G_RET_STS_ERROR ) THEN
1225          x_return_status            := FND_API.G_RET_STS_ERROR;
1226          RAISE FND_API.G_EXC_ERROR;
1227       END IF;
1228 
1229       x_qte_header_id            := l_qte_header_rec.quote_header_id;
1230 
1231       -- Copy the header payment record
1232        l_payment_tbl := ASO_UTILITY_PVT.Query_Payment_Rows(p_qte_header_id =>l_qte_header_id,p_qte_line_id =>NULL);
1233 
1234     IF l_payment_tbl.count > 0 then
1235 
1236        FOR j IN 1 .. l_payment_tbl.COUNT LOOP
1237           l_payment_tbl ( j ).quote_header_id := l_qte_header_rec.quote_header_id;
1238 		l_payment_tbl ( j ).CREDIT_CARD_APPROVAL_CODE := NULL;
1239           l_payment_tbl ( j ).CREDIT_CARD_APPROVAL_DATE := NULL;
1240           l_payment_tbl ( j ).payment_id := NULL;
1241           l_payment_tbl ( j ).object_version_number := FND_API.G_MISS_NUM;
1242        END LOOP;
1243 
1244        IF aso_debug_pub.g_debug_flag = 'Y' THEN
1245           aso_debug_pub.add('Copy_Header: Before  call to copy_payment_row ', 1, 'Y');
1246        END IF;
1247 
1248          aso_copy_quote_pvt.copy_payment_row(p_payment_rec => l_payment_tbl(1)  ,
1249                                              x_return_status => l_return_status,
1250                                              x_msg_count     => x_msg_count,
1251                                              x_msg_data      => x_msg_data);
1252 
1253        IF aso_debug_pub.g_debug_flag = 'Y' THEN
1254           aso_debug_pub.add('Copy_Header: After call to copy_payment_row: x_return_status: '||l_return_status, 1, 'Y');
1255        END IF;
1256       IF ( l_return_status = FND_API.G_RET_STS_UNEXP_ERROR ) THEN
1257          x_return_status            := FND_API.G_RET_STS_UNEXP_ERROR;
1258          IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
1259             FND_MESSAGE.Set_Name ('ASO' , 'ASO_API_UNEXP_ERROR' );
1260             FND_MESSAGE.Set_Token ( 'ROW' , 'ASO_COPYHEADER AFTER_INSERT' , TRUE );
1261             FND_MSG_PUB.ADD;
1262          END IF;
1263          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1264       ELSIF ( l_return_status = FND_API.G_RET_STS_ERROR ) THEN
1265          x_return_status            := FND_API.G_RET_STS_ERROR;
1266          RAISE FND_API.G_EXC_ERROR;
1267       END IF;
1268 
1269    END IF;
1270 
1271      -- End Copy payment record
1272 
1273       -- Copy Notes,Task and Attachment related to quote header only if the control_rec flag is set
1274       IF P_Copy_Quote_Control_Rec.Copy_Note = FND_API.G_TRUE THEN
1275 
1276 	  -- Checking the new version flag, if new version then creating reference otherwise creating new note
1277 	  -- see bug3805575 for more details
1278 
1279 	  IF P_Copy_Quote_Control_Rec.New_Version = FND_API.G_TRUE THEN
1280 
1281 	    IF aso_debug_pub.g_debug_flag = 'Y' THEN
1282 	    aso_debug_pub.ADD ( 'Copy_Rows - Begin- before copy_notes-l_old_qte_header_id ' || l_old_qte_header_id , 1 , 'N' );
1283 	    aso_debug_pub.ADD ( 'Copy_Rows - Begin- before copy_notes-x_qte_header_id ' || x_qte_header_id , 1 , 'N' );
1284          aso_debug_pub.ADD ('Copy_Rows - Begin- before copy_notes ' , 1, 'N' );
1285 	    aso_debug_pub.ADD ('Copy_Rows - Begin- creating new reference for note ' , 1, 'N' );
1286 	    END IF;
1287 
1288          ASO_NOTES_INT.COPY_NOTES (
1289              p_api_version =>                l_api_version
1290           , p_init_msg_list =>               FND_API.G_FALSE
1291           , p_commit =>                      FND_API.G_FALSE
1292           , x_return_status =>               l_return_status
1293           , x_msg_count =>                   x_msg_count
1294           , x_msg_data =>                    x_msg_data
1295           , p_old_object_id =>               l_old_qte_header_id
1296           , p_new_object_id =>               x_qte_header_id
1297           , p_old_object_type_code =>        'ASO_QUOTE'
1298           , p_new_object_type_code =>        'ASO_QUOTE'
1299           );
1300          IF aso_debug_pub.g_debug_flag = 'Y' THEN
1301 	    aso_debug_pub.ADD ( 'Copy_Rows - after copy_notes status' || l_return_status , 1 , 'Y' );
1302 	    END IF;
1303 
1304          IF ( l_return_status = FND_API.G_RET_STS_UNEXP_ERROR ) THEN
1305             x_return_status            := FND_API.G_RET_STS_UNEXP_ERROR;
1306             IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
1307                FND_MESSAGE.Set_Name ('ASO' , 'ASO_API_UNEXP_ERROR' );
1308                FND_MESSAGE.Set_Token ( 'ROW' , 'ASO_COPYHEADER AFTER_NOTES' , TRUE );
1309                FND_MSG_PUB.ADD;
1310             END IF;
1311             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1312          ELSIF ( l_return_status = FND_API.G_RET_STS_ERROR ) THEN
1313             x_return_status            := FND_API.G_RET_STS_ERROR;
1314             RAISE FND_API.G_EXC_ERROR;
1315          END IF;
1316 
1317        ELSE  -- this means new quote is being created
1318 	    IF aso_debug_pub.g_debug_flag = 'Y' THEN
1319          aso_debug_pub.ADD ('Copy_Rows - Begin- creating new note ' , 1, 'N' );
1320          END IF;
1321          ASO_NOTES_INT.Copy_Notes_copy_quote (
1322             p_api_version =>                l_api_version
1323           , p_init_msg_list =>               FND_API.G_FALSE
1324           , p_commit =>                      FND_API.G_FALSE
1325           , p_old_object_id =>               l_old_qte_header_id
1326           , p_new_object_id =>               x_qte_header_id
1327           , p_old_object_type_code =>        'ASO_QUOTE'
1328           , p_new_object_type_code =>        'ASO_QUOTE'
1329           , x_return_status =>               l_return_status
1330           , x_msg_count =>                   x_msg_count
1331           , x_msg_data =>                    x_msg_data
1332           );
1333          IF aso_debug_pub.g_debug_flag = 'Y' THEN
1334          aso_debug_pub.ADD ( 'Copy_Rows - after Copy_Notes_copy_quote  status' || l_return_status , 1 , 'Y' );
1335          END IF;
1336 
1337          IF ( l_return_status = FND_API.G_RET_STS_UNEXP_ERROR ) THEN
1338             x_return_status            := FND_API.G_RET_STS_UNEXP_ERROR;
1339             IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
1340                FND_MESSAGE.Set_Name ('ASO' , 'ASO_API_UNEXP_ERROR' );
1341                FND_MESSAGE.Set_Token ( 'ROW' , 'ASO_COPYHEADER AFTER_NOTES' , TRUE );
1342                FND_MSG_PUB.ADD;
1343             END IF;
1344             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1345          ELSIF ( l_return_status = FND_API.G_RET_STS_ERROR ) THEN
1346             x_return_status            := FND_API.G_RET_STS_ERROR;
1347             RAISE FND_API.G_EXC_ERROR;
1348          END IF;
1349 
1350 	  END IF; -- end if for new version flag
1351 
1352       END IF;  -- end if for copy notes flag
1353 
1354       IF P_Copy_Quote_Control_Rec.Copy_Task = FND_API.G_TRUE THEN
1355          IF aso_debug_pub.g_debug_flag = 'Y' THEN
1356 	    aso_debug_pub.ADD ('Copy_Rows - Begin- before copy_tasks ' , 1, 'Y' );
1357 	    END IF;
1358 
1359          ASO_TASK_INT.COPY_TASKS (
1360              p_api_version =>                l_api_version
1361           , p_init_msg_list =>               FND_API.G_FALSE
1362           , p_commit =>                      FND_API.G_FALSE
1363           , x_return_status =>               l_return_status
1364           , x_msg_count =>                   x_msg_count
1365           , x_msg_data =>                    x_msg_data
1366           , p_old_object_id =>               l_old_qte_header_id
1367           , p_new_object_id =>               x_qte_header_id
1368           , p_old_object_type_code =>        'ASO_QUOTE'
1369           , p_new_object_type_code =>        'ASO_QUOTE'
1370           , p_new_object_name =>                l_qte_header_rec.quote_number
1371                                              || FND_GLOBAL.local_chr ( 45 )
1372                                              || l_qte_header_rec.quote_version ,
1373 		p_quote_version_flag  =>          P_Copy_Quote_Control_Rec.New_Version
1374           );
1375          IF aso_debug_pub.g_debug_flag = 'Y' THEN
1376 	    aso_debug_pub.ADD ( 'Copy_Rows - after  copy_tasks status' || l_return_status , 1 , 'Y' );
1377 	    END IF;
1378 
1379          IF ( l_return_status = FND_API.G_RET_STS_UNEXP_ERROR ) THEN
1380             x_return_status            := FND_API.G_RET_STS_UNEXP_ERROR;
1381             IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
1382                FND_MESSAGE.Set_Name ('ASO' , 'ASO_API_UNEXP_ERROR' );
1383                FND_MESSAGE.Set_Token ( 'ROW' , 'ASO_COPYHEADER AFTER_TASKS' , TRUE );
1384                FND_MSG_PUB.ADD;
1385             END IF;
1386             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1387          ELSIF ( l_return_status = FND_API.G_RET_STS_ERROR ) THEN
1388             x_return_status            := FND_API.G_RET_STS_ERROR;
1389             RAISE FND_API.G_EXC_ERROR;
1390          END IF;
1391 
1392       END IF;
1393 
1394       IF P_Copy_Quote_Control_Rec.Copy_Attachment = FND_API.G_TRUE THEN
1395          IF aso_debug_pub.g_debug_flag = 'Y' THEN
1396 	    aso_debug_pub.ADD ( 'Copy_Rows - Begin- before copy_attch  ' , 1 , 'Y' );
1397 	    END IF;
1398 
1399          ASO_ATTACHMENT_INT.COPY_ATTACHMENTS(
1400             p_api_version         =>  l_api_version,
1401             p_old_object_code     => 'ASO_QUOTE_HEADERS_ALL',
1402             p_new_object_code     => 'ASO_QUOTE_HEADERS_ALL',
1403             p_old_object_id       =>  l_old_qte_header_id,
1404             p_new_object_id       =>  x_qte_header_id,
1405             x_return_status       =>  l_return_status,
1406             x_msg_count           =>  x_msg_count,
1407             x_msg_data            =>  x_msg_data
1408           );
1409          IF aso_debug_pub.g_debug_flag = 'Y' THEN
1410 	    aso_debug_pub.ADD ( 'Copy_Rows -After copy_attch ' || l_return_status , 1 , 'Y' );
1411 	    END IF;
1412 
1413          IF ( l_return_status = FND_API.G_RET_STS_UNEXP_ERROR ) THEN
1414             x_return_status            := FND_API.G_RET_STS_UNEXP_ERROR;
1415             IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
1416                FND_MESSAGE.Set_Name ('ASO' , 'ASO_API_UNEXP_ERROR' );
1417                FND_MESSAGE.Set_Token ( 'ROW' , 'ASO_COPYHEADER AFTER_ATTACHMENTS' , TRUE );
1418                FND_MSG_PUB.ADD;
1419             END IF;
1420             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1421          ELSIF ( l_return_status = FND_API.G_RET_STS_ERROR ) THEN
1422             x_return_status            := FND_API.G_RET_STS_ERROR;
1423             RAISE FND_API.G_EXC_ERROR;
1424          END IF;
1425 
1426       END IF;
1427 
1428       FOR j IN 1 .. l_price_adj_tbl.COUNT LOOP
1429          IF aso_debug_pub.g_debug_flag = 'Y' THEN
1430 	    aso_debug_pub.ADD ( 'Copy_Header_Rows: lx_hd_price_adj_tbl(j).price_adjustment_id' || lx_hd_price_adj_tbl ( j ).price_adjustment_id , 1 , 'Y' );
1431 	    END IF;
1432 
1433          X_Price_Index_Link_Tbl ( l_dup_price_adj_tbl ( j ).price_adjustment_id ) :=
1434                                 lx_hd_price_adj_tbl ( j ).price_adjustment_id;
1435       END LOOP;
1436 
1437 -- Requirement CPQ-5
1438 
1439       IF P_Copy_Quote_Control_Rec.New_Version = FND_API.G_FALSE THEN
1440          -- security changes
1441 
1442          IF aso_debug_pub.g_debug_flag = 'Y' THEN
1443 	    aso_debug_pub.ADD ( 'Copy_Quote: value of ASO_API_ENABLE_SECURITY: ' || FND_PROFILE.VALUE ('ASO_API_ENABLE_SECURITY' ) , 1 , 'Y' );
1444 	    END IF;
1445 
1446 	    l_qte_header_rec.batch_price_flag := FND_API.G_FALSE;
1447 
1448 	    IF NVL ( FND_PROFILE.VALUE ('ASO_API_ENABLE_SECURITY' ), 'N' ) = 'Y' THEN
1449 
1450               IF aso_debug_pub.g_debug_flag = 'Y' THEN
1451                 aso_debug_pub.ADD ( 'Copy_Quote: Sales_Team: l_sales_team_prof: ' || l_sales_team_prof , 1 , 'N' );
1452               END IF;
1453             IF l_sales_team_prof = 'FULL' OR l_sales_team_prof = 'PARTIAL' THEN
1454 
1455               OPEN C_Get_Old_Qte (l_old_qte_header_id);
1456               FETCH C_Get_Old_Qte INTO l_old_qte_num;
1457               CLOSE C_Get_Old_Qte;
1458 
1459               IF aso_debug_pub.g_debug_flag = 'Y' THEN
1460                 aso_debug_pub.ADD ( 'Copy_Quote: Sales_Team: l_old_qte_num: ' || l_old_qte_num , 1 , 'N' );
1461               END IF;
1462               FOR C_Sales_Team_Rec IN C_Get_Sales_Team(l_old_qte_num) LOOP
1463                 IF aso_debug_pub.g_debug_flag = 'Y' THEN
1464                   aso_debug_pub.ADD ( 'Copy_Quote: Sales_Team: Add Res: Resource_Id: ' || C_Sales_Team_Rec.Resource_Id , 1 , 'N' );
1465                 END IF;
1466 			 l_sequence := NULL;
1467                 ASO_QUOTE_ACCESSES_PKG.Insert_Row(
1468                 px_ACCESS_ID             => l_sequence,
1469                 p_QUOTE_NUMBER           => l_qte_header_rec.Quote_Number,
1470                 p_RESOURCE_ID            => C_Sales_Team_Rec.Resource_Id,
1471                 p_RESOURCE_GRP_ID        => C_Sales_Team_Rec.Resource_Grp_Id,
1472                 p_CREATED_BY             => G_USER_ID,
1473                 p_CREATION_DATE          => SYSDATE,
1474                 p_LAST_UPDATED_BY        => G_USER_ID,
1475                 p_LAST_UPDATE_LOGIN      => G_LOGIN_ID,
1476                 p_LAST_UPDATE_DATE       => SYSDATE,
1477                 p_REQUEST_ID             => C_Sales_Team_Rec.Request_Id,
1478                 p_PROGRAM_APPLICATION_ID => C_Sales_Team_Rec.Program_Application_Id,
1479                 p_PROGRAM_ID             => C_Sales_Team_Rec.Program_Id,
1480                 p_PROGRAM_UPDATE_DATE    => C_Sales_Team_Rec.Program_Update_Date,
1481                 p_KEEP_FLAG              => C_Sales_Team_Rec.Keep_Flag,
1482                 p_UPDATE_ACCESS_FLAG     => C_Sales_Team_Rec.Update_Access_Flag,
1483                 p_CREATED_BY_TAP_FLAG    => C_Sales_Team_Rec.Created_By_Tap_Flag,
1484                 p_TERRITORY_ID           => C_Sales_Team_Rec.Territory_Id,
1485                 p_TERRITORY_SOURCE_FLAG  => C_Sales_Team_Rec.Territory_Source_Flag,
1486                 p_ROLE_ID                => C_Sales_Team_Rec.Role_Id,
1487                 p_ATTRIBUTE_CATEGORY     => C_Sales_Team_Rec.ATTRIBUTE_CATEGORY,
1488                 p_ATTRIBUTE1             => C_Sales_Team_Rec.ATTRIBUTE1,
1489                 p_ATTRIBUTE2             => C_Sales_Team_Rec.ATTRIBUTE2,
1490                 p_ATTRIBUTE3             => C_Sales_Team_Rec.ATTRIBUTE3,
1491                 p_ATTRIBUTE4             => C_Sales_Team_Rec.ATTRIBUTE4,
1492                 p_ATTRIBUTE5             => C_Sales_Team_Rec.ATTRIBUTE5,
1493                 p_ATTRIBUTE6             => C_Sales_Team_Rec.ATTRIBUTE6,
1494                 p_ATTRIBUTE7             => C_Sales_Team_Rec.ATTRIBUTE7,
1495                 p_ATTRIBUTE8             => C_Sales_Team_Rec.ATTRIBUTE8,
1496                 p_ATTRIBUTE9             => C_Sales_Team_Rec.ATTRIBUTE9,
1497                 p_ATTRIBUTE10            => C_Sales_Team_Rec.ATTRIBUTE10,
1498                 p_ATTRIBUTE11            => C_Sales_Team_Rec.ATTRIBUTE11,
1499                 p_ATTRIBUTE12            => C_Sales_Team_Rec.ATTRIBUTE12,
1500                 p_ATTRIBUTE13            => C_Sales_Team_Rec.ATTRIBUTE13,
1501                 p_ATTRIBUTE14            => C_Sales_Team_Rec.ATTRIBUTE14,
1502                 p_ATTRIBUTE15            => C_Sales_Team_Rec.ATTRIBUTE15,
1503 			 p_ATTRIBUTE16            => C_Sales_Team_Rec.ATTRIBUTE16,
1504 			 p_ATTRIBUTE17            => C_Sales_Team_Rec.ATTRIBUTE17,
1505 			 p_ATTRIBUTE18            => C_Sales_Team_Rec.ATTRIBUTE18,
1506 			 p_ATTRIBUTE19            => C_Sales_Team_Rec.ATTRIBUTE19,
1507 			 p_ATTRIBUTE20            => C_Sales_Team_Rec.ATTRIBUTE20,
1508 			 p_Object_Version_Number => C_Sales_Team_Rec.OBJECT_VERSION_NUMBER
1509                 );
1510 
1511               END LOOP;
1512 
1513             ELSE
1514               ASO_SECURITY_INT.Add_SalesRep_QuoteCreator (
1515                   p_init_msg_list =>              FND_API.G_FALSE
1516                , p_commit =>                      FND_API.G_FALSE
1517                , p_Qte_Header_Rec =>              l_qte_header_rec
1518                , x_return_status =>               x_return_status
1519                , x_msg_count =>                   x_msg_count
1520                , x_msg_data =>                    x_msg_data
1521                );
1522               IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1523                  RAISE FND_API.G_EXC_ERROR;
1524               END IF;
1525               IF aso_debug_pub.g_debug_flag = 'Y' THEN
1526                 aso_debug_pub.ADD ( 'Copy_Quote: After Add Salesrep: x_return_status: ' || x_return_status , 1 , 'N' );
1527               END IF;
1528             END IF; -- sales_team_prof
1529          END IF;
1530       -- end security changes
1531 
1532       END IF;
1533 
1534       x_return_status            := FND_API.G_RET_STS_SUCCESS;
1535 
1536       --
1537       -- End of API body
1538       --
1539 
1540       -- Standard check for p_commit
1541       IF FND_API.to_Boolean ( p_commit ) THEN
1542          COMMIT WORK;
1543       END IF;
1544 
1545       -- Standard call to get message count and if count is 1, get message info.
1546       FND_MSG_PUB.Count_And_Get (
1547           p_count =>                      x_msg_count
1548        , p_data =>                        x_msg_data
1549        );
1550 
1551    EXCEPTION
1552 
1553       WHEN FND_API.G_EXC_ERROR THEN
1554          ASO_UTILITY_PVT.HANDLE_EXCEPTIONS (
1555              P_API_NAME =>                   L_API_NAME
1556           , P_PKG_NAME =>                    G_PKG_NAME
1557           , P_EXCEPTION_LEVEL =>             FND_MSG_PUB.G_MSG_LVL_ERROR
1558           , P_PACKAGE_TYPE =>                ASO_UTILITY_PVT.G_PVT
1559           , X_MSG_COUNT =>                   X_MSG_COUNT
1560           , X_MSG_DATA =>                    X_MSG_DATA
1561           , X_RETURN_STATUS =>               X_RETURN_STATUS
1562           );
1563 
1564       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1565          ASO_UTILITY_PVT.HANDLE_EXCEPTIONS (
1566              P_API_NAME =>                   L_API_NAME
1567           , P_PKG_NAME =>                    G_PKG_NAME
1568           , P_EXCEPTION_LEVEL =>             FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
1569           , P_PACKAGE_TYPE =>                ASO_UTILITY_PVT.G_PVT
1570           , X_MSG_COUNT =>                   X_MSG_COUNT
1571           , X_MSG_DATA =>                    X_MSG_DATA
1572           , X_RETURN_STATUS =>               X_RETURN_STATUS
1573           );
1574 
1575       WHEN OTHERS THEN
1576          ASO_UTILITY_PVT.HANDLE_EXCEPTIONS (
1577              P_API_NAME =>                   L_API_NAME
1578           , P_PKG_NAME =>                    G_PKG_NAME
1579           , P_SQLCODE =>                     SQLCODE
1580           , P_SQLERRM =>                     SQLERRM
1581           , P_EXCEPTION_LEVEL =>             ASO_UTILITY_PVT.G_EXC_OTHERS
1582           , P_PACKAGE_TYPE =>                ASO_UTILITY_PVT.G_PVT
1583           , X_MSG_COUNT =>                   X_MSG_COUNT
1584           , X_MSG_DATA =>                    X_MSG_DATA
1585           , X_RETURN_STATUS =>               X_RETURN_STATUS
1586           );
1587 
1588    END Copy_Header_Rows;
1589 
1590 
1591    PROCEDURE Copy_Line_Rows (
1592        P_Api_Version_Number IN NUMBER
1593     , P_Init_Msg_List IN VARCHAR2 := FND_API.G_FALSE
1594     , P_Commit IN VARCHAR2 := FND_API.G_FALSE
1595     , P_Qte_Header_Id IN NUMBER
1596     , P_New_Qte_Header_Id IN NUMBER
1597     , P_Qte_Line_Id     IN   NUMBER   := FND_API.G_MISS_NUM
1598     , P_Price_Index_Link_Tbl IN ASO_QUOTE_HEADERS_PVT.Index_Link_Tbl_Type
1599     , P_Copy_Quote_Control_Rec IN ASO_COPY_QUOTE_PUB.Copy_Quote_Control_Rec_Type
1600     , P_Qte_Header_Rec         IN   ASO_QUOTE_PUB.Qte_Header_Rec_Type
1601     , P_Control_Rec            IN   ASO_QUOTE_PUB.Control_Rec_Type
1602     , X_Qte_Line_Id            OUT NOCOPY /* file.sql.39 change */    NUMBER
1603     , X_Return_Status OUT NOCOPY /* file.sql.39 change */   VARCHAR2
1604     , X_Msg_Count OUT NOCOPY /* file.sql.39 change */   NUMBER
1605     , X_Msg_Data OUT NOCOPY /* file.sql.39 change */   VARCHAR2
1606     ) IS
1607 
1608       CURSOR c_line_relation (
1609           x_quote_header_id NUMBER
1610        ) IS
1611          SELECT LINE_RELATIONSHIP_ID, CREATION_DATE, CREATED_BY
1612               , LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
1613               , REQUEST_ID, PROGRAM_APPLICATION_ID, PROGRAM_ID
1614               , PROGRAM_UPDATE_DATE, QUOTE_LINE_ID, RELATED_QUOTE_LINE_ID
1615               , RELATIONSHIP_TYPE_CODE, RECIPROCAL_FLAG, OBJECT_VERSION_NUMBER
1616          FROM   ASO_LINE_RELATIONSHIPS
1617          WHERE  quote_line_id IN ( SELECT quote_line_id
1618                                   FROM   aso_quote_lines_all
1619                                   WHERE  quote_header_id = x_quote_header_id )
1620          AND    relationship_type_code <> 'SERVICE';
1621 
1622       CURSOR c_price_adj_rel (
1623           x_quote_header_id NUMBER
1624        ) IS
1625          SELECT apr.ADJ_RELATIONSHIP_ID, apr.CREATION_DATE, apr.CREATED_BY
1626               , apr.LAST_UPDATE_DATE, apr.LAST_UPDATED_BY
1627               , apr.LAST_UPDATE_LOGIN, apr.PROGRAM_APPLICATION_ID
1628               , apr.PROGRAM_ID, apr.PROGRAM_UPDATE_DATE, apr.REQUEST_ID
1629               , apr.QUOTE_LINE_ID, apr.PRICE_ADJUSTMENT_ID
1630               , apr.RLTD_PRICE_ADJ_ID , apr.OBJECT_VERSION_NUMBER
1631          FROM   ASO_PRICE_ADJ_RELATIONSHIPS apr
1632               , ASO_PRICE_ADJUSTMENTS apa
1633          WHERE  apr.price_adjustment_id = apa.price_adjustment_id
1634          AND    apa.quote_header_id = x_quote_header_id
1635          AND    EXISTS (  SELECT 'x'
1636                          FROM   aso_quote_lines_all aql
1637                          WHERE  aql.quote_header_id = x_quote_header_id
1638                          AND    apr.quote_line_id = aql.quote_line_id );
1639 
1640       CURSOR C_Serviceable_Product (
1641           l_organization_id NUMBER
1642        , l_inv_item_id NUMBER
1643        ) IS
1644          SELECT serviceable_product_flag, service_item_flag
1645          FROM   MTL_SYSTEM_ITEMS_VL
1646          WHERE  inventory_item_id = l_inv_item_id
1647          AND    organization_id = l_organization_id;
1648 
1649 	 CURSOR C_Get_Ship_Id (
1650           lc_line_id NUMBER
1651        ) IS
1652          SELECT shipment_id
1653          FROM   ASO_SHIPMENTS
1654          WHERE  quote_line_id = lc_line_id;
1655 
1656       l_qte_line_rec ASO_QUOTE_PUB.Qte_Line_Rec_Type;
1657       l_qte_line_tbl ASO_QUOTE_PUB.Qte_Line_Tbl_Type;
1658       l_payment_tbl ASO_QUOTE_PUB.Payment_Tbl_Type;
1659       l_shipment_tbl ASO_QUOTE_PUB.Shipment_Tbl_Type;
1660       l_shipment_rec ASO_QUOTE_PUB.Shipment_Rec_Type;
1661       l_freight_charge_tbl ASO_QUOTE_PUB.Freight_Charge_Tbl_Type;
1662       l_tax_detail_tbl ASO_QUOTE_PUB.Tax_Detail_Tbl_Type;
1663       l_Price_Attr_Tbl ASO_QUOTE_PUB.Price_Attributes_Tbl_Type;
1664       l_Price_Adj_Tbl ASO_QUOTE_PUB.Price_Adj_Tbl_Type;
1665       l_Price_Adj_Attr_Tbl ASO_QUOTE_PUB.Price_Adj_Attr_Tbl_Type;
1666       l_qte_line_dtl_tbl ASO_QUOTE_PUB.Qte_Line_Dtl_Tbl_Type;
1667       l_Line_Attr_Ext_Tbl ASO_QUOTE_PUB.Line_Attribs_Ext_Tbl_Type;
1668       lx_ln_Price_Adj_Tbl ASO_QUOTE_PUB.Price_Adj_Tbl_Type;
1669       lx_qte_line_rec ASO_QUOTE_PUB.Qte_Line_Rec_Type;
1670       l_control_rec ASO_QUOTE_PUB.Control_Rec_Type;
1671       l_price_index_link_tbl ASO_QUOTE_HEADERS_PVT.Index_Link_Tbl_Type
1672                                                     := P_Price_Index_Link_Tbl;
1673       l_line_index_link_tbl ASO_QUOTE_HEADERS_PVT.Index_Link_Tbl_Type;
1674       l_qte_line_id NUMBER;
1675       l_index NUMBER;
1676       l_index_2 NUMBER;
1677       l_service_ref_line_id NUMBER;
1678       l_config_control_rec ASO_CFG_INT.Control_Rec_Type
1679                                             := ASO_CFG_INT.G_MISS_Control_Rec;
1680       l_old_config_header_id NUMBER;
1681       l_old_config_revision_num NUMBER;
1682       l_config_hdr_id NUMBER;
1683       l_config_rev_nbr NUMBER;
1684       LX_PRICE_ADJ_RLTSHIP_ID NUMBER;
1685       LX_LINE_RELATIONSHIP_ID NUMBER;
1686       X_hd_Attr_Ext_Tbl ASO_QUOTE_PUB.Line_Attribs_Ext_Tbl_Type;
1687       X_Sales_Credit_Tbl ASO_QUOTE_PUB.Sales_Credit_Tbl_Type;
1688       X_Quote_Party_Tbl ASO_QUOTE_PUB.Quote_Party_Tbl_Type;
1689       l_hd_Attr_Ext_Tbl ASO_QUOTE_PUB.Line_Attribs_Ext_Tbl_Type;
1690       l_quote_party_tbl ASO_QUOTE_PUB.Quote_Party_Tbl_Type;
1691       l_quote_party_rec ASO_QUOTE_PUB.Quote_Party_rec_Type;
1692       l_sales_credit_tbl ASO_QUOTE_PUB.Sales_Credit_Tbl_Type;
1693       l_sales_credit_rec ASO_QUOTE_PUB.Sales_Credit_rec_Type;
1694       l_api_version CONSTANT NUMBER := 1.0;
1695       l_api_name CONSTANT VARCHAR2 ( 30 ) := 'Copy_Line_Rows';
1696       l_service_item_flag VARCHAR2 ( 1 );
1697       l_serviceable_product_flag VARCHAR2 ( 1 );
1698       l_return_status VARCHAR2 ( 1 );
1699       l_api_version_number CONSTANT NUMBER := 1.0;
1700       G_USER_ID NUMBER := FND_GLOBAL.USER_ID;
1701       G_LOGIN_ID NUMBER := FND_GLOBAL.CONC_LOGIN_ID;
1702       l_ship_id NUMBER;
1703       l_orig_item_id_tbl CZ_API_PUB.number_tbl_type;
1704       l_new_item_id_tbl CZ_API_PUB.number_tbl_type;
1705       -- hyang: for bug 2692785
1706       lx_status                     VARCHAR2(1);
1707 
1708       l_dup_Price_Adj_Tbl ASO_QUOTE_PUB.Price_Adj_Tbl_Type;
1709 
1710   --- New Code added for Copy Quote Line Functionality
1711 
1712       CURSOR C_Validate_Quote_Line (
1713           x_qte_header_id NUMBER,
1714           x_qte_line_id NUMBER
1715        ) IS
1716          SELECT 'X'
1717          FROM   ASO_QUOTE_LINES_ALL
1718          WHERE  quote_header_id = x_qte_header_id
1719          AND quote_line_id = x_qte_line_id;
1720 
1721       CURSOR c_line_relation_from_line_id (
1722           x_quote_line_id NUMBER
1723        ) IS
1724          SELECT LINE_RELATIONSHIP_ID, CREATION_DATE, CREATED_BY
1725               , LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
1726               , REQUEST_ID, PROGRAM_APPLICATION_ID, PROGRAM_ID
1727               , PROGRAM_UPDATE_DATE, QUOTE_LINE_ID, RELATED_QUOTE_LINE_ID
1728               , RELATIONSHIP_TYPE_CODE, RECIPROCAL_FLAG, OBJECT_VERSION_NUMBER
1729          FROM   ASO_LINE_RELATIONSHIPS
1730          WHERE  relationship_type_code <> 'SERVICE'
1731 	    CONNECT BY PRIOR related_quote_line_id = quote_line_id
1732          START WITH quote_line_id = x_quote_line_id;
1733 
1734       CURSOR c_price_adj_rel_from_line_id (
1735             x_quote_line_id NUMBER
1736        ) IS
1737          SELECT apr.ADJ_RELATIONSHIP_ID, apr.CREATION_DATE, apr.CREATED_BY
1738               , apr.LAST_UPDATE_DATE, apr.LAST_UPDATED_BY
1739               , apr.LAST_UPDATE_LOGIN, apr.PROGRAM_APPLICATION_ID
1740               , apr.PROGRAM_ID, apr.PROGRAM_UPDATE_DATE, apr.REQUEST_ID
1741               , apr.QUOTE_LINE_ID, apr.PRICE_ADJUSTMENT_ID
1742               , apr.RLTD_PRICE_ADJ_ID
1743 		    , apr.OBJECT_VERSION_NUMBER
1744          FROM   ASO_PRICE_ADJ_RELATIONSHIPS apr
1745 		    , ASO_PRICE_ADJUSTMENTS apa
1746          WHERE  apr.price_adjustment_id = apa.price_adjustment_id
1747          AND    apr.quote_line_id = x_quote_line_id
1748          AND    apa.quote_line_id = x_quote_line_id
1749          AND    apa.modifier_line_type_code <> 'PRG';
1750 
1751          l_val varchar2(1);
1752 --    l_appl_param_rec   CZ_API_PUB.appl_param_rec_type;
1753          l_last_update_date   DATE;
1754          l_line_number        NUMBER;
1755 
1756 
1757     Cursor C_Get_quote(c_QUOTE_HEADER_ID Number) IS
1758     Select
1759         LAST_UPDATE_DATE
1760     From  ASO_QUOTE_HEADERS_ALL
1761     Where QUOTE_HEADER_ID = c_QUOTE_HEADER_ID;
1762 
1763     Cursor Get_Max_Line_Number ( c_QUOTE_HEADER_ID Number) IS
1764     Select Max(Line_number)
1765     From ASO_QUOTE_LINES_ALL
1766     WHERE quote_header_id = c_QUOTE_HEADER_ID;
1767 
1768     x_qte_header_rec              aso_quote_pub.qte_header_rec_type;
1769     x_qte_line_tbl                aso_quote_pub.qte_line_tbl_type;
1770     x_qte_line_dtl_tbl            aso_quote_pub.qte_line_dtl_tbl_type;
1771     x_hd_price_attributes_tbl     aso_quote_pub.price_attributes_tbl_type;
1772     x_hd_payment_tbl              aso_quote_pub.payment_tbl_type;
1773     x_hd_shipment_tbl             aso_quote_pub.shipment_tbl_type;
1774     x_hd_freight_charge_tbl       aso_quote_pub.freight_charge_tbl_type;
1775     x_hd_tax_detail_tbl           aso_quote_pub.tax_detail_tbl_type;
1776     x_line_attr_ext_tbl           aso_quote_pub.line_attribs_ext_tbl_type;
1777     x_line_rltship_tbl            aso_quote_pub.line_rltship_tbl_type;
1778     x_price_adjustment_tbl        aso_quote_pub.price_adj_tbl_type;
1779     x_price_adj_attr_tbl          aso_quote_pub.price_adj_attr_tbl_type;
1780     x_price_adj_rltship_tbl       aso_quote_pub.price_adj_rltship_tbl_type;
1781     x_ln_price_attributes_tbl     aso_quote_pub.price_attributes_tbl_type;
1782     x_ln_payment_tbl              aso_quote_pub.payment_tbl_type;
1783     x_ln_shipment_tbl             aso_quote_pub.shipment_tbl_type;
1784     x_ln_freight_charge_tbl       aso_quote_pub.freight_charge_tbl_type;
1785     x_ln_tax_detail_tbl           aso_quote_pub.tax_detail_tbl_type;
1786     l_Qte_Header_Rec              ASO_QUOTE_PUB.Qte_Header_Rec_Type :=  ASO_QUOTE_PUB.G_MISS_Qte_Header_Rec;
1787 
1788       l_quote_party_tbl_out      ASO_QUOTE_PUB.Quote_Party_Tbl_Type;
1789       l_sales_credit_tbl_out     ASO_QUOTE_PUB.Sales_Credit_Tbl_Type;
1790       l_tax_detail_tbl_out       ASO_QUOTE_PUB.Tax_Detail_Tbl_Type;
1791       l_freight_charge_tbl_out   ASO_QUOTE_PUB.Freight_Charge_Tbl_Type;
1792       l_shipment_tbl_out         ASO_QUOTE_PUB.Shipment_Tbl_Type;
1793       l_payment_tbl_out          ASO_QUOTE_PUB.Payment_Tbl_Type;
1794       l_Price_Adj_Attr_Tbl_out   ASO_QUOTE_PUB.Price_Adj_Attr_Tbl_Type;
1795       l_Price_Attr_Tbl_out       ASO_QUOTE_PUB.Price_Attributes_Tbl_Type;
1796       l_qte_line_dtl_tbl_out     ASO_QUOTE_PUB.Qte_Line_Dtl_Tbl_Type;
1797       l_Line_Attr_Ext_Tbl_out    ASO_QUOTE_PUB.Line_Attribs_Ext_Tbl_Type;
1798       l_ato_model                VARCHAR2(1) := FND_API.G_FALSE;
1799 
1800 
1801 
1802    BEGIN
1803 
1804       -- Standard Start of API savepoint
1805       SAVEPOINT COPY_LINE_ROWS_PVT;
1806 
1807       -- Standard call to check for call compatibility.
1808       IF NOT FND_API.Compatible_API_Call (
1809                  l_api_version_number
1810               , p_api_version_number
1811               , l_api_name
1812               , G_PKG_NAME
1813               ) THEN
1814          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1815       END IF;
1816 
1817       -- Initialize message list if p_init_msg_list is set to TRUE.
1818       IF FND_API.to_Boolean ( p_init_msg_list ) THEN
1819          FND_MSG_PUB.initialize;
1820       END IF;
1821 
1822       -- Debug Message
1823       IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW ) THEN
1824          FND_MESSAGE.Set_Name ('ASO' , 'Copy Quote Lines API: Start' );
1825          FND_MSG_PUB.ADD;
1826       END IF;
1827 
1828       --  Initialize API return status to success
1829       x_return_status            := FND_API.G_RET_STS_SUCCESS;
1830 
1831       --
1832       -- API body
1833       --
1834 
1835       IF aso_debug_pub.g_debug_flag = 'Y' THEN
1836 	 aso_debug_pub.ADD ('Copy_Rows - Header and Lines' , 1, 'N' );
1837 	 END IF;
1838 
1839     -- hyang: for bug 2692785
1840   IF  P_Qte_Header_Rec.batch_price_flag <> FND_API.G_FALSE THEN
1841 
1842     ASO_CONC_REQ_INT.Lock_Exists(
1843       p_quote_header_id => p_qte_header_id,
1844       x_status          => lx_status);
1845 
1846     IF (lx_status = FND_API.G_TRUE) THEN
1847       IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1848         FND_MESSAGE.Set_Name('ASO', 'ASO_CONC_REQUEST_RUNNING');
1849         FND_MSG_PUB.ADD;
1850       END IF;
1851       RAISE FND_API.G_EXC_ERROR;
1852     END IF;
1853 
1854   END IF;
1855 
1856 
1857       l_qte_line_tbl             :=
1858                        ASO_UTILITY_PVT.Query_Qte_Line_Rows ( p_qte_header_id );
1859 
1860       FOR i IN 1 .. l_qte_line_tbl.COUNT LOOP
1861          l_line_index_link_tbl ( l_qte_line_tbl ( i ).quote_line_id ) :=
1862                                                            FND_API.G_MISS_NUM;
1863       END LOOP;
1864 
1865   --- New Code added for Copy Quote Line Functionality
1866 IF ( P_Qte_Line_Id IS NOT NULL ) AND (P_Qte_Line_Id <> FND_API.G_MISS_NUM) THEN
1867 
1868   -- Validating if the quote_line_id belongs to the qte_header_id
1869 
1870       OPEN C_Validate_Quote_Line ( P_Qte_Header_Id, P_Qte_Line_Id);
1871       FETCH C_Validate_Quote_Line INTO l_val;
1872 
1873 
1874       IF C_Validate_Quote_Line%NOTFOUND THEN
1875          x_return_status            := FND_API.G_RET_STS_ERROR;
1876          IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
1877             FND_MESSAGE.Set_Name ('ASO' , 'ASO_API_INVALID_ID' );
1878             FND_MESSAGE.Set_Token ('COLUMN' , 'ORIGINAL_QUOTE_ID', FALSE );
1879             FND_MESSAGE.Set_Token ( 'VALUE' , TO_CHAR ( P_Qte_Line_Id ) , FALSE );
1880             FND_MSG_PUB.ADD;
1881          END IF;
1882          CLOSE C_Validate_Quote_Line;
1883          RAISE FND_API.G_EXC_ERROR;
1884       END IF;
1885 
1886       CLOSE C_Validate_Quote_Line;
1887 
1888    -- Validate for the last update of the quote
1889 
1890 
1891      Open C_Get_quote( P_Qte_Header_Id);
1892 
1893       Fetch C_Get_quote into l_LAST_UPDATE_DATE;
1894       If ( C_Get_quote%NOTFOUND) Then
1895 
1896         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1897             FND_MESSAGE.Set_Name('ASO', 'ASO_API_MISSING_UPDATE_TARGET');
1898             FND_MESSAGE.Set_Token ('INFO', 'quote', FALSE);
1899             FND_MSG_PUB.Add;
1900         END IF;
1901       raise FND_API.G_EXC_ERROR;
1902       END IF;
1903       Close C_Get_quote;
1904 
1905       If (l_last_update_date is NULL or
1906        l_last_update_date = FND_API.G_MISS_Date ) Then
1907        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1908            FND_MESSAGE.Set_Name('ASO', 'ASO_API_MISSING_COLUMN');
1909            FND_MESSAGE.Set_Token('COLUMN', 'Last_Update_Date', FALSE);
1910            FND_MSG_PUB.ADD;
1911        END IF;
1912        raise FND_API.G_EXC_ERROR;
1913       End if;
1914 
1915       -- Check Whether record has been changed by someone else
1916       If (l_last_update_date <> p_qte_header_rec.last_update_date) Then
1917        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1918            FND_MESSAGE.Set_Name('ASO', 'ASO_API_RECORD_CHANGED');
1919            FND_MESSAGE.Set_Token('INFO', 'quote', FALSE);
1920            FND_MSG_PUB.ADD;
1921        END IF;
1922        raise FND_API.G_EXC_ERROR;
1923       End if;
1924 
1925   -- end validation for last update data
1926 
1927 
1928 
1929       l_qte_line_tbl             := ASO_QUOTE_PUB.G_MISS_QTE_LINE_TBL ;
1930       l_qte_line_rec := ASO_UTILITY_PVT.Query_Qte_Line_Row ( P_Qte_Line_Id );
1931       l_qte_line_tbl(1) := l_qte_line_rec;
1932 
1933 
1934 
1935     -- Getting the quote line detail record
1936       l_qte_line_dtl_tbl := ASO_UTILITY_PVT.Query_Line_Dtl_Rows ( P_Qte_Line_Id );
1937 
1938 
1939  IF l_qte_line_rec.line_category_code = 'RETURN' THEN
1940   IF aso_debug_pub.g_debug_flag = 'Y' THEN
1941   aso_debug_pub.ADD ('l_qte_line_dtl_tbl.count' , 1, 'N' );
1942   END IF;
1943 
1944   IF l_qte_line_dtl_tbl.count > 0 THEN
1945 
1946      IF ( l_qte_line_dtl_tbl(1).RETURN_REF_TYPE = 'SALES ORDER' AND
1947           l_qte_line_dtl_tbl(1).RETURN_REF_LINE_ID IS NOT NULL AND
1948           l_qte_line_dtl_tbl(1).INSTANCE_ID IS NOT NULL )
1949      OR ( l_qte_line_dtl_tbl(1).REF_TYPE_CODE = 'TOP_MODEL' ) THEN
1950          x_return_status            := FND_API.G_RET_STS_ERROR;
1951 
1952          IF aso_debug_pub.g_debug_flag = 'Y' THEN
1953 	    aso_debug_pub.ADD ('Install Base Check Failed' , 1, 'N' );
1954 	    END IF;
1955          IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
1956             FND_MESSAGE.Set_Name ('ASO' , 'ASO_RECONFIG_ITM_ERR' );
1957             FND_MSG_PUB.ADD;
1958          END IF;
1959 
1960      END IF;
1961 
1962   END IF;
1963 
1964  END IF;
1965 
1966 
1967 /*
1968  -- Validating if the  item is a container item
1969      l_appl_param_rec.calling_application_id := nvl(FND_PROFILE.value('JTF_PROFILE_DEFAULT_APPLICATION'),697);
1970 
1971         cz_network_api_pub.is_container(p_api_version  => 1.0
1972                                        ,p_inventory_item_id  => l_qte_line_rec.inventory_item_id
1973                                        ,p_organization_id   => l_qte_line_rec.organization_id
1974                                        ,p_appl_param_rec => l_appl_param_rec
1975                                        ,x_return_value       => l_return_value
1976                                        ,x_return_status      => l_return_status
1977                                        ,x_msg_count          => x_msg_count
1978                                        ,x_msg_data           => x_msg_data  );
1979 
1980            IF ( l_return_status = FND_API.G_RET_STS_SUCCESS  ) THEN
1981 
1982               IF l_return_value = 'Y' THEN
1983                x_return_status            := FND_API.G_RET_STS_ERROR;
1984                IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
1985                 FND_MESSAGE.Set_Name ('ASO' , 'ASO_RECONFIG_ITM_ERR' );
1986                 FND_MSG_PUB.ADD;
1987                END IF;
1988                RAISE FND_API.G_EXC_ERROR;
1989               END IF;
1990 
1991            ELSE
1992                   x_return_status            := FND_API.G_RET_STS_UNEXP_ERROR;
1993                   IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
1994                      FND_MESSAGE.Set_Name ('ASO' , 'ASO_API_UNEXP_ERROR' );
1995                      FND_MESSAGE.Set_Token ( 'ROW' , 'ASO_COPYLINE AFTER_CONFIG_COPY' , TRUE );
1996                      FND_MSG_PUB.ADD;
1997                   END IF;
1998                   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1999 
2000            END IF;
2001 */
2002 
2003 
2004    IF l_qte_line_rec.item_type_code = 'CFG' then
2005     x_return_status            := FND_API.G_RET_STS_ERROR;
2006 
2007     IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
2008      FND_MESSAGE.Set_Name ('ASO' , 'ASO_CFG_ITM_ERR' );
2009      FND_MSG_PUB.ADD;
2010     END IF;
2011     RAISE FND_API.G_EXC_ERROR;
2012 
2013   END IF;
2014 
2015 
2016   -- Check to see if it is a servicable product
2017 
2018             IF aso_debug_pub.g_debug_flag = 'Y' THEN
2019 		  aso_debug_pub.ADD ( 'service item flag = ' || l_qte_line_rec.service_item_flag , 1 , 'N' );
2020 		  END IF;
2021             IF      l_qte_line_rec.service_item_flag = 'Y'  THEN
2022 
2023              x_return_status            := FND_API.G_RET_STS_ERROR;
2024 
2025              IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
2026               FND_MESSAGE.Set_Name ('ASO' , 'ASO_SRV_ITM_ERR' );
2027               FND_MSG_PUB.ADD;
2028              END IF;
2029 
2030              RAISE FND_API.G_EXC_ERROR;
2031 
2032            END IF;
2033 
2034         -- Set the variables to null as they are re-used later on
2035            l_service_item_flag := NULL;
2036            l_serviceable_product_flag := NULL;
2037 
2038 END IF;
2039 IF aso_debug_pub.g_debug_flag = 'Y' THEN
2040 aso_debug_pub.ADD ('End Of New Code ' , 1, 'N' );
2041 END IF;
2042 
2043 -- End of New Code added
2044 
2045       FOR i IN 1 .. l_qte_line_tbl.COUNT LOOP
2046 
2047          IF l_qte_line_tbl ( i ).uom_code = 'ENR' THEN
2048             x_return_status            := FND_API.G_RET_STS_ERROR;
2049             IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
2050                FND_MESSAGE.Set_Name ('ASO' , 'ASO_CANNOT_COPY_EDU' );
2051                FND_MSG_PUB.ADD;
2052             END IF;
2053             RAISE FND_API.G_EXC_ERROR;
2054          END IF;
2055 
2056          l_qte_line_tbl ( i ).quote_header_id := P_New_Qte_Header_Id;
2057          l_qte_line_id              := l_qte_line_tbl ( i ).quote_line_id;
2058 
2059          IF aso_debug_pub.g_debug_flag = 'Y' THEN
2060 	    aso_debug_pub.ADD (   'qte line id = ' || l_qte_line_id, 1, 'N' );
2061          aso_debug_pub.ADD (   'i = ' || i, 1, 'N' );
2062          aso_debug_pub.ADD ( 'item_type_code = ' || l_qte_line_tbl ( i ).item_type_code , 1 , 'N' );
2063 	    END IF;
2064 
2065          IF l_line_index_link_tbl ( l_qte_line_id ) = FND_API.G_MISS_NUM THEN
2066 
2067             l_qte_line_dtl_tbl := ASO_UTILITY_PVT.Query_Line_Dtl_Rows ( l_qte_line_id );
2068 
2069             IF l_qte_line_tbl ( i ).item_type_code = 'MDL' THEN
2070 
2071                IF l_qte_line_dtl_tbl.COUNT > 0 THEN
2072 
2073                   IF      l_qte_line_dtl_tbl ( 1 ).config_header_id IS NOT NULL
2074                       AND l_qte_line_dtl_tbl ( 1 ).config_revision_num IS NOT NULL THEN
2075 
2076                      l_config_control_rec.new_config_flag := FND_API.G_TRUE;
2077 
2078                      -- set the flag for ato model
2079                      IF (l_qte_line_dtl_tbl(1).ato_line_id is not null and l_qte_line_dtl_tbl(1).ato_line_id <> fnd_api.g_miss_num) then
2080                         l_ato_model := fnd_api.g_true;
2081 				 end if;
2082 
2083 
2084 			     IF aso_debug_pub.g_debug_flag = 'Y' THEN
2085 				aso_debug_pub.ADD ( 'Before Calling ASO_CGF_INT.Copy Configuration' , 1 , 'N' );
2086 				END IF;
2087 
2088 				 ASO_CFG_INT.Copy_Configuration (
2089                          P_Api_version_NUmber =>         1.0
2090                       , P_config_header_id =>            l_qte_line_dtl_tbl ( 1 ).config_header_id
2091                       , p_config_revision_num =>         l_qte_line_dtl_tbl ( 1 ).config_revision_num
2092                       , p_copy_mode =>                   CZ_API_PUB.G_NEW_HEADER_COPY_MODE
2093                       , x_config_header_id =>            l_config_hdr_id
2094                       , x_config_revision_num =>         l_config_rev_nbr
2095                       , x_orig_item_id_tbl =>            l_orig_item_id_tbl
2096                       , x_new_item_id_tbl =>             l_new_item_id_tbl
2097                       , x_return_status =>               l_return_status
2098                       , x_msg_count =>                   x_msg_count
2099                       , x_msg_data =>                    x_msg_data
2100                       , p_autonomous_flag =>             FND_API.G_FALSE
2101 				  );
2102 
2103                     IF aso_debug_pub.g_debug_flag = 'Y' THEN
2104 				aso_debug_pub.ADD ( 'After Calling ASO_CGF_INT.Copy Configuration' , 1 , 'N' );
2105 				END IF;
2106 
2107 				 IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
2108                         l_old_config_header_id     :=
2109                                     l_qte_line_dtl_tbl ( 1 ).config_header_id;
2110                         l_old_config_revision_num  :=
2111                                  l_qte_line_dtl_tbl ( 1 ).config_revision_num;
2112                         l_qte_line_dtl_tbl ( 1 ).config_header_id :=
2113                                                               l_config_hdr_id;
2114                         l_qte_line_dtl_tbl ( 1 ).config_revision_num :=
2115                                                              l_config_rev_nbr;
2116                      ELSE
2117                         x_return_status            := FND_API.G_RET_STS_ERROR;
2118                         RAISE FND_API.G_EXC_ERROR;
2119                      END IF;
2120 
2121                   END IF; -- config_header_id
2122 
2123                END IF; -- line_dtl_tbl.count
2124 
2125             END IF; -- 'MDL'
2126 
2127            l_serviceable_product_flag := l_qte_line_tbl ( i ).SERVICEABLE_PRODUCT_FLAG;
2128            l_service_item_flag  := l_qte_line_tbl ( i ).service_item_flag;
2129 
2130            IF aso_debug_pub.g_debug_flag = 'Y' THEN
2131 		 aso_debug_pub.ADD ( 'service item flag = ' || l_service_item_flag , 1 , 'N' );
2132            aso_debug_pub.ADD ( 'serviceable_product_flag = ' || l_serviceable_product_flag , 1 , 'N' );
2133 		 END IF;
2134 
2135             IF      l_service_item_flag = 'Y'
2136                 AND (l_qte_line_dtl_tbl ( 1 ).service_ref_type_code IS NULL OR
2137 			     l_qte_line_dtl_tbl ( 1 ).service_ref_type_code <> 'QUOTE') THEN
2138                l_service_item_flag        := 'N';
2139             END IF;
2140 
2141             IF aso_debug_pub.g_debug_flag = 'Y' THEN
2142 		  aso_debug_pub.ADD ( 'service item flag 2= ' || l_service_item_flag , 1 , 'N' );
2143 		  END IF;
2144 
2145             IF      l_qte_line_tbl ( i ).item_type_code <> 'CFG'
2146                 AND l_qte_line_tbl ( i ).item_type_code <> 'OPT'
2147                 AND l_service_item_flag <> 'Y' THEN
2148 
2149                l_line_attr_Ext_Tbl := ASO_UTILITY_PVT.Query_Line_Attribs_Ext_Rows ( l_qte_line_id );
2150 
2151                IF ( P_Qte_Line_Id IS NOT NULL ) AND (P_Qte_Line_Id <> FND_API.G_MISS_NUM) THEN
2152 
2153                   l_price_adj_tbl := ASO_UTILITY_PVT.Query_Price_Adj_NonPRG_Rows(p_qte_header_id, l_qte_line_id);
2154                ELSE
2155                   l_price_adj_tbl := ASO_UTILITY_PVT.Query_Price_Adj_Rows(p_qte_header_id, l_qte_line_id);
2156                END IF;
2157 
2158 			l_dup_Price_Adj_Tbl := l_price_adj_tbl;
2159 
2160                l_price_adj_attr_tbl := ASO_UTILITY_PVT.Query_Price_Adj_Attr_Rows( p_price_adj_tbl => l_price_adj_tbl );
2161 
2162                l_price_attr_tbl := ASO_UTILITY_PVT.Query_Price_Attr_Rows(p_qte_header_id, l_qte_line_id);
2163 
2164                --l_payment_tbl := ASO_UTILITY_PVT.Query_Payment_Rows(p_qte_header_id, L_QTE_LINE_ID);
2165 
2166                  l_payment_tbl := ASO_QUOTE_PUB.g_miss_payment_tbl;
2167 
2168                l_shipment_tbl := ASO_UTILITY_PVT.Query_Shipment_Rows(p_qte_header_id, L_QTE_LINE_ID);
2169 
2170                l_sales_credit_tbl := ASO_UTILITY_PVT.Query_Sales_Credit_Row(p_qte_header_id, L_QTE_LINE_ID);
2171 
2172                l_quote_party_tbl := ASO_UTILITY_PVT.Query_Quote_Party_Row(p_qte_header_id, L_QTE_LINE_ID);
2173 
2174                l_freight_charge_tbl := ASO_UTILITY_PVT.Query_Freight_Charge_Rows(l_shipment_tbl);
2175 
2176                l_tax_detail_tbl := ASO_UTILITY_PVT.Query_Tax_Detail_Rows(p_qte_header_id, L_QTE_LINE_ID, l_shipment_tbl);
2177 
2178                l_qte_line_tbl(i).quote_line_id := NULL;
2179 
2180                l_qte_line_tbl ( i ).object_version_number := FND_API.G_MISS_NUM;
2181 
2182                --BC4J Fix
2183 
2184                FOR j IN 1 .. l_qte_line_dtl_tbl.COUNT LOOP
2185 		         l_qte_line_dtl_tbl(j).quote_line_detail_id := null;
2186                    l_qte_line_dtl_tbl(j).object_version_number := FND_API.G_MISS_NUM;
2187 			    l_qte_line_dtl_tbl(j).top_model_line_id := null;
2188 			    l_qte_line_dtl_tbl(j).ato_line_id := null;
2189                    l_qte_line_dtl_tbl(j).qte_line_index := i;
2190 			END LOOP;
2191 
2192                FOR j IN 1 .. l_price_adj_tbl.COUNT LOOP
2193                   l_price_adj_tbl ( j ).QUOTE_HEADER_ID     := p_new_qte_header_id;
2194                   l_price_adj_tbl ( j ).price_adjustment_id := null;
2195                   l_price_adj_tbl ( j ).object_version_number := FND_API.G_MISS_NUM;
2196 			END LOOP;
2197 
2198                FOR j IN 1 .. l_price_adj_attr_tbl.COUNT LOOP
2199                   l_price_adj_attr_tbl(j).price_adj_attrib_id := null;
2200                   l_price_adj_attr_tbl(j).object_version_number := FND_API.G_MISS_NUM;
2201 			END LOOP;
2202 
2203                FOR j IN 1 .. l_price_attr_tbl.COUNT LOOP
2204                   l_price_attr_tbl ( j ).QUOTE_HEADER_ID    := p_new_qte_header_id;
2205                   l_price_attr_tbl ( j ).price_attribute_id := null;
2206                   l_price_attr_tbl ( j ).object_version_number := FND_API.G_MISS_NUM;
2207 			END LOOP;
2208 
2209                /* FOR j IN 1 .. l_payment_tbl.COUNT LOOP
2210                   l_payment_tbl ( j ).QUOTE_HEADER_ID := p_new_qte_header_id;
2211                   l_payment_tbl ( j ).CREDIT_CARD_APPROVAL_CODE := NULL;
2212                   l_payment_tbl ( j ).CREDIT_CARD_APPROVAL_DATE := NULL;
2213                   l_payment_tbl ( j ).payment_id := NULL;
2214                   l_payment_tbl ( j ).object_version_number := FND_API.G_MISS_NUM;
2215 			END LOOP; */
2216 
2217                FOR j IN 1 .. l_shipment_tbl.COUNT LOOP
2218                   l_shipment_tbl ( j ).QUOTE_HEADER_ID := p_new_qte_header_id;
2219                   l_shipment_tbl ( j ).shipment_id := null;
2220                   l_shipment_tbl ( j ).object_version_number := FND_API.G_MISS_NUM;
2221 			END LOOP;
2222 
2223                FOR j IN 1 .. l_sales_credit_tbl.COUNT LOOP
2224                   l_sales_credit_tbl(j).QUOTE_HEADER_ID := p_new_qte_header_id;
2225                   l_sales_credit_tbl(j).sales_credit_id := null;
2226                   l_sales_credit_tbl(j).object_version_number := FND_API.G_MISS_NUM;
2227 			END LOOP;
2228 
2229                FOR j IN 1 .. l_quote_party_tbl.COUNT LOOP
2230                   l_quote_party_tbl(j).QUOTE_HEADER_ID := p_new_qte_header_id;
2231                   l_quote_party_tbl(j).QUOTE_PARTY_ID  := null;
2232                   l_quote_party_tbl(j).object_version_number := FND_API.G_MISS_NUM;
2233 			END LOOP;
2234 
2235                FOR j IN 1 .. l_tax_detail_tbl.COUNT LOOP
2236                   l_tax_detail_tbl(j).tax_detail_id  := null;
2237                   l_tax_detail_tbl(j).object_version_number := FND_API.G_MISS_NUM;
2238 			END LOOP;
2239 
2240                FOR j IN 1 .. l_line_attr_Ext_Tbl.COUNT LOOP
2241                   l_line_attr_Ext_Tbl(j).line_attribute_id := null;
2242                   l_line_attr_Ext_Tbl(j).object_version_number := FND_API.G_MISS_NUM;
2243 			END LOOP;
2244 
2245                FOR j IN 1 .. l_freight_charge_tbl.COUNT LOOP
2246                   l_freight_charge_tbl(j).freight_charge_id := null;
2247                   l_freight_charge_tbl(j).object_version_number := FND_API.G_MISS_NUM;
2248 			END LOOP;
2249 
2250 		     --End of BC4J Fix
2251 
2252              -- Setting the new line number if a quote line is being copied
2253              IF ( P_Qte_Line_Id IS NOT NULL ) AND (P_Qte_Line_Id <> FND_API.G_MISS_NUM) THEN
2254                 Open Get_Max_Line_Number(P_Qte_Header_Id);
2255                 Fetch Get_Max_Line_Number into l_line_number;
2256                 Close Get_Max_Line_Number;
2257 
2258                 l_qte_line_tbl ( i ).line_number := l_line_number + 10000;
2259 
2260              END IF;
2261 
2262 
2263                IF aso_debug_pub.g_debug_flag = 'Y' THEN
2264 			aso_debug_pub.ADD ( 'Copy_Line_Rows - Before insert_quote_line_rows: ' || l_qte_line_id , 1 , 'Y' );
2265 			END IF;
2266                ASO_QUOTE_LINES_PVT.Insert_Quote_Line_Rows (
2267                    p_control_rec =>                l_control_rec
2268                 , P_qte_Line_Rec =>                l_qte_line_tbl ( i )
2269                 , P_qte_line_dtl_tbl =>            l_qte_line_dtl_tbl
2270                 , P_Line_Attribs_Ext_Tbl =>        l_line_attr_ext_tbl
2271                 , P_price_attributes_tbl =>        l_price_attr_tbl
2272                 , P_Price_Adj_Tbl =>               l_price_adj_tbl
2273                 , P_Price_Adj_Attr_Tbl =>          l_Price_Adj_Attr_Tbl
2274                 , P_Payment_Tbl =>                 ASO_QUOTE_PUB.g_miss_payment_tbl
2275                 , P_Shipment_Tbl =>                l_shipment_tbl
2276                 , P_Freight_Charge_Tbl =>          l_freight_charge_tbl
2277                 , P_Tax_Detail_Tbl =>              l_tax_detail_tbl
2278                 , P_Sales_Credit_Tbl =>            l_sales_credit_tbl
2279                 , P_Quote_Party_Tbl =>             l_quote_party_tbl
2280 			 , x_qte_Line_Rec =>                lx_qte_line_rec
2281                 , x_qte_line_dtl_tbl =>            l_qte_line_dtl_tbl_out
2282                 , x_Line_Attribs_Ext_Tbl =>        l_line_attr_Ext_Tbl_out
2283                 , x_price_attributes_tbl =>        l_price_attr_tbl_out
2284                 , x_Price_Adj_Tbl =>               lx_ln_price_adj_tbl
2285                 , x_Price_Adj_Attr_Tbl =>          l_Price_Adj_Attr_Tbl_out
2286                 , x_Payment_Tbl =>                 l_payment_tbl_out
2287                 , x_Shipment_Tbl =>                l_shipment_tbl_out
2288                 , x_Freight_Charge_Tbl =>          l_freight_charge_tbl_out
2289                 , x_Tax_Detail_Tbl =>              l_tax_detail_tbl_out
2290                 , x_Sales_Credit_Tbl =>            l_sales_credit_tbl_out
2291                 , x_Quote_Party_Tbl =>             l_quote_party_tbl_out
2292                 , x_Return_Status =>               l_return_status
2293                 , x_Msg_Count =>                   x_msg_count
2294                 , x_Msg_Data =>                    x_msg_data
2295                 );
2296 
2297       l_quote_party_tbl :=l_quote_party_tbl_out ;
2298       l_sales_credit_tbl :=l_sales_credit_tbl_out ;
2299       l_tax_detail_tbl := l_tax_detail_tbl_out    ;
2300       l_freight_charge_tbl := l_freight_charge_tbl_out  ;
2301       l_shipment_tbl := l_shipment_tbl_out   ;
2302       l_payment_tbl := l_payment_tbl_out     ;
2303       l_Price_Adj_Attr_Tbl  := l_Price_Adj_Attr_Tbl_out  ;
2304       l_Price_Attr_Tbl  :=  l_Price_Attr_Tbl_out     ;
2305       l_qte_line_dtl_tbl := l_qte_line_dtl_tbl_out   ;
2306       l_Line_Attr_Ext_Tbl  :=  l_Line_Attr_Ext_Tbl_out;
2307 
2308 
2309                IF ( l_return_status = FND_API.G_RET_STS_UNEXP_ERROR ) THEN
2310                   x_return_status            := FND_API.G_RET_STS_UNEXP_ERROR;
2311                   IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
2312                      FND_MESSAGE.Set_Name ('ASO' , 'ASO_API_UNEXP_ERROR' );
2313                      FND_MESSAGE.Set_Token ( 'ROW' , 'ASO_COPYLINE AFTER_INSERT' , TRUE );
2314                      FND_MSG_PUB.ADD;
2315                   END IF;
2316                   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2317                ELSIF ( l_return_status = FND_API.G_RET_STS_ERROR ) THEN
2318                   x_return_status            := FND_API.G_RET_STS_ERROR;
2319                   RAISE FND_API.G_EXC_ERROR;
2320                END IF;
2321                IF aso_debug_pub.g_debug_flag = 'Y' THEN
2322 			aso_debug_pub.ADD ( 'Copy_Rows - After insert_quote_line_rows - status: ' || l_return_status , 1 , 'Y' );
2323 			END IF;
2324 
2325                IF aso_debug_pub.g_debug_flag = 'Y' THEN
2326 			aso_debug_pub.ADD ( 'Copy_Rows - Updating the top model and ato line id for the top model line ', 1 , 'Y' );
2327 			aso_debug_pub.ADD ( 'Copy_Rows - l_ato_model: ' || l_ato_model , 1 , 'Y' );
2328 			END IF;
2329                update aso_quote_line_details
2330 			set top_model_line_id =  lx_qte_line_rec.quote_line_id,
2331 			    ato_line_id       =  decode(l_ato_model,fnd_api.g_true,lx_qte_line_rec.quote_line_id,null)
2332 			where quote_line_id = lx_qte_line_rec.quote_line_id;
2333 
2334       -- Copy the payment record
2335                l_payment_tbl := ASO_UTILITY_PVT.Query_Payment_Rows(p_qte_header_id, L_QTE_LINE_ID);
2336 
2337      IF l_payment_tbl.count > 0 then
2338 
2339                 FOR j IN 1 .. l_payment_tbl.COUNT LOOP
2340                   l_payment_tbl ( j ).QUOTE_HEADER_ID := p_new_qte_header_id;
2341                   l_payment_tbl ( j ).quote_line_id := lx_qte_line_rec.quote_line_id;
2342                   l_payment_tbl ( j ).CREDIT_CARD_APPROVAL_CODE := NULL;
2343                   l_payment_tbl ( j ).CREDIT_CARD_APPROVAL_DATE := NULL;
2344                   l_payment_tbl ( j ).payment_id := NULL;
2345                   l_payment_tbl ( j ).object_version_number := FND_API.G_MISS_NUM;
2346                END LOOP;
2347 
2348        IF aso_debug_pub.g_debug_flag = 'Y' THEN
2349           aso_debug_pub.add('Copy_Rows: Before  call to copy_payment_row ', 1, 'Y');
2350        END IF;
2351 
2352          aso_copy_quote_pvt.copy_payment_row(p_payment_rec => l_payment_tbl(1)  ,
2353                                              x_return_status => l_return_status,
2354                                              x_msg_count     => x_msg_count,
2355                                              x_msg_data      => x_msg_data);
2356 
2357        IF aso_debug_pub.g_debug_flag = 'Y' THEN
2358           aso_debug_pub.add('Copy_Rows: After call to copy_payment_row: x_return_status: '||l_return_status, 1, 'Y');
2359        END IF;
2360                IF ( l_return_status = FND_API.G_RET_STS_UNEXP_ERROR ) THEN
2361                   x_return_status            := FND_API.G_RET_STS_UNEXP_ERROR;
2362                   IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
2363                      FND_MESSAGE.Set_Name ('ASO' , 'ASO_API_UNEXP_ERROR' );
2364                      FND_MESSAGE.Set_Token ( 'ROW' , 'ASO_COPYLINE AFTER_INSERT' , TRUE );
2365                      FND_MSG_PUB.ADD;
2366                   END IF;
2367                   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2368                ELSIF ( l_return_status = FND_API.G_RET_STS_ERROR ) THEN
2369                   x_return_status            := FND_API.G_RET_STS_ERROR;
2370                   RAISE FND_API.G_EXC_ERROR;
2371                END IF;
2372                IF aso_debug_pub.g_debug_flag = 'Y' THEN
2373                aso_debug_pub.ADD ( 'Copy_Rows - After insert_quote_line_rows - status: ' || l_return_status , 1 , 'Y' );
2374                END IF;
2375 
2376      END IF;
2377 
2378   --  End Copy payment record
2379 
2380          -- Copying the sales supplement data for the line
2381       IF ( P_Copy_Quote_Control_Rec.New_Version = FND_API.G_TRUE ) THEN
2382 
2383                  IF aso_debug_pub.g_debug_flag = 'Y' THEN
2384                  aso_debug_pub.ADD ( 'Copy_Rows - Begin- before line copy_sales_supplement  ' , 1 , 'Y' );
2385                  END IF;
2386 
2387           ASO_COPY_QUOTE_PVT.INSERT_SALES_SUPP_DATA
2388           (
2389           P_Api_Version_Number          =>  1.0,
2390           P_Init_Msg_List               => P_Init_Msg_List,
2391           P_Commit                      => P_Commit,
2392           P_OLD_QUOTE_LINE_ID           => L_QTE_LINE_ID,
2393           P_NEW_QUOTE_LINE_ID           => lx_qte_line_rec.quote_line_id,
2394           X_Return_Status               => l_return_status,
2395           X_Msg_Count                   => X_Msg_Count,
2396           X_Msg_Data                    => X_Msg_Data );
2397 
2398 
2399                   IF aso_debug_pub.g_debug_flag = 'Y' THEN
2400                   aso_debug_pub.ADD ( 'Copy_Rows -After line copy_sales_supplement ' || x_return_status , 1 , 'Y' );
2401                   END IF;
2402 
2403 
2404                IF ( l_return_status = FND_API.G_RET_STS_UNEXP_ERROR ) THEN
2405                  x_return_status            := FND_API.G_RET_STS_UNEXP_ERROR;
2406                  IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
2407                   FND_MESSAGE.Set_Name ('ASO' , 'ASO_API_UNEXP_ERROR' );
2408                   FND_MESSAGE.Set_Token ('ROW' , 'ASO_QUOTE_HEADER', TRUE );
2409                   FND_MSG_PUB.ADD;
2410                 END IF;
2411                RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2412 
2413                ELSIF ( l_return_status = FND_API.G_RET_STS_ERROR ) THEN
2414                 x_return_status            := FND_API.G_RET_STS_ERROR;
2415                 RAISE FND_API.G_EXC_ERROR;
2416                END IF;
2417         END IF;  -- new version check
2418 
2419 
2420 
2421 
2422 
2423 
2424 
2425 
2426                IF P_Copy_Quote_Control_Rec.Copy_Attachment = FND_API.G_TRUE
2427 
2428                   OR ( ( P_Qte_Line_Id IS NOT NULL ) AND (P_Qte_Line_Id <> FND_API.G_MISS_NUM)) THEN
2429 
2430                  IF aso_debug_pub.g_debug_flag = 'Y' THEN
2431 			  aso_debug_pub.ADD ( 'Copy_Rows - Begin- before line copy_attch  ' , 1 , 'Y' );
2432 			  END IF;
2433 
2434                  ASO_ATTACHMENT_INT.Copy_Attachments(
2435                      p_api_version       => l_api_version,
2436                      p_old_object_code   => 'ASO_QUOTE_LINES_ALL',
2437                      p_new_object_code   => 'ASO_QUOTE_LINES_ALL',
2438                      p_old_object_id     => L_QTE_LINE_ID,
2439                      p_new_object_id     => lx_qte_line_rec.quote_line_id,
2440                      x_return_status     => l_return_status,
2441                      x_msg_count         => x_msg_count,
2442                      x_msg_data          => x_msg_data
2443                    );
2444                   IF aso_debug_pub.g_debug_flag = 'Y' THEN
2445 			   aso_debug_pub.ADD ( 'Copy_Rows -After line copy_attch ' || x_return_status , 1 , 'Y' );
2446 			   END IF;
2447 
2448                   IF ( l_return_status = FND_API.G_RET_STS_UNEXP_ERROR ) THEN
2449                      x_return_status            := FND_API.G_RET_STS_UNEXP_ERROR;
2450                      IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
2451                         FND_MESSAGE.Set_Name ('ASO' , 'ASO_API_UNEXP_ERROR' );
2452                         FND_MESSAGE.Set_Token ( 'ROW' , 'ASO_COPYLINE AFTER_ATTACHMENTS' , TRUE );
2453                         FND_MSG_PUB.ADD;
2454                      END IF;
2455                      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2456                   ELSIF ( x_return_status = FND_API.G_RET_STS_ERROR ) THEN
2457                      x_return_status            := FND_API.G_RET_STS_ERROR;
2458                      RAISE FND_API.G_EXC_ERROR;
2459                   END IF;
2460 
2461                END IF;
2462 
2463                FOR j IN 1 .. l_dup_price_adj_tbl.COUNT LOOP
2464                   l_price_index_link_tbl ( l_dup_price_adj_tbl ( j ).price_adjustment_id ) :=
2465                                 lx_ln_price_adj_tbl ( j ).price_adjustment_id;
2466                aso_debug_pub.ADD ( 'Copy - l_dup_price_adj_tbl ( j ).price_adjustment_id ' || l_dup_price_adj_tbl ( j ).price_adjustment_id , 1 , 'Y' );
2467                aso_debug_pub.ADD ( 'Copy - lx_ln_price_adj_tbl ( j ).price_adjustment_id ' || lx_ln_price_adj_tbl ( j ).price_adjustment_id , 1 , 'Y' );
2468                END LOOP;
2469 
2470                l_line_index_link_tbl ( l_qte_line_id ) :=
2471                                                  lx_qte_line_rec.quote_line_id;
2472                IF aso_debug_pub.g_debug_flag = 'Y' THEN
2473 			aso_debug_pub.ADD ( 'Copy_Config - l_qte_line_tbl(i).item_type_code ' || l_qte_line_tbl ( i ).item_type_code , 1 , 'Y' );
2474                aso_debug_pub.ADD ( 'Copy - l_qte_line_tbl(i).inventory_item_id ' || l_qte_line_tbl ( i ).inventory_item_id , 1 , 'Y' );
2475                aso_debug_pub.ADD ( 'Copy - l_serviceable_product_flag ' || l_serviceable_product_flag , 1 , 'Y' );
2476 			END IF;
2477 
2478                IF l_serviceable_product_flag = 'Y' THEN
2479 
2480 			  IF aso_debug_pub.g_debug_flag = 'Y' THEN
2481 			  aso_debug_pub.ADD ( 'Before Calling Service Copy ' , 1 , 'N' );
2482 			  END IF;
2483 
2484 			   ASO_COPY_QUOTE_PVT.service_copy (
2485                       p_qte_line_id =>                l_qte_line_id
2486                    , p_copy_quote_control_rec =>      p_copy_quote_control_rec
2487                    , p_new_qte_header_id =>           p_new_qte_header_id
2488                    , p_qte_header_id =>               p_qte_header_id
2489                    , lx_line_index_link_tbl =>        l_line_index_link_tbl
2490                    , lx_price_index_link_tbl =>       l_price_index_link_tbl
2491                    , X_Return_Status =>               l_return_status
2492                    , X_Msg_Count =>                   x_msg_count
2493                    , X_Msg_Data =>                    x_msg_data
2494                    , p_line_quantity            =>  FND_API.G_MISS_NUM
2495                    );
2496 
2497                END IF;
2498 
2499 		     IF aso_debug_pub.g_debug_flag = 'Y' THEN
2500 			aso_debug_pub.ADD ( ' After Calling Service Copy' , 1 , 'N' );
2501 			END IF;
2502 
2503 
2504                IF ( l_return_status = FND_API.G_RET_STS_UNEXP_ERROR ) THEN
2505                   x_return_status            := FND_API.G_RET_STS_UNEXP_ERROR;
2506                   IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
2507                      FND_MESSAGE.Set_Name ('ASO' , 'ASO_API_UNEXP_ERROR' );
2508                      FND_MESSAGE.Set_Token ( 'ROW' , 'ASO_COPYLINE AFTER_SERVICE' , TRUE );
2509                      FND_MSG_PUB.ADD;
2510                   END IF;
2511                   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2512                ELSIF ( l_return_status = FND_API.G_RET_STS_ERROR ) THEN
2513                   x_return_status            := FND_API.G_RET_STS_ERROR;
2514                   RAISE FND_API.G_EXC_ERROR;
2515                END IF;
2516 
2517             END IF; -- If <> CFG and OPT
2518 
2519             IF l_qte_line_tbl ( i ).item_type_code = 'MDL' THEN
2520                IF l_qte_line_dtl_tbl.COUNT > 1 THEN
2521                   FOR k IN 2 .. l_qte_line_dtl_tbl.COUNT LOOP
2522                      l_qte_line_dtl_tbl ( k ).config_header_id :=
2523                                                               l_config_hdr_id;
2524                      l_qte_line_dtl_tbl ( k ).config_revision_num :=
2525                                                              l_config_rev_nbr;
2526                   END LOOP;
2527                END IF;
2528 
2529                IF aso_debug_pub.g_debug_flag = 'Y' THEN
2530 			aso_debug_pub.ADD ( 'l_old_config_header_id = ' || l_old_config_header_id , 1 , 'N' );
2531                aso_debug_pub.ADD ( ' Before Calling Copy Quote Config Copy' , 1 , 'N' );
2532 			END IF;
2533 
2534 			ASO_COPY_QUOTE_PVT.config_copy (
2535                    p_old_config_header_id =>       l_old_config_header_id
2536                 , p_old_config_revision_num =>     l_old_config_revision_num
2537                 , p_config_header_id =>            l_config_hdr_id
2538                 , p_config_revision_num =>         l_config_rev_nbr
2539                 , p_copy_quote_control_rec =>      p_copy_quote_control_rec
2540                 , p_new_qte_header_id =>           p_new_qte_header_id
2541                 , p_qte_header_id =>               p_qte_header_id
2542                 , lx_line_index_link_tbl =>        l_line_index_link_tbl
2543                 , lx_price_index_link_tbl =>       l_price_index_link_tbl
2544                 , X_Return_Status =>               l_return_status
2545                 , X_Msg_Count =>                   x_msg_count
2546                 , X_Msg_Data =>                    x_msg_data
2547                 , p_line_quantity =>               FND_API.G_MISS_NUM
2548                 );
2549 
2550                IF aso_debug_pub.g_debug_flag = 'Y' THEN
2551 			aso_debug_pub.ADD ( ' After Calling Copy Quote Config Copy' , 1 , 'N' );
2552 			END IF;
2553 
2554 
2555                IF ( l_return_status = FND_API.G_RET_STS_UNEXP_ERROR ) THEN
2556                   x_return_status            := FND_API.G_RET_STS_UNEXP_ERROR;
2557                   IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
2558                      FND_MESSAGE.Set_Name ('ASO' , 'ASO_API_UNEXP_ERROR' );
2559                      FND_MESSAGE.Set_Token ( 'ROW' , 'ASO_COPYLINE AFTER_CONFIG_COPY' , TRUE );
2560                      FND_MSG_PUB.ADD;
2561                   END IF;
2562                   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2563                ELSIF ( l_return_status = FND_API.G_RET_STS_ERROR ) THEN
2564                   x_return_status            := FND_API.G_RET_STS_ERROR;
2565                   RAISE FND_API.G_EXC_ERROR;
2566                END IF;
2567 
2568                /* bug 1903605*/
2569                l_old_config_header_id     := NULL;
2570                l_old_config_revision_num  := NULL;
2571                /* bug 1903605*/
2572 
2573                IF (l_orig_item_id_tbl IS NOT NULL)  AND (l_new_item_id_tbl IS NOT NULL)  THEN
2574 
2575                IF aso_debug_pub.g_debug_flag = 'Y' THEN
2576 			aso_debug_pub.ADD ( 'item_id_count > 0 ', 1 , 'N' );
2577 		     aso_debug_pub.ADD ( 'Orig Tbl Count ' ||l_orig_item_id_tbl.count, 1 , 'N' );
2578                aso_debug_pub.ADD ( 'New Tbl Count '||l_new_item_id_tbl.count, 1 , 'N' );
2579 
2580 			END IF;
2581 
2582 			  IF l_orig_item_id_tbl.count > 0 AND l_new_item_id_tbl.count > 0 THEN
2583 
2584 			   FORALL  i  IN l_orig_item_id_tbl.FIRST..l_orig_item_id_tbl.LAST
2585                      UPDATE aso_quote_line_details
2586                      SET config_item_id = l_new_item_id_tbl(i)
2587                         ,last_update_date = SYSDATE
2588                         ,last_updated_by =G_USER_ID
2589                         ,last_update_login = G_LOGIN_ID
2590 
2591                      WHERE config_header_id = l_config_hdr_id
2592                      AND config_revision_num = l_config_rev_nbr
2593                      AND config_item_id = l_orig_item_id_tbl(i);
2594 
2595 			  END IF;
2596 
2597                END IF;
2598 
2599 		    END IF; -- 'MDL'
2600 
2601 
2602          END IF; -- checking index link tbl
2603 
2604       END LOOP;
2605 
2606 -- Added a new IF for Copy Line Functionality
2607 
2608 IF ( P_Qte_Line_Id IS NULL ) OR (P_Qte_Line_Id = FND_API.G_MISS_NUM) THEN
2609 
2610       FOR price_adj_rltship_rec IN c_price_adj_rel ( p_qte_header_id ) LOOP
2611          lx_price_adj_rltship_id    := FND_API.G_MISS_NUM;
2612 
2613          IF aso_debug_pub.g_debug_flag = 'Y' THEN
2614 	    aso_debug_pub.ADD ( 'l_line_index_link_tbl ( price_adj_rltship_rec.quote_line_id ) = ' || l_line_index_link_tbl ( price_adj_rltship_rec.quote_line_id ) , 1 , 'N' );
2615 	    END IF;
2616 
2617          OPEN C_Get_Ship_Id (
2618             l_line_index_link_tbl ( price_adj_rltship_rec.quote_line_id )
2619           );
2620          FETCH C_Get_Ship_Id INTO l_ship_id;
2621          CLOSE C_Get_Ship_Id;
2622 
2623          IF aso_debug_pub.g_debug_flag = 'Y' THEN
2624 	    aso_debug_pub.ADD ( 'l_ship_id from line_id = ' || l_ship_id , 1 , 'N' );
2625 	    aso_debug_pub.ADD ( 'price_adj_rltship_rec.price_adjustment_id = ' || price_adj_rltship_rec.price_adjustment_id , 1 , 'N' );
2626 	    aso_debug_pub.ADD ( 'price_adj_rltship_rec.rltd_price_adj_id = ' || price_adj_rltship_rec.rltd_price_adj_id , 1 , 'N' );
2627 	    END IF;
2628 
2629          ASO_PRICE_RLTSHIPS_PKG.Insert_Row (
2630             px_ADJ_RELATIONSHIP_ID =>       lx_price_adj_rltship_id
2631           , p_creation_date =>               SYSDATE
2632           , p_CREATED_BY =>                  G_USER_ID
2633           , p_LAST_UPDATE_DATE =>            SYSDATE
2634           , p_LAST_UPDATED_BY =>             G_USER_ID
2635           , p_LAST_UPDATE_LOGIN =>           G_LOGIN_ID
2636           , p_PROGRAM_APPLICATION_ID =>      price_adj_rltship_rec.PROGRAM_APPLICATION_ID
2637           , p_PROGRAM_ID =>                  price_adj_rltship_rec.PROGRAM_ID
2638           , p_PROGRAM_UPDATE_DATE =>         price_adj_rltship_rec.PROGRAM_UPDATE_DATE
2639           , p_REQUEST_ID =>                  price_adj_rltship_rec.REQUEST_ID
2640           , p_QUOTE_LINE_ID =>               l_line_index_link_tbl ( price_adj_rltship_rec.quote_line_id )
2641           , p_PRICE_ADJUSTMENT_ID =>         l_price_index_link_tbl ( price_adj_rltship_rec.price_adjustment_id )
2642           , p_RLTD_PRICE_ADJ_ID =>           l_price_index_link_tbl ( price_adj_rltship_rec.rltd_price_adj_id )
2643           , p_QUOTE_SHIPMENT_ID =>           l_ship_id
2644 		, p_OBJECT_VERSION_NUMBER =>       price_adj_rltship_rec.OBJECT_VERSION_NUMBER
2645           );
2646       END LOOP;
2647 
2648       -- copy line relationships
2649 
2650       FOR line_rel_rec IN c_line_relation ( p_qte_header_id ) LOOP
2651          lx_LINE_RELATIONSHIP_ID    := FND_API.G_MISS_NUM;
2652          ASO_LINE_RELATIONSHIPS_PKG.Insert_Row (
2653              px_LINE_RELATIONSHIP_ID =>      lx_LINE_RELATIONSHIP_ID
2654           , p_CREATION_DATE =>               SYSDATE
2655           , p_CREATED_BY =>                  G_USER_ID
2656           , p_LAST_UPDATED_BY =>             G_USER_ID
2657           , p_LAST_UPDATE_DATE =>            SYSDATE
2658           , p_LAST_UPDATE_LOGIN =>           G_LOGIN_ID
2659           , p_REQUEST_ID =>                  line_rel_rec.REQUEST_ID
2660           , p_PROGRAM_APPLICATION_ID =>      line_rel_rec.PROGRAM_APPLICATION_ID
2661           , p_PROGRAM_ID =>                  line_rel_rec.PROGRAM_ID
2662           , p_PROGRAM_UPDATE_DATE =>         line_rel_rec.PROGRAM_UPDATE_DATE
2663           , p_QUOTE_LINE_ID =>               l_line_index_link_tbl ( line_rel_rec.quote_line_id )
2664           , p_RELATED_QUOTE_LINE_ID =>       l_line_index_link_tbl ( line_rel_rec.related_quote_line_id )
2665           , p_RECIPROCAL_FLAG =>             line_rel_rec.RECIPROCAL_FLAG
2666           , P_RELATIONSHIP_TYPE_CODE =>      line_rel_rec.RELATIONSHIP_TYPE_CODE
2667 		, p_OBJECT_VERSION_NUMBER =>       line_rel_rec.OBJECT_VERSION_NUMBER
2668           );
2669       END LOOP;
2670 
2671 -- Copy for only that line if a line id was passed in
2672 ELSIF ( P_Qte_Line_Id IS NOT NULL ) AND (P_Qte_Line_Id <> FND_API.G_MISS_NUM) THEN
2673 
2674 IF aso_debug_pub.g_debug_flag = 'Y' THEN
2675 aso_debug_pub.ADD ( ' Copying price adj records ', 1 , 'N' );
2676 aso_debug_pub.ADD ( 'Line Index Tbl Count = '||to_char(l_line_index_link_tbl.count) , 1 , 'N' );
2677 END IF;
2678 
2679       FOR price_adj_rltship_rec IN c_price_adj_rel_from_line_id ( P_Qte_Line_Id ) LOOP
2680          lx_price_adj_rltship_id    := FND_API.G_MISS_NUM;
2681          IF aso_debug_pub.g_debug_flag = 'Y' THEN
2682 	    aso_debug_pub.ADD ( 'l_line_index_link_tbl ( price_adj_rltship_rec.quote_line_id ) = '
2683                              || l_line_index_link_tbl( price_adj_rltship_rec.quote_line_id ) , 1 , 'N' );
2684          END IF;
2685 
2686          OPEN C_Get_Ship_Id (
2687             l_line_index_link_tbl ( price_adj_rltship_rec.quote_line_id )
2688           );
2689          FETCH C_Get_Ship_Id INTO l_ship_id;
2690          CLOSE C_Get_Ship_Id;
2691 
2692          IF aso_debug_pub.g_debug_flag = 'Y' THEN
2693 	    aso_debug_pub.ADD ( 'l_ship_id from line_id = ' || l_ship_id , 1 , 'N' );
2694 	    END IF;
2695 
2696          ASO_PRICE_RLTSHIPS_PKG.Insert_Row (
2697              px_ADJ_RELATIONSHIP_ID =>       lx_price_adj_rltship_id
2698           , p_creation_date =>               SYSDATE
2699           , p_CREATED_BY =>                  G_USER_ID
2700           , p_LAST_UPDATE_DATE =>            SYSDATE
2701           , p_LAST_UPDATED_BY =>             G_USER_ID
2702           , p_LAST_UPDATE_LOGIN =>           G_LOGIN_ID
2703           , p_PROGRAM_APPLICATION_ID =>      price_adj_rltship_rec.PROGRAM_APPLICATION_ID
2704           , p_PROGRAM_ID =>                  price_adj_rltship_rec.PROGRAM_ID
2705           , p_PROGRAM_UPDATE_DATE =>         price_adj_rltship_rec.PROGRAM_UPDATE_DATE
2706           , p_REQUEST_ID =>                  price_adj_rltship_rec.REQUEST_ID
2707           , p_QUOTE_LINE_ID =>               l_line_index_link_tbl ( price_adj_rltship_rec.quote_line_id )
2708           , p_PRICE_ADJUSTMENT_ID =>         l_price_index_link_tbl ( price_adj_rltship_rec.price_adjustment_id )
2709           , p_RLTD_PRICE_ADJ_ID =>           l_price_index_link_tbl ( price_adj_rltship_rec.rltd_price_adj_id )
2710           , p_QUOTE_SHIPMENT_ID =>           l_ship_id
2711 		, p_OBJECT_VERSION_NUMBER =>       price_adj_rltship_rec.OBJECT_VERSION_NUMBER
2712           );
2713       END LOOP;
2714 
2715 
2716       -- copy line relationships
2717 
2718       IF aso_debug_pub.g_debug_flag = 'Y' THEN
2719 	 aso_debug_pub.ADD ( ' Copying line relationship records ', 1 , 'N' );
2720 	 END IF;
2721 
2722       FOR line_rel_rec IN c_line_relation_from_line_id ( P_Qte_Line_Id ) LOOP
2723          lx_LINE_RELATIONSHIP_ID    := FND_API.G_MISS_NUM;
2724          ASO_LINE_RELATIONSHIPS_PKG.Insert_Row (
2725              px_LINE_RELATIONSHIP_ID =>      lx_LINE_RELATIONSHIP_ID
2726           , p_CREATION_DATE =>               SYSDATE
2727           , p_CREATED_BY =>                  G_USER_ID
2728           , p_LAST_UPDATED_BY =>             G_USER_ID
2729           , p_LAST_UPDATE_DATE =>            SYSDATE
2730           , p_LAST_UPDATE_LOGIN =>           G_LOGIN_ID
2731           , p_REQUEST_ID =>                  line_rel_rec.REQUEST_ID
2732           , p_PROGRAM_APPLICATION_ID =>      line_rel_rec.PROGRAM_APPLICATION_ID
2733           , p_PROGRAM_ID =>                  line_rel_rec.PROGRAM_ID
2734           , p_PROGRAM_UPDATE_DATE =>         line_rel_rec.PROGRAM_UPDATE_DATE
2735           , p_QUOTE_LINE_ID =>               l_line_index_link_tbl ( line_rel_rec.quote_line_id )
2736           , p_RELATED_QUOTE_LINE_ID =>       l_line_index_link_tbl ( line_rel_rec.related_quote_line_id )
2737           , p_RECIPROCAL_FLAG =>             line_rel_rec.RECIPROCAL_FLAG
2738           , P_RELATIONSHIP_TYPE_CODE =>      line_rel_rec.RELATIONSHIP_TYPE_CODE
2739 		, p_OBJECT_VERSION_NUMBER =>       line_rel_rec.OBJECT_VERSION_NUMBER
2740           );
2741       END LOOP;
2742 
2743 END IF;
2744 
2745 
2746  -- Pass back the new quote line id which was created
2747 IF ( P_Qte_Line_Id IS NOT NULL ) AND (P_Qte_Line_Id <> FND_API.G_MISS_NUM) THEN
2748 
2749     IF aso_debug_pub.g_debug_flag = 'Y' THEN
2750     aso_debug_pub.ADD ( 'Calling Update Quote to re-price the quote  ', 1 , 'N' );
2751     END IF;
2752   -- Call Update Quote for repricing the quote
2753 
2754     --   l_control_rec.pricing_request_type          :=  'ASO';
2755     --   l_control_rec.header_pricing_event          :=  'BATCH';
2756 
2757 
2758        l_Qte_Header_Rec.quote_header_id := P_Qte_Header_Id;
2759 	  l_Qte_Header_Rec.last_update_date := l_last_update_date;
2760 	  l_Qte_Header_Rec.pricing_status_indicator :=  P_Qte_Header_Rec.pricing_status_indicator;
2761 	  l_Qte_Header_Rec.tax_status_indicator :=  P_Qte_Header_Rec.tax_status_indicator;
2762 	  l_Qte_Header_Rec.price_updated_date :=  P_Qte_Header_Rec.price_updated_date;
2763 	  l_Qte_Header_Rec.tax_updated_date :=  P_Qte_Header_Rec.tax_updated_date;
2764 
2765   aso_quote_pub.update_quote (
2766       p_api_version_number         => 1.0,
2767       p_init_msg_list              => fnd_api.g_false,
2768       p_commit                     => fnd_api.g_false,
2769       p_control_rec                => p_control_rec,
2770       p_qte_header_rec             => l_Qte_Header_Rec,
2771       p_hd_price_attributes_tbl    => aso_quote_pub.g_miss_price_attributes_tbl,
2772       p_hd_payment_tbl             => aso_quote_pub.g_miss_payment_tbl,
2773       p_hd_shipment_tbl            => aso_quote_pub.g_miss_shipment_tbl,
2774       p_hd_freight_charge_tbl      => aso_quote_pub.g_miss_freight_charge_tbl,
2775       p_hd_tax_detail_tbl          => aso_quote_pub.g_miss_tax_detail_tbl,
2776       p_qte_line_tbl               => aso_quote_pub.g_miss_qte_line_tbl,
2777       p_qte_line_dtl_tbl           => aso_quote_pub.g_miss_qte_line_dtl_tbl,
2778       p_line_attr_ext_tbl          => aso_quote_pub.G_MISS_Line_Attribs_Ext_TBL,
2779       p_line_rltship_tbl           => aso_quote_pub.g_miss_line_rltship_tbl,
2780       p_price_adjustment_tbl       => aso_quote_pub.g_miss_price_adj_tbl,
2781       p_price_adj_attr_tbl         => aso_quote_pub.g_miss_price_adj_attr_tbl,
2782       p_price_adj_rltship_tbl      => aso_quote_pub.g_miss_price_adj_rltship_tbl,
2783       p_ln_price_attributes_tbl    => aso_quote_pub.g_miss_price_attributes_tbl,
2784       p_ln_payment_tbl             => aso_quote_pub.g_miss_payment_tbl,
2785       p_ln_shipment_tbl            => aso_quote_pub.g_miss_shipment_tbl,
2786       p_ln_freight_charge_tbl      => aso_quote_pub.g_miss_freight_charge_tbl,
2787       p_ln_tax_detail_tbl          => aso_quote_pub.g_miss_tax_detail_tbl,
2788       x_qte_header_rec             => x_qte_header_rec,
2789       x_qte_line_tbl               => x_qte_line_tbl,
2790       x_qte_line_dtl_tbl           => x_qte_line_dtl_tbl,
2791       x_hd_price_attributes_tbl    => x_hd_price_attributes_tbl,
2792       x_hd_payment_tbl             => x_hd_payment_tbl,
2793       x_hd_shipment_tbl            => x_hd_shipment_tbl,
2794       x_hd_freight_charge_tbl      => x_hd_freight_charge_tbl,
2795       x_hd_tax_detail_tbl          => x_hd_tax_detail_tbl,
2796       x_line_attr_ext_tbl          => x_line_attr_ext_tbl,
2797       x_line_rltship_tbl           => x_line_rltship_tbl,
2798       x_price_adjustment_tbl       => x_price_adjustment_tbl,
2799       x_price_adj_attr_tbl         => x_price_adj_attr_tbl,
2800       x_price_adj_rltship_tbl      => x_price_adj_rltship_tbl,
2801       x_ln_price_attributes_tbl    => x_ln_price_attributes_tbl,
2802       x_ln_payment_tbl             => x_ln_payment_tbl,
2803       x_ln_shipment_tbl            => x_ln_shipment_tbl,
2804       x_ln_freight_charge_tbl      => x_ln_freight_charge_tbl,
2805       x_ln_tax_detail_tbl          => x_ln_tax_detail_tbl,
2806       x_return_status              => l_return_status,
2807       x_msg_count                  => x_msg_count,
2808       x_msg_data                   => x_msg_data
2809     );
2810 
2811     IF aso_debug_pub.g_debug_flag = 'Y' THEN
2812     aso_debug_pub.ADD ( ' Return Status from Update Quote = '||l_return_status, 1 , 'N' );
2813     END IF;
2814 
2815                IF ( l_return_status = FND_API.G_RET_STS_UNEXP_ERROR ) THEN
2816                   x_return_status            := FND_API.G_RET_STS_UNEXP_ERROR;
2817                   IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
2818                      FND_MESSAGE.Set_Name ('ASO' , 'ASO_API_UNEXP_ERROR' );
2819                      FND_MSG_PUB.ADD;
2820                   END IF;
2821                   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2822                ELSIF ( l_return_status = FND_API.G_RET_STS_ERROR ) THEN
2823                   x_return_status            := FND_API.G_RET_STS_ERROR;
2824                   RAISE FND_API.G_EXC_ERROR;
2825                END IF;
2826 
2827    IF aso_debug_pub.g_debug_flag = 'Y' THEN
2828    aso_debug_pub.ADD ( ' After Calling Update Quote  ', 1 , 'N' );
2829    END IF;
2830 
2831   X_Qte_Line_Id := lx_qte_line_rec.quote_line_id;
2832   IF aso_debug_pub.g_debug_flag = 'Y' THEN
2833   aso_debug_pub.ADD ('X_Qte_Line_Id =   '||to_char(X_Qte_Line_Id), 1 , 'N' );
2834   END IF;
2835 
2836 ELSE
2837 
2838  X_Qte_Line_Id := NULL;
2839 END IF;
2840 
2841       IF aso_debug_pub.g_debug_flag = 'Y' THEN
2842 	 aso_debug_pub.ADD ( ' End Copy Line Rows API ', 1 , 'N' );
2843 	 END IF;
2844 
2845       x_return_status            := FND_API.G_RET_STS_SUCCESS;
2846 
2847       --
2848       -- End of API body
2849       --
2850 
2851       -- Standard check for p_commit
2852       IF FND_API.to_Boolean ( p_commit ) THEN
2853          COMMIT WORK;
2854       END IF;
2855 
2856       -- Standard call to get message count and if count is 1, get message info.
2857       FND_MSG_PUB.Count_And_Get (
2858           p_count =>                      x_msg_count
2859        , p_data =>                        x_msg_data
2860        );
2861 
2862    EXCEPTION
2863 
2864       WHEN FND_API.G_EXC_ERROR THEN
2865          ASO_UTILITY_PVT.HANDLE_EXCEPTIONS (
2866              P_API_NAME =>                   L_API_NAME
2867           , P_PKG_NAME =>                    G_PKG_NAME
2868           , P_EXCEPTION_LEVEL =>             FND_MSG_PUB.G_MSG_LVL_ERROR
2869           , P_PACKAGE_TYPE =>                ASO_UTILITY_PVT.G_PVT
2870           , X_MSG_COUNT =>                   X_MSG_COUNT
2871           , X_MSG_DATA =>                    X_MSG_DATA
2872           , X_RETURN_STATUS =>               X_RETURN_STATUS
2873           );
2874 
2875       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2876          ASO_UTILITY_PVT.HANDLE_EXCEPTIONS (
2877              P_API_NAME =>                   L_API_NAME
2878           , P_PKG_NAME =>                    G_PKG_NAME
2879           , P_EXCEPTION_LEVEL =>             FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
2880           , P_PACKAGE_TYPE =>                ASO_UTILITY_PVT.G_PVT
2881           , X_MSG_COUNT =>                   X_MSG_COUNT
2882           , X_MSG_DATA =>                    X_MSG_DATA
2883           , X_RETURN_STATUS =>               X_RETURN_STATUS
2884           );
2885 
2886       WHEN OTHERS THEN
2887          ASO_UTILITY_PVT.HANDLE_EXCEPTIONS (
2888              P_API_NAME =>                   L_API_NAME
2889           , P_PKG_NAME =>                    G_PKG_NAME
2890           , P_SQLCODE =>                     SQLCODE
2891           , P_SQLERRM =>                     SQLERRM
2892           , P_EXCEPTION_LEVEL =>             ASO_UTILITY_PVT.G_EXC_OTHERS
2893           , P_PACKAGE_TYPE =>                ASO_UTILITY_PVT.G_PVT
2894           , X_MSG_COUNT =>                   X_MSG_COUNT
2895           , X_MSG_DATA =>                    X_MSG_DATA
2896           , X_RETURN_STATUS =>               X_RETURN_STATUS
2897           );
2898 
2899    END Copy_Line_Rows;
2900 
2901 
2902    PROCEDURE config_copy (
2903        p_old_config_header_id IN NUMBER
2904     , p_old_config_revision_num IN NUMBER
2905     , p_config_header_id IN NUMBER
2906     , p_config_revision_num IN NUMBER
2907     , p_new_qte_header_id IN NUMBER
2908     , p_qte_header_id IN NUMBER
2909     , p_copy_quote_control_rec IN ASO_COPY_QUOTE_PUB.Copy_Quote_Control_Rec_Type
2910             := ASO_COPY_QUOTE_PUB.G_MISS_Copy_Quote_Control_Rec
2911     , lx_line_index_link_tbl IN OUT NOCOPY ASO_QUOTE_HEADERS_PVT.Index_Link_Tbl_Type
2912     , lx_price_index_link_tbl IN OUT NOCOPY ASO_QUOTE_HEADERS_PVT.Index_Link_Tbl_Type
2913     , X_Return_Status OUT NOCOPY /* file.sql.39 change */   VARCHAR2
2914     , X_Msg_Count OUT NOCOPY /* file.sql.39 change */   NUMBER
2915     , X_Msg_Data OUT NOCOPY /* file.sql.39 change */   VARCHAR2
2916     , p_line_quantity  IN NUMBER := FND_API.G_MISS_NUM
2917    ) IS
2918 
2919       -- made changes to the cursor as per bug4036748
2920       CURSOR line_id_from_config (
2921           config_hdr_id NUMBER
2922        , config_rev_number NUMBER
2923        , qte_hdr_id NUMBER
2924        ) IS
2925          SELECT   ASO_Quote_Line_Details.QUOTE_LINE_ID
2926          FROM     ASO_Quote_Line_Details
2927                 , ASO_Quote_Lines_all
2928          WHERE    ASO_Quote_Line_Details.config_header_id = config_hdr_id
2929          AND      ASO_Quote_Line_Details.config_revision_num = config_rev_number
2930          AND      ASO_quote_line_details.quote_line_id = ASO_Quote_Lines_all.quote_line_id
2931          AND      ASO_quote_line_details.ref_type_code = 'CONFIG'
2932 	    AND      ASO_quote_line_details.ref_line_id is not null
2933          AND      aso_quote_lines_all.quote_header_id = qte_hdr_id
2934          ORDER BY aso_quote_line_details.bom_sort_order;
2935 
2936       CURSOR C_Serviceable_Product (
2937           l_organization_id NUMBER
2938        , l_inv_item_id NUMBER
2939        ) IS
2940          SELECT serviceable_product_flag
2941          FROM   MTL_SYSTEM_ITEMS_VL
2942          WHERE  inventory_item_id = l_inv_item_id
2943          AND    organization_id = l_organization_id;
2944 
2945       l_payment_tbl ASO_QUOTE_PUB.Payment_Tbl_Type;
2946       l_shipment_tbl ASO_QUOTE_PUB.Shipment_Tbl_Type;
2947       l_shipment_rec ASO_QUOTE_PUB.Shipment_Rec_Type;
2948       l_freight_charge_tbl ASO_QUOTE_PUB.Freight_Charge_Tbl_Type;
2949       l_tax_detail_tbl ASO_QUOTE_PUB.Tax_Detail_Tbl_Type;
2950       l_Price_Attr_Tbl ASO_QUOTE_PUB.Price_Attributes_Tbl_Type;
2951       l_Price_Adj_Tbl ASO_QUOTE_PUB.Price_Adj_Tbl_Type;
2952       l_Price_Adj_Attr_Tbl ASO_QUOTE_PUB.Price_Adj_Attr_Tbl_Type;
2953       l_qte_line_dtl_tbl ASO_QUOTE_PUB.Qte_Line_Dtl_Tbl_Type;
2954       l_qte_line_rec ASO_QUOTE_PUB.Qte_Line_Rec_Type;
2955       l_Line_Attr_Ext_Tbl ASO_QUOTE_PUB.Line_Attribs_Ext_Tbl_Type;
2956       lx_ln_Price_Adj_Tbl ASO_QUOTE_PUB.Price_Adj_Tbl_Type;
2957       lx_qte_line_rec ASO_QUOTE_PUB.Qte_Line_Rec_Type;
2958       l_control_rec ASO_QUOTE_PUB.Control_Rec_Type;
2959       LX_PRICE_ADJ_RLTSHIP_ID NUMBER;
2960       LX_LINE_RELATIONSHIP_ID NUMBER;
2961       X_hd_Attr_Ext_Tbl ASO_QUOTE_PUB.Line_Attribs_Ext_Tbl_Type;
2962       X_Sales_Credit_Tbl ASO_QUOTE_PUB.Sales_Credit_Tbl_Type;
2963       X_Quote_Party_Tbl ASO_QUOTE_PUB.Quote_Party_Tbl_Type;
2964       l_hd_Attr_Ext_Tbl ASO_QUOTE_PUB.Line_Attribs_Ext_Tbl_Type;
2965       l_quote_party_tbl ASO_QUOTE_PUB.Quote_Party_Tbl_Type;
2966       l_quote_party_rec ASO_QUOTE_PUB.Quote_Party_rec_Type;
2967       l_sales_credit_tbl ASO_QUOTE_PUB.Sales_Credit_Tbl_Type;
2968       l_sales_credit_rec ASO_QUOTE_PUB.Sales_Credit_rec_Type;
2969       l_return_status VARCHAR2 ( 1 );
2970       qte_line_id NUMBER;
2971       i NUMBER;
2972       j NUMBER;
2973       k NUMBER;
2974       l_quote_line_id NUMBER;
2975       l_serviceable_product_flag VARCHAR2 ( 1 );
2976       l_api_version CONSTANT NUMBER := 1.0;
2977       l_ref_ln_id NUMBER;
2978       l_ato_line_id NUMBER;
2979 	 l_top_model_line_id NUMBER;
2980 
2981 
2982       Cursor get_qte_line_number (x_qte_line_id NUMBER)  IS
2983       SELECT line_number
2984       FROM aso_quote_lines_all
2985       WHERE quote_line_id = x_qte_line_id ;
2986 
2987       l_line_number  NUMBER;
2988       l_old_quote_line_id  Number;
2989 
2990       CURSOR get_old_line_id (
2991           config_hdr_id NUMBER
2992        , config_rev_number NUMBER
2993        , qte_hdr_id NUMBER
2994        ) IS
2995          SELECT   ASO_Quote_Line_Details.QUOTE_LINE_ID
2996          FROM     ASO_Quote_Line_Details
2997                 , ASO_Quote_Lines_all
2998          WHERE    ASO_Quote_Line_Details.config_header_id = config_hdr_id
2999          AND      ASO_Quote_Line_Details.config_revision_num = config_rev_number
3000          AND      ASO_quote_line_details.quote_line_id = ASO_Quote_Lines_all.quote_line_id
3001          AND      ASO_Quote_Lines_all.item_type_code = 'MDL'
3002          AND      aso_quote_lines_all.quote_header_id = qte_hdr_id;
3003 
3004       l_quote_party_tbl_out      ASO_QUOTE_PUB.Quote_Party_Tbl_Type;
3005       l_sales_credit_tbl_out     ASO_QUOTE_PUB.Sales_Credit_Tbl_Type;
3006       l_tax_detail_tbl_out       ASO_QUOTE_PUB.Tax_Detail_Tbl_Type;
3007       l_freight_charge_tbl_out   ASO_QUOTE_PUB.Freight_Charge_Tbl_Type;
3008       l_shipment_tbl_out         ASO_QUOTE_PUB.Shipment_Tbl_Type;
3009       l_payment_tbl_out          ASO_QUOTE_PUB.Payment_Tbl_Type;
3010       l_Price_Adj_Attr_Tbl_out   ASO_QUOTE_PUB.Price_Adj_Attr_Tbl_Type;
3011       l_Price_Attr_Tbl_out       ASO_QUOTE_PUB.Price_Attributes_Tbl_Type;
3012       l_qte_line_dtl_tbl_out     ASO_QUOTE_PUB.Qte_Line_Dtl_Tbl_Type;
3013       l_Line_Attr_Ext_Tbl_out    ASO_QUOTE_PUB.Line_Attribs_Ext_Tbl_Type;
3014 
3015       l_dup_Price_Adj_Tbl ASO_QUOTE_PUB.Price_Adj_Tbl_Type;
3016 
3017 
3018    BEGIN
3019 
3020       IF aso_debug_pub.g_debug_flag = 'Y' THEN
3021 	 aso_debug_pub.ADD ('Copy_Config - Begin ' , 1, 'Y' );
3022       aso_debug_pub.ADD ( 'Copy_Config - p_new_qte_header_id ' || p_new_qte_header_id , 1 , 'Y' );
3023       aso_debug_pub.ADD ( 'Copy_Config - p_qte_header_id ' || p_qte_header_id , 1 , 'Y' );
3024 	 END IF;
3025 
3026       x_return_status            := FND_API.G_RET_STS_SUCCESS;
3027 
3028       OPEN line_id_from_config (
3029           p_old_config_header_id
3030        , p_old_config_revision_num
3031        , p_qte_header_id
3032        );
3033       LOOP
3034          FETCH line_id_from_config INTO qte_line_id;
3035          EXIT WHEN line_id_from_config%NOTFOUND;
3036          IF aso_debug_pub.g_debug_flag = 'Y' THEN
3037 	    aso_debug_pub.ADD ( 'Copy_Config - inside cursor qte_line_id ' || qte_line_id , 1 , 'Y' );
3038 	    END IF;
3039 
3040          l_qte_line_rec := ASO_UTILITY_PVT.Query_Qte_Line_Row ( qte_line_id );
3041 
3042           IF p_new_qte_header_id = p_qte_header_id THEN
3043 
3044           OPEN  get_old_line_id (
3045           p_old_config_header_id
3046         , p_old_config_revision_num
3047         , p_qte_header_id
3048          );
3049 
3050          FETCH get_old_line_id INTO l_old_quote_line_id;
3051          CLOSE get_old_line_id;
3052 
3053            OPEN get_qte_line_number(lx_line_index_link_tbl(l_old_quote_line_id));
3054            FETCH get_qte_line_number into l_line_number;
3055            CLOSE get_qte_line_number;
3056 
3057            IF aso_debug_pub.g_debug_flag = 'Y' THEN
3058 		 aso_debug_pub.ADD ( 'Line Number --  ' || l_line_number , 1 , 'Y' );
3059 		 END IF;
3060 
3061 
3062            l_qte_line_rec.line_number := l_line_number;
3063 
3064           END IF;
3065 
3066          l_qte_line_rec.quote_header_id := p_new_qte_header_id;
3067 
3068          -- Setting the line quantity ( as per changes for split_line API )
3069          IF (p_line_quantity is not null ) and (p_line_quantity <>  FND_API.G_MISS_NUM ) THEN
3070           l_qte_line_rec.quantity := p_line_quantity;
3071          END IF;
3072 
3073          l_qte_line_dtl_tbl := ASO_UTILITY_PVT.Query_Line_Dtl_Rows ( qte_line_id );
3074 
3075          FOR k IN 1 .. l_qte_line_dtl_tbl.COUNT LOOP
3076             l_qte_line_dtl_tbl ( k ).config_header_id := p_config_header_id;
3077             l_qte_line_dtl_tbl ( k ).config_revision_num := p_config_revision_num;
3078          END LOOP;
3079 
3080          l_line_attr_Ext_Tbl := ASO_UTILITY_PVT.Query_Line_Attribs_Ext_Rows ( qte_line_id );
3081 
3082          l_price_adj_tbl := ASO_UTILITY_PVT.Query_Price_Adj_Rows ( p_qte_header_id , qte_line_id );
3083 	    l_dup_price_adj_tbl := l_price_adj_tbl;
3084 
3085          l_price_adj_attr_tbl := ASO_UTILITY_PVT.Query_Price_Adj_Attr_Rows(p_price_adj_tbl => l_price_adj_tbl);
3086 
3087          l_price_attr_tbl := ASO_UTILITY_PVT.Query_Price_Attr_Rows ( p_qte_header_id , qte_line_id );
3088 
3089          --l_payment_tbl := ASO_UTILITY_PVT.Query_Payment_Rows ( p_qte_header_id , qte_line_id );
3090 
3091          l_shipment_tbl := ASO_UTILITY_PVT.Query_Shipment_Rows ( p_qte_header_id , qte_line_id );
3092 
3093          l_sales_credit_tbl := ASO_UTILITY_PVT.Query_Sales_Credit_Row ( p_qte_header_id , qte_line_id );
3094 
3095          l_quote_party_tbl := ASO_UTILITY_PVT.Query_Quote_Party_Row ( p_qte_header_id , qte_line_id );
3096 
3097          l_freight_charge_tbl := ASO_UTILITY_PVT.Query_Freight_Charge_Rows ( l_shipment_tbl );
3098 
3099          l_tax_detail_tbl := ASO_UTILITY_PVT.Query_Tax_Detail_Rows ( p_qte_header_id , qte_line_id , l_shipment_tbl );
3100 
3101          OPEN C_Serviceable_Product ( l_qte_line_rec.organization_id , l_qte_line_rec.inventory_item_id );
3102          FETCH C_Serviceable_Product INTO l_serviceable_product_flag;
3103          CLOSE C_Serviceable_Product;
3104 
3105          IF aso_debug_pub.g_debug_flag = 'Y' THEN
3106 	       aso_debug_pub.ADD ('Copy_Config - After querying all the records for the line ' , 1, 'Y' );
3107 	    END IF;
3108 
3109          FOR j IN 1 .. l_qte_line_dtl_tbl.COUNT LOOP
3110 
3111             IF aso_debug_pub.g_debug_flag = 'Y' THEN
3112 	           aso_debug_pub.ADD ('Copy_Config - l_qte_line_dtl_tbl('||j||')ref_line_id: '||l_qte_line_dtl_tbl(j).ref_line_id , 1, 'Y' );
3113 	           aso_debug_pub.ADD ('Copy_Config - l_qte_line_dtl_tbl('||j||')top_model_line_id: '||l_qte_line_dtl_tbl(j).top_model_line_id , 1, 'Y' );
3114 	           aso_debug_pub.ADD ('Copy_Config - l_qte_line_dtl_tbl('||j||')ato_line_id: '||l_qte_line_dtl_tbl(j).ato_line_id , 1, 'Y' );
3115 	       END IF;
3116 
3117             l_ref_ln_id := lx_line_index_link_tbl ( l_qte_line_dtl_tbl ( j ).ref_line_id );
3118             l_qte_line_dtl_tbl ( j ).ref_line_id := l_ref_ln_id;
3119 
3120 		 IF (l_qte_line_dtl_tbl(j).top_model_line_id IS NOT NULL AND l_qte_line_dtl_tbl(j).top_model_line_id <> FND_API.G_MISS_NUM
3121 		     and lx_line_index_link_tbl.exists(l_qte_line_dtl_tbl(j).top_model_line_id) ) THEN
3122 		     l_top_model_line_id := lx_line_index_link_tbl ( l_qte_line_dtl_tbl ( j ).top_model_line_id );
3123                l_qte_line_dtl_tbl ( j ).top_model_line_id := l_top_model_line_id;
3124 		 END IF;
3125 
3126 		 IF (l_qte_line_dtl_tbl ( j ).ato_line_id IS NOT NULL AND l_qte_line_dtl_tbl ( j ).ato_line_id <> FND_API.G_MISS_NUM
3127 		     and lx_line_index_link_tbl.exists(l_qte_line_dtl_tbl(j).ato_line_id) ) THEN
3128 		      l_ato_line_id := lx_line_index_link_tbl ( l_qte_line_dtl_tbl ( j ).ato_line_id );
3129                 l_qte_line_dtl_tbl ( j ).ato_line_id := l_ato_line_id;
3130 		 END IF;
3131 
3132 
3133          END LOOP;
3134 
3135          l_quote_line_id := l_qte_line_rec.quote_line_id;
3136          l_qte_line_rec.quote_line_id := NULL;
3137          l_qte_line_rec.object_version_number := FND_API.G_MISS_NUM;
3138 
3139 
3140 	 --BC4J Fix
3141 
3142          FOR j IN 1 .. l_qte_line_dtl_tbl.COUNT LOOP
3143 	       l_qte_line_dtl_tbl(j).quote_line_detail_id := null;
3144             l_qte_line_dtl_tbl(j).object_version_number := FND_API.G_MISS_NUM;
3145 	    END LOOP;
3146 
3147          FOR j IN 1 .. l_price_adj_tbl.COUNT LOOP
3148             l_price_adj_tbl ( j ).QUOTE_HEADER_ID     := p_new_qte_header_id;
3149             l_price_adj_tbl ( j ).price_adjustment_id := null;
3150             l_price_adj_tbl ( j ).object_version_number := FND_API.G_MISS_NUM;
3151 	    END LOOP;
3152 
3153          FOR j IN 1 .. l_price_adj_attr_tbl.COUNT LOOP
3154             l_price_adj_attr_tbl(j).price_adj_attrib_id := null;
3155             l_price_adj_attr_tbl(j).object_version_number := FND_API.G_MISS_NUM;
3156 	    END LOOP;
3157 
3158          FOR j IN 1 .. l_price_attr_tbl.COUNT LOOP
3159             l_price_attr_tbl ( j ).QUOTE_HEADER_ID    := p_new_qte_header_id;
3160             l_price_attr_tbl ( j ).price_attribute_id := null;
3161             l_price_attr_tbl ( j ).object_version_number := FND_API.G_MISS_NUM;
3162 	    END LOOP;
3163 
3164          /* FOR j IN 1 .. l_payment_tbl.COUNT LOOP
3165             l_payment_tbl ( j ).QUOTE_HEADER_ID := p_new_qte_header_id;
3166             l_payment_tbl ( j ).CREDIT_CARD_APPROVAL_CODE := NULL;
3167             l_payment_tbl ( j ).CREDIT_CARD_APPROVAL_DATE := NULL;
3168             l_payment_tbl ( j ).payment_id := NULL;
3169 		  l_payment_tbl ( j ).object_version_number := FND_API.G_MISS_NUM;
3170          END LOOP;  */
3171 
3172          FOR j IN 1 .. l_shipment_tbl.COUNT LOOP
3173             l_shipment_tbl ( j ).QUOTE_HEADER_ID := p_new_qte_header_id;
3174             l_shipment_tbl ( j ).shipment_id := null;
3175 		  l_shipment_tbl ( j ).object_version_number := FND_API.G_MISS_NUM;
3176          END LOOP;
3177 
3178          FOR j IN 1 .. l_sales_credit_tbl.COUNT LOOP
3179             l_sales_credit_tbl(j).QUOTE_HEADER_ID := p_new_qte_header_id;
3180             l_sales_credit_tbl(j).sales_credit_id := null;
3181 		  l_sales_credit_tbl(j).object_version_number := FND_API.G_MISS_NUM;
3182          END LOOP;
3183 
3184          FOR j IN 1 .. l_tax_detail_tbl.COUNT LOOP
3185             l_tax_detail_tbl(j).tax_detail_id  := null;
3186 		  l_tax_detail_tbl(j).object_version_number := FND_API.G_MISS_NUM;
3187          END LOOP;
3188 
3189          FOR j IN 1 .. l_quote_party_tbl.COUNT LOOP
3190             l_quote_party_tbl(j).QUOTE_HEADER_ID := p_new_qte_header_id;
3191             l_quote_party_tbl(j).QUOTE_PARTY_ID := null;
3192 		  l_quote_party_tbl(j).object_version_number := FND_API.G_MISS_NUM;
3193          END LOOP;
3194 
3195          FOR j IN 1 .. l_line_attr_Ext_Tbl.COUNT LOOP
3196             l_line_attr_Ext_Tbl(j).line_attribute_id  := null;
3197 		  l_line_attr_Ext_Tbl(j).object_version_number := FND_API.G_MISS_NUM;
3198          END LOOP;
3199 
3200          FOR j IN 1 .. l_freight_charge_tbl.COUNT LOOP
3201             l_freight_charge_tbl(j).freight_charge_id  := null;
3202 		  l_freight_charge_tbl(j).object_version_number := FND_API.G_MISS_NUM;
3203          END LOOP;
3204 
3205 
3206 	--End of BC4J Fix
3207 
3208          IF aso_debug_pub.g_debug_flag = 'Y' THEN
3209 	    aso_debug_pub.ADD ( 'Copy_Config - Before insert_quote_line_rows: ' || l_quote_line_id , 1 , 'Y' );
3210 	    END IF;
3211          ASO_QUOTE_LINES_PVT.Insert_Quote_Line_Rows (
3212              p_control_rec =>                l_control_rec
3213           , P_qte_Line_Rec =>                l_qte_line_rec
3214           , P_qte_line_dtl_tbl =>            l_qte_line_dtl_tbl
3215           , P_Line_Attribs_Ext_Tbl =>        l_line_attr_ext_tbl
3216           , P_price_attributes_tbl =>        l_price_attr_tbl
3217           , P_Price_Adj_Tbl =>               l_price_adj_tbl
3218           , P_Price_Adj_Attr_Tbl =>          l_Price_Adj_Attr_Tbl
3219           , P_Payment_Tbl =>                 ASO_QUOTE_PUB.g_miss_payment_tbl
3220           , P_Shipment_Tbl =>                l_shipment_tbl
3221           , P_Freight_Charge_Tbl =>          l_freight_charge_tbl
3222           , P_Tax_Detail_Tbl =>              l_tax_detail_tbl
3223           , P_Sales_Credit_Tbl =>            l_sales_credit_tbl
3224           , P_Quote_Party_Tbl =>             l_quote_party_tbl
3225 
3226 		, x_qte_Line_Rec =>                lx_qte_line_rec
3227           , x_qte_line_dtl_tbl =>            l_qte_line_dtl_tbl_out
3228           , x_Line_Attribs_Ext_Tbl =>        l_line_attr_Ext_Tbl_out
3229           , x_price_attributes_tbl =>        l_price_attr_tbl_out
3230           , x_Price_Adj_Tbl =>               lx_ln_price_adj_tbl
3231           , x_Price_Adj_Attr_Tbl =>          l_Price_Adj_Attr_Tbl_out
3232           , x_Payment_Tbl =>                 l_payment_tbl_out
3233           , x_Shipment_Tbl =>                l_shipment_tbl_out
3234           , x_Freight_Charge_Tbl =>          l_freight_charge_tbl_out
3235           , x_Tax_Detail_Tbl =>              l_tax_detail_tbl_out
3236           , X_Sales_Credit_Tbl =>            l_sales_credit_tbl_out
3237           , X_Quote_Party_Tbl =>             l_quote_party_tbl_out
3238           , X_Return_Status =>               x_return_status
3239           , X_Msg_Count =>                   x_msg_count
3240           , X_Msg_Data =>                    x_msg_data
3241           );
3242 
3243       l_quote_party_tbl :=l_quote_party_tbl_out ;
3244       l_sales_credit_tbl :=l_sales_credit_tbl_out ;
3245       l_tax_detail_tbl := l_tax_detail_tbl_out    ;
3246       l_freight_charge_tbl := l_freight_charge_tbl_out  ;
3247       l_shipment_tbl := l_shipment_tbl_out   ;
3248       l_payment_tbl := l_payment_tbl_out     ;
3249       l_Price_Adj_Attr_Tbl  := l_Price_Adj_Attr_Tbl_out  ;
3250       l_Price_Attr_Tbl  :=  l_Price_Attr_Tbl_out     ;
3251       l_qte_line_dtl_tbl := l_qte_line_dtl_tbl_out   ;
3252       l_Line_Attr_Ext_Tbl  :=  l_Line_Attr_Ext_Tbl_out;
3253 
3254 
3255 
3256          IF ( x_return_status = FND_API.G_RET_STS_UNEXP_ERROR ) THEN
3257             IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
3258                FND_MESSAGE.Set_Name ('ASO' , 'ASO_API_UNEXP_ERROR' );
3259                FND_MESSAGE.Set_Token ( 'ROW' , 'ASO_COPYCONFIG AFTER_INSERT' , TRUE );
3260                FND_MSG_PUB.ADD;
3261             END IF;
3262             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3263          ELSIF ( x_return_status = FND_API.G_RET_STS_ERROR ) THEN
3264             RAISE FND_API.G_EXC_ERROR;
3265          END IF;
3266 
3267       -- Copy the payment record
3268        l_payment_tbl := ASO_UTILITY_PVT.Query_Payment_Rows ( p_qte_header_id , qte_line_id );
3269       IF l_payment_tbl.count > 0 then
3270 
3271          FOR j IN 1 .. l_payment_tbl.COUNT LOOP
3272             l_payment_tbl ( j ).QUOTE_HEADER_ID := p_new_qte_header_id;
3273             l_payment_tbl ( j ).QUOTE_LINE_ID := lx_qte_line_rec.quote_line_id;
3274             l_payment_tbl ( j ).CREDIT_CARD_APPROVAL_CODE := NULL;
3275             l_payment_tbl ( j ).CREDIT_CARD_APPROVAL_DATE := NULL;
3276             l_payment_tbl ( j ).payment_id := NULL;
3277             l_payment_tbl ( j ).object_version_number := FND_API.G_MISS_NUM;
3278          END LOOP;
3279 
3280        IF aso_debug_pub.g_debug_flag = 'Y' THEN
3281           aso_debug_pub.add('Copy_Config: Before  call to copy_payment_row ', 1, 'Y');
3282        END IF;
3283 
3284          aso_copy_quote_pvt.copy_payment_row(p_payment_rec => l_payment_tbl(1)  ,
3285                                              x_return_status => l_return_status,
3286                                              x_msg_count     => x_msg_count,
3287                                              x_msg_data      => x_msg_data);
3288 
3289        IF aso_debug_pub.g_debug_flag = 'Y' THEN
3290           aso_debug_pub.add('Copy_Config: After call to copy_payment_row: x_return_status: '||l_return_status, 1, 'Y');
3291        END IF;
3292       IF ( l_return_status = FND_API.G_RET_STS_UNEXP_ERROR ) THEN
3293          x_return_status            := FND_API.G_RET_STS_UNEXP_ERROR;
3294          IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
3295             FND_MESSAGE.Set_Name ('ASO' , 'ASO_API_UNEXP_ERROR' );
3296             FND_MESSAGE.Set_Token ( 'ROW' , 'ASO_COPYCONFIG AFTER_INSERT' , TRUE );
3297             FND_MSG_PUB.ADD;
3298          END IF;
3299          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3300       ELSIF ( l_return_status = FND_API.G_RET_STS_ERROR ) THEN
3301          x_return_status            := FND_API.G_RET_STS_ERROR;
3302          RAISE FND_API.G_EXC_ERROR;
3303       END IF;
3304 
3305     END IF;
3306      --  End Copy payment record
3307 
3308 
3309          -- Copying the sales supplement data for the line
3310       IF ( P_Copy_Quote_Control_Rec.New_Version = FND_API.G_TRUE ) THEN
3311 
3312                  IF aso_debug_pub.g_debug_flag = 'Y' THEN
3313                  aso_debug_pub.ADD ( 'Copy_Rows - Begin- before line copy_sales_supplement  ' , 1 , 'Y' );
3314                  END IF;
3315 
3316           ASO_COPY_QUOTE_PVT.INSERT_SALES_SUPP_DATA
3317           (
3318           P_Api_Version_Number          =>  1.0,
3319           P_Init_Msg_List               => FND_API.G_FALSE,
3320           P_Commit                      => FND_API.G_FALSE,
3321           P_OLD_QUOTE_LINE_ID           => qte_line_id,
3322           P_NEW_QUOTE_LINE_ID           => lx_qte_line_rec.quote_line_id,
3323           X_Return_Status               => l_return_status,
3324           X_Msg_Count                   => X_Msg_Count,
3325           X_Msg_Data                    => X_Msg_Data );
3326 
3327 
3328                   IF aso_debug_pub.g_debug_flag = 'Y' THEN
3329                   aso_debug_pub.ADD ( 'Copy_Rows -After line copy_sales_supplement ' || x_return_status , 1 , 'Y' );
3330                   END IF;
3331 
3332 
3333                IF ( l_return_status = FND_API.G_RET_STS_UNEXP_ERROR ) THEN
3334                  x_return_status            := FND_API.G_RET_STS_UNEXP_ERROR;
3335                  IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
3336                   FND_MESSAGE.Set_Name ('ASO' , 'ASO_API_UNEXP_ERROR' );
3337                   FND_MESSAGE.Set_Token ('ROW' , 'ASO_QUOTE_HEADER', TRUE );
3338                   FND_MSG_PUB.ADD;
3339                 END IF;
3340                RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3341 
3342                ELSIF ( l_return_status = FND_API.G_RET_STS_ERROR ) THEN
3343                 x_return_status            := FND_API.G_RET_STS_ERROR;
3344                 RAISE FND_API.G_EXC_ERROR;
3345                END IF;
3346         END IF;  -- new version check
3347 
3348 
3349 
3350 
3351          IF P_Copy_Quote_Control_Rec.copy_attachment = FND_API.G_TRUE THEN
3352             IF aso_debug_pub.g_debug_flag = 'Y' THEN
3353 		  aso_debug_pub.ADD ( 'Copy_Rows - Begin- before config  line copy_attch  ' , 1 , 'Y' );
3354 		  END IF;
3355 
3356             ASO_ATTACHMENT_INT.Copy_Attachments(
3357                 p_api_version       => l_api_version,
3358                 p_old_object_code   => 'ASO_QUOTE_LINES_ALL',
3359                 p_new_object_code   => 'ASO_QUOTE_LINES_ALL',
3360                 p_old_object_id     => qte_line_id,
3361                 p_new_object_id     => lx_qte_line_rec.quote_line_id,
3362                 x_return_status     => x_return_status ,
3363                 x_msg_count         => x_msg_count,
3364                 x_msg_data          => x_msg_data
3365              );
3366             IF aso_debug_pub.g_debug_flag = 'Y' THEN
3367 		     aso_debug_pub.ADD ( 'Copy_Rows -After config line copy_attch ' || x_return_status , 1 , 'Y' );
3368 		  END IF;
3369             IF ( x_return_status = FND_API.G_RET_STS_UNEXP_ERROR ) THEN
3370                IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
3371                   FND_MESSAGE.Set_Name ('ASO' , 'ASO_API_UNEXP_ERROR' );
3372                   FND_MESSAGE.Set_Token ( 'ROW' , 'ASO_COPYCONFIG AFTER_ATTACHMENTS' , TRUE );
3373                   FND_MSG_PUB.ADD;
3374                END IF;
3375                RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3376             ELSIF ( x_return_status = FND_API.G_RET_STS_ERROR ) THEN
3377                RAISE FND_API.G_EXC_ERROR;
3378             END IF;
3379 
3380          END IF;
3381 
3382          FOR j IN 1 .. l_dup_price_adj_tbl.COUNT LOOP
3383             lx_price_index_link_tbl(l_dup_price_adj_tbl(j).price_adjustment_id) := lx_ln_price_adj_tbl(j).price_adjustment_id;
3384          END LOOP;
3385 
3386          lx_line_index_link_tbl(qte_line_id) := lx_qte_line_rec.quote_line_id;
3387 
3388 -- CLOSE line_id_from_config;
3389 
3390          IF aso_debug_pub.g_debug_flag = 'Y' THEN
3391 	       aso_debug_pub.ADD('Copy_Config - l_qte_line_tbl(i).item_type_code ' || l_qte_line_rec.item_type_code , 1 , 'Y' );
3392             aso_debug_pub.ADD('Copy - l_qte_line_tbl(i).inventory_item_id ' || l_qte_line_rec.inventory_item_id , 1 , 'Y' );
3393             aso_debug_pub.ADD('Copy - l_serviceable_product_flag ' || l_serviceable_product_flag , 1 , 'Y' );
3394 	    END IF;
3395 
3396          IF l_serviceable_product_flag = 'Y' THEN
3397             ASO_COPY_QUOTE_PVT.service_copy (
3398                 p_qte_line_id =>                l_quote_line_id
3399              , p_copy_quote_control_rec =>      p_copy_quote_control_rec
3400              , p_new_qte_header_id =>           p_new_qte_header_id
3401              , p_qte_header_id =>               p_qte_header_id
3402              , lx_line_index_link_tbl =>        lx_line_index_link_tbl
3403              , lx_price_index_link_tbl =>       lx_price_index_link_tbl
3404              , X_Return_Status =>               x_return_status
3405              , X_Msg_Count =>                   x_msg_count
3406              , X_Msg_Data =>                    x_msg_data
3407              , p_line_quantity            =>  FND_API.G_MISS_NUM
3408              );
3409          END IF;
3410          IF ( x_return_status = FND_API.G_RET_STS_UNEXP_ERROR ) THEN
3411             IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
3412                FND_MESSAGE.Set_Name ('ASO' , 'ASO_API_UNEXP_ERROR' );
3413                FND_MESSAGE.Set_Token ( 'ROW' , 'ASO_COPYCONFIG AFTER_SERVICE' , TRUE );
3414                FND_MSG_PUB.ADD;
3415             END IF;
3416             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3417          ELSIF ( x_return_status = FND_API.G_RET_STS_ERROR ) THEN
3418             RAISE FND_API.G_EXC_ERROR;
3419          END IF;
3420 
3421       END LOOP;
3422 
3423       CLOSE line_id_from_config;
3424 
3425    END config_copy;
3426 
3427 
3428    PROCEDURE service_copy (
3429        p_qte_line_id IN NUMBER
3430     , p_copy_quote_control_rec IN ASO_COPY_QUOTE_PUB.Copy_Quote_Control_Rec_Type
3431             := ASO_COPY_QUOTE_PUB.G_MISS_Copy_Quote_Control_Rec
3432     , p_new_qte_header_id IN NUMBER
3433     , p_qte_header_id IN NUMBER
3434     , lx_line_index_link_tbl IN OUT NOCOPY  ASO_QUOTE_HEADERS_PVT.Index_Link_Tbl_Type
3435     , lx_price_index_link_tbl IN OUT NOCOPY  ASO_QUOTE_HEADERS_PVT.Index_Link_Tbl_Type
3436     , X_Return_Status OUT NOCOPY /* file.sql.39 change */   VARCHAR2
3437     , X_Msg_Count OUT NOCOPY /* file.sql.39 change */   NUMBER
3438     , X_Msg_Data OUT NOCOPY /* file.sql.39 change */   VARCHAR2
3439     , p_line_quantity     IN NUMBER  := FND_API.G_MISS_NUM
3440    ) IS
3441 
3442       CURSOR line_id_from_service (
3443           qte_ln_id NUMBER
3444        ) IS
3445          SELECT related_quote_line_id
3446          FROM   aso_line_relationships
3447          WHERE  quote_line_id = qte_ln_id
3448          AND    relationship_type_code = 'SERVICE';
3449 
3450       l_payment_tbl ASO_QUOTE_PUB.Payment_Tbl_Type;
3451       l_shipment_tbl ASO_QUOTE_PUB.Shipment_Tbl_Type;
3452       l_shipment_rec ASO_QUOTE_PUB.Shipment_Rec_Type;
3453       l_freight_charge_tbl ASO_QUOTE_PUB.Freight_Charge_Tbl_Type;
3454       l_tax_detail_tbl ASO_QUOTE_PUB.Tax_Detail_Tbl_Type;
3455       l_Price_Attr_Tbl ASO_QUOTE_PUB.Price_Attributes_Tbl_Type;
3456       l_Price_Adj_Tbl ASO_QUOTE_PUB.Price_Adj_Tbl_Type;
3457       l_Price_Adj_Attr_Tbl ASO_QUOTE_PUB.Price_Adj_Attr_Tbl_Type;
3458       l_qte_line_dtl_tbl ASO_QUOTE_PUB.Qte_Line_Dtl_Tbl_Type;
3459       l_qte_line_rec ASO_QUOTE_PUB.Qte_Line_Rec_Type;
3460       l_Line_Attr_Ext_Tbl ASO_QUOTE_PUB.Line_Attribs_Ext_Tbl_Type;
3461       lx_ln_Price_Adj_Tbl ASO_QUOTE_PUB.Price_Adj_Tbl_Type;
3462       lx_qte_line_rec ASO_QUOTE_PUB.Qte_Line_Rec_Type;
3463       l_control_rec ASO_QUOTE_PUB.Control_Rec_Type;
3464       LX_PRICE_ADJ_RLTSHIP_ID NUMBER;
3465       LX_LINE_RELATIONSHIP_ID NUMBER;
3466       X_hd_Attr_Ext_Tbl ASO_QUOTE_PUB.Line_Attribs_Ext_Tbl_Type;
3467       X_Sales_Credit_Tbl ASO_QUOTE_PUB.Sales_Credit_Tbl_Type;
3468       X_Quote_Party_Tbl ASO_QUOTE_PUB.Quote_Party_Tbl_Type;
3469       l_hd_Attr_Ext_Tbl ASO_QUOTE_PUB.Line_Attribs_Ext_Tbl_Type;
3470       l_quote_party_tbl ASO_QUOTE_PUB.Quote_Party_Tbl_Type;
3471       l_quote_party_rec ASO_QUOTE_PUB.Quote_Party_rec_Type;
3472       l_sales_credit_tbl ASO_QUOTE_PUB.Sales_Credit_Tbl_Type;
3473       l_sales_credit_rec ASO_QUOTE_PUB.Sales_Credit_rec_Type;
3474       l_service_ref_line_id NUMBER;
3475       l_return_status VARCHAR2 ( 1 );
3476       qte_line_id NUMBER;
3477       i NUMBER;
3478       j NUMBER;
3479       k NUMBER;
3480       l_api_version CONSTANT NUMBER := 1.0;
3481 
3482       Cursor get_qte_line_number (x_qte_line_id NUMBER)  IS
3483       SELECT line_number
3484       FROM aso_quote_lines_all
3485       WHERE quote_line_id = x_qte_line_id ;
3486 
3487       l_line_number  NUMBER;
3488 
3489       l_quote_party_tbl_out      ASO_QUOTE_PUB.Quote_Party_Tbl_Type;
3490       l_sales_credit_tbl_out     ASO_QUOTE_PUB.Sales_Credit_Tbl_Type;
3491       l_tax_detail_tbl_out       ASO_QUOTE_PUB.Tax_Detail_Tbl_Type;
3492       l_freight_charge_tbl_out   ASO_QUOTE_PUB.Freight_Charge_Tbl_Type;
3493       l_shipment_tbl_out         ASO_QUOTE_PUB.Shipment_Tbl_Type;
3494       l_payment_tbl_out          ASO_QUOTE_PUB.Payment_Tbl_Type;
3495       l_Price_Adj_Attr_Tbl_out   ASO_QUOTE_PUB.Price_Adj_Attr_Tbl_Type;
3496       l_Price_Attr_Tbl_out       ASO_QUOTE_PUB.Price_Attributes_Tbl_Type;
3497       l_qte_line_dtl_tbl_out     ASO_QUOTE_PUB.Qte_Line_Dtl_Tbl_Type;
3498       l_Line_Attr_Ext_Tbl_out    ASO_QUOTE_PUB.Line_Attribs_Ext_Tbl_Type;
3499 
3500       l_dup_Price_Adj_Tbl ASO_QUOTE_PUB.Price_Adj_Tbl_Type;
3501 
3502 
3503    BEGIN
3504 
3505       IF aso_debug_pub.g_debug_flag = 'Y' THEN
3506 	 aso_debug_pub.ADD ('Copy_Service - Begin ' , 1, 'Y' );
3507       aso_debug_pub.ADD ( 'Copy_Service - p_new_qte_header_id ' || p_new_qte_header_id , 1 , 'Y' );
3508       aso_debug_pub.ADD ( 'Copy_Service - p_qte_header_id ' || p_qte_header_id , 1 , 'Y' );
3509       aso_debug_pub.ADD ( 'Copy_Service - p_qte_line_id ' || p_qte_line_id , 1 , 'Y' );
3510 	 END IF;
3511 
3512       x_return_status            := FND_API.G_RET_STS_SUCCESS;
3513 
3514       OPEN line_id_from_service ( p_qte_line_id );
3515 
3516       LOOP
3517          FETCH line_id_from_service INTO qte_line_id;
3518          EXIT WHEN line_id_from_service%NOTFOUND;
3519          IF aso_debug_pub.g_debug_flag = 'Y' THEN
3520 	    aso_debug_pub.ADD ( 'Copy_Service - inside cursor qte_line_id ' || qte_line_id , 1 , 'Y' );
3521 	    END IF;
3522 
3523          l_qte_line_rec             :=
3524                            ASO_UTILITY_PVT.Query_Qte_Line_Row ( qte_line_id );
3525 
3526           IF p_new_qte_header_id = p_qte_header_id THEN
3527 
3528            OPEN get_qte_line_number(lx_line_index_link_tbl(p_qte_line_id));
3529            FETCH get_qte_line_number into l_line_number;
3530            CLOSE get_qte_line_number;
3531 
3532            l_qte_line_rec.line_number := l_line_number;
3533 
3534           END IF;
3535 
3536          -- Setting the line quantity ( as per changes for split_line API )
3537          IF (p_line_quantity is not null ) and (p_line_quantity <>  FND_API.G_MISS_NUM ) THEN
3538           l_qte_line_rec.quantity := p_line_quantity;
3539          END IF;
3540 
3541 	    l_qte_line_rec.quote_header_id := p_new_qte_header_id;
3542          l_qte_line_dtl_tbl         :=
3543                           ASO_UTILITY_PVT.Query_Line_Dtl_Rows ( qte_line_id );
3544 
3545          IF l_qte_line_dtl_tbl.COUNT > 0 THEN
3546 
3547             FOR k IN 1 .. l_qte_line_dtl_tbl.COUNT LOOP
3548 
3549                IF l_qte_line_dtl_tbl ( k ).service_ref_type_code = 'QUOTE' THEN
3550 
3551                   IF l_qte_line_dtl_tbl ( k ).service_ref_line_id IS NOT NULL THEN
3552 
3553                      IF aso_debug_pub.g_debug_flag = 'Y' THEN
3554 				 aso_debug_pub.ADD ( 'Copy_Service - l_qte_line_dtl_tbl(k).service_ref_line_id ' || l_qte_line_dtl_tbl ( k ).service_ref_line_id , 1 , 'Y' );
3555 				 END IF;
3556                      l_service_ref_line_id      :=
3557                            lx_line_index_link_tbl ( l_qte_line_dtl_tbl ( k ).service_ref_line_id );
3558                      l_qte_line_dtl_tbl ( k ).service_ref_line_id :=
3559                                                         l_service_ref_line_id;
3560                   END IF;
3561 
3562                END IF;
3563 
3564             END LOOP;
3565 
3566          END IF;
3567 
3568          IF aso_debug_pub.g_debug_flag = 'Y' THEN
3569 	    aso_debug_pub.ADD ( 'Copy_Service - 2 l_service_ref_line_id ' || l_service_ref_line_id , 1 , 'Y' );
3570 	    END IF;
3571 
3572          l_line_attr_Ext_Tbl := ASO_UTILITY_PVT.Query_Line_Attribs_Ext_Rows ( qte_line_id );
3573 
3574          l_price_adj_tbl := ASO_UTILITY_PVT.Query_Price_Adj_Rows ( p_qte_header_id , qte_line_id );
3575 
3576 	    l_dup_price_adj_tbl := l_price_adj_tbl;
3577 
3578          l_price_adj_attr_tbl := ASO_UTILITY_PVT.Query_Price_Adj_Attr_Rows ( p_price_adj_tbl => l_price_adj_tbl );
3579 
3580          l_price_attr_tbl := ASO_UTILITY_PVT.Query_Price_Attr_Rows ( p_qte_header_id , qte_line_id );
3581 
3582          --l_payment_tbl := ASO_UTILITY_PVT.Query_Payment_Rows ( p_qte_header_id , QTE_LINE_ID );
3583 
3584          l_shipment_tbl := ASO_UTILITY_PVT.Query_Shipment_Rows ( p_qte_header_id , QTE_LINE_ID );
3585 
3586          l_sales_credit_tbl := ASO_UTILITY_PVT.Query_Sales_Credit_Row ( p_qte_header_id , QTE_LINE_ID );
3587 
3588          l_quote_party_tbl := ASO_UTILITY_PVT.Query_Quote_Party_Row ( p_qte_header_id , QTE_LINE_ID );
3589 
3590          l_freight_charge_tbl := ASO_UTILITY_PVT.Query_Freight_Charge_Rows ( l_shipment_tbl );
3591 
3592          l_tax_detail_tbl := ASO_UTILITY_PVT.Query_Tax_Detail_Rows ( p_qte_header_id , QTE_LINE_ID , l_shipment_tbl );
3593 
3594          l_qte_line_rec.quote_line_id := NULL;
3595          l_qte_line_rec.object_version_number := FND_API.G_MISS_NUM;
3596 
3597 
3598      --BC4J Fix
3599 
3600          FOR j IN 1 .. l_qte_line_dtl_tbl.COUNT LOOP
3601 	       l_qte_line_dtl_tbl(j).quote_line_detail_id := null;
3602             l_qte_line_dtl_tbl(j).object_version_number := FND_API.G_MISS_NUM;
3603 	    END LOOP;
3604 
3605          FOR j IN 1 .. l_price_adj_tbl.COUNT LOOP
3606             l_price_adj_tbl ( j ).QUOTE_HEADER_ID     := p_new_qte_header_id;
3607             l_price_adj_tbl ( j ).price_adjustment_id := null;
3608 		  l_price_adj_tbl ( j ).object_version_number := FND_API.G_MISS_NUM;
3609          END LOOP;
3610 
3611          FOR j IN 1 .. l_price_adj_attr_tbl.COUNT LOOP
3612             l_price_adj_attr_tbl(j).price_adj_attrib_id := null;
3613 		  l_price_adj_attr_tbl(j).object_version_number := FND_API.G_MISS_NUM;
3614          END LOOP;
3615 
3616          FOR j IN 1 .. l_price_attr_tbl.COUNT LOOP
3617             l_price_attr_tbl ( j ).QUOTE_HEADER_ID    := p_new_qte_header_id;
3618             l_price_attr_tbl ( j ).price_attribute_id := null;
3619 		  l_price_attr_tbl ( j ).object_version_number := FND_API.G_MISS_NUM;
3620          END LOOP;
3621 
3622          /* FOR j IN 1 .. l_payment_tbl.COUNT LOOP
3623             l_payment_tbl ( j ).QUOTE_HEADER_ID := p_new_qte_header_id;
3624             l_payment_tbl ( j ).CREDIT_CARD_APPROVAL_CODE := NULL;
3625             l_payment_tbl ( j ).CREDIT_CARD_APPROVAL_DATE := NULL;
3626             l_payment_tbl ( j ).payment_id := NULL;
3627 		  l_payment_tbl ( j ).object_version_number := FND_API.G_MISS_NUM;
3628          END LOOP; */
3629 
3630          FOR j IN 1 .. l_shipment_tbl.COUNT LOOP
3631             l_shipment_tbl ( j ).QUOTE_HEADER_ID := p_new_qte_header_id;
3632             l_shipment_tbl ( j ).shipment_id := null;
3633 		  l_shipment_tbl ( j ).object_version_number := FND_API.G_MISS_NUM;
3634          END LOOP;
3635 
3636          FOR j IN 1 .. l_sales_credit_tbl.COUNT LOOP
3637             l_sales_credit_tbl(j).QUOTE_HEADER_ID := p_new_qte_header_id;
3638             l_sales_credit_tbl(j).sales_credit_id := null;
3639 		  l_sales_credit_tbl(j).object_version_number := FND_API.G_MISS_NUM;
3640          END LOOP;
3641 
3642          FOR j IN 1 .. l_quote_party_tbl.COUNT LOOP
3643             l_quote_party_tbl(j).QUOTE_HEADER_ID  := p_new_qte_header_id;
3644             l_quote_party_tbl(j).QUOTE_PARTY_ID  := null;
3645 		  l_quote_party_tbl(j).object_version_number := FND_API.G_MISS_NUM;
3646          END LOOP;
3647 
3648          FOR j IN 1 .. l_tax_detail_tbl.COUNT LOOP
3649             l_tax_detail_tbl(j).tax_detail_id  := null;
3650 		  l_tax_detail_tbl(j).object_version_number := FND_API.G_MISS_NUM;
3651          END LOOP;
3652 
3653          FOR j IN 1 .. l_line_attr_Ext_Tbl.COUNT LOOP
3654             l_line_attr_Ext_Tbl(j).line_attribute_id  := null;
3655 		  l_line_attr_Ext_Tbl(j).object_version_number := FND_API.G_MISS_NUM;
3656          END LOOP;
3657 
3658          FOR j IN 1 .. l_freight_charge_tbl.COUNT LOOP
3659             l_freight_charge_tbl(j).freight_charge_id  := null;
3660 		  l_freight_charge_tbl(j).object_version_number := FND_API.G_MISS_NUM;
3661          END LOOP;
3662 
3663 
3664 	--End of BC4J Fix
3665 
3666          IF aso_debug_pub.g_debug_flag = 'Y' THEN
3667 	    aso_debug_pub.ADD ( 'Copy_Service - Before insert_quote_line_rows: ' || p_qte_line_id , 1 , 'Y' );
3668 	    END IF;
3669          ASO_QUOTE_LINES_PVT.Insert_Quote_Line_Rows (
3670              p_control_rec =>                l_control_rec
3671           , P_qte_Line_Rec =>                l_qte_line_rec
3672           , P_qte_line_dtl_tbl =>            l_qte_line_dtl_tbl
3673           , P_Line_Attribs_Ext_Tbl =>        l_line_attr_ext_tbl
3674           , P_price_attributes_tbl =>        l_price_attr_tbl
3675           , P_Price_Adj_Tbl =>               l_price_adj_tbl
3676           , P_Price_Adj_Attr_Tbl =>          l_Price_Adj_Attr_Tbl
3677           , P_Payment_Tbl =>                 ASO_QUOTE_PUB.g_miss_payment_tbl
3678           , P_Shipment_Tbl =>                l_shipment_tbl
3679           , P_Freight_Charge_Tbl =>          l_freight_charge_tbl
3680           , P_Tax_Detail_Tbl =>              l_tax_detail_tbl
3681           , P_Sales_Credit_Tbl =>            l_sales_credit_tbl
3682           , P_Quote_Party_Tbl =>             l_quote_party_tbl
3683 		, x_qte_Line_Rec =>                lx_qte_line_rec
3684           , x_qte_line_dtl_tbl =>            l_qte_line_dtl_tbl_out
3685           , x_Line_Attribs_Ext_Tbl =>        l_line_attr_Ext_Tbl_out
3686           , x_price_attributes_tbl =>        l_price_attr_tbl_out
3687           , x_Price_Adj_Tbl =>               lx_ln_price_adj_tbl
3688           , x_Price_Adj_Attr_Tbl =>          l_Price_Adj_Attr_Tbl_out
3689           , x_Payment_Tbl =>                 l_payment_tbl_out
3690           , x_Shipment_Tbl =>                l_shipment_tbl_out
3691           , x_Freight_Charge_Tbl =>          l_freight_charge_tbl_out
3692           , x_Tax_Detail_Tbl =>              l_tax_detail_tbl_out
3693           , X_Sales_Credit_Tbl =>            l_sales_credit_tbl_out
3694           , X_Quote_Party_Tbl =>             l_quote_party_tbl_out
3695           , X_Return_Status =>               l_return_status
3696           , X_Msg_Count =>                   x_msg_count
3697           , X_Msg_Data =>                    x_msg_data
3698           );
3699 
3700       l_quote_party_tbl :=l_quote_party_tbl_out ;
3701       l_sales_credit_tbl :=l_sales_credit_tbl_out ;
3702       l_tax_detail_tbl := l_tax_detail_tbl_out    ;
3703       l_freight_charge_tbl := l_freight_charge_tbl_out  ;
3704       l_shipment_tbl := l_shipment_tbl_out   ;
3705       l_payment_tbl := l_payment_tbl_out     ;
3706       l_Price_Adj_Attr_Tbl  := l_Price_Adj_Attr_Tbl_out  ;
3707       l_Price_Attr_Tbl  :=  l_Price_Attr_Tbl_out     ;
3708       l_qte_line_dtl_tbl := l_qte_line_dtl_tbl_out   ;
3709       l_Line_Attr_Ext_Tbl  :=  l_Line_Attr_Ext_Tbl_out;
3710 
3711 
3712 
3713          IF ( x_return_status = FND_API.G_RET_STS_UNEXP_ERROR ) THEN
3714             IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
3715                FND_MESSAGE.Set_Name ('ASO' , 'ASO_API_UNEXP_ERROR' );
3716                FND_MESSAGE.Set_Token ( 'ROW' , 'ASO_COPYSERVICE AFTER_INSERT' , TRUE );
3717                FND_MSG_PUB.ADD;
3718             END IF;
3719             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3720          ELSIF ( x_return_status = FND_API.G_RET_STS_ERROR ) THEN
3721             RAISE FND_API.G_EXC_ERROR;
3722          END IF;
3723 
3724 
3725       -- Copy the payment record
3726     l_payment_tbl := ASO_UTILITY_PVT.Query_Payment_Rows ( p_qte_header_id , QTE_LINE_ID );
3727 
3728     IF l_payment_tbl.count > 0 then
3729 
3730          FOR j IN 1 .. l_payment_tbl.COUNT LOOP
3731             l_payment_tbl ( j ).QUOTE_HEADER_ID := p_new_qte_header_id;
3732             l_payment_tbl ( j ).QUOTE_LINE_ID := lx_qte_line_rec.quote_line_id;
3733             l_payment_tbl ( j ).CREDIT_CARD_APPROVAL_CODE := NULL;
3734             l_payment_tbl ( j ).CREDIT_CARD_APPROVAL_DATE := NULL;
3735             l_payment_tbl ( j ).payment_id := NULL;
3736             l_payment_tbl ( j ).object_version_number := FND_API.G_MISS_NUM;
3737          END LOOP;
3738 
3739        IF aso_debug_pub.g_debug_flag = 'Y' THEN
3740           aso_debug_pub.add('Service_Copy: Before  call to copy_payment_row ', 1, 'Y');
3741        END IF;
3742 
3743          aso_copy_quote_pvt.copy_payment_row(p_payment_rec => l_payment_tbl(1)  ,
3744                                              x_return_status => l_return_status,
3745                                              x_msg_count     => x_msg_count,
3746                                              x_msg_data      => x_msg_data);
3747 
3748        IF aso_debug_pub.g_debug_flag = 'Y' THEN
3749           aso_debug_pub.add('Service_Copy:: After call to copy_payment_row: x_return_status: '||l_return_status, 1, 'Y');
3750        END IF;
3751       IF ( l_return_status = FND_API.G_RET_STS_UNEXP_ERROR ) THEN
3752          x_return_status            := FND_API.G_RET_STS_UNEXP_ERROR;
3753          IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
3754             FND_MESSAGE.Set_Name ('ASO' , 'ASO_API_UNEXP_ERROR' );
3755             FND_MESSAGE.Set_Token ( 'ROW' , 'ASO_COPYSERVICE AFTER_INSERT' , TRUE );
3756             FND_MSG_PUB.ADD;
3757          END IF;
3758          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3759       ELSIF ( l_return_status = FND_API.G_RET_STS_ERROR ) THEN
3760          x_return_status            := FND_API.G_RET_STS_ERROR;
3761          RAISE FND_API.G_EXC_ERROR;
3762       END IF;
3763 
3764    END IF;
3765      --  End Copy payment record
3766 
3767          -- Copying the sales supplement data for the line
3768       IF ( P_Copy_Quote_Control_Rec.New_Version = FND_API.G_TRUE ) THEN
3769 
3770                  IF aso_debug_pub.g_debug_flag = 'Y' THEN
3771                  aso_debug_pub.ADD ( 'Copy_Rows - Begin- before line copy_sales_supplement  ' , 1 , 'Y' );
3772                  END IF;
3773 
3774           ASO_COPY_QUOTE_PVT.INSERT_SALES_SUPP_DATA
3775           (
3776           P_Api_Version_Number          =>  1.0,
3777           P_Init_Msg_List               => FND_API.G_FALSE,
3778           P_Commit                      => FND_API.G_FALSE,
3779           P_OLD_QUOTE_LINE_ID           => qte_line_id,
3780           P_NEW_QUOTE_LINE_ID           => lx_qte_line_rec.quote_line_id,
3781           X_Return_Status               => l_return_status,
3782           X_Msg_Count                   => X_Msg_Count,
3783           X_Msg_Data                    => X_Msg_Data );
3784 
3785 
3786                   IF aso_debug_pub.g_debug_flag = 'Y' THEN
3787                   aso_debug_pub.ADD ( 'Copy_Rows -After line copy_sales_supplement ' || x_return_status , 1 , 'Y' );
3788                   END IF;
3789 
3790 
3791                IF ( l_return_status = FND_API.G_RET_STS_UNEXP_ERROR ) THEN
3792                  x_return_status            := FND_API.G_RET_STS_UNEXP_ERROR;
3793                  IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
3794                   FND_MESSAGE.Set_Name ('ASO' , 'ASO_API_UNEXP_ERROR' );
3795                   FND_MESSAGE.Set_Token ('ROW' , 'ASO_QUOTE_HEADER', TRUE );
3796                   FND_MSG_PUB.ADD;
3797                 END IF;
3798                RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3799 
3800                ELSIF ( l_return_status = FND_API.G_RET_STS_ERROR ) THEN
3801                 x_return_status            := FND_API.G_RET_STS_ERROR;
3802                 RAISE FND_API.G_EXC_ERROR;
3803                END IF;
3804         END IF;  -- new version check
3805 
3806 
3807 
3808          IF P_Copy_Quote_Control_Rec.copy_attachment = FND_API.G_TRUE THEN
3809             IF aso_debug_pub.g_debug_flag = 'Y' THEN
3810 		  aso_debug_pub.ADD ( 'Copy_Rows - Begin- before config  line copy_attch  ' , 1 , 'Y' );
3811 		  END IF;
3812 
3813             ASO_ATTACHMENT_INT.Copy_Attachments (
3814                 p_api_version       => l_api_version,
3815                 p_old_object_code   => 'ASO_QUOTE_LINES_ALL',
3816                 p_new_object_code   => 'ASO_QUOTE_LINES_ALL',
3817                 p_old_object_id     => qte_line_id,
3818                 p_new_object_id     => lx_qte_line_rec.quote_line_id,
3819                 x_return_status     => x_return_status,
3820                 x_msg_count         => x_msg_count,
3821                 x_msg_data          => x_msg_data
3822              );
3823             IF aso_debug_pub.g_debug_flag = 'Y' THEN
3824 		  aso_debug_pub.ADD ( 'Copy_Rows -After config line copy_attch ' || x_return_status , 1 , 'Y' );
3825 		  END IF;
3826             IF ( x_return_status = FND_API.G_RET_STS_UNEXP_ERROR ) THEN
3827                IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
3828                   FND_MESSAGE.Set_Name ('ASO' , 'ASO_API_UNEXP_ERROR' );
3829                   FND_MESSAGE.Set_Token ( 'ROW' , 'ASO_COPYSERVICE AFTER_ATTACHMENTS' , TRUE );
3830                   FND_MSG_PUB.ADD;
3831                END IF;
3832                RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3833             ELSIF ( x_return_status = FND_API.G_RET_STS_ERROR ) THEN
3834                RAISE FND_API.G_EXC_ERROR;
3835             END IF;
3836 
3837          END IF;
3838 
3839          FOR j IN 1 .. l_dup_price_adj_tbl.COUNT LOOP
3840             lx_price_index_link_tbl(l_dup_price_adj_tbl(j).price_adjustment_id) := lx_ln_price_adj_tbl(j).price_adjustment_id;
3841          END LOOP;
3842 
3843          lx_line_index_link_tbl ( qte_line_id ) := lx_qte_line_rec.quote_line_id;
3844 
3845       END LOOP;
3846 
3847       CLOSE line_id_from_service;
3848 
3849    END service_copy;
3850 
3851 
3852    PROCEDURE Get_Quote_Exp_Date (
3853        X_Quote_Exp_Date OUT NOCOPY /* file.sql.39 change */   DATE
3854     , X_Return_Status OUT NOCOPY /* file.sql.39 change */   VARCHAR2
3855     , X_Msg_Count OUT NOCOPY /* file.sql.39 change */   NUMBER
3856     , X_Msg_Data OUT NOCOPY /* file.sql.39 change */   VARCHAR2
3857     ) IS
3858 
3859       CURSOR C_Get_Expiration_Date (
3860           l_Def_Cal VARCHAR2
3861        , l_Def_Per VARCHAR2
3862        ) IS
3863          SELECT End_Date
3864          FROM   GL_PERIODS_V
3865          WHERE  Period_Type = l_Def_Per
3866          AND    Period_Set_Name = l_Def_Cal
3867          AND    SYSDATE BETWEEN Start_Date AND End_Date;
3868 
3869       l_Default_Cal_Prof VARCHAR2 ( 15 )
3870                             := FND_PROFILE.VALUE ('ASO_DEFAULT_EXP_GL_CAL' );
3871       l_Default_Per_Prof VARCHAR2 ( 15 )
3872                          := FND_PROFILE.VALUE ('ASO_DEFAULT_EXP_GL_PERIOD' );
3873       l_qte_duration_prof NUMBER
3874                                 := FND_PROFILE.VALUE ('ASO_QUOTE_DURATION' );
3875 
3876    BEGIN
3877 
3878       X_Return_Status            := FND_API.G_RET_STS_SUCCESS;
3879 
3880       IF      l_Default_Cal_Prof IS NOT NULL
3881           AND l_Default_Per_Prof IS NOT NULL THEN
3882 
3883          OPEN C_Get_Expiration_Date (
3884              l_Default_Cal_Prof
3885           , l_Default_Per_Prof
3886           );
3887          FETCH C_Get_Expiration_Date INTO X_Quote_Exp_Date;
3888 
3889          IF C_Get_Expiration_Date%NOTFOUND THEN
3890 
3891             IF l_qte_duration_prof IS NOT NULL THEN
3892                X_Quote_Exp_Date           :=   SYSDATE + l_qte_duration_prof;
3893             ELSE
3894               /* If profile ASO_QUOTE_DURATION is null, then exp date is sysdate + 30
3895 			see bug 3704719 for more detaisl */
3896 		    X_Quote_Exp_Date := sysdate + NVL(FND_PROFILE.value('ASO_QUOTE_DURATION'), 30);
3897             END IF;
3898 
3899          END IF;
3900 
3901          CLOSE C_Get_Expiration_Date;
3902 
3903       ELSE
3904 
3905          IF l_qte_duration_prof IS NOT NULL THEN
3906             X_Quote_Exp_Date           :=   SYSDATE + l_qte_duration_prof;
3907          ELSE
3908               /* If profile ASO_QUOTE_DURATION is null, then exp date is sysdate + 30
3909                see bug 3704719 for more detaisl */
3910 		  X_Quote_Exp_Date := sysdate + NVL(FND_PROFILE.value('ASO_QUOTE_DURATION'), 30);
3911          END IF;
3912 
3913       END IF;
3914 
3915    END Get_Quote_Exp_Date;
3916 
3917 
3918    PROCEDURE COPY_SALES_SUPPLEMENT (
3919        P_Api_Version_Number IN NUMBER
3920     , P_Init_Msg_List IN VARCHAR2 := FND_API.G_FALSE
3921     , P_Commit IN VARCHAR2 := FND_API.G_FALSE
3922     , p_old_quote_header_id IN NUMBER
3923     , p_new_quote_header_id IN NUMBER
3924     , X_Return_Status OUT NOCOPY /* file.sql.39 change */   VARCHAR2
3925     , X_Msg_Count OUT NOCOPY /* file.sql.39 change */   VARCHAR2
3926     , X_Msg_Data OUT NOCOPY /* file.sql.39 change */   VARCHAR2
3927     ) IS
3928 
3929       CURSOR get_template_id (
3930           qte_header_id NUMBER
3931        ) IS
3932          SELECT template_instance_id, template_id
3933          FROM   aso_sup_tmpl_instance
3934          WHERE  owner_table_name = 'ASO_QUOTE_HEADERS'
3935          AND    owner_table_id = qte_header_id;
3936 
3937       CURSOR get_values (
3938           temp_instance_id NUMBER
3939        ) IS
3940          SELECT sect_comp_map_id, VALUE, value_type_qualifier, response_id
3941          FROM   aso_sup_instance_value
3942          WHERE  template_instance_id = temp_instance_id;
3943 
3944       l_old_template_instance_id NUMBER;
3945       l_new_template_instance_id NUMBER;
3946       l_sup_instance_rowid ROWID;
3947       l_template_instance_rowid ROWID;
3948       l_instance_value_id NUMBER;
3949       l_old_instance_value_id NUMBER;
3950       l_api_name VARCHAR2 ( 50 ) := 'COPY_SALES_SUPPLEMENT';
3951       l_api_version_number CONSTANT NUMBER := 1.0;
3952 
3953    BEGIN
3954 
3955 -- Establish a standard save point
3956       SAVEPOINT COPY_SALES_SUPPLEMENT_PVT;
3957 
3958 -- Standard call to check for call compatability
3959       IF NOT FND_API.Compatible_API_Call (
3960                  l_api_version_number
3961               , p_api_version_number
3962               , l_api_name
3963               , G_PKG_NAME
3964               ) THEN
3965          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3966       END IF;
3967 
3968 -- Initialize message list if p_init_msg_list is set to TRUE.
3969       IF FND_API.to_Boolean ( p_init_msg_list ) THEN
3970          FND_MSG_PUB.initialize;
3971       END IF;
3972 
3973 -- API BODY
3974       IF aso_debug_pub.g_debug_flag = 'Y' THEN
3975 	 aso_debug_pub.ADD ('COPY_SALES_SUPPLEMENT API: Begin' , 1, 'N' );
3976       aso_debug_pub.ADD ( 'Old Qte Header Id : ' || TO_CHAR ( p_old_quote_header_id ) , 1 , 'N' );
3977       aso_debug_pub.ADD ( 'New Qte Header Id : ' || TO_CHAR ( p_new_quote_header_id ) , 1 , 'N' );
3978 	 END IF;
3979 
3980 -- Get the template id's  and template_instance_id's based upon the
3981 -- quote header id
3982 
3983       FOR template_val IN get_template_id ( p_old_quote_header_id ) LOOP
3984          IF aso_debug_pub.g_debug_flag = 'Y' THEN
3985 	    aso_debug_pub.ADD ( 'Template Id : ' || TO_CHAR ( template_val.template_id ) , 1 , 'N' );
3986          aso_debug_pub.ADD ( ' Old Template Instance Id : ' || TO_CHAR ( template_val.template_instance_id ) , 1 , 'N' );
3987 
3988          -- Create a new row in the ASO_SUP_TMPL_INSTANCE Table with the template id
3989 
3990          aso_debug_pub.ADD ( 'Inserting a row into tmpl_instance table' , 1 , 'N' );
3991 	    END IF;
3992 
3993          -- Initiate the variable to null,
3994          -- so that each time they contain new value for every pass of loop
3995 
3996          l_new_template_instance_id := NULL;
3997          ASO_SUP_TMPL_INSTANCE_PKG.INSERT_ROW (
3998              PX_ROWID =>                     l_template_instance_rowid
3999           , PX_TEMPLATE_INSTANCE_ID =>       l_new_template_instance_id
4000           , P_created_by =>                  FND_GLOBAL.USER_ID
4001           , P_creation_date =>               SYSDATE
4002           , P_last_updated_by =>             FND_GLOBAL.USER_ID
4003           , P_last_update_date =>            SYSDATE
4004           , P_last_update_login =>           FND_GLOBAL.CONC_LOGIN_ID
4005           , P_TEMPLATE_ID =>                 template_val.template_id
4006           , P_Owner_Table_Name =>            'ASO_QUOTE_HEADERS'
4007           , P_Owner_Table_Id =>              p_new_quote_header_id
4008 		, P_OBJECT_VERSION_NUMBER =>       FND_API.G_MISS_NUM
4009           );
4010          IF aso_debug_pub.g_debug_flag = 'Y' THEN
4011 	    aso_debug_pub.ADD ( ' New Template Instance Id : ' || TO_CHAR ( l_new_template_instance_id ) , 1 , 'N' );
4012 	    END IF;
4013 
4014          -- Get the values for that instance
4015          FOR inst_val IN get_values ( template_val.template_instance_id ) LOOP
4016             IF aso_debug_pub.g_debug_flag = 'Y' THEN
4017 		  aso_debug_pub.ADD (   'Value : ' || inst_val.VALUE, 1, 'N' );
4018             aso_debug_pub.ADD ( 'Value Type Qualifier : ' || inst_val.value_type_qualifier , 1 , 'N' );
4019             aso_debug_pub.ADD ( 'Response Id : ' || TO_CHAR ( inst_val.response_id ) , 1 , 'N' );
4020 		  END IF;
4021 
4022             -- If values are fetched then insert rows
4023             IF inst_val.sect_comp_map_id IS NOT NULL THEN
4024                -- Initiate the variables to null,
4025                -- so that each time they contain new value for every pass of loop
4026 
4027                l_instance_value_id        := NULL;
4028                IF aso_debug_pub.g_debug_flag = 'Y' THEN
4029 			aso_debug_pub.ADD ( 'Inserting a row into instance_value table' , 1 , 'N' );
4030 			END IF;
4031 
4032                -- Create a new row in the ASO_SUP_INSTANCE_VALUE table
4033                ASO_SUP_INSTANCE_VALUE_PKG.INSERT_ROW (
4034                    PX_ROWID =>                     l_sup_instance_rowid
4035                 , PX_INSTANCE_VALUE_ID =>          l_instance_value_id
4036                 , P_SECT_COMP_MAP_ID =>            inst_val.sect_comp_map_id
4037                 , P_Template_Instance_ID =>        l_new_template_instance_id
4038                 , p_value =>                       inst_val.VALUE
4039                 , p_value_type_qualifier =>        inst_val.value_type_qualifier
4040                 , p_response_id =>                 inst_val.response_id
4041                 , P_created_by =>                  FND_GLOBAL.USER_ID
4042                 , P_last_updated_by =>             FND_GLOBAL.USER_ID
4043                 , P_last_update_login =>           FND_GLOBAL.CONC_LOGIN_ID
4044 			 , P_OBJECT_VERSION_NUMBER =>       FND_API.G_MISS_NUM
4045                 );
4046                IF aso_debug_pub.g_debug_flag = 'Y' THEN
4047 			aso_debug_pub.ADD ( 'New Instance Value Id : ' || TO_CHAR ( l_instance_value_id ) , 1 , 'N' );
4048 			END IF;
4049             END IF;
4050 
4051          END LOOP; -- instance value loop
4052 
4053       END LOOP; -- template loop
4054 
4055       -- Standard check for p_commit
4056       IF FND_API.to_Boolean ( p_commit ) THEN
4057          COMMIT WORK;
4058       END IF;
4059 
4060 --  Initialize API return status to success
4061       x_return_status            := FND_API.G_RET_STS_SUCCESS;
4062 
4063       IF aso_debug_pub.g_debug_flag = 'Y' THEN
4064 	 aso_debug_pub.ADD ( 'COPY_SALES_SUPPLEMENT API: ' || l_api_name || 'end' , 1 , 'N' );
4065 	 END IF;
4066 
4067    EXCEPTION
4068 
4069       WHEN FND_API.G_EXC_ERROR THEN
4070          ASO_UTILITY_PVT.HANDLE_EXCEPTIONS (
4071              P_API_NAME =>                   L_API_NAME
4072           , P_PKG_NAME =>                    G_PKG_NAME
4073           , P_EXCEPTION_LEVEL =>             FND_MSG_PUB.G_MSG_LVL_ERROR
4074           , P_PACKAGE_TYPE =>                ASO_UTILITY_PVT.G_PVT
4075           , X_MSG_COUNT =>                   X_MSG_COUNT
4076           , X_MSG_DATA =>                    X_MSG_DATA
4077           , X_RETURN_STATUS =>               X_RETURN_STATUS
4078           );
4079 
4080       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4081          ASO_UTILITY_PVT.HANDLE_EXCEPTIONS (
4082              P_API_NAME =>                   L_API_NAME
4083           , P_PKG_NAME =>                    G_PKG_NAME
4084           , P_EXCEPTION_LEVEL =>             FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
4085           , P_PACKAGE_TYPE =>                ASO_UTILITY_PVT.G_PVT
4086           , X_MSG_COUNT =>                   X_MSG_COUNT
4087           , X_MSG_DATA =>                    X_MSG_DATA
4088           , X_RETURN_STATUS =>               X_RETURN_STATUS
4089           );
4090 
4091       WHEN OTHERS THEN
4092          ASO_UTILITY_PVT.HANDLE_EXCEPTIONS (
4093              P_API_NAME =>                   L_API_NAME
4094           , P_PKG_NAME =>                    G_PKG_NAME
4095           , P_SQLCODE =>                     SQLCODE
4096           , P_SQLERRM =>                     SQLERRM
4097           , P_EXCEPTION_LEVEL =>             ASO_UTILITY_PVT.G_EXC_OTHERS
4098           , P_PACKAGE_TYPE =>                ASO_UTILITY_PVT.G_PVT
4099           , X_MSG_COUNT =>                   X_MSG_COUNT
4100           , X_MSG_DATA =>                    X_MSG_DATA
4101           , X_RETURN_STATUS =>               X_RETURN_STATUS
4102           );
4103 
4104    END COPY_SALES_SUPPLEMENT;
4105 
4106 
4107 
4108 PROCEDURE Copy_Opp_Quote(
4109            p_api_version_number  IN NUMBER := 1.0,
4110            p_qte_header_id       IN NUMBER,
4111            p_new_qte_header_id   IN NUMBER,
4112            X_Return_Status       OUT NOCOPY /* file.sql.39 change */   VARCHAR2,
4113            X_Msg_Count           OUT NOCOPY /* file.sql.39 change */   VARCHAR2,
4114            X_Msg_Data            OUT NOCOPY /* file.sql.39 change */   VARCHAR2
4115          )
4116 IS
4117 
4118    CURSOR C_Get_Opp_From_Hdr (qte_hdr NUMBER) IS
4119     SELECT request_id, program_application_id, program_id, program_update_date,
4120            quote_object_type_code, quote_object_id, object_type_code, object_id,
4121            relationship_type_code, reciprocal_flag
4122     FROM ASO_QUOTE_RELATED_OBJECTS
4123     WHERE relationship_type_code = 'OPP_QUOTE'
4124       AND quote_object_id = qte_hdr;
4125 
4126    l_related_obj_rec     ASO_quote_PUB.RELATED_OBJ_Rec_Type  := ASO_quote_PUB.G_MISS_RELATED_OBJ_REC;
4127    l_related_obj_id      NUMBER;
4128 
4129 BEGIN
4130 
4131    x_return_status := FND_API.G_RET_STS_SUCCESS;
4132 IF aso_debug_pub.g_debug_flag = 'Y' THEN
4133 aso_debug_pub.ADD ( 'Copy_Opp_Quote: p_qte_header_id: ' || p_qte_header_id, 1 , 'N' );
4134 aso_debug_pub.ADD ( 'Copy_Opp_Quote: p_new_qte_header_id: ' || p_new_qte_header_id, 1 , 'N' );
4135 END IF;
4136 
4137    OPEN C_Get_Opp_From_Hdr (p_qte_header_id);
4138    FETCH C_Get_Opp_From_Hdr INTO l_related_obj_rec.request_id, l_related_obj_rec.program_application_id,
4139          l_related_obj_rec.program_id, l_related_obj_rec.program_update_date,
4140          l_related_obj_rec.quote_object_type_code, l_related_obj_rec.quote_object_id,
4141          l_related_obj_rec.object_type_code, l_related_obj_rec.object_id,
4142          l_related_obj_rec.relationship_type_code, l_related_obj_rec.reciprocal_flag;
4143    IF C_Get_Opp_From_Hdr%NOTFOUND THEN
4144 IF aso_debug_pub.g_debug_flag = 'Y' THEN
4145 aso_debug_pub.ADD ( 'Copy_Opp_Quote: Not from Opportunity ', 1 , 'N' );
4146 END IF;
4147        CLOSE C_Get_Opp_From_Hdr;
4148        RETURN;
4149    END IF;
4150    CLOSE C_Get_Opp_From_Hdr;
4151 
4152    l_related_obj_rec.quote_object_id := p_new_qte_header_id;
4153 
4154 
4155 IF aso_debug_pub.g_debug_flag = 'Y' THEN
4156 aso_debug_pub.ADD ( 'Copy_Opp_Quote: before insert rel object ', 1 , 'N' );
4157 END IF;
4158       aso_related_obj_pvt.create_related_obj (
4159         p_api_version_number         => 1.0,
4160         p_validation_level           => fnd_api.g_valid_level_none,
4161         p_related_obj_rec            => l_related_obj_rec,
4162         x_related_object_id          => l_related_obj_id,
4163         x_return_status              => x_return_status,
4164         x_msg_count                  => x_msg_count,
4165         x_msg_data                   => x_msg_data
4166       );
4167 
4168 IF aso_debug_pub.g_debug_flag = 'Y' THEN
4169 aso_debug_pub.ADD ( 'Copy_Opp_Quote: after insert_rel_object:x_return_status: ' || x_return_status, 1 , 'N' );
4170 END IF;
4171       IF x_return_status <> fnd_api.g_ret_sts_success THEN
4172         IF fnd_msg_pub.check_msg_level (fnd_msg_pub.g_msg_lvl_error) THEN
4173           fnd_message.set_name ( 'ASO', 'ASO_API_ERROR_IN_CREATING_RLTSHIPS');
4174           fnd_msg_pub.ADD;
4175         END IF;
4176 
4177       END IF;
4178 
4179 
4180 END Copy_Opp_Quote;
4181 
4182 PROCEDURE Split_Model_Line (
4183     P_Api_Version_Number   IN NUMBER,
4184     P_Init_Msg_List        IN VARCHAR2     := FND_API.G_FALSE,
4185     P_Commit               IN VARCHAR2     := FND_API.G_FALSE,
4186     P_Control_Rec            IN   ASO_QUOTE_PUB.Control_Rec_Type,
4187     P_Qte_Header_Rec         IN   ASO_QUOTE_PUB.Qte_Header_Rec_Type,
4188     P_Original_Qte_Line_Rec  IN   ASO_QUOTE_PUB.Qte_Line_Rec_Type,
4189     P_Qte_Line_Tbl         IN ASO_QUOTE_PUB.Qte_Line_Tbl_Type,
4190     X_Quote_Line_Tbl       OUT NOCOPY /* file.sql.39 change */    ASO_QUOTE_PUB.Qte_Line_Tbl_Type,
4191     X_Return_Status        OUT NOCOPY /* file.sql.39 change */    VARCHAR2,
4192     X_Msg_Count            OUT NOCOPY /* file.sql.39 change */    VARCHAR2,
4193     X_Msg_Data             OUT NOCOPY /* file.sql.39 change */    VARCHAR2 )
4194 
4195 IS
4196 
4197       CURSOR C_Validate_Quote (
4198           x_qte_header_id NUMBER
4199        ) IS
4200          SELECT 'X'
4201          FROM   ASO_QUOTE_HEADERS_ALL
4202          WHERE  quote_header_id = x_qte_header_id;
4203 
4204       CURSOR C_Validate_Quote_Line (
4205           x_qte_header_id NUMBER,
4206           x_qte_line_id NUMBER
4207        ) IS
4208          SELECT 'X'
4209          FROM   ASO_QUOTE_LINES_ALL
4210          WHERE  quote_header_id = x_qte_header_id
4211          AND quote_line_id = x_qte_line_id;
4212 
4213 
4214       CURSOR C_Serviceable_Product (
4215           l_organization_id NUMBER
4216        , l_inv_item_id NUMBER
4217        ) IS
4218          SELECT serviceable_product_flag, service_item_flag
4219          FROM   MTL_SYSTEM_ITEMS_VL
4220          WHERE  inventory_item_id = l_inv_item_id
4221          AND    organization_id = l_organization_id;
4222 
4223 
4224       CURSOR c_price_adj_rel (
4225             x_quote_line_id NUMBER
4226        ) IS
4227          SELECT apr.ADJ_RELATIONSHIP_ID, apr.CREATION_DATE, apr.CREATED_BY
4228               , apr.LAST_UPDATE_DATE, apr.LAST_UPDATED_BY
4229               , apr.LAST_UPDATE_LOGIN, apr.PROGRAM_APPLICATION_ID
4230               , apr.PROGRAM_ID, apr.PROGRAM_UPDATE_DATE, apr.REQUEST_ID
4231               , apr.QUOTE_LINE_ID, apr.PRICE_ADJUSTMENT_ID
4232               , apr.RLTD_PRICE_ADJ_ID, apr.OBJECT_VERSION_NUMBER
4233          FROM   ASO_PRICE_ADJ_RELATIONSHIPS apr
4234               , ASO_PRICE_ADJUSTMENTS apa
4235 
4236          WHERE  apr.price_adjustment_id = apa.price_adjustment_id
4237          AND    apr.quote_line_id = x_quote_line_id
4238          AND    apa.quote_line_id = x_quote_line_id
4239          AND    apa.modifier_line_type_code <> 'PRG';
4240 
4241 
4242     CURSOR C_Get_Ship_Id (
4243           lc_line_id NUMBER
4244        ) IS
4245          SELECT shipment_id
4246          FROM   ASO_SHIPMENTS
4247          WHERE  quote_line_id = lc_line_id;
4248 
4249 
4250       CURSOR c_line_relation (
4251           x_quote_line_id NUMBER
4252        ) IS
4253          SELECT LINE_RELATIONSHIP_ID, CREATION_DATE, CREATED_BY
4254               , LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
4255               , REQUEST_ID, PROGRAM_APPLICATION_ID, PROGRAM_ID
4256               , PROGRAM_UPDATE_DATE, QUOTE_LINE_ID, RELATED_QUOTE_LINE_ID
4257               , RELATIONSHIP_TYPE_CODE, RECIPROCAL_FLAG, OBJECT_VERSION_NUMBER
4258          FROM   ASO_LINE_RELATIONSHIPS
4259          WHERE  relationship_type_code <> 'SERVICE'
4260 	    CONNECT BY PRIOR related_quote_line_id = quote_line_id
4261          START WITH quote_line_id = x_quote_line_id;
4262 
4263     CURSOR get_latest_date (
4264       c_quote_header_id                    NUMBER
4265     ) IS
4266       SELECT last_update_date
4267       FROM aso_quote_headers_all
4268       WHERE quote_header_id = c_quote_header_id;
4269 
4270 
4271     Cursor Get_Max_Line_Number ( c_QUOTE_HEADER_ID Number) IS
4272     Select Max(Line_number)
4273     From ASO_QUOTE_LINES_ALL
4274     WHERE quote_header_id = c_QUOTE_HEADER_ID;
4275 
4276     x_qte_header_rec              aso_quote_pub.qte_header_rec_type;
4277     x_qte_line_tbl                aso_quote_pub.qte_line_tbl_type;
4278     x_qte_line_dtl_tbl            aso_quote_pub.qte_line_dtl_tbl_type;
4279     x_hd_price_attributes_tbl     aso_quote_pub.price_attributes_tbl_type;
4280     x_hd_payment_tbl              aso_quote_pub.payment_tbl_type;
4281     x_hd_shipment_tbl             aso_quote_pub.shipment_tbl_type;
4282     x_hd_freight_charge_tbl       aso_quote_pub.freight_charge_tbl_type;
4283     x_hd_tax_detail_tbl           aso_quote_pub.tax_detail_tbl_type;
4284     x_line_attr_ext_tbl           aso_quote_pub.line_attribs_ext_tbl_type;
4285     x_line_rltship_tbl            aso_quote_pub.line_rltship_tbl_type;
4286     x_price_adjustment_tbl        aso_quote_pub.price_adj_tbl_type;
4287     x_price_adj_attr_tbl          aso_quote_pub.price_adj_attr_tbl_type;
4288     x_price_adj_rltship_tbl       aso_quote_pub.price_adj_rltship_tbl_type;
4289     x_ln_price_attributes_tbl     aso_quote_pub.price_attributes_tbl_type;
4290     x_ln_payment_tbl              aso_quote_pub.payment_tbl_type;
4291     x_ln_shipment_tbl             aso_quote_pub.shipment_tbl_type;
4292     x_ln_freight_charge_tbl       aso_quote_pub.freight_charge_tbl_type;
4293     x_ln_tax_detail_tbl           aso_quote_pub.tax_detail_tbl_type;
4294     l_qte_line_tbl ASO_QUOTE_PUB.Qte_Line_Tbl_Type;
4295     l_line_number                 NUMBER;
4296 
4297    l_val                       VARCHAR2 ( 1 );
4298    l_qte_line_rec              ASO_QUOTE_PUB.qte_line_rec_Type;
4299    l_qte_line_detail_tbl       ASO_QUOTE_PUB.Qte_Line_Dtl_Tbl_Type;
4300    l_qte_shipment_dtl_tbl      ASO_QUOTE_PUB.Shipment_Tbl_Type;
4301    l_quantity                  NUMBER := 0;
4302    l_remaining_quantity        NUMBER := 0;
4303    l_return_value              Varchar2(1);
4304 
4305       l_line_index_link_tbl ASO_QUOTE_HEADERS_PVT.Index_Link_Tbl_Type;
4306       l_old_config_header_id NUMBER;
4307       l_old_config_revision_num NUMBER;
4308       l_config_hdr_id NUMBER;
4309       l_config_rev_nbr NUMBER;
4310       l_return_status VARCHAR2 ( 1 );
4311       l_api_version_number CONSTANT NUMBER := 1.0;
4312       l_api_version CONSTANT NUMBER := 1.0;
4313       l_service_item_flag VARCHAR2 ( 1 );
4314       l_serviceable_product_flag VARCHAR2 ( 1 );
4315       l_Line_Attr_Ext_Tbl ASO_QUOTE_PUB.Line_Attribs_Ext_Tbl_Type;
4316       l_Price_Adj_Tbl ASO_QUOTE_PUB.Price_Adj_Tbl_Type;
4317       l_Price_Attr_Tbl ASO_QUOTE_PUB.Price_Attributes_Tbl_Type;
4318       l_Price_Adj_Attr_Tbl ASO_QUOTE_PUB.Price_Adj_Attr_Tbl_Type;
4319       l_payment_tbl ASO_QUOTE_PUB.Payment_Tbl_Type;
4320       l_shipment_tbl ASO_QUOTE_PUB.Shipment_Tbl_Type;
4321       l_sales_credit_tbl ASO_QUOTE_PUB.Sales_Credit_Tbl_Type;
4322       l_quote_party_tbl ASO_QUOTE_PUB.Quote_Party_Tbl_Type;
4323       l_freight_charge_tbl ASO_QUOTE_PUB.Freight_Charge_Tbl_Type;
4324       l_tax_detail_tbl ASO_QUOTE_PUB.Tax_Detail_Tbl_Type;
4325       lx_ln_Price_Adj_Tbl ASO_QUOTE_PUB.Price_Adj_Tbl_Type;
4326       lx_qte_line_rec ASO_QUOTE_PUB.Qte_Line_Rec_Type;
4327       l_control_rec ASO_QUOTE_PUB.Control_Rec_Type;
4328       l_config_control_rec ASO_CFG_INT.Control_Rec_Type
4329                                             := ASO_CFG_INT.G_MISS_Control_Rec;
4330      l_Copy_Quote_Control_Rec ASO_COPY_QUOTE_PUB.Copy_Quote_Control_Rec_Type;
4331       LX_PRICE_ADJ_RLTSHIP_ID NUMBER;
4332       LX_LINE_RELATIONSHIP_ID NUMBER;
4333      G_USER_ID NUMBER := FND_GLOBAL.USER_ID;
4334       G_LOGIN_ID NUMBER := FND_GLOBAL.CONC_LOGIN_ID;
4335       l_ship_id NUMBER;
4336     --  l_appl_param_rec   CZ_API_PUB.appl_param_rec_type;
4337       l_price_index_link_tbl ASO_QUOTE_HEADERS_PVT.Index_Link_Tbl_Type;
4338 
4339       l_quote_header_rec          ASO_QUOTE_PUB.Qte_Header_Rec_Type := ASO_QUOTE_PUB.G_MISS_Qte_Header_Rec;
4340       l_api_name varchar2(50) := 'Split_Model_Line';
4341       TYPE inserted_qte_line_Rec_Type IS RECORD
4342       (
4343        quote_line_id         NUMBER:= FND_API.G_MISS_NUM,
4344        quantity              NUMBER := FND_API.G_MISS_NUM
4345       );
4346 
4347       TYPE  inserted_qte_line_Tbl_Type      IS TABLE OF inserted_qte_line_Rec_Type INDEX BY BINARY_INTEGER;
4348 
4349       G_MISS_inserted_qte_line_Rec   inserted_qte_line_Rec_Type;
4350       G_MISS_inserted_qte_line_tbl   inserted_qte_line_tbl_type;
4351       l_inserted_qte_line_tbl  inserted_qte_line_Tbl_Type := G_MISS_inserted_qte_line_tbl;
4352 
4353       l_total_lines NUMBER := 0;
4354 
4355       l_qty_qte_line_tbl ASO_QUOTE_PUB.Qte_Line_Tbl_Type := ASO_QUOTE_PUB.G_MISS_Qte_Line_Tbl;
4356       l_orig_item_id_tbl CZ_API_PUB.number_tbl_type;
4357       l_new_item_id_tbl CZ_API_PUB.number_tbl_type;
4358       -- hyang: for bug 2692785
4359       lx_status                     VARCHAR2(1);
4360 
4361       l_quote_party_tbl_out      ASO_QUOTE_PUB.Quote_Party_Tbl_Type;
4362       l_sales_credit_tbl_out     ASO_QUOTE_PUB.Sales_Credit_Tbl_Type;
4363       l_tax_detail_tbl_out       ASO_QUOTE_PUB.Tax_Detail_Tbl_Type;
4364       l_freight_charge_tbl_out   ASO_QUOTE_PUB.Freight_Charge_Tbl_Type;
4365       l_shipment_tbl_out         ASO_QUOTE_PUB.Shipment_Tbl_Type;
4366       l_payment_tbl_out          ASO_QUOTE_PUB.Payment_Tbl_Type;
4367       l_Price_Adj_Attr_Tbl_out   ASO_QUOTE_PUB.Price_Adj_Attr_Tbl_Type;
4368       l_Price_Attr_Tbl_out       ASO_QUOTE_PUB.Price_Attributes_Tbl_Type;
4369       l_qte_line_detail_tbl_out  ASO_QUOTE_PUB.Qte_Line_Dtl_Tbl_Type;
4370       l_Line_Attr_Ext_Tbl_out    ASO_QUOTE_PUB.Line_Attribs_Ext_Tbl_Type;
4371 
4372       l_dup_Price_Adj_Tbl        ASO_QUOTE_PUB.Price_Adj_Tbl_Type;
4373       l_ato_model                VARCHAR2(1) := FND_API.G_FALSE;
4374 
4375 
4376   BEGIN
4377 
4378      IF aso_debug_pub.g_debug_flag = 'Y' THEN
4379 	aso_debug_pub.ADD ( 'SPLIT_MODEL_LINE - Begin- ASO_COPY_QUOTE_PVT.SPLIT_MODEL_LINE ' , 1 , 'Y' );
4380 	END IF;
4381       -- Standard Start of API savepoint
4382       SAVEPOINT SPLIT_MODEL_LINE_PVT;
4383 
4384       -- Standard call to check for call compatibility.
4385       IF NOT FND_API.Compatible_API_Call (
4386                  l_api_version_number
4387               , p_api_version_number
4388               , l_api_name
4389               , G_PKG_NAME
4390               ) THEN
4391          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4392       END IF;
4393 
4394       -- Initialize message list if p_init_msg_list is set to TRUE.
4395       IF FND_API.to_Boolean ( p_init_msg_list ) THEN
4396          FND_MSG_PUB.initialize;
4397       END IF;
4398       -- Debug Message
4399       IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW ) THEN
4400          FND_MESSAGE.Set_Name ('ASO' , 'Copy Quote API: Start' );
4401          FND_MSG_PUB.ADD;
4402       END IF;
4403 
4404       --  Initialize API return status to success
4405       x_return_status            := FND_API.G_RET_STS_SUCCESS;
4406 
4407 --
4408 -- API body
4409 --
4410 -- Validating the qte_header_id
4411 
4412     -- hyang: for bug 2692785
4413     ASO_CONC_REQ_INT.Lock_Exists(
4414       p_quote_header_id => P_Qte_Header_Rec.quote_header_id,
4415       x_status          => lx_status);
4416 
4417     IF (lx_status = FND_API.G_TRUE) THEN
4418       IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
4419         FND_MESSAGE.Set_Name('ASO', 'ASO_CONC_REQUEST_RUNNING');
4420         FND_MSG_PUB.ADD;
4421       END IF;
4422       RAISE FND_API.G_EXC_ERROR;
4423     END IF;
4424 
4425    IF aso_debug_pub.g_debug_flag = 'Y' THEN
4426    aso_debug_pub.ADD ( 'SPLIT_MODEL_LINE - Vaildating the quote ' , 1 , 'Y' );
4427    END IF;
4428 
4429       OPEN C_Validate_Quote ( P_Qte_Header_Rec.quote_header_id);
4430       FETCH C_Validate_Quote INTO l_val;
4431 
4432       IF C_Validate_Quote%NOTFOUND THEN
4433 
4434          x_return_status            := FND_API.G_RET_STS_ERROR;
4435          IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
4436             FND_MESSAGE.Set_Name ('ASO' , 'ASO_API_INVALID_ID' );
4437             FND_MESSAGE.Set_Token ('COLUMN' , 'ORIGINAL_QUOTE_ID', FALSE );
4438             FND_MESSAGE.Set_Token ( 'VALUE' , TO_CHAR ( P_Qte_Header_Rec.quote_header_id ) , FALSE );
4439             FND_MSG_PUB.ADD;
4440          END IF;
4441          CLOSE C_Validate_Quote;
4442          RAISE FND_API.G_EXC_ERROR;
4443       END IF;
4444 
4445       CLOSE C_Validate_Quote;
4446 
4447     IF aso_debug_pub.g_debug_flag = 'Y' THEN
4448     aso_debug_pub.ADD ( 'SPLIT_MODEL_LINE - After Validating the Quote  ' , 1 , 'N' );
4449     END IF;
4450  -- Validating if the quote_line_id belongs to the qte_header_id
4451 
4452       OPEN C_Validate_Quote_Line ( P_Qte_Header_Rec.quote_header_id, P_Original_Qte_Line_Rec.quote_line_id);
4453       FETCH C_Validate_Quote_Line INTO l_val;
4454       IF C_Validate_Quote_Line%NOTFOUND THEN
4455          x_return_status            := FND_API.G_RET_STS_ERROR;
4456          IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
4457             FND_MESSAGE.Set_Name ('ASO' , 'ASO_API_INVALID_ID' );
4458             FND_MESSAGE.Set_Token ('COLUMN' , 'ORIGINAL_QUOTE_ID', FALSE );
4459             FND_MESSAGE.Set_Token ( 'VALUE' , TO_CHAR ( P_Original_Qte_Line_Rec.quote_line_id ) , FALSE );
4460             FND_MSG_PUB.ADD;
4461          END IF;
4462          CLOSE C_Validate_Quote_Line;
4463          RAISE FND_API.G_EXC_ERROR;
4464       END IF;
4465 
4466       CLOSE C_Validate_Quote_Line;
4467 
4468     IF aso_debug_pub.g_debug_flag = 'Y' THEN
4469     aso_debug_pub.ADD ( 'SPLIT_MODEL_LINE - After Validating the Quote Line  ' , 1 , 'N' );
4470     END IF;
4471 
4472       -- Getting the quote line record
4473       l_qte_line_rec := ASO_UTILITY_PVT.Query_Qte_Line_Row ( P_Original_Qte_Line_Rec.quote_line_id );
4474 
4475     -- Getting the quote line detail record
4476       l_qte_line_detail_tbl := ASO_UTILITY_PVT.Query_Line_Dtl_Rows ( P_Original_Qte_Line_Rec.quote_line_id );
4477 
4478     -- Getting the shipment details for the quote line
4479       l_qte_shipment_dtl_tbl := ASO_UTILITY_PVT.Query_Shipment_Rows (P_Qte_Header_Rec.quote_header_id, P_Original_Qte_Line_Rec.quote_line_id );
4480 
4481 
4482     -- Copy the Qte line table to the local variable
4483     For i in 1..P_Qte_Line_Tbl.count LOOP
4484 
4485      l_qty_qte_line_tbl(i).quantity := P_Qte_Line_Tbl(i).quantity;
4486 
4487     END LOOP;
4488 
4489 
4490     -- Looping through the quantity list to get the total quantity
4491      For i in 1..l_qty_qte_line_tbl.count LOOP
4492 
4493      l_quantity := l_quantity +  l_qty_qte_line_tbl(i).quantity;
4494 
4495      END LOOP;
4496 
4497     IF aso_debug_pub.g_debug_flag = 'Y' THEN
4498     aso_debug_pub.ADD ( 'SPLIT_MODEL_LINE - Total Qty Passed =  '||to_char(l_quantity) , 1 , 'N' );
4499     END IF;
4500 
4501 
4502    -- If quantity list total is less than quote line quantity
4503 
4504    IF l_quantity < l_qte_line_rec.quantity THEN
4505 
4506       -- storing the remaining quantity
4507      l_remaining_quantity := l_qte_line_rec.quantity - l_quantity;
4508 
4509      IF aso_debug_pub.g_debug_flag = 'Y' THEN
4510 	aso_debug_pub.ADD ( 'SPLIT_MODEL_LINE - Remaining Qty =  '||to_char(l_remaining_quantity) , 1 , 'N' );
4511 	END IF;
4512 
4513 	l_qty_qte_line_tbl( l_qty_qte_line_tbl.count + 1 ).quantity  := l_remaining_quantity;
4514 
4515    ELSIF l_quantity > l_qte_line_rec.quantity THEN
4516 
4517     x_return_status            := FND_API.G_RET_STS_ERROR;
4518 
4519     IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
4520 
4521 
4522      FND_MESSAGE.Set_Name('ASO', 'ASO_ERR_SPLITLINE_QTY');
4523      FND_MESSAGE.Set_Token('TBLNAME', 'p_qte_line_tbl', FALSE);
4524      FND_MESSAGE.Set_Token('VALUE', p_qte_line_tbl(1).quantity, FALSE);
4525      FND_MSG_PUB.ADD;
4526     END IF;
4527     RAISE FND_API.G_EXC_ERROR;
4528 
4529    END IF;
4530 
4531    -- Check to see if the item is a component
4532    IF l_qte_line_rec.item_type_code <> 'MDL' then
4533 
4534       IF aso_debug_pub.g_debug_flag = 'Y' THEN
4535 	 aso_debug_pub.ADD ( 'SPLIT_MODEL_LINE - Item is not a Model Item', 1 , 'N' );
4536 	 END IF;
4537       x_return_status            := FND_API.G_RET_STS_ERROR;
4538 
4539     IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
4540      FND_MESSAGE.Set_Name ('ASO' , 'ASO_API_CANNOT_SPLIT' );
4541      FND_MSG_PUB.ADD;
4542     END IF;
4543     RAISE FND_API.G_EXC_ERROR;
4544 
4545   END IF;
4546 
4547 
4548    -- Check to see if the item is a service item
4549    IF l_qte_line_rec.service_item_flag  = 'Y'  THEN
4550 
4551       IF aso_debug_pub.g_debug_flag = 'Y' THEN
4552 	 aso_debug_pub.ADD ( 'SPLIT_MODEL_LINE - Item is Service  Item', 1 , 'N' );
4553 	 END IF;
4554       x_return_status            := FND_API.G_RET_STS_ERROR;
4555 
4556     IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
4557      FND_MESSAGE.Set_Name ('ASO' , 'ASO_API_CANNOT_SPLIT' );
4558      FND_MSG_PUB.ADD;
4559     END IF;
4560     RAISE FND_API.G_EXC_ERROR;
4561 
4562   END IF;
4563 
4564 
4565 
4566 
4567 /*
4568  -- Validating if the  item is a container item
4569      l_appl_param_rec.calling_application_id := 769;
4570 
4571         cz_network_api_pub.is_container(p_api_version  => 1.0
4572                                        ,p_inventory_item_id  => l_qte_line_rec.inventory_item_id
4573                                        ,p_organization_id   => l_qte_line_rec.organization_id
4574                                        ,p_appl_param_rec => l_appl_param_rec
4575                                        ,x_return_value       => l_return_value
4576                                        ,x_return_status      => l_return_status
4577                                        ,x_msg_count          => x_msg_count
4578                                        ,x_msg_data           => x_msg_data  );
4579 
4580            IF ( l_return_status = FND_API.G_RET_STS_SUCCESS  ) THEN
4581 
4582               IF l_return_value = 'Y' THEN
4583                x_return_status            := FND_API.G_RET_STS_ERROR;
4584                IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
4585                 FND_MESSAGE.Set_Name ('ASO' , 'ASO_CON_ITM_ERR' );
4586                 FND_MSG_PUB.ADD;
4587                END IF;
4588                RAISE FND_API.G_EXC_ERROR;
4589               END IF;
4590 
4591            ELSE
4592                   x_return_status            := FND_API.G_RET_STS_UNEXP_ERROR;
4593                   IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
4594                      FND_MESSAGE.Set_Name ('ASO' , 'ASO_API_UNEXP_ERROR' );
4595                      FND_MESSAGE.Set_Token ( 'ROW' , 'ASO_COPYLINE AFTER_CONFIG_COPY' , TRUE );
4596                      FND_MSG_PUB.ADD;
4597                   END IF;
4598                   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4599 
4600            END IF;
4601 */
4602 
4603  IF l_qte_line_rec.line_category_code = 'RETURN' THEN
4604    IF aso_debug_pub.g_debug_flag = 'Y' THEN
4605    aso_debug_pub.ADD ('l_qte_line_dtl_tbl.count' , 1, 'N' );
4606    aso_debug_pub.ADD ( 'SPLIT_MODEL_LINE - Line Category Code is RETURN ', 1 , 'N' );
4607    END IF;
4608 
4609      IF l_qte_line_detail_tbl.count > 0 THEN
4610 
4611      IF ( l_qte_line_detail_tbl(1).RETURN_REF_TYPE = 'SALES ORDER' AND
4612           l_qte_line_detail_tbl(1).RETURN_REF_LINE_ID IS NOT NULL AND
4613           l_qte_line_detail_tbl(1).INSTANCE_ID IS NOT NULL )
4614      OR ( l_qte_line_detail_tbl(1).REF_TYPE_CODE = 'TOP_MODEL' ) THEN
4615          x_return_status            := FND_API.G_RET_STS_ERROR;
4616 
4617          IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
4618             FND_MESSAGE.Set_Name ('ASO' , 'ASO_API_CANNOT_SPLIT' );
4619             FND_MSG_PUB.ADD;
4620          END IF;
4621 
4622      END IF;
4623 
4624     END IF;
4625 
4626  END IF;
4627 
4628 
4629   IF aso_debug_pub.g_debug_flag = 'Y' THEN
4630   aso_debug_pub.ADD ( 'SPLIT_MODEL_LINE - Line Tbl Count = '||to_char(l_qty_qte_line_tbl.count), 1 , 'N' );
4631   END IF;
4632      -- Copying the line
4633      For i in 1..l_qty_qte_line_tbl.count-1  LOOP
4634 
4635         -- set the quantity for the line rec record
4636         --l_qte_line_rec.quantity := l_qty_qte_line_tbl(i).quantity;
4637         l_qte_line_rec.quote_header_id := P_Qte_Header_Rec.quote_header_id;
4638 
4639          IF l_qte_line_rec.uom_code = 'ENR' THEN
4640             x_return_status            := FND_API.G_RET_STS_ERROR;
4641             IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
4642                FND_MESSAGE.Set_Name ('ASO' , 'ASO_CANNOT_COPY_EDU' );
4643                FND_MSG_PUB.ADD;
4644             END IF;
4645             RAISE FND_API.G_EXC_ERROR;
4646          END IF;
4647          -- Initializing the line index table
4648          l_line_index_link_tbl (P_Original_Qte_Line_Rec.quote_line_id ) :=  FND_API.G_MISS_NUM;
4649 
4650          IF l_line_index_link_tbl ( P_Original_Qte_Line_Rec.quote_line_id ) = FND_API.G_MISS_NUM THEN
4651             l_qte_line_detail_tbl         :=
4652                         ASO_UTILITY_PVT.Query_Line_Dtl_Rows ( P_Original_Qte_Line_Rec.quote_line_id );
4653 
4654             IF l_qte_line_rec.item_type_code = 'MDL' THEN
4655 
4656              IF aso_debug_pub.g_debug_flag = 'Y' THEN
4657 		   aso_debug_pub.ADD ( 'item_type_code = ' || l_qte_line_rec.item_type_code , 1 , 'N' );
4658 		   END IF;
4659 
4660                 IF l_qte_line_detail_tbl.COUNT > 0 THEN
4661 
4662                   IF      l_qte_line_detail_tbl ( 1 ).config_header_id IS NOT NULL
4663                       AND l_qte_line_detail_tbl ( 1 ).config_revision_num IS NOT NULL THEN
4664 
4665                      l_config_control_rec.new_config_flag := FND_API.G_TRUE;
4666 
4667                      IF (l_qte_line_detail_tbl(1).ato_line_id is not null and l_qte_line_detail_tbl(1).ato_line_id <> fnd_api.g_miss_num) then
4668                         l_ato_model := fnd_api.g_true;
4669                      end if;
4670 
4671 		   IF aso_debug_pub.g_debug_flag = 'Y' THEN
4672 		   aso_debug_pub.ADD ( ' Calling Copy Configuration ', 1 , 'N' );
4673 		   END IF;
4674 
4675                      ASO_CFG_INT.Copy_Configuration (
4676                          P_Api_version_NUmber =>         1.0
4677                       , P_config_header_id =>            l_qte_line_detail_tbl ( 1 ).config_header_id
4678                       , p_config_revision_num =>         l_qte_line_detail_tbl ( 1 ).config_revision_num
4679                       , p_copy_mode =>                   CZ_API_PUB.G_NEW_HEADER_COPY_MODE
4680                       , x_config_header_id =>            l_config_hdr_id
4681                       , x_config_revision_num =>         l_config_rev_nbr
4682                       , x_orig_item_id_tbl =>            l_orig_item_id_tbl
4683                       , x_new_item_id_tbl =>             l_new_item_id_tbl
4684                       , x_return_status =>               l_return_status
4685                       , x_msg_count =>                   x_msg_count
4686                       , x_msg_data =>                    x_msg_data
4687                       , p_autonomous_flag =>             FND_API.G_TRUE
4688 				  );
4689 
4690              IF aso_debug_pub.g_debug_flag = 'Y' THEN
4691 		   aso_debug_pub.ADD ( ' After  Calling Copy Configuration ', 1 , 'N' );
4692 		   END IF;
4693 
4694                      IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
4695                         l_old_config_header_id     :=
4696                                     l_qte_line_detail_tbl ( 1 ).config_header_id;
4697                         l_old_config_revision_num  :=
4698                                  l_qte_line_detail_tbl ( 1 ).config_revision_num;
4699                         l_qte_line_detail_tbl ( 1 ).config_header_id :=
4700                                                               l_config_hdr_id;
4701                         l_qte_line_detail_tbl ( 1 ).config_revision_num :=
4702                                                              l_config_rev_nbr;
4703 
4704 			         IF aso_debug_pub.g_debug_flag = 'Y' THEN
4705 				    aso_debug_pub.ADD ( ' Old Config Hdr Id = '||to_char(l_old_config_header_id) , 1 , 'N' );
4706 				    aso_debug_pub.ADD ( ' Old Rev Nbr =   '||to_char(l_old_config_revision_num), 1 , 'N' );
4707 				    aso_debug_pub.ADD ( 'New Config Hdr Id = '||to_char(l_config_hdr_id), 1 , 'N' );
4708 				    aso_debug_pub.ADD ( ' New Rev Nbr = '||to_char(l_config_rev_nbr), 1 , 'N' );
4709 				    END IF;
4710 
4711 				 ELSE
4712                         x_return_status            := FND_API.G_RET_STS_ERROR;
4713                         RAISE FND_API.G_EXC_ERROR;
4714                      END IF;
4715 
4716                   END IF; -- config_header_id
4717 
4718                END IF; -- line_dtl_tbl.count
4719 
4720             END IF; -- 'MDL'
4721 
4722             OPEN C_Serviceable_Product (
4723                 l_qte_line_rec.organization_id
4724              , l_qte_line_rec.inventory_item_id
4725              );
4726             FETCH C_Serviceable_Product INTO l_serviceable_product_flag
4727                                            , l_service_item_flag;
4728             CLOSE C_Serviceable_Product;
4729 
4730             IF aso_debug_pub.g_debug_flag = 'Y' THEN
4731 		  aso_debug_pub.ADD ( 'service item flag = ' || l_service_item_flag , 1 , 'N' );
4732 		  END IF;
4733             IF      l_service_item_flag = 'Y'
4734                 AND l_qte_line_detail_tbl ( 1 ).service_ref_type_code <> 'QUOTE' THEN
4735                l_service_item_flag        := 'N';
4736             END IF;
4737 		  IF aso_debug_pub.g_debug_flag = 'Y' THEN
4738             aso_debug_pub.ADD ( 'service item flag 2= ' || l_service_item_flag , 1 , 'N' );
4739 		  END IF;
4740 
4741             IF      l_qte_line_rec.item_type_code <> 'CFG'
4742                 AND l_qte_line_rec.item_type_code <> 'OPT'
4743                 AND l_service_item_flag <> 'Y' THEN
4744 
4745                l_line_attr_Ext_Tbl := ASO_UTILITY_PVT.Query_Line_Attribs_Ext_Rows ( P_Original_Qte_Line_Rec.quote_line_id);
4746 
4747                l_price_adj_tbl := ASO_UTILITY_PVT.Query_Price_Adj_NonPRG_Rows ( P_Qte_Header_Rec.quote_header_id ,
4748 			                                                                 P_Original_Qte_Line_Rec.quote_line_id);
4749                l_dup_Price_Adj_Tbl := l_price_adj_tbl;
4750 
4751                l_price_adj_attr_tbl := ASO_UTILITY_PVT.Query_Price_Adj_Attr_Rows(p_price_adj_tbl => l_price_adj_tbl);
4752 
4753                l_price_attr_tbl := ASO_UTILITY_PVT.Query_Price_Attr_Rows( P_Qte_Header_Rec.quote_header_id,
4754 			                                                           P_Original_Qte_Line_Rec.quote_line_id);
4755 
4756                /* l_payment_tbl := ASO_UTILITY_PVT.Query_Payment_Rows ( P_Qte_Header_Rec.quote_header_id,
4757 			                                                      P_Original_Qte_Line_Rec.quote_line_id); */
4758 
4759                l_shipment_tbl := ASO_UTILITY_PVT.Query_Shipment_Rows ( P_Qte_Header_Rec.quote_header_id,
4760 			                                                        P_Original_Qte_Line_Rec.quote_line_id);
4761 
4762                l_sales_credit_tbl := ASO_UTILITY_PVT.Query_Sales_Credit_Row ( P_Qte_Header_Rec.quote_header_id,
4763 			                                                               P_Original_Qte_Line_Rec.quote_line_id);
4764 
4765                l_quote_party_tbl := ASO_UTILITY_PVT.Query_Quote_Party_Row ( P_Qte_Header_Rec.quote_header_id,
4766 			                                                             P_Original_Qte_Line_Rec.quote_line_id);
4767 
4768                l_freight_charge_tbl := ASO_UTILITY_PVT.Query_Freight_Charge_Rows ( l_shipment_tbl );
4769 
4770                l_tax_detail_tbl := ASO_UTILITY_PVT.Query_Tax_Detail_Rows ( P_Qte_Header_Rec.quote_header_id,
4771 			                                                            P_Original_Qte_Line_Rec.quote_line_id,
4772 															l_shipment_tbl);
4773 
4774                l_qte_line_rec.quote_line_id := NULL;
4775 
4776                l_qte_line_rec.object_version_number := FND_API.G_MISS_NUM;
4777 
4778                --BC4J Fix
4779 
4780                 FOR j IN 1 .. l_qte_line_detail_tbl.COUNT LOOP
4781 	              l_qte_line_detail_tbl(j).quote_line_detail_id := null;
4782                    l_qte_line_detail_tbl(j).object_version_number := FND_API.G_MISS_NUM;
4783 			    l_qte_line_detail_tbl(j).top_model_line_id := null;
4784 			    l_qte_line_detail_tbl(j).ato_line_id := null;
4785                    l_qte_line_detail_tbl(j).qte_line_index := i;
4786 			 END LOOP;
4787 
4788                 FOR j IN 1 .. l_price_adj_tbl.COUNT LOOP
4789                    l_price_adj_tbl ( j ).QUOTE_HEADER_ID     := P_Qte_Header_Rec.quote_header_id;
4790                    l_price_adj_tbl ( j ).price_adjustment_id := null;
4791 			    l_price_adj_tbl ( j ).object_version_number := FND_API.G_MISS_NUM;
4792                 END LOOP;
4793 
4794                 FOR j IN 1 .. l_price_adj_attr_tbl.COUNT LOOP
4795                    l_price_adj_attr_tbl(j).price_adj_attrib_id := null;
4796 			    l_price_adj_attr_tbl(j).object_version_number := FND_API.G_MISS_NUM;
4797                 END LOOP;
4798 
4799                 FOR j IN 1 .. l_price_attr_tbl.COUNT LOOP
4800                    l_price_attr_tbl ( j ).QUOTE_HEADER_ID    := P_Qte_Header_Rec.quote_header_id;
4801                    l_price_attr_tbl ( j ).price_attribute_id := null;
4802 			    l_price_attr_tbl ( j ).object_version_number := FND_API.G_MISS_NUM;
4803                 END LOOP;
4804 
4805                 /* FOR j IN 1 .. l_payment_tbl.COUNT LOOP
4806                    l_payment_tbl ( j ).QUOTE_HEADER_ID := P_Qte_Header_Rec.quote_header_id;
4807                    l_payment_tbl ( j ).CREDIT_CARD_APPROVAL_CODE := NULL;
4808                    l_payment_tbl ( j ).CREDIT_CARD_APPROVAL_DATE := NULL;
4809                    l_payment_tbl ( j ).payment_id := NULL;
4810 			    l_payment_tbl ( j ).object_version_number := FND_API.G_MISS_NUM;
4811                 END LOOP;  */
4812 
4813                 FOR j IN 1 .. l_shipment_tbl.COUNT LOOP
4814                    l_shipment_tbl ( j ).QUOTE_HEADER_ID := P_Qte_Header_Rec.quote_header_id;
4815                    l_shipment_tbl ( j ).shipment_id := null;
4816 			    l_shipment_tbl ( j ).object_version_number := FND_API.G_MISS_NUM;
4817                 END LOOP;
4818 
4819                 FOR j IN 1 .. l_sales_credit_tbl.COUNT LOOP
4820                    l_sales_credit_tbl(j).QUOTE_HEADER_ID := P_Qte_Header_Rec.quote_header_id;
4821                    l_sales_credit_tbl(j).sales_credit_id := null;
4822 			    l_sales_credit_tbl(j).object_version_number := FND_API.G_MISS_NUM;
4823                 END LOOP;
4824 
4825                 FOR j IN 1 .. l_quote_party_tbl.COUNT LOOP
4826                    l_quote_party_tbl(j).QUOTE_HEADER_ID  := P_Qte_Header_Rec.quote_header_id;
4827                    l_quote_party_tbl(j).QUOTE_PARTY_ID  := null;
4828 			    l_quote_party_tbl(j).object_version_number := FND_API.G_MISS_NUM;
4829                 END LOOP;
4830 
4831                 FOR j IN 1 .. l_tax_detail_tbl.COUNT LOOP
4832                    l_tax_detail_tbl(j).tax_detail_id  := null;
4833 			    l_tax_detail_tbl(j).object_version_number := FND_API.G_MISS_NUM;
4834                 END LOOP;
4835 
4836                 FOR j IN 1 .. l_line_attr_Ext_Tbl.COUNT LOOP
4837                    l_line_attr_Ext_Tbl(j).line_attribute_id  := null;
4838 			    l_line_attr_Ext_Tbl(j).object_version_number := FND_API.G_MISS_NUM;
4839                 END LOOP;
4840 
4841                 FOR j IN 1 .. l_freight_charge_tbl.COUNT LOOP
4842                    l_freight_charge_tbl(j).freight_charge_id  := null;
4843 			    l_freight_charge_tbl(j).object_version_number := FND_API.G_MISS_NUM;
4844                 END LOOP;
4845 
4846 
4847 	          --End of BC4J Fix
4848 
4849              -- Setting the new line number if a quote line is being copied
4850              IF ( P_Original_Qte_Line_Rec.quote_line_id IS NOT NULL ) AND
4851                 (P_Original_Qte_Line_Rec.quote_line_id <> FND_API.G_MISS_NUM) THEN
4852 
4853                 Open Get_Max_Line_Number(P_Qte_Header_Rec.quote_header_id);
4854                 Fetch Get_Max_Line_Number into l_line_number;
4855                 Close Get_Max_Line_Number;
4856 
4857                 l_qte_line_rec.line_number := l_line_number + 10000;
4858 
4859              END IF;
4860 
4861                IF aso_debug_pub.g_debug_flag = 'Y' THEN
4862 			aso_debug_pub.ADD ( 'Split_Model_Line - Before insert_quote_line_rows: ' ||
4863                                     P_Original_Qte_Line_Rec.quote_line_id , 1 , 'Y' );
4864                END IF;
4865 
4866 			ASO_QUOTE_LINES_PVT.Insert_Quote_Line_Rows (
4867                    p_control_rec =>                l_control_rec
4868                 , P_qte_Line_Rec =>               l_qte_line_rec
4869                 , P_qte_line_dtl_tbl =>            l_qte_line_detail_tbl
4870                 , P_Line_Attribs_Ext_Tbl =>        l_line_attr_ext_tbl
4871                 , P_price_attributes_tbl =>        l_price_attr_tbl
4872                 , P_Price_Adj_Tbl =>               l_price_adj_tbl
4873                 , P_Price_Adj_Attr_Tbl =>          l_Price_Adj_Attr_Tbl
4874                 , P_Payment_Tbl =>                 ASO_QUOTE_PUB.g_miss_payment_tbl
4875                 , P_Shipment_Tbl =>                l_shipment_tbl
4876                 , P_Freight_Charge_Tbl =>          l_freight_charge_tbl
4877                 , P_Tax_Detail_Tbl =>              l_tax_detail_tbl
4878                 , P_Sales_Credit_Tbl =>            l_sales_credit_tbl
4879                 , P_Quote_Party_Tbl =>             l_quote_party_tbl
4880 			 , x_qte_Line_Rec =>                lx_qte_line_rec
4881                 , x_qte_line_dtl_tbl =>            l_qte_line_detail_tbl_out
4882                 , x_Line_Attribs_Ext_Tbl =>        l_line_attr_Ext_Tbl_out
4883                 , x_price_attributes_tbl =>        l_price_attr_tbl_out
4884                 , x_Price_Adj_Tbl =>               lx_ln_price_adj_tbl
4885                 , x_Price_Adj_Attr_Tbl =>          l_Price_Adj_Attr_Tbl_out
4886                 , x_Payment_Tbl =>                 l_payment_tbl_out
4887                 , x_Shipment_Tbl =>                l_shipment_tbl_out
4888                 , x_Freight_Charge_Tbl =>          l_freight_charge_tbl_out
4889                 , x_Tax_Detail_Tbl =>              l_tax_detail_tbl_out
4890                 , x_Sales_Credit_Tbl =>            l_sales_credit_tbl_out
4891                 , x_Quote_Party_Tbl =>             l_quote_party_tbl_out
4892                 , x_Return_Status =>               l_return_status
4893                 , x_Msg_Count =>                   x_msg_count
4894                 , x_Msg_Data =>                    x_msg_data
4895                 );
4896 
4897       l_quote_party_tbl :=l_quote_party_tbl_out ;
4898       l_sales_credit_tbl :=l_sales_credit_tbl_out ;
4899       l_tax_detail_tbl := l_tax_detail_tbl_out    ;
4900       l_freight_charge_tbl := l_freight_charge_tbl_out  ;
4901       l_shipment_tbl := l_shipment_tbl_out   ;
4902       l_payment_tbl := l_payment_tbl_out     ;
4903       l_Price_Adj_Attr_Tbl  := l_Price_Adj_Attr_Tbl_out  ;
4904       l_Price_Attr_Tbl  :=  l_Price_Attr_Tbl_out     ;
4905       l_qte_line_detail_tbl := l_qte_line_detail_tbl_out   ;
4906       l_Line_Attr_Ext_Tbl  :=  l_Line_Attr_Ext_Tbl_out;
4907 
4908                IF ( l_return_status = FND_API.G_RET_STS_UNEXP_ERROR ) THEN
4909                   x_return_status            := FND_API.G_RET_STS_UNEXP_ERROR;
4910                    IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
4911                      FND_MESSAGE.Set_Name ('ASO' , 'ASO_API_UNEXP_ERROR' );
4912                      FND_MESSAGE.Set_Token ( 'ROW' , 'ASO_COPYLINE AFTER_INSERT' , TRUE );
4913                      FND_MSG_PUB.ADD;
4914                   END IF;
4915                   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4916                ELSIF ( l_return_status = FND_API.G_RET_STS_ERROR ) THEN
4917                   x_return_status            := FND_API.G_RET_STS_ERROR;
4918                   RAISE FND_API.G_EXC_ERROR;
4919                END IF;
4920                IF aso_debug_pub.g_debug_flag = 'Y' THEN
4921 			   aso_debug_pub.ADD ( 'Split_Model_Line - After insert_quote_line_rows - status: ' ||l_return_status ,1 , 'Y' );
4922                   aso_debug_pub.ADD ( 'SPLIT_MODEL_LINE - New Qte Line ID ='||to_char(lx_qte_line_rec.quote_line_id), 1 , 'N' );
4923                   aso_debug_pub.ADD ( 'Split_Model_Line - Updating the top model and ato line id for the top model line ', 1 , 'Y' );
4924                   aso_debug_pub.ADD ( 'Split_Model_Line - l_ato_model: ' || l_ato_model , 1 , 'Y' );
4925                END IF;
4926                update aso_quote_line_details
4927                set top_model_line_id =  lx_qte_line_rec.quote_line_id,
4928                    ato_line_id       =  decode(l_ato_model,fnd_api.g_true,lx_qte_line_rec.quote_line_id,null)
4929                where quote_line_id = lx_qte_line_rec.quote_line_id;
4930 
4931                -- Storing the new quote line id to be used later in update quote
4932                l_inserted_qte_line_tbl(i).quote_line_id := lx_qte_line_rec.quote_line_id;
4933                l_inserted_qte_line_tbl(i).quantity :=  l_qty_qte_line_tbl(i).quantity;
4934 
4935 	  IF aso_debug_pub.g_debug_flag = 'Y' THEN
4936 	  aso_debug_pub.ADD ( ' Qty for new line =  '||to_char(l_qty_qte_line_tbl(i).quantity), 1 , 'N' );
4937 	  END IF;
4938 
4939 
4940       -- Copy the payment record
4941          l_payment_tbl := ASO_UTILITY_PVT.Query_Payment_Rows ( P_Qte_Header_Rec.quote_header_id,
4942                                                                      P_Original_Qte_Line_Rec.quote_line_id);
4943 
4944     IF l_payment_tbl.count > 0 then
4945 
4946                 FOR j IN 1 .. l_payment_tbl.COUNT LOOP
4947                    l_payment_tbl ( j ).QUOTE_HEADER_ID := P_Qte_Header_Rec.quote_header_id;
4948                    l_payment_tbl ( j ).QUOTE_LINE_ID := lx_qte_line_rec.quote_line_id;
4949                    l_payment_tbl ( j ).CREDIT_CARD_APPROVAL_CODE := NULL;
4950                    l_payment_tbl ( j ).CREDIT_CARD_APPROVAL_DATE := NULL;
4951                    l_payment_tbl ( j ).payment_id := NULL;
4952                    l_payment_tbl ( j ).object_version_number := FND_API.G_MISS_NUM;
4953                 END LOOP;
4954 
4955        IF aso_debug_pub.g_debug_flag = 'Y' THEN
4956           aso_debug_pub.add('SPLIT_MODEL_LINE: Before  call to copy_payment_row ', 1, 'Y');
4957        END IF;
4958 
4959          aso_copy_quote_pvt.copy_payment_row(p_payment_rec => l_payment_tbl(1)  ,
4960                                              x_return_status => l_return_status,
4961                                              x_msg_count     => x_msg_count,
4962                                              x_msg_data      => x_msg_data);
4963 
4964        IF aso_debug_pub.g_debug_flag = 'Y' THEN
4965           aso_debug_pub.add('SPLIT_MODEL_LINE: After call to copy_payment_row: x_return_status: '||l_return_status, 1, 'Y');
4966        END IF;
4967       IF ( l_return_status = FND_API.G_RET_STS_UNEXP_ERROR ) THEN
4968          x_return_status            := FND_API.G_RET_STS_UNEXP_ERROR;
4969          IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
4970             FND_MESSAGE.Set_Name ('ASO' , 'ASO_API_UNEXP_ERROR' );
4971             FND_MESSAGE.Set_Token ( 'ROW' , 'ASO_SPLITLINE  AFTER_INSERT' , TRUE );
4972             FND_MSG_PUB.ADD;
4973          END IF;
4974          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4975       ELSIF ( l_return_status = FND_API.G_RET_STS_ERROR ) THEN
4976          x_return_status            := FND_API.G_RET_STS_ERROR;
4977          RAISE FND_API.G_EXC_ERROR;
4978       END IF;
4979 
4980    END IF;
4981      --  End Copy payment record
4982 
4983 
4984          -- Copying the sales supplement data for the line
4985                  IF aso_debug_pub.g_debug_flag = 'Y' THEN
4986                  aso_debug_pub.ADD ( 'Copy_Rows - Begin- before line copy_sales_supplement  ' , 1 , 'Y' );
4987                  END IF;
4988 
4989           ASO_COPY_QUOTE_PVT.INSERT_SALES_SUPP_DATA
4990           (
4991           P_Api_Version_Number          =>  1.0,
4992           P_Init_Msg_List               => P_Init_Msg_List,
4993           P_Commit                      => P_Commit,
4994           P_OLD_QUOTE_LINE_ID           => P_Original_Qte_Line_Rec.quote_line_id,
4995           P_NEW_QUOTE_LINE_ID           => lx_qte_line_rec.quote_line_id,
4996           X_Return_Status               => l_return_status,
4997           X_Msg_Count                   => X_Msg_Count,
4998           X_Msg_Data                    => X_Msg_Data );
4999 
5000 
5001                   IF aso_debug_pub.g_debug_flag = 'Y' THEN
5002                   aso_debug_pub.ADD ( 'Copy_Rows -After line copy_sales_supplement ' || x_return_status , 1 , 'Y' );
5003                   END IF;
5004 
5005 
5006                IF ( l_return_status = FND_API.G_RET_STS_UNEXP_ERROR ) THEN
5007                  x_return_status            := FND_API.G_RET_STS_UNEXP_ERROR;
5008                  IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
5009                   FND_MESSAGE.Set_Name ('ASO' , 'ASO_API_UNEXP_ERROR' );
5010                   FND_MESSAGE.Set_Token ('ROW' , 'ASO_QUOTE_HEADER', TRUE );
5011                   FND_MSG_PUB.ADD;
5012                 END IF;
5013                RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5014 
5015                ELSIF ( l_return_status = FND_API.G_RET_STS_ERROR ) THEN
5016                 x_return_status            := FND_API.G_RET_STS_ERROR;
5017                 RAISE FND_API.G_EXC_ERROR;
5018                END IF;
5019 
5020 
5021 --               IF P_Copy_Quote_Control_Rec.Copy_Attachment = FND_API.G_TRUE THEN
5022                   IF aso_debug_pub.g_debug_flag = 'Y' THEN
5023 			   aso_debug_pub.ADD ( 'Split_Model_Line- Begin- before line copy_attch  ' , 1 , 'Y' );
5024 			   END IF;
5025 
5026                  ASO_ATTACHMENT_INT.Copy_Attachments(
5027                      p_api_version       => l_api_version,
5028                      p_old_object_code   => 'ASO_QUOTE_LINES_ALL',
5029                      p_new_object_code   => 'ASO_QUOTE_LINES_ALL',
5030                      p_old_object_id     => P_Original_Qte_Line_Rec.quote_line_id,
5031                      p_new_object_id     => lx_qte_line_rec.quote_line_id,
5032                      x_return_status     => l_return_status,
5033                      x_msg_count         => x_msg_count,
5034                      x_msg_data          => x_msg_data
5035                    );
5036                   IF aso_debug_pub.g_debug_flag = 'Y' THEN
5037 			   aso_debug_pub.ADD ( 'Split_Model_Line -After line copy_attch ' || x_return_status , 1 , 'Y' );
5038 			   END IF;
5039 
5040                   IF ( l_return_status = FND_API.G_RET_STS_UNEXP_ERROR ) THEN
5041                      x_return_status            := FND_API.G_RET_STS_UNEXP_ERROR;
5042                      IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
5043                         FND_MESSAGE.Set_Name ('ASO' , 'ASO_API_UNEXP_ERROR' );
5044                         FND_MESSAGE.Set_Token ( 'ROW' , 'ASO_COPYLINE AFTER_ATTACHMENTS' , TRUE );
5045                         FND_MSG_PUB.ADD;
5046                      END IF;
5047                      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5048                   ELSIF ( x_return_status = FND_API.G_RET_STS_ERROR ) THEN
5049                      x_return_status            := FND_API.G_RET_STS_ERROR;
5050                      RAISE FND_API.G_EXC_ERROR;
5051                   END IF;
5052 
5053         ---       END IF;   -- Copy Attachments
5054 
5055                FOR j IN 1 .. l_dup_Price_Adj_Tbl.COUNT LOOP
5056                   l_price_index_link_tbl ( l_dup_Price_Adj_Tbl ( j ).price_adjustment_id ) :=
5057                                 lx_ln_price_adj_tbl ( j ).price_adjustment_id;
5058                END LOOP;
5059 
5060                l_line_index_link_tbl ( P_Original_Qte_Line_Rec.quote_line_id) :=
5061                                                  lx_qte_line_rec.quote_line_id;
5062                IF aso_debug_pub.g_debug_flag = 'Y' THEN
5063 			aso_debug_pub.ADD ( 'Split_Model_Line - l_qte_line_tbl(i).item_type_code ' ||
5064                                     l_qte_line_rec.item_type_code , 1 , 'Y' );
5065                aso_debug_pub.ADD ( 'Copy - l_qte_line_tbl(i).inventory_item_id ' ||
5066                                     l_qte_line_rec.inventory_item_id, 1 , 'Y' );
5067                aso_debug_pub.ADD ( 'Copy - l_serviceable_product_flag ' || l_serviceable_product_flag , 1 , 'Y' );
5068 			END IF;
5069 
5070                IF l_serviceable_product_flag = 'Y' THEN
5071 
5072                  l_copy_quote_control_rec.Copy_Note := FND_API.G_TRUE;
5073                  l_copy_quote_control_rec.Copy_Task     := FND_API.G_TRUE;
5074                  l_copy_quote_control_rec.Copy_Attachment := FND_API.G_TRUE;
5075                  l_copy_quote_control_rec.New_Version := FND_API.G_TRUE;
5076 
5077                   ASO_COPY_QUOTE_PVT.service_copy (
5078                      p_qte_line_id =>                P_Original_Qte_Line_Rec.quote_line_id
5079                    , p_copy_quote_control_rec =>      l_copy_quote_control_rec
5080                    , p_new_qte_header_id =>          P_Qte_Header_Rec.quote_header_id
5081                    , p_qte_header_id =>               P_Qte_Header_Rec.quote_header_id
5082                    , lx_line_index_link_tbl =>        l_line_index_link_tbl
5083                    , lx_price_index_link_tbl =>       l_price_index_link_tbl
5084                    , X_Return_Status =>               l_return_status
5085                    , X_Msg_Count =>                   x_msg_count
5086                    , X_Msg_Data =>                    x_msg_data
5087                    , p_line_quantity            =>  FND_API.G_MISS_NUM  --l_qty_qte_line_tbl(i).quantity
5088                    );
5089                END IF;
5090 
5091                IF ( l_return_status = FND_API.G_RET_STS_UNEXP_ERROR ) THEN
5092                   x_return_status            := FND_API.G_RET_STS_UNEXP_ERROR;
5093                   IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
5094                      FND_MESSAGE.Set_Name ('ASO' , 'ASO_API_UNEXP_ERROR' );
5095                      FND_MESSAGE.Set_Token ( 'ROW' , 'ASO_COPYLINE AFTER_SERVICE' , TRUE );
5096                      FND_MSG_PUB.ADD;
5097                   END IF;
5098                   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5099                ELSIF ( l_return_status = FND_API.G_RET_STS_ERROR ) THEN
5100                   x_return_status            := FND_API.G_RET_STS_ERROR;
5101                   RAISE FND_API.G_EXC_ERROR;
5102                END IF;
5103 
5104             END IF; -- If <> CFG and OPT
5105 
5106             IF l_qte_line_rec.item_type_code = 'MDL' THEN
5107                IF l_qte_line_detail_tbl.COUNT > 1 THEN
5108                   FOR k IN 2 .. l_qte_line_detail_tbl.COUNT LOOP
5109                      l_qte_line_detail_tbl ( k ).config_header_id :=
5110                                                               l_config_hdr_id;
5111                      l_qte_line_detail_tbl ( k ).config_revision_num :=
5112                                                              l_config_rev_nbr;
5113                   END LOOP;
5114                END IF;
5115 
5116                IF aso_debug_pub.g_debug_flag = 'Y' THEN
5117 			aso_debug_pub.ADD ( 'l_old_config_header_id = ' || l_old_config_header_id , 1 , 'N' );
5118 			END IF;
5119 
5120                  l_copy_quote_control_rec.Copy_Note := FND_API.G_TRUE;
5121                  l_copy_quote_control_rec.Copy_Task     := FND_API.G_TRUE;
5122                  l_copy_quote_control_rec.Copy_Attachment := FND_API.G_TRUE;
5123                  l_copy_quote_control_rec.New_Version := FND_API.G_TRUE;
5124 
5125                ASO_COPY_QUOTE_PVT.config_copy (
5126                    p_old_config_header_id =>       l_old_config_header_id
5127                 , p_old_config_revision_num =>     l_old_config_revision_num
5128                 , p_config_header_id =>            l_config_hdr_id
5129                 , p_config_revision_num =>         l_config_rev_nbr
5130                 , p_copy_quote_control_rec =>      l_copy_quote_control_rec
5131                 , p_new_qte_header_id =>           P_Qte_Header_Rec.quote_header_id
5132                 , p_qte_header_id =>               P_Qte_Header_Rec.quote_header_id
5133                 , lx_line_index_link_tbl =>        l_line_index_link_tbl
5134                 , lx_price_index_link_tbl =>       l_price_index_link_tbl
5135                 , X_Return_Status =>               l_return_status
5136                 , X_Msg_Count =>                   x_msg_count
5137                 , X_Msg_Data =>                    x_msg_data
5138                 , p_line_quantity =>               FND_API.G_MISS_NUM  --l_qte_line_rec.quantity
5139                 );
5140 
5141                IF ( l_return_status = FND_API.G_RET_STS_UNEXP_ERROR ) THEN
5142                   x_return_status            := FND_API.G_RET_STS_UNEXP_ERROR;
5143                   IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
5144                      FND_MESSAGE.Set_Name ('ASO' , 'ASO_API_UNEXP_ERROR' );
5145                      FND_MESSAGE.Set_Token ( 'ROW' , 'ASO_COPYLINE AFTER_CONFIG_COPY' , TRUE );
5146                      FND_MSG_PUB.ADD;
5147                   END IF;
5148                   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5149                ELSIF ( l_return_status = FND_API.G_RET_STS_ERROR ) THEN
5150                   x_return_status            := FND_API.G_RET_STS_ERROR;
5151                   RAISE FND_API.G_EXC_ERROR;
5152                END IF;
5153 
5154  --               bug 1903605
5155                l_old_config_header_id     := NULL;
5156                l_old_config_revision_num  := NULL;
5157 --                bug 1903605
5158 
5159               IF (l_orig_item_id_tbl IS NOT NULL)  AND (l_new_item_id_tbl IS NOT NULL)  THEN
5160 
5161                IF aso_debug_pub.g_debug_flag = 'Y' THEN
5162 			aso_debug_pub.ADD ( 'item_id_count > 0 ', 1 , 'N' );
5163                aso_debug_pub.ADD ( 'Orig Tbl Count ' ||l_orig_item_id_tbl.count, 1 , 'N' );
5164                aso_debug_pub.ADD ( 'New Tbl Count '||l_new_item_id_tbl.count, 1 , 'N' );
5165                END IF;
5166 
5167                  IF l_orig_item_id_tbl.count > 0 AND l_new_item_id_tbl.count > 0 THEN
5168 
5169                     FORALL  i  IN l_orig_item_id_tbl.FIRST..l_orig_item_id_tbl.LAST
5170                      UPDATE aso_quote_line_details
5171                      SET config_item_id = l_new_item_id_tbl(i)
5172                         ,last_update_date = SYSDATE
5173                         ,last_updated_by = G_USER_ID
5174                         ,last_update_login = G_LOGIN_ID
5175 
5176                      WHERE config_header_id = l_config_hdr_id
5177                      AND config_revision_num = l_config_rev_nbr
5178                      AND config_item_id = l_orig_item_id_tbl(i);
5179                  END IF;
5180 
5181                END IF;
5182 
5183 
5184 
5185              END IF; -- 'MDL'
5186 
5187 
5188      END IF; -- Checking the index line table
5189 
5190       --Insert rows for line relationships and line price relationships for that quote line---
5191      IF aso_debug_pub.g_debug_flag = 'Y' THEN
5192 	aso_debug_pub.ADD ( ' Copying the line relationship and price relation records for the new qte line' , 1 , 'N' );
5193 	END IF;
5194 
5195 
5196       FOR price_adj_rltship_rec IN c_price_adj_rel ( P_Original_Qte_Line_Rec.quote_line_id ) LOOP
5197          lx_price_adj_rltship_id    := FND_API.G_MISS_NUM;
5198 
5199          IF aso_debug_pub.g_debug_flag = 'Y' THEN
5200 	    aso_debug_pub.ADD ( 'l_line_index_link_tbl ( price_adj_rltship_rec.quote_line_id ) = ' ||
5201                               l_line_index_link_tbl ( price_adj_rltship_rec.quote_line_id ) , 1 , 'N' );
5202 	    aso_debug_pub.ADD ( 'l_price_index_link_tbl ( price_adj_rltship_rec.rltd_price_adj_id ) = ' ||
5203                               l_price_index_link_tbl ( price_adj_rltship_rec.rltd_price_adj_id ) , 1 , 'N' );
5204 	    aso_debug_pub.ADD ( 'price_adj_rltship_rec.rltd_price_adj_id = ' ||
5205                               price_adj_rltship_rec.rltd_price_adj_id  , 1 , 'N' );
5206          END IF;
5207 
5208          OPEN C_Get_Ship_Id (
5209             l_line_index_link_tbl ( price_adj_rltship_rec.quote_line_id )
5210           );
5211          FETCH C_Get_Ship_Id INTO l_ship_id;
5212          CLOSE C_Get_Ship_Id;
5213 
5214          IF aso_debug_pub.g_debug_flag = 'Y' THEN
5215 	    aso_debug_pub.ADD ( 'l_ship_id from line_id = ' || l_ship_id , 1 , 'N' );
5216 	    END IF;
5217 
5218          ASO_PRICE_RLTSHIPS_PKG.Insert_Row (
5219              px_ADJ_RELATIONSHIP_ID =>       lx_price_adj_rltship_id
5220           , p_creation_date =>               SYSDATE
5221           , p_CREATED_BY =>                  G_USER_ID
5222           , p_LAST_UPDATE_DATE =>            SYSDATE
5223           , p_LAST_UPDATED_BY =>             G_USER_ID
5224           , p_LAST_UPDATE_LOGIN =>           G_LOGIN_ID
5225           , p_PROGRAM_APPLICATION_ID =>      price_adj_rltship_rec.PROGRAM_APPLICATION_ID
5226           , p_PROGRAM_ID =>                  price_adj_rltship_rec.PROGRAM_ID
5227           , p_PROGRAM_UPDATE_DATE =>         price_adj_rltship_rec.PROGRAM_UPDATE_DATE
5228           , p_REQUEST_ID =>                  price_adj_rltship_rec.REQUEST_ID
5229           , p_QUOTE_LINE_ID =>               l_line_index_link_tbl ( price_adj_rltship_rec.quote_line_id )
5230           , p_PRICE_ADJUSTMENT_ID =>         l_price_index_link_tbl ( price_adj_rltship_rec.price_adjustment_id )
5231           , p_RLTD_PRICE_ADJ_ID =>           l_price_index_link_tbl ( price_adj_rltship_rec.rltd_price_adj_id )
5232           , p_QUOTE_SHIPMENT_ID =>           l_ship_id
5233 		, p_OBJECT_VERSION_NUMBER =>       price_adj_rltship_rec.OBJECT_VERSION_NUMBER
5234           );
5235       END LOOP;
5236 
5237       -- copy line relationships
5238 
5239       FOR line_rel_rec IN c_line_relation ( P_Original_Qte_Line_Rec.quote_line_id ) LOOP
5240 
5241          lx_LINE_RELATIONSHIP_ID    := FND_API.G_MISS_NUM;
5242          ASO_LINE_RELATIONSHIPS_PKG.Insert_Row (
5243              px_LINE_RELATIONSHIP_ID =>      lx_LINE_RELATIONSHIP_ID
5244           , p_CREATION_DATE =>               SYSDATE
5245           , p_CREATED_BY =>                  G_USER_ID
5246           , p_LAST_UPDATED_BY =>             G_USER_ID
5247           , p_LAST_UPDATE_DATE =>            SYSDATE
5248           , p_LAST_UPDATE_LOGIN =>           G_LOGIN_ID
5249           , p_REQUEST_ID =>                  line_rel_rec.REQUEST_ID
5250           , p_PROGRAM_APPLICATION_ID =>      line_rel_rec.PROGRAM_APPLICATION_ID
5251           , p_PROGRAM_ID =>                  line_rel_rec.PROGRAM_ID
5252           , p_PROGRAM_UPDATE_DATE =>         line_rel_rec.PROGRAM_UPDATE_DATE
5253           , p_QUOTE_LINE_ID =>               l_line_index_link_tbl ( line_rel_rec.quote_line_id )
5254           , p_RELATED_QUOTE_LINE_ID =>       l_line_index_link_tbl ( line_rel_rec.related_quote_line_id )
5255           , p_RECIPROCAL_FLAG =>             line_rel_rec.RECIPROCAL_FLAG
5256           , P_RELATIONSHIP_TYPE_CODE =>      line_rel_rec.RELATIONSHIP_TYPE_CODE
5257 		, p_OBJECT_VERSION_NUMBER =>       line_rel_rec.OBJECT_VERSION_NUMBER
5258           );
5259 
5260     END LOOP;
5261 
5262 
5263 END LOOP;
5264   -- End Copying the Line Loop
5265   -- Calling Update Quote to update the quantities
5266 
5267    IF aso_debug_pub.g_debug_flag = 'Y' THEN
5268    aso_debug_pub.ADD ( ' Getting the last update date of the quote before updating the quote ', 1 , 'N' );
5269    END IF;
5270 
5271     l_quote_header_rec := ASO_UTILITY_PVT.Query_Header_Row(P_Qte_Header_Rec.quote_header_id);
5272 
5273    OPEN get_latest_date (
5274       P_Qte_Header_Rec.quote_header_id
5275     );
5276     FETCH get_latest_date INTO l_quote_header_rec.last_update_date;
5277     CLOSE get_latest_date;
5278 
5279     l_quote_header_rec.quote_header_id := P_Qte_Header_Rec.quote_header_id;
5280     l_quote_header_rec.pricing_status_indicator := P_Qte_Header_Rec.pricing_status_indicator;
5281     l_quote_header_rec.tax_status_indicator := P_Qte_Header_Rec.tax_status_indicator;
5282 
5283 /*
5284    P_Control_Rec is going to be passed by the calling API
5285 	  l_control_rec.last_update_date :=     l_quote_header_rec.last_update_date;
5286        l_control_rec.pricing_request_type          :=  'ASO';
5287        l_control_rec.header_pricing_event          :=  'BATCH';
5288        l_control_rec.calculate_tax_flag            :=  'Y';
5289        l_control_rec.calculate_freight_charge_flag :=  'Y';
5290 */
5291 
5292 
5293     l_qte_line_tbl := ASO_QUOTE_PUB.G_MISS_QTE_LINE_TBL;
5294 
5295     IF aso_debug_pub.g_debug_flag = 'Y' THEN
5296     aso_debug_pub.ADD ( 'No Of Qte Lines 1 =  '|| to_char(l_qte_line_tbl.count), 1 , 'N' );
5297     aso_debug_pub.ADD ( ' Setting the qty and op code for new line created ', 1 , 'N' );
5298     END IF;
5299 
5300   FOR i  in 1..l_inserted_qte_line_tbl.count LOOP
5301    l_qte_line_tbl(i).quote_header_id := P_Qte_Header_Rec.quote_header_id;
5302    l_qte_line_tbl(i).quantity := l_inserted_qte_line_tbl(i).quantity;
5303    l_qte_line_tbl(i).quote_line_id := l_inserted_qte_line_tbl(i).quote_line_id;
5304    l_qte_line_tbl(i).operation_code := 'UPDATE';
5305 
5306 
5307     IF aso_debug_pub.g_debug_flag = 'Y' THEN
5308     aso_debug_pub.ADD ( 'New Qte Line '|| to_char(l_inserted_qte_line_tbl(i).quote_line_id), 1 , 'N' );
5309     aso_debug_pub.ADD ( 'New Qty '|| to_char(l_inserted_qte_line_tbl(i).quantity), 1 , 'N' );
5310     END IF;
5311 
5312  END LOOP;
5313 
5314    IF aso_debug_pub.g_debug_flag = 'Y' THEN
5315    aso_debug_pub.ADD ( 'No Of Qte Lines 2 =  '|| to_char(l_qte_line_tbl.count), 1 , 'N' );
5316    aso_debug_pub.ADD ( ' Setting the qty and op code for orig line to be updated ', 1 , 'N' );
5317    END IF;
5318 
5319    l_total_lines := l_qte_line_tbl.count;
5320 
5321    l_qte_line_tbl(l_total_lines + 1).quantity := l_qty_qte_line_tbl(l_qty_qte_line_tbl.count).quantity;
5322 
5323    l_qte_line_tbl(l_total_lines + 1).quote_header_id := P_Qte_Header_Rec.quote_header_id;
5324    l_qte_line_tbl(l_total_lines + 1).operation_code := 'UPDATE';
5325    l_qte_line_tbl(l_total_lines + 1).quote_line_id := P_Original_Qte_Line_Rec.quote_line_id;
5326 
5327     IF aso_debug_pub.g_debug_flag = 'Y' THEN
5328     aso_debug_pub.ADD ( 'No Of Qte Lines before update qty =  '|| to_char(l_qte_line_tbl.count), 1 , 'N' );
5329     aso_debug_pub.ADD ( ' Calling Update Quote to update all lines  ', 1 , 'N' );
5330     END IF;
5331 
5332   aso_quote_pub.update_quote (
5333       p_api_version_number         => 1.0,
5334       p_init_msg_list              => fnd_api.g_false,
5335       p_commit                     => fnd_api.g_false,
5336       p_control_rec                => p_control_rec,
5337       p_qte_header_rec             => l_quote_header_rec,
5338       p_hd_price_attributes_tbl    => aso_quote_pub.g_miss_price_attributes_tbl,
5339       p_hd_payment_tbl             => aso_quote_pub.g_miss_payment_tbl,
5340       p_hd_shipment_tbl            => aso_quote_pub.g_miss_shipment_tbl,
5341       p_hd_freight_charge_tbl      => aso_quote_pub.g_miss_freight_charge_tbl,
5342       p_hd_tax_detail_tbl          => aso_quote_pub.g_miss_tax_detail_tbl,
5343       p_qte_line_tbl               => l_qte_line_tbl,
5344       p_qte_line_dtl_tbl           => aso_quote_pub.g_miss_qte_line_dtl_tbl,
5345       p_line_attr_ext_tbl          => aso_quote_pub.G_MISS_Line_Attribs_Ext_TBL,
5346       p_line_rltship_tbl           => aso_quote_pub.g_miss_line_rltship_tbl,
5347       p_price_adjustment_tbl       => aso_quote_pub.g_miss_price_adj_tbl,
5348       p_price_adj_attr_tbl         => aso_quote_pub.g_miss_price_adj_attr_tbl,
5349       p_price_adj_rltship_tbl      => aso_quote_pub.g_miss_price_adj_rltship_tbl,
5350       p_ln_price_attributes_tbl    => aso_quote_pub.g_miss_price_attributes_tbl,
5351       p_ln_payment_tbl             => aso_quote_pub.g_miss_payment_tbl,
5352       p_ln_shipment_tbl            => aso_quote_pub.g_miss_shipment_tbl,
5353       p_ln_freight_charge_tbl      => aso_quote_pub.g_miss_freight_charge_tbl,
5354       p_ln_tax_detail_tbl          => aso_quote_pub.g_miss_tax_detail_tbl,
5355       x_qte_header_rec             => x_qte_header_rec,
5356       x_qte_line_tbl               => x_qte_line_tbl,
5357       x_qte_line_dtl_tbl           => x_qte_line_dtl_tbl,
5358       x_hd_price_attributes_tbl    => x_hd_price_attributes_tbl,
5359       x_hd_payment_tbl             => x_hd_payment_tbl,
5360       x_hd_shipment_tbl            => x_hd_shipment_tbl,
5361       x_hd_freight_charge_tbl      => x_hd_freight_charge_tbl,
5362       x_hd_tax_detail_tbl          => x_hd_tax_detail_tbl,
5363       x_line_attr_ext_tbl          => x_line_attr_ext_tbl,
5364       x_line_rltship_tbl           => x_line_rltship_tbl,
5365       x_price_adjustment_tbl       => x_price_adjustment_tbl,
5366       x_price_adj_attr_tbl         => x_price_adj_attr_tbl,
5367       x_price_adj_rltship_tbl      => x_price_adj_rltship_tbl,
5368       x_ln_price_attributes_tbl    => x_ln_price_attributes_tbl,
5369       x_ln_payment_tbl             => x_ln_payment_tbl,
5370       x_ln_shipment_tbl            => x_ln_shipment_tbl,
5371       x_ln_freight_charge_tbl      => x_ln_freight_charge_tbl,
5372       x_ln_tax_detail_tbl          => x_ln_tax_detail_tbl,
5373       x_return_status              => l_return_status,
5374       x_msg_count                  => x_msg_count,
5375       x_msg_data                   => x_msg_data
5376     );
5377 
5378     IF aso_debug_pub.g_debug_flag = 'Y' THEN
5379     aso_debug_pub.ADD ( ' Return Status from Update Quote = '||l_return_status, 1 , 'N' );
5380     END IF;
5381 
5382 
5383                IF ( l_return_status = FND_API.G_RET_STS_UNEXP_ERROR ) THEN
5384                   x_return_status            := FND_API.G_RET_STS_UNEXP_ERROR;
5385                   IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_ERROR ) THEN
5386                      FND_MESSAGE.Set_Name ('ASO' , 'ASO_API_UNEXP_ERROR' );
5387                      FND_MSG_PUB.ADD;
5388                   END IF;
5389                   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5390                ELSIF ( l_return_status = FND_API.G_RET_STS_ERROR ) THEN
5391                   x_return_status            := FND_API.G_RET_STS_ERROR;
5392                   RAISE FND_API.G_EXC_ERROR;
5393                END IF;
5394 
5395 	 IF aso_debug_pub.g_debug_flag = 'Y' THEN
5396 	 aso_debug_pub.ADD ( ' After Calling Update Quote to update all lines  ', 1 , 'N' );
5397 	 END IF;
5398 
5399 
5400       X_Quote_Line_Tbl := x_qte_line_tbl;
5401       --
5402       -- End of API body
5403       --
5404       -- Standard check for p_commit
5405       IF FND_API.to_Boolean ( p_commit ) THEN
5406          COMMIT WORK;
5407       END IF;
5408       -- Standard call to get message count and if count is 1, get message info.
5409       FND_MSG_PUB.Count_And_Get (
5410           p_count =>                      x_msg_count
5411        , p_data =>                        x_msg_data
5412        );
5413 
5414     IF aso_debug_pub.g_debug_flag = 'Y' THEN
5415     aso_debug_pub.ADD ( ' End of Split_Model_Line   ', 1 , 'N' );
5416     END IF;
5417    EXCEPTION
5418       WHEN FND_API.G_EXC_ERROR THEN
5419          ASO_UTILITY_PVT.HANDLE_EXCEPTIONS (
5420              P_API_NAME =>                   L_API_NAME
5421           , P_PKG_NAME =>                    G_PKG_NAME
5422           , P_EXCEPTION_LEVEL =>             FND_MSG_PUB.G_MSG_LVL_ERROR
5423           , P_PACKAGE_TYPE =>                ASO_UTILITY_PVT.G_PVT
5424           , X_MSG_COUNT =>                   X_MSG_COUNT
5425           , X_MSG_DATA =>                    X_MSG_DATA
5426           , X_RETURN_STATUS =>               X_RETURN_STATUS
5427           );
5428 
5429       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5430          ASO_UTILITY_PVT.HANDLE_EXCEPTIONS (
5431              P_API_NAME =>                   L_API_NAME
5432           , P_PKG_NAME =>                    G_PKG_NAME
5433           , P_EXCEPTION_LEVEL =>             FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
5434           , P_PACKAGE_TYPE =>                ASO_UTILITY_PVT.G_PVT
5435           , X_MSG_COUNT =>                   X_MSG_COUNT
5436           , X_MSG_DATA =>                    X_MSG_DATA
5437           , X_RETURN_STATUS =>               X_RETURN_STATUS
5438           );
5439 
5440 
5441       WHEN OTHERS THEN
5442          ASO_UTILITY_PVT.HANDLE_EXCEPTIONS (
5443              P_API_NAME =>                   L_API_NAME
5444           , P_PKG_NAME =>                    G_PKG_NAME
5445           , P_SQLCODE =>                     SQLCODE
5446           , P_SQLERRM =>                     SQLERRM
5447           , P_EXCEPTION_LEVEL =>             ASO_UTILITY_PVT.G_EXC_OTHERS
5448           , P_PACKAGE_TYPE =>                ASO_UTILITY_PVT.G_PVT
5449           , X_MSG_COUNT =>                   X_MSG_COUNT
5450           , X_MSG_DATA =>                    X_MSG_DATA
5451           , X_RETURN_STATUS =>               X_RETURN_STATUS
5452           );
5453 
5454  END Split_Model_Line;
5455 
5456 
5457 PROCEDURE INSERT_SALES_SUPP_DATA
5458 (
5459 P_Api_Version_Number          IN         NUMBER,
5460 P_Init_Msg_List               IN         VARCHAR2     := FND_API.G_FALSE,
5461 P_Commit                      IN         VARCHAR2     := FND_API.G_FALSE,
5462 P_OLD_QUOTE_LINE_ID           IN         NUMBER,
5463 P_NEW_QUOTE_LINE_ID           IN         NUMBER,
5464 X_Return_Status               OUT NOCOPY /* file.sql.39 change */           VARCHAR2,
5465 X_Msg_Count                   OUT NOCOPY /* file.sql.39 change */           VARCHAR2,
5466 X_Msg_Data                    OUT NOCOPY /* file.sql.39 change */           VARCHAR2 ) IS
5467 
5468 
5469       CURSOR get_template_id (
5470           qte_line_id NUMBER
5471        ) IS
5472          SELECT template_instance_id, template_id
5473          FROM   aso_sup_tmpl_instance
5474          WHERE  owner_table_name = 'ASO_QUOTE_LINES'
5475          AND    owner_table_id = qte_line_id;
5476 
5477       CURSOR get_values (
5478           temp_instance_id NUMBER
5479        ) IS
5480          SELECT sect_comp_map_id, VALUE, value_type_qualifier, response_id
5481          FROM   aso_sup_instance_value
5482          WHERE  template_instance_id = temp_instance_id;
5483 
5484       l_old_template_instance_id NUMBER;
5485       l_new_template_instance_id NUMBER;
5486       l_sup_instance_rowid ROWID;
5487       l_template_instance_rowid ROWID;
5488       l_instance_value_id NUMBER;
5489       l_old_instance_value_id NUMBER;
5490       l_api_name VARCHAR2 ( 150 ) := 'INSERT_SALES_SUPP_DATA';
5491       l_api_version_number CONSTANT NUMBER := 1.0;
5492 
5493    BEGIN
5494 
5495 -- Establish a standard save point
5496       SAVEPOINT INSERT_SALES_SUPP_DATA_PVT;
5497 
5498 -- Standard call to check for call compatability
5499       IF NOT FND_API.Compatible_API_Call (
5500                  l_api_version_number
5501               , p_api_version_number
5502               , l_api_name
5503               , G_PKG_NAME
5504               ) THEN
5505          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5506       END IF;
5507 
5508 -- Initialize message list if p_init_msg_list is set to TRUE.
5509       IF FND_API.to_Boolean ( p_init_msg_list ) THEN
5510          FND_MSG_PUB.initialize;
5511       END IF;
5512 
5513 -- API BODY
5514       IF aso_debug_pub.g_debug_flag = 'Y' THEN
5515       aso_debug_pub.ADD ('INSERT_SALES_SUPP_DATA: Begin' , 1, 'N' );
5516       aso_debug_pub.ADD ( 'Old QTE Line  Id : ' || TO_CHAR ( P_OLD_QUOTE_LINE_ID ) , 1 , 'N' );
5517       aso_debug_pub.ADD ( 'New QTE Line  Id : ' || TO_CHAR ( P_NEW_QUOTE_LINE_ID ) , 1 , 'N' );
5518       END IF;
5519 
5520 -- Get the template id and template_instance_id based upon the
5521 -- quote line id
5522 
5523       FOR template_val IN get_template_id ( P_OLD_QUOTE_LINE_ID ) LOOP
5524          IF aso_debug_pub.g_debug_flag = 'Y' THEN
5525          aso_debug_pub.ADD ( 'Template Id : ' || TO_CHAR ( template_val.template_id ) , 1 , 'N' );
5526          aso_debug_pub.ADD ( ' Old Template Instance Id : ' || TO_CHAR ( template_val.template_instance_id ) , 1 , 'N
5527 ' );
5528 
5529          -- Create a new row in the ASO_SUP_TMPL_INSTANCE Table with the template id
5530 
5531          aso_debug_pub.ADD ( 'Inserting a row into tmpl_instance table' , 1 , 'N' );
5532          END IF;
5533 
5534          -- Initiate the variable to null,
5535          -- so that each time they contain new value for every pass of loop
5536 
5537          l_new_template_instance_id := NULL;
5538          ASO_SUP_TMPL_INSTANCE_PKG.INSERT_ROW (
5539              PX_ROWID =>                     l_template_instance_rowid
5540           , PX_TEMPLATE_INSTANCE_ID =>       l_new_template_instance_id
5541           , P_created_by =>                  FND_GLOBAL.USER_ID
5542           , P_creation_date =>               SYSDATE
5543           , P_last_updated_by =>             FND_GLOBAL.USER_ID
5544           , P_last_update_date =>            SYSDATE
5545           , P_last_update_login =>           FND_GLOBAL.CONC_LOGIN_ID
5546           , P_TEMPLATE_ID =>                 template_val.template_id
5547           , P_Owner_Table_Name =>            'ASO_QUOTE_LINES'
5548           , P_Owner_Table_Id =>              P_NEW_QUOTE_LINE_ID
5549 		, P_OBJECT_VERSION_NUMBER =>       FND_API.G_MISS_NUM
5550           );
5551 
5552          IF aso_debug_pub.g_debug_flag = 'Y' THEN
5553          aso_debug_pub.ADD ( ' New Template Instance Id : ' || TO_CHAR ( l_new_template_instance_id ) , 1 , 'N' );
5554          END IF;
5555 
5556          -- Get the values for that instance
5557          FOR inst_val IN get_values ( template_val.template_instance_id ) LOOP
5558             IF aso_debug_pub.g_debug_flag = 'Y' THEN
5559             aso_debug_pub.ADD (   'Value : ' || inst_val.VALUE, 1, 'N' );
5560             aso_debug_pub.ADD ( 'Value Type Qualifier : ' || inst_val.value_type_qualifier , 1 , 'N' );
5561             aso_debug_pub.ADD ( 'Response Id : ' || TO_CHAR ( inst_val.response_id ) , 1 , 'N' );
5562             END IF;
5563 
5564             -- If values are fetched then insert rows
5565             IF inst_val.sect_comp_map_id IS NOT NULL THEN
5566                -- Initiate the variables to null,
5567                -- so that each time they contain new value for every pass of loop
5568 
5569                l_instance_value_id        := NULL;
5570                IF aso_debug_pub.g_debug_flag = 'Y' THEN
5571                aso_debug_pub.ADD ( 'Inserting a row into instance_value table' , 1 , 'N' );
5572                END IF;
5573 
5574                -- Create a new row in the ASO_SUP_INSTANCE_VALUE table
5575                ASO_SUP_INSTANCE_VALUE_PKG.INSERT_ROW (
5576                    PX_ROWID =>                     l_sup_instance_rowid
5577                 , PX_INSTANCE_VALUE_ID =>          l_instance_value_id
5578                 , P_SECT_COMP_MAP_ID =>            inst_val.sect_comp_map_id
5579                 , P_Template_Instance_ID =>        l_new_template_instance_id
5580                 , p_value =>                       inst_val.VALUE
5581                 , p_value_type_qualifier =>        inst_val.value_type_qualifier
5582                 , p_response_id =>                 inst_val.response_id
5583                 , P_created_by =>                  FND_GLOBAL.USER_ID
5584                 , P_last_updated_by =>             FND_GLOBAL.USER_ID
5585                 , P_last_update_login =>           FND_GLOBAL.CONC_LOGIN_ID
5586 			 , P_OBJECT_VERSION_NUMBER =>       FND_API.G_MISS_NUM
5587                 );
5588                IF aso_debug_pub.g_debug_flag = 'Y' THEN
5589                aso_debug_pub.ADD ( 'New Instance Value Id : ' || TO_CHAR ( l_instance_value_id ) , 1 , 'N' );
5590                END IF;
5591             END IF;
5592 
5593          END LOOP; -- instance value loop
5594 
5595       END LOOP; -- template loop
5596 
5597       -- Standard check for p_commit
5598       IF FND_API.to_Boolean ( p_commit ) THEN
5599          COMMIT WORK;
5600       END IF;
5601 
5602 --  Initialize API return status to success
5603       x_return_status            := FND_API.G_RET_STS_SUCCESS;
5604 
5605       IF aso_debug_pub.g_debug_flag = 'Y' THEN
5606       aso_debug_pub.ADD ( 'INSERT_SALES_SUPP_DATA: ' || l_api_name || 'end' , 1 , 'N' );
5607       END IF;
5608 
5609 
5610 
5611 EXCEPTION
5612 
5613       WHEN FND_API.G_EXC_ERROR THEN
5614          ASO_UTILITY_PVT.HANDLE_EXCEPTIONS (
5615              P_API_NAME =>                   L_API_NAME
5616           , P_PKG_NAME =>                    G_PKG_NAME
5617           , P_EXCEPTION_LEVEL =>             FND_MSG_PUB.G_MSG_LVL_ERROR
5618           , P_PACKAGE_TYPE =>                ASO_UTILITY_PVT.G_PVT
5619           , X_MSG_COUNT =>                   X_MSG_COUNT
5620           , X_MSG_DATA =>                    X_MSG_DATA
5621           , X_RETURN_STATUS =>               X_RETURN_STATUS
5622           );
5623 
5624       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5625          ASO_UTILITY_PVT.HANDLE_EXCEPTIONS (
5626              P_API_NAME =>                   L_API_NAME
5627           , P_PKG_NAME =>                    G_PKG_NAME
5628           , P_EXCEPTION_LEVEL =>             FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
5629           , P_PACKAGE_TYPE =>                ASO_UTILITY_PVT.G_PVT
5630           , X_MSG_COUNT =>                   X_MSG_COUNT
5631           , X_MSG_DATA =>                    X_MSG_DATA
5632           , X_RETURN_STATUS =>               X_RETURN_STATUS
5633           );
5634 
5635       WHEN OTHERS THEN
5636          ASO_UTILITY_PVT.HANDLE_EXCEPTIONS (
5637              P_API_NAME =>                   L_API_NAME
5638           , P_PKG_NAME =>                    G_PKG_NAME
5639           , P_SQLCODE =>                     SQLCODE
5640           , P_SQLERRM =>                     SQLERRM
5641           , P_EXCEPTION_LEVEL =>             ASO_UTILITY_PVT.G_EXC_OTHERS
5642           , P_PACKAGE_TYPE =>                ASO_UTILITY_PVT.G_PVT
5643           , X_MSG_COUNT =>                   X_MSG_COUNT
5644           , X_MSG_DATA =>                    X_MSG_DATA
5645           , X_RETURN_STATUS =>               X_RETURN_STATUS
5646           );
5647 
5648 
5649 END INSERT_SALES_SUPP_DATA;
5650 
5651 PROCEDURE copy_payment_row(p_payment_rec   IN         aso_quote_pub.payment_rec_type,
5652                              x_return_status OUT NOCOPY varchar2,
5653                              x_msg_count     OUT NOCOPY number,
5654                              x_msg_data      OUT NOCOPY varchar2) is
5655 
5656   l_api_name            varchar2(1000) := 'copy_payment_row';
5657   l_payment_rec         aso_quote_pub.payment_rec_type := p_payment_rec;
5658   l_qte_header_rec      ASO_QUOTE_PUB.Qte_Header_Rec_Type;
5659   l_payer               IBY_FNDCPT_COMMON_PUB.PayerContext_rec_type;
5660   lx_response           IBY_FNDCPT_COMMON_PUB.Result_rec_type;
5661   lx_assign_id          number;
5662   lx_entity_id          number;
5663   l_trxn_attribs        IBY_FNDCPT_TRXN_PUB.TrxnExtension_rec_type;
5664   l_qte_line_rec        ASO_QUOTE_PUB.Qte_Line_Rec_Type;
5665   l_entities            IBY_FNDCPT_COMMON_PUB.Id_tbl_type;
5666   l_payment_ref_number  varchar2(240);
5667   lx_channel_attrib_uses IBY_FNDCPT_SETUP_PUB.PmtChannel_AttribUses_rec_type;
5668 
5669  Cursor c_get_payer_from_trxn(p_trxn_extension_id number) is
5670  select a.party_id, a.instr_assignment_id
5671  from iby_fndcpt_payer_assgn_instr_v a, IBY_TRXN_EXTENSIONS_V b
5672  where a.instr_assignment_id = b.instr_assignment_id
5673  and b.trxn_extension_id = p_trxn_extension_id;
5674 
5675  Cursor c_get_payment_id is
5676  SELECT ASO_PAYMENTS_S.nextval FROM sys.dual;
5677 
5678 begin
5679      SAVEPOINT COPY_PAYMENT_ROW_PVT;
5680      aso_debug_pub.g_debug_flag := nvl(fnd_profile.value('ASO_ENABLE_DEBUG'),'N');
5681 
5682      IF aso_debug_pub.g_debug_flag = 'Y' THEN
5683          aso_debug_pub.add('Begin copy_payment_row ', 1, 'Y');
5684          aso_debug_pub.add('l_payment_rec.Quote_Header_Id:  ' || l_payment_rec.Quote_Header_Id, 1, 'Y');
5685          aso_debug_pub.add('l_payment_rec.Quote_Line_Id:    ' || l_payment_rec.Quote_Line_Id, 1, 'Y');
5686          aso_debug_pub.add('l_payment_rec.trxn_extension_id:' || l_payment_rec.trxn_extension_id, 1, 'Y');
5687          aso_debug_pub.add('l_payment_rec.PAYMENT_REF_NUMBER:'|| l_payment_rec.PAYMENT_REF_NUMBER , 1, 'Y');
5688          aso_debug_pub.add('l_payment_rec.PAYMENT_TERM_ID:  ' || l_payment_rec.PAYMENT_TERM_ID, 1, 'Y');
5689      END IF;
5690 
5691      x_return_status := FND_API.G_RET_STS_SUCCESS;
5692 
5693      l_qte_header_rec := ASO_UTILITY_PVT.Query_Header_Row (l_payment_rec.Quote_Header_Id );
5694      IF ( l_payment_rec.Quote_Line_Id IS NOT NULL and l_payment_rec.Quote_Line_Id <> fnd_api.g_miss_num) then
5695        l_qte_line_rec := ASO_UTILITY_PVT.Query_Qte_Line_Row ( l_payment_rec.Quote_Line_Id );
5696      END IF;
5697 
5698     if (l_payment_rec.trxn_extension_id is not null or l_payment_rec.trxn_extension_id <> fnd_api.g_miss_num) then
5699 
5700         -- Check to see if cvv2 is mandatory or not
5701         IF aso_debug_pub.g_debug_flag = 'Y' THEN
5702            aso_debug_pub.add('Before calling IBY_FNDCPT_TRXN_PUB.Get_Payment_Channel_Attribs ', 1, 'Y');
5703         END IF;
5704 
5705         IBY_FNDCPT_SETUP_PUB.Get_Payment_Channel_Attribs
5706             (
5707             p_api_version          => 1.0,
5708             p_init_msg_list        => FND_API.G_FALSE,
5709             x_return_status        => x_return_status,
5710             x_msg_count            => x_msg_count,
5711             x_msg_data             => x_msg_data,
5712             p_channel_code         => 'CREDIT_CARD',
5713             x_channel_attrib_uses  => lx_channel_attrib_uses,
5714             x_response             => lx_response);
5715 
5716         IF aso_debug_pub.g_debug_flag = 'Y' THEN
5717             aso_debug_pub.add('after calling IBY_FNDCPT_TRXN_PUB.Get_Payment_Channel_Attribs ', 1, 'Y');
5718             aso_debug_pub.add('Return Status: '||x_return_status, 1, 'Y');
5719             aso_debug_pub.add('cvv2 use:      '||lx_channel_attrib_uses.Instr_SecCode_Use, 1, 'Y');
5720             aso_debug_pub.add('x_response.result_code:    '|| to_char(lx_response.result_code), 1, 'Y');
5721             aso_debug_pub.add('x_response.result_category:'|| to_char(lx_response.result_category), 1, 'Y');
5722             aso_debug_pub.add('x_response.result_message: '|| to_char(lx_response.result_message), 1, 'Y');
5723         END IF;
5724 
5725         -- if cvv2 is not mandatory then call IBY API to create the new trxn extension
5726         -- if cvv2 is mandatory then do not call IBY API, make payment ref as null and insert row
5727 
5728         IF (nvl(lx_channel_attrib_uses.Instr_SecCode_Use,'null') <>  'REQUIRED') THEN
5729 
5730             l_payer.cust_account_id := null;
5731             l_payer.account_site_id := null;
5732             l_payer.payment_function := 'CUSTOMER_PAYMENT';
5733 
5734 
5735             open c_get_payer_from_trxn(l_payment_rec.trxn_extension_id);
5736             fetch c_get_payer_from_trxn into l_payer.party_id,l_payment_rec.instr_assignment_id;
5737             close c_get_payer_from_trxn;
5738 
5739 		  if (l_payment_rec.payment_id is null or l_payment_rec.payment_id = fnd_api.g_miss_num) then
5740 		    open c_get_payment_id;
5741 		    fetch c_get_payment_id into l_payment_rec.payment_id;
5742 		    close c_get_payment_id;
5743             end if;
5744 
5745             l_trxn_attribs.Originating_Application_Id := 697;
5746 
5747             l_trxn_attribs.Order_Id := to_char(l_payment_rec.payment_id)||'-'||l_qte_header_rec.quote_number;
5748             l_trxn_attribs.PO_Number := null;
5749             l_trxn_attribs.PO_Line_Number := null;
5750             l_trxn_attribs.Trxn_Ref_Number1 := l_payment_rec.quote_header_id;
5751             IF l_payment_rec.quote_line_id = fnd_api.g_miss_num then
5752              l_trxn_attribs.Trxn_Ref_Number2 := null;
5753             Else
5754              l_trxn_attribs.Trxn_Ref_Number2 := l_payment_rec.quote_line_id;
5755             End if;
5756             -- Do NOT copy the cvv2 info if the cvv2 is OPTIONAL see bug 4777120
5757 		  -- l_trxn_attribs.Instrument_Security_Code := l_payment_rec.cvv2;
5758 
5759             l_trxn_attribs.VoiceAuth_Flag := null;
5760             l_trxn_attribs.VoiceAuth_Date := null;
5761             l_trxn_attribs.VoiceAuth_Code := null;
5762             l_trxn_attribs.Additional_Info := null;
5763 
5764            IF aso_debug_pub.g_debug_flag = 'Y' THEN
5765               aso_debug_pub.add('Before calling IBY_FNDCPT_TRXN_PUB.Create_Transaction_Extension ', 1, 'Y');
5766               aso_debug_pub.add('Instrument Assignment id: '|| l_payment_rec.instr_assignment_id, 1, 'Y');
5767               aso_debug_pub.add('payment id is :           '|| l_payment_rec.payment_id,1,'Y');
5768               aso_debug_pub.add('quote line  id is :       '|| l_payment_rec.quote_line_id,1,'Y');
5769               aso_debug_pub.add('party_id is :             '|| l_payer.party_id,1,'Y');
5770            END IF;
5771 
5772             IBY_FNDCPT_TRXN_PUB.Create_Transaction_Extension
5773             (
5774             p_api_version       => 1.0,
5775             p_init_msg_list     => FND_API.G_FALSE,
5776             p_commit            => FND_API.G_FALSE,
5777             x_return_status     => x_return_status,
5778             x_msg_count         => x_msg_count,
5779             x_msg_data          => x_msg_data,
5780             p_payer             => l_payer,
5781             p_payer_equivalency => IBY_FNDCPT_COMMON_PUB.G_PAYER_EQUIV_UPWARD,
5782             p_pmt_channel       => l_payment_rec.payment_type_code,
5783             p_instr_assignment  => l_payment_rec.instr_assignment_id,
5784             p_trxn_attribs      => l_trxn_attribs,
5785             x_entity_id         => lx_entity_id,
5786             x_response          => lx_response);
5787 
5788            IF aso_debug_pub.g_debug_flag = 'Y' THEN
5789               aso_debug_pub.add('after calling IBY_FNDCPT_TRXN_PUB.Create_Transaction_Extension ', 1, 'Y');
5790               aso_debug_pub.add('Return Status: '||x_return_status, 1, 'Y');
5791             aso_debug_pub.add('lx_entity_id:            '||lx_entity_id, 1, 'Y');
5792             aso_debug_pub.add('x_response.result_code:    '|| to_char(lx_response.result_code), 1, 'Y');
5793             aso_debug_pub.add('x_response.result_category:'|| to_char(lx_response.result_category), 1, 'Y');
5794             aso_debug_pub.add('x_response.result_message: '|| to_char(lx_response.result_message), 1, 'Y');
5795            END IF;
5796 
5797             if x_return_status <> fnd_api.g_ret_sts_success then
5798               IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5799                  FND_MESSAGE.Set_Name('ASO', 'ERROR_RETURNED');
5800                  FND_MESSAGE.Set_Token('API', 'IBY_FNDCPT_TRXN_PUB.Create_Transaction_Extension ', FALSE);
5801                  FND_MSG_PUB.ADD;
5802               END IF;
5803               IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
5804                  RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5805               ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
5806                  RAISE FND_API.G_EXC_ERROR;
5807               END IF;
5808             end if;
5809 
5810             -- setting the trxn extn id
5811             l_payment_rec.trxn_extension_id := lx_entity_id;
5812 
5813      ELSE
5814 
5815            IF aso_debug_pub.g_debug_flag = 'Y' THEN
5816               aso_debug_pub.add('Instr Sec Code cvv2 is mandatory hence setting the payment ref number and trxn ext id to null ', 1, 'Y');
5817            END IF;
5818 
5819             l_payment_rec.PAYMENT_REF_NUMBER := null;
5820             l_payment_rec.trxn_extension_id := null;
5821             l_payment_rec.payment_type_code := null;
5822 
5823      END IF; -- end if for the cvv2 check
5824 
5825     end if; -- end if for trxn ext id check
5826 
5827            IF l_payment_rec.PAYMENT_TYPE_CODE = 'CREDIT_CARD' then
5828               l_payment_ref_number := null;
5829            else
5830               l_payment_ref_number := l_payment_rec.PAYMENT_REF_NUMBER;
5831            END IF;
5832 
5833      ASO_PAYMENTS_PKG.Insert_Row(
5834             px_PAYMENT_ID                 => l_payment_rec.PAYMENT_ID,
5835             p_CREATION_DATE               => SYSDATE,
5836             p_CREATED_BY                  => fnd_global.USER_ID,
5837             p_LAST_UPDATE_DATE            => SYSDATE,
5838             p_LAST_UPDATED_BY             => fnd_global.USER_ID,
5839             p_LAST_UPDATE_LOGIN           => FND_GLOBAL.CONC_LOGIN_ID,
5840             p_REQUEST_ID                  => l_payment_rec.REQUEST_ID,
5841             p_PROGRAM_APPLICATION_ID      => l_payment_rec.PROGRAM_APPLICATION_ID,
5842             p_PROGRAM_ID                  => l_payment_rec.PROGRAM_ID,
5843             p_PROGRAM_UPDATE_DATE         => l_payment_rec.PROGRAM_UPDATE_DATE,
5844             p_QUOTE_HEADER_ID             => l_payment_rec.QUOTE_HEADER_ID,
5845             p_QUOTE_LINE_ID               => l_payment_rec.QUOTE_LINE_ID,
5846             p_QUOTE_SHIPMENT_ID           => l_payment_rec.QUOTE_SHIPMENT_ID ,
5847             p_PAYMENT_TYPE_CODE           => l_payment_rec.PAYMENT_TYPE_CODE,
5848             p_PAYMENT_REF_NUMBER          => l_payment_ref_number,
5849             p_PAYMENT_OPTION              => l_payment_rec.PAYMENT_OPTION,
5850             p_PAYMENT_TERM_ID             => l_payment_rec.PAYMENT_TERM_ID,
5851             p_CREDIT_CARD_CODE            => null,
5852             p_CREDIT_CARD_HOLDER_NAME     => null,
5853             p_CREDIT_CARD_EXPIRATION_DATE => null,
5854             p_CREDIT_CARD_APPROVAL_CODE   => null,
5855             p_CREDIT_CARD_APPROVAL_DATE   => null,
5856             p_PAYMENT_AMOUNT              => l_payment_rec.PAYMENT_AMOUNT,
5857             p_ATTRIBUTE_CATEGORY          => l_payment_rec.ATTRIBUTE_CATEGORY,
5858             p_ATTRIBUTE1                  => l_payment_rec.ATTRIBUTE1,
5859             p_ATTRIBUTE2                  => l_payment_rec.ATTRIBUTE2,
5860             p_ATTRIBUTE3                  => l_payment_rec.ATTRIBUTE3,
5861             p_ATTRIBUTE4                  => l_payment_rec.ATTRIBUTE4,
5862             p_ATTRIBUTE5                  => l_payment_rec.ATTRIBUTE5,
5863             p_ATTRIBUTE6                  => l_payment_rec.ATTRIBUTE6,
5864             p_ATTRIBUTE7                  => l_payment_rec.ATTRIBUTE7,
5865             p_ATTRIBUTE8                  => l_payment_rec.ATTRIBUTE8,
5866             p_ATTRIBUTE9                  => l_payment_rec.ATTRIBUTE9,
5867             p_ATTRIBUTE10                 => l_payment_rec.ATTRIBUTE10,
5868             p_ATTRIBUTE11                 => l_payment_rec.ATTRIBUTE11,
5869             p_ATTRIBUTE12                 => l_payment_rec.ATTRIBUTE12,
5870             p_ATTRIBUTE13                 => l_payment_rec.ATTRIBUTE13,
5871             p_ATTRIBUTE14                 => l_payment_rec.ATTRIBUTE14,
5872             p_ATTRIBUTE15                 => l_payment_rec.ATTRIBUTE15,
5873            p_ATTRIBUTE16                 => l_payment_rec.ATTRIBUTE16,
5874             p_ATTRIBUTE17                 => l_payment_rec.ATTRIBUTE17,
5875             p_ATTRIBUTE18                 => l_payment_rec.ATTRIBUTE18,
5876             p_ATTRIBUTE19                 => l_payment_rec.ATTRIBUTE19,
5877             p_ATTRIBUTE20                 => l_payment_rec.ATTRIBUTE20,
5878           p_CUST_PO_NUMBER              => l_payment_rec.CUST_PO_NUMBER,
5879            p_PAYMENT_TERM_ID_FROM        => l_payment_rec.PAYMENT_TERM_ID_FROM,
5880           p_OBJECT_VERSION_NUMBER       => l_payment_rec.OBJECT_VERSION_NUMBER,
5881             p_CUST_PO_LINE_NUMBER         => l_payment_rec.CUST_PO_LINE_NUMBER,
5882             p_trxn_extension_id           => l_payment_rec.trxn_extension_id
5883           );
5884       -- Standard call to get message count and if count is 1, get message info.
5885       FND_MSG_PUB.Count_And_Get
5886       (  p_count          =>   x_msg_count,
5887          p_data           =>   x_msg_data
5888       );
5889 
5890     IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
5891       aso_debug_pub.ADD ('END copy_payment_row',1,'N');
5892     END IF;
5893 
5894 EXCEPTION
5895   WHEN FND_API.G_EXC_ERROR THEN
5896     ASO_UTILITY_PVT.HANDLE_EXCEPTIONS(
5897                    P_API_NAME => L_API_NAME
5898                   ,P_PKG_NAME => G_PKG_NAME
5899                   ,P_EXCEPTION_LEVEL => FND_MSG_PUB.G_MSG_LVL_ERROR
5900                   ,P_PACKAGE_TYPE => ASO_UTILITY_PVT.G_PVT
5901                   ,X_MSG_COUNT => X_MSG_COUNT
5902                   ,X_MSG_DATA => X_MSG_DATA
5903                   ,X_RETURN_STATUS => X_RETURN_STATUS);
5904 
5905   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5906     ASO_UTILITY_PVT.HANDLE_EXCEPTIONS(
5907                    P_API_NAME => L_API_NAME
5908                   ,P_PKG_NAME => G_PKG_NAME
5909                   ,P_EXCEPTION_LEVEL => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
5910                   ,P_PACKAGE_TYPE => ASO_UTILITY_PVT.G_PVT
5911                   ,X_MSG_COUNT => X_MSG_COUNT
5912                   ,X_MSG_DATA => X_MSG_DATA
5913                   ,X_RETURN_STATUS => X_RETURN_STATUS);
5914 
5915   WHEN OTHERS THEN
5916     ASO_UTILITY_PVT.HANDLE_EXCEPTIONS(
5917                    P_API_NAME => L_API_NAME
5918                   ,P_PKG_NAME => G_PKG_NAME
5919                   ,P_EXCEPTION_LEVEL => ASO_UTILITY_PVT.G_EXC_OTHERS
5920                   ,P_PACKAGE_TYPE => ASO_UTILITY_PVT.G_PVT
5921                   ,X_MSG_COUNT => X_MSG_COUNT
5922                   ,X_MSG_DATA => X_MSG_DATA
5923                   ,X_RETURN_STATUS => X_RETURN_STATUS);
5924 
5925 end copy_payment_row;
5926 
5927 END ASO_COPY_QUOTE_PVT;