[Home] [Help]
PACKAGE BODY: APPS.IBE_ONECLK_PVT
Source
1 PACKAGE BODY ibe_oneclk_pvt AS
2 /* $Header: IBEVOCPB.pls 120.5 2006/05/16 04:56:29 knachiap ship $ */
3
4 G_PKG_NAME CONSTANT VARCHAR2(30) := 'ibe_oneclk_pvt';
5 l_true VARCHAR2(1) := FND_API.G_TRUE;
6
7 procedure Submit_Quotes(
8 errbuf OUT NOCOPY VARCHAR2,
9 retcode OUT NOCOPY NUMBER
10 ) is
11
12 l_api_name CONSTANT VARCHAR2(30) := 'Get_Settings';
13 l_api_version CONSTANT NUMBER := 1.0;
14
15 p_commit VARCHAR2(1) := FND_API.g_true;
16 p_init_msg_list VARCHAR2(1) := FND_API.g_true;
17 x_return_status VARCHAR2(1000);
18 x_msg_count NUMBER;
19 x_msg_data VARCHAR2(1000);
20 x_last_update_date DATE;
21
22 l_order_header_rec aso_quote_pub.Order_Header_Rec_Type ;
23 l_qte_header_rec aso_quote_pub.Qte_Header_Rec_Type;
24 l_payment_tbl aso_quote_pub.Payment_Tbl_Type;
25 l_payment_rec aso_quote_pub.Payment_Rec_Type;
26 lx_payment_tbl aso_quote_pub.Payment_Tbl_Type;
27
28 l_cc_trxn_rec ASO_PAYMENT_INT.CC_Trxn_Rec_Type;
29 lx_cc_trxn_out_rec ASO_PAYMENT_INT.CC_TRXN_OUT_REC_TYPE;
30
31 l_control_rec aso_quote_pub.Submit_Control_Rec_Type;
32
33 l_max_date DATE;
34 l_earliest_time DATE;
35 l_consolidation_time_n number := 60/1440; -- default to 60 minutes
36 l_consolidation_time_s varchar2(240);
37 l_auth_pmt_offline_s varchar2(240);
38 l_oneclick_id NUMBER;
39
40 my_message VARCHAR2(2000);
41 l_count_good NUMBER := 0;
42 l_count_fail NUMBER := 0;
43 l_quote_status aso_quote_statuses_vl.status_code%type;
44 l_contract_template_id NUMBER;
45 l_hold_flag VARCHAR2(1);
46
47
48 CURSOR c_quotes(c_earliest_time DATE) IS
49 SELECT h.quote_header_id,
50 h.total_quote_price,
51 h.party_id,
52 h.cust_account_id,
53 h.org_id
54 FROM aso_quote_headers h
55 WHERE
56 trunc(h.quote_expiration_date) >= trunc(sysdate) and
57 h.quote_source_code = 'IStore Oneclick' and
58 h.order_id is null and
59 h.last_update_date < c_earliest_time;
60
61 CURSOR c_settings(c_party_id NUMBER, c_acct_id NUMBER) IS
62 SELECT ord_oneclick_id
63 FROM IBE_ORD_ONECLICK
64 WHERE
65 party_id = c_party_id and
66 cust_account_id = c_acct_id;
67
68 CURSOR c_quote_status_code (quote_hdr_id number) is
69 select status_code
70 from aso_quote_headers_all a, aso_quote_statuses_vl b
71 where quote_header_id = quote_hdr_id
72 and a.quote_status_id = b.quote_status_id;
73
74 rec_quote_status_code c_quote_status_code%rowtype;
75
76 BEGIN
77
78 IF (IBE_UTIL.G_DEBUGON = l_true) THEN
79 IBE_Util.Debug('start Submit Quotes');
80 END IF;
81
82 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Starting ibe_oneclk_pvt.Submit_Quotes Concurrent Program for organization id ' || FND_PROFILE.VALUE('ASO_PRODUCT_ORGANIZATION_ID'));
83 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Starting ibe_oneclk_pvt.Submit_Quotes Concurrent Program for MO organization id ' || MO_GLOBAL.get_current_org_id());
84 SAVEPOINT Submit_Quotes_Pvt;
85 -- Standard call to check for call compatibility.
86 IF NOT FND_API.Compatible_API_Call (l_api_version,
87 1.0 ,
88 l_api_name ,
89 G_PKG_NAME )
90 THEN
91 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
92 END IF;
93 -- Initialize message list if p_init_msg_list is set to TRUE.
94 IF FND_API.to_Boolean( p_init_msg_list ) THEN
95 FND_MSG_PUB.initialize;
96 END IF;
97
98 -- Initialize API rturn status to success
99 x_return_status := FND_API.g_ret_sts_success;
100
101 FND_PROFILE.get('IBE_1CLICK_CONSOLIDATION_TIME',l_consolidation_time_s);
102 FND_FILE.PUT_LINE(FND_FILE.LOG,'profile variable IBE_1CLICK_CONSOLIDATION_TIME:' || l_consolidation_time_s);
103 -- convert to number and divide by minutes in a day to express in
104 -- terms of days or fraction thereof
105 if (l_consolidation_time_s is not null) then
106 l_consolidation_time_n := to_number(l_consolidation_time_s) / 1440;
107 end if;
108 l_earliest_time := sysdate - l_consolidation_time_n;
109 FND_FILE.PUT_LINE(FND_FILE.LOG,'Looking for quotes last updated before: ' || to_char(l_earliest_time,'DD-MON-YYYY:HH:MI:SS'));
110
111 open c_quotes(l_earliest_time);
112 loop
113 -- give each loop a fair start
114 x_return_status := FND_API.g_ret_sts_success;
115 fetch c_quotes into
116 l_qte_header_rec.quote_header_id,
117 l_qte_header_rec.payment_amount,
118 l_qte_header_rec.party_id,
119 l_qte_header_rec.cust_account_id,
120 l_qte_header_rec.org_id;
121 exit when c_quotes%NOTFOUND;
122
123 FND_FILE.PUT_LINE(FND_FILE.LOG,' ');
124 FND_FILE.PUT_LINE(FND_FILE.LOG,'##### PROCESSING QUOTE ID:' || l_qte_header_rec.quote_header_id || ' #####');
125
126
127 -- if error check email and maybe insert a row for email notification
128 -- dbms_output.put_line('OneClick Concurrent Trying to Submit...');
129 -- Whether auth payment succeeds or not try to submit the quote
130 -- bug 2426483 - set to gmiss so proper defaulting will happen in IBE_QUOTE_CHECKOUT_PVT
131 l_control_rec.BOOK_FLAG := FND_API.G_MISS_CHAR;
132 FND_FILE.PUT_LINE(FND_FILE.LOG,'calling IBE_QUOTE_CHECKOUT_PVT.submitQuote ' || to_char(sysdate,'DD-MON-YYYY:HH24:MI:SS'));
133 FND_FILE.PUT_LINE(FND_FILE.LOG,'l_control_rec.BOOK_FLAG ' || l_control_rec.BOOK_FLAG);
134
135 --Need to call Contracts expert engine before placing the order to refresh the template with latest terms
136 --if user has made any changes to the cart.
137 --This needs to be done only if the quote status is not "APPROVED"
138 IF (FND_Profile.Value('OKC_ENABLE_SALES_CONTRACTS') = 'Y' ) THEN --Only if contracts is enabled
139 l_quote_status := IBE_QUOTE_MISC_PVT.get_aso_quote_status(l_qte_header_rec.quote_header_id);
140
141 IF(upper(l_quote_status) <> 'APPROVED') THEN
142 /*mannamra: changes for MOAC: Bug 4682364 */
143 --l_contract_template_id := FND_PROFILE.VALUE('ASO_DEFAULT_CONTRACT_TEMPLATE'); old style
144 l_contract_template_id := to_number(ASO_UTILITY_PVT.GET_OU_ATTRIBUTE_VALUE(ASO_UTILITY_PVT.G_DEFAULT_CONTRACT_TEMPLATE)); --New style
145 /*mannamra: end of changes for MOAC*/
146
147 IF (l_contract_template_id is not null) THEN
148
149 OKC_XPRT_INT_GRP.get_contract_terms(
150 p_api_version => 1.0 ,
151 p_init_msg_list => FND_API.g_false ,
152 P_document_type => 'QUOTE' ,
153 P_document_id => l_qte_header_rec.quote_header_id ,
154 P_template_id => l_contract_template_id,
155 P_called_from_UI => 'N' ,
156 P_run_xprt_flag => 'Y' ,
157 x_return_status => x_return_status ,
158 x_msg_count => x_msg_count ,
159 x_msg_data => x_msg_data ) ;
160
161 IF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
162 RAISE FND_API.G_EXC_ERROR;
163 END IF;
164 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
165 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
166 END IF;
167 END IF;
168 END IF; --if quote_status not approved
169
170 END IF; -- if contracs enabled
171
172 IBE_QUOTE_CHECKOUT_PVT.submitQuote(
173 P_Api_Version_Number => 1.0,
174 P_Init_Msg_List => FND_API.G_TRUE,
175 P_commit => FND_API.G_FALSE,
176 P_quote_Header_Id => l_qte_header_rec.quote_header_id,
177
178 /* -- accept defaults for these parameters
179 ,p_last_update_date in DATE := FND_API.G_MISS_DATE
180 ,p_sharee_party_Id IN NUMBER := FND_API.G_MISS_NUM
181 ,p_sharee_cust_account_id IN NUMBER := FND_API.G_MISS_NUM
182 ,p_sharee_number IN NUMBER := FND_API.G_MISS_NUM
183 ,p_customer_comments IN VARCHAR2 := FND_API.G_MISS_CHAR
184 ,p_reason_code IN VARCHAR2 := FND_API.G_MISS_CHAR
185 ,p_salesrep_email_id IN VARCHAR2 := FND_API.G_MISS_CHAR
186 */
187 P_submit_Control_Rec => l_control_rec,
188 -- 9/17/02: added to not validate the user
189 p_validate_user => FND_API.G_FALSE,
190
191 x_order_header_rec => l_order_header_rec,
192 x_Return_Status => x_return_status ,
193 x_Msg_Count => x_msg_count ,
194 x_Msg_Data => x_msg_data,
195 x_hold_flag => l_hold_flag );
196
197 FND_FILE.PUT_LINE(FND_FILE.LOG,'back from IBE_QUOTE_CHECKOUT_PVT.submitQuote ' || to_char(sysdate,'DD-MON-YYYY:HH24:MI:SS'));
198
199 if x_return_status <> FND_API.g_ret_sts_success then
200 l_count_fail := l_count_fail + 1;
201 FND_MESSAGE.SET_NAME('IBE','IBE_EXPR_PLSQL_API_ERROR');
202 FND_MESSAGE.SET_TOKEN ( '0' , 'CONCURRENT PROGRAM - IBE_QUOTE_CHECKOUT_PVT.submitQuote' );
203 FND_MESSAGE.SET_TOKEN ( '1' , x_return_status );
204 FND_MSG_PUB.Add;
205
206 if x_return_status = FND_API.G_RET_STS_ERROR then
207 null;
208 elsif x_return_status = FND_API.G_RET_STS_UNEXP_ERROR then
209 null;
210 end if;
211
212 FND_FILE.PUT_LINE(FND_FILE.LOG,'Unsuccessful call to IBE_QUOTE_CHECKOUT_PVT.submitQuote');
213 FND_FILE.PUT_LINE(FND_FILE.LOG,'Messages from FND_MSG_PUB....(if any):');
214 FND_FILE.PUT_LINE(FND_FILE.LOG, ' ' || fnd_msg_pub.get(p_encoded => FND_API.g_false));
215 FND_FILE.PUT_LINE(FND_FILE.LOG, ' IBE_QUOTE_CHECKOUT_PVT.submitQuote returned ' || x_msg_count || ' messages.');
216 if x_msg_count = 1 then
217 FND_FILE.PUT_LINE(FND_FILE.LOG, ' ' || x_msg_data);
218 else
219
220 for i in 1..x_msg_count loop
221 FND_FILE.PUT_LINE(FND_FILE.LOG, ' msg ' || i || ': ' || fnd_msg_pub.get(p_encoded => FND_API.g_false));
222 end loop;
223 end if;
224
225 else
226 FND_FILE.PUT_LINE(FND_FILE.LOG,'SUCCESSFUL SUBMISSION - order number: ' || l_order_header_rec.order_number || ' / order status: ' || l_order_header_rec.status);
227 l_count_good := l_count_good + 1;
228 FND_FILE.PUT_LINE(FND_FILE.LOG,'Hold_flag is '||l_hold_flag);
229 end if;
230
231 FND_FILE.PUT_LINE(FND_FILE.LOG,'##### DONE PROCESSING QUOTE ID:' || l_qte_header_rec.quote_header_id || ' #####');
232 IF FND_API.To_Boolean( p_commit ) THEN
233 COMMIT WORK;
234 END IF;
235
236 end loop L_BIG_LOOP;
237 close c_quotes;
238
239
240 FND_FILE.PUT_LINE(FND_FILE.LOG, '**** Finished running ibe_oneclk_pvt.Submit_Quotes Concurrent Program for organization id ' || FND_PROFILE.VALUE('ASO_PRODUCT_ORGANIZATION_ID') || ' ****');
241 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Successful submissions: ' || to_char(l_count_good) || ' Failed to submit: ' || to_char(l_count_fail));
242
243 -- for the other log file
244 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '**** Ran ibe_oneclk_pvt.Submit_Quotes Concurrent Program for organization id ' || FND_PROFILE.VALUE('ASO_PRODUCT_ORGANIZATION_ID') || ' ****');
245 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Successful submissions: ' || to_char(l_count_good) || ' Failed to submit: ' || to_char(l_count_fail));
246
247 IF FND_API.To_Boolean( p_commit ) THEN
248 COMMIT WORK;
249 END IF;
250 FND_MSG_PUB.Count_And_Get
251 (p_encoded => FND_API.G_FALSE,
252 p_count => x_msg_count,
253 p_data => x_msg_data);
254
255 IF (IBE_UTIL.G_DEBUGON = l_true) THEN
256 IBE_Util.Debug('Exit submit quotes');
257 END IF;
258
259 EXCEPTION
260 WHEN FND_API.G_EXC_ERROR THEN
261 ROLLBACK TO Submit_Quotes_Pvt;
262 x_return_status := FND_API.G_RET_STS_ERROR ;
263 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Expected Error exception. Successful submissions: ' || to_char(l_count_good) || ' Failed to submit: ' || to_char(l_count_fail));
264 errbuf := fnd_message.get;
265 retcode := 2;
266
267 FND_MSG_PUB.Count_And_Get(
268 p_encoded => FND_API.G_FALSE,
269 p_count => x_msg_count,
270 p_data => x_msg_data );
271
272 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
273 ROLLBACK TO Submit_Quotes_Pvt;
274 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
275 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Unexpected Error exception. Successful submissions: ' || to_char(l_count_good) || ' Failed to submit: ' || to_char(l_count_fail));
276 errbuf := fnd_message.get;
277 retcode := 2;
278
279 FND_MSG_PUB.Count_And_Get(
280 p_encoded => FND_API.G_FALSE,
281 p_count => x_msg_count,
282 p_data => x_msg_data );
283
284 WHEN OTHERS THEN
285 ROLLBACK TO Submit_Quotes_Pvt;
286 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
287
288 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Other Error exception. Successful submissions: ' || to_char(l_count_good) || ' Failed to submit: ' || to_char(l_count_fail));
289
290 errbuf := fnd_message.get;
291 retcode := 2;
292 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
293 THEN
294 FND_MSG_PUB.Add_Exc_Msg(
295 G_PKG_NAME,
296 l_api_name);
297 END IF;
298
299 FND_MSG_PUB.Count_And_Get(
300 p_encoded => FND_API.G_FALSE,
301 p_count => x_msg_count,
302 p_data => x_msg_data);
303
304 end Submit_Quotes;
305
306 end ibe_oneclk_pvt;