DBA Data[Home] [Help]

PACKAGE BODY: APPS.ASO_QUOTE_TMPL_PVT

Source


1 PACKAGE BODY ASO_QUOTE_TMPL_PVT AS
2 /* $Header: asovqtmb.pls 120.13 2012/01/31 06:40:04 vidsrini ship $ */
3 
4 -- Start of Comments
5 -- Package name     : ASO_QUOTE_TMPL_PVT
6 -- Purpose          :
7 -- End of Comments
8 
9 
10 
11 G_PKG_NAME           CONSTANT    VARCHAR2(30)                             := 'ASO_QUOTE_TMPL_PVT';
12 G_FILE_NAME          CONSTANT    VARCHAR2(12)                             := 'asovqtmb.pls';
13 
14 
15 
16 
17 
18 
19 PROCEDURE Add_Template_To_Quote(
20     P_API_VERSION_NUMBER    IN   NUMBER,
21     P_INIT_MSG_LIST         IN   VARCHAR2                                 := FND_API.G_FALSE,
22     P_COMMIT                IN   VARCHAR2                                 := FND_API.G_FALSE,
23     P_VALIDATION_LEVEL      IN   NUMBER                                   := FND_API.G_VALID_LEVEL_FULL,
24     P_UPDATE_FLAG           IN   VARCHAR2                                 := 'Y',
25     P_TEMPLATE_ID_TBL       IN   ASO_QUOTE_TMPL_INT.LIST_TEMPLATE_TBL_TYPE,
26     P_QTE_HEADER_REC        IN   ASO_QUOTE_PUB.Qte_Header_Rec_Type := ASO_QUOTE_PUB.G_Miss_Qte_Header_Rec,
27     P_CONTROL_REC           IN   ASO_QUOTE_PUB.CONTROL_REC_TYPE           := ASO_QUOTE_PUB.G_MISS_control_REC,
28     x_Qte_Line_Tbl         OUT NOCOPY /* file.sql.39 change */       ASO_QUOTE_PUB.Qte_Line_Tbl_Type,
29     x_Qte_Line_Dtl_Tbl     OUT NOCOPY /* file.sql.39 change */       ASO_QUOTE_PUB.Qte_Line_Dtl_Tbl_Type,
30     X_RETURN_STATUS         OUT NOCOPY /* file.sql.39 change */     VARCHAR2,
31     X_MSG_COUNT             OUT NOCOPY /* file.sql.39 change */     NUMBER,
32     X_MSG_DATA              OUT NOCOPY /* file.sql.39 change */     VARCHAR2
33 )
34 IS
35 
36     G_USER_ID                    NUMBER                                   := FND_GLOBAL.USER_ID;
37     G_LOGIN_ID                   NUMBER                                   := FND_GLOBAL.CONC_LOGIN_ID;
38 
39     L_API_NAME                   VARCHAR2(50)                             := 'Add_Template_To_Quote';
40     L_API_VERSION    CONSTANT    NUMBER                                   := 1.0;
41 
42     l_template_line_count        NUMBER                                   := 0;
43     l_conc_segments              VARCHAR2(40);
44     l_top_model_line_id          NUMBER                                   := FND_API.G_MISS_NUM;
45     l_dropped_flag               VARCHAR2(1)                              := 'N';
46     l_service_flag               VARCHAR2(1)                              := 'N';
47     l_config_header_id           NUMBER;
48     l_config_rev_number          NUMBER;
49     lx_config_header_id          NUMBER;
50     lx_config_rev_number         NUMBER;
51     lx_line_relationship_id      NUMBER;
52 
53     l_dropped_line_id_tbl        ASO_QUOTE_TMPL_INT.List_Template_Tbl_Type                   := ASO_QUOTE_TMPL_INT.G_Miss_List_Template_Tbl;
54     l_search_line_id_tbl         ASO_QUOTE_TMPL_INT.List_Template_Tbl_Type                   := ASO_QUOTE_TMPL_INT.G_Miss_List_Template_Tbl;
55     l_temp_line_dtl_tbl          ASO_QUOTE_PUB.Qte_Line_Dtl_Tbl_Type;
56     l_cfg_control_rec            ASO_CFG_INT.Control_rec_Type             := ASO_CFG_INT.G_Miss_Control_Rec;
57     l_line_rltship_rec           ASO_QUOTE_PUB.Line_Rltship_Rec_Type      := ASO_QUOTE_PUB.G_Miss_Line_Rltship_Rec;
58 
59     -- Variables to hold values to be passed to ASO_VALIDATE_PRICING_PVT.Validate_Pricing_Order()
60     l_pricing_control_rec        ASO_PRICING_INT.Pricing_Control_Rec_Type;
61     lp_Qte_Line_Tbl              ASO_QUOTE_PUB.Qte_Line_Tbl_Type          := ASO_QUOTE_PUB.G_Miss_Qte_Line_Tbl;
62     lpx_Qte_Header_Rec           ASO_QUOTE_PUB.Qte_Header_Rec_Type;
63     lpx_Qte_Line_Tbl             ASO_QUOTE_PUB.Qte_Line_Tbl_Type;
64     lpx_Qte_Line_Dtl_Tbl         ASO_QUOTE_PUB.Qte_Line_Dtl_Tbl_Type;
65     lpx_Price_Adjustment_Tbl     ASO_QUOTE_PUB.Price_Adj_Tbl_Type;
66     lpx_Price_Adj_Attr_Tbl       ASO_QUOTE_PUB.Price_Adj_Attr_Tbl_Type;
67     lpx_Price_Adj_Rltship_Tbl    ASO_QUOTE_PUB.Price_Adj_Rltship_Tbl_Type;
68 
69     -- Variables to hold values to be passed to ASO_QUOTE_PUB.Update_Quote()
70     l_qte_header_rec             ASO_QUOTE_PUB.Qte_Header_Rec_type        := ASO_QUOTE_PUB.G_Miss_Qte_Header_Rec;
71     l_qte_line_tbl               ASO_QUOTE_PUB.Qte_Line_Tbl_Type          := ASO_QUOTE_PUB.G_Miss_Qte_Line_Tbl;
72     l_qte_line_dtl_tbl           ASO_QUOTE_PUB.Qte_Line_Dtl_Tbl_Type;
73     X_Qte_Header_Rec             ASO_QUOTE_PUB.Qte_Header_Rec_Type;
74     --X_Qte_Line_Tbl               ASO_QUOTE_PUB.Qte_Line_Tbl_Type;
75     --X_Qte_Line_Dtl_Tbl           ASO_QUOTE_PUB.Qte_Line_Dtl_Tbl_Type;
76     X_Hd_Price_Attributes_Tbl    ASO_QUOTE_PUB.Price_Attributes_Tbl_Type;
77     X_Hd_Payment_Tbl             ASO_QUOTE_PUB.Payment_Tbl_Type;
78     X_Hd_Shipment_Tbl            ASO_QUOTE_PUB.Shipment_Tbl_Type;
79     X_Hd_Freight_Charge_Tbl      ASO_QUOTE_PUB.Freight_Charge_Tbl_Type;
80     X_Hd_Tax_Detail_Tbl          ASO_QUOTE_PUB.Tax_Detail_Tbl_Type;
81     X_Line_Attr_Ext_Tbl          ASO_QUOTE_PUB.Line_Attribs_Ext_Tbl_Type;
82     X_line_rltship_tbl           ASO_QUOTE_PUB.Line_Rltship_Tbl_Type;
83     X_Price_Adjustment_Tbl       ASO_QUOTE_PUB.Price_Adj_Tbl_Type;
84     X_Price_Adj_Attr_Tbl         ASO_QUOTE_PUB.Price_Adj_Attr_Tbl_Type;
85     X_Price_Adj_Rltship_Tbl      ASO_QUOTE_PUB.Price_Adj_Rltship_Tbl_Type;
86     X_Ln_Price_Attributes_Tbl    ASO_QUOTE_PUB.Price_Attributes_Tbl_Type;
87     X_Ln_Payment_Tbl             ASO_QUOTE_PUB.Payment_Tbl_Type;
88     X_Ln_Shipment_Tbl            ASO_QUOTE_PUB.Shipment_Tbl_Type;
89     X_Ln_Freight_Charge_Tbl      ASO_QUOTE_PUB.Freight_Charge_Tbl_Type;
90     X_Ln_Tax_Detail_Tbl          ASO_QUOTE_PUB.Tax_Detail_Tbl_Type;
91     lx_orig_item_id_tbl CZ_API_PUB.number_tbl_type;
92     lx_new_item_id_tbl  CZ_API_PUB.number_tbl_type;
93 
94     	TYPE search_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
95 	l_orig_config_id_tbl search_type;
96 
97    -- ER 9433340
98     l_validate_item    boolean;
99     l_tmpl_org_id      number;
100     l_prof_temp_filter  varchar2(1):=nvl(fnd_profile.value('ASO_FILTER_QUOTE_TEMPLATE_BY'),'Q');
101     l_qte_organization_id number;
102 
103     CURSOR c_conc_segments (l_inventory_item_id NUMBER) IS
104     SELECT concatenated_segments
105       FROM MTL_SYSTEM_ITEMS_VL
106      WHERE inventory_item_id = l_inventory_item_id;
107 
108     CURSOR c_config_lines (l_quote_line_id NUMBER) IS
109     SELECT A.quote_line_id
110       FROM ASO_QUOTE_LINE_DETAILS A
111       WHERE (config_header_id, config_revision_num) = ( SELECT config_header_id, config_revision_num FROM ASO_QUOTE_LINE_DETAILS WHERE quote_line_id = l_quote_line_id );
112 
113     CURSOR c_service_lines (l_quote_line_id NUMBER) IS
114     SELECT quote_line_id
115       FROM ASO_QUOTE_LINE_DETAILS
116      WHERE service_ref_line_id = l_quote_line_id;
117 
118     CURSOR c_service_items (l_inventory_item_id NUMBER, l_organization_id NUMBER) IS
119     SELECT service_item_flag
120       FROM MTL_SYSTEM_ITEMS_VL
121      WHERE inventory_item_id = l_inventory_item_id
122        AND organization_id = l_organization_id;
123 
124     CURSOR c_get_org_id ( l_qte_hdr_id NUMBER) IS
125     SELECT org_id
126     FROM   aso_quote_headers_all
127     WHERE  quote_header_id = l_qte_hdr_id;
128 
129 BEGIN
130 
131     -- Standard Start of API savepoint
132     SAVEPOINT Add_Template_To_Quote_PVT;
133 
134     aso_debug_pub.g_debug_flag := nvl(fnd_profile.value('ASO_ENABLE_DEBUG'),'N');
135 
136     IF aso_debug_pub.g_debug_flag = 'Y' THEN
137     aso_debug_pub.add('******   Start of Add_Template_To_Quote API ******', 1, 'Y');
138     END IF;
139 
140     -- Standard call to check for call compatibility.
141     IF NOT FND_API.Compatible_API_Call(
142         L_API_VERSION       ,
143         P_API_VERSION_NUMBER,
144         L_API_NAME          ,
145         G_PKG_NAME
146     ) THEN
147         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
148     END IF;
149 
150     -- Initialize message list if p_init_msg_list is set to TRUE.
151     IF FND_API.To_Boolean(p_init_msg_list) THEN
152         FND_Msg_Pub.initialize;
153     END IF;
154 
155     -- Initialize API return status to success
156     x_return_status := FND_API.G_RET_STS_SUCCESS;
157 
158     -- API body
159     l_qte_header_rec                    := p_qte_header_rec;
160 
161     IF (p_qte_header_rec.org_id is null or p_qte_header_rec.org_id = fnd_api.g_miss_num ) then
162        IF aso_debug_pub.g_debug_flag = 'Y' THEN
163          aso_debug_pub.add('ASO_QUOTE_TMPL_PVT: Input ogr_id is null or g_miss', 1, 'Y');
164          aso_debug_pub.add('ASO_QUOTE_TMPL_PVT: p_qte_header_rec.quote_header_id: ' || p_qte_header_rec.quote_header_id, 1, 'Y');
165        END IF;
166 
167         open c_get_org_id(p_qte_header_rec.quote_header_id);
168 	   fetch c_get_org_id into l_qte_header_rec.org_id;
169 	   close c_get_org_id;
170 
171 
172 
173     END IF;
174 
175       IF aso_debug_pub.g_debug_flag = 'Y' THEN
176          aso_debug_pub.add('ASO_QUOTE_TMPL_PVT: l_qte_header_rec.org_id: '|| l_qte_header_rec.org_id, 1, 'Y');
177 	 aso_debug_pub.add('ASO_QUOTE_TMPL_PVT: p_qte_header_rec.org_id: '|| p_qte_header_rec.org_id, 1, 'Y');
178 	  aso_debug_pub.add('ASO_QUOTE_TMPL_PVT:template filter profile value: '|| l_prof_temp_filter, 1, 'Y');
179 	    aso_debug_pub.add('ASO_QUOTE_TMPL_PVT: before setting org context '||p_template_id_tbl.count);
180        END IF;
181 
182 
183 
184     FOR i IN 1..p_template_id_tbl.count LOOP
185            -- ER 9433340
186 	   if l_prof_temp_filter<>'Q' then
187 
188 	      -- Setting MOAC to pick lines data from other org
189 	      select org_id into l_tmpl_org_id from aso_quote_headers_all
190 	      where quote_header_id=p_template_id_tbl(i);
191               mo_global.set_policy_context('S', l_tmpl_org_id);
192         end if;
193         l_qte_line_tbl := ASO_UTILITY_PVT.Query_Qte_Line_Rows_sort(p_template_id_tbl(i));
194 	 -- ER 9433340
195 	if l_tmpl_org_id=l_qte_header_rec.org_id then  -- same org id
196             l_prof_temp_filter:='Q';
197         end if;
198 
199 	FOR j IN 1..l_qte_line_tbl.count LOOP
200               -- Quote operating unit is same as template operating unit
201 	       if l_prof_temp_filter='Q' then
202 			l_validate_item:=true;
203                else
204 	        --aso_debug_pub.add('ASO_QUOTE_TMPL_PVT: entered else of profile');
205 	        -- validate item based on new operating unit
206 	         l_validate_item:=Validate_Item(
207 						p_qte_header_rec    => l_qte_header_rec,
208 						p_quote_line_id    =>     l_qte_line_tbl(j).quote_line_id,
209 						p_inventory_item_id => l_qte_line_tbl(j).inventory_item_id,
210 						--p_organization_id   => l_qte_line_tbl(j).organization_id,
211 						p_quantity          => l_qte_line_tbl(j).quantity,
212 						p_uom_code          => l_qte_line_tbl(j).uom_code);
213                 end if;
214 
215 	    if  l_validate_item = true then
216 		l_template_line_count                  := l_template_line_count + 1;
217 		lp_qte_line_tbl(l_template_line_count) := l_qte_line_tbl(j);
218 		--  Updating the lines table with new organization id in case operating unit is different
219 		if l_prof_temp_filter<>'Q' then
220 		   if l_qte_header_rec.org_id<>l_tmpl_org_id then
221 		      mo_global.set_policy_context('S',  l_qte_header_rec.org_id);
222                    end if;
223 		      l_qte_organization_id:=oe_sys_parameters.value(param_name => 'MASTER_ORGANIZATION_ID',p_org_id => l_qte_header_rec.org_id);
224                       lp_qte_line_tbl(l_template_line_count).organization_id:=l_qte_organization_id;
225 		      lp_qte_line_tbl(l_template_line_count).org_id:=l_qte_header_rec.org_id;
226 		end if;
227            end if;
228         END LOOP;
229         l_qte_line_tbl := ASO_QUOTE_PUB.G_Miss_Qte_Line_Tbl;
230     END LOOP;
231 
232     l_pricing_control_rec.request_type  := 'ASO';
233     l_pricing_control_rec.pricing_event := 'BATCH';
234 
235     IF aso_debug_pub.g_debug_flag = 'Y' THEN
236     aso_debug_pub.add('ASO_QUOTE_TMPL_PVT: before Validate_Pricing_Order', 1, 'Y');
237     END IF;
238 
239     ASO_VALIDATE_PRICING_PVT.Validate_Pricing_Order(
240         p_api_version_number       => 1.0,
241         p_init_msg_list            => FND_API.G_FALSE,
242         p_commit                   => FND_API.G_FALSE,
243         p_control_rec              => l_pricing_control_rec,
244         p_qte_header_rec           => l_qte_header_rec,
245         p_qte_line_tbl             => lp_qte_line_tbl,
246         x_qte_header_rec           => lpx_qte_header_rec,
247         x_qte_line_tbl             => lpx_qte_line_tbl,
248         x_qte_line_dtl_tbl         => lpx_qte_line_dtl_tbl,
249         x_price_adj_tbl            => lpx_price_adjustment_tbl,
250         x_price_adj_attr_tbl       => lpx_price_adj_attr_tbl,
251         x_price_adj_rltship_tbl    => lpx_price_adj_rltship_tbl,
252         x_return_status            => x_return_status,
253         x_msg_count                => x_msg_count,
254         x_msg_data                 => x_msg_data
255     );
256 
257     IF aso_debug_pub.g_debug_flag = 'Y' THEN
258     aso_debug_pub.add('ASO_QUOTE_TMPL_PVT:  after Validate_Pricing_Order', 1, 'Y');
259     END IF;
260 
261     IF x_return_status = FND_API.G_RET_STS_ERROR THEN
262         RAISE FND_API.G_EXC_ERROR;
263     ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
264         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
265     END IF;
266 
267     IF aso_debug_pub.g_debug_flag = 'Y' THEN
268     aso_debug_pub.add('ASO_QUOTE_TMPL_PVT: start validated lines loop', 1, 'Y');
269     END IF;
270 
271     FOR i IN 1..lpx_qte_line_tbl.count LOOP
272         IF lpx_qte_line_tbl(i).pricing_status_code <> FND_API.G_RET_STS_SUCCESS THEN
273             l_dropped_line_id_tbl(lpx_qte_line_tbl(i).quote_line_id) := lpx_qte_line_tbl(i).quote_line_id;
274 
275             FOR conc_segments_rec IN c_conc_segments(lpx_qte_line_tbl(i).inventory_item_id) LOOP
276                 l_conc_segments := conc_segments_rec.concatenated_segments;
277             END LOOP;
278 
279 		  IF aso_debug_pub.g_debug_flag = 'Y' THEN
280             aso_debug_pub.add('ASO_QUOTE_TMPL_PVT: item has pricing error: ' || lpx_qte_line_tbl(i).pricing_status_text, 1, 'N');
281 		  END IF;
282             FND_MESSAGE.Set_Name('ASO', 'ASO_QTM_INVALID_PRICELIST');
283             FND_MESSAGE.Set_Token('INVITEM', l_conc_segments, FALSE);
284             FND_MSG_PUB.ADD;
285 
286             IF lpx_qte_line_tbl(i).item_type_code IN ('MDL','CFG') THEN
287                 FOR config_lines_rec IN c_config_lines(lpx_qte_line_tbl(i).quote_line_id) LOOP
288                     IF config_lines_rec.quote_line_id <> lpx_qte_line_tbl(i).quote_line_id THEN
289                         l_dropped_line_id_tbl(config_lines_rec.quote_line_id) := config_lines_rec.quote_line_id;
290                     END IF;
291                 END LOOP;
292             END IF;
293 
294             FOR service_lines_rec IN c_service_lines(lpx_qte_line_tbl(i).quote_line_id) LOOP
295                 l_dropped_line_id_tbl(service_lines_rec.quote_line_id) := service_lines_rec.quote_line_id;
296             END LOOP;
297         END IF;
298     END LOOP;
299 
300     IF aso_debug_pub.g_debug_flag = 'Y' THEN
301     aso_debug_pub.add('ASO_QUOTE_TMPL_PVT:   end validated lines loop', 1, 'Y');
302     END IF;
303 
304     l_template_line_count := 0;
305 
306     IF aso_debug_pub.g_debug_flag = 'Y' THEN
307     aso_debug_pub.add('ASO_QUOTE_TMPL_PVT: start drop items loop', 1, 'Y');
308     END IF;
309 
310     FOR i IN 1..lpx_qte_line_tbl.count LOOP
311         l_dropped_flag := 'N';
312 
313         IF l_dropped_line_id_tbl.EXISTS(lpx_qte_line_tbl(i).quote_line_id) THEN
314             l_dropped_flag := 'Y';
315         END IF;
316 
317         IF l_dropped_flag = 'N' THEN
318             l_template_line_count                                   := l_template_line_count + 1;
319             l_qte_line_tbl(l_template_line_count)                   := lpx_qte_line_tbl(i);
320             l_search_line_id_tbl(lpx_qte_line_tbl(i).quote_line_id) := l_template_line_count;
321         END IF;
322     END LOOP;
323 
324     IF aso_debug_pub.g_debug_flag = 'Y' THEN
325     aso_debug_pub.add('ASO_QUOTE_TMPL_PVT:   end drop items loop', 1, 'Y');
326     END IF;
327 
328     l_template_line_count := 0;
329 
330     IF aso_debug_pub.g_debug_flag = 'Y' THEN
331     aso_debug_pub.add('ASO_QUOTE_TMPL_PVT: start line details loop', 1, 'Y');
332     END IF;
333 
334     FOR i IN 1..l_qte_line_tbl.count LOOP
335         IF l_qte_line_tbl(i).item_type_code IN ('MDL','CFG') THEN
336             l_temp_line_dtl_tbl := ASO_QUOTE_PUB.G_Miss_Qte_Line_Dtl_Tbl;
337             l_temp_line_dtl_tbl := ASO_UTILITY_PVT.Query_Line_Dtl_Rows(l_qte_line_tbl(i).quote_line_id);
338 
339             IF l_temp_line_dtl_tbl.count > 0 THEN
340                 l_template_line_count                                    := l_template_line_count + 1;
341                 l_qte_line_dtl_tbl(l_template_line_count)                := l_temp_line_dtl_tbl(1);
342                 l_qte_line_dtl_tbl(l_template_line_count).operation_code := 'CREATE';
343                 l_qte_line_dtl_tbl(l_template_line_count).qte_line_index := i;
344                 l_qte_line_dtl_tbl(l_template_line_count).quote_line_id  := NULL;
345 
346                 IF l_search_line_id_tbl.EXISTS(l_qte_line_dtl_tbl(l_template_line_count).ref_line_id) THEN
347                     l_qte_line_dtl_tbl(l_template_line_count).ref_line_index := l_search_line_id_tbl(l_qte_line_dtl_tbl(l_template_line_count).ref_line_id);
348                     l_qte_line_dtl_tbl(l_template_line_count).ref_line_id    := NULL;
349                 END IF;
350 
351 		       -- P1 10261431
352 		IF l_search_line_id_tbl.EXISTS(l_qte_line_dtl_tbl(l_template_line_count).top_model_line_id) THEN
353                     l_qte_line_dtl_tbl(l_template_line_count).top_model_line_index := l_search_line_id_tbl(l_qte_line_dtl_tbl(l_template_line_count).top_model_line_id);
354                     l_qte_line_dtl_tbl(l_template_line_count).top_model_line_id    := NULL;
355                 END IF;
356                          -- P1 10261431
357 		IF l_search_line_id_tbl.EXISTS(l_qte_line_dtl_tbl(l_template_line_count).ato_line_id) THEN
358                     l_qte_line_dtl_tbl(l_template_line_count).ato_line_index := l_search_line_id_tbl(l_qte_line_dtl_tbl(l_template_line_count).ato_line_id);
359                     l_qte_line_dtl_tbl(l_template_line_count).ato_line_id    := NULL;
360                 END IF;
361 
362             END IF;
363         ELSE
364             l_service_flag := 'N';
365 
366             FOR service_items_rec in c_service_items(l_qte_line_tbl(i).inventory_item_id, l_qte_line_tbl(i).organization_id) LOOP
367                 l_service_flag := service_items_rec.service_item_flag;
368             END LOOP;
369 
370             IF l_service_flag = 'Y' THEN
371                 l_temp_line_dtl_tbl := ASO_QUOTE_PUB.G_Miss_Qte_Line_Dtl_Tbl;
372                 l_temp_line_dtl_tbl := ASO_UTILITY_PVT.Query_Line_Dtl_Rows(l_qte_line_tbl(i).quote_line_id);
373 
374                 IF l_temp_line_dtl_tbl.count > 0 THEN
375                     l_template_line_count                                    := l_template_line_count + 1;
376                     l_qte_line_dtl_tbl(l_template_line_count)                := l_temp_line_dtl_tbl(1);
377                     l_qte_line_dtl_tbl(l_template_line_count).qte_line_index := i;
378                     l_qte_line_dtl_tbl(l_template_line_count).operation_code := 'CREATE';
379                     l_qte_line_dtl_tbl(l_template_line_count).quote_line_id  := NULL;
380                     l_qte_line_dtl_tbl(l_template_line_count).quote_line_detail_id  := NULL;
381 
382                     IF l_search_line_id_tbl.EXISTS(l_qte_line_dtl_tbl(l_template_line_count).service_ref_line_id) THEN
383                         l_qte_line_dtl_tbl(l_template_line_count).service_ref_qte_line_index := l_search_line_id_tbl(l_qte_line_dtl_tbl(l_template_line_count).service_ref_line_id);
384                         l_qte_line_dtl_tbl(l_template_line_count).service_ref_line_id        := NULL;
385                     END IF;
386                 END IF;
387 
388 			 l_qte_line_tbl(i).start_date_active := sysdate;
389 			 l_qte_line_tbl(i).end_date_active   := null;
390 
391             END IF;
392         END IF;
393 
394     END LOOP;
395 
396     IF aso_debug_pub.g_debug_flag = 'Y' THEN
397     aso_debug_pub.add('ASO_QUOTE_TMPL_PVT:   end line details loop', 1, 'Y');
398     aso_debug_pub.add('ASO_QUOTE_TMPL_PVT: start copy configuration loop', 1, 'Y');
399     END IF;
400 
401     FOR i IN 1..l_qte_line_tbl.count LOOP
402         IF l_qte_line_tbl(i).item_type_code = 'MDL' THEN
403             FOR j IN 1..l_qte_line_dtl_tbl.count LOOP
404                 IF l_qte_line_dtl_tbl(j).qte_line_index = i THEN
405                     IF (l_qte_line_dtl_tbl(j).config_header_id <> FND_API.G_MISS_NUM AND l_qte_line_dtl_tbl(j).config_header_id IS NOT NULL) AND
406                         (l_qte_line_dtl_tbl(j).config_revision_num <> FND_API.G_MISS_NUM AND l_qte_line_dtl_tbl(j).config_revision_num IS NOT NULL) THEN
407 
408                         l_config_header_id  := l_qte_line_dtl_tbl(j).config_header_id;
409                         l_config_rev_number := l_qte_line_dtl_tbl(j).config_revision_num;
410 
411 
412                         IF aso_debug_pub.g_debug_flag = 'Y' THEN
413                         aso_debug_pub.add('ASO_QUOTE_TMPL_PVT: before Copy_Configuration', 1, 'Y');
414 				    END IF;
415 
416 
417                              /*ASO_CFG_INT.Copy_Configuration(
418                             p_api_version_number => 1.0,
419                             p_control_rec        => l_cfg_control_rec,
420                             p_config_hdr_id      => l_config_header_id,
421                             p_config_rev_nbr     => l_config_rev_number,
422                             x_config_hdr_id      => lx_config_header_id,
423                             x_config_rev_nbr     => lx_config_rev_number,
424                             x_return_status      => x_return_status,
425                             x_msg_count          => x_msg_count,
426                             x_msg_data           => x_msg_data
427                         );*/
428 
429                         ASO_CFG_INT.Copy_Configuration(
430                               p_api_version_number  =>  1.0,
431                               p_init_msg_list       =>  FND_API.G_FALSE,
432                               p_commit              =>  FND_API.G_FALSE,
433                               p_config_header_id    =>  l_config_header_id,
434                               p_config_revision_num =>  l_config_rev_number,
435                               p_copy_mode           =>  CZ_API_PUB.G_NEW_HEADER_COPY_MODE,
436                               p_handle_deleted_flag =>  NULL,
437                               p_new_name            =>  NULL,
438                               x_config_header_id    =>  lx_config_header_id,
439                               x_config_revision_num =>  lx_config_rev_number,
440                               x_orig_item_id_tbl    =>  lx_orig_item_id_tbl,
441                               x_new_item_id_tbl     =>  lx_new_item_id_tbl,
442                               x_return_status       =>  x_return_status,
443                               x_msg_count           =>  x_msg_count,
444                               x_msg_data            =>  x_msg_data
445                             );
446 
447                         IF aso_debug_pub.g_debug_flag = 'Y' THEN
448                         aso_debug_pub.add('ASO_QUOTE_TMPL_PVT:  after Copy_Configuration', 1, 'Y');
449 				    END IF;
450 
451                         IF x_return_status = FND_API.G_RET_STS_ERROR THEN
452                             RAISE FND_API.G_EXC_ERROR;
453                         ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
454                             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
455                         END IF;
456 
457 				    -- Changes for Config item Id
458 
459 		  IF (lx_orig_item_id_tbl.count > 0)  AND (lx_new_item_id_tbl.count > 0) THEN
460 				   FOR i IN lx_orig_item_id_tbl.FIRST ..lx_orig_item_id_tbl.LAST LOOP
461 						IF (lx_orig_item_id_tbl.exists(i)) and (lx_orig_item_id_tbl(i) is not null) THEN
462 							l_orig_config_id_tbl(lx_new_item_id_tbl(i)) := lx_new_item_id_tbl(i);
463 						END IF;
464 				   END LOOP;
465 	   		end if;
466 
467 
468                         FOR k IN 1..l_qte_line_dtl_tbl.count LOOP
469                             IF l_qte_line_dtl_tbl(k).config_header_id = l_config_header_id AND  l_qte_line_dtl_tbl(k).config_revision_num = l_config_rev_number THEN
470                                 l_qte_line_dtl_tbl(k).config_header_id    := lx_config_header_id;
471                                 l_qte_line_dtl_tbl(k).config_revision_num := lx_config_rev_number;
472 						  l_qte_line_dtl_tbl(k).quote_line_detail_id := null;
473 					  IF l_orig_config_id_tbl.exists(l_qte_line_dtl_tbl(k).config_item_id) THEN
474 							l_qte_line_dtl_tbl(k).config_item_id := l_orig_config_id_tbl(l_qte_line_dtl_tbl(k).config_item_id);
475 					  end if;
476                             END IF;
477                         END LOOP;-- loop to assign new header and rev
478 
479                     END IF;
480                 END IF;
481             END LOOP;  --  loop on line detail tbl
482         END IF;
483 
484 		l_qte_line_tbl(i).quote_header_id := p_qte_header_rec.quote_header_id;
485 		l_qte_line_tbl(i).operation_code  := 'CREATE';
486 		l_qte_line_tbl(i).quote_line_id   := NULL;
487 		l_qte_line_tbl(i).line_number     := FND_API.G_MISS_NUM;
488     END LOOP;
489 
490     -- Template Manager Changes
491     IF p_update_flag = 'N' THEN
492          x_qte_line_tbl := l_qte_line_tbl;
493 	    x_qte_line_dtl_tbl := l_qte_line_dtl_tbl;
494     ELSE
495 
496     		IF aso_debug_pub.g_debug_flag = 'Y' THEN
497     			aso_debug_pub.add('ASO_QUOTE_TMPL_PVT:   end copy configuration loop', 1, 'Y');
498     			aso_debug_pub.add('ASO_QUOTE_TMPL_PVT: before Update_Quote', 1, 'Y');
499 
500           END IF;
501 
502                  --mo_global.set_policy_context('S',  l_qte_header_rec.org_id);
503     		ASO_QUOTE_PUB.Update_Quote(
504        		P_Api_Version_Number      => 1.0,
505         		P_Init_Msg_List           => FND_API.G_FALSE,
506         		P_Commit                  => FND_API.G_FALSE,
507         		P_Control_Rec             => p_control_rec,
508         		P_Qte_Header_Rec          => l_qte_header_rec,
509         		P_Qte_Line_Tbl            => l_qte_line_tbL,
510         		P_Qte_Line_Dtl_Tbl        => l_qte_line_dtl_tbl,
511         		X_Qte_Header_Rec          => X_Qte_Header_Rec,
512         		X_Qte_Line_Tbl            => X_Qte_Line_Tbl,
513         		X_Qte_Line_Dtl_Tbl        => X_Qte_Line_Dtl_Tbl,
514         		X_Hd_Price_Attributes_Tbl => X_Hd_Price_Attributes_Tbl,
515         		X_Hd_Payment_Tbl          => X_Hd_Payment_Tbl,
516         		X_Hd_Shipment_Tbl         => X_Hd_Shipment_Tbl,
517         		X_Hd_Freight_Charge_Tbl   => X_Hd_Freight_Charge_Tbl,
518         		X_Hd_Tax_Detail_Tbl       => X_Hd_Tax_Detail_Tbl,
519         		X_Line_Attr_Ext_Tbl       => X_Line_Attr_Ext_Tbl,
520         		X_line_rltship_tbl        => X_line_rltship_tbl,
521         		X_Price_Adjustment_Tbl    => X_Price_Adjustment_Tbl,
522         		X_Price_Adj_Attr_Tbl      => X_Price_Adj_Attr_Tbl,
523         		X_Price_Adj_Rltship_Tbl   => X_Price_Adj_Rltship_Tbl,
524         		X_Ln_Price_Attributes_Tbl => X_Ln_Price_Attributes_Tbl,
525         		X_Ln_Payment_Tbl          => X_Ln_Payment_Tbl,
526         		X_Ln_Shipment_Tbl         => X_Ln_Shipment_Tbl,
527         		X_Ln_Freight_Charge_Tbl   => X_Ln_Freight_Charge_Tbl,
528         		X_Ln_Tax_Detail_Tbl       => X_Ln_Tax_Detail_Tbl,
529         		X_Return_Status           => x_return_status,
530         		X_Msg_Count               => x_msg_count,
531         		X_Msg_Data                => x_msg_data
532     			);
533 
534                          --mo_global.set_policy_context('M', null);
535 
536     			IF aso_debug_pub.g_debug_flag = 'Y' THEN
537     				aso_debug_pub.add('ASO_QUOTE_TMPL_PVT:  after Update_Quote', 1, 'Y');
538     			END IF;
539 
540     			IF x_return_status = FND_API.G_RET_STS_ERROR THEN
541        			 RAISE FND_API.G_EXC_ERROR;
542     			ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
543         			RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
544     			END IF;
545 
546  -- Commented for bug no 6731701 so that only the record for newly inserted line go into relationship table
547 /*    				x_qte_line_tbl := ASO_QUOTE_PUB.G_Miss_Qte_Line_Tbl;
548 				x_qte_line_tbl := ASO_UTILITY_PVT.Query_Qte_Line_Rows_sort(p_qte_header_rec.quote_header_id);
549 */
550 		IF aso_debug_pub.g_debug_flag = 'Y' THEN
551 			For l in x_qte_line_tbl.FIRST..x_qte_line_tbl.LAST  LOOP
552 				aso_debug_pub.add('ASO_QUOTE_TMPL_PVT:quote line id :'||x_qte_line_tbl(l).quote_line_id,1,'Y');
553 			END LOOP;
554 		end if;
555 
556     			IF aso_debug_pub.g_debug_flag = 'Y' THEN
557     				aso_debug_pub.add('ASO_QUOTE_TMPL_PVT: start line relationships loop', 1, 'Y');
558     			END IF;
559 
560     			FOR i in 1..x_qte_line_tbl.count LOOP
561         			l_line_rltship_rec := ASO_QUOTE_PUB.G_Miss_Line_Rltship_Rec;
562         			x_qte_line_dtl_tbl := ASO_QUOTE_PUB.G_Miss_Qte_Line_Dtl_Tbl;
563         			x_qte_line_dtl_tbl := ASO_UTILITY_PVT.Query_Line_Dtl_Rows(x_qte_line_tbl(i).quote_line_id);
564 
565         		IF x_qte_line_dtl_tbl.count > 0 THEN
566 
567 				IF aso_debug_pub.g_debug_flag = 'Y' THEN
568 					For k in x_qte_line_dtl_tbl.FIRST..x_qte_line_dtl_tbl.LAST LOOP
569 						 aso_debug_pub.add('ASO_QUOTE_TMPL_PVT:quote line detail id :'||x_qte_line_dtl_tbl(k).quote_line_detail_id,1,'Y');
570 				 	END LOOP;
571 				 end if;
572 
573 
574 
575             		IF x_qte_line_dtl_tbl(1).ref_line_id IS NOT NULL AND x_qte_line_dtl_tbl(1).ref_line_id <> FND_API.G_MISS_NUM THEN
576                 		l_line_rltship_rec.OPERATION_CODE         := 'CREATE';
577                 		l_line_rltship_rec.QUOTE_LINE_ID          := x_qte_line_dtl_tbl(1).ref_line_id;
578                 		l_line_rltship_rec.RELATED_QUOTE_LINE_ID  := x_qte_line_dtl_tbl(1).quote_line_id;
579                 		l_line_rltship_rec.RELATIONSHIP_TYPE_CODE := 'CONFIG';
580 
581 			 	  IF aso_debug_pub.g_debug_flag = 'Y' THEN
582                 		aso_debug_pub.add('ASO_QUOTE_TMPL_PVT: before Create_Line_Rltship', 1, 'Y');
583 			       END IF;
584 
585                 	ASO_LINE_RLTSHIP_PVT.Create_Line_Rltship(
586                     P_Api_Version_Number   => 1.0,
587                     P_Init_Msg_List        => FND_API.G_FALSE,
588                     P_Commit               => FND_API.G_FALSE,
589                     P_Validation_Level     => p_validation_level,
590                     P_Line_Rltship_Rec     => l_line_rltship_rec,
591                     X_LINE_RELATIONSHIP_ID => lx_line_relationship_id,
592                     X_Return_Status        => x_return_status,
593                     X_Msg_Count            => x_msg_count,
594                     X_Msg_Data             => x_msg_data
595                 );
596 
597 			 	IF aso_debug_pub.g_debug_flag = 'Y' THEN
598                		aso_debug_pub.add('ASO_QUOTE_TMPL_PVT:  after Create_Line_Rltship: lx_line_relationship_id: '||lx_line_relationship_id, 1, 'Y');
599                 	END IF;
600 
601                	IF x_return_status = FND_API.G_RET_STS_ERROR THEN
602                    		RAISE FND_API.G_EXC_ERROR;
603                	ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
604                    		RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
605                	END IF;
606             	END IF;
607            END IF;
608     END LOOP;
609 
610    IF aso_debug_pub.g_debug_flag = 'Y' THEN
611     aso_debug_pub.add('ASO_QUOTE_TMPL_PVT:   end line relationships loop', 1, 'Y');
612 
613    END IF;
614 END IF;--Template manager
615 
616 
617     -- End of API body
618     IF aso_debug_pub.g_debug_flag = 'Y' THEN
619     aso_debug_pub.add('****** End of Add_Template_To_Quote API ******', 1, 'Y');
620     END IF;
621 
622     -- Standard check of p_commit
623     IF FND_API.To_Boolean(p_commit) THEN
624         COMMIT WORK;
625     END IF;
626 
627     -- Standard call to get message count and if count is 1, get message info
628     FND_Msg_Pub.Count_And_Get(
629         p_encoded => FND_API.G_FALSE,
630         p_count   => x_msg_count    ,
631         p_data    => x_msg_data
632     );
633 
634     EXCEPTION
635         WHEN FND_API.G_EXC_ERROR THEN
636             ASO_UTILITY_PVT.HANDLE_EXCEPTIONS(
637                 P_API_NAME        => L_API_NAME,
638                 P_PKG_NAME        => G_PKG_NAME,
639                 P_EXCEPTION_LEVEL => FND_MSG_PUB.G_MSG_LVL_ERROR,
640                 P_PACKAGE_TYPE    => ASO_UTILITY_PVT.G_PVT,
641                 P_SQLCODE         => SQLCODE,
642                 P_SQLERRM         => SQLERRM,
643                 X_MSG_COUNT       => X_MSG_COUNT,
644                 X_MSG_DATA        => X_MSG_DATA,
645                 X_RETURN_STATUS   => X_RETURN_STATUS
646             );
647 
648         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
649             ASO_UTILITY_PVT.HANDLE_EXCEPTIONS(
650                 P_API_NAME        => L_API_NAME,
651                 P_PKG_NAME        => G_PKG_NAME,
652                 P_EXCEPTION_LEVEL => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR,
653                 P_PACKAGE_TYPE    => ASO_UTILITY_PVT.G_PVT,
654                 P_SQLCODE         => SQLCODE,
655                 P_SQLERRM         => SQLERRM,
656                 X_MSG_COUNT       => X_MSG_COUNT,
657                 X_MSG_DATA        => X_MSG_DATA,
658                 X_RETURN_STATUS   => X_RETURN_STATUS
659             );
660 
661         WHEN OTHERS THEN
662             ASO_UTILITY_PVT.HANDLE_EXCEPTIONS(
663                 P_API_NAME        => L_API_NAME,
664                 P_PKG_NAME        => G_PKG_NAME,
665                 P_EXCEPTION_LEVEL => ASO_UTILITY_PVT.G_EXC_OTHERS,
666                 P_PACKAGE_TYPE    => ASO_UTILITY_PVT.G_PVT,
667                 P_SQLCODE         => SQLCODE,
668                 P_SQLERRM         => SQLERRM,
669                 X_MSG_COUNT       => X_MSG_COUNT,
670                 X_MSG_DATA        => X_MSG_DATA,
671                 X_RETURN_STATUS   => X_RETURN_STATUS
672             );
673 
674 END Add_Template_To_Quote;
675 
676 -- 9433340  Suner2
677 FUNCTION Validate_Item(
678     p_qte_header_rec    IN       ASO_QUOTE_PUB.Qte_Header_Rec_Type,
679     p_quote_line_id        IN      NUMBER,
680     p_inventory_item_id IN       NUMBER,
681     --p_organization_id   IN       NUMBER,
682     p_quantity          IN       NUMBER,
683     p_uom_code          IN       VARCHAR2
684 ) RETURN BOOLEAN
685 is
686  CURSOR c_conc_segments (l_inventory_item_id NUMBER) IS
687  SELECT concatenated_segments
688  FROM MTL_SYSTEM_ITEMS_VL
689  WHERE inventory_item_id = l_inventory_item_id;
690 
691  CURSOR c_orderable_items (l_inventory_item_id NUMBER, l_organization_id NUMBER) IS
692  SELECT bom_item_type,
693         primary_uom_code,
694         service_item_flag
695  FROM MTL_SYSTEM_ITEMS_VL
696  WHERE inventory_item_id = l_inventory_item_id
697  AND organization_id = l_organization_id
698  AND customer_order_enabled_flag = 'Y'
699  AND bom_item_type <> 2
700  AND NVL(start_date_active, SYSDATE) <= SYSDATE
701  AND NVL(end_date_active, SYSDATE) >= SYSDATE;
702 
703  cursor c_in_org_in_master_org(l_inventory_item_id NUMBER, l_organization_id NUMBER) IS
704  select segment1
705  from mtl_system_items_vl
706  WHERE inventory_item_id = l_inventory_item_id
707  AND organization_id = l_organization_id;
708 
709   l_conc_segments     VARCHAR2(40);
710  l_orderable_flag    VARCHAR2(1) := 'N';
711  l_uom_code          MTL_SYSTEM_ITEMS_B.primary_uom_code%TYPE;
712  l_resp_id           NUMBER;
713  l_resp_appl_id      NUMBER;
714  l_ui_def_id         NUMBER;
715  l_output_qty        NUMBER;
716  l_primary_qty       NUMBER;
717  l_return_status     VARCHAR2(30);
718 
719  lx_return_status    VARCHAR2(50);
720  lx_msg_count        NUMBER;
721  lx_msg_data         VARCHAR2(2000);
722  l_master_organization_id NUMBER;
723  l_segment1          VARCHAR2(240);
724 
725 cursor c_service_ref_quote (l_Quote_line_id number) is
726 select service_ref_line_id
727 from aso_quote_line_Details
728 where quote_line_id=  l_Quote_line_id
729 and service_ref_type_code ='QUOTE';
730 
731 cursor c_service_ref_quote_line (l_Quote_line_id number) is
732 select inventory_item_id
733 from aso_quote_lines_All
734 where quote_line_id = l_quote_line_id;
735 
736 
737  lprof varchar2(10) := nvl(fnd_profile.value('ASO_FILTER_SERVICE_RF_END_CUST'),'N');
738  l_inv_id     number;
739 l_service_ref_line_id number;
740  l_check_service_rec ASO_SERVICE_CONTRACTS_INT.CHECK_SERVICE_REC_TYPE;
741  l_cust    number;
742 l_Available_YN VARCHAR2(1);
743 
744 
745 
746 -- end service items
747 
748 begin
749 aso_debug_pub.g_debug_flag := nvl(fnd_profile.value('ASO_ENABLE_DEBUG'),'N');
750 
751 IF aso_debug_pub.g_debug_flag = 'Y' THEN
752    aso_debug_pub.add('ASO_QUOTE_TMPL_PVT: Validate_Item: *** Start of API body ***', 1, 'Y');
753    aso_debug_pub.add('ASO_QUOTE_TMPL_PVT: Validate_Item: p_inventory_item_id: '|| p_inventory_item_id, 1, 'N');
754    --aso_debug_pub.add('ASO_QUOTE_TMPL_PVT: Validate_Item: p_organization_id:   '|| p_organization_id, 1, 'N');
755    aso_debug_pub.add('ASO_QUOTE_TMPL_PVT: Validate_Item: p_quantity:          '|| p_quantity, 1, 'N');
756    aso_debug_pub.add('ASO_QUOTE_TMPL_PVT: Validate_Item: p_uom_code:          '|| p_uom_code, 1, 'N');
757 END IF;
758 
759 
760 FOR conc_segments_rec IN c_conc_segments(p_inventory_item_id) LOOP
761     l_conc_segments := conc_segments_rec.concatenated_segments;
762 END LOOP;
763 
764 
765     l_master_organization_id := oe_sys_parameters.value(param_name => 'MASTER_ORGANIZATION_ID',
766                                                                p_org_id => p_qte_header_rec.org_id);
767 
768            IF aso_debug_pub.g_debug_flag = 'Y' THEN
769               aso_debug_pub.add('l_master_organization_id: ' || l_master_organization_id);
770               aso_debug_pub.add(' p_qte_header_rec.org_id: ' ||  p_qte_header_rec.org_id);
771            END IF;
772 
773  open c_in_org_in_master_org(p_inventory_item_id,l_master_organization_id);
774  fetch c_in_org_in_master_org into l_segment1;
775  if c_in_org_in_master_org%NOTFOUND THEN
776              IF aso_debug_pub.g_debug_flag = 'Y' THEN
777                 aso_debug_pub.add('ASO_QUOTE_TMPL_PVT: Item does not exist in the master org',1,'N');
778              END IF;
779 
780              RETURN FALSE;
781 
782  end if;
783  close c_in_org_in_master_org;
784 
785 
786 FOR orderable_items_rec IN c_orderable_items(p_inventory_item_id, l_master_organization_id) LOOP
787     l_orderable_flag := 'Y';
788     IF p_uom_code IS NULL THEN
789        l_uom_code := orderable_items_rec.primary_uom_code;
790 
791     ELSIF p_uom_code IS NOT NULL AND p_uom_code <> FND_API.G_MISS_CHAR  THEN
792       l_uom_code  := p_uom_code;
793 
794     END IF;
795 
796 
797     IF orderable_items_rec.service_item_flag = 'Y' THEN
798        IF (fnd_profile.value('ASO_REQUIRE_SERVICE_REFERENCE') <> 'N')     OR (fnd_profile.value('ASO_REQUIRE_SERVICE_REFERENCE') is null) THEN
799              IF aso_debug_pub.g_debug_flag = 'Y' THEN
800 		      aso_debug_pub.add('ASO_QUOTE_TMPL_PVT: Validate_Item: item is of type service:'  || p_inventory_item_id, 1, 'N');
801 	      END IF;
802                open c_service_ref_quote(p_quote_line_id);
803 	       fetch c_service_ref_quote into l_service_ref_line_id;
804 	       close c_service_ref_quote;
805 
806 	        if l_service_ref_line_id is not null then
807 		      open c_service_ref_quote_line(l_service_ref_line_id);
808 		      fetch c_service_ref_quote_line into l_inv_id;
809 		      close c_service_ref_quote_line;
810 	      end if;
811 
812                if lprof='Y' then
813 		    l_cust :=p_qte_header_rec.END_CUSTOMER_CUST_ACCOUNT_ID;
814 		    if l_cust is null then
815 		          l_cust := p_qte_header_rec.cust_account_id;
816                     end if;
817                else
818                     l_cust := p_qte_header_rec.cust_account_id;
819                end if;
820 
821 	       l_check_service_rec.product_item_id := l_inv_id;
822 	       l_check_service_rec.service_item_id := p_inventory_item_id;
823 	       l_check_service_rec.customer_id :=  l_cust;
824 	       ASO_SERVICE_CONTRACTS_INT.Is_Service_Available(
825         					P_Api_Version_Number	=> 1.0 ,
826         					P_init_msg_list	=>FND_API.G_FALSE,
827 						X_msg_Count     => lx_msg_count ,
828         					X_msg_Data	=> lx_msg_data	 ,
829         					X_Return_Status	=> lx_return_status  ,
830 						p_check_service_rec => l_check_service_rec,
831 						X_Available_YN	    => l_Available_YN
832 					       );
833 	      IF l_Available_YN = 'N' THEN
834 		IF aso_debug_pub.g_debug_flag = 'Y' THEN
835 			aso_debug_pub.add('UPDATE_QUOTE:SERVICE_not available');
836 		END IF;
837                 return false;
838             end if;
839 
840    end if;
841 
842     END IF;
843 
844        -- Top model item
845     IF orderable_items_rec.bom_item_type = 1 THEN
846        l_resp_id := FND_PROFILE.Value('RESP_ID');
847        l_resp_appl_id := FND_PROFILE.Value('RESP_APPL_ID');
848        l_ui_def_id := CZ_CF_API.UI_FOR_ITEM(
849                                p_inventory_item_id,
850                                l_master_organization_id,
851                                SYSDATE,
852                                'APPLET',
853                                FND_API.G_MISS_NUM,
854                                FND_PROFILE.Value('RESP_ID'),
855                                FND_PROFILE.Value('RESP_APPL_ID')
856                            );
857 
858        IF l_ui_def_id IS NULL THEN
859           IF aso_debug_pub.g_debug_flag = 'Y' THEN
860 		   aso_debug_pub.add('ASO_QUOTE_TMPL_PVT: Validate_Item: item does not have a configurable ui:'
861 		                      || p_inventory_item_id, 1, 'N');
862           END IF;
863 
864 
865           RETURN FALSE;
866        END IF;
867     END IF;
868 
869     INV_DECIMALS_PUB.Validate_Quantity(
870             p_inventory_item_id,
871             l_master_organization_id,
872             p_quantity,
873             l_uom_code,
874             l_output_qty,
875             l_primary_qty,
876             l_return_status
877     );
878     IF aso_debug_pub.g_debug_flag = 'Y' THEN
879     aso_debug_pub.add('ASO_QUOTE_TMPL_PVT: Validate_Item:p_quantity'|| p_quantity, 1, 'N');
880 	     aso_debug_pub.add('ASO_QUOTE_TMPL_PVT: Validate_Item:l_return_status'|| l_return_status, 1, 'N');
881          aso_debug_pub.add('ASO_QUOTE_TMPL_PVT: Validate_Item:l_uom_code'|| l_uom_code, 1, 'N');
882          aso_debug_pub.add('ASO_QUOTE_TMPL_PVT: Validate_Item:l_output_qty'|| l_output_qty, 1, 'N');
883          aso_debug_pub.add('ASO_QUOTE_TMPL_PVT: Validate_Item:l_primary_qty'|| l_primary_qty, 1, 'N');
884        END IF;
885 
886     IF l_return_status <> FND_API.G_RET_STS_SUCCESS OR p_quantity <= 0 THEN
887        IF aso_debug_pub.g_debug_flag = 'Y' THEN
888 	     aso_debug_pub.add('ASO_QUOTE_TMPL_PVT: Validate_Item: item has invalid quantity:'
889 		                   || p_inventory_item_id, 1, 'N');
890        END IF;
891 
892 
893        RETURN FALSE;
894     END IF;
895 
896 END LOOP;
897 
898 /*IF l_orderable_flag = 'N' THEN
899    IF aso_debug_pub.g_debug_flag = 'Y' THEN
900       aso_debug_pub.add('ASO_QUOTE_TMPL_PVT: Validate_Item: item not orderable:'|| p_inventory_item_id, 1, 'N');
901    END IF;
902    RETURN FALSE;
903 END IF;
904 */
905 
906 IF aso_debug_pub.g_debug_flag = 'Y' THEN
907    aso_debug_pub.add('ASO_QUOTE_TMPL_PVT: Validate_Item: *** End of API body ***', 1, 'Y');
908 END IF;
909 
910   return true;
911 end Validate_Item;
912 
913 END ASO_QUOTE_TMPL_PVT;
914