[Home] [Help]
PACKAGE BODY: APPS.OZF_OFFER_PVT
Source
1 Package BODY OZF_Offer_Pvt AS
2 /* $Header: ozfvofrb.pls 120.141.12020000.7 2013/05/31 00:56:32 ninarasi ship $ */
3 -------------------------------
4 -- PACKAGE
5 -- OZF_Offer_PVT
6 --
7 -- PURPOSE
8 -- Use QP_Modifiers_PUB package to create offers.
9 --
10 -- PROCEDURES
11 -- PUBLIC -- Process_modifiers
12 -- PRIVATE -- Process_offers
13 -- HISTORY
14 -- 20-MAY-2000 Satish Karumuri Created.
15 -- 10-SEP-2001 julou modified
16 -- makd changes to process_trade_deal procedure including:
17 -- off_invoice and billback operands are not mandantory.
18 -- input is broken into 4 small tbls to be processed seperately.
19 -- added check conditions for operands and limits.
20 -- 19-OCT-2001 julou
21 -- added formula_id
22 -- made customer editable for lumpsum and trade deal offer
23 -- added validation for start and end date
24 -- 26-OCT-2001 julou
25 -- added budget id for trade deal detail screen(update mode)
26 -- added profile option values for advanced options
27 -- 30-OCT-2001 julou
28 -- added validation for max_amount_per_rule and max_qty_per_rule
29 -- 03-DEC-2001 julou
30 -- changed default incompatibility group to null for trade deal
31 -- 14-DEC-2001 julou
32 -- added check for default profile values
33 -- populate list_header_id for order value discount
34 -- 15-MAY-2002 added break_type for promotional goods offer
35 -- 18-Jun-2002 rssharma
36 -- Added new Qualifier for trade Deal Offers
37 -- To accomodate this added new ELSIF condition in offer_qualifiers procedure.
38 -- THis conditon corresponds to CUSTOMER_BILL_TO qualifier_type
39 -- 19-Aug-2002 RSSHARMA Added Functions for getting Budget Related Columns in Overview
40 -- 20-Aug-2002 RSSHARMA Added validation to not create duplicate budget requests and
41 -- Duplicate Offer Usage.Added two private functions get_campaign_count
42 -- and get_budget_source_count for this
43 -- 29-Aug-2002 RSSHARMA Added Conditional passing of offer amount limit to QP.
44 -- Pass limit only if the Profile for Recalculated Committed is Off
45 -- OR the profile is on and the Flag for passing limit is on.
46 -- ALso Corrected Bug due to which the limit for Offer Amount will
47 -- never be deleted ..
48 -- 24-Sep-2002 RSSHARMA Fixed bug in VOlume Offers where the accrual flag is not
49 -- updated from if the INcentive is changed from Accrual to Off INvoice
50 -- FOr Off INvoice offer Explicitly setting accrual flag to N.
51 -- 23-Oct-2002 RSSHARMA Made Committed=Max independent of RECAL profile
52 -- 24-OCT-2002 julou added recalculate committed related changes to activate_offer,
53 -- activate_offer_over, validate_offer API
54 -- 28-Oct-2002 RSSHARMA CHanged Grouping No from 10 to -1 for Customer and Dates
55 -- when a qualifier is created
56 -- 28-Oct-2002 RSSHARMA Changed code to handle Territory as Qualifier Type
57 -- 28-OCT-2002 julou modified process_ozf_offers so that IEB is not update when offer
58 -- is in PENDING_ACTIVE. Changed the order of updating and posting
59 -- LUMPSUM/SCAN_DATA
60 -- 01-NOV-2002 julou pass list_header_id to qualifiers tbl to fix copy API not copying
61 -- order_value_from and order_value_to.
62 -- 15-Nov-2002 RSSHARNA Added Flex Fields to QP_List_headers
63 -- 26-Nov-2002 RSSHARMA Added Flex Field to qp_list_lines
64 -- 12-DEC-2002 julou 1. parent as budget source update issue and creating budget request
65 -- 2. activation issue with LUMPSUM and SCAN_DATA offers
66 -- moved update after posting offers
67 -- 26-DEC-2002 julou enhancement 2465253: added profile value for override flag.
68 -- 06-Jan-2003 rssharma Fixed issue where status code is set to null
69 -- if the user status id is missing
70 -- 09-JAN-2003 julou fixed accrual_flag for multi-tier Accrual offers
71 -- 30-JAN-2003 julou changed process_qp_list_headers. if offer is updated from
72 -- PROGRAM(offer_operation is null) populated active_flag as whatever parsed in.
73 -- 03-Feb-2003 RSSHARMA Added Function discount_lines_exist to check if active discount rules exist for an offer
74 -- this function is required by budgets team
75 -- 06-Feb-2003 RSSHARMA Fixed Bug # 2783888 .Added code for receiving Volume Offer Lines
76 -- with Offer type = 'VOLUME_OFFER' instead of the Volume Offer Type.
77 -- If the Offer type is 'VOLUME_OFFER' then hit another query to get the
78 -- Volume Offer type and then call process_regular_discounts with this
79 -- volume Offer type as Offer Type.
80 -- This won't affect any of the existing Offer Calls as we already are
81 -- retrieving this Volume Offer Type and Passing it in the API call
82 -- 19-FEB-2003 julou bug 2806139 - correct process_qp_list_header.
83 -- only make offer active in qp when all approval/validation passed.
84 -- 26-FEB-2003 julou bug 2821174 - make IEB updatable to lower value
85 -- 13-MAR-2003 julou bug 2844095 - update ozf_offers.qualifier_deleted='Y' if qualifier is deleted
86 -- 01-Apr-2003 RSSHARMA fixed bug # 2778138. Added Customer SHip To to Offer Qualifiers
87 -- 15-Apr-2003 RSSHARMA Added Flex Field Code
88 -- 22-APR-2003 julou bug 2916480 - for custom setup 101 and 108, l_budget_required is null.
89 -- added check for l_budget_required and treat it as 'N' if NULL, in process_modifiers
90 -- 30-APR-2003 RSSHARMA Added Qualifiers Flex Fields
91 -- 04-JUN-2003 julou bug 2986459 - modified process_ozf_offer.
92 -- populate IEB from cue card if offer is ACTIVE and IEB is null
93 -- Tue Jun 17 2003:2/47 PM RSSHARMA Changed procedure offer_dates. Create the Order and Ship
94 -- Dates with different Group Numbers
95 -- Tue Jul 15 2003:3/35 PM RSSHARMA Added AMOUNT as new Discount Type for Order Value Offers
96 -- Wed Nov 26 2003:3/0 PM rssharma Made process_qp_list_lines public and added an out variable
97 -- Mon Dec 01 2003:7/33 PM RSSHARMA Changed process_regular_discounts to allow creating inactive discount rules.
98 -- Tue Dec 02 2003:1/51 PM RSSHARMA Added Creating inactive discount rules for regular, Order Value , Promotional Goods Offers
99 -- And Skip Validation for minimum 1 discount line for an offer to become active for Soft Fund
100 -- with Custom Setup Id = 110
101 -- 15-JAN-2004 julou Bug 3376179 - Added cusor to retrieve offer_id in activate_offer_over.
102 -- Budget validation does not parse in offer_id, only qp_list_header_id
103 -- Thu Jan 15 2004:7/25 PM RSSHARMA to fix bug 3352620 , added function get_qualifier_name
104 -- Thu Feb 12 2004:6/17 PM RSSHARMA Fixed bug # 3429719. Make Start Date Required for Net Accrual offers
105 -- Fri Feb 20 2004:4/45 PM RSSHARMA Dont create or update qualifiers for Net Accrual Lumpsum and Scan Data Offers
106 -- when qualifier is entered in header
107 -- Wed Mar 10 2004:11/23 AM RSSHARMA Raise business event on Offer activation
108 -- Thu Apr 08 2004:5/27 PM RSSHARMA Fixed bug #.3560980. Start date and end Date were saved with a timestamp
109 -- if the start date and end date fell in April to November (daylight savings period). Pricing engine
110 -- does not pick up offers if time stamp is specified so these offers did not get applied in OM
111 -- SO truncate the start date and end date of the offer so that it is picked up by Pricing engine.
112 -- Tue May 25 2004 RIMEHROT bug fix 3629490. Check if qualifier exists before deleting.
113 -- Wed Jun 30 2004:3/23 PM RSSHARMA Fixed bug # 3735380.Correct TotalForecastAmount Calculation for ScanData Offer
114 -- Tue Aug 31 2004:10/48 AM RSSHARMA Fixed bug # 3851487. Modifier Level Code for terms Upgrade Discount Type in Order Value
115 -- Offers was hard coded to LINE and the Pricing Phase Id was hardcoded to LIST LINE ADJUSMENT. Changed code to remove
116 -- hardcoding and accept the Values entered in the UI
117 -- DEC-03-2004 julou bug 3999358: get error inactivating discount line.
118 -- Occurs if offer start date and inactivating date is the same day.
119 -- Solution: If start_date is not null take the greater of start_date and sysdate
120 -- as discount line end date. If end_date is not null take the smaller of
121 -- end_date and sysdate. Otherwise use sysdate.
122 --Tue May 03 2005:2/38 PM RSSHARMA Support creation of Sales method QUalifier from Create Offer Screen.
123 -- Fixed bug # 4354567. CHanged signature of process_header_tiers. Added additional out parameter
124 -- to pass back modifier lines created in the transaction.
125 -- Tue Jun 14 2005:7/34 PM RSSHARMA Added functions get_offer_discount_line_id and get_formula_name
126 -- Fri Jun 24 2005:7/46 PM RSSHARMA Added method vo_qualifier. If offer_type is Volume Offer use VO_Qualifier
127 -- to create and update Qualifiers from process_modifiers procedure
128 -- Thu Jul 07 2005:7/18 PM RSSHARMA Volume Offer Activation Changes. Added procedures push_discount_rules_to_qp,
129 -- relate_qp_ozf_for_vo , push_data_to_qp_and_relate.
130 -- Added new procedure process_offer_activation. this procedure will be one common procedure called during offer activation.
131 -- Currently this procedure pushes ozf data to qp during offer activation
132 -- Thu Aug 19 1999:6/50 AM RSSHARMA Added process to relate ozf and qp discounts and products. Also changed signature of create_offer_tiers
133 -- Tue Sep 27 2005:7/30 PM RSSHARMA Pass end date properly for end dating Discount lines using adjustments.
134 -- issues with trade deal remain. Only one line is end dated
135 -- Wed Sep 28 2005:12/18 PM RSSHARMA Push Accum attribute47 to qp during volume Offer activation.
136 -- DOnt push discount rules to qp if qp_list_lines already exist.
137 -- Wed Sep 28 2005:6/2 PM RSSHARMA During Volume Offer Activation push formula into proper column(price_by_formula_id) in qp_list_lines
138 -- Thu Sep 29 2005:1/46 PM RSSHARMA Corrected Accum Attribute to PRICING_ATTRIBUTE19 from PRICING_ATTRIBUTE47
139 -- Sat Oct 01 2005:5/40 PM RSSHARMA Corrected Qualifier Attribute used for creating sales method Qualifier
140 -- Wed Oct 12 2005:11/47 AM RSSHARMA Added new method debug_message to add debug messages to fnd only if the profile FND: Message Level Threshold level is high.
141 -- Create a pbh line, with same tier but "0" discounts for volume offer products with apply_discount flag set to "NO"
142 -- in push_discount_rules_to_qp procedure
143 -- Thu Oct 13 2005:7/21 PM RSSHARMA cleaned up MOAC code
144 -- Thu Oct 20 2005:4/14 PM RSSHARMA Added Following validations.
145 -- If The Security profile is off, in which case local(operating unit specific offers cannot be created), clear the org_id and set the global_flag to Y, for the data sent to QP
146 -- while the org_id is sent to ozf_offers
147 -- If the Offer is Lumpsum or scandata then , raise an exception if the org_id is not passed in since scandata and lumpsum offers always are org specific
148 -- Fri Oct 21 2005:6/45 PM RSSHARMA r12 changes to function discount_lines_exist
149 -- Changed function to query ozf_offer_discount_lines and ozf_offer_discount_products
150 -- if offer type is VOLUME_OFFER
151 -- Mon Oct 31 2005:3/1 PM RSSHARMA Fixed bug # 4706367. Raise Error for Lumpsum and scandata only if it is null or g_miss in create mode
152 -- and null indicated by (g_miss) in update mode
153 -- Mon Nov 14 2005:4/45 PM Fixed bug # 4625922. Due to issues in process_regular_discounts, the user was not able to perform any database operations
154 -- in the Offer Line Details page. the error occured due to debug mesages, printing data which did not exist
155 -- Thu Mar 30 2006:3/12 PM RSSHAMA new Adjustment changes to process_regular_discounts and process_trade_deal
156 -- Mon Apr 03 2006:1/57 PM RSSHARMA Pass start date active and end date active to MUlti-tier PBH lines.
157 -- Mon Apr 03 2006:3/8 PM RSSHARMA Fix passing start date and end date while updating multi-tier lines.
158 -- Wed Apr 05 2006:2/18 PM RSSHARMA Fixed bug # 5142859.If the passed in currency is null create budget request with default currency.
159 -- Wed Apr 05 2006:2/52 PM RSSHARMA Fixed bug # 5142859. Added currency required for Lumpsum and scandata offers validation
160 -- Mon May 22 2006:2/30 PM RSSHARMA Fixed bug # 5227285. During update check against the frozen date_qualifier_profile_value to store dates in Qualifiers
161 -- or to store the dates in Header.
162 -- Tue May 23 2006:4/55 PM RSSHARMA Fixed bug # 5212053. Do not allow a Volume Offer to go active if one of the discount tables is empty.
163 -- Tue May 23 2006:6/3 PM RSSHARMA Added condition to above that there must be atleast one non-excluded item in each discount table to make it active
164 -- Thu Jul 06 2006:11/23 AM RSSHARMA Fixed bug # 5332406. Changed process_header_tiers and push_discount_rules_to_qp_and_Relate for QP fix on continuous tiers
165 -- Fri Jul 06 2006:5/19 PM RSSHARMA Fixed update issues on multi-tier lines from the UI
166 -- Fri Apr 13 2007: nirprasa fix for bug 5969719
167 -- Mon Jul 09 2007: gdeepika fix for bug 5675554.Removed hardcoding in getPricingPhase(),pricing_group_sequence,product_precedence.
168 -- Thu Nov 29 2007: nirprasa fix for bug 6416762
169 -- Mon Dec 24 2007: nirprasa R12.1 SD Enhancement
170 -- Wed Feb 13 2008: kdass fixed bug 6816780 - For SD Offer, defaulted ask_for_flag = N, removed start_date
171 -- for customers, truncated start and end dates for products
172 -- Wed Feb 13 2008: nirprasa fixed bug 6813556
173 -- Tue Fev 19 2008: nirprasa Added SDR validations: do not create offer header if there are no vendor approved lines.
174 -- Do not create offer if OZF_SD_DEFAULT_BUDGET profile is not set.
175 -- Tue Apr 01 2008: nirprasa Added amount null check before calling qp_limits_pub.process_limits
176 -- Tue Apr 15 2008: nirprasa fixed bug 6968932
177 -- Wed Apr 16 2008: nirprasa fixed bug 6974091
178 -- Wed Apr 30 2008: nirprasa fixed bug 7004273
179 -- Tue Aug 12 2008: nirprasa fixed bug 7321745
180 -- Tue Aug 12 2008: nirprasa fixed bug 7321732
181 -- Tue Aug 22 2008: nirprasa fixed bug 7340864
182 -- Tue Aug 22 2008: nirprasa fixed bug 7584161 and 7580884
183 -- Tue Jun 02 2009: nepanda fix for bug 8507709 : vol offer - updating lines in qp from 'on-hold' - 'active'
184 -- Mon Aug 03 2009: nepanda fix for bug # 8717146. Changing qualifier date mask to 24 Hr Format
185 -- Thu Dec 3 2009 : nepanda : fix for bug 9149865 error when using the word 'and' for offer adjustment name
186 -- Tue Dec 15 2009: nepanda : fix for Bug 9204974 - fp:9151787: unable to cancel draft offrs when a bdgt reqst has rejected
187 -- Wed Jan 13 2010: nepanda fix for forwardport of bug # 8580281 accrul offer/budget allows you to to enter a discount rules without level/name
188 -- 07/05/2010 kdass FP bug 9470625 - MULTIPLE BATCH LINES FOR THE SAME UTILIZATION ENTRY
189 -- 8/24/2010 nepanda Fix for bug 10047215 - bobfwd: fp12.1.4 9941137: maximum quantity entered in special price request is
190 -- OCT 24 2010 nirprasa FP 9115198 - ORACLE.APPS.OZF.OFFER.OFFERAPPROVAL IS NOT RAISED WHEN OFFER BECOME
191 -- OCT/27/2010 nirprasa ER 10216374/9447673 SSD-IDSM ER - IDSM AND ACCRUAL CHANGES
192 -- DEC/17/2010 nirprasa ER 10216374/9447673 SSD-IDSM ER - change QP seeded QUALIFIER_ATTRIBUTE32
193 -- JAN/17/2011 BKUNJAN bug 10648426 -BOBFWD: FP12.1.4 10302743 -CLAIM DOES NOT GET CREATED BY CHANGE OF BUDGET IN PRO
194 -- FEB/14/2011 nirprasa bug 11713014 FP 11694790 PRODUCT ATTRIBUTE ON MODIFIER/OFFER MISSING IN OZFACCRUALMAIN.JSP
195 -- Mon Mar 21 2011: kdass fix for Bug 11844921 - USING INDIRECT + CUSTOMER MARKET ELIGIBILITY GROUPPING NUMBER IS 10 20
196 -- Wed Jun 21 2011 ninarasi Fix for Bug 12632240 - EXISTING CUSTOM MARKET ELIGIBILITY GETS DELETED WHEN DOING ANY UPDATE TO SSD
197 -- Wed Jul 4 2011 ninarasi Fix for Bug 12711496 - OFFER: GROUPING NUMBER CHANGES BACK FROM -1 TO -200/-100 WHEN OFFER IS UPDATED
198 -- Tue Sep 13 2011 BKUNJAN ER 12977732 - ER:SIEBEL TPM UPGRADE TO CHRM RELEASE 12.1.3+ : OFFER INTEGRATION
199 -- Sat Oct 08 2011 BKUNJAN fix for Bug 12649016 -FP 11802590 12.1.3+ - UNABLE TO CREATE LUMPSUM OFFER USING API OZF_OFFER_PUB
200 -- 24-OCT-2011 APYADAV fix for Bug 13112388 UNABLE TO NULL THE FIELD MAXIMUM QUANTITY( PER DISCOUNT RULE) ON THE OFFERS IN C
201 -- 1/4/2012 nepanda Fix for Bug 12950967 - fp:10173582-11510-12.1:max comm amt in offr details is deleted duriing offr appr
202 -- 2/23/2012 hekkiral -- Added new function validate_vset_values for fixing bug 13738807
203 -- 4/11/2012 nepanda -- Fix for Bug 13934120 - r.tst122.xb23:getting error while updating accrual parameter details in accrual
204 -- 7/09/2012 BKUNJAN -- Fix for Bug 14158729 - PROMOTIONS: NOT ABLE TO BACK DATE OFFERS (PROMOTIONS)
205 -- 30-JAN-2013 apyadav Bug 14138664 - GSIAV: COPY OFFER DO NOT HAVE FLEXIBILITY TO CHOOSE THE CURRENCY
206 -- 10/26/2012 nirprasa Add debug messages using procedure OZF_DEBUG_PVT.DEBUG_MO and revert all changes for bug 14500493
207 -- 27-Jun-2012 amitamku Modified procedure populateSDQualifiers for bug 13981597
208 -- 30-May-2013 ninarasi 16870803 - R.TST1222:NOT ABLE TO ADD MORE THAN ONE PRODUCT TO DISCOUNT RULE
209 -----------------------------------------------------------------------------------------------------------------------
210
211 g_pkg_name CONSTANT VARCHAR2(30):= 'OZF_Offer_Pvt';
212 g_file_name CONSTANT VARCHAR2(15) := 'ozfvofrb.pls';
213 g_sd_offer VARCHAR2(15) := 'N';
214
215 OZF_DEBUG_HIGH_ON boolean := FND_MSG_PUB.CHECK_MSG_LEVEL(FND_MSG_PUB.G_MSG_LVL_DEBUG_HIGH);
216 OZF_DEBUG_LOW_ON boolean := FND_MSG_PUB.CHECK_MSG_LEVEL(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW);
217 OZF_DEBUG_MEDIUM_ON boolean := FND_MSG_PUB.CHECK_MSG_LEVEL(FND_MSG_PUB.G_MSG_LVL_DEBUG_MEDIUM);
218
219
220 PROCEDURE debug_message(p_message IN VARCHAR2)
221 IS
222 BEGIN
223
224 IF (OZF_DEBUG_HIGH_ON) THEN
225 ozf_utility_pvt.debug_message(p_message);
226
227 END IF;
228 END debug_message;
229
230
231 FUNCTION validate_vset_values (p_value_set_id IN NUMBER, p_data_value IN VARCHAR2)
232 RETURN VARCHAR2
233 ----------------------------------------------------------------------------------------
234 -- Name : validate_vset_values
235 -- Pre-reqs : None
236 -- Purpose : This Function is used validate data from value set name
237 -- Note :
238 -- Modifications:
239 --
240 ------------------------------------------------------------------------------------------
241 IS
242 l_vset fnd_vset.valueset_r;
243 l_fmt fnd_vset.valueset_dr;
244 l_found BOOLEAN;
245 l_row NUMBER;
246 l_value fnd_vset.value_dr;
247 BEGIN
248 fnd_vset.get_valueset (p_value_set_id, l_vset, l_fmt);
249 fnd_vset.get_value_init (l_vset, TRUE);
250 fnd_vset.get_value (l_vset, l_row, l_found, l_value);
251
252 WHILE (l_found)
253 LOOP
254 IF (l_value.ID = p_data_value)
255 THEN
256 fnd_vset.get_value_end (l_vset);
257 RETURN 'TRUE';
258 END IF;
259
260 fnd_vset.get_value (l_vset, l_row, l_found, l_value);
261 END LOOP;
262
263 fnd_vset.get_value_end (l_vset);
264 RETURN 'FALSE';
265 END validate_vset_values;
266
267 /*
268 Common procedure called during offer activation
269 */
270
271 PROCEDURE process_offer_activation
272 (
273 p_api_version_number IN NUMBER
274 , p_init_msg_list IN VARCHAR2
275 , p_commit IN VARCHAR2
276 , p_validation_level IN VARCHAR2 := FND_API.G_VALID_LEVEL_FULL
277 , x_return_status OUT NOCOPY VARCHAR2
278 , x_msg_count OUT NOCOPY NUMBER
279 , x_msg_data OUT NOCOPY VARCHAR2
280 , p_offer_rec IN Modifier_LIST_Rec_Type
281 )
282 IS
283 l_api_name CONSTANT VARCHAR2(30) := 'process_offer_activation';
284 l_errorLocation NUMBER;
285 BEGIN
286 x_return_status := FND_API.G_RET_STS_SUCCESS;
287 IF p_offer_rec.offer_type = 'VOLUME_OFFER' THEN
288 push_discount_rules_to_qp
289 (
290 p_init_msg_list => FND_API.G_FALSE
291 ,p_api_version => 1.0
292 ,p_commit => FND_API.G_FALSE
293 , x_return_status => x_return_status
294 , x_msg_count => x_msg_count
295 , x_msg_data => x_msg_data
296 , p_qp_list_header_id => p_offer_rec.qp_list_header_id
297 , x_error_location => l_errorLocation
298 );
299 /* push_data_to_qp_and_relate
300 (
301 p_api_version_number => p_api_version_number
302 , p_init_msg_list => p_init_msg_list
303 , p_commit => p_commit
304 , p_validation_level => p_validation_level
305
306 , x_return_status => x_return_status
307 , x_msg_count => x_msg_count
308 , x_msg_data => x_msg_data
309 , p_qp_list_header_id => p_offer_rec.qp_list_header_id
310 );
311 */
312 IF x_return_status = FND_API.G_RET_STS_ERROR THEN
313 RAISE FND_API.G_EXC_ERROR;
314 ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
315 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
316 END IF;
317
318 END IF;
319
320 debug_message('Private API: '|| l_api_name || ' End');
321
322
323 END process_offer_activation;
324
325 FUNCTION get_offer_discount_id(p_offer_id IN NUMBER) RETURN VARCHAR2
326 IS
327 l_offer_discount_line_id NUMBER := -1;
328 BEGIN
329
330 SELECT min(offer_discount_line_id) INTO l_offer_discount_line_id
331 FROM ozf_offer_discount_lines
332 WHERE offer_id = p_offer_id AND tier_type ='PBH';
333
334 IF(l_offer_discount_line_id IS NULL) THEN
335 RETURN -1;
336 ELSE
337 RETURN l_offer_discount_line_id ;
338 END IF;
339
340 END ;
341
342
343 FUNCTION get_formula_name(p_formula_id IN NUMBER) RETURN VARCHAR2
344 IS
345 l_formula_name QP_PRICE_FORMULAS_TL.NAME%TYPE;
346 BEGIN
347 SELECT name INTO l_formula_name FROM qp_price_formulas_tl WHERE price_formula_id = p_formula_id AND language = userenv('lang');
348 return l_formula_name;
349 END get_formula_name;
350
351 --FUNCTION get_vo_tier_id(p_offer_id)
352
353 FUNCTION get_qualifier_name(p_qualifier_type IN VARCHAR2 , p_qualifier_id IN NUMBER) RETURN VARCHAR2
354 IS
355 cursor c_qual_name(p_qualifier_ctx VARCHAR2,p_qualifier_attr VARCHAR2,p_qualifier_id NUMBER)
356 IS
357 SELECT QP_QP_Form_Pricing_Attr.Get_Attribute_Value('QP_ATTR_DEFNS_QUALIFIER',p_qualifier_ctx, p_qualifier_attr, p_qualifier_id)
358 from dual;
359 l_cust_name varchar2(240);
360 l_qualifier_ctx VARCHAR2 (240);
361 l_qualifier_attr VARCHAR2(240);
362 BEGIN
363 IF p_qualifier_type = 'CUSTOMER' THEN
364 l_qualifier_ctx := 'CUSTOMER';
365 l_qualifier_attr := 'QUALIFIER_ATTRIBUTE2';
366 ELSIF p_qualifier_type = 'LIST' THEN
367 l_qualifier_ctx := 'CUSTOMER_GROUP';
368 l_qualifier_attr := 'QUALIFIER_ATTRIBUTE1';
369 ELSIF p_qualifier_type = 'SEGMENT' THEN
370 l_qualifier_ctx := 'CUSTOMER_GROUP';
371 l_qualifier_attr := 'QUALIFIER_ATTRIBUTE2';
372 ELSIF p_qualifier_type = 'BUYER' THEN
373 l_qualifier_ctx := 'CUSTOMER_GROUP';
374 l_qualifier_attr := 'QUALIFIER_ATTRIBUTE3';
375 ELSIF p_qualifier_type = 'TERRITORY' THEN
376 l_qualifier_ctx := 'TERRITORY';
377 l_qualifier_attr := 'QUALIFIER_ATTRIBUTE1';
378 ELSIF p_qualifier_type = 'CUSTOMER_BILL_TO' THEN
379 l_qualifier_ctx := 'CUSTOMER';
380 l_qualifier_attr := 'QUALIFIER_ATTRIBUTE14';
381 ELSIF p_qualifier_type = 'SHIP_TO' THEN
382 l_qualifier_ctx := 'CUSTOMER';
383 l_qualifier_attr := 'QUALIFIER_ATTRIBUTE11';
384 END IF;
385
386 open c_qual_name(l_qualifier_ctx,l_qualifier_attr,p_qualifier_id);
387 fetch c_qual_name into l_cust_name;
388 close c_qual_name;
389 RETURN l_cust_name;
390 END;
391
392
393 FUNCTION get_commited_amount(p_list_header_id IN NUMBER)
394 RETURN NUMBER
395 IS
396 p_committed_amount NUMBER := 0;
397
398 CURSOR curr_committed_amount(list_header_id NUMBER) IS
399 SELECT SUM(DECODE(recal_flag, 'N',committed_amt)) committed_amount
400 FROM ozf_object_checkbook_v
401 WHERE object_id = list_header_id
402 AND object_type = 'OFFR';
403
404 BEGIN
405 OPEN curr_committed_amount( p_list_header_id ) ;
406 FETCH curr_committed_amount INTO p_committed_amount ;
407 CLOSE curr_committed_amount ;
408 RETURN p_committed_amount ;
409
410 EXCEPTION
411 WHEN OTHERS THEN
412 RETURN 0;
413 END;
414
415
416 FUNCTION get_recal_commited_amount(p_list_header_id IN NUMBER)
417 RETURN NUMBER
418 IS
419 p_committed_amount NUMBER := 0;
420
421 CURSOR curr_committed_amount(list_header_id NUMBER) IS
422 SELECT SUM(committed_amt) recal_committed_amount
423 FROM ozf_object_checkbook_v
424 WHERE object_id = list_header_id
425 AND object_type = 'OFFR';
426
427 BEGIN
428 OPEN curr_committed_amount( p_list_header_id ) ;
429 FETCH curr_committed_amount INTO p_committed_amount ;
430 CLOSE curr_committed_amount ;
431 RETURN p_committed_amount ;
432
433 EXCEPTION
434 WHEN OTHERS THEN
435 RETURN 0;
436 END;
437
438 FUNCTION get_earned_amount(p_list_header_id IN NUMBER)
439 RETURN NUMBER
440 IS
441 p_earned_amount NUMBER := 0;
442
443 CURSOR curr_earned_amount(list_header_id NUMBER) IS
444 SELECT NVL(SUM(NVL(utilized_amt,0)),0) utlized_amount
445 FROM ozf_object_checkbook_v
446 WHERE object_id = list_header_id
447 AND object_type = 'OFFR';
448
449 BEGIN
450 OPEN curr_earned_amount( p_list_header_id ) ;
451 FETCH curr_earned_amount INTO p_earned_amount ;
452 CLOSE curr_earned_amount ;
453 RETURN p_earned_amount ;
454
455 EXCEPTION
456 WHEN OTHERS THEN
457 RETURN 0;
458 END;
459
460 FUNCTION get_paid_amount(p_list_header_id IN NUMBER)
461 RETURN NUMBER
462 IS
463 p_paid_amount NUMBER := 0;
464
465 CURSOR curr_paid_amount(list_header_id NUMBER) IS
466 SELECT NVL(SUM(NVL(paid_amt,0)),0) paid_amount FROM ozf_object_checkbook_v
467 WHERE object_id = list_header_id
468 AND object_type = 'OFFR';
469
470 BEGIN
471 OPEN curr_paid_amount( p_list_header_id ) ;
472 FETCH curr_paid_amount INTO p_paid_amount ;
473 CLOSE curr_paid_amount ;
474 RETURN p_paid_amount ;
475
476 EXCEPTION
477 WHEN OTHERS THEN
478 RETURN 0;
479 END;
480
481
482 FUNCTION get_list_line_no RETURN NUMBER IS
483 x number;
484 CURSOR cur_get_list_line_no IS
485 SELECT ams_qp_list_line_no_s.nextval from dual;
486 BEGIN
487 OPEN cur_get_list_line_no;
488 FETCH cur_get_list_line_no INTO x;
489 CLOSE cur_get_list_line_no;
490 RETURN x;
491
492 EXCEPTION
493 WHEN OTHERS THEN
494 RETURN 1;
495 END;
496
497
498 FUNCTION get_budget_source_count(p_list_header_id IN NUMBER)
499 RETURN NUMBER IS
500 p_count NUMBER := 0;
501
502 CURSOR cur_budget_source_count(list_header_id NUMBER) IS
503 SELECT count(1)
504 FROM ozf_act_budgets
505 where act_budget_used_by_id = list_header_id
506 and arc_act_budget_used_by = 'OFFR'
507 AND transfer_type = 'REQUEST';
508
509
510 BEGIN
511 OPEN cur_budget_source_count( p_list_header_id ) ;
512 FETCH cur_budget_source_count INTO p_count ;
513 CLOSE cur_budget_source_count ;
514 return p_count ;
515
516 EXCEPTION
517 WHEN OTHERS THEN
518 RETURN 0;
519 END;
520
521
522 --nepanda : fix for fp of bug number 9151787
523 FUNCTION get_active_budget_source_count(p_list_header_id IN NUMBER)
524 RETURN NUMBER IS
525 p_count NUMBER := 0;
526
527 CURSOR cur_active_budget_source_count(list_header_id NUMBER) IS
528 SELECT count(1)
529 FROM ozf_act_budgets
530 where act_budget_used_by_id = list_header_id
531 and arc_act_budget_used_by = 'OFFR'
532 AND transfer_type = 'REQUEST'
533 AND status_code NOT IN ('CLOSED', 'REJECTED');
534
535
536 BEGIN
537 OPEN cur_active_budget_source_count( p_list_header_id ) ;
538 FETCH cur_active_budget_source_count INTO p_count ;
539 CLOSE cur_active_budget_source_count ;
540 return p_count ;
541
542 EXCEPTION
543 WHEN OTHERS THEN
544 RETURN 0;
545 END;
546
547
548 PROCEDURE add_message ( p_msg_count IN NUMBER)
549 IS
550 l_msg_data VARCHAR2(2000);
551 BEGIN
552 FOR i IN 1 .. p_msg_count LOOP
553 l_msg_data := Oe_Msg_Pub.get( p_msg_index => i,
554 p_encoded => 'F' );
555 Fnd_Message.SET_NAME('OZF','OZF_QP_ERROR');
556 Fnd_Message.SET_TOKEN('ERROR_MSG',l_msg_data);
557 Fnd_Msg_Pub.ADD;
558 END LOOP;
559 END add_message;
560
561 FUNCTION find_territories( aso_party_id IN NUMBER,oe_sold_to_org IN NUMBER)
562 RETURN Qp_Attr_Mapping_Pub.t_multirecord
563 IS
564
565 l_multirecord Qp_Attr_Mapping_Pub.t_multirecord;
566
567 BEGIN
568
569 oe_debug_pub.add('Before Calling OZF_QP_QUAL_PVT.Find_SA_Territories: ');
570 oe_debug_pub.add('aso_party_id: ' || aso_party_id);
571 oe_debug_pub.add('oe_sold_to_org: ' || oe_sold_to_org);
572 l_multirecord := OZF_QP_QUAL_PVT.Find_SA_Territories(p_party_id => aso_party_id
573 ,p_sold_to_org => oe_sold_to_org);
574 oe_debug_pub.add('After Calling OZF_QP_QUAL_PVT.Find_SA_Territories: Count ' || l_multirecord.COUNT);
575
576 RETURN l_multirecord;
577
578 END find_territories;
579
580
581 FUNCTION find_sections( aso_inventory_item_id IN NUMBER, oe_inventory_item_id IN NUMBER)
582 RETURN Qp_Attr_Mapping_Pub.t_multirecord
583 IS
584 p_inventory_item_id NUMBER;
585
586 CURSOR cur_item_sections IS
587 SELECT jsi.section_id
588 FROM ibe_dsp_section_items jsi
589 WHERE jsi.inventory_item_id = p_inventory_item_id;
590
591 l_multirecord Qp_Attr_Mapping_Pub.t_multirecord;
592 l_count NUMBER := 1;
593
594 BEGIN
595 IF aso_inventory_item_id = Fnd_Api.g_miss_num THEN
596 p_inventory_item_id := oe_inventory_item_id;
597 ELSE
598 p_inventory_item_id := aso_inventory_item_id;
599 END IF;
600 FOR sections_rec IN cur_item_sections LOOP
601 l_multirecord(l_count) := sections_rec.section_id;
602 l_count := l_count + 1;
603 END LOOP;
604
605 RETURN(l_multirecord);
606
607 END;
608
609
610 PROCEDURE process_adv_options
611 (
612 p_init_msg_list IN VARCHAR2
613 ,p_api_version IN NUMBER
614 ,p_commit IN VARCHAR2
615 ,x_return_status OUT NOCOPY VARCHAR2
616 ,x_msg_count OUT NOCOPY NUMBER
617 ,x_msg_data OUT NOCOPY VARCHAR2
618 ,p_advanced_options_rec IN ADVANCED_OPTION_REC_TYPE
619 )
620 IS
621 CURSOR cur_get_lines IS
622 SELECT list_line_id,modifier_level_code,price_break_type_code
623 FROM qp_list_lines
624 WHERE list_header_id = p_advanced_options_rec.list_header_id;
625
626 -- bug 3435528 populate cust_account_id to beneficiary_account_id
627 CURSOR c_cust_account_id(p_site_use_id NUMBER, p_site_use_code VARCHAR2) IS
628 SELECT a.cust_account_id
629 FROM hz_cust_acct_sites_all a, hz_cust_site_uses_all b
630 WHERE a.cust_acct_site_id = b.cust_acct_site_id
631 AND b.site_use_code = p_site_use_code
632 AND b.site_use_id = p_site_use_id;
633 -- end comment
634
635 l_modifiers_tbl Qp_Modifiers_Pub.modifiers_tbl_type;
636
637 l_api_version CONSTANT NUMBER := 1.0;
638 l_api_name CONSTANT VARCHAR2(30) := 'process_adv_options';
639 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
640 l_object_version_number NUMBER;
641
642 i NUMBER := 1;
643
644 v_modifier_list_rec qp_modifiers_pub.modifier_list_rec_type;
645 v_modifier_list_val_rec qp_modifiers_pub.modifier_list_val_rec_type;
646 v_modifiers_tbl qp_modifiers_pub.modifiers_tbl_type;
647 v_modifiers_val_tbl qp_modifiers_pub.modifiers_val_tbl_type;
648 v_qualifiers_tbl qp_qualifier_rules_pub.qualifiers_tbl_type;
649 v_qualifiers_val_tbl qp_qualifier_rules_pub.qualifiers_val_tbl_type;
650 v_pricing_attr_tbl qp_modifiers_pub.pricing_attr_tbl_type;
651 v_pricing_attr_val_tbl qp_modifiers_pub.pricing_attr_val_tbl_type;
652 l_promotional_offers_rec ozf_promotional_offers_pvt.offers_rec_type;
653
654 BEGIN
655
656 SAVEPOINT process_adv_options;
657
658 IF Fnd_Api.to_boolean(p_init_msg_list) THEN
659 Fnd_Msg_Pub.initialize;
660 END IF;
661
662 IF NOT Fnd_Api.compatible_api_call
663 (
664 l_api_version,
665 p_api_version,
666 l_api_name,
667 g_pkg_name
668 )
669 THEN
670 RAISE Fnd_Api.g_exc_unexpected_error;
671 END IF;
672
673 x_return_status := Fnd_Api.g_ret_sts_success;
674
675 FOR line_rec IN cur_get_lines LOOP
676 l_modifiers_tbl(i).pricing_phase_id := p_advanced_options_rec.pricing_phase_id;
677 l_modifiers_tbl(i).modifier_level_code := p_advanced_options_rec.modifier_level_code;
678 l_modifiers_tbl(i).incompatibility_grp_code := p_advanced_options_rec.incompatibility_grp_code;
679 l_modifiers_tbl(i).product_precedence := p_advanced_options_rec.product_precedence;
680 IF line_rec.modifier_level_code <> 'ORDER' THEN
681 l_modifiers_tbl(i).pricing_group_sequence := p_advanced_options_rec.pricing_group_sequence;
682 END IF;
683 l_modifiers_tbl(i).print_on_invoice_flag := p_advanced_options_rec.print_on_invoice_flag;
684 l_modifiers_tbl(i).price_break_type_code := line_rec.price_break_type_code;
685 l_modifiers_tbl(i).list_line_id := line_rec.list_line_id;
686 l_modifiers_tbl(i).operation := Qp_Globals.G_OPR_UPDATE;
687 i:= i+1;
688 END LOOP;
689
690 OZF_Utility_PVT.debug_message(FND_LOG.LEVEL_STATEMENT, l_full_name ,'QP Call in process_adv_options---');
691 OZF_DEBUG_PVT.DEBUG_MO('OZF_OFFER_PVT.process_adv_options before calling QP for list_header_id : '|| p_advanced_options_rec.list_header_id);
692
693 Qp_Modifiers_Pub.process_modifiers(
694 p_api_version_number => 1.0,
695 p_init_msg_list => p_init_msg_list,
696 p_return_values => Fnd_Api.G_FALSE,
697 x_return_status => x_return_status,
698 x_msg_count => x_msg_count,
699 x_msg_data => x_msg_data,
700 p_modifiers_tbl => l_modifiers_tbl,
701 x_modifier_list_rec => v_modifier_list_rec,
702 x_modifier_list_val_rec => v_modifier_list_val_rec,
703 x_modifiers_tbl => v_modifiers_tbl,
704 x_modifiers_val_tbl => v_modifiers_val_tbl,
705 x_qualifiers_tbl => v_qualifiers_tbl,
706 x_qualifiers_val_tbl => v_qualifiers_val_tbl,
707 x_pricing_attr_tbl => v_pricing_attr_tbl,
708 x_pricing_attr_val_tbl => v_pricing_attr_val_tbl
709 );
710
711 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
712 add_message(x_msg_count);
713 RAISE Fnd_Api.g_exc_error;
714 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
715 add_message(x_msg_count);
716 RAISE Fnd_Api.g_exc_unexpected_error;
717 END IF;
718
719 l_promotional_offers_rec.qp_list_header_id := p_advanced_options_rec.list_header_id;
720 l_promotional_offers_rec.autopay_flag := p_advanced_options_rec.autopay_flag;
721 l_promotional_offers_rec.autopay_days := p_advanced_options_rec.autopay_days;
722 l_promotional_offers_rec.autopay_method := p_advanced_options_rec.autopay_method;
723 /*
724 IF p_advanced_options_rec.autopay_days IS NOT NULL THEN
725 l_promotional_offers_rec.autopay_days := p_advanced_options_rec.autopay_days;
726 ELSE
727 l_promotional_offers_rec.autopay_days := FND_PROFILE.VALUE('OZF_DEFAULT_AUTOPAY_DAYS');
728 END IF;
729
730 IF p_advanced_options_rec.autopay_method IS NOT NULL THEN
731 l_promotional_offers_rec.autopay_method := p_advanced_options_rec.autopay_method;
732 ELSE
733 l_promotional_offers_rec.autopay_method := FND_PROFILE.VALUE('OZF_DEFAULT_AUTOPAY_METHOD');
734 END IF;
735 */
736 l_promotional_offers_rec.autopay_party_attr := p_advanced_options_rec.autopay_party_attr;
737 l_promotional_offers_rec.autopay_party_id := p_advanced_options_rec.autopay_party_id;
738
739 -- bug 3435528
740 IF p_advanced_options_rec.autopay_party_attr IS NULL OR p_advanced_options_rec.autopay_party_id IS NULL THEN
741 l_promotional_offers_rec.beneficiary_account_id := NULL;
742 l_promotional_offers_rec.autopay_party_attr := NULL;
743 l_promotional_offers_rec.autopay_party_id := NULL;
744 ELSIF p_advanced_options_rec.autopay_party_attr = 'CUSTOMER' THEN
745 l_promotional_offers_rec.beneficiary_account_id := p_advanced_options_rec.autopay_party_id;
746 ElSIF p_advanced_options_rec.autopay_party_attr = 'CUSTOMER_BILL_TO' THEN
747 OPEN c_cust_account_id(p_advanced_options_rec.autopay_party_id, 'BILL_TO');
748 FETCH c_cust_account_id INTO l_promotional_offers_rec.beneficiary_account_id;
749 CLOSE c_cust_account_id;
750 ElSIF p_advanced_options_rec.autopay_party_attr = 'SHIP_TO' THEN
751 OPEN c_cust_account_id(p_advanced_options_rec.autopay_party_id, 'SHIP_TO');
752 FETCH c_cust_account_id INTO l_promotional_offers_rec.beneficiary_account_id;
753 CLOSE c_cust_account_id;
754 END IF;
755 -- end comment
756
757 OZF_Promotional_Offers_Pvt.UPDATE_OFFERS(
758 p_api_version_number => 1.0,
759 x_return_status => x_return_status,
760 x_msg_count => x_msg_count,
761 x_msg_data => x_msg_data,
762 p_offers_rec => l_promotional_offers_rec,
763 x_object_version_number => l_object_version_number
764 );
765
766 Fnd_Msg_Pub.Count_AND_Get
767 ( p_count => x_msg_count,
768 p_data => x_msg_data,
769 p_encoded => Fnd_Api.G_FALSE
770 );
771 IF p_commit = Fnd_Api.g_true THEN
772 COMMIT WORK;
773 END IF;
774
775 EXCEPTION
776 WHEN Fnd_Api.G_EXC_ERROR THEN
777 x_return_status := Fnd_Api.g_ret_sts_error ;
778 ROLLBACK TO process_adv_options;
779 Fnd_Msg_Pub.Count_AND_Get
780 ( p_count => x_msg_count,
781 p_data => x_msg_data,
782 p_encoded => Fnd_Api.G_FALSE
783 );
784 WHEN Fnd_Api.G_EXC_UNEXPECTED_ERROR THEN
785 x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
786 ROLLBACK TO process_adv_options;
787 Fnd_Msg_Pub.Count_AND_Get
788 ( p_count => x_msg_count,
789 p_data => x_msg_data,
790 p_encoded => Fnd_Api.G_FALSE
791 );
792 WHEN OTHERS THEN
793 x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
794 ROLLBACK TO process_adv_options;
795 IF Fnd_Msg_Pub.Check_Msg_Level ( Fnd_Msg_Pub.G_MSG_LVL_UNEXP_ERROR ) THEN
796 Fnd_Msg_Pub.Add_Exc_Msg( G_PKG_NAME,l_api_name);
797 END IF;
798 Fnd_Msg_Pub.Count_AND_Get
799 ( p_count => x_msg_count,
800 p_data => x_msg_data,
801 p_encoded => Fnd_Api.G_FALSE
802 );
803 END;
804
805
806 PROCEDURE create_offer_tiers
807 (
808 p_init_msg_list IN VARCHAR2
809 ,p_api_version IN NUMBER
810 ,p_commit IN VARCHAR2
811 ,x_return_status OUT NOCOPY VARCHAR2
812 ,x_msg_count OUT NOCOPY NUMBER
813 ,x_msg_data OUT NOCOPY VARCHAR2
814 ,p_modifier_line_tbl IN MODIFIER_LINE_TBL_TYPE
815 ,x_error_location OUT NOCOPY NUMBER
816 -- ,x_modifiers_tbl OUT NOCOPY qp_modifiers_pub.modifiers_tbl_type
817 -- ,x_pricing_attr_tbl OUT NOCOPY qp_modifiers_pub.pricing_attr_tbl_type
818 )
819 IS
820 l_api_version CONSTANT NUMBER := 1.0;
821 l_api_name CONSTANT VARCHAR2(30) := 'create_offer_tiers';
822 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
823
824 l_modifiers_tbl qp_modifiers_pub.modifiers_tbl_type;
825 l_pricing_attr_tbl Qp_Modifiers_Pub.pricing_attr_tbl_type;
826 v_modifier_list_rec qp_modifiers_pub.modifier_list_rec_type;
827 v_modifier_list_val_rec qp_modifiers_pub.modifier_list_val_rec_type;
828 v_modifiers_tbl qp_modifiers_pub.modifiers_tbl_type;
829 v_modifiers_val_tbl qp_modifiers_pub.modifiers_val_tbl_type;
830 v_qualifiers_tbl qp_qualifier_rules_pub.qualifiers_tbl_type;
831 v_qualifiers_val_tbl qp_qualifier_rules_pub.qualifiers_val_tbl_type;
832 v_pricing_attr_tbl qp_modifiers_pub.pricing_attr_tbl_type;
833 v_pricing_attr_val_tbl qp_modifiers_pub.pricing_attr_val_tbl_type;
834
835 CURSOR cur_get_adv_options(parent_list_line_id NUMBER) IS
836 SELECT proration_type_code ,
837 product_precedence ,
838 pricing_group_sequence,
839 print_on_invoice_flag ,
840 pricing_phase_id ,
841 modifier_level_code ,
842 automatic_flag
843 FROM qp_list_lines
844 WHERE list_line_id = parent_list_line_id;
845
846 CURSOR cur_get_prod_info( parent_list_line_id NUMBER) IS
847 SELECT product_attribute_context,
848 product_attribute ,
849 product_attr_value,
850 product_uom_code ,
851 pricing_attribute_context
852 FROM qp_pricing_attributes
853 WHERE list_line_id = parent_list_line_id;
854
855 -- fix for accrual_flag for multi-tier lines
856 CURSOR c_offer_type(p_list_header_id NUMBER) IS
857 SELECT DECODE(offer_type, 'VOLUME_OFFER', volume_offer_type, offer_type)
858 FROM ozf_offers
859 WHERE qp_list_header_id = p_list_header_id;
860 l_offer_type VARCHAR2(30);
861
862 CURSOR c_pbh_pricing_attr_id(l_id NUMBER) IS
863 SELECT c.pricing_attribute_id,
864 c.list_line_id
865 FROM qp_rltd_modifiers a, qp_pricing_attributes b, qp_pricing_attributes c
866 WHERE c.list_line_id = a.from_rltd_modifier_id
867 AND a.to_rltd_modifier_id = b.list_line_id
868 AND b.pricing_attribute_id = l_id;
869
870 l_pricing_attribute_id NUMBER;
871 l_line_index NUMBER;
872 l_list_line_id NUMBER;
873 BEGIN
874
875 SAVEPOINT create_offer_tiers;
876
877 IF Fnd_Api.to_boolean(p_init_msg_list) THEN
878 Fnd_Msg_Pub.initialize;
879 END IF;
880
881 IF NOT Fnd_Api.compatible_api_call
882 (
883 l_api_version,
884 p_api_version,
885 l_api_name,
886 g_pkg_name
887 )
888 THEN
889 RAISE Fnd_Api.g_exc_unexpected_error;
890 END IF;
891
892 x_return_status := Fnd_Api.g_ret_sts_success;
893 x_error_location := 0;
894
895
896
897 IF p_modifier_line_tbl.count > 0 THEN
898 FOR i in p_modifier_line_tbl.first..p_modifier_line_tbl.last LOOP
899 IF p_modifier_line_tbl.exists(i) THEN
900 IF p_modifier_line_tbl(i).operation <> fnd_api.g_miss_char THEN
901 IF p_modifier_line_tbl(i).operation = 'CREATE' THEN
902 debug_message('Operation Create');
903 OPEN cur_get_adv_options(p_modifier_line_tbl(i).list_line_id);
904 FETCH cur_get_adv_options INTO l_modifiers_tbl(i).proration_type_code,
905 l_modifiers_tbl(i).product_precedence ,
906 l_modifiers_tbl(i).pricing_group_sequence,
907 l_modifiers_tbl(i).print_on_invoice_flag,
908 l_modifiers_tbl(i).pricing_phase_id ,
909 l_modifiers_tbl(i).modifier_level_code,
910 l_modifiers_tbl(i).automatic_flag ;
911 CLOSE cur_get_adv_options;
912
913 OPEN cur_get_prod_info(p_modifier_line_tbl(i).list_line_id);
914 FETCH cur_get_prod_info INTO l_pricing_attr_tbl(i).product_attribute_context ,
915 l_pricing_attr_tbl(i).product_attribute ,
916 l_pricing_attr_tbl(i).product_attr_value ,
917 l_pricing_attr_tbl(i).product_uom_code ,
918 l_pricing_attr_tbl(i).pricing_attribute_context ;
919
920 CLOSE cur_get_prod_info;
921
922 l_modifiers_tbl(i).from_rltd_modifier_id := p_modifier_line_tbl(i).list_line_id;
923 l_modifiers_tbl(i).list_line_type_code := 'DIS';
924 l_modifiers_tbl(i).rltd_modifier_grp_type := 'PRICE BREAK';
925 l_modifiers_tbl(i).rltd_modifier_grp_no := 1;
926 l_modifiers_tbl(i).list_header_id := p_modifier_line_tbl(i).list_header_id;
927 l_pricing_attr_tbl(i).modifiers_index := i;
928 ELSE
929 l_modifiers_tbl(i).list_line_id := p_modifier_line_tbl(i).list_line_id;
930 END IF;
931
932 l_modifiers_tbl(i).operation := p_modifier_line_tbl(i).operation ;
933 l_modifiers_tbl(i).arithmetic_operator := p_modifier_line_tbl(i).arithmetic_operator;
934 l_modifiers_tbl(i).operand := p_modifier_line_tbl(i).operand;
935 l_modifiers_tbl(i).price_break_type_code := p_modifier_line_tbl(i).price_break_type_code;
936 debug_message('Adding accr flag');
937 OPEN c_offer_type (l_modifiers_tbl(i).list_header_id);
938 FETCH c_offer_type INTO l_offer_type;
939 CLOSE c_offer_type;
940 IF l_offer_type = 'ACCRUAL' THEN
941 l_modifiers_tbl(i).accrual_flag := 'Y';
942 ELSIF l_offer_type = 'OFF_INVOICE' THEN
943 l_modifiers_tbl(i).accrual_flag := 'N';
944 END IF;
945 l_modifiers_tbl(i).start_date_active := p_modifier_line_tbl(i).start_date_active;
946 debug_message('Done start date');
947 l_pricing_attr_tbl(i).pricing_attribute := p_modifier_line_tbl(i).pricing_attr;
948 l_pricing_attr_tbl(i).pricing_attribute_id := p_modifier_line_tbl(i).pricing_attribute_id;
949 l_pricing_attr_tbl(i).pricing_attr_value_from := p_modifier_line_tbl(i).pricing_attr_value_from;
950 l_pricing_attr_tbl(i).pricing_attr_value_to := p_modifier_line_tbl(i).pricing_attr_value_to;
951 l_pricing_attr_tbl(i).comparison_operator_code := 'BETWEEN';
952 l_pricing_attr_tbl(i).operation := p_modifier_line_tbl(i).operation;
953 END IF;
954 END IF;
955 END LOOP;
956
957 OPEN c_pbh_pricing_attr_id(p_modifier_line_tbl(p_modifier_line_tbl.first).pricing_attribute_id);
958 FETCH c_pbh_pricing_attr_id INTO l_pricing_attribute_id, l_list_line_id;
959 CLOSE c_pbh_pricing_attr_id;
960
961 l_line_index := l_pricing_attr_tbl.last + 1;
962
963 l_pricing_attr_tbl(l_line_index).pricing_attribute_id := l_pricing_attribute_id;
964 l_pricing_attr_tbl(l_line_index).operation := 'UPDATE';
965 l_pricing_attr_tbl(l_line_index).pricing_attribute := p_modifier_line_tbl(p_modifier_line_tbl.first).pricing_attr;
966
967 -- nirprasa, fix for bug 7340864
968 IF(p_modifier_line_tbl(p_modifier_line_tbl.first).operation <> 'CREATE') THEN
969 l_modifiers_tbl(l_line_index).price_break_type_code := p_modifier_line_tbl(p_modifier_line_tbl.first).price_break_type_code;
970 l_modifiers_tbl(l_line_index).operation := 'UPDATE';
971 l_modifiers_tbl(l_line_index).list_line_id := l_list_line_id;
972 END IF;
973
974
975 debug_message('Calling Pub Process in tiers');
976 OZF_Utility_PVT.debug_message(FND_LOG.LEVEL_STATEMENT, l_full_name ,'QP Call in create_offer_tiers---');
977 OZF_DEBUG_PVT.DEBUG_MO('OZF_OFFER_PVT.create_offer_tiers before calling QP for list_header_id : '|| p_modifier_line_tbl(p_modifier_line_tbl.first).list_header_id);
978 END IF;
979 Qp_Modifiers_Pub.process_modifiers(
980 p_api_version_number => 1.0,
981 p_init_msg_list => p_init_msg_list,
982 p_return_values => Fnd_Api.G_FALSE,
983 x_return_status => x_return_status,
984 x_msg_count => x_msg_count,
985 x_msg_data => x_msg_data,
986 p_modifiers_tbl => l_modifiers_tbl,
987 p_pricing_attr_tbl => l_pricing_attr_tbl,
988 x_modifier_list_rec => v_modifier_list_rec,
989 x_modifier_list_val_rec => v_modifier_list_val_rec,
990 x_modifiers_tbl => v_modifiers_tbl,
991 x_modifiers_val_tbl => v_modifiers_val_tbl,
992 x_qualifiers_tbl => v_qualifiers_tbl,
993 x_qualifiers_val_tbl => v_qualifiers_val_tbl,
994 x_pricing_attr_tbl => v_pricing_attr_tbl,
995 x_pricing_attr_val_tbl => v_pricing_attr_val_tbl
996 );
997
998 IF x_return_status <> Fnd_Api.g_ret_sts_success THEN
999 IF v_modifiers_tbl.COUNT > 0 THEN
1000 FOR i IN v_modifiers_tbl.first..v_modifiers_tbl.last LOOP
1001 IF v_modifiers_tbl.EXISTS(i) THEN
1002 IF v_modifiers_tbl(i).return_status <> Fnd_Api.g_ret_sts_success THEN
1003 x_error_location := i;
1004 EXIT;
1005 END IF;
1006 END IF;
1007 END LOOP;
1008 END IF;
1009 END IF;
1010
1011 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
1012 add_message(x_msg_count);
1013 RAISE Fnd_Api.g_exc_error;
1014 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
1015 add_message(x_msg_count);
1016 RAISE Fnd_Api.g_exc_unexpected_error;
1017 END IF;
1018
1019
1020 -- x_modifiers_tbl := v_modifiers_tbl;
1021 -- x_pricing_attr_tbl := v_pricing_attr_tbl;
1022
1023 Fnd_Msg_Pub.Count_AND_Get
1024 ( p_count => x_msg_count,
1025 p_data => x_msg_data,
1026 p_encoded => Fnd_Api.G_FALSE
1027 );
1028 IF p_commit = Fnd_Api.g_true THEN
1029 COMMIT WORK;
1030 END IF;
1031 debug_message('End Create Tiers');
1032 EXCEPTION
1033 WHEN Fnd_Api.G_EXC_ERROR THEN
1034 x_return_status := Fnd_Api.g_ret_sts_error ;
1035 ROLLBACK TO create_offer_tiers;
1036 Fnd_Msg_Pub.Count_AND_Get
1037 ( p_count => x_msg_count,
1038 p_data => x_msg_data,
1039 p_encoded => Fnd_Api.G_FALSE
1040 );
1041 WHEN Fnd_Api.G_EXC_UNEXPECTED_ERROR THEN
1042 x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
1043 ROLLBACK TO create_offer_tiers;
1044 Fnd_Msg_Pub.Count_AND_Get
1045 ( p_count => x_msg_count,
1046 p_data => x_msg_data,
1047 p_encoded => Fnd_Api.G_FALSE
1048 );
1049 WHEN OTHERS THEN
1050 x_return_status := Fnd_Api.g_ret_sts_unexp_erroR ;
1051 ROLLBACK TO create_offer_tiers;
1052 IF Fnd_Msg_Pub.Check_Msg_Level ( Fnd_Msg_Pub.G_MSG_LVL_UNEXP_ERROR ) THEN
1053 Fnd_Msg_Pub.Add_Exc_Msg( G_PKG_NAME,l_api_name);
1054 END IF;
1055 Fnd_Msg_Pub.Count_AND_Get
1056 ( p_count => x_msg_count,
1057 p_data => x_msg_data,
1058 p_encoded => Fnd_Api.G_FALSE
1059 );
1060 END;
1061
1062
1063 PROCEDURE populateRltdExclusions
1064 (
1065 x_return_status OUT NOCOPY VARCHAR2
1066 ,x_msg_count OUT NOCOPY NUMBER
1067 ,x_msg_data OUT NOCOPY VARCHAR2
1068 ,p_pricing_attr_tbl IN PRICING_ATTR_TBL_TYPE
1069 ,px_pricing_attr_tbl OUT NOCOPY PRICING_ATTR_TBL_TYPE
1070 )
1071 IS
1072 CURSOR c_rltdListLine(cp_listLineId NUMBER) IS
1073 SELECT nvl(related_modifier_id,-1) related_modifier_id
1074 FROM ozf_related_deal_lines a
1075 WHERE a.modifier_id = cp_listLineId;
1076
1077 CURSOR c_pricingAttrId (cp_listLineId NUMBER, cp_productAttr VARCHAR2, cp_productAttrValue VARCHAR2) IS
1078 SELECT pricing_attribute_id
1079 FROM qp_pricing_attributes
1080 WHERE list_line_id = cp_listLineId
1081 AND product_attribute = cp_productAttr
1082 AND product_attr_value = cp_productAttrValue
1083 AND excluder_flag = 'Y';
1084
1085 i NUMBER:= 0;
1086 BEGIN
1087 x_return_status := FND_API.G_RET_STS_SUCCESS;
1088 i := 1;
1089 IF nvl(p_pricing_attr_tbl.count, 0) > 0 THEN
1090 FOR j in p_pricing_attr_tbl.first .. p_pricing_attr_tbl.last LOOP
1091 IF p_pricing_attr_tbl.exists(j) THEN
1092 FOR l_rltdListLine IN c_rltdListLine(cp_listLineId => p_pricing_attr_tbl(j).list_line_id) LOOP
1093 IF l_rltdListLine.related_modifier_id = -1 THEN
1094 null;
1095 ELSE
1096 px_pricing_attr_tbl(i) := p_pricing_attr_tbl(j);
1097 px_pricing_attr_tbl(i).list_line_id := l_rltdListLine.related_modifier_id;
1098 IF p_pricing_attr_tbl(j).operation <> 'CREATE' THEN
1099 OPEN c_pricingAttrId(cp_listLineId => px_pricing_attr_tbl(i).list_line_id
1100 , cp_productAttr => p_pricing_attr_tbl(j).product_attribute
1101 , cp_productAttrValue => p_pricing_attr_tbl(j).product_attr_value
1102 );
1103 FETCH c_pricingAttrId INTO px_pricing_attr_tbl(i).pricing_attribute_id;
1104 IF c_pricingAttrId%NOTFOUND THEN
1105 px_pricing_attr_tbl(i).operation := null;
1106 END IF;
1107 CLOSE c_pricingAttrId;
1108 END IF;
1109 END IF;
1110 END LOOP;
1111 END IF;
1112 END LOOP;
1113 END IF;
1114
1115 END populateRltdExclusions;
1116
1117 PROCEDURE processRegExclusions
1118 (
1119 p_init_msg_list IN VARCHAR2
1120 ,p_api_version IN NUMBER
1121 ,p_commit IN VARCHAR2
1122 ,x_return_status OUT NOCOPY VARCHAR2
1123 ,x_msg_count OUT NOCOPY NUMBER
1124 ,x_msg_data OUT NOCOPY VARCHAR2
1125 ,p_pricing_attr_tbl IN PRICING_ATTR_TBL_TYPE
1126 ,x_error_location OUT NOCOPY NUMBER
1127 )
1128 IS
1129 l_api_version CONSTANT NUMBER := 1.0;
1130 l_api_name CONSTANT VARCHAR2(30) := 'processRegExclusions';
1131 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
1132 l_pricing_attr_tbl Qp_Modifiers_Pub.pricing_attr_tbl_type;
1133 v_modifier_list_rec qp_modifiers_pub.modifier_list_rec_type;
1134 v_modifier_list_val_rec qp_modifiers_pub.modifier_list_val_rec_type;
1135 v_modifiers_tbl qp_modifiers_pub.modifiers_tbl_type;
1136 v_modifiers_val_tbl qp_modifiers_pub.modifiers_val_tbl_type;
1137 v_qualifiers_tbl qp_qualifier_rules_pub.qualifiers_tbl_type;
1138 v_qualifiers_val_tbl qp_qualifier_rules_pub.qualifiers_val_tbl_type;
1139 v_pricing_attr_tbl qp_modifiers_pub.pricing_attr_tbl_type;
1140 v_pricing_attr_val_tbl qp_modifiers_pub.pricing_attr_val_tbl_type;
1141
1142 BEGIN
1143 SAVEPOINT process_exlusions;
1144
1145 IF Fnd_Api.to_boolean(p_init_msg_list) THEN
1146 Fnd_Msg_Pub.initialize;
1147 END IF;
1148
1149 IF NOT Fnd_Api.compatible_api_call
1150 (
1151 l_api_version,
1152 p_api_version,
1153 l_api_name,
1154 g_pkg_name
1155 )
1156 THEN
1157 RAISE Fnd_Api.g_exc_unexpected_error;
1158 END IF;
1159
1160 x_return_status := Fnd_Api.g_ret_sts_success;
1161 x_error_location := 0;
1162
1163 OZF_Utility_PVT.debug_message(FND_LOG.LEVEL_STATEMENT, l_full_name ,'QP Call in process_exlusions---p_pricing_attr_tbl.COUNT = '|| p_pricing_attr_tbl.COUNT);
1164
1165 IF p_pricing_attr_tbl.COUNT > 0 THEN
1166 FOR i IN p_pricing_attr_tbl.first..p_pricing_attr_tbl.last LOOP
1167 IF p_pricing_attr_tbl.EXISTS(i) THEN
1168 --dbms_output.put_line('start:'||i);
1169 l_pricing_attr_tbl(i).list_line_id := p_pricing_attr_tbl(i).list_line_id;
1170
1171 l_pricing_attr_tbl(i).product_attribute := p_pricing_attr_tbl(i).product_attribute;
1172 l_pricing_attr_tbl(i).product_attribute_context := 'ITEM';
1173 l_pricing_attr_tbl(i).product_attr_value := p_pricing_attr_tbl(i).product_attr_value;
1174
1175 IF p_pricing_attr_tbl(i).operation <> 'CREATE' THEN
1176 l_pricing_attr_tbl(i).pricing_attribute_id := p_pricing_attr_tbl(i).pricing_attribute_id;
1177 END IF;
1178 l_pricing_attr_tbl(i).excluder_flag := 'Y';
1179 l_pricing_attr_tbl(i).operation := p_pricing_attr_tbl(i).operation;
1180 --dbms_output.put_line('end:'||i);
1181 END IF;
1182 END LOOP;
1183 OZF_DEBUG_PVT.DEBUG_MO('OZF_OFFER_PVT processRegExclusions before calling QP for list_header_id : '|| p_pricing_attr_tbl(p_pricing_attr_tbl.FIRST).list_line_id);
1184 END IF;
1185
1186 Qp_Modifiers_Pub.process_modifiers(
1187 p_api_version_number => 1.0,
1188 p_init_msg_list => p_init_msg_list,
1189 p_return_values => Fnd_Api.G_FALSE,
1190 x_return_status => x_return_status,
1191 x_msg_count => x_msg_count,
1192 x_msg_data => x_msg_data,
1193 p_pricing_attr_tbl => l_pricing_attr_tbl,
1194 x_modifier_list_rec => v_modifier_list_rec,
1195 x_modifier_list_val_rec => v_modifier_list_val_rec,
1196 x_modifiers_tbl => v_modifiers_tbl,
1197 x_modifiers_val_tbl => v_modifiers_val_tbl,
1198 x_qualifiers_tbl => v_qualifiers_tbl,
1199 x_qualifiers_val_tbl => v_qualifiers_val_tbl,
1200 x_pricing_attr_tbl => v_pricing_attr_tbl,
1201 x_pricing_attr_val_tbl => v_pricing_attr_val_tbl
1202 );
1203 --dbms_output.put_line('done qp api:'||x_return_status);
1204
1205 IF x_return_status <> Fnd_Api.g_ret_sts_success THEN
1206 IF v_pricing_attr_tbl.COUNT > 0 THEN
1207 FOR i IN v_pricing_attr_tbl.first..v_pricing_attr_tbl.last LOOP
1208 IF v_pricing_attr_tbl.EXISTS(i) THEN
1209 IF v_pricing_attr_tbl(i).return_status <> Fnd_Api.g_ret_sts_success THEN
1210 x_error_location := i;
1211 EXIT;
1212 END IF;
1213 END IF;
1214 END LOOP;
1215 END IF;
1216 END IF;
1217
1218 --dbms_output.put_line('done qp api:'||x_return_status);
1219
1220 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
1221 add_message(x_msg_count);
1222 RAISE Fnd_Api.g_exc_error;
1223 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
1224 add_message(x_msg_count);
1225 RAISE Fnd_Api.g_exc_unexpected_error;
1226 END IF;
1227
1228 IF p_commit = Fnd_Api.g_true THEN
1229 COMMIT WORK;
1230 END IF;
1231 --dbms_output.put_line('done qp api:'||x_return_status);
1232 --dbms_output.put_line('done :');
1233 EXCEPTION
1234 WHEN Fnd_Api.G_EXC_ERROR THEN
1235 x_return_status := Fnd_Api.g_ret_sts_error ;
1236 ROLLBACK TO process_exlusions;
1237 Fnd_Msg_Pub.Count_AND_Get
1238 ( p_count => x_msg_count,
1239 p_data => x_msg_data,
1240 p_encoded => Fnd_Api.G_FALSE
1241 );
1242 WHEN Fnd_Api.G_EXC_UNEXPECTED_ERROR THEN
1243 x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
1244 ROLLBACK TO process_exlusions;
1245 Fnd_Msg_Pub.Count_AND_Get
1246 ( p_count => x_msg_count,
1247 p_data => x_msg_data,
1248 p_encoded => Fnd_Api.G_FALSE
1249 );
1250 WHEN OTHERS THEN
1251 x_return_status := Fnd_Api.g_ret_sts_unexp_erroR ;
1252 ROLLBACK TO process_exlusions;
1253 IF Fnd_Msg_Pub.Check_Msg_Level ( Fnd_Msg_Pub.G_MSG_LVL_UNEXP_ERROR ) THEN
1254 Fnd_Msg_Pub.Add_Exc_Msg( G_PKG_NAME,l_api_name);
1255 END IF;
1256 Fnd_Msg_Pub.Count_AND_Get
1257 ( p_count => x_msg_count,
1258 p_data => x_msg_data,
1259 p_encoded => Fnd_Api.G_FALSE
1260 );
1261 END processRegExclusions;
1262
1263 /**
1264 One scenario left out for now is , if a Product is excluded from a TD Line comprising of only 1 discount.
1265 On creating second discount, the exclusion is not copied over.
1266 Same is true for Line level qualifiers
1267 Another issue is the process_trade_deal does not process the qd discount record at all if the qd discount is set to null
1268 */
1269 PROCEDURE process_exclusions
1270 (
1271 p_init_msg_list IN VARCHAR2
1272 ,p_api_version IN NUMBER
1273 ,p_commit IN VARCHAR2
1274 ,x_return_status OUT NOCOPY VARCHAR2
1275 ,x_msg_count OUT NOCOPY NUMBER
1276 ,x_msg_data OUT NOCOPY VARCHAR2
1277 ,p_pricing_attr_tbl IN PRICING_ATTR_TBL_TYPE
1278 ,x_error_location OUT NOCOPY NUMBER
1279 )
1280 IS
1281 l_pricing_attr_tbl PRICING_ATTR_TBL_TYPE;
1282 BEGIN
1283 -- initialize
1284 -- process reqular exclusions
1285 -- populate related exclusions data
1286 -- process related exclusions
1287 x_return_status := FND_API.G_RET_STS_SUCCESS;
1288 processRegExclusions
1289 (
1290 p_init_msg_list => FND_API.G_FALSE
1291 ,p_api_version => 1.0
1292 ,p_commit => FND_API.G_FALSE
1293 ,x_return_status => x_return_status
1294 ,x_msg_count => x_msg_count
1295 ,x_msg_data => x_msg_data
1296 ,p_pricing_attr_tbl => p_pricing_attr_tbl
1297 ,x_error_location => x_error_location
1298 );
1299 IF x_return_status = FND_API.G_RET_STS_ERROR THEN
1300 RAISE FND_API.G_EXC_ERROR;
1301 ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1302 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1303 END IF;
1304
1305 populateRltdExclusions
1306 (
1307 x_return_status => x_return_status
1308 ,x_msg_count => x_msg_count
1309 ,x_msg_data => x_msg_data
1310 ,p_pricing_attr_tbl => p_pricing_attr_tbl
1311 ,px_pricing_attr_tbl => l_pricing_attr_tbl
1312 );
1313 IF x_return_status = FND_API.G_RET_STS_ERROR THEN
1314 RAISE FND_API.G_EXC_ERROR;
1315 ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1316 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1317 END IF;
1318 --dbms_output.put_line('Rltd Pricing attr count is :'||nvl(l_pricing_attr_tbl.count,0));
1319 IF nvl(l_pricing_attr_tbl.count,0) > 0 THEN
1320 --dbms_output.put_line('Rltd Pricing attr count is :'||nvl(l_pricing_attr_tbl.count,0));
1321 processRegExclusions
1322 (
1323 p_init_msg_list => FND_API.G_FALSE
1324 ,p_api_version => 1.0
1325 ,p_commit => FND_API.G_FALSE
1326 ,x_return_status => x_return_status
1327 ,x_msg_count => x_msg_count
1328 ,x_msg_data => x_msg_data
1329 ,p_pricing_attr_tbl => l_pricing_attr_tbl
1330 ,x_error_location => x_error_location
1331 );
1332 IF x_return_status = FND_API.G_RET_STS_ERROR THEN
1333 RAISE FND_API.G_EXC_ERROR;
1334 ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1335 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1336 END IF;
1337 END IF;
1338 EXCEPTION
1339 WHEN Fnd_Api.G_EXC_ERROR THEN
1340 x_return_status := Fnd_Api.g_ret_sts_error ;
1341 Fnd_Msg_Pub.Count_AND_Get
1342 ( p_count => x_msg_count,
1343 p_data => x_msg_data,
1344 p_encoded => Fnd_Api.G_FALSE
1345 );
1346 WHEN Fnd_Api.G_EXC_UNEXPECTED_ERROR THEN
1347 x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
1348 Fnd_Msg_Pub.Count_AND_Get
1349 ( p_count => x_msg_count,
1350 p_data => x_msg_data,
1351 p_encoded => Fnd_Api.G_FALSE
1352 );
1353 WHEN OTHERS THEN
1354 x_return_status := Fnd_Api.g_ret_sts_unexp_erroR ;
1355 IF Fnd_Msg_Pub.Check_Msg_Level ( Fnd_Msg_Pub.G_MSG_LVL_UNEXP_ERROR ) THEN
1356 Fnd_Msg_Pub.Add_Exc_Msg( G_PKG_NAME,'process_exclusions');
1357 END IF;
1358 Fnd_Msg_Pub.Count_AND_Get
1359 ( p_count => x_msg_count,
1360 p_data => x_msg_data,
1361 p_encoded => Fnd_Api.G_FALSE
1362 );
1363 END process_exclusions;
1364
1365
1366 PROCEDURE process_rltd_modifier_qual
1367 (
1368 p_init_msg_list IN VARCHAR2
1369 ,p_commit IN VARCHAR2
1370 ,p_list_line_id IN NUMBER
1371 ,x_return_status OUT NOCOPY VARCHAR2
1372 ,x_msg_count OUT NOCOPY NUMBER
1373 ,x_msg_data OUT NOCOPY VARCHAR2)
1374 IS
1375 CURSOR c_modifier_qualifier IS
1376 SELECT qpq.qualifier_context
1377 ,qpq.qualifier_attribute
1378 ,qpq.qualifier_attr_value
1379 ,qpq.qualifier_attr_value_to
1380 ,qpq.comparison_operator_code
1381 ,qpq.qualifier_grouping_no
1382 ,qpq.start_date_active
1383 ,qpq.end_date_active
1384 ,qpq.active_flag
1385 ,qpq.context
1386 ,qpq.attribute1
1387 ,qpq.attribute2
1388 ,qpq.attribute3
1389 ,qpq.attribute4
1390 ,qpq.attribute5
1391 ,qpq.attribute6
1392 ,qpq.attribute7
1393 ,qpq.attribute8
1394 ,qpq.attribute9
1395 ,qpq.attribute10
1396 ,qpq.attribute11
1397 ,qpq.attribute12
1398 ,qpq.attribute13
1399 ,qpq.attribute14
1400 ,qpq.attribute15
1401 ,qpq.list_line_id
1402 ,qpq.list_header_id
1403 FROM qp_qualifiers qpq
1404 WHERE qpq.list_line_id = p_list_line_id;
1405
1406 CURSOR c_rltd_modifier_id(p_qp_list_header_id NUMBER, p_modifier_id NUMBER) IS
1407 SELECT related_modifier_id
1408 FROM ozf_related_deal_lines
1409 WHERE modifier_id = p_modifier_id
1410 AND qp_list_header_id = p_qp_list_header_id;
1411
1412 l_api_version CONSTANT NUMBER := 1.0;
1413 l_api_name CONSTANT VARCHAR2(30) := 'process_rltd_modifier_qual';
1414 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
1415 l_qualifiers_tbl Qp_Qualifier_Rules_Pub.qualifiers_tbl_type;
1416 v_modifier_list_rec qp_modifiers_pub.modifier_list_rec_type;
1417 v_modifier_list_val_rec qp_modifiers_pub.modifier_list_val_rec_type;
1418 v_modifiers_tbl qp_modifiers_pub.modifiers_tbl_type;
1419 v_modifiers_val_tbl qp_modifiers_pub.modifiers_val_tbl_type;
1420 v_qualifiers_tbl qp_qualifier_rules_pub.qualifiers_tbl_type;
1421 v_qualifiers_val_tbl qp_qualifier_rules_pub.qualifiers_val_tbl_type;
1422 v_pricing_attr_tbl qp_modifiers_pub.pricing_attr_tbl_type;
1423 v_pricing_attr_val_tbl qp_modifiers_pub.pricing_attr_val_tbl_type;
1424 l_qualifiers_tbl_out qp_qualifier_rules_pub.qualifiers_tbl_type;
1425
1426 l_rltd_modifier_id NUMBER;
1427 l_index NUMBER := 0;
1428
1429 BEGIN
1430 SAVEPOINT process_rltd_modifier_qual;
1431
1432 IF Fnd_Api.to_boolean(p_init_msg_list) THEN
1433 Fnd_Msg_Pub.initialize;
1434 END IF;
1435
1436 x_return_status := Fnd_Api.g_ret_sts_success;
1437
1438 FOR l_modifier_qualifier IN c_modifier_qualifier LOOP
1439 OPEN c_rltd_modifier_id(l_modifier_qualifier.list_header_id, p_list_line_id);
1440 FETCH c_rltd_modifier_id INTO l_rltd_modifier_id;
1441 CLOSE c_rltd_modifier_id;
1442 debug_message('jl rltd modifier id: ' || l_rltd_modifier_id);
1443 IF l_rltd_modifier_id IS NOT NULL AND l_rltd_modifier_id <> fnd_api.g_miss_num THEN
1444 DELETE FROM qp_qualifiers
1445 WHERE list_header_id = l_modifier_qualifier.list_header_id
1446 AND list_line_id = l_rltd_modifier_id;
1447
1448 l_index := l_index + 1;
1449 l_qualifiers_tbl(l_index).list_header_id := l_modifier_qualifier.list_header_id;
1450 l_qualifiers_tbl(l_index).list_line_id := l_rltd_modifier_id;
1451 l_qualifiers_tbl(l_index).operation := 'CREATE';
1452 l_qualifiers_tbl(l_index).qualifier_context := l_modifier_qualifier.qualifier_context;
1453 l_qualifiers_tbl(l_index).qualifier_attribute := l_modifier_qualifier.qualifier_attribute;
1454 l_qualifiers_tbl(l_index).qualifier_attr_value := l_modifier_qualifier.qualifier_attr_value;
1455 l_qualifiers_tbl(l_index).qualifier_attr_value_to := l_modifier_qualifier.qualifier_attr_value_to;
1456 l_qualifiers_tbl(l_index).comparison_operator_code := l_modifier_qualifier.comparison_operator_code;
1457 l_qualifiers_tbl(l_index).qualifier_grouping_no := l_modifier_qualifier.qualifier_grouping_no;
1458 l_qualifiers_tbl(l_index).start_date_active := l_modifier_qualifier.start_date_active;
1459 l_qualifiers_tbl(l_index).end_date_active := l_modifier_qualifier.end_date_active;
1460 l_qualifiers_tbl(l_index).active_flag := l_modifier_qualifier.active_flag;
1461 l_qualifiers_tbl(l_index).context := l_modifier_qualifier.context;
1462 l_qualifiers_tbl(l_index).attribute1 := l_modifier_qualifier.attribute1;
1463 l_qualifiers_tbl(l_index).attribute2 := l_modifier_qualifier.attribute2;
1464 l_qualifiers_tbl(l_index).attribute3 := l_modifier_qualifier.attribute3;
1465 l_qualifiers_tbl(l_index).attribute4 := l_modifier_qualifier.attribute4;
1466 l_qualifiers_tbl(l_index).attribute5 := l_modifier_qualifier.attribute5;
1467 l_qualifiers_tbl(l_index).attribute6 := l_modifier_qualifier.attribute6;
1468 l_qualifiers_tbl(l_index).attribute7 := l_modifier_qualifier.attribute7;
1469 l_qualifiers_tbl(l_index).attribute8 := l_modifier_qualifier.attribute8;
1470 l_qualifiers_tbl(l_index).attribute9 := l_modifier_qualifier.attribute9;
1471 l_qualifiers_tbl(l_index).attribute10 := l_modifier_qualifier.attribute10;
1472 l_qualifiers_tbl(l_index).attribute11 := l_modifier_qualifier.attribute11;
1473 l_qualifiers_tbl(l_index).attribute12 := l_modifier_qualifier.attribute12;
1474 l_qualifiers_tbl(l_index).attribute13 := l_modifier_qualifier.attribute13;
1475 l_qualifiers_tbl(l_index).attribute14 := l_modifier_qualifier.attribute14;
1476 l_qualifiers_tbl(l_index).attribute15 := l_modifier_qualifier.attribute15;
1477 END IF;
1478 END LOOP;
1479 debug_message('jl qualifier tbl count: ' || l_qualifiers_tbl.count);
1480 --raise Fnd_Api.g_exc_error;
1481 OZF_Utility_PVT.debug_message(FND_LOG.LEVEL_STATEMENT, l_full_name ,'QP Call in process_rltd_modifier_qual---');
1482
1483 IF l_qualifiers_tbl.COUNT > 0 THEN
1484
1485 OZF_DEBUG_PVT.DEBUG_MO('OZF_OFFER_PVT.process_rltd_modifier_qual before calling QP for list_header_id : '|| l_qualifiers_tbl(l_qualifiers_tbl.first).list_header_id);
1486 Qp_Modifiers_Pub.process_modifiers(
1487 p_api_version_number => 1.0,
1488 p_init_msg_list => p_init_msg_list,
1489 p_return_values => Fnd_Api.G_FALSE,
1490 x_return_status => x_return_status,
1491 x_msg_count => x_msg_count,
1492 x_msg_data => x_msg_data,
1493 p_qualifiers_tbl => l_qualifiers_tbl,
1494 x_modifier_list_rec => v_modifier_list_rec,
1495 x_modifier_list_val_rec => v_modifier_list_val_rec,
1496 x_modifiers_tbl => v_modifiers_tbl,
1497 x_modifiers_val_tbl => v_modifiers_val_tbl,
1498 x_qualifiers_tbl => l_qualifiers_tbl_out,
1499 x_qualifiers_val_tbl => v_qualifiers_val_tbl,
1500 x_pricing_attr_tbl => v_pricing_attr_tbl,
1501 x_pricing_attr_val_tbl => v_pricing_attr_val_tbl
1502 );
1503
1504 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
1505 add_message(x_msg_count);
1506 RAISE Fnd_Api.g_exc_error;
1507 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
1508 add_message(x_msg_count);
1509 RAISE Fnd_Api.g_exc_unexpected_error;
1510 END IF;
1511 END IF;
1512 EXCEPTION
1513 WHEN Fnd_Api.G_EXC_ERROR THEN
1514 x_return_status := Fnd_Api.g_ret_sts_error ;
1515 ROLLBACK TO process_rltd_modifier_qual;
1516 Fnd_Msg_Pub.Count_AND_Get
1517 ( p_count => x_msg_count,
1518 p_data => x_msg_data,
1519 p_encoded => Fnd_Api.G_FALSE
1520 );
1521 WHEN Fnd_Api.G_EXC_UNEXPECTED_ERROR THEN
1522 x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
1523 ROLLBACK TO process_rltd_modifier_qual;
1524 Fnd_Msg_Pub.Count_AND_Get
1525 ( p_count => x_msg_count,
1526 p_data => x_msg_data,
1527 p_encoded => Fnd_Api.G_FALSE
1528 );
1529 WHEN OTHERS THEN
1530 x_return_status := Fnd_Api.g_ret_sts_unexp_erroR ;
1531 ROLLBACK TO process_rltd_modifier_qual;
1532 IF Fnd_Msg_Pub.Check_Msg_Level ( Fnd_Msg_Pub.G_MSG_LVL_UNEXP_ERROR ) THEN
1533 Fnd_Msg_Pub.Add_Exc_Msg( G_PKG_NAME,l_api_name);
1534 END IF;
1535 Fnd_Msg_Pub.Count_AND_Get
1536 ( p_count => x_msg_count,
1537 p_data => x_msg_data,
1538 p_encoded => Fnd_Api.G_FALSE
1539 );
1540 END process_rltd_modifier_qual;
1541
1542 PROCEDURE process_market_qualifiers
1543 (
1544 p_init_msg_list IN VARCHAR2
1545 ,p_api_version IN NUMBER
1546 ,p_commit IN VARCHAR2
1547 ,x_return_status OUT NOCOPY VARCHAR2
1548 ,x_msg_count OUT NOCOPY NUMBER
1549 ,x_msg_data OUT NOCOPY VARCHAR2
1550 ,p_qualifiers_tbl IN QUALIFIERS_TBL_TYPE
1551 ,x_error_location OUT NOCOPY NUMBER
1552 ,x_qualifiers_tbl OUT NOCOPY qp_qualifier_rules_pub.qualifiers_tbl_type
1553 )
1554 IS
1555 l_api_version CONSTANT NUMBER := 1.0;
1556 l_api_name CONSTANT VARCHAR2(30) := 'process_market_qualifiers';
1557 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
1558 l_qualifiers_tbl Qp_Qualifier_Rules_Pub.qualifiers_tbl_type;
1559 v_modifier_list_rec qp_modifiers_pub.modifier_list_rec_type;
1560 v_modifier_list_val_rec qp_modifiers_pub.modifier_list_val_rec_type;
1561 v_modifiers_tbl qp_modifiers_pub.modifiers_tbl_type;
1562 v_modifiers_val_tbl qp_modifiers_pub.modifiers_val_tbl_type;
1563 v_qualifiers_tbl qp_qualifier_rules_pub.qualifiers_tbl_type;
1564 v_qualifiers_val_tbl qp_qualifier_rules_pub.qualifiers_val_tbl_type;
1565 v_pricing_attr_tbl qp_modifiers_pub.pricing_attr_tbl_type;
1566 v_pricing_attr_val_tbl qp_modifiers_pub.pricing_attr_val_tbl_type;
1567 l_qualifier_deleted VARCHAR2(1) := 'N';
1568 l_qp_list_header_id NUMBER;
1569 l_offer_type VARCHAR2(30);
1570
1571 CURSOR c_offer_type(l_list_header_id NUMBER) IS
1572 SELECT offer_type
1573 FROM ozf_offers
1574 WHERE qp_list_header_id = l_list_header_id;
1575
1576 BEGIN
1577 SAVEPOINT process_market_qualifiers;
1578
1579 IF Fnd_Api.to_boolean(p_init_msg_list) THEN
1580 Fnd_Msg_Pub.initialize;
1581 END IF;
1582
1583 IF NOT Fnd_Api.compatible_api_call
1584 (
1585 l_api_version,
1586 p_api_version,
1587 l_api_name,
1588 g_pkg_name
1589 )
1590 THEN
1591 RAISE Fnd_Api.g_exc_unexpected_error;
1592 END IF;
1593
1594 x_return_status := Fnd_Api.g_ret_sts_success;
1595 x_error_location := 0;
1596 OZF_Utility_PVT.debug_message(FND_LOG.LEVEL_STATEMENT, l_full_name ,'QP Call in process_market_qualifiers1--- p_qualifiers_tbl.COUNT = '|| p_qualifiers_tbl.COUNT);
1597 IF p_qualifiers_tbl.COUNT > 0 THEN
1598 FOR i IN p_qualifiers_tbl.first..p_qualifiers_tbl.last LOOP
1599 IF p_qualifiers_tbl.EXISTS(i) THEN
1600 IF p_qualifiers_tbl(i).operation <> 'CREATE' THEN
1601 l_qualifiers_tbl(i).qualifier_id := p_qualifiers_tbl(i).qualifier_id;
1602 END IF;
1603 l_qualifiers_tbl(i).list_header_id := p_qualifiers_tbl(i).list_header_id;
1604
1605 IF p_qualifiers_tbl(i).list_line_id IS NOT NULL
1606 AND p_qualifiers_tbl(i).list_line_id <> FND_API.G_MISS_NUM
1607 THEN
1608 l_qualifiers_tbl(i).list_line_id := p_qualifiers_tbl(i).list_line_id;
1609 ELSE
1610 l_qualifiers_tbl(i).list_line_id := -1;
1611 END IF;
1612
1613 l_qualifiers_tbl(i).qualifier_context := p_qualifiers_tbl(i).qualifier_context;
1614 l_qualifiers_tbl(i).qualifier_attribute := p_qualifiers_tbl(i).qualifier_attribute;
1615 l_qualifiers_tbl(i).qualifier_attr_value := p_qualifiers_tbl(i).qualifier_attr_value;
1616 l_qualifiers_tbl(i).qualifier_attr_value_to := p_qualifiers_tbl(i).qualifier_attr_value_to;
1617 l_qualifiers_tbl(i).comparison_operator_code := p_qualifiers_tbl(i).comparison_operator_code;
1618 l_qualifiers_tbl(i).qualifier_grouping_no := p_qualifiers_tbl(i).qualifier_grouping_no;
1619 l_qualifiers_tbl(i).start_date_active := p_qualifiers_tbl(i).start_date_active;
1620 l_qualifiers_tbl(i).end_date_active := p_qualifiers_tbl(i).end_date_active;
1621 l_qualifiers_tbl(i).operation := p_qualifiers_tbl(i).operation;
1622 l_qualifiers_tbl(i).context := p_qualifiers_tbl(i).context;
1623 l_qualifiers_tbl(i).attribute1 := p_qualifiers_tbl(i).attribute1;
1624 l_qualifiers_tbl(i).attribute2 := p_qualifiers_tbl(i).attribute2;
1625 l_qualifiers_tbl(i).attribute3 := p_qualifiers_tbl(i).attribute3;
1626 l_qualifiers_tbl(i).attribute4 := p_qualifiers_tbl(i).attribute4;
1627 l_qualifiers_tbl(i).attribute5 := p_qualifiers_tbl(i).attribute5;
1628 l_qualifiers_tbl(i).attribute6 := p_qualifiers_tbl(i).attribute6;
1629 l_qualifiers_tbl(i).attribute7 := p_qualifiers_tbl(i).attribute7;
1630 l_qualifiers_tbl(i).attribute8 := p_qualifiers_tbl(i).attribute8;
1631 l_qualifiers_tbl(i).attribute9 := p_qualifiers_tbl(i).attribute9;
1632 l_qualifiers_tbl(i).attribute10 := p_qualifiers_tbl(i).attribute10;
1633 l_qualifiers_tbl(i).attribute11 := p_qualifiers_tbl(i).attribute11;
1634 l_qualifiers_tbl(i).attribute12 := p_qualifiers_tbl(i).attribute12;
1635 l_qualifiers_tbl(i).attribute13 := p_qualifiers_tbl(i).attribute13;
1636 l_qualifiers_tbl(i).attribute14 := p_qualifiers_tbl(i).attribute14;
1637 l_qualifiers_tbl(i).attribute15 := p_qualifiers_tbl(i).attribute15;
1638 IF p_qualifiers_tbl(i).operation = 'DELETE' THEN
1639 l_qualifier_deleted := 'Y';
1640 l_qp_list_header_id := p_qualifiers_tbl(i).list_header_id;
1641 END IF;
1642 END IF;
1643 END LOOP;
1644 OZF_DEBUG_PVT.DEBUG_MO('OZF_OFFER_PVT process_market_qualifiers before calling QP for list_header_id : '|| p_qualifiers_tbl(p_qualifiers_tbl.FIRST).list_header_id);
1645 END IF;
1646
1647 Qp_Modifiers_Pub.process_modifiers(
1648 p_api_version_number => 1.0,
1649 p_init_msg_list => p_init_msg_list,
1650 p_return_values => Fnd_Api.G_FALSE,
1651 x_return_status => x_return_status,
1652 x_msg_count => x_msg_count,
1653 x_msg_data => x_msg_data,
1654 p_qualifiers_tbl => l_qualifiers_tbl,
1655 x_modifier_list_rec => v_modifier_list_rec,
1656 x_modifier_list_val_rec => v_modifier_list_val_rec,
1657 x_modifiers_tbl => v_modifiers_tbl,
1658 x_modifiers_val_tbl => v_modifiers_val_tbl,
1659 x_qualifiers_tbl => x_qualifiers_tbl,
1660 x_qualifiers_val_tbl => v_qualifiers_val_tbl,
1661 x_pricing_attr_tbl => v_pricing_attr_tbl,
1662 x_pricing_attr_val_tbl => v_pricing_attr_val_tbl
1663 );
1664
1665 IF x_return_status <> Fnd_Api.g_ret_sts_success THEN
1666 IF v_qualifiers_tbl.COUNT > 0 THEN
1667 FOR i IN v_qualifiers_tbl.first..v_qualifiers_tbl.last LOOP
1668 IF v_qualifiers_tbl.EXISTS(i) THEN
1669 IF v_qualifiers_tbl(i).return_status <> Fnd_Api.g_ret_sts_success THEN
1670 x_error_location := i;
1671 EXIT;
1672 END IF;
1673 END IF;
1674 END LOOP;
1675 END IF;
1676 END IF;
1677
1678 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
1679 add_message(x_msg_count);
1680 RAISE Fnd_Api.g_exc_error;
1681 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
1682 add_message(x_msg_count);
1683 RAISE Fnd_Api.g_exc_unexpected_error;
1684 END IF;
1685
1686 FOR i IN NVL(p_qualifiers_tbl.FIRST, 1)..NVL(p_qualifiers_tbl.LAST, 0) LOOP
1687 OPEN c_offer_type(p_qualifiers_tbl(i).list_header_id);
1688 FETCH c_offer_type INTO l_offer_type;
1689 CLOSE c_offer_type;
1690
1691 debug_message('jl offer type: ' || l_offer_type);
1692 debug_message('jl list line id: ' || p_qualifiers_tbl(i).list_line_id);
1693
1694 IF l_offer_type = 'DEAL' AND p_qualifiers_tbl(i).list_line_id IS NOT NULL AND p_qualifiers_tbl(i).list_line_id <> fnd_api.g_miss_num AND p_qualifiers_tbl(i).list_line_id <> -1 THEN
1695 process_rltd_modifier_qual(
1696 p_init_msg_list => p_init_msg_list,
1697 p_commit => fnd_api.g_false,
1698 p_list_line_id => p_qualifiers_tbl(i).list_line_id,
1699 x_return_status => x_return_status,
1700 x_msg_count => x_msg_count,
1701 x_msg_data => x_msg_data);
1702 END IF;
1703 END LOOP;
1704 --raise Fnd_Api.G_EXC_ERROR;
1705 IF l_qualifier_deleted = 'Y' THEN
1706 UPDATE ozf_offers
1707 SET qualifier_deleted = 'Y'
1708 WHERE qp_list_header_id = l_qp_list_header_id;
1709 END IF;
1710
1711 Fnd_Msg_Pub.Count_AND_Get
1712 ( p_count => x_msg_count,
1713 p_data => x_msg_data,
1714 p_encoded => Fnd_Api.G_FALSE
1715 );
1716 IF p_commit = Fnd_Api.g_true THEN
1717 COMMIT WORK;
1718 END IF;
1719
1720
1721 EXCEPTION
1722 WHEN Fnd_Api.G_EXC_ERROR THEN
1723 x_return_status := Fnd_Api.g_ret_sts_error ;
1724 ROLLBACK TO process_market_qualifiers;
1725 Fnd_Msg_Pub.Count_AND_Get
1726 ( p_count => x_msg_count,
1727 p_data => x_msg_data,
1728 p_encoded => Fnd_Api.G_FALSE
1729 );
1730 WHEN Fnd_Api.G_EXC_UNEXPECTED_ERROR THEN
1731 x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
1732 ROLLBACK TO process_market_qualifiers;
1733 Fnd_Msg_Pub.Count_AND_Get
1734 ( p_count => x_msg_count,
1735 p_data => x_msg_data,
1736 p_encoded => Fnd_Api.G_FALSE
1737 );
1738 WHEN OTHERS THEN
1739 x_return_status := Fnd_Api.g_ret_sts_unexp_erroR ;
1740 ROLLBACK TO process_market_qualifiers;
1741 IF Fnd_Msg_Pub.Check_Msg_Level ( Fnd_Msg_Pub.G_MSG_LVL_UNEXP_ERROR ) THEN
1742 Fnd_Msg_Pub.Add_Exc_Msg( G_PKG_NAME,l_api_name);
1743 END IF;
1744 Fnd_Msg_Pub.Count_AND_Get
1745 ( p_count => x_msg_count,
1746 p_data => x_msg_data,
1747 p_encoded => Fnd_Api.G_FALSE
1748 );
1749 END;
1750
1751 PROCEDURE process_market_qualifiers
1752 (
1753 p_init_msg_list IN VARCHAR2
1754 ,p_api_version IN NUMBER
1755 ,p_commit IN VARCHAR2
1756 ,x_return_status OUT NOCOPY VARCHAR2
1757 ,x_msg_count OUT NOCOPY NUMBER
1758 ,x_msg_data OUT NOCOPY VARCHAR2
1759 ,p_qualifiers_tbl IN QUALIFIERS_TBL_TYPE
1760 ,x_error_location OUT NOCOPY NUMBER
1761 )
1762 IS
1763 l_api_version CONSTANT NUMBER := 1.0;
1764 l_api_name CONSTANT VARCHAR2(30) := 'process_market_qualifiers';
1765 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
1766 l_qualifiers_tbl Qp_Qualifier_Rules_Pub.qualifiers_tbl_type;
1767 v_modifier_list_rec qp_modifiers_pub.modifier_list_rec_type;
1768 v_modifier_list_val_rec qp_modifiers_pub.modifier_list_val_rec_type;
1769 v_modifiers_tbl qp_modifiers_pub.modifiers_tbl_type;
1770 v_modifiers_val_tbl qp_modifiers_pub.modifiers_val_tbl_type;
1771 v_qualifiers_tbl qp_qualifier_rules_pub.qualifiers_tbl_type;
1772 v_qualifiers_val_tbl qp_qualifier_rules_pub.qualifiers_val_tbl_type;
1773 v_pricing_attr_tbl qp_modifiers_pub.pricing_attr_tbl_type;
1774 v_pricing_attr_val_tbl qp_modifiers_pub.pricing_attr_val_tbl_type;
1775 l_qualifier_deleted VARCHAR2(1) := 'N';
1776 l_qp_list_header_id NUMBER;
1777
1778 BEGIN
1779 SAVEPOINT process_market_qualifiers;
1780
1781 IF Fnd_Api.to_boolean(p_init_msg_list) THEN
1782 Fnd_Msg_Pub.initialize;
1783 END IF;
1784
1785 IF NOT Fnd_Api.compatible_api_call
1786 (
1787 l_api_version,
1788 p_api_version,
1789 l_api_name,
1790 g_pkg_name
1791 )
1792 THEN
1793 RAISE Fnd_Api.g_exc_unexpected_error;
1794 END IF;
1795
1796 x_return_status := Fnd_Api.g_ret_sts_success;
1797 x_error_location := 0;
1798 OZF_Utility_PVT.debug_message(FND_LOG.LEVEL_STATEMENT, l_full_name ,'QP Call in process_market_qualifiers2--- p_qualifiers_tbl.COUNT = '|| p_qualifiers_tbl.COUNT);
1799 IF p_qualifiers_tbl.COUNT > 0 THEN
1800 FOR i IN p_qualifiers_tbl.first..p_qualifiers_tbl.last LOOP
1801 IF p_qualifiers_tbl.EXISTS(i) THEN
1802 IF p_qualifiers_tbl(i).operation <> 'CREATE' THEN
1803 l_qualifiers_tbl(i).qualifier_id := p_qualifiers_tbl(i).qualifier_id;
1804 END IF;
1805 l_qualifiers_tbl(i).list_header_id := p_qualifiers_tbl(i).list_header_id;
1806
1807 IF p_qualifiers_tbl(i).list_line_id IS NOT NULL
1808 AND p_qualifiers_tbl(i).list_line_id <> FND_API.G_MISS_NUM
1809 THEN
1810 l_qualifiers_tbl(i).list_line_id := p_qualifiers_tbl(i).list_line_id;
1811 ELSE
1812 l_qualifiers_tbl(i).list_line_id := -1;
1813 END IF;
1814
1815 l_qualifiers_tbl(i).qualifier_context := p_qualifiers_tbl(i).qualifier_context;
1816 l_qualifiers_tbl(i).qualifier_attribute := p_qualifiers_tbl(i).qualifier_attribute;
1817 l_qualifiers_tbl(i).qualifier_attr_value := p_qualifiers_tbl(i).qualifier_attr_value;
1818 l_qualifiers_tbl(i).qualifier_attr_value_to := p_qualifiers_tbl(i).qualifier_attr_value_to;
1819 l_qualifiers_tbl(i).comparison_operator_code := p_qualifiers_tbl(i).comparison_operator_code;
1820 l_qualifiers_tbl(i).qualifier_grouping_no := p_qualifiers_tbl(i).qualifier_grouping_no;
1821 l_qualifiers_tbl(i).start_date_active := p_qualifiers_tbl(i).start_date_active;
1822 l_qualifiers_tbl(i).end_date_active := p_qualifiers_tbl(i).end_date_active;
1823 l_qualifiers_tbl(i).operation := p_qualifiers_tbl(i).operation;
1824 l_qualifiers_tbl(i).context := p_qualifiers_tbl(i).context;
1825 l_qualifiers_tbl(i).attribute1 := p_qualifiers_tbl(i).attribute1;
1826 l_qualifiers_tbl(i).attribute2 := p_qualifiers_tbl(i).attribute2;
1827 l_qualifiers_tbl(i).attribute3 := p_qualifiers_tbl(i).attribute3;
1828 l_qualifiers_tbl(i).attribute4 := p_qualifiers_tbl(i).attribute4;
1829 l_qualifiers_tbl(i).attribute5 := p_qualifiers_tbl(i).attribute5;
1830 l_qualifiers_tbl(i).attribute6 := p_qualifiers_tbl(i).attribute6;
1831 l_qualifiers_tbl(i).attribute7 := p_qualifiers_tbl(i).attribute7;
1832 l_qualifiers_tbl(i).attribute8 := p_qualifiers_tbl(i).attribute8;
1833 l_qualifiers_tbl(i).attribute9 := p_qualifiers_tbl(i).attribute9;
1834 l_qualifiers_tbl(i).attribute10 := p_qualifiers_tbl(i).attribute10;
1835 l_qualifiers_tbl(i).attribute11 := p_qualifiers_tbl(i).attribute11;
1836 l_qualifiers_tbl(i).attribute12 := p_qualifiers_tbl(i).attribute12;
1837 l_qualifiers_tbl(i).attribute13 := p_qualifiers_tbl(i).attribute13;
1838 l_qualifiers_tbl(i).attribute14 := p_qualifiers_tbl(i).attribute14;
1839 l_qualifiers_tbl(i).attribute15 := p_qualifiers_tbl(i).attribute15;
1840 IF p_qualifiers_tbl(i).operation = 'DELETE' THEN
1841 l_qualifier_deleted := 'Y';
1842 l_qp_list_header_id := p_qualifiers_tbl(i).list_header_id;
1843 END IF;
1844 END IF;
1845 END LOOP;
1846 OZF_DEBUG_PVT.DEBUG_MO('OZF_OFFER_PVT process_market_qualifiers2 before calling QP for list_header_id : '||p_qualifiers_tbl(p_qualifiers_tbl.FIRST).list_header_id);
1847 END IF;
1848
1849 Qp_Modifiers_Pub.process_modifiers(
1850 p_api_version_number => 1.0,
1851 p_init_msg_list => p_init_msg_list,
1852 p_return_values => Fnd_Api.G_FALSE,
1853 x_return_status => x_return_status,
1854 x_msg_count => x_msg_count,
1855 x_msg_data => x_msg_data,
1856 p_qualifiers_tbl => l_qualifiers_tbl,
1857 x_modifier_list_rec => v_modifier_list_rec,
1858 x_modifier_list_val_rec => v_modifier_list_val_rec,
1859 x_modifiers_tbl => v_modifiers_tbl,
1860 x_modifiers_val_tbl => v_modifiers_val_tbl,
1861 x_qualifiers_tbl => v_qualifiers_tbl,
1862 x_qualifiers_val_tbl => v_qualifiers_val_tbl,
1863 x_pricing_attr_tbl => v_pricing_attr_tbl,
1864 x_pricing_attr_val_tbl => v_pricing_attr_val_tbl
1865 );
1866
1867 IF x_return_status <> Fnd_Api.g_ret_sts_success THEN
1868 IF v_qualifiers_tbl.COUNT > 0 THEN
1869 FOR i IN v_qualifiers_tbl.first..v_qualifiers_tbl.last LOOP
1870 IF v_qualifiers_tbl.EXISTS(i) THEN
1871 IF v_qualifiers_tbl(i).return_status <> Fnd_Api.g_ret_sts_success THEN
1872 x_error_location := i;
1873 EXIT;
1874 END IF;
1875 END IF;
1876 END LOOP;
1877 END IF;
1878 END IF;
1879
1880 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
1881 add_message(x_msg_count);
1882 RAISE Fnd_Api.g_exc_error;
1883 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
1884 add_message(x_msg_count);
1885 RAISE Fnd_Api.g_exc_unexpected_error;
1886 END IF;
1887
1888 IF l_qualifier_deleted = 'Y' THEN
1889 UPDATE ozf_offers
1890 SET qualifier_deleted = 'Y'
1891 WHERE qp_list_header_id = l_qp_list_header_id;
1892 END IF;
1893
1894 Fnd_Msg_Pub.Count_AND_Get
1895 ( p_count => x_msg_count,
1896 p_data => x_msg_data,
1897 p_encoded => Fnd_Api.G_FALSE
1898 );
1899 IF p_commit = Fnd_Api.g_true THEN
1900 COMMIT WORK;
1901 END IF;
1902
1903 EXCEPTION
1904 WHEN Fnd_Api.G_EXC_ERROR THEN
1905 x_return_status := Fnd_Api.g_ret_sts_error ;
1906 ROLLBACK TO process_market_qualifiers;
1907 Fnd_Msg_Pub.Count_AND_Get
1908 ( p_count => x_msg_count,
1909 p_data => x_msg_data,
1910 p_encoded => Fnd_Api.G_FALSE
1911 );
1912 WHEN Fnd_Api.G_EXC_UNEXPECTED_ERROR THEN
1913 x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
1914 ROLLBACK TO process_market_qualifiers;
1915 Fnd_Msg_Pub.Count_AND_Get
1916 ( p_count => x_msg_count,
1917 p_data => x_msg_data,
1918 p_encoded => Fnd_Api.G_FALSE
1919 );
1920 WHEN OTHERS THEN
1921 x_return_status := Fnd_Api.g_ret_sts_unexp_erroR ;
1922 ROLLBACK TO process_market_qualifiers;
1923 IF Fnd_Msg_Pub.Check_Msg_Level ( Fnd_Msg_Pub.G_MSG_LVL_UNEXP_ERROR ) THEN
1924 Fnd_Msg_Pub.Add_Exc_Msg( G_PKG_NAME,l_api_name);
1925 END IF;
1926 Fnd_Msg_Pub.Count_AND_Get
1927 ( p_count => x_msg_count,
1928 p_data => x_msg_data,
1929 p_encoded => Fnd_Api.G_FALSE
1930 );
1931 END;
1932
1933 PROCEDURE offer_budget(
1934 p_modifier_list_rec IN modifier_list_rec_type
1935 ,x_return_status OUT NOCOPY VARCHAR2
1936 ,x_msg_count OUT NOCOPY NUMBER
1937 ,x_msg_data OUT NOCOPY VARCHAR2
1938 ,p_operation IN VARCHAR2
1939 ) IS
1940
1941 l_api_version CONSTANT NUMBER := 1.0;
1942 l_api_name CONSTANT VARCHAR2(30) := 'offer_budget';
1943 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
1944
1945 l_act_budgets_rec OZF_Actbudgets_Pvt.act_budgets_rec_type;
1946
1947 CURSOR cur_get_offer_budget IS
1948 SELECT activity_budget_id,object_version_number
1949 FROM ozf_act_budgets
1950 WHERE act_budget_used_by_id = p_modifier_list_rec.qp_list_header_id
1951 AND arc_act_budget_used_by = 'OFFR';
1952
1953 l_activity_budget_id NUMBER;
1954 l_object_version_number NUMBER;
1955
1956 BEGIN
1957
1958 ----------- initialize -------------
1959 SAVEPOINT offer_budget;
1960
1961 x_return_status := Fnd_Api.g_ret_sts_success;
1962
1963 l_act_budgets_rec.act_budget_used_by_id := p_modifier_list_rec.qp_list_header_id;
1964 l_act_budgets_rec.budget_source_id := p_modifier_list_rec.budget_source_id;
1965 l_act_budgets_rec.budget_source_type := p_modifier_list_rec.budget_source_type;--'FUND';
1966 l_act_budgets_rec.transfer_type := 'REQUEST';
1967 l_act_budgets_rec.arc_act_budget_used_by := 'OFFR';
1968 l_act_budgets_rec.request_currency := nvl(p_modifier_list_rec.transaction_currency_code,FND_PROFILE.VALUE('JTF_PROFILE_DEFAULT_CURRENCY'));
1969 l_act_budgets_rec.approved_in_currency := nvl(p_modifier_list_rec.transaction_currency_code,FND_PROFILE.VALUE('JTF_PROFILE_DEFAULT_CURRENCY'));
1970 IF p_modifier_list_rec.offer_type = 'SCAN_DATA' THEN
1971 IF p_modifier_list_rec.offer_amount = fnd_api.g_miss_num THEN -- calling from offer detail
1972 l_act_budgets_rec.request_amount := p_modifier_list_rec.budget_amount_tc;
1973 END IF;
1974 ELSE
1975 l_act_budgets_rec.request_amount := p_modifier_list_rec.offer_amount;
1976 END IF;
1977
1978 IF get_budget_source_count(p_modifier_list_rec.qp_list_header_id) = 0 AND l_act_budgets_rec.request_amount >= 0 THEN
1979 OZF_Actbudgets_Pvt.create_act_budgets(
1980 p_api_version => l_api_version
1981 ,p_init_msg_list => Fnd_Api.g_false
1982 ,p_commit => Fnd_Api.g_false
1983 ,p_validation_level => Fnd_Api.g_valid_level_full
1984 ,x_return_status => x_return_status
1985 ,x_msg_count => x_msg_count
1986 ,x_msg_data => x_msg_data
1987 ,p_act_budgets_rec => l_act_budgets_rec
1988 ,x_act_budget_id => l_activity_budget_id
1989 );
1990
1991 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
1992 RAISE Fnd_Api.g_exc_error;
1993 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
1994 RAISE Fnd_Api.g_exc_unexpected_error;
1995 END IF;
1996 ELSE
1997 ----nepanda : fix for FP of bug number 9151787
1998 IF p_operation = 'UPDATE' AND p_modifier_list_rec.offer_type = 'SCAN_DATA' AND get_active_budget_source_count(p_modifier_list_rec.qp_list_header_id) =1 THEN
1999 OPEN cur_get_offer_budget;
2000 FETCH cur_get_offer_budget INTO l_act_budgets_rec.activity_budget_id, l_act_budgets_rec.object_version_number;
2001 CLOSE cur_get_offer_budget;
2002 ozf_utility_pvt.debug_message('GR: l_act_budgets_rec.budget_source_type: ' || l_act_budgets_rec.budget_source_type);
2003 ozf_utility_pvt.debug_message('GR: l_act_budgets_rec.budget_source_id: ' || l_act_budgets_rec.budget_source_id);
2004
2005 OZF_Actbudgets_Pvt.update_act_budgets(
2006 p_api_version => l_api_version
2007 ,p_init_msg_list => Fnd_Api.g_false
2008 ,p_commit => Fnd_Api.g_false
2009 ,p_validation_level => Fnd_Api.g_valid_level_full
2010 ,x_return_status => x_return_status
2011 ,x_msg_count => x_msg_count
2012 ,x_msg_data => x_msg_data
2013 ,p_act_budgets_rec => l_act_budgets_rec
2014 );
2015 END IF;
2016
2017 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
2018 RAISE Fnd_Api.g_exc_error;
2019 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
2020 RAISE Fnd_Api.g_exc_unexpected_error;
2021 END IF;
2022 END IF;
2023
2024 Fnd_Msg_Pub.Count_AND_Get
2025 ( p_count => x_msg_count,
2026 p_data => x_msg_data,
2027 p_encoded => Fnd_Api.G_FALSE
2028 );
2029
2030 EXCEPTION
2031 WHEN Fnd_Api.G_EXC_ERROR THEN
2032 x_return_status := Fnd_Api.g_ret_sts_error ;
2033 ROLLBACK TO offer_budget;
2034 Fnd_Msg_Pub.Count_AND_Get
2035 ( p_count => x_msg_count,
2036 p_data => x_msg_data,
2037 p_encoded => Fnd_Api.G_FALSE
2038 );
2039 WHEN Fnd_Api.G_EXC_UNEXPECTED_ERROR THEN
2040 x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
2041 ROLLBACK TO offer_budget;
2042 Fnd_Msg_Pub.Count_AND_Get
2043 ( p_count => x_msg_count,
2044 p_data => x_msg_data,
2045 p_encoded => Fnd_Api.G_FALSE
2046 );
2047 WHEN OTHERS THEN
2048 x_return_status := Fnd_Api.g_ret_sts_unexp_erroR ;
2049 ROLLBACK TO offer_budget;
2050 IF Fnd_Msg_Pub.Check_Msg_Level ( Fnd_Msg_Pub.G_MSG_LVL_UNEXP_ERROR ) THEN
2051 Fnd_Msg_Pub.Add_Exc_Msg( G_PKG_NAME,l_api_name);
2052 END IF;
2053 Fnd_Msg_Pub.Count_AND_Get
2054 ( p_count => x_msg_count,
2055 p_data => x_msg_data,
2056 p_encoded => Fnd_Api.G_FALSE
2057 );
2058
2059 END offer_budget;
2060
2061
2062 PROCEDURE offer_object_usage(
2063 p_modifier_list_rec IN modifier_list_rec_type
2064 ,x_return_status OUT NOCOPY VARCHAR2
2065 ,x_msg_count OUT NOCOPY NUMBER
2066 ,x_msg_data OUT NOCOPY VARCHAR2
2067 )
2068 IS
2069
2070 l_api_version CONSTANT NUMBER := 1.0;
2071 l_api_name CONSTANT VARCHAR2(30) := 'offer_object_usage';
2072 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
2073
2074 l_act_offer_rec OZF_Act_Offers_Pvt.act_offer_rec_type;
2075 l_activity_offer_id NUMBER := Fnd_Api.g_miss_num;
2076
2077 BEGIN
2078
2079 ---------- initialize -------------
2080 SAVEPOINT offer_object_usage;
2081
2082 x_return_status := Fnd_Api.g_ret_sts_success;
2083
2084 l_act_offer_rec.act_offer_used_by_id := p_modifier_list_rec.offer_used_by_id;
2085 l_act_offer_rec.arc_act_offer_used_by := 'CAMP';
2086 l_act_offer_rec.qp_list_header_id := p_modifier_list_rec.qp_list_header_id;
2087 l_act_offer_rec.primary_offer_flag := 'N';
2088
2089 OZF_Act_Offers_Pvt.Create_Act_Offer
2090 (
2091 p_api_version => 1.0,
2092 p_init_msg_list => FND_API.g_false,
2093 p_commit => Fnd_Api.g_false,
2094 p_validation_level => Fnd_Api.g_valid_level_full,
2095 x_return_status => x_return_status ,
2096 x_msg_count => x_msg_count,
2097 x_msg_data => x_msg_data,
2098 p_act_offer_rec => l_act_offer_rec,
2099 x_act_offer_id => l_activity_offer_id
2100 );
2101
2102 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
2103 RAISE Fnd_Api.g_exc_error;
2104 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
2105 RAISE Fnd_Api.g_exc_unexpected_error;
2106 END IF;
2107
2108 Fnd_Msg_Pub.Count_AND_Get
2109 ( p_count => x_msg_count,
2110 p_data => x_msg_data,
2111 p_encoded => Fnd_Api.G_FALSE
2112 );
2113
2114 EXCEPTION
2115 WHEN Fnd_Api.G_EXC_ERROR THEN
2116 x_return_status := Fnd_Api.g_ret_sts_error ;
2117 ROLLBACK TO offer_object_usage;
2118 Fnd_Msg_Pub.Count_AND_Get
2119 ( p_count => x_msg_count,
2120 p_data => x_msg_data,
2121 p_encoded => Fnd_Api.G_FALSE
2122 );
2123 WHEN Fnd_Api.G_EXC_UNEXPECTED_ERROR THEN
2124 x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
2125 ROLLBACK TO offer_object_usage;
2126 Fnd_Msg_Pub.Count_AND_Get
2127 ( p_count => x_msg_count,
2128 p_data => x_msg_data,
2129 p_encoded => Fnd_Api.G_FALSE
2130 );
2131 WHEN OTHERS THEN
2132 x_return_status := Fnd_Api.g_ret_sts_unexp_erroR ;
2133 ROLLBACK TO offer_object_usage;
2134 IF Fnd_Msg_Pub.Check_Msg_Level ( Fnd_Msg_Pub.G_MSG_LVL_UNEXP_ERROR ) THEN
2135 Fnd_Msg_Pub.Add_Exc_Msg( G_PKG_NAME,l_api_name);
2136 END IF;
2137 Fnd_Msg_Pub.Count_AND_Get
2138 ( p_count => x_msg_count,
2139 p_data => x_msg_data,
2140 p_encoded => Fnd_Api.G_FALSE
2141 );
2142 END offer_object_usage;
2143
2144
2145 PROCEDURE process_sales_method
2146 (
2147 p_init_msg_list IN VARCHAR2
2148 , p_api_version IN NUMBER
2149 , p_commit IN VARCHAR2
2150 , p_modifier_list_rec IN modifier_list_rec_type
2151 , x_return_status OUT NOCOPY VARCHAR2
2152 , x_msg_count OUT NOCOPY NUMBER
2153 , x_msg_data OUT NOCOPY VARCHAR2
2154 )
2155 IS
2156 CURSOR c_qualifier_id(l_list_header_id NUMBER) IS
2157 SELECT qualifier_id
2158 FROM qp_qualifiers
2159 WHERE list_header_id = l_list_header_id
2160 AND qualifier_context = 'SOLD_BY'
2161 ORDER BY qualifier_id;
2162
2163 l_qualifier_id NUMBER;
2164
2165 l_operation VARCHAR2(30);
2166 l_qualifier_rec OZF_OFFER_PVT.qualifiers_Rec_Type;
2167
2168 BEGIN
2169 x_return_status := FND_API.G_RET_STS_SUCCESS;
2170 debug_message('Sales method flag = : '||p_modifier_list_rec.sales_method_flag);
2171 IF p_modifier_list_rec.sales_method_flag = 'I' OR p_modifier_list_rec.sales_method_flag = 'D' THEN
2172 -- l_qualifier_rec.operation := 'CREATE';
2173 l_qualifier_rec.qualifier_id := FND_API.g_miss_num;
2174 l_qualifier_rec.qualifier_context := 'SOLD_BY';
2175 l_qualifier_rec.qualifier_attribute := 'QUALIFIER_ATTRIBUTE1';
2176 l_qualifier_rec.qualifier_attr_value := p_modifier_list_rec.sales_method_flag;
2177 l_qualifier_rec.comparison_operator_code := '=';
2178 l_qualifier_rec.qualifier_grouping_no := -1; --20; bug 11844921
2179 l_qualifier_rec.list_header_id := p_modifier_list_rec.qp_list_header_id;
2180
2181 OPEN c_qualifier_id(p_modifier_list_rec.qp_list_header_id);
2182 FETCH c_qualifier_id INTO l_qualifier_id;
2183 IF (c_qualifier_id%NOTFOUND) THEN
2184 l_operation := 'CREATE';
2185 ELSE
2186 l_operation := 'UPDATE';
2187 l_qualifier_rec.qualifier_id := l_qualifier_id;
2188 END IF;
2189 debug_message('"Operation is : '||l_operation);
2190 IF l_operation ='UPDATE' THEN -- in case there are multiple only the first created will be updated
2191 OZF_Volume_Offer_Qual_PVT.update_vo_qualifier
2192 (
2193 p_api_version_number => p_api_version
2194 , p_init_msg_list => p_init_msg_list
2195 , p_commit => p_commit
2196 , p_validation_level => FND_API.G_VALID_LEVEL_FULL
2197
2198 , x_return_status => x_return_status
2199 , x_msg_count => x_msg_count
2200 , x_msg_data => x_msg_data
2201
2202 , p_qualifiers_rec => l_qualifier_rec -- IN OZF_OFFER_PVT.qualifiers_Rec_Type
2203 );
2204 ELSIF l_operation ='CREATE' THEN
2205
2206 OZF_Volume_Offer_Qual_PVT.create_vo_qualifier
2207 (
2208 p_api_version_number => p_api_version
2209 , p_init_msg_list => p_init_msg_list
2210 , p_commit => p_commit
2211 , p_validation_level => FND_API.G_VALID_LEVEL_FULL
2212
2213 , x_return_status => x_return_status
2214 , x_msg_count => x_msg_count
2215 , x_msg_data => x_msg_data
2216
2217 , p_qualifiers_rec => l_qualifier_rec -- IN OZF_OFFER_PVT.qualifiers_Rec_Type
2218 );
2219 END IF;
2220 END IF;
2221
2222 END process_sales_method;
2223
2224 -------------------------------------------------------
2225 -- Start of Comments
2226 --
2227 -- NAME
2228 -- Offer_qualifier
2229 --
2230 -- PURPOSE
2231 -- This Procedure create Offer QUalifiers from Create or Details screen for Quick Offers.
2232 --
2233 -- IN
2234 -- p_modifier_list_rec IN modifier_list_rec_type,
2235 --
2236 -- OUT
2237 -- x_return_status OUT VARCHAR2,
2238 -- x_msg_count OUT NUMBER,
2239 -- x_msg_data OUT VARCHAR2,
2240 --
2241 -- NOTES
2242 --
2243 -- HISTORY
2244 -- Tue May 03 2005:2/37 PM RSSHARMA Modified.
2245 -- Support creation of Sales method QUalifier from Create Offer Screen.
2246 -- End of Comments
2247 ---------------------------------------------------------
2248
2249 PROCEDURE offer_qualifier(
2250 p_modifier_list_rec IN modifier_list_rec_type
2251 ,x_return_status OUT NOCOPY VARCHAR2
2252 ,x_msg_count OUT NOCOPY NUMBER
2253 ,x_msg_data OUT NOCOPY VARCHAR2
2254 )IS
2255
2256 l_api_version CONSTANT NUMBER := 1.0;
2257 l_api_name CONSTANT VARCHAR2(30) := 'offer_qualifier';
2258 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
2259
2260 l_qualifier_tbl qualifiers_tbl_type;
2261 l_error_location NUMBER := 0;
2262 l_qualifier_id NUMBER;
2263
2264 CURSOR c_qualifier_id(l_list_header_id NUMBER) IS
2265 SELECT qualifier_id
2266 FROM qp_qualifiers
2267 WHERE list_header_id = l_list_header_id
2268 AND list_line_id = -1
2269 AND qualifier_context IN ('CUSTOMER', 'CUSTOMER_GROUP','TERRITORY')
2270 and rownum < 2;
2271
2272 CURSOR c_sm_qualifier_id(l_list_header_id NUMBER) IS
2273 SELECT qualifier_id
2274 FROM qp_qualifiers
2275 WHERE list_header_id = l_list_header_id
2276 AND list_line_id = -1
2277 AND qualifier_context IN ('SOLD_BY');
2278
2279 i NUMBER := 0;
2280 x_qualifiers_tbl qp_qualifier_rules_pub.qualifiers_tbl_type;
2281
2282 ---Start POS profile Batch changes
2283 cursor check_Ship_From_Stock(p_offr_code VARCHAR2) IS
2284 SELECT ship_from_stock_flag
2285 FROM ozf_request_headers_all_b
2286 WHERE agreement_number=p_offr_code
2287 AND ship_from_stock_flag='Y';
2288
2289 l_spr_accr_offr VARCHAR2(1):='N';
2290
2291 ---End POS profile Batch changes
2292
2293 BEGIN
2294
2295 ----------- initialize -------------
2296 SAVEPOINT offer_qualifier;
2297
2298 x_return_status := Fnd_Api.g_ret_sts_success;
2299 ---Start POS profile Batch changes
2300
2301 If p_modifier_list_rec.custom_setup_id=119 THEN
2302 Open check_Ship_From_Stock(p_modifier_list_rec.offer_code);
2303 Fetch check_Ship_From_Stock into l_spr_accr_offr;
2304 IF (check_Ship_From_Stock%NOTFOUND) THEN
2305 l_spr_accr_offr :='N';
2306 END IF;
2307 Close check_Ship_From_Stock;
2308 END IF;
2309
2310 ---End POS profile Batch changes
2311
2312
2313 IF p_modifier_list_rec.modifier_operation ='UPDATE' THEN
2314 OPEN c_qualifier_id(p_modifier_list_rec.qp_list_header_id);
2315 FETCH c_qualifier_id INTO l_qualifier_id;
2316 CLOSE c_qualifier_id;
2317
2318 IF (l_qualifier_id IS NOT NULL AND l_qualifier_id <> FND_API.g_miss_num) THEN
2319 i := i + 1;
2320 l_qualifier_tbl(i).operation := 'DELETE';
2321 l_qualifier_tbl(i).list_header_id := p_modifier_list_rec.qp_list_header_id;
2322 l_qualifier_tbl(i).qualifier_id := l_qualifier_id;
2323 END IF;
2324
2325 l_qualifier_id := NULL;
2326
2327 OPEN c_sm_qualifier_id(p_modifier_list_rec.qp_list_header_id);
2328 FETCH c_sm_qualifier_id INTO l_qualifier_id;
2329 CLOSE c_sm_qualifier_id;
2330
2331 IF (l_qualifier_id IS NOT NULL AND l_qualifier_id <> FND_API.g_miss_num) THEN
2332 i := i + 1;
2333 l_qualifier_tbl(i).operation := 'DELETE';
2334 l_qualifier_tbl(i).list_header_id := p_modifier_list_rec.qp_list_header_id;
2335 l_qualifier_tbl(i).qualifier_id := l_qualifier_id;
2336 END IF;
2337
2338 IF l_qualifier_tbl.COUNT > 0 THEN
2339 OZF_Utility_PVT.debug_message(FND_LOG.LEVEL_STATEMENT,l_full_name,'before process_market_qualifiers 1 l_qualifier_tbl.COUNT = '|| l_qualifier_tbl.COUNT);
2340 process_market_qualifiers
2341 (p_api_version => 1.0,
2342 p_init_msg_list => Fnd_Api.g_false,
2343 p_commit => Fnd_Api.g_false,
2344 x_return_status => x_return_status ,
2345 x_msg_count => x_msg_count,
2346 x_msg_data => x_msg_data,
2347 p_qualifiers_tbl => l_qualifier_tbl,
2348 x_error_location => l_error_location,
2349 x_qualifiers_tbl => x_qualifiers_tbl);
2350
2351 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
2352 RAISE Fnd_Api.g_exc_error;
2353 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
2354 RAISE Fnd_Api.g_exc_unexpected_error;
2355 END IF;
2356 END IF; -- FOR l_qualifier_tbl(1).qualifier_id IS NOT NULL, bug fix 3629490
2357 END IF; -- end UPDATE mode
2358
2359 i := 0;
2360 l_qualifier_tbl.DELETE;
2361
2362 IF (p_modifier_list_rec.ql_qualifier_id <> Fnd_Api.g_miss_num AND p_modifier_list_rec.ql_qualifier_id IS NOT NULL) THEN
2363 i := i+1;
2364 l_qualifier_tbl(i).operation := p_modifier_list_rec.modifier_operation ;
2365 l_qualifier_tbl(i).list_header_id := p_modifier_list_rec.qp_list_header_id;
2366
2367 IF p_modifier_list_rec.ql_qualifier_type = 'CUSTOMER' THEN
2368 l_qualifier_tbl(i).qualifier_context := 'CUSTOMER';
2369 l_qualifier_tbl(i).qualifier_attribute := 'QUALIFIER_ATTRIBUTE2';
2370 ELSIF p_modifier_list_rec.ql_qualifier_type = 'CUSTOMER_BILL_TO' THEN
2371 l_qualifier_tbl(i).qualifier_context := 'CUSTOMER';
2372 l_qualifier_tbl(i).qualifier_attribute := 'QUALIFIER_ATTRIBUTE14';
2373 ELSIF p_modifier_list_rec.ql_qualifier_type = 'BUYER' THEN
2374 l_qualifier_tbl(i).qualifier_context := 'CUSTOMER_GROUP';
2375 l_qualifier_tbl(i).qualifier_attribute := 'QUALIFIER_ATTRIBUTE3';
2376 ELSIF p_modifier_list_rec.ql_qualifier_type = 'LIST' THEN
2377 l_qualifier_tbl(i).qualifier_context := 'CUSTOMER_GROUP';
2378 l_qualifier_tbl(i).qualifier_attribute := 'QUALIFIER_ATTRIBUTE1';
2379 ELSIF p_modifier_list_rec.ql_qualifier_type = 'SEGMENT' THEN
2380 l_qualifier_tbl(i).qualifier_context := 'CUSTOMER_GROUP';
2381 l_qualifier_tbl(i).qualifier_attribute := 'QUALIFIER_ATTRIBUTE2';
2382 ELSIF p_modifier_list_rec.ql_qualifier_type = 'TERRITORY' THEN
2383 l_qualifier_tbl(i).qualifier_context := 'TERRITORY';
2384 l_qualifier_tbl(i).qualifier_attribute := 'QUALIFIER_ATTRIBUTE1';
2385 ELSIF p_modifier_list_rec.ql_qualifier_type = 'SHIP_TO' THEN
2386 l_qualifier_tbl(i).qualifier_context := 'CUSTOMER';
2387 l_qualifier_tbl(i).qualifier_attribute := 'QUALIFIER_ATTRIBUTE11';
2388 END IF;
2389 -- rssharma Added Code for using Territories as Qualifeir Type
2390
2391
2392 l_qualifier_tbl(i).qualifier_attr_value := p_modifier_list_rec.ql_qualifier_id;
2393 l_qualifier_tbl(i).comparison_operator_code := '=';
2394 l_qualifier_tbl(i).qualifier_grouping_no := 10;
2395 -- rssharma 28-Oct-2002 changed grouping number to -1 from 10
2396
2397 l_qualifier_tbl(i).operation := 'CREATE';
2398 l_qualifier_tbl(i).qualifier_id := FND_API.g_miss_num;
2399 END IF;
2400
2401 IF p_modifier_list_rec.sales_method_flag IS NOT NULL AND p_modifier_list_rec.sales_method_flag <> FND_API.g_miss_char THEN
2402 i := i+1;
2403
2404 IF p_modifier_list_rec.sales_method_flag = 'I' OR p_modifier_list_rec.sales_method_flag = 'D' THEN
2405 l_qualifier_tbl(i).operation := 'CREATE';
2406 l_qualifier_tbl(i).qualifier_id := FND_API.g_miss_num;
2407 l_qualifier_tbl(i).qualifier_context := 'SOLD_BY';
2408 l_qualifier_tbl(i).qualifier_attribute := 'QUALIFIER_ATTRIBUTE1';
2409 l_qualifier_tbl(i).qualifier_attr_value := p_modifier_list_rec.sales_method_flag;
2410 l_qualifier_tbl(i).comparison_operator_code := '=';
2411 --Modified the following piece of code to set the qualifier grouping no for POS profile changes
2412 IF l_spr_accr_offr='Y' AND p_modifier_list_rec.sales_method_flag = 'I' THEN
2413 l_qualifier_tbl(i).qualifier_grouping_no := 10;
2414 ELSE
2415 l_qualifier_tbl(i).qualifier_grouping_no := -1; --20; bug 11844921
2416 END IF;
2417 l_qualifier_tbl(i).list_header_id := p_modifier_list_rec.qp_list_header_id;
2418 END IF;
2419 END IF;
2420
2421 ---Start POS profile Batch changes
2422
2423 If (p_modifier_list_rec.custom_setup_id = 119 AND l_spr_accr_offr = 'Y') THEN
2424 IF (p_modifier_list_rec.ql_qualifier_id <> Fnd_Api.g_miss_num AND p_modifier_list_rec.ql_qualifier_id IS NOT NULL) THEN
2425 i := i+1;
2426 l_qualifier_tbl(i).operation := 'CREATE' ;
2427 l_qualifier_tbl(i).qualifier_id := FND_API.g_miss_num;
2428 l_qualifier_tbl(i).qualifier_context := 'SOLD_BY';
2429 l_qualifier_tbl(i).qualifier_attribute := 'QUALIFIER_ATTRIBUTE2';
2430 l_qualifier_tbl(i).qualifier_attr_value := p_modifier_list_rec.ql_qualifier_id;
2431 l_qualifier_tbl(i).comparison_operator_code := '=';
2432 l_qualifier_tbl(i).qualifier_grouping_no := 10;
2433 l_qualifier_tbl(i).list_header_id := p_modifier_list_rec.qp_list_header_id;
2434
2435 END IF;
2436 END IF;
2437 ---End POS profile Batch changes
2438
2439
2440 --raise Fnd_Api.g_exc_error;
2441 IF l_qualifier_tbl.COUNT > 0 THEN
2442 OZF_Utility_PVT.debug_message(FND_LOG.LEVEL_STATEMENT,l_full_name,'before process_market_qualifiers 2 l_qualifier_tbl.COUNT = '|| l_qualifier_tbl.COUNT);
2443 process_market_qualifiers
2444 (p_api_version => 1.0,
2445 p_init_msg_list => Fnd_Api.g_false,
2446 p_commit => Fnd_Api.g_false,
2447 x_return_status => x_return_status ,
2448 x_msg_count => x_msg_count,
2449 x_msg_data => x_msg_data,
2450 p_qualifiers_tbl => l_qualifier_tbl,
2451 x_error_location => l_error_location,
2452 x_qualifiers_tbl => x_qualifiers_tbl);
2453
2454 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
2455 RAISE Fnd_Api.g_exc_error;
2456 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
2457 RAISE Fnd_Api.g_exc_unexpected_error;
2458 END IF;
2459 END IF;
2460
2461 Fnd_Msg_Pub.Count_AND_Get
2462 ( p_count => x_msg_count,
2463 p_data => x_msg_data,
2464 p_encoded => Fnd_Api.G_FALSE
2465 );
2466
2467 EXCEPTION
2468 WHEN Fnd_Api.G_EXC_ERROR THEN
2469 x_return_status := Fnd_Api.g_ret_sts_error ;
2470 ROLLBACK TO offer_qualifier;
2471 Fnd_Msg_Pub.Count_AND_Get
2472 ( p_count => x_msg_count,
2473 p_data => x_msg_data,
2474 p_encoded => Fnd_Api.G_FALSE
2475 );
2476 WHEN Fnd_Api.G_EXC_UNEXPECTED_ERROR THEN
2477 x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
2478 ROLLBACK TO offer_qualifier;
2479 Fnd_Msg_Pub.Count_AND_Get
2480 ( p_count => x_msg_count,
2481 p_data => x_msg_data,
2482 p_encoded => Fnd_Api.G_FALSE
2483 );
2484 WHEN OTHERS THEN
2485 x_return_status := Fnd_Api.g_ret_sts_unexp_erroR ;
2486 ROLLBACK TO offer_qualifier;
2487 IF Fnd_Msg_Pub.Check_Msg_Level ( Fnd_Msg_Pub.G_MSG_LVL_UNEXP_ERROR ) THEN
2488 Fnd_Msg_Pub.Add_Exc_Msg( G_PKG_NAME,l_api_name);
2489 END IF;
2490 Fnd_Msg_Pub.Count_AND_Get
2491 ( p_count => x_msg_count,
2492 p_data => x_msg_data,
2493 p_encoded => Fnd_Api.G_FALSE
2494 );
2495 END offer_qualifier;
2496
2497
2498 PROCEDURE vo_qualifier
2499 (
2500 p_init_msg_list IN VARCHAR2
2501 ,p_api_version IN NUMBER
2502 ,p_commit IN VARCHAR2
2503 ,x_return_status OUT NOCOPY VARCHAR2
2504 ,x_msg_count OUT NOCOPY NUMBER
2505 ,x_msg_data OUT NOCOPY VARCHAR2
2506 ,p_modifier_list_rec IN modifier_list_rec_type
2507 )
2508 IS
2509 l_api_version CONSTANT NUMBER := 1.0;
2510 l_api_name CONSTANT VARCHAR2(30) := 'VO_qualifier';
2511 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
2512
2513 l_qualifier_tbl qualifiers_tbl_type;
2514 l_error_location NUMBER := 0;
2515
2516 CURSOR c_qualifier_id(l_list_header_id NUMBER) IS
2517 SELECT qualifier_id
2518 FROM qp_qualifiers
2519 WHERE list_header_id = l_list_header_id
2520 AND qualifier_context IN ('CUSTOMER', 'CUSTOMER_GROUP','TERRITORY')
2521 ORDER BY qualifier_id;
2522 l_qualifier_id NUMBER;
2523
2524 l_operation VARCHAR2(30);
2525
2526 i NUMBER := 0;
2527 x_qualifiers_tbl qp_qualifier_rules_pub.qualifiers_tbl_type;
2528 l_qualifiers_rec OZF_OFFER_PVT.qualifiers_Rec_Type;
2529 BEGIN
2530
2531 ----------- initialize -------------
2532 SAVEPOINT vo_qualifier_pvt;
2533
2534 x_return_status := Fnd_Api.g_ret_sts_success;
2535 IF
2536 (p_modifier_list_rec.ql_qualifier_id <> Fnd_Api.g_miss_num
2537 AND p_modifier_list_rec.ql_qualifier_id IS NOT NULL)
2538 THEN
2539 -- i := i+1;
2540 -- l_qualifiers_rec.operation := p_modifier_list_rec.modifier_operation ;
2541 l_qualifiers_rec.list_header_id := p_modifier_list_rec.qp_list_header_id;
2542
2543 IF p_modifier_list_rec.ql_qualifier_type = 'CUSTOMER' THEN
2544 l_qualifiers_rec.qualifier_context := 'CUSTOMER';
2545 l_qualifiers_rec.qualifier_attribute := 'QUALIFIER_ATTRIBUTE2';
2546 ELSIF p_modifier_list_rec.ql_qualifier_type = 'CUSTOMER_BILL_TO' THEN
2547 l_qualifiers_rec.qualifier_context := 'CUSTOMER';
2548 l_qualifiers_rec.qualifier_attribute := 'QUALIFIER_ATTRIBUTE14';
2549 ELSIF p_modifier_list_rec.ql_qualifier_type = 'BUYER' THEN
2550 l_qualifiers_rec.qualifier_context := 'CUSTOMER_GROUP';
2551 l_qualifiers_rec.qualifier_attribute := 'QUALIFIER_ATTRIBUTE3';
2552 ELSIF p_modifier_list_rec.ql_qualifier_type = 'LIST' THEN
2553 l_qualifiers_rec.qualifier_context := 'CUSTOMER_GROUP';
2554 l_qualifiers_rec.qualifier_attribute := 'QUALIFIER_ATTRIBUTE1';
2555 ELSIF p_modifier_list_rec.ql_qualifier_type = 'SEGMENT' THEN
2556 l_qualifiers_rec.qualifier_context := 'CUSTOMER_GROUP';
2557 l_qualifiers_rec.qualifier_attribute := 'QUALIFIER_ATTRIBUTE2';
2558 ELSIF p_modifier_list_rec.ql_qualifier_type = 'TERRITORY' THEN
2559 l_qualifiers_rec.qualifier_context := 'TERRITORY';
2560 l_qualifiers_rec.qualifier_attribute := 'QUALIFIER_ATTRIBUTE1';
2561 ELSIF p_modifier_list_rec.ql_qualifier_type = 'SHIP_TO' THEN
2562 l_qualifiers_rec.qualifier_context := 'CUSTOMER';
2563 l_qualifiers_rec.qualifier_attribute := 'QUALIFIER_ATTRIBUTE11';
2564 -- QUALIFIER_ATTRIBUTE11
2565 END IF;
2566 -- rssharma Added Code for using Territories as Qualifeir Type
2567
2568
2569 l_qualifiers_rec.qualifier_attr_value := p_modifier_list_rec.ql_qualifier_id;
2570 l_qualifiers_rec.comparison_operator_code := '=';
2571 l_qualifiers_rec.qualifier_grouping_no := 10;
2572
2573 OPEN c_qualifier_id(p_modifier_list_rec.qp_list_header_id);
2574 FETCH c_qualifier_id INTO l_qualifier_id;
2575 IF (c_qualifier_id%NOTFOUND) THEN
2576 l_operation := 'CREATE';
2577 ELSE
2578 l_operation := 'UPDATE';
2579 l_qualifiers_rec.qualifier_id := l_qualifier_id;
2580 END IF;
2581 IF l_operation ='UPDATE' THEN -- in case there are multiple only the first created will be updated
2582 OZF_Volume_Offer_Qual_PVT.update_vo_qualifier
2583 (
2584 p_api_version_number => p_api_version
2585 , p_init_msg_list => p_init_msg_list
2586 , p_commit => p_commit
2587 , p_validation_level => FND_API.G_VALID_LEVEL_FULL
2588
2589 , x_return_status => x_return_status
2590 , x_msg_count => x_msg_count
2591 , x_msg_data => x_msg_data
2592
2593 , p_qualifiers_rec => l_qualifiers_rec -- IN OZF_OFFER_PVT.qualifiers_Rec_Type
2594 );
2595 ELSIF l_operation ='CREATE' THEN
2596
2597 OZF_Volume_Offer_Qual_PVT.create_vo_qualifier
2598 (
2599 p_api_version_number => p_api_version
2600 , p_init_msg_list => p_init_msg_list
2601 , p_commit => p_commit
2602 , p_validation_level => FND_API.G_VALID_LEVEL_FULL
2603
2604 , x_return_status => x_return_status
2605 , x_msg_count => x_msg_count
2606 , x_msg_data => x_msg_data
2607
2608 , p_qualifiers_rec => l_qualifiers_rec -- IN OZF_OFFER_PVT.qualifiers_Rec_Type
2609 );
2610 END IF;
2611
2612 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
2613 RAISE Fnd_Api.g_exc_error;
2614 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
2615 RAISE Fnd_Api.g_exc_unexpected_error;
2616 END IF;
2617
2618 debug_message('"Calling process sales method');
2619 process_sales_method
2620 (
2621 p_init_msg_list => p_init_msg_list
2622 , p_api_version => p_api_version
2623 , p_commit => p_commit
2624 , p_modifier_list_rec => p_modifier_list_rec
2625 , x_return_status => x_return_status
2626 , x_msg_count => x_msg_count
2627 , x_msg_data => x_msg_data
2628 );
2629
2630 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
2631 RAISE Fnd_Api.g_exc_error;
2632 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
2633 RAISE Fnd_Api.g_exc_unexpected_error;
2634 END IF;
2635
2636
2637 Fnd_Msg_Pub.Count_AND_Get
2638 ( p_count => x_msg_count,
2639 p_data => x_msg_data,
2640 p_encoded => Fnd_Api.G_FALSE
2641 );
2642 END IF;
2643 EXCEPTION
2644 WHEN Fnd_Api.G_EXC_ERROR THEN
2645 x_return_status := Fnd_Api.g_ret_sts_error ;
2646 ROLLBACK TO vo_qualifier_pvt;
2647 Fnd_Msg_Pub.Count_AND_Get
2648 ( p_count => x_msg_count,
2649 p_data => x_msg_data,
2650 p_encoded => Fnd_Api.G_FALSE
2651 );
2652 WHEN Fnd_Api.G_EXC_UNEXPECTED_ERROR THEN
2653 x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
2654 ROLLBACK TO vo_qualifier_pvt;
2655 Fnd_Msg_Pub.Count_AND_Get
2656 ( p_count => x_msg_count,
2657 p_data => x_msg_data,
2658 p_encoded => Fnd_Api.G_FALSE
2659 );
2660 WHEN OTHERS THEN
2661 x_return_status := Fnd_Api.g_ret_sts_unexp_erroR ;
2662 ROLLBACK TO vo_qualifier_pvt;
2663 IF Fnd_Msg_Pub.Check_Msg_Level ( Fnd_Msg_Pub.G_MSG_LVL_UNEXP_ERROR ) THEN
2664 Fnd_Msg_Pub.Add_Exc_Msg( G_PKG_NAME,l_api_name);
2665 END IF;
2666 Fnd_Msg_Pub.Count_AND_Get
2667 ( p_count => x_msg_count,
2668 p_data => x_msg_data,
2669 p_encoded => Fnd_Api.G_FALSE
2670 );
2671 END vo_qualifier;
2672
2673
2674 --nirprasa
2675 PROCEDURE populate_limits_rec(
2676 p_limit_type IN VARCHAR2,
2677 x_limits_rec OUT NOCOPY QP_Limits_PUB.Limits_Rec_Type,
2678 p_limit_exceed_action_code IN VARCHAR2 DEFAULT NULL) IS
2679 BEGIN
2680
2681 IF p_limit_exceed_action_code IS NOT NULL AND p_limit_exceed_action_code <> FND_API.G_MISS_CHAR THEN
2682 x_limits_rec.limit_exceed_action_code := p_limit_exceed_action_code;
2683 END IF;
2684
2685 x_limits_rec.limit_hold_flag := 'Y';
2686 x_limits_rec.organization_flag := 'N';
2687 x_limits_rec.operation := 'CREATE';
2688
2689 IF p_limit_type = 'MAX_QTY_PER_ORDER' THEN
2690 x_limits_rec.limit_level_code := 'TRANSACTION';
2691 ELSE
2692 x_limits_rec.limit_level_code := 'ACROSS_TRANSACTION';
2693 END IF;
2694
2695 IF p_limit_type = 'MAX_ORDERS_PER_CUSTOMER' THEN
2696 x_limits_rec.basis := 'USAGE';
2697 ELSIF p_limit_type = 'MAX_AMOUNT_PER_RULE' THEN
2698 x_limits_rec.basis := 'COST';
2699 ELSIF p_limit_type IN ('MAX_QTY_PER_ORDER','MAX_QTY_PER_CUSTOMER','MAX_QTY_PER_RULE') THEN
2700 x_limits_rec.basis := 'QUANTITY';
2701 END IF;
2702
2703 IF p_limit_type IN ('MAX_QTY_PER_CUSTOMER','MAX_ORDERS_PER_CUSTOMER') THEN
2704 x_limits_rec.multival_attr1_type := 'QUALIFIER';
2705 x_limits_rec.multival_attr1_context := 'CUSTOMER';
2706 x_limits_rec.multival_attribute1 := 'QUALIFIER_ATTRIBUTE2';
2707 END IF;
2708
2709 IF p_limit_type = 'MAX_QTY_PER_ORDER' THEN
2710 x_limits_rec.limit_number := 1;
2711 ELSIF p_limit_type = 'MAX_QTY_PER_CUSTOMER' THEN
2712 x_limits_rec.limit_number := 2;
2713 ELSIF p_limit_type = 'MAX_QTY_PER_RULE' THEN
2714 x_limits_rec.limit_number := 3;
2715 ELSIF p_limit_type = 'MAX_ORDERS_PER_CUSTOMER' THEN
2716 x_limits_rec.limit_number := 4;
2717 ELSIF p_limit_type = 'MAX_AMOUNT_PER_RULE' THEN
2718 x_limits_rec.limit_number := 5;
2719 END IF;
2720 END populate_limits_rec;
2721
2722 -- This procedure will only handle limits at the line level. Header Level
2723 -- Limits are processed in process_qp_list_header itself.
2724
2725 PROCEDURE process_limits(
2726 x_return_status OUT NOCOPY VARCHAR2
2727 ,x_msg_count OUT NOCOPY NUMBER
2728 ,x_msg_data OUT NOCOPY VARCHAR2
2729 ,p_limit_type IN VARCHAR2
2730 ,p_limit_amount IN NUMBER DEFAULT fnd_api.g_miss_num
2731 ,p_list_line_id IN NUMBER DEFAULT fnd_api.g_miss_num
2732 ,p_list_header_id IN NUMBER
2733 ,p_limit_id IN NUMBER DEFAULT fnd_api.g_miss_num
2734 ,p_limit_exceed_action_code IN VARCHAR2 DEFAULT NULL
2735 )
2736 IS
2737
2738 l_api_version CONSTANT NUMBER := 1.0;
2739 l_api_name CONSTANT VARCHAR2(30) := 'process_limits';
2740 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
2741
2742 CURSOR cur_does_limit_exist(p_limit_number NUMBER) IS
2743 SELECT count(limit_id)
2744 FROM qp_limits
2745 WHERE list_line_id = p_list_line_id
2746 AND limit_number = p_limit_number;
2747
2748 l_limit_exists NUMBER;
2749 l_limit_number NUMBER;
2750
2751 l_limits_rec QP_Limits_PUB.Limits_Rec_Type;
2752 v_limits_rec QP_Limits_PUB.Limits_Rec_Type;
2753 v_limits_val_rec QP_Limits_PUB.Limits_Val_Rec_Type;
2754 v_limit_attrs_tbl QP_Limits_PUB.Limit_Attrs_Tbl_Type;
2755 v_limit_attrs_val_tbl QP_Limits_PUB.Limit_Attrs_Val_Tbl_Type;
2756 v_limit_balances_tbl QP_Limits_PUB.Limit_Balances_Tbl_Type;
2757 v_limit_balances_val_tbl QP_Limits_PUB.Limit_Balances_Val_Tbl_Type;
2758
2759 BEGIN
2760 x_return_status := fnd_api.g_ret_sts_success;
2761
2762 IF p_limit_id = fnd_api.g_miss_num
2763 AND ( p_limit_amount = fnd_api.g_miss_num or p_limit_amount IS NULL) THEN
2764 RETURN;
2765 END IF;
2766
2767 IF p_limit_type = 'MAX_QTY_PER_ORDER' THEN
2768 l_limit_number := 1;
2769 ELSIF p_limit_type = 'MAX_QTY_PER_CUSTOMER' THEN
2770 l_limit_number := 2;
2771 ELSIF p_limit_type = 'MAX_QTY_PER_RULE' THEN
2772 l_limit_number := 3;
2773 ELSIF p_limit_type = 'MAX_ORDERS_PER_CUSTOMER' THEN
2774 l_limit_number := 4;
2775 ELSIF p_limit_type = 'MAX_AMOUNT_PER_RULE' THEN
2776 l_limit_number := 5;
2777 END IF;
2778
2779 OPEN cur_does_limit_exist(l_limit_number);
2780 FETCH cur_does_limit_exist INTO l_limit_exists;
2781 CLOSE cur_does_limit_exist;
2782
2783 IF l_limit_exists > 0 THEN
2784 IF p_limit_amount IS NULL THEN
2785 l_limits_rec.operation := 'DELETE';
2786 l_limits_rec.limit_id := p_limit_id;
2787 ELSIF p_limit_amount <> fnd_api.g_miss_num THEN
2788 l_limits_rec.operation := 'UPDATE';
2789 l_limits_rec.limit_id := p_limit_id;
2790 l_limits_rec.amount := p_limit_amount;
2791 END IF;
2792 ELSE
2793 --nirprasa
2794 IF p_limit_exceed_action_code IS NOT NULL AND p_limit_exceed_action_code <> FND_API.G_MISS_CHAR THEN
2795 populate_limits_rec(p_limit_type,l_limits_rec,p_limit_exceed_action_code);
2796 ELSE
2797 populate_limits_rec(p_limit_type,l_limits_rec);
2798 END IF;
2799
2800 l_limits_rec.list_line_id := p_list_line_id;
2801 l_limits_rec.list_header_id := p_list_header_id;
2802 l_limits_rec.amount := p_limit_amount;
2803 END IF;
2804
2805 -- as per suggetsion from Renuka and Karan for error message
2806 -- ORA-01400: cannot insert NULL into ("QP"."QP_LIMITS"."AMOUNT") in Package QP_Limits_Util Procedure
2807 -- added condition l_limits_rec.operation = 'DELETE' to allow to process delete operation if record is null
2808 IF (l_limits_rec.operation = 'DELETE'
2809 OR (l_limits_rec.amount IS NOT NULL AND
2810 l_limits_rec.amount <> FND_API.G_MISS_NUM)) THEN
2811
2812 OZF_DEBUG_PVT.DEBUG_MO('OZF_OFFER_PVT.process_limits before calling QP for list_header_id : '|| p_list_header_id);
2813
2814 QP_Limits_PUB.Process_Limits
2815 ( p_init_msg_list => FND_API.g_true,
2816 p_api_version_number => 1.0,
2817 p_commit => FND_API.g_false,
2818 x_return_status => x_return_status,
2819 x_msg_count => x_msg_count,
2820 x_msg_data => x_msg_data,
2821 p_LIMITS_rec => l_limits_rec,
2822 x_LIMITS_rec => v_LIMITS_rec,
2823 x_LIMITS_val_rec => v_LIMITS_val_rec,
2824 x_LIMIT_ATTRS_tbl => v_LIMIT_ATTRS_tbl,
2825 x_LIMIT_ATTRS_val_tbl => v_LIMIT_ATTRS_val_tbl,
2826 x_LIMIT_BALANCES_tbl => v_LIMIT_BALANCES_tbl,
2827 x_LIMIT_BALANCES_val_tbl => v_LIMIT_BALANCES_val_tbl
2828 );
2829
2830 END IF;
2831
2832 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
2833 add_message(x_msg_count);
2834 RAISE Fnd_Api.g_exc_error;
2835 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
2836 add_message(x_msg_count);
2837 RAISE Fnd_Api.g_exc_unexpected_error;
2838 END IF;
2839 Fnd_Msg_Pub.Count_AND_Get
2840 ( p_count => x_msg_count,
2841 p_data => x_msg_data,
2842 p_encoded => Fnd_Api.G_FALSE
2843 );
2844
2845 EXCEPTION
2846 WHEN Fnd_Api.G_EXC_ERROR THEN
2847 x_return_status := Fnd_Api.g_ret_sts_error ;
2848 Fnd_Msg_Pub.Count_AND_Get
2849 ( p_count => x_msg_count,
2850 p_data => x_msg_data,
2851 p_encoded => Fnd_Api.G_FALSE
2852 );
2853 WHEN Fnd_Api.G_EXC_UNEXPECTED_ERROR THEN
2854 x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
2855 Fnd_Msg_Pub.Count_AND_Get
2856 ( p_count => x_msg_count,
2857 p_data => x_msg_data,
2858 p_encoded => Fnd_Api.G_FALSE
2859 );
2860 WHEN OTHERS THEN
2861 x_return_status := Fnd_Api.g_ret_sts_unexp_erroR ;
2862 IF Fnd_Msg_Pub.Check_Msg_Level ( Fnd_Msg_Pub.G_MSG_LVL_UNEXP_ERROR ) THEN
2863 Fnd_Msg_Pub.Add_Exc_Msg( G_PKG_NAME,l_api_name);
2864 END IF;
2865 Fnd_Msg_Pub.Count_AND_Get
2866 ( p_count => x_msg_count,
2867 p_data => x_msg_data,
2868 p_encoded => Fnd_Api.G_FALSE
2869 );
2870 END process_limits;
2871
2872
2873 -------------------------------------------------------
2874 -- Start of Comments
2875 --
2876 -- NAME
2877 -- Post_Lumpsum_Offer
2878 --
2879 -- PURPOSE
2880 -- This Procedure posts a lumpsum type offer.
2881 --
2882 -- IN
2883 -- p_init_msg_list IN VARCHAR2,
2884 -- p_api_version IN NUMBER,
2885 -- p_commit IN VARCHAR2,
2886 -- p_offer_rec IN offers_rec_type
2887 --
2888 -- OUT
2889 -- x_return_status OUT VARCHAR2,
2890 -- x_msg_count OUT NUMBER,
2891 -- x_msg_data OUT VARCHAR2,
2892 --
2893 -- NOTES
2894 --
2895 -- HISTORY
2896 -- 15-MAY-2001 julou created
2897 -- End of Comments
2898 ---------------------------------------------------------
2899 PROCEDURE Post_Lumpsum_Offer(
2900 p_init_msg_list IN VARCHAR2,
2901 p_api_version IN NUMBER,
2902 p_commit IN VARCHAR2,
2903 x_return_status OUT NOCOPY VARCHAR2,
2904 x_msg_count OUT NOCOPY NUMBER,
2905 x_msg_data OUT NOCOPY VARCHAR2,
2906 p_offer_rec IN modifier_list_rec_type
2907 )
2908 IS
2909
2910 l_api_name CONSTANT VARCHAR2(30) := 'Post_Lumpsum_Offer';
2911 l_api_version CONSTANT NUMBER := 1.0;
2912 l_msg_data VARCHAR2(2000);
2913 l_msg_count NUMBER;
2914 l_old_status_id NUMBER;
2915 l_approval_type VARCHAR2(30);
2916 l_offer_rec modifier_list_rec_type := p_offer_rec;
2917
2918 CURSOR c_old_user_status_id IS
2919 SELECT user_status_id
2920 FROM ozf_offers
2921 WHERE qp_list_header_id = l_offer_rec.qp_list_header_id;
2922
2923 BEGIN
2924 SAVEPOINT post_lumpsum_offer;
2925
2926 -- Standard call to check for call compatibility.
2927 IF NOT FND_API.Compatible_API_Call ( l_api_version,
2928 p_api_version,
2929 l_api_name,
2930 G_PKG_NAME)
2931 THEN
2932 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2933 END IF;
2934
2935 IF FND_API.to_Boolean( p_init_msg_list ) THEN
2936 FND_MSG_PUB.initialize;
2937 END IF;
2938
2939 x_return_status := FND_API.G_RET_STS_SUCCESS;
2940
2941 OPEN c_old_user_status_id;
2942 FETCH c_old_user_status_id INTO l_old_status_id;
2943 CLOSE c_old_user_status_id;
2944
2945 OZF_Utility_PVT.check_new_status_change
2946 (
2947 p_object_type => 'OFFR',
2948 p_object_id => l_offer_rec.qp_list_header_id,
2949 p_old_status_id => l_old_status_id,
2950 p_new_status_id => l_offer_rec.user_status_id,
2951 p_custom_setup_id => l_offer_rec.custom_setup_id,
2952 x_approval_type => l_approval_type,
2953 x_return_status => x_return_status
2954 );
2955
2956 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
2957 RAISE Fnd_Api.g_exc_error;
2958 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
2959 RAISE Fnd_Api.g_exc_unexpected_error;
2960 END IF;
2961
2962 OZF_Fund_Adjustment_PVT.post_utilized_budget(
2963 p_offer_id => p_offer_rec.qp_list_header_id
2964 ,p_offer_type => 'LUMPSUM'
2965 ,p_api_version => p_api_version
2966 ,p_init_msg_list => p_init_msg_list
2967 ,p_commit => FND_API.G_FALSE
2968 ,x_msg_count => x_msg_count
2969 ,x_msg_data => x_msg_data
2970 ,x_return_status => x_return_status);
2971
2972 IF x_return_status = FND_API.G_RET_STS_ERROR THEN
2973 RAISE FND_API.G_EXC_ERROR;
2974 ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
2975 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2976 END IF;
2977
2978 FND_MSG_PUB.Count_And_Get
2979 (
2980 p_count => x_msg_count,
2981 p_data => x_msg_data,
2982 p_encoded => FND_API.G_FALSE
2983 );
2984
2985 EXCEPTION
2986 WHEN FND_API.G_EXC_ERROR THEN
2987 x_return_status := FND_API.g_ret_sts_error ;
2988 ROLLBACK TO post_lumpsum_offer;
2989 FND_MSG_PUB.Count_AND_Get
2990 ( p_count => l_msg_count,
2991 p_data => l_msg_data,
2992 p_encoded => FND_API.G_FALSE
2993 );
2994 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2995 x_return_status := FND_API.g_ret_sts_unexp_error ;
2996 ROLLBACK TO post_lumpsum_offer;
2997 FND_MSG_PUB.Count_AND_Get
2998 ( p_count => l_msg_count,
2999 p_data => l_msg_data,
3000 p_encoded => FND_API.G_FALSE
3001 );
3002 WHEN OTHERS THEN
3003 x_return_status := FND_API.g_ret_sts_unexp_error ;
3004 ROLLBACK TO post_lumpsum_offer;
3005 IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
3006 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
3007 END IF;
3008 FND_MSG_PUB.Count_AND_Get
3009 ( p_count => l_msg_count,
3010 p_data => l_msg_data,
3011 p_encoded => FND_API.G_FALSE
3012 );
3013
3014 END Post_Lumpsum_Offer ;
3015
3016
3017 -------------------------------------------------------
3018 -- Start of Comments
3019 --
3020 -- NAME
3021 -- Post_Scan_Data_Offer
3022 --
3023 -- PURPOSE
3024 -- This Procedure posts a Scan Data type offer.
3025 --
3026 -- IN
3027 -- p_init_msg_list IN VARCHAR2,
3028 -- p_api_version IN NUMBER,
3029 -- p_commit IN VARCHAR2,
3030 -- p_offer_rec IN offers_rec_type
3031 --
3032 -- OUT
3033 -- x_return_status OUT VARCHAR2,
3034 -- x_msg_count OUT NUMBER,
3035 -- x_msg_data OUT VARCHAR2,
3036 --
3037 -- NOTES
3038 --
3039 -- HISTORY
3040 -- 02-OCT-2002 julou created
3041 -- End of Comments
3042 ---------------------------------------------------------
3043 PROCEDURE Post_Scan_Data_Offer(
3044 p_init_msg_list IN VARCHAR2,
3045 p_api_version IN NUMBER,
3046 p_commit IN VARCHAR2,
3047 x_return_status OUT NOCOPY VARCHAR2,
3048 x_msg_count OUT NOCOPY NUMBER,
3049 x_msg_data OUT NOCOPY VARCHAR2,
3050 p_offer_rec IN modifier_list_rec_type
3051 )
3052 IS
3053
3054 l_api_name CONSTANT VARCHAR2(30) := 'Post_Scan_Data_Offer';
3055 l_api_version CONSTANT NUMBER := 1.0;
3056 l_msg_data VARCHAR2(2000);
3057 l_msg_count NUMBER;
3058 l_old_status_id NUMBER;
3059 l_approval_type VARCHAR2(30);
3060 l_offer_rec modifier_list_rec_type := p_offer_rec;
3061
3062 CURSOR c_old_user_status_id IS
3063 SELECT user_status_id
3064 FROM ozf_offers
3065 WHERE qp_list_header_id = l_offer_rec.qp_list_header_id;
3066
3067 BEGIN
3068 SAVEPOINT post_scan_data_offer;
3069
3070 -- Standard call to check for call compatibility.
3071 IF NOT FND_API.Compatible_API_Call ( l_api_version,
3072 p_api_version,
3073 l_api_name,
3074 G_PKG_NAME)
3075 THEN
3076 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3077 END IF;
3078
3079 IF FND_API.to_Boolean( p_init_msg_list ) THEN
3080 FND_MSG_PUB.initialize;
3081 END IF;
3082
3083 x_return_status := FND_API.G_RET_STS_SUCCESS;
3084
3085 OPEN c_old_user_status_id;
3086 FETCH c_old_user_status_id INTO l_old_status_id;
3087 CLOSE c_old_user_status_id;
3088
3089 OZF_Utility_PVT.check_new_status_change
3090 (
3091 p_object_type => 'OFFR',
3092 p_object_id => l_offer_rec.qp_list_header_id,
3093 p_old_status_id => l_old_status_id,
3094 p_new_status_id => l_offer_rec.user_status_id,
3095 p_custom_setup_id => l_offer_rec.custom_setup_id,
3096 x_approval_type => l_approval_type,
3097 x_return_status => x_return_status
3098 );
3099
3100 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
3101 RAISE Fnd_Api.g_exc_error;
3102 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
3103 RAISE Fnd_Api.g_exc_unexpected_error;
3104 END IF;
3105
3106 OZF_Fund_Adjustment_PVT.post_utilized_budget(
3107 p_offer_id => p_offer_rec.qp_list_header_id
3108 ,p_offer_type => 'SCAN_DATA'
3109 ,p_api_version => p_api_version
3110 ,p_init_msg_list => p_init_msg_list
3111 ,p_commit => p_commit
3112 ,x_msg_count => x_msg_count
3113 ,x_msg_data => x_msg_data
3114 ,x_return_status => x_return_status);
3115
3116 IF x_return_status = FND_API.G_RET_STS_ERROR THEN
3117 RAISE FND_API.G_EXC_ERROR;
3118 ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3119 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3120 END IF;
3121
3122 FND_MSG_PUB.Count_And_Get
3123 (
3124 p_count => x_msg_count,
3125 p_data => x_msg_data,
3126 p_encoded => FND_API.G_FALSE
3127 );
3128
3129 EXCEPTION
3130 WHEN FND_API.G_EXC_ERROR THEN
3131 x_return_status := FND_API.g_ret_sts_error ;
3132 ROLLBACK TO post_scan_data_offer;
3133 FND_MSG_PUB.Count_AND_Get
3134 ( p_count => l_msg_count,
3135 p_data => l_msg_data,
3136 p_encoded => FND_API.G_FALSE
3137 );
3138 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3139 x_return_status := FND_API.g_ret_sts_unexp_error ;
3140 ROLLBACK TO post_scan_data_offer;
3141 FND_MSG_PUB.Count_AND_Get
3142 ( p_count => l_msg_count,
3143 p_data => l_msg_data,
3144 p_encoded => FND_API.G_FALSE
3145 );
3146 WHEN OTHERS THEN
3147 x_return_status := FND_API.g_ret_sts_unexp_error ;
3148 ROLLBACK TO post_scan_data_offer;
3149 IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
3150 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
3151 END IF;
3152 FND_MSG_PUB.Count_AND_Get
3153 ( p_count => l_msg_count,
3154 p_data => l_msg_data,
3155 p_encoded => FND_API.G_FALSE
3156 );
3157
3158 END Post_Scan_Data_Offer ;
3159
3160
3161 --------------------------------------------------
3162 -- Start of Comments
3163 --
3164 -- NAME
3165 -- validate_offer_dates
3166 --
3167 -- PURPOSE
3168 -- This Procedure validates the dates in offer rec.
3169 --
3170 -- IN
3171 -- p_init_msg_list IN VARCHAR2,
3172 -- p_api_version IN NUMBER,
3173 -- p_offer_rec IN offers_rec_type
3174 --
3175 -- OUT
3176 -- x_return_status OUT VARCHAR2,
3177 -- x_msg_count OUT NUMBER,
3178 -- x_msg_data OUT VARCHAR2,
3179 --
3180 -- NOTES
3181 --
3182 -- HISTORY
3183 -- 17-OCT-2001 julou created
3184 -- End of Comments
3185 -------------------------------------------------
3186 PROCEDURE validate_offer_dates
3187 (
3188 p_init_msg_list IN VARCHAR2,
3189 p_api_version IN NUMBER,
3190 x_return_status OUT NOCOPY VARCHAR2,
3191 x_msg_count OUT NOCOPY NUMBER,
3192 x_msg_data OUT NOCOPY VARCHAR2,
3193 p_offer_rec IN modifier_list_rec_type
3194 )
3195 IS
3196
3197 CURSOR c_creation_date(l_list_header_id NUMBER) IS
3198 SELECT TRUNC(creation_date)
3199 FROM qp_list_headers
3200 WHERE list_header_id = l_list_header_id;
3201
3202 l_api_name CONSTANT VARCHAR2(30) := 'Validate_Offer_Dates';
3203 l_api_version CONSTANT NUMBER := 1.0;
3204 l_msg_data VARCHAR2(2000);
3205 l_msg_count NUMBER;
3206 l_creation_date DATE;
3207
3208 BEGIN
3209 IF NOT FND_API.Compatible_API_Call ( l_api_version,
3210 p_api_version,
3211 l_api_name,
3212 G_PKG_NAME)
3213 THEN
3214 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3215 END IF;
3216
3217 IF FND_API.to_Boolean( p_init_msg_list ) THEN
3218 FND_MSG_PUB.initialize;
3219 END IF;
3220
3221 x_return_status := FND_API.G_RET_STS_SUCCESS;
3222 /*
3223 IF p_offer_rec.start_date_active IS NOT NULL
3224 AND p_offer_rec.start_date_active <> FND_API.G_MISS_DATE THEN
3225 IF p_offer_rec.offer_operation = 'CREATE' THEN
3226 IF p_offer_rec.start_date_active < TRUNC(SYSDATE) THEN
3227 IF p_offer_rec.offer_type <> 'NET_ACCRUAL' AND p_offer_rec.custom_setup_id <> 117 THEN
3228 Fnd_Message.SET_NAME('OZF','OZF_OFFR_STARTDATE_LT_SYSDATE');
3229 Fnd_Msg_Pub.ADD;
3230 RAISE FND_API.G_EXC_ERROR;
3231 END IF;
3232 END IF;
3233 ELSIF p_offer_rec.offer_operation = 'UPDATE' THEN
3234 OPEN c_creation_date(p_offer_rec.qp_list_header_id);
3235 FETCH c_creation_date INTO l_creation_date;
3236 CLOSE c_creation_date;
3237 IF p_offer_rec.start_date_active < l_creation_date THEN
3238 IF p_offer_rec.offer_type <> 'NET_ACCRUAL' AND p_offer_rec.custom_setup_id <> 117 THEN
3239 Fnd_Message.SET_NAME('OZF','OZF_OFFR_STARTDATE_LT_CREDATE');
3240 Fnd_Msg_Pub.ADD;
3241 RAISE FND_API.G_EXC_ERROR;
3242 END IF;
3243 END IF;
3244 END IF;
3245 END IF;
3246 */
3247 IF p_offer_rec.end_date_active IS NOT NULL
3248 AND p_offer_rec.end_date_active <> FND_API.G_MISS_DATE THEN
3249 IF p_offer_rec.offer_operation = 'CREATE' THEN
3250 IF p_offer_rec.end_date_active < TRUNC(SYSDATE) THEN
3251 IF p_offer_rec.offer_type <> 'NET_ACCRUAL' AND p_offer_rec.custom_setup_id <> 117 THEN
3252 Fnd_Message.SET_NAME('OZF','OZF_OFFR_ENDDATE_LT_SYSDATE');
3253 Fnd_Msg_Pub.ADD;
3254 RAISE FND_API.G_EXC_ERROR;
3255 END IF;
3256 END IF;
3257 ELSIF p_offer_rec.offer_operation = 'UPDATE' THEN
3258 OPEN c_creation_date(p_offer_rec.qp_list_header_id);
3259 FETCH c_creation_date INTO l_creation_date;
3260 CLOSE c_creation_date;
3261 IF p_offer_rec.end_date_active < l_creation_date THEN
3262 IF p_offer_rec.offer_type <> 'NET_ACCRUAL' AND p_offer_rec.custom_setup_id <> 117 THEN
3263 Fnd_Message.SET_NAME('OZF','OZF_OFFR_ENDDATE_LT_CREDATE');
3264 Fnd_Msg_Pub.ADD;
3265 RAISE FND_API.G_EXC_ERROR;
3266 END IF;
3267 END IF;
3268 END IF;
3269 END IF;
3270
3271 IF p_offer_rec.offer_type IN ('SCAN_DATA', 'NET_ACCRUAL')
3272 OR (p_offer_rec.offer_type = 'LUMPSUM' AND p_offer_rec.custom_setup_id <> 110) -- not applicable to soft fund
3273 THEN
3274 IF p_offer_rec.start_date_active IS NULL THEN
3275 ozf_utility_pvt.error_message('OZF_OFFR_NO_START_DATE');
3276 RAISE FND_API.G_EXC_ERROR;
3277 END IF;
3278 END IF;
3279
3280 EXCEPTION
3281 WHEN FND_API.G_EXC_ERROR THEN
3282 x_return_status := FND_API.g_ret_sts_error ;
3283 FND_MSG_PUB.Count_AND_Get
3284 ( p_count => l_msg_count,
3285 p_data => l_msg_data,
3286 p_encoded => FND_API.G_FALSE
3287 );
3288 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3289 x_return_status := FND_API.g_ret_sts_unexp_error ;
3290 FND_MSG_PUB.Count_AND_Get
3291 ( p_count => l_msg_count,
3292 p_data => l_msg_data,
3293 p_encoded => FND_API.G_FALSE
3294 );
3295 WHEN OTHERS THEN
3296 x_return_status := FND_API.g_ret_sts_unexp_error ;
3297 IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
3298 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
3299 END IF;
3300 FND_MSG_PUB.Count_AND_Get
3301 ( p_count => l_msg_count,
3302 p_data => l_msg_data,
3303 p_encoded => FND_API.G_FALSE
3304 );
3305 END validate_offer_dates;
3306
3307 -------------------------------------------------
3308 -- Start of Comments
3309 --
3310 -- NAME
3311 -- validate_offer
3312 --
3313 -- PURPOSE
3314 -- This Procedure validates the offer
3315 --
3316 -- IN
3317 -- p_init_msg_list IN VARCHAR2,
3318 -- p_api_version IN NUMBER,
3319 -- p_offer_rec IN offers_rec_type
3320 --
3321 -- OUT
3322 -- x_return_status OUT VARCHAR2,
3323 -- x_msg_count OUT NUMBER,
3324 -- x_msg_data OUT VARCHAR2,
3325 --
3326 -- NOTES
3327 --
3328 -- HISTORY
3329 -- 15-MAY-2001 julou created
3330 -- 29-MAY-2001 julou modified
3331 -- no validatation for approved amount and offer amount
3332 -- if budget approval is not required
3333 -- End of Comments
3334 -------------------------------------------------
3335 PROCEDURE Validate_Offer(
3336 p_init_msg_list IN VARCHAR2,
3337 p_api_version IN NUMBER,
3338 x_return_status OUT NOCOPY VARCHAR2,
3339 x_msg_count OUT NOCOPY NUMBER,
3340 x_msg_data OUT NOCOPY VARCHAR2,
3341 p_offer_rec IN modifier_list_rec_type
3342 )
3343 IS
3344
3345 CURSOR c_approved_amount(l_id NUMBER) IS
3346 SELECT nvl(sum(approved_amount),0)
3347 FROM ozf_act_budgets
3348 WHERE arc_act_budget_used_by = 'OFFR'
3349 AND act_budget_used_by_id = l_id;
3350
3351 l_api_name CONSTANT VARCHAR2(30) := 'Validate_Offer';
3352 l_api_version CONSTANT NUMBER := 1.0;
3353 l_msg_data VARCHAR2(2000);
3354 l_msg_count NUMBER;
3355 l_approved_amount NUMBER;
3356
3357 l_estimated_amount NUMBER;
3358 l_bapl_count NUMBER;
3359 l_offers_rec modifier_list_rec_type := p_offer_rec;
3360
3361 CURSOR cur_attr_avail_flag IS
3362 SELECT attr_available_flag
3363 FROM ams_custom_setup_attr
3364 WHERE custom_setup_id = p_offer_rec.custom_setup_id
3365 AND object_attribute = 'BREQ';
3366
3367 CURSOR c_committed_amount IS
3368 SELECT NVL(SUM(scan_value * scan_unit_forecast/quantity), 0)
3369 FROM ams_act_products
3370 WHERE arc_act_product_used_by = 'OFFR'
3371 AND act_product_used_by_id = p_offer_rec.qp_list_header_id;
3372
3373 l_attr_avail_flag VARCHAR2(1);
3374 l_recal VARCHAR2(1);
3375 l_committed_amount NUMBER := 0;
3376
3377 BEGIN
3378 -- Standard call to check for call compatibility.
3379 IF NOT FND_API.Compatible_API_Call ( l_api_version,
3380 p_api_version,
3381 l_api_name,
3382 G_PKG_NAME)
3383 THEN
3384 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3385 END IF;
3386
3387 -- Initialize message list if p_init_msg_list is set to TRUE.
3388 IF FND_API.to_Boolean( p_init_msg_list ) THEN
3389 FND_MSG_PUB.initialize;
3390 END IF;
3391
3392 -- Initialize API return status to SUCCESS
3393 x_return_status := FND_API.G_RET_STS_SUCCESS;
3394
3395 OPEN cur_attr_avail_flag;
3396 FETCH cur_attr_avail_flag INTO l_attr_avail_flag;
3397 CLOSE cur_attr_avail_flag;
3398
3399 IF l_attr_avail_flag = 'Y' THEN
3400
3401 --IF l_offers_rec.offer_type NOT IN ('OID','TERMS') THEN -- Header Level Limits not enforced for Promotional Goods
3402
3403
3404 OPEN c_approved_amount(l_offers_rec.qp_list_header_id);
3405 FETCH c_approved_amount INTO l_approved_amount;
3406 CLOSE c_approved_amount;
3407
3408 l_recal := NVL(FND_PROFILE.VALUE('OZF_BUDGET_ADJ_ALLOW_RECAL'), 'Y');
3409 --julou checking approved amount vs committed amount for recal=N and lumpsum, scan_data
3410 IF l_recal = 'N' OR (l_recal = 'Y' AND p_offer_rec.offer_type IN ('LUMPSUM', 'SCAN_DATA')) THEN
3411 -- populate committed amount
3412 IF p_offer_rec.offer_type = 'SCAN_DATA' THEN
3413 OPEN c_committed_amount;
3414 FETCH c_committed_amount INTO l_committed_amount;
3415 CLOSE c_committed_amount;
3416 ELSIF p_offer_rec.offer_type = 'LUMPSUM' THEN
3417 IF p_offer_rec.lumpsum_amount IS NULL
3418 OR p_offer_rec.lumpsum_amount = FND_API.G_MISS_NUM THEN
3419 l_committed_amount := 0;
3420 ELSE
3421 l_committed_amount := p_offer_rec.lumpsum_amount;
3422 END IF;
3423 ELSE -- other offer types
3424 IF p_offer_rec.offer_amount IS NULL
3425 OR p_offer_rec.offer_amount = FND_API.G_MISS_NUM THEN
3426 l_committed_amount := 0;
3427 ELSE
3428 l_committed_amount := p_offer_rec.offer_amount;
3429 END IF;
3430 END IF;
3431
3432 IF l_committed_amount > l_approved_amount THEN
3433 OZF_Utility_PVT.Error_Message(p_message_name => 'OZF_OFFER_AMNT_GT_APPR_AMNT');
3434 RAISE FND_API.G_EXC_ERROR;
3435 END IF;
3436 ELSIF l_recal = 'Y' AND p_offer_rec.offer_type NOT IN ('LUMPSUM', 'SCAN_DATA') THEN
3437 IF l_approved_amount < 0 THEN
3438 OZF_Utility_PVT.Error_Message(p_message_name => 'OZF_NO_APPROVED_AMOUNT');
3439 RAISE FND_API.G_EXC_ERROR;
3440 END IF;
3441 END IF;
3442 END IF;
3443
3444 FND_MSG_PUB.Count_And_Get
3445 (
3446 p_count => x_msg_count,
3447 p_data => x_msg_data,
3448 p_encoded => FND_API.G_FALSE
3449 );
3450
3451 EXCEPTION
3452 WHEN FND_API.G_EXC_ERROR THEN
3453 x_return_status := FND_API.g_ret_sts_error ;
3454 FND_MSG_PUB.Count_AND_Get
3455 ( p_count => l_msg_count,
3456 p_data => l_msg_data,
3457 p_encoded => FND_API.G_FALSE
3458 );
3459 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3460 x_return_status := FND_API.g_ret_sts_unexp_error ;
3461 FND_MSG_PUB.Count_AND_Get
3462 ( p_count => l_msg_count,
3463 p_data => l_msg_data,
3464 p_encoded => FND_API.G_FALSE
3465 );
3466 WHEN OTHERS THEN
3467 x_return_status := FND_API.g_ret_sts_unexp_error ;
3468 IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
3469 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
3470 END IF;
3471 FND_MSG_PUB.Count_AND_Get
3472 ( p_count => l_msg_count,
3473 p_data => l_msg_data,
3474 p_encoded => FND_API.G_FALSE
3475 );
3476
3477 END validate_offer;
3478
3479 PROCEDURE validate_scandata_budget(
3480 p_init_msg_list IN VARCHAR2
3481 ,p_api_version IN NUMBER
3482 ,x_return_status OUT NOCOPY VARCHAR2
3483 ,x_msg_count OUT NOCOPY NUMBER
3484 ,x_msg_data OUT NOCOPY VARCHAR2
3485 ,p_qp_list_header_id IN NUMBER)
3486 IS
3487 CURSOR c_request_amount IS
3488 SELECT NVL(SUM(request_amount), 0)
3489 FROM ozf_act_budgets
3490 WHERE arc_act_budget_used_by = 'OFFR'
3491 AND act_budget_used_by_id = p_qp_list_header_id;
3492
3493 CURSOR c_committed_amount IS
3494 SELECT NVL(SUM(scan_value * scan_unit_forecast/quantity), 0)
3495 FROM ams_act_products
3496 WHERE arc_act_product_used_by = 'OFFR'
3497 AND act_product_used_by_id = p_qp_list_header_id;
3498
3499 l_api_name CONSTANT VARCHAR2(30) := 'validate_scandata_budget';
3500 l_api_version CONSTANT NUMBER := 1.0;
3501 l_msg_data VARCHAR2(2000);
3502 l_msg_count NUMBER;
3503
3504 l_request_amount NUMBER;
3505 l_committed_amount NUMBER;
3506
3507 BEGIN
3508 -- Standard call to check for call compatibility.
3509 IF NOT FND_API.Compatible_API_Call ( l_api_version,
3510 p_api_version,
3511 l_api_name,
3512 G_PKG_NAME)
3513 THEN
3514 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3515 END IF;
3516
3517 -- Initialize message list if p_init_msg_list is set to TRUE.
3518 IF FND_API.to_Boolean( p_init_msg_list ) THEN
3519 FND_MSG_PUB.initialize;
3520 END IF;
3521
3522 -- Initialize API return status to SUCCESS
3523 x_return_status := FND_API.G_RET_STS_SUCCESS;
3524
3525 OPEN c_request_amount;
3526 FETCH c_request_amount INTO l_request_amount;
3527 IF c_request_amount%NOTFOUND THEN
3528 CLOSE c_request_amount;
3529 OZF_Utility_PVT.Error_Message('OZF_OFFR_NO_BUDGET_REQUEST');
3530 RAISE FND_API.G_EXC_ERROR;
3531 END IF;
3532 CLOSE c_request_amount;
3533
3534 OPEN c_committed_amount;
3535 FETCH c_committed_amount INTO l_committed_amount;
3536 CLOSE c_committed_amount;
3537
3538 IF l_committed_amount > l_request_amount THEN
3539 OZF_Utility_PVT.Error_Message('OZF_OFFR_REQAMT_LT_OFFAMT');
3540 RAISE FND_API.G_EXC_ERROR;
3541 END IF;
3542
3543 FND_MSG_PUB.Count_And_Get
3544 (p_count => x_msg_count,
3545 p_data => x_msg_data,
3546 p_encoded => FND_API.G_FALSE);
3547
3548 EXCEPTION
3549 WHEN FND_API.G_EXC_ERROR THEN
3550 x_return_status := FND_API.g_ret_sts_error ;
3551 FND_MSG_PUB.Count_AND_Get
3552 ( p_count => l_msg_count,
3553 p_data => l_msg_data,
3554 p_encoded => FND_API.G_FALSE
3555 );
3556 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3557 x_return_status := FND_API.g_ret_sts_unexp_error ;
3558 FND_MSG_PUB.Count_AND_Get
3559 ( p_count => l_msg_count,
3560 p_data => l_msg_data,
3561 p_encoded => FND_API.G_FALSE
3562 );
3563 WHEN OTHERS THEN
3564 x_return_status := FND_API.g_ret_sts_unexp_error ;
3565 IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
3566 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
3567 END IF;
3568 FND_MSG_PUB.Count_AND_Get
3569 ( p_count => l_msg_count,
3570 p_data => l_msg_data,
3571 p_encoded => FND_API.G_FALSE
3572 );
3573
3574 END validate_scandata_budget;
3575
3576 -------------------------------------------------
3577 -- Start of Comments
3578 --
3579 -- NAME
3580 -- Push_Target_group
3581 --
3582 -- PURPOSE
3583 -- This Procedure pushes target group info for each schedule into QP
3584 --
3585 -- IN
3586 -- p_init_msg_list IN VARCHAR2,
3587 -- p_api_version IN NUMBER,
3588 -- p_commit IN VARCHAR2,
3589 -- p_offer_rec IN offers_rec_type
3590 --
3591 -- OUT
3592 -- x_return_status OUT VARCHAR2,
3593 -- x_msg_count OUT NUMBER,
3594 -- x_msg_data OUT VARCHAR2,
3595 --
3596 -- NOTES
3597 --
3598 -- HISTORY
3599 -- 15-MAY-2001 julou created
3600 -- End of Comments
3601 -------------------------------------------------
3602 PROCEDURE Push_Target_group(
3603 p_init_msg_list IN VARCHAR2,
3604 p_api_version IN NUMBER,
3605 p_commit IN VARCHAR2,
3606 x_return_status OUT NOCOPY VARCHAR2,
3607 x_msg_count OUT NOCOPY NUMBER,
3608 x_msg_data OUT NOCOPY VARCHAR2,
3609 p_offer_rec IN modifier_list_rec_type
3610 )
3611 IS
3612
3613 CURSOR c_act_offer(l_qp_id NUMBER) IS
3614 SELECT act_offer_used_by_id
3615 FROM ozf_act_offers
3616 WHERE arc_act_offer_used_by = 'CSCH'
3617 AND qp_list_header_id = l_qp_id;
3618 l_act_offer_rec c_act_offer%ROWTYPE;
3619
3620 CURSOR c_list_header_id(l_sch_id NUMBER) IS
3621 SELECT list_header_id
3622 FROM ams_act_lists
3623 WHERE list_act_type = 'TARGET'
3624 AND list_used_by = 'CSCH'
3625 AND list_used_by_id = l_sch_id;
3626
3627 CURSOR c_schedule_dates(l_sch_id NUMBER) IS
3628 SELECT start_date_time, end_date_time
3629 FROM ams_campaign_schedules_vl
3630 WHERE schedule_id = l_sch_id
3631 AND status_code = 'ACTIVE';
3632 l_schedule_dates c_schedule_dates%ROWTYPE;
3633
3634 l_api_name CONSTANT VARCHAR2(30) := 'Push_Target_group';
3635 l_api_version CONSTANT NUMBER := 1.0;
3636 l_msg_data VARCHAR2(2000);
3637 l_msg_count NUMBER;
3638 l_list_header_id NUMBER;
3639 l_qualifiers_tbl qualifiers_tbl_type;
3640 l_error_location NUMBER;
3641
3642 l_index NUMBER ;
3643 x_qualifiers_tbl qp_qualifier_rules_pub.qualifiers_tbl_type;
3644 BEGIN
3645 SAVEPOINT Push_Target_group;
3646
3647 -- Standard call to check for call compatibility.
3648 IF NOT FND_API.Compatible_API_Call ( l_api_version,
3649 p_api_version,
3650 l_api_name,
3651 G_PKG_NAME)
3652 THEN
3653 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3654 END IF;
3655
3656 -- Initialize message list if p_init_msg_list is set to TRUE.
3657 IF FND_API.to_Boolean( p_init_msg_list )
3658 THEN
3659 FND_MSG_PUB.initialize;
3660 END IF;
3661
3662 -- Initialize API return status to SUCCESS
3663 x_return_status := FND_API.G_RET_STS_SUCCESS;
3664
3665 l_index := 1;
3666
3667 FOR l_act_offer_rec IN c_act_offer(p_offer_rec.qp_list_header_id)
3668 LOOP
3669
3670 OPEN c_list_header_id(l_act_offer_rec.act_offer_used_by_id);
3671 FETCH c_list_header_id INTO l_list_header_id;
3672 CLOSE c_list_header_id;
3673
3674 OPEN c_schedule_dates(l_act_offer_rec.act_offer_used_by_id);
3675 FETCH c_schedule_dates INTO l_schedule_dates;
3676
3677 IF c_schedule_dates%FOUND THEN
3678
3679 l_qualifiers_tbl(l_index).qualifier_context := 'CUSTOMER_GROUP';
3680 l_qualifiers_tbl(l_index).qualifier_attribute := 'QUALIFIER_ATTRIBUTE1';
3681 l_qualifiers_tbl(l_index).qualifier_attr_value := l_list_header_id;
3682 l_qualifiers_tbl(l_index).comparison_operator_code := '=';
3683 l_qualifiers_tbl(l_index).list_header_id := p_offer_rec.qp_list_header_id;
3684 l_qualifiers_tbl(l_index).start_date_active := l_schedule_dates.start_date_time;
3685 l_qualifiers_tbl(l_index).end_date_active := l_schedule_dates.end_date_time;
3686 l_qualifiers_tbl(l_index).operation := 'CREATE';
3687
3688 l_index := l_index + 1;
3689
3690 END IF;
3691
3692 CLOSE c_schedule_dates;
3693
3694 END LOOP;
3695
3696 IF l_qualifiers_tbl.count > 0 THEN
3697 OZF_Utility_PVT.debug_message(FND_LOG.LEVEL_STATEMENT,'OZF_OFFER_PVT.Push_Target_group','before process_market_qualifiers 3 l_qualifiers_tbl.count = '|| l_qualifiers_tbl.count);
3698 process_market_qualifiers
3699 (
3700 p_init_msg_list => p_init_msg_list
3701 ,p_api_version => p_api_version
3702 ,p_commit => FND_API.g_false
3703 ,x_return_status => x_return_status
3704 ,x_msg_count => x_msg_count
3705 ,x_msg_data => x_msg_data
3706 ,p_qualifiers_tbl => l_qualifiers_tbl
3707 ,x_error_location => l_error_location
3708 ,x_qualifiers_tbl => x_qualifiers_tbl
3709 );
3710
3711
3712 IF x_return_status = FND_API.G_RET_STS_ERROR THEN
3713 RAISE FND_API.G_EXC_ERROR;
3714 ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3715 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3716 END IF;
3717
3718 END IF;
3719
3720 FND_MSG_PUB.Count_And_Get
3721 ( p_count => x_msg_count,
3722 p_data => x_msg_data,
3723 p_encoded => FND_API.G_FALSE
3724 );
3725
3726 EXCEPTION
3727 WHEN FND_API.G_EXC_ERROR THEN
3728 x_return_status := FND_API.g_ret_sts_error ;
3729 ROLLBACK TO Push_Target_group;
3730 FND_MSG_PUB.Count_AND_Get
3731 ( p_count => l_msg_count,
3732 p_data => l_msg_data,
3733 p_encoded => FND_API.G_FALSE
3734 );
3735 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3736 x_return_status := FND_API.g_ret_sts_unexp_error ;
3737 ROLLBACK TO Push_Target_group;
3738 FND_MSG_PUB.Count_AND_Get
3739 ( p_count => l_msg_count,
3740 p_data => l_msg_data,
3741 p_encoded => FND_API.G_FALSE
3742 );
3743 WHEN OTHERS THEN
3744 x_return_status := FND_API.g_ret_sts_unexp_error ;
3745 ROLLBACK TO Push_Target_group;
3746 IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR )
3747 THEN
3748 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
3749 END IF;
3750 FND_MSG_PUB.Count_AND_Get
3751 ( p_count => l_msg_count,
3752 p_data => l_msg_data,
3753 p_encoded => FND_API.G_FALSE
3754 );
3755
3756 END Push_Target_group;
3757
3758
3759 PROCEDURE update_request_status (
3760 x_return_status OUT NOCOPY VARCHAR2,
3761 x_msg_count OUT NOCOPY NUMBER,
3762 x_msg_data OUT NOCOPY VARCHAR2,
3763 p_qp_list_header_id IN NUMBER
3764 )
3765 IS
3766 CURSOR c_req_header_rec(p_offer_id IN NUMBER) IS
3767 SELECT req.request_header_id,req.object_version_number,req.status_code
3768 FROM ozf_request_headers_all_b req,ozf_offers off
3769 WHERE req.request_number = off.offer_code
3770 AND off.qp_list_header_id = p_offer_id;
3771
3772 l_req_header_id NUMBER;
3773 l_obj_ver_num NUMBER;
3774 l_status_code VARCHAR2 (30);
3775 l_return_status VARCHAR2 (10) := fnd_api.g_ret_sts_success;
3776 l_api_name VARCHAR2 (60) := 'update_request_status';
3777 l_full_name VARCHAR2 (100) := g_pkg_name||'.'||l_api_name;
3778 l_api_version NUMBER := 1;
3779 BEGIN
3780 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_debug_high) THEN
3781 debug_message(l_full_name||' : '||'begin');
3782 END IF;
3783
3784 OPEN c_req_header_rec(p_qp_list_header_id);
3785 FETCH c_req_header_rec INTO l_req_header_id, l_obj_ver_num, l_status_code;
3786 CLOSE c_req_header_rec;
3787
3788 IF l_status_code <> 'APPROVED' THEN
3789 UPDATE ozf_request_headers_all_b
3790 SET status_code ='APPROVED',
3791 object_version_number = l_obj_ver_num + 1
3792 WHERE request_header_id = l_req_header_id;
3793 END IF;
3794
3795 fnd_msg_pub.count_and_get (p_count=> x_msg_count,
3796 p_data=> x_msg_data,
3797 p_encoded=> fnd_api.g_false);
3798
3799 EXCEPTION
3800 WHEN fnd_api.g_exc_error THEN
3801 x_return_status := fnd_api.g_ret_sts_error;
3802 fnd_msg_pub.count_and_get (p_count=> x_msg_count,
3803 p_data=> x_msg_data,
3804 p_encoded=> fnd_api.g_false);
3805 WHEN fnd_api.g_exc_unexpected_error THEN
3806 x_return_status := fnd_api.g_ret_sts_unexp_error;
3807 fnd_msg_pub.count_and_get (p_count=> x_msg_count,
3808 p_data=> x_msg_data,
3809 p_encoded=> fnd_api.g_false);
3810 WHEN OTHERS THEN
3811 x_return_status := fnd_api.g_ret_sts_unexp_error;
3812
3813 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error) THEN
3814 fnd_msg_pub.add_exc_msg (g_pkg_name, l_api_name);
3815 END IF;
3816
3817 fnd_msg_pub.count_and_get (p_count=> x_msg_count,
3818 p_data=> x_msg_data,
3819 p_encoded=> fnd_api.g_false);
3820 END update_request_status;
3821
3822
3823 -------------------------------------------------
3824 -- Start of Comments
3825 --
3826 -- NAME
3827 -- Activate_Offer_Over
3828 --
3829 -- PURPOSE
3830 -- This Procedure actives the offer if certain conditions are met.
3831 --
3832 -- IN
3833 -- p_init_msg_list IN VARCHAR2,
3834 -- p_api_version IN NUMBER,
3835 -- p_commit IN VARCHAR2,
3836 -- p_offer_rec IN offers_rec_type
3837 --
3838 -- OUT
3839 -- x_return_status OUT VARCHAR2,
3840 -- x_msg_count OUT NUMBER,
3841 -- x_msg_data OUT VARCHAR2,
3842 --
3843 -- NOTES
3844 --
3845 -- HISTORY
3846 -- 15-MAY-2001 julou created
3847 -- End of Comments
3848 -------------------------------------------------
3849 PROCEDURE Activate_Offer_Over(
3850 p_init_msg_list IN VARCHAR2,
3851 p_api_version IN NUMBER,
3852 p_commit IN VARCHAR2,
3853 x_return_status OUT NOCOPY VARCHAR2,
3854 x_msg_count OUT NOCOPY NUMBER,
3855 x_msg_data OUT NOCOPY VARCHAR2,
3856 p_called_from IN VARCHAR2, -- possible values 'B' Budget,'R' -Regular
3857 p_offer_rec IN modifier_list_rec_type,
3858 x_amount_error OUT NOCOPY VARCHAR2
3859 )
3860 IS
3861
3862 CURSOR c_offer_id(p_qp_list_header_id NUMBER) IS
3863 SELECT offer_id
3864 FROM ozf_offers
3865 WHERE qp_list_header_id = p_qp_list_header_id;
3866
3867 CURSOR c_offer_start_date(p_list_header_id NUMBER) IS
3868 SELECT q.start_date_active, o.start_date
3869 FROM qp_list_headers_b q, ozf_offers o
3870 WHERE o.qp_list_header_id = q.list_header_id
3871 AND q.list_header_id = p_list_header_id;
3872
3873 -- nepanda : start : fix for bug 8507709 : added cursor to find out if data is already there in qp_list_line table for an offer
3874 CURSOR c_exists_in_qp_list_line(l_list_header_id NUMBER) IS
3875 SELECT 1
3876 FROM DUAL
3877 WHERE EXISTS (SELECT 1
3878 FROM qp_list_lines
3879 WHERE list_header_id = l_list_header_id);
3880 l_exists_in_qp_list_line NUMBER;
3881 -- nepanda : end : fix for bug 8507709
3882 -- fix for bug 7004273 and 7201785
3883 CURSOR c_sd_req_header_rec(p_offer_id IN NUMBER) IS
3884 SELECT sdr.object_version_number, sdr.request_header_id
3885 FROM ozf_sd_request_headers_all_b sdr, ozf_offers off
3886 --WHERE nvl(sdr.authorization_number,sdr.request_number) = off.offer_code
3887 WHERE sdr.request_number = off.offer_code
3888 AND off.qp_list_header_id = p_offer_id
3889 AND sdr.user_status_id = OZF_Utility_PVT.get_default_user_status('OZF_SD_REQUEST_STATUS', 'PENDING_OFFER_APPROVAL');
3890
3891
3892 CURSOR c_offer_status_code(p_qp_list_header_id NUMBER) IS
3893 SELECT status_code
3894 FROM ozf_offers
3895 WHERE qp_list_header_id = p_qp_list_header_id;
3896
3897 l_api_name CONSTANT VARCHAR2(30) := 'Activate_Offer_Over';
3898 l_api_version CONSTANT NUMBER := 1.0;
3899 l_msg_data VARCHAR2(2000);
3900 l_msg_count NUMBER;
3901 --l_offer_rec modifier_list_rec_type := p_offer_rec;
3902 l_recal VARCHAR2(1);
3903 l_pass_validation_flag VARCHAR2(1);
3904 l_offer_id NUMBER;
3905 x_qualifiers_tbl qp_qualifier_rules_pub.qualifiers_tbl_type;
3906 l_start_date_q DATE;
3907 l_start_date_o DATE;
3908 l_start_date DATE;
3909 l_obj_ver_num NUMBER;
3910 l_sdr_req_header_id NUMBER;
3911 l_status_code ozf_offers.status_code%type;
3912 BEGIN
3913 SAVEPOINT activate_offer_over;
3914 -- Standard call to check for call compatibility.
3915 IF NOT FND_API.Compatible_API_Call ( l_api_version,
3916 p_api_version,
3917 l_api_name,
3918 G_PKG_NAME)
3919 THEN
3920 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3921 END IF;
3922
3923 -- Initialize message list if p_init_msg_list is set to TRUE.
3924 IF FND_API.to_Boolean( p_init_msg_list )
3925 THEN
3926 FND_MSG_PUB.initialize;
3927 END IF;
3928
3929 -- Initialize API return status to SUCCESS
3930 x_return_status := FND_API.G_RET_STS_SUCCESS;
3931 x_amount_error := 'N';
3932
3933 IF p_offer_rec.custom_setup_id = 105 THEN
3934 OPEN c_offer_id(p_offer_rec.qp_list_header_id);
3935 FETCH c_offer_id INTO l_offer_id;
3936 CLOSE c_offer_id;
3937
3938 IF p_offer_rec.status_code = 'DRAFT' THEN
3939 l_pass_validation_flag := 'N';
3940 ELSE
3941 l_pass_validation_flag := 'Y';
3942 END IF;
3943
3944 pv_referral_comp_pub.Update_Referral_Status (p_api_version => p_api_version,
3945 p_init_msg_list => p_init_msg_list,
3946 p_commit => p_commit,
3947 p_validation_level => FND_API.g_valid_level_full,
3948 p_offer_id => l_offer_id,
3949 p_pass_validation_flag => l_pass_validation_flag,
3950 x_return_status => x_return_status,
3951 x_msg_count => x_msg_count,
3952 x_msg_data => x_msg_data);
3953 END IF;
3954
3955 IF p_offer_rec.status_code = 'DRAFT' THEN
3956 -- CP validation fails. update offer to DRAFT
3957 UPDATE ozf_offers
3958 SET status_code = 'DRAFT'
3959 ,user_status_id = OZF_Utility_PVT.get_default_user_status ('OZF_OFFER_STATUS', 'DRAFT')
3960 ,status_date = SYSDATE
3961 ,object_version_number = object_version_number + 1
3962 WHERE qp_list_header_id = p_offer_rec.qp_list_header_id;
3963 ELSE
3964 -- validate approved amount vs committed amout and update offer status depending on recal
3965 -- moved from end
3966 validate_offer(
3967 p_init_msg_list => FND_API.G_FALSE,
3968 p_api_version => 1.0,
3969 x_return_status => x_return_status,
3970 x_msg_count => x_msg_count,
3971 x_msg_data => x_msg_data,
3972 p_offer_rec => p_offer_rec
3973 );
3974 l_recal := FND_PROFILE.VALUE('OZF_BUDGET_ADJ_ALLOW_RECAL');
3975 IF x_return_status = FND_API.G_RET_STS_ERROR THEN
3976 --julou amount validation failed, update status depending on recal
3977 IF p_called_from = 'R' THEN
3978 IF p_offer_rec.offer_type IN ('LUMPSUM', 'SCAN_DATA') THEN
3979 UPDATE ozf_offers
3980 SET status_code = 'PENDING_ACTIVE',
3981 status_date = SYSDATE,
3982 object_version_number = object_version_number + 1,
3983 user_status_id = OZF_Utility_PVT.get_default_user_status('OZF_OFFER_STATUS', 'PENDING_ACTIVE')
3984 WHERE qp_list_header_id = p_offer_rec.qp_list_header_id;
3985 ELSE
3986 UPDATE ozf_offers
3987 SET status_code = DECODE(l_recal, 'N', 'PENDING_ACTIVE', 'Y', 'DRAFT'),
3988 status_date = SYSDATE,
3989 object_version_number = object_version_number + 1,
3990 user_status_id = OZF_Utility_PVT.get_default_user_status('OZF_OFFER_STATUS', DECODE(l_recal, 'N', 'PENDING_ACTIVE', 'Y', 'DRAFT'))
3991 WHERE qp_list_header_id = p_offer_rec.qp_list_header_id;
3992 END IF;
3993 ELSE -- called from B/ set amount error and the caller takes care of status
3994 x_amount_error := 'Y';
3995 END IF; -- end called from 'R'
3996
3997 IF p_offer_rec.custom_setup_id = 110 THEN
3998 UPDATE ozf_approval_access
3999 SET action_code = NULL
4000 , action_date = NULL
4001 , action_performed_by = NULL
4002 , workflow_itemkey = NULL
4003 , approval_access_flag = 'Y'
4004 , object_version_number = object_version_number + 1
4005 , last_update_date = sysdate
4006 , last_updated_by = FND_GLOBAL.user_id
4007 WHERE approval_access_id IN
4008 (SELECT apr.approval_access_id
4009 FROM ozf_approval_access apr
4010 , ozf_request_headers_all_b req
4011 , jtf_rs_resource_extns jre
4012 WHERE req.request_header_id = apr.object_id
4013 AND apr.object_id = req.request_header_id
4014 AND req.offer_id = p_offer_rec.qp_list_header_id
4015 AND req.request_class = 'SOFT_FUND' -- or 'SPECIAL_PRICE'
4016 AND req.approved_by = jre.resource_id
4017 AND apr.action_performed_by = jre.user_id);
4018 END IF;
4019
4020 x_return_status := FND_API.G_RET_STS_SUCCESS;
4021 RETURN;-- validation fails, update to DRAFT or PENDING_ACTIVE and return(no posting)
4022
4023 ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
4024 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4025 ELSIF x_return_status = FND_API.G_RET_STS_SUCCESS THEN
4026 --julou validation passed, update offer to active and posting
4027
4028 -- Invoke Post_Lumpsum_Offer/Post_Scan_Data_Offer
4029 -- budget CP does not post lumpsum and scan data. Posting is done here for both R and B
4030 IF p_offer_rec.offer_type = 'LUMPSUM' THEN
4031 Post_Lumpsum_Offer(
4032 p_api_version => 1.0,
4033 p_init_msg_list => FND_API.G_FALSE,
4034 p_commit => FND_API.G_FALSE,
4035 p_offer_rec => p_offer_rec,
4036 x_return_status => x_return_status,
4037 x_msg_count => x_msg_count,
4038 x_msg_data => x_msg_data);
4039
4040 IF x_return_status = FND_API.G_RET_STS_ERROR THEN
4041 RAISE FND_API.G_EXC_ERROR;
4042 ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
4043 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4044 END IF;
4045 ELSIF p_offer_rec.offer_type = 'SCAN_DATA' THEN
4046 Post_Scan_Data_Offer(
4047 p_api_version => 1.0,
4048 p_init_msg_list => FND_API.G_FALSE,
4049 p_commit => FND_API.G_FALSE,
4050 p_offer_rec => p_offer_rec,
4051 x_return_status => x_return_status,
4052 x_msg_count => x_msg_count,
4053 x_msg_data => x_msg_data);
4054 IF x_return_status = FND_API.G_RET_STS_ERROR THEN
4055 RAISE FND_API.G_EXC_ERROR;
4056 ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
4057 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4058 END IF;
4059 END IF;
4060
4061 OPEN c_offer_start_date(p_offer_rec.qp_list_header_id);
4062 FETCH c_offer_start_date INTO l_start_date_q, l_start_date_o;
4063 CLOSE c_offer_start_date;
4064
4065 IF l_start_date_o IS NULL THEN
4066 l_start_date := GREATEST(NVL(l_start_date_q, SYSDATE), SYSDATE);
4067 ELSE
4068 l_start_date := l_start_date_o;
4069 END IF;
4070
4071 UPDATE ozf_offers
4072 SET status_code = 'ACTIVE',
4073 status_date = SYSDATE,
4074 object_version_number = object_version_number + 1,
4075 start_date = l_start_date,
4076 user_status_id = OZF_Utility_PVT.get_default_user_status('OZF_OFFER_STATUS', 'ACTIVE')
4077 WHERE qp_list_header_id = p_offer_rec.qp_list_header_id;
4078
4079 IF p_offer_rec.custom_setup_id = 110 THEN -- soft fund offers
4080 -- update ozf_request_headers_all_b update activating
4081 update_request_status (x_return_status => x_return_status,
4082 x_msg_count => x_msg_count,
4083 x_msg_data => x_msg_data,
4084 p_qp_list_header_id => p_offer_rec.qp_list_header_id);
4085 END IF;
4086
4087 ozf_utility_pvt.write_conc_log('p_offer_rec.custom_setup_id '||p_offer_rec.custom_setup_id);
4088 ozf_utility_pvt.write_conc_log('p_offer_rec.qp_list_header_id '||p_offer_rec.qp_list_header_id);
4089
4090
4091 IF p_offer_rec.custom_setup_id = 118 THEN -- SD offers
4092 -- update ozf_sd_request_headers_all_b update activating
4093 OPEN c_sd_req_header_rec(p_offer_rec.qp_list_header_id);
4094 FETCH c_sd_req_header_rec INTO l_obj_ver_num , l_sdr_req_header_id;
4095 CLOSE c_sd_req_header_rec;
4096
4097 ozf_utility_pvt.write_conc_log('l_obj_ver_num '||l_obj_ver_num);
4098 ozf_utility_pvt.write_conc_log('l_sdr_req_header_id '|| l_sdr_req_header_id);
4099
4100 --fix for bug 7004273
4101
4102 UPDATE ozf_sd_request_headers_all_b
4103 SET user_status_id = OZF_Utility_PVT.get_default_user_status('OZF_SD_REQUEST_STATUS', 'ACTIVE') ,
4104 object_version_number = l_obj_ver_num + 1
4105 WHERE request_header_id = l_sdr_req_header_id;
4106 END IF;
4107
4108 IF p_offer_rec.offer_type NOT IN('LUMPSUM', 'SCAN_DATA', 'NET_ACCRUAL') THEN
4109 UPDATE qp_list_headers_b
4110 SET active_flag = 'Y'
4111 WHERE list_header_id = p_offer_rec.qp_list_header_id;
4112
4113 UPDATE qp_qualifiers
4114 SET active_flag='Y'
4115 WHERE list_header_id = p_offer_rec.qp_list_header_id;
4116 /*
4117 IF p_offer_rec.offer_type = 'DEAL' THEN
4118 process_rltd_modifier_qual(
4119 p_init_msg_list => p_init_msg_list,
4120 p_commit => p_commit,
4121 p_list_header_id => p_offer_rec.qp_list_header_id,
4122 x_return_status => x_return_status,
4123 x_msg_count => x_msg_count,
4124 x_msg_data => x_msg_data);
4125 END IF;*/
4126 END IF;
4127
4128 -- Invoke Push_Target_Group if the offer is re-useable
4129 -- For Non-Reusable Offers Schedule activation should push the target group.
4130 IF p_offer_rec.reusable = 'Y' THEN
4131 Push_Target_group(
4132 p_api_version => 1.0,
4133 p_init_msg_list => FND_API.G_FALSE,
4134 p_commit => FND_API.g_false,
4135 p_offer_rec => p_offer_rec,
4136 x_return_status => x_return_status,
4137 x_msg_count => x_msg_count,
4138 x_msg_data => x_msg_data);
4139
4140 IF x_return_status = FND_API.G_RET_STS_ERROR THEN
4141 RAISE FND_API.G_EXC_ERROR;
4142 ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
4143 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4144 END IF;
4145 END IF;
4146 END IF;
4147 END IF;
4148
4149 debug_message('Calling Process Offer Activation');
4150
4151 -- nepanda : start : fix for bug 8507709 : check if line data is not there in qp_list_lines table already, then only call process_offer_activation
4152 l_exists_in_qp_list_line := NULL;
4153 OPEN c_exists_in_qp_list_line(p_offer_rec.qp_list_header_id);
4154 FETCH c_exists_in_qp_list_line INTO l_exists_in_qp_list_line;
4155 CLOSE c_exists_in_qp_list_line;
4156
4157 IF l_exists_in_qp_list_line IS NULL THEN
4158 -- nepanda : end : fix for bug 8507709
4159 process_offer_activation
4160 (
4161 p_api_version_number => p_api_version
4162 , p_init_msg_list => p_init_msg_list
4163 , p_commit => p_commit
4164 , p_validation_level => FND_API.G_VALID_LEVEL_FULL
4165 , x_return_status => x_return_status
4166 , x_msg_count => x_msg_count
4167 , x_msg_data => x_msg_data
4168 , p_offer_rec => p_offer_rec
4169 );
4170
4171 -- RAISE FND_API.G_EXC_ERROR;
4172 IF x_return_status = FND_API.G_RET_STS_ERROR THEN
4173 RAISE FND_API.G_EXC_ERROR;
4174 ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
4175 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4176 END IF;
4177 END IF;
4178
4179 --nirprasa, fix for bug 9115198. raise event whenever offer becomes active.
4180 OPEN c_offer_status_code(p_offer_rec.qp_list_header_id);
4181 FETCH c_offer_status_code INTO l_status_code;
4182 CLOSE c_offer_status_code;
4183
4184 IF l_status_code = 'ACTIVE' THEN
4185 raise_offer_event(p_offer_id => p_offer_rec.qp_list_header_id );
4186 END IF;
4187
4188 FND_MSG_PUB.Count_And_Get
4189 (p_count => x_msg_count,
4190 p_data => x_msg_data,
4191 p_encoded => FND_API.G_FALSE
4192 );
4193
4194 EXCEPTION
4195 WHEN FND_API.G_EXC_ERROR THEN
4196 x_return_status := FND_API.g_ret_sts_error ;
4197 ROLLBACK TO activate_offer_over;
4198 FND_MSG_PUB.Count_AND_Get
4199 ( p_count => l_msg_count,
4200 p_data => l_msg_data,
4201 p_encoded => FND_API.G_FALSE
4202 );
4203 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4204 x_return_status := FND_API.g_ret_sts_unexp_error ;
4205 ROLLBACK TO activate_offer_over;
4206 FND_MSG_PUB.Count_AND_Get
4207 ( p_count => l_msg_count,
4208 p_data => l_msg_data,
4209 p_encoded => FND_API.G_FALSE
4210 );
4211 WHEN OTHERS THEN
4212 x_return_status := FND_API.g_ret_sts_unexp_error ;
4213 ROLLBACK TO activate_offer_over;
4214 IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
4215 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
4216 END IF;
4217 FND_MSG_PUB.Count_AND_Get
4218 ( p_count => l_msg_count,
4219 p_data => l_msg_data,
4220 p_encoded => FND_API.G_FALSE
4221 );
4222 END Activate_Offer_Over;
4223
4224
4225 PROCEDURE offer_dates(
4226 p_modifier_list_rec IN modifier_list_rec_type
4227 ,x_return_status OUT NOCOPY VARCHAR2
4228 ,x_msg_count OUT NOCOPY NUMBER
4229 ,x_msg_data OUT NOCOPY VARCHAR2
4230 )IS
4231
4232 l_api_version CONSTANT NUMBER := 1.0;
4233 l_api_name CONSTANT VARCHAR2(30) := 'offer_dates';
4234 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
4235
4236 l_qualifier_tbl qualifiers_tbl_type;
4237 l_error_location NUMBER := 0;
4238 i NUMBER := 1;
4239 l_ord_id NUMBER := 0;
4240 l_ship_id NUMBER := 0;
4241
4242 CURSOR c_qualifier_id(l_list_header_id NUMBER) IS
4243 SELECT qualifier_id , qualifier_context , qualifier_attribute
4244 FROM qp_qualifiers
4245 WHERE list_header_id = l_list_header_id
4246 AND qualifier_context = 'ORDER'
4247 AND qualifier_attribute in ('QUALIFIER_ATTRIBUTE1','QUALIFIER_ATTRIBUTE8');
4248
4249 x_qualifiers_tbl qp_qualifier_rules_pub.qualifiers_tbl_type;
4250
4251 BEGIN
4252
4253 ----------- initialize -------------
4254 SAVEPOINT offer_dates;
4255
4256 x_return_status := Fnd_Api.g_ret_sts_success;
4257
4258 FOR c1_rec IN c_qualifier_id(p_modifier_list_rec.qp_list_header_id) LOOP
4259 IF c1_rec.qualifier_attribute = 'QUALIFIER_ATTRIBUTE1'
4260 THEN l_ord_id := c1_rec.qualifier_id ;
4261 ELSIF c1_rec.qualifier_attribute = 'QUALIFIER_ATTRIBUTE8'
4262 THEN l_ship_id := c1_rec.qualifier_id ;
4263 END IF;
4264 END LOOP;
4265
4266
4267 /*
4268 The logic of the operator is as
4269 if both start date and end date are entered then the operator is 'BETWEEN' else the operator is '='
4270 */
4271 -- Order Date
4272 --ninarasi Bug fix 12711496
4273 IF (
4274 (l_ord_id <> 0 OR
4275 (p_modifier_list_rec.start_date_active_first IS NOT NULL AND p_modifier_list_rec.start_date_active_first <> Fnd_Api.g_miss_date
4276 )
4277 OR
4278 (p_modifier_list_rec.end_date_active_first IS NOT NULL AND p_modifier_list_rec.end_date_active_first <> Fnd_Api.g_miss_date
4279 )
4280 )
4281 )
4282 THEN
4283
4284 IF p_modifier_list_rec.start_date_active_first <> fnd_api.g_miss_date THEN
4285 l_qualifier_tbl(i).qualifier_context :='ORDER';
4286 l_qualifier_tbl(i).qualifier_attribute := 'QUALIFIER_ATTRIBUTE1';
4287 -- fix for bug # 8717146. Changing qualifier date mask to 24 Hr Format
4288 l_qualifier_tbl(i).qualifier_attr_value := to_char(p_modifier_list_rec.start_date_active_first,'YYYY/MM/DD HH24:MI:SS');
4289 l_qualifier_tbl(i).qualifier_attr_value_to := to_char(p_modifier_list_rec.end_date_active_first,'YYYY/MM/DD HH24:MI:SS');
4290 l_qualifier_tbl(i).comparison_operator_code := '=';
4291 IF(p_modifier_list_rec.start_date_active_first IS NOT NULL AND p_modifier_list_rec.end_date_active_first IS NOT NULL ) THEN
4292 l_qualifier_tbl(i).comparison_operator_code := 'BETWEEN';
4293 END IF;
4294 END IF;
4295
4296 -- rssharma Changed Grouping Number from 10 to -1
4297
4298
4299 IF l_ord_id <> 0 AND (p_modifier_list_rec.start_date_active_first IS NULL AND p_modifier_list_rec.end_date_active_first IS NULL )
4300 THEN
4301 l_qualifier_tbl(i).operation :='DELETE';
4302 l_qualifier_tbl(i).qualifier_id := l_ord_id;
4303
4304 ELSIF l_ord_id <> 0 THEN
4305 l_qualifier_tbl(i).operation :='UPDATE';
4306 l_qualifier_tbl(i).qualifier_id := l_ord_id;
4307
4308 ELSE
4309 l_qualifier_tbl(i).operation :='CREATE';
4310 l_qualifier_tbl(i).qualifier_grouping_no := -100; --ninarasi Bug fix 12711496
4311
4312 END IF;
4313 l_qualifier_tbl(i).list_header_id := p_modifier_list_rec.qp_list_header_id;
4314 i := i+1;
4315
4316 -- End Order Date
4317 -- Ship Date
4318 END IF;
4319
4320 /*
4321 The logic of the operator is as
4322 if both start date and end date are entered then the operator is 'BETWEEN' else the operator is '='
4323 */
4324 --ninarasi Bug fix 12711496
4325 IF (
4326 (
4327 l_ship_id <> 0
4328 OR
4329 (p_modifier_list_rec.start_date_active_second IS NOT NULL AND p_modifier_list_rec.start_date_active_second <> Fnd_Api.g_miss_date )
4330 OR
4331 (p_modifier_list_rec.end_date_active_second IS NOT NULL AND p_modifier_list_rec.end_date_active_second <> Fnd_Api.g_miss_date )
4332 )
4333 ) THEN
4334
4335 IF p_modifier_list_rec.start_date_active_second <> fnd_api.g_miss_date THEN
4336 l_qualifier_tbl(i).qualifier_context :='ORDER';
4337 l_qualifier_tbl(i).qualifier_attribute := 'QUALIFIER_ATTRIBUTE8';
4338 -- fix for bug # 8717146. Changing qualifier date mask to 24 Hr Format
4339 l_qualifier_tbl(i).qualifier_attr_value := to_char(p_modifier_list_rec.start_date_active_second,'YYYY/MM/DD HH24:MI:SS');
4340 l_qualifier_tbl(i).qualifier_attr_value_to := to_char(p_modifier_list_rec.end_date_active_second,'YYYY/MM/DD HH24:MI:SS');
4341 l_qualifier_tbl(i).comparison_operator_code := '=';
4342 IF(p_modifier_list_rec.start_date_active_second IS NOT NULL AND p_modifier_list_rec.end_date_active_second IS NOT NULL ) THEN
4343 l_qualifier_tbl(i).comparison_operator_code := 'BETWEEN';
4344 END IF;
4345 END IF;
4346 -- rssharma Changed grouping Number to -1 from 10
4347
4348 IF l_ship_id <> 0 AND (p_modifier_list_rec.start_date_active_second IS NULL AND p_modifier_list_rec.end_date_active_second is NULL)
4349 THEN
4350 l_qualifier_tbl(i).operation :='DELETE';
4351 l_qualifier_tbl(i).qualifier_id := l_ship_id;
4352
4353 ELSIF l_ship_id <> 0 THEN
4354 l_qualifier_tbl(i).operation :='UPDATE';
4355 l_qualifier_tbl(i).qualifier_id := l_ship_id;
4356
4357 ELSE
4358 l_qualifier_tbl(i).operation :='CREATE';
4359 l_qualifier_tbl(i).qualifier_grouping_no := -200; --ninarasi Bug fix 12711496
4360
4361 END IF;
4362
4363 l_qualifier_tbl(i).list_header_id := p_modifier_list_rec.qp_list_header_id;
4364 i := i+1;
4365
4366
4367 END IF;
4368 -- End Ship date
4369 OZF_Utility_PVT.debug_message(FND_LOG.LEVEL_STATEMENT,l_full_name,'before process_market_qualifiers 4 l_qualifier_tbl.COUNT = '|| l_qualifier_tbl.COUNT);
4370 process_market_qualifiers
4371 (
4372 p_api_version => 1.0,
4373 p_init_msg_list => Fnd_Api.g_false,
4374 p_commit => Fnd_Api.g_false,
4375 x_return_status => x_return_status ,
4376 x_msg_count => x_msg_count,
4377 x_msg_data => x_msg_data,
4378 p_qualifiers_tbl => l_qualifier_tbl,
4379 x_error_location => l_error_location,
4380 x_qualifiers_tbl => x_qualifiers_tbl
4381 );
4382 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
4383 RAISE Fnd_Api.g_exc_error;
4384 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
4385 RAISE Fnd_Api.g_exc_unexpected_error;
4386 END IF;
4387
4388 Fnd_Msg_Pub.Count_AND_Get
4389 ( p_count => x_msg_count,
4390 p_data => x_msg_data,
4391 p_encoded => Fnd_Api.G_FALSE
4392 );
4393
4394 EXCEPTION
4395 WHEN Fnd_Api.G_EXC_ERROR THEN
4396 x_return_status := Fnd_Api.g_ret_sts_error ;
4397 ROLLBACK TO offer_dates;
4398 Fnd_Msg_Pub.Count_AND_Get
4399 ( p_count => x_msg_count,
4400 p_data => x_msg_data,
4401 p_encoded => Fnd_Api.G_FALSE
4402 );
4403 WHEN Fnd_Api.G_EXC_UNEXPECTED_ERROR THEN
4404 x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
4405 ROLLBACK TO offer_dates;
4406 Fnd_Msg_Pub.Count_AND_Get
4407 ( p_count => x_msg_count,
4408 p_data => x_msg_data,
4409 p_encoded => Fnd_Api.G_FALSE
4410 );
4411 WHEN OTHERS THEN
4412 x_return_status := Fnd_Api.g_ret_sts_unexp_erroR ;
4413 ROLLBACK TO offer_dates;
4414 IF Fnd_Msg_Pub.Check_Msg_Level ( Fnd_Msg_Pub.G_MSG_LVL_UNEXP_ERROR )
4415 THEN
4416 Fnd_Msg_Pub.Add_Exc_Msg( G_PKG_NAME,l_api_name);
4417 END IF;
4418 Fnd_Msg_Pub.Count_AND_Get
4419 ( p_count => x_msg_count,
4420 p_data => x_msg_data,
4421 p_encoded => Fnd_Api.G_FALSE
4422 );
4423 END offer_dates;
4424
4425
4426
4427 PROCEDURE process_qp_list_header(
4428 p_init_msg_list IN VARCHAR2
4429 ,p_api_version IN NUMBER
4430 ,x_return_status OUT NOCOPY VARCHAR2
4431 ,x_msg_count OUT NOCOPY NUMBER
4432 ,x_msg_data OUT NOCOPY VARCHAR2
4433 ,p_modifier_list_rec IN modifier_list_rec_type
4434 ,x_modifier_list_rec OUT NOCOPY modifier_list_rec_type
4435 ,p_old_status_id IN NUMBER
4436 ,p_approval_type IN VARCHAR2
4437 ,p_new_status_code IN VARCHAR2
4438 ) IS
4439 l_api_version CONSTANT NUMBER := 1.0;
4440 l_api_name CONSTANT VARCHAR2(30) := 'process_qp_list_header';
4441 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
4442
4443 l_modifier_list_rec Qp_Modifiers_Pub.modifier_list_rec_type;
4444 v_modifier_list_rec qp_modifiers_pub.modifier_list_rec_type;
4445
4446 v_modifier_list_val_rec qp_modifiers_pub.modifier_list_val_rec_type;
4447 v_modifiers_tbl qp_modifiers_pub.modifiers_tbl_type;
4448 v_modifiers_val_tbl qp_modifiers_pub.modifiers_val_tbl_type;
4449 v_qualifiers_tbl qp_qualifier_rules_pub.qualifiers_tbl_type;
4450 v_qualifiers_val_tbl qp_qualifier_rules_pub.qualifiers_val_tbl_type;
4451 v_pricing_attr_tbl qp_modifiers_pub.pricing_attr_tbl_type;
4452 v_pricing_attr_val_tbl qp_modifiers_pub.pricing_attr_val_tbl_type;
4453
4454 l_limits_rec QP_Limits_PUB.Limits_Rec_Type;
4455 temp_limits_rec QP_Limits_PUB.Limits_Rec_Type;
4456 v_limits_rec QP_Limits_PUB.Limits_Rec_Type;
4457 v_limits_val_rec QP_Limits_PUB.Limits_Val_Rec_Type;
4458 v_limit_attrs_tbl QP_Limits_PUB.Limit_Attrs_Tbl_Type;
4459 v_limit_attrs_val_tbl QP_Limits_PUB.Limit_Attrs_Val_Tbl_Type;
4460 v_limit_balances_tbl QP_Limits_PUB.Limit_Balances_Tbl_Type;
4461 v_limit_balances_val_tbl QP_Limits_PUB.Limit_Balances_Val_Tbl_Type;
4462
4463 l_uk_flag VARCHAR2(1);
4464
4465 --nepanda : fix for bug 9149865
4466 CURSOR c_check_uniqeness_create
4467 IS
4468 SELECT 1 from AMS_SOURCE_CODES
4469 WHERE source_code = p_modifier_list_rec.offer_code;
4470
4471 -- nepanda : Fix for Bug 12950967
4472 CURSOR c_qp_limit_line_id(p_limit_id NUMBER) IS
4473 SELECT list_line_id
4474 FROM qp_limits
4475 WHERE limit_id = p_limit_id;
4476
4477 CURSOR get_offer_info_frm_hdr(l_list_hdr_id NUMBER) IS
4478 SELECT hdr.orig_org_id, hdr.global_flag
4479 FROM qp_list_headers_all_b hdr
4480 WHERE hdr.list_header_id = l_list_hdr_id;
4481
4482 l_org_id NUMBER := FND_API.G_MISS_NUM;
4483 l_global_flag VARCHAR2(5) := FND_API.G_MISS_CHAR;
4484 l_context_changed VARCHAR2(1) := 'F';
4485
4486 BEGIN
4487 SAVEPOINT process_qp_list_header;
4488 --dbms_output.put_line('calling qp procedure');
4489
4490 x_return_status := Fnd_Api.g_ret_sts_success;
4491
4492 ozf_utility_pvt.debug_message('p_modifier_list_rec.orig_org_id : ' || p_modifier_list_rec.orig_org_id);
4493
4494
4495
4496
4497 l_modifier_list_rec.operation := p_modifier_list_rec.modifier_operation;
4498 l_modifier_list_rec.list_header_id := p_modifier_list_rec.qp_list_header_id ;
4499 l_modifier_list_rec.list_type_code := 'PRO';
4500 l_modifier_list_rec.source_system_code := FND_PROFILE.VALUE('QP_SOURCE_SYSTEM_CODE');
4501 l_modifier_list_rec.description := p_modifier_list_rec.description;
4502 l_modifier_list_rec.comments := p_modifier_list_rec.comments;
4503 l_modifier_list_rec.currency_code := p_modifier_list_rec.currency_code;
4504 l_modifier_list_rec.start_date_active := trunc(p_modifier_list_rec.start_date_active);
4505 l_modifier_list_rec.end_date_active := trunc(p_modifier_list_rec.end_date_active);
4506 l_modifier_list_rec.automatic_flag := 'Y';
4507 -- 15-Nov-2002 rssharma added FlexFields
4508 l_modifier_list_rec.ask_for_flag := p_modifier_list_rec.ask_for_flag;
4509 l_modifier_list_rec.attribute1 := p_modifier_list_rec.attribute1;
4510 l_modifier_list_rec.attribute2 := p_modifier_list_rec.attribute2;
4511 l_modifier_list_rec.attribute3 := p_modifier_list_rec.attribute3;
4512 l_modifier_list_rec.attribute4 := p_modifier_list_rec.attribute4;
4513 l_modifier_list_rec.attribute5 := p_modifier_list_rec.attribute5;
4514 l_modifier_list_rec.attribute6 := p_modifier_list_rec.attribute6;
4515 l_modifier_list_rec.attribute7 := p_modifier_list_rec.attribute7;
4516 l_modifier_list_rec.attribute8 := p_modifier_list_rec.attribute8;
4517 l_modifier_list_rec.attribute9 := p_modifier_list_rec.attribute9;
4518 l_modifier_list_rec.attribute10 := p_modifier_list_rec.attribute10;
4519 l_modifier_list_rec.attribute11 := p_modifier_list_rec.attribute11;
4520 l_modifier_list_rec.attribute12 := p_modifier_list_rec.attribute12;
4521 l_modifier_list_rec.attribute13 := p_modifier_list_rec.attribute13;
4522 l_modifier_list_rec.attribute14 := p_modifier_list_rec.attribute14;
4523 l_modifier_list_rec.attribute15 := p_modifier_list_rec.attribute15;
4524 l_modifier_list_rec.context := p_modifier_list_rec.context;
4525 l_modifier_list_rec.global_flag := p_modifier_list_rec.global_flag;
4526 l_modifier_list_rec.org_id := p_modifier_list_rec.orig_org_id;
4527
4528 -- end change 15-Nov-2002
4529 IF p_modifier_list_rec.offer_code <> Fnd_Api.g_miss_char THEN
4530 l_modifier_list_rec.name := p_modifier_list_rec.offer_code;
4531 END IF;
4532
4533 IF p_modifier_list_rec.offer_operation IS NOT NULL AND p_modifier_list_rec.offer_operation <> FND_API.G_MISS_CHAR THEN
4534 IF p_modifier_list_rec.modifier_operation = 'CREATE' THEN
4535 l_modifier_list_rec.active_flag := 'N';
4536 ELSIF p_modifier_list_rec.modifier_operation = 'UPDATE' THEN
4537 IF (p_modifier_list_rec.user_status_id <> FND_API.g_miss_num)
4538 AND (p_modifier_list_rec.user_status_id <> p_old_status_id) THEN
4539 --nepanda : fix for bug 8507709 : call process_offer_activation only when status is changing from DRAFT to ACTIVE (in order to prevent populating qp_list_lines table in case of ON-HOLD to ACTIVE
4540 IF p_new_status_code = 'ACTIVE' THEN
4541 IF p_approval_type is NULL AND p_modifier_list_rec.offer_type NOT IN ('LUMPSUM', 'SCAN_DATA') THEN
4542 l_modifier_list_rec.active_flag := 'Y';
4543 IF ozf_utility_pvt.get_system_status_code(p_old_status_id) = 'DRAFT' THEN
4544 debug_message('Calling activate');
4545 process_offer_activation
4546 (
4547 p_api_version_number => p_api_version
4548 , p_init_msg_list => p_init_msg_list
4549 , p_commit => FND_API.g_false
4550 , p_validation_level => FND_API.G_VALID_LEVEL_FULL
4551 , x_return_status => x_return_status
4552 , x_msg_count => x_msg_count
4553 , x_msg_data => x_msg_data
4554 , p_offer_rec => p_modifier_list_rec
4555 );
4556 IF x_return_status = FND_API.G_RET_STS_ERROR THEN
4557 RAISE FND_API.G_EXC_ERROR;
4558 ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
4559 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4560 END IF;
4561 END IF;
4562 END IF;
4563 ELSE
4564 l_modifier_list_rec.active_flag := 'N';
4565 END IF;
4566 END IF;
4567 END IF;
4568 ELSE
4569 IF p_modifier_list_rec.active_flag = FND_API.G_MISS_CHAR OR p_modifier_list_rec.active_flag IS NULL THEN
4570 l_modifier_list_rec.active_flag := 'N';
4571 ELSE
4572 l_modifier_list_rec.active_flag := p_modifier_list_rec.active_flag;
4573 END IF;
4574 END IF;
4575
4576 IF p_modifier_list_rec.start_date_active_first <> Fnd_Api.g_miss_date OR p_modifier_list_rec.end_date_active_first <> Fnd_Api.g_miss_date THEN
4577 l_modifier_list_rec.active_date_first_type := 'ORD';
4578 END IF;
4579
4580 IF p_modifier_list_rec.start_date_active_second <> Fnd_Api.g_miss_date OR p_modifier_list_rec.end_date_active_second <> Fnd_Api.g_miss_date THEN
4581 l_modifier_list_rec.active_date_second_type := 'SHIP';
4582 END IF;
4583
4584 IF p_modifier_list_rec.start_date_active_second IS NULL AND p_modifier_list_rec.end_date_active_second IS NULL THEN
4585 l_modifier_list_rec.active_date_second_type := NULL;
4586 END IF;
4587
4588 IF p_modifier_list_rec.start_date_active_first IS NULL AND p_modifier_list_rec.end_date_active_first IS NULL THEN
4589 l_modifier_list_rec.active_date_first_type := NULL;
4590 END IF;
4591
4592 l_modifier_list_rec.start_date_active_first := p_modifier_list_rec.start_date_active_first;
4593 l_modifier_list_rec.end_date_active_first := p_modifier_list_rec.end_date_active_first;
4594
4595 l_modifier_list_rec.start_date_active_second := p_modifier_list_rec.start_date_active_second;
4596 l_modifier_list_rec.end_date_active_second := p_modifier_list_rec.end_date_active_second;
4597
4598 IF p_modifier_list_rec.modifier_operation = 'CREATE' THEN
4599 IF p_modifier_list_rec.offer_code = Fnd_Api.g_miss_char or p_modifier_list_rec.offer_code IS NULL THEN
4600 l_modifier_list_rec.name := Ams_Sourcecode_Pvt.get_new_source_code (
4601 p_object_type => 'OFFR',
4602 p_custsetup_id => p_modifier_list_rec.custom_setup_id,
4603 p_global_flag => Fnd_Api.g_false
4604 );
4605 ELSE
4606 l_modifier_list_rec.name := p_modifier_list_rec.offer_code;
4607 --nepanda : fix for bug 9149865
4608 --l_uk_flag := OZF_Utility_PVT.check_uniqueness('AMS_SOURCE_CODES','source_code = ''' || p_modifier_list_rec.offer_code || '''');
4609
4610 OPEN c_check_uniqeness_create;
4611 FETCH c_check_uniqeness_create INTO l_uk_flag;
4612 CLOSE c_check_uniqeness_create;
4613
4614
4615 IF l_uk_flag = 1 THEN --Fnd_Api.g_false THEN
4616 IF Fnd_Msg_Pub.check_msg_level(Fnd_Msg_Pub.g_msg_lvl_error) THEN
4617 Fnd_Message.set_name('OZF', 'OZF_ACT_OFFER_DUP_OFFER_CODE');
4618 Fnd_Msg_Pub.ADD;
4619 END IF;
4620 END IF;
4621 END IF;
4622 END IF;
4623
4624 /**
4625 In case of lumpsum and scandata Offers the OrgID field appears in the UI, irrespective of the security profile since
4626 they are always local. The org_id is actually stored in ozf_offers, in this case.
4627 This code only makes sure that if the profile is OFF then the global flag is Y., to get rid of qp_list_header creation errors
4628 */
4629 --Bugfix : 12649016
4630 /*IF p_modifier_list_rec.modifier_operation = 'UPDATE' THEN
4631 IF p_modifier_list_rec.offer_type NOT IN ('LUMPSUM','SCAN_DATA') AND NVL(fnd_profile.value('QP_SECURITY_CONTROL'), 'OFF') = 'OFF' THEN
4632 l_modifier_list_rec.global_flag := 'Y';
4633 l_modifier_list_rec.org_id := NULL;
4634 ELSE
4635 l_modifier_list_rec.global_flag := p_modifier_list_rec.global_flag;
4636 l_modifier_list_rec.org_id := p_modifier_list_rec.orig_org_id;
4637 END IF;
4638 END IF;*/
4639 -- nepanda : Fix for Bug # 14500493
4640 -- When QP_SECURITY_CONTROL is OFF then GLOBAL FLAG will be always Y
4641 -- When QP_SECURITY_CONTROL is ON then taking GLOBAL FLAG from offer rec as it can be 1. Y with Org id = null OR 2. N with Org id = Not Null
4642 IF p_modifier_list_rec.offer_type NOT IN ('LUMPSUM','SCAN_DATA') THEN
4643 IF NVL(fnd_profile.value('QP_SECURITY_CONTROL'), 'OFF') = 'OFF' THEN
4644 OZF_Utility_PVT.debug_message(FND_LOG.LEVEL_STATEMENT,l_full_name,'QP Call in process_qp_list_header QP_SECURITY_CONTROL =OFF ---qp_list_header_id = '|| p_modifier_list_rec.qp_list_header_id);
4645 l_modifier_list_rec.global_flag := 'Y';
4646 l_modifier_list_rec.org_id := NULL;
4647 ELSE
4648 OZF_Utility_PVT.debug_message(FND_LOG.LEVEL_STATEMENT,l_full_name,'QP Call in process_qp_list_header QP_SECURITY_CONTROL ON--qp_list_header_id = '|| p_modifier_list_rec.qp_list_header_id);
4649 OZF_Utility_PVT.debug_message(FND_LOG.LEVEL_STATEMENT,l_full_name,'QP Call in process_qp_list_header--- p_modifier_list_rec.modifier_operation = '|| p_modifier_list_rec.modifier_operation);
4650
4651 IF p_modifier_list_rec.modifier_operation = 'UPDATE' AND p_modifier_list_rec.offer_type NOT IN ('ACCRUAL','OFF_INVOICE','DEAL') THEN
4652 OPEN get_offer_info_frm_hdr(p_modifier_list_rec.qp_list_header_id);
4653 FETCH get_offer_info_frm_hdr INTO l_org_id, l_global_flag;
4654 CLOSE get_offer_info_frm_hdr;
4655
4656 OZF_Utility_PVT.debug_message(FND_LOG.LEVEL_STATEMENT,l_full_name,'QP Call in process_qp_list_header--- New Org Id = '|| p_modifier_list_rec.orig_org_id);
4657 OZF_Utility_PVT.debug_message(FND_LOG.LEVEL_STATEMENT,l_full_name,'QP Call in process_qp_list_header--- Old Org Id = '||l_org_id);
4658
4659 IF (l_org_id IS NOT NULL AND l_org_id <> FND_API.G_MISS_NUM) THEN
4660 IF NVL(l_org_id,0) <> NVL(p_modifier_list_rec.orig_org_id,0) THEN
4661 /*1. Set context to access_mode =S AND org_id = old org id
4662 2. Set flag to indicate that context has been changed*/
4663 OZF_DEBUG_PVT.DEBUG_MO('OZF_OFFER_PVT process_qp_list_header before resetting context for list_header_id : '||l_modifier_list_rec.list_header_id);
4664 MO_GLOBAL.set_policy_context('S', l_org_id);
4665 l_context_changed := 'T';
4666 END IF;
4667 END IF;
4668 l_modifier_list_rec.global_flag := p_modifier_list_rec.global_flag;
4669 l_modifier_list_rec.org_id := p_modifier_list_rec.orig_org_id;
4670 ELSE
4671 l_modifier_list_rec.global_flag := p_modifier_list_rec.global_flag;
4672 l_modifier_list_rec.org_id := p_modifier_list_rec.orig_org_id;
4673 END IF;
4674 END IF;
4675 ELSE
4676 OZF_Utility_PVT.debug_message(FND_LOG.LEVEL_STATEMENT,l_full_name,'QP Call in process_qp_list_header TM Offer---qp_list_header_id = '|| p_modifier_list_rec.qp_list_header_id);
4677 OPEN get_offer_info_frm_hdr(p_modifier_list_rec.qp_list_header_id);
4678 FETCH get_offer_info_frm_hdr INTO l_org_id, l_global_flag;
4679 CLOSE get_offer_info_frm_hdr;
4680
4681 OZF_Utility_PVT.debug_message(FND_LOG.LEVEL_STATEMENT,l_full_name,'QP Call in process_qp_list_header--- New Org Id = '|| p_modifier_list_rec.orig_org_id);
4682 OZF_Utility_PVT.debug_message(FND_LOG.LEVEL_STATEMENT,l_full_name,'QP Call in process_qp_list_header--- Old Org Id = '||l_org_id);
4683
4684 IF (l_org_id IS NOT NULL AND l_org_id <> FND_API.G_MISS_NUM) THEN
4685 IF NVL(l_org_id,0) <> NVL(p_modifier_list_rec.orig_org_id,0) THEN
4686 /*1. Set context to access_mode =S AND org_id = old org id
4687 2. Set flag to indicate that context has been changed*/
4688 OZF_DEBUG_PVT.DEBUG_MO('OZF_OFFER_PVT process_qp_list_header before resetting context for list_header_id : '||l_modifier_list_rec.list_header_id);
4689 MO_GLOBAL.set_policy_context('S', l_org_id);
4690 l_context_changed := 'T';
4691 END IF;
4692 END IF;
4693 l_modifier_list_rec.global_flag := 'N';
4694 l_modifier_list_rec.org_id := p_modifier_list_rec.orig_org_id;
4695 END IF;
4696
4697 OZF_DEBUG_PVT.DEBUG_MO('OZF_OFFER_PVT process_qp_list_header before calling QP for list_header_id : '||l_modifier_list_rec.list_header_id);
4698 OZF_Utility_PVT.debug_message(FND_LOG.LEVEL_STATEMENT, l_full_name ,'QP Call in process_qp_list_header org_id = '|| l_modifier_list_rec.org_id);
4699 OZF_Utility_PVT.debug_message(FND_LOG.LEVEL_STATEMENT, l_full_name ,'QP Call in process_qp_list_header global_flag = '|| l_modifier_list_rec.global_flag);
4700
4701 Qp_Modifiers_Pub.process_modifiers(
4702 p_api_version_number => 1.0,
4703 p_init_msg_list => FND_API.G_FALSE,
4704 p_return_values => Fnd_Api.G_FALSE,
4705 x_return_status => x_return_status,
4706 x_msg_count => x_msg_count,
4707 x_msg_data => x_msg_data,
4708 p_modifier_list_rec => l_modifier_list_rec,
4709 x_modifier_list_rec => v_modifier_list_rec,
4710 x_modifier_list_val_rec => v_modifier_list_val_rec,
4711 x_modifiers_tbl => v_modifiers_tbl,
4712 x_modifiers_val_tbl => v_modifiers_val_tbl,
4713 x_qualifiers_tbl => v_qualifiers_tbl,
4714 x_qualifiers_val_tbl => v_qualifiers_val_tbl,
4715 x_pricing_attr_tbl => v_pricing_attr_tbl,
4716 x_pricing_attr_val_tbl => v_pricing_attr_val_tbl
4717 );
4718
4719 OZF_Utility_PVT.debug_message(FND_LOG.LEVEL_STATEMENT, l_full_name ,'After QP Call in process_qp_list_header x_return_status = '|| x_return_status);
4720 --reset context based on flag
4721 IF l_context_changed = 'T' THEN
4722 --reset back to original value
4723 IF (p_modifier_list_rec.orig_org_id IS NOT NULL AND p_modifier_list_rec.orig_org_id <> FND_API.G_MISS_NUM) THEN
4724 --reset context to access_mode =S AND org_id = new org id
4725 IF NVL(l_org_id,0) <> NVL(p_modifier_list_rec.orig_org_id,0) THEN
4726 MO_GLOBAL.set_policy_context('S', p_modifier_list_rec.orig_org_id);
4727 END IF;
4728 ELSIF NVL(p_modifier_list_rec.orig_org_id,0) = 0 THEN
4729 --for local to global offer, reset back to M before returning.
4730 --need not handle global to local. As QP_ORG_SECURITY function will always find global offers
4731 -- no matter what is the context.
4732 MO_GLOBAL.set_policy_context('M',null);
4733 END IF;
4734 OZF_DEBUG_PVT.DEBUG_MO('OZF_OFFER_PVT process_qp_list_header before returning to UI : '|| l_modifier_list_rec.list_header_id);
4735 END IF;
4736 --dbms_output.put_line('Return status1 is :'||x_return_status);
4737 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
4738 add_message(x_msg_count);
4739 RAISE Fnd_Api.g_exc_error;
4740 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
4741 add_message(x_msg_count);
4742 RAISE Fnd_Api.g_exc_unexpected_error;
4743 END IF;
4744 x_modifier_list_rec.qp_list_header_id := v_modifier_list_rec.list_header_id;
4745 x_modifier_list_rec.name := v_modifier_list_rec.name;
4746
4747
4748
4749 -- Start of Offers Limit functionality. Need to set INSERT, UPDATE and DELETE for limits
4750 -- if profile OZF_BUDGET_ADJ_ALLOW_RECAL is 'Y' AND CommittedAmountEqMax flag is Y OR profile OZF_BUDGET_ADJ_ALLOW_RECAL is 'N'
4751 /*
4752 IF (p_modifier_list_rec.offer_amount <> fnd_api.g_miss_num
4753 AND p_modifier_list_rec.offer_amount is not null
4754 )
4755 OR (--p_modifier_list_rec.amount_limit_id = fnd_api.g_miss_num
4756 AND p_modifier_list_rec.offer_amount <> fnd_api.g_miss_num
4757 AND p_modifier_list_rec.offer_amount is not null
4758 )
4759 THEN
4760 */
4761 --RSSHARMA Commented out the above if as if clashes with the if for delete operation ..
4762 --this introduced a bug due to which the limit will neve be deleted as this if clashed with the if for delete
4763 IF p_modifier_list_rec.modifier_operation IN ('UPDATE','DELETE') THEN
4764 l_limits_rec.list_header_id := p_modifier_list_rec.qp_list_header_id;
4765 ELSIF p_modifier_list_rec.modifier_operation = 'CREATE' THEN
4766 l_limits_rec.list_header_id := v_modifier_list_rec.list_header_id;
4767 END IF;
4768
4769 -- nepanda : Fix for Bug 12950967
4770 -- Changed the logic to make headre limit and line limit independent of each other
4771 OPEN c_qp_limit_line_id(p_modifier_list_rec.amount_limit_id);
4772 FETCH c_qp_limit_line_id into l_limits_rec.list_line_id;
4773 CLOSE c_qp_limit_line_id;
4774 IF ( p_modifier_list_rec.amount_limit_id = fnd_api.g_miss_num AND p_modifier_list_rec.committed_amount_eq_max = 'Y') THEN
4775 IF p_modifier_list_rec.offer_amount <> fnd_api.g_miss_num AND p_modifier_list_rec.offer_amount is not null THEN
4776 l_limits_rec.operation := 'CREATE';
4777 l_limits_rec.basis := 'COST' ;
4778 --- When OM starts supporting HARD Need to change it to HARD.
4779 --l_limits_rec.limit_exceed_action_code := 'SOFT' ;
4780 l_limits_rec.limit_hold_flag := 'Y' ;
4781 l_limits_rec.limit_id := fnd_api.g_miss_num;
4782 l_limits_rec.limit_level_code :='ACROSS_TRANSACTION';
4783 l_limits_rec.limit_number := 1;
4784 l_limits_rec.organization_flag := 'N' ;
4785 l_limits_rec.amount := p_modifier_list_rec.offer_amount;
4786 END IF;
4787 ELSIF (p_modifier_list_rec.amount_limit_id <> fnd_api.g_miss_num AND p_modifier_list_rec.amount_limit_id IS NOT NULL) THEN
4788 IF p_modifier_list_rec.committed_amount_eq_max = 'N' THEN
4789 IF l_limits_rec.list_line_id = -1 THEN
4790 l_limits_rec.operation := 'DELETE'; -- Delete header limit only when committed_amount_eq_max = 'N' (Fix for bug # 10173582)
4791 l_limits_rec.limit_id := p_modifier_list_rec.amount_limit_id;
4792 END IF;
4793 ELSIF p_modifier_list_rec.committed_amount_eq_max = 'Y' THEN
4794 IF p_modifier_list_rec.offer_amount <> fnd_api.g_miss_num AND p_modifier_list_rec.offer_amount is not null THEN
4795 IF l_limits_rec.list_line_id = -1 THEN
4796 l_limits_rec.operation := 'UPDATE';
4797 l_limits_rec.limit_id := p_modifier_list_rec.amount_limit_id;
4798 l_limits_rec.amount := p_modifier_list_rec.offer_amount;
4799 ELSE
4800 l_limits_rec.operation := 'CREATE';
4801 l_limits_rec.basis := 'COST' ;
4802 l_limits_rec.limit_hold_flag := 'Y' ;
4803 l_limits_rec.limit_id := fnd_api.g_miss_num;
4804 l_limits_rec.limit_level_code :='ACROSS_TRANSACTION';
4805 l_limits_rec.limit_number := 1;
4806 l_limits_rec.organization_flag := 'N' ;
4807 l_limits_rec.amount := p_modifier_list_rec.offer_amount;
4808 END IF;
4809 END IF;
4810 END IF;
4811 END IF;
4812
4813 -- nepanda : Fix for Bug 12950967
4814 /*IF p_modifier_list_rec.amount_limit_id = fnd_api.g_miss_num
4815 AND p_modifier_list_rec.offer_amount <> fnd_api.g_miss_num
4816 AND p_modifier_list_rec.offer_amount is not null THEN
4817 IF ( p_modifier_list_rec.committed_amount_eq_max = 'Y')-- deal in limits only if the recal profile is off or the profile is on and the flag is Yes
4818 THEN
4819 l_limits_rec.operation := 'CREATE';
4820 l_limits_rec.basis := 'COST' ;
4821 --- When OM starts supporting HARD Need to change it to HARD.
4822 --l_limits_rec.limit_exceed_action_code := 'SOFT' ;
4823 l_limits_rec.limit_hold_flag := 'Y' ;
4824 l_limits_rec.limit_id := fnd_api.g_miss_num;
4825 l_limits_rec.limit_level_code :='ACROSS_TRANSACTION';
4826 l_limits_rec.limit_number := 1;
4827 l_limits_rec.organization_flag := 'N' ;
4828 l_limits_rec.amount := p_modifier_list_rec.offer_amount;
4829 END IF;
4830 ELSIF (p_modifier_list_rec.amount_limit_id <> fnd_api.g_miss_num AND p_modifier_list_rec.amount_limit_id IS NOT NULL) THEN
4831 IF p_modifier_list_rec.offer_amount IS NULL OR -- if committed=max is no or Committed Amount is null delete the limit
4832 (p_modifier_list_rec.committed_amount_eq_max = 'N')
4833 THEN
4834 l_limits_rec.operation := 'DELETE';
4835 l_limits_rec.limit_id := p_modifier_list_rec.amount_limit_id;
4836 ELSIF p_modifier_list_rec.offer_amount IS NOT NULL THEN
4837 IF (p_modifier_list_rec.committed_amount_eq_max = 'Y' )
4838 THEN
4839 l_limits_rec.operation := 'UPDATE';
4840 l_limits_rec.limit_id := p_modifier_list_rec.amount_limit_id;
4841 l_limits_rec.amount := p_modifier_list_rec.offer_amount;
4842 END IF;
4843 END IF;
4844 END IF;
4845 */
4846
4847 OZF_DEBUG_PVT.DEBUG_MO('OZF_OFFER_PVT.process_qp_list_header before calling QP_Limits_PUB.Process_Limits for list_header_id : '|| l_limits_rec.list_header_id);
4848
4849 QP_Limits_PUB.Process_Limits
4850 ( p_init_msg_list => FND_API.g_true,
4851 p_api_version_number => 1.0,
4852 p_commit => FND_API.g_false,
4853 x_return_status => x_return_status,
4854 x_msg_count => x_msg_count,
4855 x_msg_data => x_msg_data,
4856 p_LIMITS_rec => l_limits_rec,
4857 x_LIMITS_rec => v_LIMITS_rec,
4858 x_LIMITS_val_rec => v_LIMITS_val_rec,
4859 x_LIMIT_ATTRS_tbl => v_LIMIT_ATTRS_tbl,
4860 x_LIMIT_ATTRS_val_tbl => v_LIMIT_ATTRS_val_tbl,
4861 x_LIMIT_BALANCES_tbl => v_LIMIT_BALANCES_tbl,
4862 x_LIMIT_BALANCES_val_tbl => v_LIMIT_BALANCES_val_tbl
4863 );
4864
4865
4866 -- RAISE Fnd_Api.g_exc_error;
4867 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
4868 add_message(x_msg_count);
4869 RAISE Fnd_Api.g_exc_error;
4870 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
4871 add_message(x_msg_count);
4872 RAISE Fnd_Api.g_exc_unexpected_error;
4873 END IF;
4874
4875 --END IF;
4876 --END IF; -- END OZF_BUDGET_ADJ_ALLOW_RECAL profile if
4877 l_limits_rec := temp_limits_rec;
4878
4879 IF (p_modifier_list_rec.max_no_of_uses <> fnd_api.g_miss_num
4880 AND p_modifier_list_rec.max_no_of_uses is not null
4881 )
4882 OR (p_modifier_list_rec.uses_limit_id = fnd_api.g_miss_num
4883 AND p_modifier_list_rec.max_no_of_uses <> fnd_api.g_miss_num
4884 AND p_modifier_list_rec.max_no_of_uses is not null
4885 )
4886 THEN
4887
4888 IF p_modifier_list_rec.modifier_operation IN ('UPDATE','DELETE') THEN
4889 l_limits_rec.list_header_id := p_modifier_list_rec.qp_list_header_id;
4890 ELSIF p_modifier_list_rec.modifier_operation = 'CREATE' THEN
4891 l_limits_rec.list_header_id := v_modifier_list_rec.list_header_id;
4892 END IF;
4893
4894 IF p_modifier_list_rec.uses_limit_id = fnd_api.g_miss_num
4895 AND p_modifier_list_rec.max_no_of_uses <> fnd_api.g_miss_num
4896 AND p_modifier_list_rec.max_no_of_uses is not null THEN
4897 l_limits_rec.operation := 'CREATE';
4898 l_limits_rec.basis := 'USAGE' ;
4899 --- When OM starts supporting HARD Need to change it to HARD.
4900 --l_limits_rec.limit_exceed_action_code := 'SOFT' ;
4901 l_limits_rec.limit_hold_flag := 'Y' ;
4902 l_limits_rec.limit_id := fnd_api.g_miss_num;
4903 l_limits_rec.limit_level_code :='ACROSS_TRANSACTION';
4904 l_limits_rec.limit_number := 1;
4905 l_limits_rec.organization_flag := 'N' ;
4906 l_limits_rec.amount := p_modifier_list_rec.max_no_of_uses;
4907 l_limits_rec.multival_attr1_type := 'QUALIFIER';
4908 l_limits_rec.multival_attr1_context := 'CUSTOMER';
4909 l_limits_rec.multival_attribute1 := 'QUALIFIER_ATTRIBUTE2';
4910
4911 ELSIF (p_modifier_list_rec.uses_limit_id <> fnd_api.g_miss_num AND p_modifier_list_rec.uses_limit_id IS NOT NULL) THEN
4912 IF p_modifier_list_rec.max_no_of_uses IS NULL THEN
4913 l_limits_rec.operation := 'DELETE';
4914 l_limits_rec.limit_id := p_modifier_list_rec.uses_limit_id;
4915 ELSIF p_modifier_list_rec.max_no_of_uses IS NOT NULL THEN
4916 l_limits_rec.operation := 'UPDATE';
4917 l_limits_rec.limit_id := p_modifier_list_rec.uses_limit_id;
4918 l_limits_rec.amount := p_modifier_list_rec.max_no_of_uses;
4919 END IF;
4920 END IF;
4921
4922 OZF_DEBUG_PVT.DEBUG_MO('OZF_OFFER_PVT.process_qp_list_header before calling QP_Limits_PUB.Process_Limits2 for list_header_id : '|| l_limits_rec.list_header_id);
4923
4924 QP_Limits_PUB.Process_Limits
4925 ( p_init_msg_list => FND_API.g_true,
4926 p_api_version_number => 1.0,
4927 p_commit => FND_API.g_false,
4928 x_return_status => x_return_status,
4929 x_msg_count => x_msg_count,
4930 x_msg_data => x_msg_data,
4931 p_LIMITS_rec => l_limits_rec,
4932 x_LIMITS_rec => v_LIMITS_rec,
4933 x_LIMITS_val_rec => v_LIMITS_val_rec,
4934 x_LIMIT_ATTRS_tbl => v_LIMIT_ATTRS_tbl,
4935 x_LIMIT_ATTRS_val_tbl => v_LIMIT_ATTRS_val_tbl,
4936 x_LIMIT_BALANCES_tbl => v_LIMIT_BALANCES_tbl,
4937 x_LIMIT_BALANCES_val_tbl => v_LIMIT_BALANCES_val_tbl
4938 );
4939
4940
4941 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
4942 add_message(x_msg_count);
4943 RAISE Fnd_Api.g_exc_error;
4944 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
4945 add_message(x_msg_count);
4946 RAISE Fnd_Api.g_exc_unexpected_error;
4947 END IF;
4948
4949 END IF;
4950
4951 Fnd_Msg_Pub.Count_AND_Get
4952 ( p_count => x_msg_count,
4953 p_data => x_msg_data,
4954 p_encoded => Fnd_Api.G_FALSE
4955 );
4956 EXCEPTION
4957 WHEN Fnd_Api.G_EXC_ERROR THEN
4958 x_return_status := Fnd_Api.g_ret_sts_error ;
4959 ROLLBACK TO process_qp_list_header;
4960 Fnd_Msg_Pub.Count_AND_Get
4961 ( p_count => x_msg_count,
4962 p_data => x_msg_data,
4963 p_encoded => Fnd_Api.G_FALSE
4964 );
4965 WHEN Fnd_Api.G_EXC_UNEXPECTED_ERROR THEN
4966 x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
4967 ROLLBACK TO process_qp_list_header;
4968 Fnd_Msg_Pub.Count_AND_Get
4969 ( p_count => x_msg_count,
4970 p_data => x_msg_data,
4971 p_encoded => Fnd_Api.G_FALSE
4972 );
4973 WHEN OTHERS THEN
4974 x_return_status := Fnd_Api.g_ret_sts_unexp_erroR ;
4975 ROLLBACK TO process_qp_list_header;
4976 IF Fnd_Msg_Pub.Check_Msg_Level ( Fnd_Msg_Pub.G_MSG_LVL_UNEXP_ERROR )
4977 THEN
4978 Fnd_Msg_Pub.Add_Exc_Msg( G_PKG_NAME,l_api_name);
4979 END IF;
4980 Fnd_Msg_Pub.Count_AND_Get
4981 ( p_count => x_msg_count,
4982 p_data => x_msg_data,
4983 p_encoded => Fnd_Api.G_FALSE
4984 );
4985 END;
4986
4987 PROCEDURE validateOzfOffer
4988 (
4989 x_return_status OUT NOCOPY VARCHAR2
4990 ,x_msg_count OUT NOCOPY NUMBER
4991 ,x_msg_data OUT NOCOPY VARCHAR2
4992 ,p_modifier_list_rec IN modifier_list_rec_type
4993 )
4994 IS
4995 BEGIN
4996 x_return_status := FND_API.G_RET_STS_SUCCESS;
4997 IF (p_modifier_list_rec.offer_type = 'LUMPSUM' OR p_modifier_list_rec.offer_type = 'SCAN_DATA' ) THEN
4998 IF p_modifier_list_rec.offer_operation = 'CREATE' THEN
4999 IF (p_modifier_list_rec.currency_code IS NULL OR p_modifier_list_rec.currency_code = FND_API.G_MISS_CHAR) THEN
5000 OZF_Utility_PVT.error_message('OZF_OFFR_LS_SD_CURR_REQD');
5001 x_return_status := Fnd_Api.g_ret_sts_error;
5002 RETURN;
5003 END IF;
5004 ELSIF p_modifier_list_rec.offer_operation = 'UPDATE' THEN
5005 IF (p_modifier_list_rec.currency_code IS NULL) THEN
5006 OZF_Utility_PVT.error_message('OZF_OFFR_LS_SD_CURR_REQD');
5007 x_return_status := Fnd_Api.g_ret_sts_error;
5008 RETURN;
5009 END IF;
5010 END IF;
5011 END IF;
5012 END validateOzfOffer;
5013
5014 PROCEDURE process_ozf_offer(
5015 p_init_msg_list IN VARCHAR2
5016 ,p_api_version IN NUMBER
5017 ,x_return_status OUT NOCOPY VARCHAR2
5018 ,x_msg_count OUT NOCOPY NUMBER
5019 ,x_msg_data OUT NOCOPY VARCHAR2
5020 ,p_modifier_list_rec IN modifier_list_rec_type
5021 ,x_offer_id OUT NOCOPY NUMBER
5022 )
5023 IS
5024 CURSOR c_scan_value IS
5025 SELECT NVL(SUM(scan_value * scan_unit_forecast/quantity),0)
5026 FROM ams_act_products
5027 WHERE arc_act_product_used_by = 'OFFR'
5028 AND act_product_used_by_id = p_modifier_list_rec.qp_list_header_id;
5029
5030 CURSOR c_old_status IS
5031 SELECT status_code
5032 FROM ozf_offers
5033 WHERE qp_list_header_id = p_modifier_list_rec.qp_list_header_id;
5034
5035 l_promotional_offers_rec OZF_Promotional_Offers_Pvt.offers_rec_Type;
5036 l_object_version_number NUMBER;
5037 l_api_version CONSTANT NUMBER := 1.0;
5038 l_api_name CONSTANT VARCHAR2(30) := 'process_ozf_offer';
5039 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
5040 l_offer_id NUMBER;
5041 l_scan_value NUMBER;
5042 -- l_status_code VARCHAR2(30);
5043 l_old_status VARCHAR2(30);
5044
5045 BEGIN
5046 SAVEPOINT process_ozf_offer;
5047
5048 x_return_status := Fnd_Api.g_ret_sts_success;
5049
5050 validateOzfOffer
5051 (
5052 x_return_status => x_return_status
5053 ,x_msg_count => x_msg_count
5054 ,x_msg_data => x_msg_data
5055 ,p_modifier_list_rec => p_modifier_list_rec
5056 );
5057 IF x_return_status = FND_API.G_RET_STS_ERROR THEN
5058 RAISE FND_API.G_EXC_ERROR;
5059 ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5060 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5061 END IF;
5062 OPEN c_scan_value;
5063 FETCH c_scan_value INTO l_scan_value;
5064 CLOSE c_scan_value;
5065
5066 OPEN c_old_status;
5067 FETCH c_old_status INTO l_old_status;
5068 CLOSE c_old_status;
5069 -- if DRAFT sync IEB and committed amount
5070 IF l_old_status = 'DRAFT' THEN
5071 IF p_modifier_list_rec.offer_type = 'SCAN_DATA' THEN
5072 IF p_modifier_list_rec.offer_amount IS NOT NULL
5073 AND p_modifier_list_rec.offer_amount <> FND_API.G_MISS_NUM THEN -- called by budget cue card
5074 IF p_modifier_list_rec.budget_amount_tc IS NOT NULL
5075 AND p_modifier_list_rec.budget_amount_tc <> FND_API.G_MISS_NUM THEN
5076 IF p_modifier_list_rec.budget_amount_tc >= l_scan_value THEN
5077 l_promotional_offers_rec.budget_amount_tc := p_modifier_list_rec.budget_amount_tc;
5078 ELSE
5079 FND_MESSAGE.SET_NAME('OZF','OZF_OFFR_IEB_LT_SCANVALUE');
5080 Fnd_Msg_Pub.ADD;
5081 RAISE FND_API.G_EXC_ERROR;
5082 END IF;
5083 END IF;
5084 ELSE -- called by offer detail
5085 --IF p_modifier_list_rec.budget_amount_tc IS NOT NULL
5086 --AND p_modifier_list_rec.budget_amount_tc <> FND_API.G_MISS_NUM THEN
5087 l_promotional_offers_rec.budget_amount_tc := p_modifier_list_rec.budget_amount_tc;
5088 --ELSE
5089 -- l_promotional_offers_rec.budget_amount_tc := 0;
5090 --END IF;
5091 END IF;
5092 l_promotional_offers_rec.offer_amount := NULL;
5093 ELSE
5094 IF p_modifier_list_rec.offer_amount IS NOT NULL
5095 AND p_modifier_list_rec.offer_amount <> FND_API.G_MISS_NUM
5096 THEN -- from detail, sync ieb with committed amount
5097 l_promotional_offers_rec.budget_amount_tc := p_modifier_list_rec.offer_amount;
5098 l_promotional_offers_rec.offer_amount := p_modifier_list_rec.offer_amount;
5099 ELSIF p_modifier_list_rec.budget_amount_tc IS NOT NULL
5100 AND p_modifier_list_rec.budget_amount_tc <> FND_API.G_MISS_NUM
5101 THEN -- from budget cue card, sync committed with ieb
5102 l_promotional_offers_rec.offer_amount := p_modifier_list_rec.budget_amount_tc;
5103 l_promotional_offers_rec.budget_amount_tc := p_modifier_list_rec.budget_amount_tc;
5104 END IF; -- both are no value, do nothing
5105 END IF;
5106 ELSE -- active, pending active etc, do not sync
5107 l_promotional_offers_rec.offer_amount := p_modifier_list_rec.offer_amount;
5108 l_promotional_offers_rec.budget_amount_tc := p_modifier_list_rec.budget_amount_tc;
5109 END IF;
5110
5111 IF l_promotional_offers_rec.budget_amount_tc < 0 THEN
5112 FND_MESSAGE.SET_NAME('OZF','OZF_OFFR_IEB_NEG');
5113 Fnd_Msg_Pub.ADD;
5114 RAISE FND_API.G_EXC_ERROR;
5115 END IF;
5116
5117 l_promotional_offers_rec.qp_list_header_id := p_modifier_list_rec.qp_list_header_id;
5118 l_promotional_offers_rec.custom_setup_id := p_modifier_list_rec.custom_setup_id;
5119 l_promotional_offers_rec.retroactive := p_modifier_list_rec.retroactive;
5120 l_promotional_offers_rec.volume_offer_type := p_modifier_list_rec.volume_offer_type;
5121 l_promotional_offers_rec.confidential_flag := p_modifier_list_rec.confidential_flag;
5122 l_promotional_offers_rec.budget_source_type := p_modifier_list_rec.budget_source_type;
5123 l_promotional_offers_rec.budget_source_id := p_modifier_list_rec.budget_source_id;
5124 l_promotional_offers_rec.source_from_parent := p_modifier_list_rec.source_from_parent;
5125 IF l_promotional_offers_rec.source_from_parent = 'Y' THEN
5126 l_promotional_offers_rec.budget_source_id := p_modifier_list_rec.offer_used_by_id;
5127 l_promotional_offers_rec.budget_source_type := 'CAMP';
5128 END IF;
5129 -- Right now Budget only support sourcing from the Parent Campaign
5130 -- IF l_promotional_offers_rec.budget_source_type = 'CAMP' THEN
5131 -- l_promotional_offers_rec.source_from_parent := 'Y';
5132 -- END IF;
5133 l_promotional_offers_rec.buyer_name := p_modifier_list_rec.buyer_name;
5134 IF p_modifier_list_rec.offer_operation = 'CREATE' THEN
5135 l_promotional_offers_rec.qp_list_header_id := p_modifier_list_rec.qp_list_header_id;
5136 l_promotional_offers_rec.offer_code := p_modifier_list_rec.offer_code;
5137 l_promotional_offers_rec.custom_setup_id := p_modifier_list_rec.custom_setup_id;
5138 l_promotional_offers_rec.order_value_discount_type := p_modifier_list_rec.order_value_discount_type;
5139 l_promotional_offers_rec.budget_offer_yn := p_modifier_list_rec.budget_offer_yn;
5140
5141 END IF;
5142
5143 IF p_modifier_list_rec.budget_source_id <> Fnd_Api.g_miss_num
5144 AND p_modifier_list_rec.budget_source_id IS NOT NULL THEN
5145 IF p_modifier_list_rec.offer_type <> 'SCAN_DATA' THEN
5146 l_promotional_offers_rec.budget_amount_tc := p_modifier_list_rec.offer_amount;
5147 END IF;
5148 END IF;
5149
5150 l_promotional_offers_rec.qualifier_type := p_modifier_list_rec.ql_qualifier_type;
5151 l_promotional_offers_rec.qualifier_id := p_modifier_list_rec.ql_qualifier_id;
5152 l_promotional_offers_rec.activity_media_id := p_modifier_list_rec.activity_media_id;
5153 l_promotional_offers_rec.user_status_id := p_modifier_list_rec.user_status_id;
5154 -- if the user_status_id is missing then make status_code code also missing
5155 IF l_promotional_offers_rec.user_status_id = FND_API.g_miss_num THEN
5156 l_promotional_offers_rec.status_code := FND_API.g_miss_char;
5157 ELSIF l_promotional_offers_rec.user_status_id IS NULL THEN
5158 l_promotional_offers_rec.status_code := NULL;
5159 ELSE
5160 l_promotional_offers_rec.status_code := OZF_Utility_PVT.get_system_status_code(p_modifier_list_rec.user_status_id);
5161 END IF;
5162
5163 l_promotional_offers_rec.reusable := nvl(p_modifier_list_rec.reusable,'N');
5164 l_promotional_offers_rec.owner_id := p_modifier_list_rec.owner_id;
5165 l_promotional_offers_rec.wf_item_key := p_modifier_list_rec.wf_item_key;
5166 l_promotional_offers_rec.object_version_number := p_modifier_list_rec.object_version_number;
5167 l_promotional_offers_rec.offer_id := p_modifier_list_rec.offer_id;
5168 l_promotional_offers_rec.offer_type := p_modifier_list_rec.offer_type;
5169 l_promotional_offers_rec.perf_date_from := p_modifier_list_rec.perf_date_from;
5170 l_promotional_offers_rec.perf_date_to := p_modifier_list_rec.perf_date_to;
5171 l_promotional_offers_rec.modifier_level_code := p_modifier_list_rec.modifier_level_code;
5172 l_promotional_offers_rec.lumpsum_amount := p_modifier_list_rec.lumpsum_amount;
5173 l_promotional_offers_rec.lumpsum_payment_type := p_modifier_list_rec.lumpsum_payment_type;
5174 l_promotional_offers_rec.customer_reference := p_modifier_list_rec.customer_reference;
5175 l_promotional_offers_rec.buying_group_contact_id := p_modifier_list_rec.buying_group_contact_id;
5176
5177 IF p_modifier_list_rec.lumpsum_amount is not null AND
5178 p_modifier_list_rec.lumpsum_amount <> FND_API.g_miss_num THEN
5179 l_promotional_offers_rec.offer_amount := p_modifier_list_rec.lumpsum_amount;
5180 END IF;
5181
5182 l_promotional_offers_rec.budget_amount_fc := p_modifier_list_rec.budget_amount_fc;
5183 l_promotional_offers_rec.transaction_currency_code := p_modifier_list_rec.currency_code;
5184 l_promotional_offers_rec.functional_currency_code := p_modifier_list_rec.functional_currency_code;
5185 l_promotional_offers_rec.distribution_type := p_modifier_list_rec.distribution_type;
5186 l_promotional_offers_rec.break_type := p_modifier_list_rec.break_type;
5187 l_promotional_offers_rec.tier_level := p_modifier_list_rec.tier_level;
5188 l_promotional_offers_rec.na_rule_header_id := p_modifier_list_rec.na_rule_header_id;
5189 l_promotional_offers_rec.sales_method_flag := p_modifier_list_rec.sales_method_flag;
5190 l_promotional_offers_rec.org_id := p_modifier_list_rec.orig_org_id;
5191 -- l_promotional_offers_rec.na_qual_context := p_modifier_list_rec.na_qual_context;
5192 -- l_promotional_offers_rec.na_qual_attr := p_modifier_list_rec.na_qual_attr;
5193 -- l_promotional_offers_rec.na_qual_attr_value := p_modifier_list_rec.na_qual_attr_value;
5194
5195
5196 IF p_modifier_list_rec.offer_operation = 'CREATE' THEN
5197 OZF_Promotional_Offers_Pvt.CREATE_OFFERS
5198 (
5199 p_api_version_number => 1.0,
5200 x_return_status => x_return_status,
5201 x_msg_count => x_msg_count,
5202 x_msg_data => x_msg_data,
5203 p_offers_rec => l_promotional_offers_rec,
5204 x_offer_id => x_offer_id
5205 );
5206 ELSIF p_modifier_list_rec.offer_operation = 'UPDATE' THEN
5207
5208 OZF_Promotional_Offers_Pvt.UPDATE_OFFERS
5209 (
5210 p_api_version_number => 1.0,
5211 x_return_status => x_return_status,
5212 x_msg_count => x_msg_count,
5213 x_msg_data => x_msg_data,
5214 p_offers_rec => l_promotional_offers_rec,
5215 x_object_version_number => l_object_version_number
5216 );
5217 x_offer_id := l_promotional_offers_rec.offer_id;
5218 ELSIF p_modifier_list_rec.offer_operation = 'DELETE' THEN
5219 OZF_Promotional_Offers_Pvt.DELETE_OFFERS
5220 (
5221 p_api_version_number => 1.0,
5222 x_return_status => x_return_status,
5223 x_msg_count => x_msg_count,
5224 x_msg_data => x_msg_data,
5225 p_offer_id => l_promotional_offers_rec.offer_id,
5226 p_object_version_number => l_promotional_offers_rec.object_version_number
5227 );
5228 END IF;
5229
5230 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
5231 RAISE Fnd_Api.g_exc_error;
5232 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
5233 RAISE Fnd_Api.g_exc_unexpected_error;
5234 END IF;
5235
5236 Fnd_Msg_Pub.Count_AND_Get
5237 ( p_count => x_msg_count,
5238 p_data => x_msg_data,
5239 p_encoded => Fnd_Api.G_FALSE
5240 );
5241 EXCEPTION
5242 WHEN Fnd_Api.G_EXC_ERROR THEN
5243 x_return_status := Fnd_Api.g_ret_sts_error ;
5244 ROLLBACK TO process_ozf_offer;
5245 Fnd_Msg_Pub.Count_AND_Get
5246 ( p_count => x_msg_count,
5247 p_data => x_msg_data,
5248 p_encoded => Fnd_Api.G_FALSE
5249 );
5250 WHEN Fnd_Api.G_EXC_UNEXPECTED_ERROR THEN
5251 x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
5252 ROLLBACK TO process_ozf_offer;
5253 Fnd_Msg_Pub.Count_AND_Get
5254 ( p_count => x_msg_count,
5255 p_data => x_msg_data,
5256 p_encoded => Fnd_Api.G_FALSE
5257 );
5258 WHEN OTHERS THEN
5259 x_return_status := Fnd_Api.g_ret_sts_unexp_erroR ;
5260 ROLLBACK TO process_ozf_offer;
5261 IF Fnd_Msg_Pub.Check_Msg_Level ( Fnd_Msg_Pub.G_MSG_LVL_UNEXP_ERROR )
5262 THEN
5263 Fnd_Msg_Pub.Add_Exc_Msg( G_PKG_NAME,l_api_name);
5264 END IF;
5265 Fnd_Msg_Pub.Count_AND_Get
5266 ( p_count => x_msg_count,
5267 p_data => x_msg_data,
5268 p_encoded => Fnd_Api.G_FALSE
5269 );
5270 END;
5271
5272 --=============================PBH Creation procedures===============================================
5273 FUNCTION getOfferType
5274 (
5275 p_listHeaderId NUMBER
5276 )
5277 RETURN VARCHAR2 IS
5278 CURSOR c_offerType(cp_listHeaderId NUMBER) IS
5279 SELECT offer_type
5280 FROM ozf_offers
5281 WHERE qp_list_header_id = cp_listHeaderId;
5282 l_offerType OZF_OFFERS.offer_type%TYPE;
5283 BEGIN
5284 OPEN c_offerType(cp_listHeaderId => p_listHeaderId);
5285 FETCH c_offerType INTO l_offerType;
5286 IF c_offerType%NOTFOUND THEN
5287 l_offerType := NULL;
5288 END IF;
5289 CLOSE c_offerType;
5290 RETURN l_offerType;
5291 END getOfferType;
5292
5293 FUNCTION getDiscountLevel
5294 (
5295 p_listHeaderId IN NUMBER
5296 )
5297 RETURN VARCHAR2 IS
5298 CURSOR c_discountLevel(cp_listHeaderId IN NUMBER) IS
5299 SELECT MODIFIER_LEVEL_CODE
5300 FROM ozf_offers
5301 WHERE qp_list_header_id = cp_listHeaderId;
5302 l_discountlevel OZF_OFFERS.MODIFIER_LEVEL_CODE%TYPE;
5303 BEGIN
5304 OPEN c_discountLevel(cp_listHeaderId => p_listHeaderId);
5305 FETCH c_discountLevel INTO l_discountLevel;
5306 IF c_discountLevel%NOTFOUND THEN
5307 l_discountLevel := 'LINEGROUP';
5308 END IF;
5309 CLOSE c_discountLevel;
5310 RETURN l_discountLevel;
5311 END getDiscountLevel;
5312
5313 /*gdeepika - defaulted the princing phase using profiles -bug 5675554*/
5314 FUNCTION getPricingPhase
5315 (
5316 p_listHeaderId IN NUMBER
5317 )
5318 RETURN VARCHAR2 IS
5319 l_pricingPhase NUMBER;
5320 BEGIN
5321 CASE getDiscountLevel(p_listHeaderId => p_listHeaderId)
5322 WHEN 'LINEGROUP' THEN
5323 l_pricingPhase := FND_PROFILE.value('OZF_PRICING_PHASE_LINEGROUP');
5324 WHEN 'LINE' THEN
5325 l_pricingPhase := FND_PROFILE.value('OZF_PRICING_PHASE_LINE');
5326 WHEN 'ORDER' THEN
5327 l_pricingPhase := FND_PROFILE.value('OZF_PRICING_PHASE_ORDER');
5328 ELSE
5329 l_pricingPhase := FND_PROFILE.value('OZF_PRICING_PHASE_LINEGROUP');
5330 END CASE;
5331 RETURN l_pricingPhase;
5332 END getPricingPhase;
5333
5334 PROCEDURE populateZeroDiscount
5335 (
5336 x_return_status OUT NOCOPY VARCHAR2
5337 ,x_msg_count OUT NOCOPY NUMBER
5338 ,x_msg_data OUT NOCOPY VARCHAR2
5339 ,p_modifierLineRec IN MODIFIER_LINE_REC_TYPE
5340 , x_modifiersTbl IN OUT NOCOPY Qp_Modifiers_Pub.modifiers_tbl_type
5341 )
5342 IS
5343 l_index NUMBER;
5344 BEGIN
5345 x_return_status := FND_API.G_RET_STS_SUCCESS;
5346 l_index := x_modifiersTbl.count + 1;
5347 x_modifiersTbl(l_index).operation := 'CREATE' ;
5348 x_modifiersTbl(l_index).list_line_type_code := 'DIS' ;
5349 x_modifiersTbl(l_index).list_header_id := p_modifierLineRec.list_header_id;
5350 x_modifiersTbl(l_index).arithmetic_operator := NVL(p_modifierLineRec.arithmetic_operator, '%');
5351 x_modifiersTbl(l_index).operand := 0;
5352 x_modifiersTbl(l_index).proration_type_code := 'N';
5353 x_modifiersTbl(l_index).product_precedence := FND_PROFILE.value('OZF_PRODUCT_PRECEDENCE');
5354
5355 IF getDiscountLevel(p_listHeaderId => p_modifierLineRec.list_header_id) <> 'ORDER' THEN
5356 x_modifiersTbl(l_index).pricing_group_sequence := FND_PROFILE.value('OZF_PRICING_GROUP_SEQUENCE');
5357 END IF;
5358 x_modifiersTbl(l_index).print_on_invoice_flag := 'Y';
5359 x_modifiersTbl(l_index).pricing_phase_id := getPricingPhase(p_listHeaderId => p_modifierLineRec.list_header_id);
5360 x_modifiersTbl(l_index).modifier_level_code := getDiscountLevel(p_listHeaderId => p_modifierLineRec.list_header_id);
5361 x_modifiersTbl(l_index).modifier_parent_index := 1;
5362 x_modifiersTbl(l_index).price_break_type_code := 'POINT';
5363 x_modifiersTbl(l_index).automatic_flag := 'Y';
5364
5365 x_modifiersTbl(l_index).rltd_modifier_grp_type := 'PRICE BREAK';
5366 x_modifiersTbl(l_index).rltd_modifier_grp_no := 1;
5367 x_modifiersTbl(l_index).modifier_parent_index := 1;
5368 END populateZeroDiscount;
5369
5370 PROCEDURE populateRegularDiscount
5371 (
5372 x_return_status OUT NOCOPY VARCHAR2
5373 ,x_msg_count OUT NOCOPY NUMBER
5374 ,x_msg_data OUT NOCOPY VARCHAR2
5375 ,p_modifierLineRec IN MODIFIER_LINE_REC_TYPE
5376 , x_modifiersTbl IN OUT NOCOPY Qp_Modifiers_Pub.modifiers_tbl_type
5377 )
5378 IS
5379 l_index NUMBER;
5380 BEGIN
5381 x_return_status := FND_API.G_RET_STS_SUCCESS;
5382 l_index := x_modifiersTbl.count + 1;
5383 x_modifiersTbl(l_index).operation := 'CREATE' ;
5384 x_modifiersTbl(l_index).list_line_type_code := 'DIS' ;
5385 x_modifiersTbl(l_index).list_header_id := p_modifierLineRec.list_header_id;
5386 x_modifiersTbl(l_index).arithmetic_operator := NVL(p_modifierLineRec.arithmetic_operator, '%');
5387 x_modifiersTbl(l_index).operand := NVL(p_modifierLineRec.operand, 0);
5388 x_modifiersTbl(l_index).proration_type_code := 'N';
5389 x_modifiersTbl(l_index).product_precedence := FND_PROFILE.value('OZF_PRODUCT_PRECEDENCE');
5390 IF getDiscountLevel(p_listHeaderId => p_modifierLineRec.list_header_id) <> 'ORDER' THEN
5391 x_modifiersTbl(l_index).pricing_group_sequence := FND_PROFILE.value('OZF_PRICING_GROUP_SEQUENCE');
5392 END IF;
5393 x_modifiersTbl(l_index).print_on_invoice_flag := 'Y';
5394 x_modifiersTbl(l_index).pricing_phase_id := getPricingPhase(p_listHeaderId => p_modifierLineRec.list_header_id);
5395 x_modifiersTbl(l_index).modifier_level_code := getDiscountLevel(p_listHeaderId => p_modifierLineRec.list_header_id);
5396 x_modifiersTbl(l_index).modifier_parent_index := 1;
5397 x_modifiersTbl(l_index).price_break_type_code := 'POINT';
5398 x_modifiersTbl(l_index).automatic_flag := 'Y';
5399 x_modifiersTbl(l_index).rltd_modifier_grp_type := 'PRICE BREAK';
5400 x_modifiersTbl(l_index).rltd_modifier_grp_no := 1;
5401 x_modifiersTbl(l_index).modifier_parent_index := 1;
5402 END populateRegularDiscount;
5403
5404 PROCEDURE populateDISModifierData
5405 (
5406 x_return_status OUT NOCOPY VARCHAR2
5407 ,x_msg_count OUT NOCOPY NUMBER
5408 ,x_msg_data OUT NOCOPY VARCHAR2
5409 ,p_modifierLineRec IN MODIFIER_LINE_REC_TYPE
5410 , x_modifiersTbl IN OUT NOCOPY Qp_Modifiers_Pub.modifiers_tbl_type
5411 )
5412 IS
5413 l_index NUMBER;
5414 l_modifierLineRec MODIFIER_LINE_REC_TYPE;
5415 BEGIN
5416 x_return_status := FND_API.G_RET_STS_SUCCESS;
5417 l_index := nvl(x_modifiersTbl.count,0) + 1;
5418 ozf_utility_pvt.debug_message('After setting index:'||p_modifierLineRec.pricing_attr_value_from);
5419 l_modifierLineRec := p_modifierLineRec;
5420 IF p_modifierLineRec.pricing_attr_value_from IS NOT NULL AND p_modifierLineRec.pricing_attr_value_from <> FND_API.G_MISS_CHAR THEN
5421 l_modifierLineRec.pricing_attr_value_from := 0;
5422 END IF;
5423 IF NVL(to_number(l_modifierLineRec.pricing_attr_value_from), 0) > 0 THEN
5424 ozf_utility_pvt.debug_message('Calling Populate zero discount');
5425 populateZeroDiscount
5426 (
5427 x_return_status => x_return_status
5428 ,x_msg_count => x_msg_count
5429 ,x_msg_data => x_msg_data
5430 ,p_modifierLineRec => l_modifierLineRec
5431 , x_modifiersTbl => x_modifiersTbl
5432 );
5433 l_index := l_index + 1;
5434 END IF;
5435
5436 ozf_utility_pvt.debug_message('Calling Populate Regular discount');
5437 populateRegularDiscount
5438 (
5439 x_return_status => x_return_status
5440 ,x_msg_count => x_msg_count
5441 ,x_msg_data => x_msg_data
5442 ,p_modifierLineRec => p_modifierLineRec
5443 , x_modifiersTbl => x_modifiersTbl
5444 );
5445 -- END IF;
5446 END populateDISModifierData;
5447
5448 PROCEDURE populateZeroPricingAttr(
5449 x_return_status OUT NOCOPY VARCHAR2
5450 ,x_msg_count OUT NOCOPY NUMBER
5451 ,x_msg_data OUT NOCOPY VARCHAR2
5452 ,p_modifierLineRec IN MODIFIER_LINE_REC_TYPE
5453 , x_pricingAttrTbl IN OUT NOCOPY Qp_Modifiers_Pub.pricing_attr_tbl_type
5454 )
5455 IS
5456 l_index NUMBER;
5457 BEGIN
5458 x_return_status := FND_API.G_RET_STS_SUCCESS;
5459 l_index := nvl(x_pricingAttrTbl.count,0) + 1;
5460 x_pricingAttrTbl(l_index).product_attribute_context := 'ITEM';
5461 x_pricingAttrTbl(l_index).product_attribute := p_modifierLineRec.product_attr;
5462 x_pricingAttrTbl(l_index).product_attr_value := p_modifierLineRec.product_attr_val;
5463 x_pricingAttrTbl(l_index).product_uom_code := p_modifierLineRec.product_uom_code;
5464 x_pricingAttrTbl(l_index).pricing_attribute_context := 'VOLUME';
5465 x_pricingAttrTbl(l_index).pricing_attribute := NVL(p_modifierLineRec.pricing_attr,'PRICING_ATTRIBUTE10');
5466 x_pricingAttrTbl(l_index).pricing_attr_value_from := 0;--NVL(p_modifier_line_tbl(i).pricing_attr_value_from, 0);
5467 x_pricingAttrTbl(l_index).pricing_attr_value_to := NVL(p_modifierLineRec.pricing_attr_value_from, 0);
5468 x_pricingAttrTbl(l_index).comparison_operator_code := 'BETWEEN';
5469 x_pricingAttrTbl(l_index).modifiers_index := l_index; -- here there is a 1-1 correspondence between modifies and pricing attr, so can use the same index
5470 x_pricingAttrTbl(l_index).operation := 'CREATE';
5471 END populateZeroPricingAttr;
5472
5473
5474 PROCEDURE populateRegularPricingAttr(
5475 x_return_status OUT NOCOPY VARCHAR2
5476 ,x_msg_count OUT NOCOPY NUMBER
5477 ,x_msg_data OUT NOCOPY VARCHAR2
5478 ,p_modifierLineRec IN MODIFIER_LINE_REC_TYPE
5479 , x_pricingAttrTbl IN OUT NOCOPY Qp_Modifiers_Pub.pricing_attr_tbl_type
5480 )
5481 IS
5482 l_index NUMBER;
5483 BEGIN
5484 x_return_status := FND_API.G_RET_STS_SUCCESS;
5485 l_index := nvl(x_pricingAttrTbl.count,0) + 1;
5486 x_pricingAttrTbl(l_index).product_attribute_context := 'ITEM';
5487 x_pricingAttrTbl(l_index).product_attribute := p_modifierLineRec.product_attr;
5488 x_pricingAttrTbl(l_index).product_attr_value := p_modifierLineRec.product_attr_val;
5489 x_pricingAttrTbl(l_index).product_uom_code := p_modifierLineRec.product_uom_code;
5490 x_pricingAttrTbl(l_index).pricing_attribute_context := 'VOLUME';
5491 --x_pricingAttrTbl(l_index).pricing_attribute := 'PRICING_ATTRIBUTE10';
5492 -- fir for bug 7340864
5493 x_pricingAttrTbl(l_index).pricing_attribute := NVL(p_modifierLineRec.pricing_attr, 'PRICING_ATTRIBUTE10');
5494 x_pricingAttrTbl(l_index).pricing_attr_value_from := NVL(p_modifierLineRec.pricing_attr_value_from, 0);
5495 x_pricingAttrTbl(l_index).pricing_attr_value_to := 9999999999;
5496 x_pricingAttrTbl(l_index).comparison_operator_code := 'BETWEEN';
5497 x_pricingAttrTbl(l_index).modifiers_index := l_index; -- here there is a 1-1 correspondence between modifies and pricing attr, so can use the same index
5498 x_pricingAttrTbl(l_index).operation := 'CREATE';
5499 END populateRegularPricingAttr;
5500
5501 PROCEDURE populateUpdatePricingAttr(
5502 x_return_status OUT NOCOPY VARCHAR2
5503 ,x_msg_count OUT NOCOPY NUMBER
5504 ,x_msg_data OUT NOCOPY VARCHAR2
5505 ,p_modifierLineRec IN MODIFIER_LINE_REC_TYPE
5506 , x_pricingAttrTbl IN OUT NOCOPY Qp_Modifiers_Pub.pricing_attr_tbl_type
5507 )
5508 IS
5509 CURSOR c_pricingAttr(cp_listLineId NUMBER) IS
5510 SELECT pricing_attribute_id FROM qp_pricing_attributes
5511 WHERE list_line_id = cp_listLineId
5512 OR list_line_id IN (select to_rltd_modifier_id FROM qp_rltd_modifiers WHERE from_rltd_modifier_id = cp_listLineId AND rltd_modifier_grp_type = 'PRICE BREAK');
5513 i NUMBER;
5514 BEGIN
5515 x_return_status := FND_API.G_RET_STS_SUCCESS;
5516 i := 1;
5517 FOR l_pricingAttr IN c_pricingAttr(cp_listLineId => p_modifierLineRec.list_line_id) LOOP
5518 x_pricingAttrTbl(i).pricing_attribute_id := l_pricingAttr.pricing_attribute_id;
5519 x_pricingAttrTbl(i).product_attribute_context := 'ITEM';
5520 x_pricingAttrTbl(i).product_attribute := p_modifierLineRec.product_attr;
5521 x_pricingAttrTbl(i).product_attr_value := p_modifierLineRec.product_attr_val;
5522 x_pricingAttrTbl(i).product_uom_code := p_modifierLineRec.product_uom_code;
5523 x_pricingAttrTbl(i).pricing_attribute_context := p_modifierLineRec.pricing_attribute_context;
5524 x_pricingAttrTbl(i).pricing_attribute := p_modifierLineRec.pricing_attr;
5525 x_pricingAttrTbl(i).pricing_attr_value_from := p_modifierLineRec.pricing_attr_value_from;
5526 x_pricingAttrTbl(i).pricing_attr_value_to := p_modifierLineRec.pricing_attr_value_to;
5527 -- x_pricingAttrTbl(i).comparison_operator_code := 'BETWEEN';
5528 x_pricingAttrTbl(i).operation := p_modifierLineRec.operation;
5529 i := i + 1;
5530 END LOOP;
5531 END populateUpdatePricingAttr;
5532
5533
5534 /**
5535 Populates CHild DIS Pricing Attributes into QP Record Structures given a single Price Break Header Record
5536 */
5537 PROCEDURE populateDISPricingAttrData
5538 (
5539 x_return_status OUT NOCOPY VARCHAR2
5540 ,x_msg_count OUT NOCOPY NUMBER
5541 ,x_msg_data OUT NOCOPY VARCHAR2
5542 ,p_modifierLineRec IN MODIFIER_LINE_REC_TYPE
5543 , x_pricingAttrTbl IN OUT NOCOPY Qp_Modifiers_Pub.pricing_attr_tbl_type
5544 )
5545 IS
5546 l_index NUMBER;
5547 l_modifierLineRec MODIFIER_LINE_REC_TYPE;
5548 BEGIN
5549 x_return_status := FND_API.G_RET_STS_SUCCESS;
5550 l_index := x_pricingAttrTbl.count + 1;
5551 l_modifierLineRec := p_modifierLineRec;
5552 IF p_modifierLineRec.operation = 'CREATE' THEN
5553 IF p_modifierLineRec.pricing_attr_value_from IS NOT NULL AND p_modifierLineRec.pricing_attr_value_from <> FND_API.G_MISS_CHAR THEN
5554 l_modifierLineRec.pricing_attr_value_from := 0;
5555 END IF;
5556 IF NVL(to_number(l_modifierLineRec.pricing_attr_value_from), 0) > 0 THEN
5557 populateZeroPricingAttr
5558 (
5559 x_return_status => x_return_status
5560 ,x_msg_count => x_msg_count
5561 ,x_msg_data => x_msg_data
5562 ,p_modifierLineRec => l_modifierLineRec
5563 , x_pricingAttrTbl => x_pricingAttrTbl
5564 );
5565 l_index := l_index + 1;
5566 END IF;
5567 populateRegularPricingAttr
5568 (
5569 x_return_status => x_return_status
5570 ,x_msg_count => x_msg_count
5571 ,x_msg_data => x_msg_data
5572 ,p_modifierLineRec => l_modifierLineRec
5573 , x_pricingAttrTbl => x_pricingAttrTbl
5574 );
5575 -- END IF;
5576 ELSE
5577 populateUpdatePricingAttr
5578 (
5579 x_return_status => x_return_status
5580 ,x_msg_count => x_msg_count
5581 ,x_msg_data => x_msg_data
5582 ,p_modifierLineRec => l_modifierLineRec
5583 , x_pricingAttrTbl => x_pricingAttrTbl
5584 );
5585 END IF;
5586
5587 END populateDISPricingAttrData;
5588
5589 /**
5590 Populates CHild DIS data into QP Record Structures given a single Price Break Header Record
5591 */
5592 PROCEDURE populateDisData
5593 (
5594 x_return_status OUT NOCOPY VARCHAR2
5595 ,x_msg_count OUT NOCOPY NUMBER
5596 ,x_msg_data OUT NOCOPY VARCHAR2
5597 ,p_modifierLineRec IN MODIFIER_LINE_REC_TYPE
5598 , x_modifiersTbl IN OUT NOCOPY Qp_Modifiers_Pub.modifiers_tbl_type
5599 , x_pricingAttrTbl IN OUT NOCOPY Qp_Modifiers_Pub.pricing_attr_tbl_type
5600 )
5601 IS
5602 BEGIN
5603 x_return_status := FND_API.G_RET_STS_SUCCESS;
5604 ozf_utility_pvt.debug_message('Calling populate DIS Modifier Data');
5605 IF p_modifierLineRec.operation = 'CREATE' THEN
5606 populateDISModifierData
5607 (
5608 x_return_status => x_return_status
5609 ,x_msg_count => x_msg_count
5610 ,x_msg_data => x_msg_data
5611 ,p_modifierLineRec => p_modifierLineRec
5612 , x_modifiersTbl => x_modifiersTbl
5613 );
5614 IF x_return_status = FND_API.G_RET_STS_ERROR THEN
5615 RAISE FND_API.G_EXC_ERROR;
5616 ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5617 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5618 END IF;
5619 END IF;
5620 ozf_utility_pvt.debug_message('Calling populate DIS Pricing Attr Data');
5621 populateDISPricingAttrData
5622 (
5623 x_return_status => x_return_status
5624 ,x_msg_count => x_msg_count
5625 ,x_msg_data => x_msg_data
5626 ,p_modifierLineRec => p_modifierLineRec
5627 ,x_pricingAttrTbl => x_pricingAttrTbl
5628 );
5629 IF x_return_status = FND_API.G_RET_STS_ERROR THEN
5630 RAISE FND_API.G_EXC_ERROR;
5631 ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5632 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5633 END IF;
5634
5635 END populateDisData;
5636
5637
5638 /**
5639 Populates Modifier Information into QP Modifiers Structures given a single Price Break Header Record
5640 */
5641 PROCEDURE populatePBHModifierData
5642 (
5643 x_return_status OUT NOCOPY VARCHAR2
5644 ,x_msg_count OUT NOCOPY NUMBER
5645 ,x_msg_data OUT NOCOPY VARCHAR2
5646 ,p_modifierLineRec IN MODIFIER_LINE_REC_TYPE
5647 , x_modifiersTbl OUT NOCOPY Qp_Modifiers_Pub.modifiers_tbl_type
5648 )
5649 IS
5650 BEGIN
5651 x_return_status := FND_API.G_RET_STS_SUCCESS;
5652 x_modifiersTbl(1).operation := p_modifierLineRec.operation;
5653 x_modifiersTbl(1).list_header_id := p_modifierLineRec.list_header_id;
5654 x_modifiersTbl(1).list_line_id := p_modifierLineRec.list_line_id;
5655 x_modifiersTbl(1).start_date_active := p_modifierLineRec.start_date_active;
5656 x_modifiersTbl(1).end_date_active := p_modifierLineRec.end_date_active;
5657 x_modifiersTbl(1).accrual_flag := 'N';
5658 IF p_modifierLineRec.operation = 'CREATE' THEN
5659 -- l_child_index := l_child_index + 1;
5660 x_modifiersTbl(1).list_line_type_code := 'PBH' ;
5661 x_modifiersTbl(1).proration_type_code := 'N';
5662 x_modifiersTbl(1).product_precedence := FND_PROFILE.value('OZF_PRODUCT_PRECEDENCE');
5663 x_modifiersTbl(1).print_on_invoice_flag := 'Y';
5664 x_modifiersTbl(1).pricing_phase_id := getPricingPhase(p_listHeaderId => p_modifierLineRec.list_header_id);
5665 x_modifiersTbl(1).modifier_level_code := getDiscountLevel(p_listHeaderId => p_modifierLineRec.list_header_id);
5666 x_modifiersTbl(1).price_break_type_code := 'POINT';
5667 x_modifiersTbl(1).automatic_flag := 'Y';
5668 IF getDiscountLevel(p_listHeaderId => p_modifierLineRec.list_header_id) <> 'ORDER' THEN
5669 x_modifiersTbl(1).pricing_group_sequence := FND_PROFILE.value('OZF_PRICING_GROUP_SEQUENCE');
5670 END IF;
5671 end if;
5672 IF getOfferType(p_listHeaderId => p_modifierLineRec.list_header_id) = 'ACCRUAL' THEN
5673 x_modifiersTbl(1).accrual_flag := 'Y';
5674 END IF;
5675
5676
5677 END populatePBHModifierData;
5678
5679 /**
5680 Populates Pricing Attributes into QP Pricing Attribute Structures given a single Price Break Header Record
5681 */
5682 PROCEDURE populatePBHPricingAttrData
5683 (
5684 x_return_status OUT NOCOPY VARCHAR2
5685 ,x_msg_count OUT NOCOPY NUMBER
5686 ,x_msg_data OUT NOCOPY VARCHAR2
5687 ,p_modifierLineRec IN MODIFIER_LINE_REC_TYPE
5688 , x_pricingAttrTbl OUT NOCOPY Qp_Modifiers_Pub.pricing_attr_tbl_type
5689 )
5690 IS
5691 BEGIN
5692 x_return_status := FND_API.G_RET_STS_SUCCESS;
5693 x_pricingAttrTbl(1).product_attribute_context := 'ITEM';
5694 x_pricingAttrTbl(1).product_attribute := p_modifierLineRec.product_attr;
5695 x_pricingAttrTbl(1).product_attr_value := p_modifierLineRec.product_attr_val;
5696 x_pricingAttrTbl(1).product_uom_code := p_modifierLineRec.product_uom_code;
5697 x_pricingAttrTbl(1).pricing_attribute_context := 'VOLUME';
5698 x_pricingAttrTbl(1).pricing_attribute := NVL(p_modifierLineRec.pricing_attr, 'PRICING_ATTRIBUTE10');
5699 x_pricingAttrTbl(1).comparison_operator_code := 'BETWEEN';
5700 x_pricingAttrTbl(1).modifiers_index := 1;
5701 x_pricingAttrTbl(1).operation := p_modifierLineRec.operation;
5702 x_pricingAttrTbl(1).pricing_attribute_id := p_modifierLineRec.pricing_attribute_id;
5703 END populatePBHPricingAttrData;
5704
5705 /**
5706 Populates Price Break Header Data Into QP Record structures given a single Price Break Header Record
5707 */
5708 PROCEDURE populatePbhData
5709 (
5710 x_return_status OUT NOCOPY VARCHAR2
5711 ,x_msg_count OUT NOCOPY NUMBER
5712 ,x_msg_data OUT NOCOPY VARCHAR2
5713 ,p_modifierLineRec IN MODIFIER_LINE_REC_TYPE
5714 , x_modifiersTbl OUT NOCOPY Qp_Modifiers_Pub.modifiers_tbl_type
5715 , x_pricingAttrTbl OUT NOCOPY Qp_Modifiers_Pub.pricing_attr_tbl_type
5716 )
5717 IS
5718 BEGIN
5719 -- initialize
5720 -- populate modifers data
5721 -- populate pricing attribute data
5722 x_return_status := FND_API.G_RET_STS_SUCCESS;
5723 populatePBHModifierData
5724 (
5725 x_return_status => x_return_status
5726 ,x_msg_count => x_msg_count
5727 ,x_msg_data => x_msg_data
5728 ,p_modifierLineRec => p_modifierLineRec
5729 , x_modifiersTbl => x_modifiersTbl
5730 );
5731 IF x_return_status = FND_API.G_RET_STS_ERROR THEN
5732 RAISE FND_API.G_EXC_ERROR;
5733 ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5734 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5735 END IF;
5736 populatePBHPricingAttrData
5737 (
5738 x_return_status => x_return_status
5739 ,x_msg_count => x_msg_count
5740 ,x_msg_data => x_msg_data
5741 ,p_modifierLineRec => p_modifierLineRec
5742 ,x_pricingAttrTbl => x_pricingAttrTbl
5743 );
5744 IF x_return_status = FND_API.G_RET_STS_ERROR THEN
5745 RAISE FND_API.G_EXC_ERROR;
5746 ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5747 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5748 END IF;
5749 END populatePbhData;
5750
5751 /**
5752 Creates a PBH line in QP tables given a single PBH line
5753 */
5754 PROCEDURE processPbhLine
5755 (
5756 x_return_status OUT NOCOPY VARCHAR2
5757 ,x_msg_count OUT NOCOPY NUMBER
5758 ,x_msg_data OUT NOCOPY VARCHAR2
5759 ,p_offerType IN VARCHAR2
5760 ,p_modifierLineRec IN MODIFIER_LINE_REC_TYPE
5761 ,x_modifiersTbl OUT NOCOPY QP_MODIFIERS_PUB.modifiers_tbl_type
5762 -- ,x_error_location OUT NOCOPY NUMBER
5763 )
5764 IS
5765 l_modifiersTbl Qp_Modifiers_Pub.modifiers_tbl_type;
5766 l_pricingAttrTbl Qp_Modifiers_Pub.pricing_attr_tbl_type;
5767 v_modifier_list_rec qp_modifiers_pub.modifier_list_rec_type;
5768 v_modifier_list_val_rec qp_modifiers_pub.modifier_list_val_rec_type;
5769 v_modifiers_tbl qp_modifiers_pub.modifiers_tbl_type;
5770 v_modifiers_val_tbl qp_modifiers_pub.modifiers_val_tbl_type;
5771 v_qualifiers_tbl qp_qualifier_rules_pub.qualifiers_tbl_type;
5772 v_qualifiers_val_tbl qp_qualifier_rules_pub.qualifiers_val_tbl_type;
5773 v_pricing_attr_tbl qp_modifiers_pub.pricing_attr_tbl_type;
5774 v_pricing_attr_val_tbl qp_modifiers_pub.pricing_attr_val_tbl_type;
5775 l_control_rec qp_globals.control_rec_type;
5776 BEGIN
5777 -- initialize
5778 -- populate pbh data
5779 -- populate dis data
5780 -- process db txn
5781 -- process errors
5782 x_return_status := FND_API.G_RET_STS_SUCCESS;
5783 l_modifiersTbl.delete;
5784 l_pricingAttrTbl.delete;
5785 populatePbhData
5786 (
5787 x_return_status => x_return_status
5788 ,x_msg_count => x_msg_count
5789 ,x_msg_data => x_msg_data
5790 ,p_modifierLineRec => p_modifierLineRec
5791 , x_modifiersTbl => l_modifiersTbl
5792 , x_pricingAttrTbl => l_pricingAttrTbl
5793 );
5794 IF x_return_status = FND_API.G_RET_STS_ERROR THEN
5795 RAISE FND_API.G_EXC_ERROR;
5796 ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5797 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5798 END IF;
5799 populateDisData
5800 (
5801 x_return_status => x_return_status
5802 ,x_msg_count => x_msg_count
5803 ,x_msg_data => x_msg_data
5804 ,p_modifierLineRec => p_modifierLineRec
5805 , x_modifiersTbl => l_modifiersTbl
5806 , x_pricingAttrTbl => l_pricingAttrTbl
5807 );
5808 IF x_return_status = FND_API.G_RET_STS_ERROR THEN
5809 RAISE FND_API.G_EXC_ERROR;
5810 ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5811 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5812 END IF;
5813 OZF_Utility_PVT.debug_message(FND_LOG.LEVEL_STATEMENT,'OZF_OFFER_PVT.processPbhLine','QP Call in processPbhLine---');
5814 OZF_DEBUG_PVT.DEBUG_MO('OZF_OFFER_PVT processPbhLine before calling QP for list_header_id : '||p_modifierLineRec.list_header_id);
5815 QP_Modifiers_PUB.process_modifiers(
5816 p_api_version_number => 1.0,
5817 p_init_msg_list => FND_API.G_FALSE,
5818 p_return_values => FND_API.G_FALSE,
5819 x_return_status => x_return_status,
5820 x_msg_count => x_msg_count,
5821 x_msg_data => x_msg_data,
5822 p_modifiers_tbl => l_modifiersTbl,
5823 p_pricing_attr_tbl => l_pricingAttrTbl,
5824 x_modifier_list_rec => v_modifier_list_rec,
5825 x_modifier_list_val_rec => v_modifier_list_val_rec,
5826 x_modifiers_tbl => v_modifiers_tbl,
5827 x_modifiers_val_tbl => v_modifiers_val_tbl,
5828 x_qualifiers_tbl => v_qualifiers_tbl,
5829 x_qualifiers_val_tbl => v_qualifiers_val_tbl,
5830 x_pricing_attr_tbl => v_pricing_attr_tbl,
5831 x_pricing_attr_val_tbl => v_pricing_attr_val_tbl
5832 );
5833 x_modifiersTbl := v_modifiers_tbl;
5834 IF x_return_status <> Fnd_Api.g_ret_sts_success THEN
5835 return;
5836 END IF;
5837 END processPbhLine;
5838
5839 --=============================END PBH Creation procedures============================================
5840
5841 /*
5842 This API will only deal with PBH records. The tiers fragment will not call this
5843 API. It will call another API */
5844 --=================================================================================
5845 -- Fixed bug # 4354567. Accept additional OUT NOCOPY parameter to pass back the modifier lines created
5846 --====================================================================================
5847
5848 PROCEDURE process_header_tiers
5849 ( x_return_status OUT NOCOPY VARCHAR2
5850 ,x_msg_count OUT NOCOPY NUMBER
5851 ,x_msg_data OUT NOCOPY VARCHAR2
5852 ,p_offer_type IN VARCHAR2
5853 ,p_modifier_line_tbl IN MODIFIER_LINE_TBL_TYPE
5854 ,x_modifiers_tbl OUT NOCOPY QP_MODIFIERS_PUB.modifiers_tbl_type
5855 ,x_error_location OUT NOCOPY NUMBER
5856 ) IS
5857
5858 l_api_version CONSTANT NUMBER := 1.0;
5859 l_api_name CONSTANT VARCHAR2(30) := 'process_header_tiers';
5860 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
5861
5862 v_modifiers_tbl qp_modifiers_pub.modifiers_tbl_type;
5863
5864 BEGIN
5865 -- initialize
5866 -- loop thru lines
5867 -- for each pbh create the line in the database
5868 -- handle exception
5869 x_return_status := Fnd_Api.g_ret_sts_success;
5870 IF nvl(p_modifier_line_tbl.count,0) > 0 THEN
5871 FOR i in p_modifier_line_tbl.first..p_modifier_line_tbl.last LOOP
5872 IF p_modifier_line_tbl.exists(i) THEN
5873 processPbhLine
5874 (
5875 x_return_status => x_return_status
5876 ,x_msg_count => x_msg_count
5877 ,x_msg_data => x_msg_data
5878 ,p_offerType => p_offer_type
5879 ,p_modifierLineRec => p_modifier_line_tbl(i)
5880 ,x_modifiersTbl => v_modifiers_tbl
5881 -- ,x_error_location OUT NOCOPY NUMBER
5882 );
5883 IF x_return_status = FND_API.G_RET_STS_ERROR THEN
5884 x_error_location := i;
5885 RAISE FND_API.G_EXC_ERROR;
5886 ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5887 x_error_location := i;
5888 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5889 END IF;
5890 END IF;
5891 IF nvl(v_modifiers_tbl.count,0) > 0 THEN
5892 FOR i in v_modifiers_tbl.first .. v_modifiers_tbl.last LOOP
5893 IF v_modifiers_tbl.exists(i) THEN
5894 -- dbms_output.put_line('Adding to :'||nvl(v_modifiers_tbl.count,0) + i);
5895 x_modifiers_tbl(nvl(x_modifiers_tbl.count,0) + i) := v_modifiers_tbl(i);
5896 END IF;
5897 END LOOP;
5898 END IF;
5899
5900 END LOOP;
5901 END IF;
5902
5903 EXCEPTION
5904 WHEN Fnd_Api.G_EXC_ERROR THEN
5905 x_return_status := Fnd_Api.g_ret_sts_error ;
5906 Fnd_Msg_Pub.Count_AND_Get
5907 ( p_count => x_msg_count,
5908 p_data => x_msg_data,
5909 p_encoded => Fnd_Api.G_FALSE
5910 );
5911 WHEN Fnd_Api.G_EXC_UNEXPECTED_ERROR THEN
5912 x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
5913 Fnd_Msg_Pub.Count_AND_Get
5914 ( p_count => x_msg_count,
5915 p_data => x_msg_data,
5916 p_encoded => Fnd_Api.G_FALSE
5917 );
5918 WHEN OTHERS THEN
5919 x_return_status := Fnd_Api.g_ret_sts_unexp_erroR ;
5920 IF Fnd_Msg_Pub.Check_Msg_Level ( Fnd_Msg_Pub.G_MSG_LVL_UNEXP_ERROR )
5921 THEN
5922 Fnd_Msg_Pub.Add_Exc_Msg( G_PKG_NAME,l_api_name);
5923 END IF;
5924 Fnd_Msg_Pub.Count_AND_Get
5925 ( p_count => x_msg_count,
5926 p_data => x_msg_data,
5927 p_encoded => Fnd_Api.G_FALSE
5928 );
5929
5930 END;
5931
5932 --nepanda fix for forwardport of bug # 8580281
5933 PROCEDURE checkRequiredItems
5934 (
5935 x_return_status OUT NOCOPY VARCHAR2
5936 ,x_msg_count OUT NOCOPY NUMBER
5937 ,x_msg_data OUT NOCOPY VARCHAR2
5938 ,p_modifier_line_rec IN MODIFIER_LINE_REC_TYPE
5939 )
5940 IS
5941 Cursor QP_Vset_cur IS
5942 SELECT ffvs.flex_value_set_id
5943 FROM FND_DESCR_FLEX_COL_USAGE_VL dcu,
5944 fnd_flex_value_sets ffvs
5945 WHERE DESCRIPTIVE_FLEXFIELD_NAME = 'QP_ATTR_DEFNS_PRICING'
5946 AND dcu.enabled_flag = 'Y'
5947 AND dcu.flex_value_set_id = ffvs.flex_value_set_id(+)
5948 AND dcu.DESCRIPTIVE_FLEX_CONTEXT_CODE = 'ITEM'
5949 AND dcu.application_id = 661
5950 AND dcu.application_column_name = p_modifier_line_rec.PRODUCT_ATTR;
5951
5952 l_value_set_id NUMBER;
5953 BEGIN
5954 x_return_status := FND_API.G_RET_STS_SUCCESS;
5955 IF p_modifier_line_rec.operation = 'CREATE' THEN
5956 --nirprasa, fixed bug 11713014 FP of 11694790
5957 IF (p_modifier_line_rec.PRODUCT_ATTR_VAL IS NULL OR p_modifier_line_rec.PRODUCT_ATTR_VAL = FND_API.g_miss_char)
5958 OR
5959 ( p_modifier_line_rec.PRODUCT_ATTR IS NULL OR p_modifier_line_rec.PRODUCT_ATTR = FND_API.g_miss_char )
5960 THEN
5961 OZF_Utility_PVT.error_message('OZF_OFFR_ITEM_REQD');
5962 x_return_status := Fnd_Api.g_ret_sts_error;
5963 END IF;
5964
5965 Open QP_Vset_cur;
5966 FETCH QP_Vset_cur into l_value_set_id;
5967 Close QP_Vset_cur;
5968
5969 IF (l_value_set_id IS NOT NULL) THEN
5970 IF (validate_vset_values(l_value_set_id,p_modifier_line_rec.PRODUCT_ATTR_VAL) = 'FALSE') THEN
5971 OZF_Utility_PVT.error_message('OZF_OFR_INVALID_LOV_VALUE');
5972 x_return_status := Fnd_Api.g_ret_sts_error;
5973 END IF;
5974 END IF; --HEKKIRAL added for bug 13738807
5975
5976 /*IF (p_modifier_line_rec.product_attr_val IS NULL OR p_modifier_line_rec.product_attr_val = FND_API.G_MISS_CHAR)
5977 THEN
5978 FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
5979 FND_MESSAGE.SET_TOKEN('ATTRIBUTE',OZF_UTILITY_PVT.getAttributeName(p_attributeCode => 'OZF_NAME'));
5980 FND_MSG_PUB.Add;
5981 x_return_status := FND_API.g_ret_sts_error;
5982 END IF;
5983 IF (p_modifier_line_rec.product_attr IS NULL OR p_modifier_line_rec.product_attr = FND_API.G_MISS_CHAR)
5984 THEN
5985 FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
5986 FND_MESSAGE.SET_TOKEN('ATTRIBUTE',OZF_UTILITY_PVT.getAttributeName(p_attributeCode => 'OZF_LEVEL'));
5987 FND_MSG_PUB.Add;
5988 x_return_status := FND_API.g_ret_sts_error;
5989 END IF;*/
5990 --end of fix for bug 11694790
5991 IF (p_modifier_line_rec.list_line_type_code IS NULL OR p_modifier_line_rec.list_line_type_code = FND_API.G_MISS_CHAR)
5992 THEN
5993 FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
5994 FND_MESSAGE.SET_TOKEN('ATTRIBUTE',OZF_UTILITY_PVT.getAttributeName(p_attributeCode => 'OZF_TIER_TYPE'));
5995 FND_MSG_PUB.Add;
5996 x_return_status := FND_API.g_ret_sts_error;
5997 END IF;
5998 ELSIF p_modifier_line_rec.operation = 'UPDATE' THEN
5999 IF (p_modifier_line_rec.product_attr IS NULL )
6000 THEN
6001 FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
6002 FND_MESSAGE.SET_TOKEN('ATTRIBUTE',OZF_UTILITY_PVT.getAttributeName(p_attributeCode => 'OZF_LEVEL'));
6003 FND_MSG_PUB.Add;
6004 x_return_status := FND_API.g_ret_sts_error;
6005 END IF;
6006 IF (p_modifier_line_rec.product_attr_val IS NULL )
6007 THEN
6008 FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
6009 FND_MESSAGE.SET_TOKEN('ATTRIBUTE',OZF_UTILITY_PVT.getAttributeName(p_attributeCode => 'OZF_NAME'));
6010 FND_MSG_PUB.Add;
6011 x_return_status := FND_API.g_ret_sts_error;
6012 END IF;
6013 END IF;
6014 IF (p_modifier_line_rec.list_line_type_code IS NULL )
6015 THEN
6016 FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
6017 FND_MESSAGE.SET_TOKEN('ATTRIBUTE',OZF_UTILITY_PVT.getAttributeName(p_attributeCode => 'OZF_TIER_TYPE'));
6018 FND_MSG_PUB.Add;
6019 x_return_status := FND_API.g_ret_sts_error;
6020 END IF;
6021 END checkRequiredItems;
6022
6023
6024 PROCEDURE checkItems
6025 (
6026 x_return_status OUT NOCOPY VARCHAR2
6027 ,x_msg_count OUT NOCOPY NUMBER
6028 ,x_msg_data OUT NOCOPY VARCHAR2
6029 ,p_modifier_line_tbl IN MODIFIER_LINE_TBL_TYPE
6030 ,x_error_location OUT NOCOPY NUMBER
6031 )
6032 IS
6033 BEGIN
6034 x_return_status := FND_API.G_RET_STS_SUCCESS;
6035 IF nvl(p_modifier_line_tbl.count,0) > 0 THEN
6036 FOR i in p_modifier_line_tbl.first .. p_modifier_line_tbl.last LOOP
6037 checkRequiredItems
6038 (
6039 x_return_status => x_return_status
6040 ,x_msg_count => x_msg_count
6041 ,x_msg_data => x_msg_data
6042 ,p_modifier_line_rec => p_modifier_line_tbl(i)
6043 );
6044 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6045 x_error_location := i;
6046 return;
6047 END IF;
6048 END LOOP;
6049 END IF;
6050 END checkItems;
6051 --nepanda fix for forwardport of bug # 8580281 end
6052
6053 -- Use this procedure to create off invoice, Acruals, Terms Substitution
6054 PROCEDURE process_regular_discounts
6055 (
6056 x_return_status OUT NOCOPY VARCHAR2
6057 ,x_msg_count OUT NOCOPY NUMBER
6058 ,x_msg_data OUT NOCOPY VARCHAR2
6059 ,p_parent_offer_type IN VARCHAR2
6060 ,p_offer_type IN VARCHAR2
6061 ,p_modifier_line_tbl IN MODIFIER_LINE_TBL_TYPE
6062 ,x_modifiers_tbl OUT NOCOPY QP_MODIFIERS_PUB.modifiers_tbl_type
6063 ,x_error_location OUT NOCOPY NUMBER
6064 ) IS
6065
6066 l_api_version CONSTANT NUMBER := 1.0;
6067 l_api_name CONSTANT VARCHAR2(30) := 'process_regular_discounts';
6068 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
6069
6070 tiers_modifier_line_tbl MODIFIER_LINE_TBL_TYPE;
6071
6072 l_modifiers_tbl Qp_Modifiers_Pub.modifiers_tbl_type;
6073 l_pricing_attr_tbl Qp_Modifiers_Pub.pricing_attr_tbl_type;
6074 l_qualifiers_tbl qp_qualifier_rules_pub.qualifiers_tbl_type;
6075 v_modifier_list_rec qp_modifiers_pub.modifier_list_rec_type;
6076 v_modifier_list_val_rec qp_modifiers_pub.modifier_list_val_rec_type;
6077 v_modifiers_tbl qp_modifiers_pub.modifiers_tbl_type;
6078 v_modifiers_val_tbl qp_modifiers_pub.modifiers_val_tbl_type;
6079 v_qualifiers_tbl qp_qualifier_rules_pub.qualifiers_tbl_type;
6080 v_qualifiers_val_tbl qp_qualifier_rules_pub.qualifiers_val_tbl_type;
6081 v_pricing_attr_tbl qp_modifiers_pub.pricing_attr_tbl_type;
6082 v_pricing_attr_val_tbl qp_modifiers_pub.pricing_attr_val_tbl_type;
6083 p_list_line_id NUMBER;
6084
6085 i number := 0;
6086 l_tier_count number := 0;
6087 l_list_header_id NUMBER;
6088 l_override_flag VARCHAR2(1);
6089
6090 TYPE map_record IS RECORD
6091 (
6092 orig_row number,
6093 new_row number,
6094 tier_row number
6095 );
6096
6097 TYPE map_table IS TABLE OF map_record
6098 INDEX BY BINARY_INTEGER;
6099
6100 l_map_table map_table;
6101
6102 CURSOR cur_get_discount_level(p_list_header_id NUMBER) IS
6103 SELECT modifier_level_code
6104 FROM ozf_offers
6105 WHERE qp_list_header_id = p_list_header_id;
6106
6107 l_discount_level VARCHAR2(30):= 'NONE';
6108 l_pricing_phase_id NUMBER;
6109
6110
6111 CURSOR cur_get_offer_enddate(p_list_header_id NUMBER) IS
6112 SELECT start_date_active, end_date_active
6113 FROM qp_list_headers_b
6114 WHERE list_header_id = p_list_header_id;
6115
6116 l_end_date date;
6117 l_start_date DATE;
6118
6119 CURSOR c_adv_options_exist(l_list_header_id NUMBER) IS
6120 SELECT 1
6121 FROM DUAL
6122 WHERE EXISTS (SELECT 1
6123 FROM qp_list_lines
6124 WHERE list_header_id = l_list_header_id);
6125
6126 CURSOR c_adv_options(l_list_header_id NUMBER) IS
6127 SELECT pricing_phase_id,print_on_invoice_flag,incompatibility_grp_code,pricing_group_sequence,product_precedence
6128 FROM qp_list_lines
6129 WHERE list_header_id = l_list_header_id;
6130
6131 l_adv_options_exist NUMBER;
6132
6133 BEGIN
6134 x_return_status := Fnd_Api.g_ret_sts_success;
6135
6136 --nepanda fix for forwardport of bug # 8580281
6137 checkItems
6138 (
6139 x_return_status => x_return_status
6140 ,x_msg_count => x_msg_count
6141 ,x_msg_data => x_msg_data
6142 ,p_modifier_line_tbl => p_modifier_line_tbl
6143 ,x_error_location => x_error_location
6144 );
6145 IF x_return_status = FND_API.G_RET_STS_ERROR THEN
6146 RAISE FND_API.G_EXC_ERROR;
6147 ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
6148 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6149 END IF;
6150 --nepanda fix for forwardport of bug # 8580281 end
6151
6152 l_override_flag := FND_PROFILE.value('OZF_OFFR_OVERRIDE_FLAG');
6153 l_list_header_id := p_modifier_line_tbl(p_modifier_line_tbl.last).list_header_id;
6154
6155 OPEN cur_get_discount_level(l_list_header_id);
6156 FETCH cur_get_discount_level into l_discount_level;
6157 CLOSE cur_get_discount_level;
6158 OPEN cur_get_offer_enddate(l_list_header_id);
6159 FETCH cur_get_offer_enddate into l_start_date, l_end_date;
6160 CLOSE cur_get_offer_enddate;
6161
6162 IF l_discount_level = 'LINEGROUP' THEN
6163 NULL;
6164 ELSIF l_discount_level = 'LINE' THEN
6165 NULL;
6166 ELSIF l_discount_level = 'ORDER' THEN
6167 NULL;
6168 ELSE
6169 l_discount_level := 'LINEGROUP';
6170 END IF;
6171
6172 FOR j in p_modifier_line_tbl.first..p_modifier_line_tbl.last LOOP
6173 IF p_modifier_line_tbl.exists(j) THEN
6174 debug_message('ListLineTypeCode is :'||p_modifier_line_tbl(j).list_line_type_code);
6175 -- RAISE Fnd_Api.g_exc_error;
6176 -- all tiers will be passed as PBH even though some of them are actually Tiers
6177 IF p_modifier_line_tbl(j).list_line_type_code <> 'PBH' THEN
6178 i := i+1;
6179
6180 l_map_table(j).orig_row := j;
6181 l_map_table(j).new_row := i;
6182
6183 l_modifiers_tbl(i).operation := p_modifier_line_tbl(j).operation;
6184 --l_modifiers_tbl(i).list_header_id := p_modifier_line_tbl(j).list_header_id;
6185 l_modifiers_tbl(i).list_header_id := l_list_header_id;
6186 l_modifiers_tbl(i).list_line_id := p_modifier_line_tbl(j).list_line_id;
6187 --ninarasi fix for bug 16870803. Made code changes done to fix bug 13934120 which got reverted in 120.141.12020000.5.
6188 --l_modifiers_tbl(i).list_line_no := p_modifier_line_tbl(j).list_line_no; //nepanda : same assignment is there below, so commenting this
6189 l_modifiers_tbl(i).price_by_formula_id := p_modifier_line_tbl(j).price_by_formula_id;
6190
6191 --//12977732 TPM Offer Integration ER
6192 -- nepanda : 13934120 : added not null condition to avoid l_modifiers_tbl(i).list_line_no getting assigned a NULL value
6193 IF p_modifier_line_tbl(j).list_line_no IS NOT NULL THEN
6194 l_modifiers_tbl(i).list_line_no := p_modifier_line_tbl(j).list_line_no;
6195 END IF;
6196
6197 -- rssharma added flex field on 26-Nov-2002
6198 l_modifiers_tbl(i).attribute1 := p_modifier_line_tbl(j).attribute1;
6199 l_modifiers_tbl(i).attribute2 := p_modifier_line_tbl(j).attribute2;
6200 l_modifiers_tbl(i).attribute3 := p_modifier_line_tbl(j).attribute3;
6201 l_modifiers_tbl(i).attribute4 := p_modifier_line_tbl(j).attribute4;
6202 l_modifiers_tbl(i).attribute5 := p_modifier_line_tbl(j).attribute5;
6203 l_modifiers_tbl(i).attribute6 := p_modifier_line_tbl(j).attribute6;
6204 l_modifiers_tbl(i).attribute7 := p_modifier_line_tbl(j).attribute7;
6205 l_modifiers_tbl(i).attribute8 := p_modifier_line_tbl(j).attribute8;
6206 l_modifiers_tbl(i).attribute9 := p_modifier_line_tbl(j).attribute9;
6207 l_modifiers_tbl(i).attribute10 := p_modifier_line_tbl(j).attribute10;
6208 l_modifiers_tbl(i).attribute11 := p_modifier_line_tbl(j).attribute11;
6209 l_modifiers_tbl(i).attribute12 := p_modifier_line_tbl(j).attribute12;
6210 l_modifiers_tbl(i).attribute13 := p_modifier_line_tbl(j).attribute13;
6211 l_modifiers_tbl(i).attribute14 := p_modifier_line_tbl(j).attribute14;
6212 l_modifiers_tbl(i).attribute15 := p_modifier_line_tbl(j).attribute15;
6213 l_modifiers_tbl(i).context := p_modifier_line_tbl(j).context;
6214 -- gramanat added start_date_active
6215 l_modifiers_tbl(i).start_date_active := p_modifier_line_tbl(j).start_date_active;
6216 l_modifiers_tbl(i).end_date_active := p_modifier_line_tbl(j).end_date_active;
6217 -- end change on 26-Nov-2002
6218
6219 IF p_modifier_line_tbl(j).operation = 'CREATE' THEN
6220 l_modifiers_tbl(i).proration_type_code := 'N';
6221 l_modifiers_tbl(i).modifier_level_code := l_discount_level;
6222 l_modifiers_tbl(i).automatic_flag := 'Y';
6223 -- get advanced options
6224 OPEN c_adv_options_exist(p_modifier_line_tbl(1).list_header_id);
6225 FETCH c_adv_options_exist INTO l_adv_options_exist;
6226 CLOSE c_adv_options_exist;
6227
6228 IF l_adv_options_exist IS NULL THEN
6229 IF l_discount_level = 'LINEGROUP' THEN
6230 l_modifiers_tbl(i).pricing_phase_id := FND_PROFILE.value('OZF_PRICING_PHASE_LINEGROUP');
6231 -- IF l_modifiers_tbl(i).pricing_phase_id <> 3 THEN
6232 -- l_modifiers_tbl(i).pricing_phase_id := 3;
6233 -- END IF;
6234 ELSIF l_discount_level = 'LINE' THEN
6235 l_modifiers_tbl(i).pricing_phase_id := FND_PROFILE.value('OZF_PRICING_PHASE_LINE');
6236 -- IF l_modifiers_tbl(i).pricing_phase_id <> 2 THEN
6237 -- l_modifiers_tbl(i).pricing_phase_id := 2;
6238 -- END IF;
6239 ELSIF l_discount_level = 'ORDER' THEN
6240 l_modifiers_tbl(i).pricing_phase_id := FND_PROFILE.value('OZF_PRICING_PHASE_ORDER');
6241 -- IF l_modifiers_tbl(i).pricing_phase_id <> 4 THEN
6242 -- l_modifiers_tbl(i).pricing_phase_id := 4;
6243 -- END IF;
6244 ELSE
6245 l_modifiers_tbl(i).pricing_phase_id := FND_PROFILE.value('OZF_PRICING_PHASE_LINEGROUP');
6246 -- IF l_modifiers_tbl(i).pricing_phase_id <> 3 THEN
6247 -- l_modifiers_tbl(i).pricing_phase_id := 3;
6248 -- END IF;
6249 END IF;
6250
6251 l_modifiers_tbl(i).print_on_invoice_flag := FND_PROFILE.value('OZF_PRINT_ON_INVOICE');
6252
6253 IF p_parent_offer_type = 'DEAL' THEN
6254 l_modifiers_tbl(i).incompatibility_grp_code := NULL;
6255 ELSE
6256 l_modifiers_tbl(i).incompatibility_grp_code := FND_PROFILE.value('OZF_INCOMPATIBILITY_GROUP');
6257 END IF;
6258
6259 IF l_discount_level <> 'ORDER' THEN
6260 l_modifiers_tbl(i).pricing_group_sequence := FND_PROFILE.value('OZF_PRICING_GROUP_SEQUENCE');
6261 -- IF l_modifiers_tbl(i).pricing_group_sequence <> 1 THEN
6262 -- l_modifiers_tbl(i).pricing_group_sequence := 1;
6263 -- END IF;
6264 END IF;
6265
6266 l_modifiers_tbl(i).product_precedence := FND_PROFILE.value('OZF_PRODUCT_PRECEDENCE');
6267
6268 ELSE
6269 OPEN c_adv_options(p_modifier_line_tbl(1).list_header_id);
6270 FETCH c_adv_options INTO l_modifiers_tbl(i).pricing_phase_id,l_modifiers_tbl(i).print_on_invoice_flag,l_modifiers_tbl(i).incompatibility_grp_code,l_modifiers_tbl(i).pricing_group_sequence,l_modifiers_tbl(i).product_precedence;
6271 CLOSE c_adv_options;
6272
6273 END IF; -- end advanced options
6274 END IF; -- end operation
6275
6276 -- common code irrespective of operation so moved it outside
6277 /* IF p_modifier_line_tbl(j).inactive_flag = 'N' THEN
6278 IF l_start_date IS NOT NULL THEN
6279 l_modifiers_tbl(i).end_date_active := l_start_date;
6280 ELSIF l_end_date IS NOT NULL THEN
6281 l_modifiers_tbl(i).end_date_active := LEAST(l_end_date, SYSDATE);
6282 ELSE
6283 l_modifiers_tbl(i).end_date_active := SYSDATE;
6284 END IF;
6285 --l_modifiers_tbl(i).end_date_active := least(nvl(l_end_date,sysdate-1),sysdate);
6286 ELSE
6287 null;
6288 -- l_modifiers_tbl(i).end_date_active := NULL;
6289 END IF;
6290 */
6291 IF p_offer_type = 'OFF_INVOICE' OR p_offer_type = 'VOLUME_OFFER' THEN
6292 l_modifiers_tbl(i).arithmetic_operator := p_modifier_line_tbl(j).arithmetic_operator;
6293 l_modifiers_tbl(i).operand := p_modifier_line_tbl(j).operand;
6294 l_modifiers_tbl(i).list_line_type_code := 'DIS';
6295 l_modifiers_tbl(i).override_flag := l_override_flag;
6296 l_modifiers_tbl(i).accrual_flag := 'N';
6297 ELSIF p_offer_type = 'ACCRUAL' THEN
6298 l_modifiers_tbl(i).list_line_type_code := 'DIS';
6299 l_modifiers_tbl(i).override_flag := l_override_flag;
6300
6301 IF p_modifier_line_tbl(j).arithmetic_operator not in ('%','AMT','LUMPSUM','NEWPRICE') THEN
6302 l_modifiers_tbl(i).benefit_qty := p_modifier_line_tbl(j).operand;
6303 l_modifiers_tbl(i).benefit_uom_code := p_modifier_line_tbl(j).benefit_uom_code;
6304 l_modifiers_tbl(i).operand := p_modifier_line_tbl(j).operand;
6305 l_modifiers_tbl(i).arithmetic_operator := 'AMT';
6306 l_modifiers_tbl(i).estim_accrual_rate := 1;
6307 l_modifiers_tbl(i).accrual_conversion_rate := 1;
6308 ELSE
6309 l_modifiers_tbl(i).benefit_qty := null;
6310 l_modifiers_tbl(i).benefit_uom_code := null;
6311 l_modifiers_tbl(i).operand := p_modifier_line_tbl(j).operand;
6312 l_modifiers_tbl(i).arithmetic_operator := p_modifier_line_tbl(j).arithmetic_operator;
6313 END IF;
6314 l_modifiers_tbl(i).accrual_flag := 'Y';
6315
6316 ELSIF p_offer_type = 'TERMS' THEN
6317 l_modifiers_tbl(i).list_line_type_code := 'TSN';
6318 l_modifiers_tbl(i).override_flag := 'N'; -- overriding is not supported
6319 l_modifiers_tbl(i).substitution_context := 'TERMS';
6320 l_modifiers_tbl(i).pricing_phase_id := 2;
6321 l_modifiers_tbl(i).modifier_level_code := 'LINE';
6322 l_modifiers_tbl(i).substitution_attribute := p_modifier_line_tbl(j).substitution_attr;
6323 l_modifiers_tbl(i).substitution_value := p_modifier_line_tbl(j).substitution_val;
6324 l_modifiers_tbl(i).estim_gl_value := p_modifier_line_tbl(j).estim_gl_value;
6325 END IF; -- end offer_type
6326
6327 l_pricing_attr_tbl(i).pricing_attribute_id := p_modifier_line_tbl(j).pricing_attribute_id;
6328 l_pricing_attr_tbl(i).product_attribute_context := 'ITEM';
6329 l_pricing_attr_tbl(i).product_attribute := p_modifier_line_tbl(j).product_attr;
6330 l_pricing_attr_tbl(i).product_attr_value := p_modifier_line_tbl(j).product_attr_val;
6331
6332 IF p_modifier_line_tbl(j).pricing_attr = 'PRICING_ATTRIBUTE10' THEN--if volume_type is qty
6333 IF p_modifier_line_tbl(j).product_uom_code is not null and p_modifier_line_tbl(j).product_uom_code <> FND_API.g_miss_char THEN
6334 l_pricing_attr_tbl(i).product_uom_code := p_modifier_line_tbl(j).product_uom_code;
6335 l_modifiers_tbl(i).price_break_type_code := 'POINT';
6336 l_pricing_attr_tbl(i).pricing_attribute_context := 'VOLUME';
6337 l_pricing_attr_tbl(i).pricing_attribute := p_modifier_line_tbl(j).pricing_attr;
6338 l_pricing_attr_tbl(i).pricing_attr_value_from := p_modifier_line_tbl(j).pricing_attr_value_from;
6339 IF p_modifier_line_tbl(j).operation <> 'CREATE' THEN
6340 l_pricing_attr_tbl(i).pricing_attr_value_to := p_modifier_line_tbl(j).pricing_attr_value_to;
6341 END IF;
6342 l_pricing_attr_tbl(i).comparison_operator_code := 'BETWEEN';
6343 ELSIF (p_parent_offer_type<>'DEAL') AND (p_modifier_line_tbl(j).product_uom_code is null --fix for bug 5969719
6344 OR p_modifier_line_tbl(j).product_uom_code = FND_API.g_miss_char
6345 ) AND
6346 ((p_modifier_line_tbl(j).pricing_attr_value_from is not null
6347 AND p_modifier_line_tbl(j).pricing_attr_value_from <> FND_API.g_miss_num) OR
6348 (p_modifier_line_tbl(j).pricing_attr is not null
6349 AND p_modifier_line_tbl(j).pricing_attr <> FND_API.g_miss_char))
6350 THEN
6351 FND_MESSAGE.SET_NAME('OZF','OZF_UOM_QTY_REQD');
6352
6353 Fnd_Msg_Pub.ADD;
6354 RAISE FND_API.G_EXC_ERROR;
6355 END IF;
6356 ELSE -- volume type is amount
6357 l_pricing_attr_tbl(i).product_uom_code := p_modifier_line_tbl(j).product_uom_code;
6358 l_modifiers_tbl(i).price_break_type_code := 'POINT';
6359 l_pricing_attr_tbl(i).pricing_attribute_context := 'VOLUME';
6360 l_pricing_attr_tbl(i).pricing_attribute := p_modifier_line_tbl(j).pricing_attr;
6361 l_pricing_attr_tbl(i).pricing_attr_value_from := p_modifier_line_tbl(j).pricing_attr_value_from;
6362 IF p_modifier_line_tbl(j).operation <> 'CREATE' THEN
6363 l_pricing_attr_tbl(i).pricing_attr_value_to := p_modifier_line_tbl(j).pricing_attr_value_to;
6364 END IF;
6365 l_pricing_attr_tbl(i).comparison_operator_code := 'BETWEEN';
6366 END IF;
6367
6368
6369 l_pricing_attr_tbl(i).modifiers_index := i;
6370 l_pricing_attr_tbl(i).list_line_id := p_modifier_line_tbl(j).list_line_id;
6371 l_pricing_attr_tbl(i).operation := p_modifier_line_tbl(j).operation;
6372
6373
6374 IF p_modifier_line_tbl(j).order_value_from <> fnd_api.g_miss_char and
6375 p_modifier_line_tbl(j).order_value_from is not null THEN
6376
6377 -- This fragment only appears in the detail detail page. Assuming list line id is available.
6378 IF p_modifier_line_tbl(j).qualifier_id = fnd_api.g_miss_num THEN
6379 l_qualifiers_tbl(i).operation := 'CREATE';
6380 l_qualifiers_tbl(i).qualifier_id := fnd_api.g_miss_num;
6381 ELSIF p_modifier_line_tbl(j).order_value_from is not null or p_modifier_line_tbl(j).order_value_to is not null THEN
6382 l_qualifiers_tbl(i).qualifier_id := p_modifier_line_tbl(j).qualifier_id;
6383 l_qualifiers_tbl(i).operation := 'UPDATE';
6384 ELSIF p_modifier_line_tbl(j).order_value_from is null and p_modifier_line_tbl(j).order_value_to is null THEN
6385 l_qualifiers_tbl(i).qualifier_id := p_modifier_line_tbl(j).qualifier_id;
6386 l_qualifiers_tbl(i).operation := 'DELETE';
6387 END IF;
6388
6389 -- julou list_header_id is passed to qualifier otherwise copy API will not copy
6390 -- order_value_from and order_value_to
6391 l_qualifiers_tbl(i).list_header_id := p_modifier_line_tbl(j).list_header_id;
6392 l_qualifiers_tbl(i).list_line_id := p_modifier_line_tbl(j).list_line_id;
6393 l_qualifiers_tbl(i).qualifier_context := 'VOLUME';
6394 l_qualifiers_tbl(i).qualifier_attribute := 'QUALIFIER_ATTRIBUTE10';
6395 l_qualifiers_tbl(i).qualifier_attr_value := p_modifier_line_tbl(j).order_value_from;
6396 IF p_modifier_line_tbl(j).order_value_to is not null and p_modifier_line_tbl(j).order_value_to <> FND_API.g_miss_char THEN
6397 l_qualifiers_tbl(i).qualifier_attr_value_to := p_modifier_line_tbl(j).order_value_to;
6398 ELSE
6399 l_qualifiers_tbl(i).qualifier_attr_value_to := FND_API.g_miss_char;
6400 END IF;
6401 l_qualifiers_tbl(i).comparison_operator_code := 'BETWEEN';
6402 l_qualifiers_tbl(i).qualifier_grouping_no := 1;
6403
6404 END IF;
6405
6406 ELSE
6407 l_tier_count := l_tier_count + 1;
6408
6409 l_map_table(j).orig_row := j;
6410 l_map_table(j).tier_row := l_tier_count;
6411
6412 tiers_modifier_line_tbl(l_tier_count) := p_modifier_line_tbl(j);
6413 END IF;
6414
6415 END IF;
6416 debug_message('ListLineTypeCode is :'||p_modifier_line_tbl(j).list_line_type_code);
6417 END LOOP;
6418 -- RAISE Fnd_Api.g_exc_error;
6419
6420 OZF_Utility_PVT.debug_message(FND_LOG.LEVEL_STATEMENT,l_full_name,'QP Call in process_regular_discounts--- l_modifiers_tbl.count = '|| l_modifiers_tbl.count);
6421
6422 IF l_modifiers_tbl.count > 0 THEN -- bug 3711957. when processing PBH, l_modifiers_tbl is empty
6423 OZF_DEBUG_PVT.DEBUG_MO('OZF_OFFER_PVT process_regular_discounts before calling for QP list_header_id : '|| l_modifiers_tbl(l_modifiers_tbl.FIRST).list_header_id);
6424 QP_Modifiers_PUB.process_modifiers(
6425 p_api_version_number => 1.0,
6426 p_init_msg_list => FND_API.G_FALSE,
6427 p_return_values => FND_API.G_FALSE,
6428 x_return_status => x_return_status,
6429 x_msg_count => x_msg_count,
6430 x_msg_data => x_msg_data,
6431 p_modifiers_tbl => l_modifiers_tbl,
6432 p_pricing_attr_tbl => l_pricing_attr_tbl,
6433 p_qualifiers_tbl => l_qualifiers_tbl,
6434 x_modifier_list_rec => v_modifier_list_rec,
6435 x_modifier_list_val_rec => v_modifier_list_val_rec,
6436 x_modifiers_tbl => v_modifiers_tbl,
6437 x_modifiers_val_tbl => v_modifiers_val_tbl,
6438 x_qualifiers_tbl => v_qualifiers_tbl,
6439 x_qualifiers_val_tbl => v_qualifiers_val_tbl,
6440 x_pricing_attr_tbl => v_pricing_attr_tbl,
6441 x_pricing_attr_val_tbl => v_pricing_attr_val_tbl
6442 );
6443
6444 IF x_return_status <> Fnd_Api.g_ret_sts_success THEN
6445 IF v_modifiers_tbl.COUNT > 0 THEN
6446 FOR k IN v_modifiers_tbl.first..v_modifiers_tbl.last LOOP
6447 IF v_modifiers_tbl.EXISTS(k) THEN
6448 IF v_modifiers_tbl(k).return_status <> Fnd_Api.g_ret_sts_success THEN
6449 FOR t in l_map_table.first..l_map_table.last LOOP
6450 IF l_map_table.exists(t) THEN
6451 IF l_map_table(t).new_row = k THEN
6452 x_error_location := l_map_table(t).orig_row;
6453 EXIT;
6454 END IF;
6455 END IF;
6456 END LOOP;
6457 END IF;
6458 END IF;
6459 END LOOP;
6460 END IF;
6461 END IF;
6462
6463 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
6464 add_message(x_msg_count);
6465 RAISE Fnd_Api.g_exc_error;
6466 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
6467 add_message(x_msg_count);
6468 RAISE Fnd_Api.g_exc_unexpected_error;
6469 END IF;
6470
6471 x_modifiers_tbl := v_modifiers_tbl;
6472 END IF; -- end bug 3711957
6473 ---Process Limits
6474 /*#############################################################################
6475 When processing Terms upgrade type of discounts limit information could come
6476 during creation. The list_line_id might have been created in the above call.
6477 So Have to check for creation and set list line id accordingly. There will be
6478 no 'PBH' type of records for Terms Substitution.
6479 ##############################################################################*/
6480
6481 IF p_offer_type = 'TERMS' THEN
6482
6483 FOR limit_index in p_modifier_line_tbl.first..p_modifier_line_tbl.last LOOP
6484 IF p_modifier_line_tbl.exists(limit_index) THEN
6485 IF p_modifier_line_tbl(limit_index).operation = 'CREATE' THEN
6486 p_list_line_id := v_modifiers_tbl(limit_index).list_line_id;
6487 ELSE
6488 p_list_line_id := p_modifier_line_tbl(limit_index).list_line_id;
6489 END IF;
6490 process_limits
6491 (
6492 x_return_status => x_return_status
6493 ,x_msg_count => x_msg_count
6494 ,x_msg_data => x_msg_data
6495 ,p_limit_type =>'MAX_ORDERS_PER_CUSTOMER'
6496 ,p_limit_amount => p_modifier_line_tbl(limit_index).max_orders_per_customer
6497 ,p_list_line_id => p_list_line_id
6498 ,p_list_header_id => p_modifier_line_tbl(limit_index).list_header_id
6499 ,p_limit_id => p_modifier_line_tbl(limit_index).max_orders_per_customer_id
6500 );
6501
6502 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
6503 x_error_location := limit_index;
6504 RAISE Fnd_Api.g_exc_error;
6505 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
6506 x_error_location := limit_index;
6507 RAISE Fnd_Api.g_exc_unexpected_error;
6508 END IF;
6509
6510 END IF;
6511 END LOOP;
6512
6513 END IF;
6514
6515
6516 IF tiers_modifier_line_tbl.count > 0 THEN
6517 process_header_tiers
6518 (
6519 x_return_status => x_return_status,
6520 x_msg_count => x_msg_count,
6521 x_msg_data => x_msg_data,
6522 p_offer_type => p_offer_type,
6523 p_modifier_line_tbl => tiers_modifier_line_tbl,
6524 x_modifiers_tbl => x_modifiers_tbl,
6525 x_error_location => x_error_location
6526 );
6527
6528 END IF;
6529
6530 IF x_return_status <> Fnd_Api.g_ret_sts_success THEN
6531 FOR t in l_map_table.first..l_map_table.last LOOP
6532 IF l_map_table.exists(t) THEN
6533 IF l_map_table(t).tier_row = x_error_location THEN
6534 x_error_location := l_map_table(t).orig_row;
6535 EXIT;
6536 END IF;
6537 END IF;
6538 END LOOP;
6539 END IF;
6540
6541 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
6542 RAISE Fnd_Api.g_exc_error;
6543 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
6544 RAISE Fnd_Api.g_exc_unexpected_error;
6545 END IF;
6546
6547 /*#############################################################################
6548 For Off Invoice and Accruals, Limit information comes only
6549 through a details page. i.e List_line_id will have a value as part of the record.
6550 When a trade deal is created, the same procedure will be called twice, Once for
6551 Off Invoice and Once for Accrual. If it is trade deal limits will not be processed
6552 through here.
6553 #############################################################################*/
6554
6555 IF p_parent_offer_type <> 'DEAL' THEN
6556
6557 IF p_offer_type IN ('OFF_INVOICE','ACCRUAL') THEN
6558
6559 --nirprasa
6560 FOR limit_index in p_modifier_line_tbl.first..p_modifier_line_tbl.last LOOP
6561 IF p_modifier_line_tbl.exists(limit_index) THEN
6562
6563 p_list_line_id := p_modifier_line_tbl(limit_index).list_line_id;
6564
6565 IF p_modifier_line_tbl(limit_index).operation = 'CREATE'
6566 AND v_modifiers_tbl.exists(limit_index) THEN
6567
6568 p_list_line_id := v_modifiers_tbl(limit_index).list_line_id;
6569
6570 ELSE
6571
6572 p_list_line_id := p_modifier_line_tbl(limit_index).list_line_id;
6573
6574 END IF;
6575
6576 -- IF p_modifier_line_tbl(limit_index).limit_exceed_action_code IS NOT NULL
6577 -- OR p_modifier_line_tbl(limit_index).limit_exceed_action_code <> FND_API.G_MISS_CHAR THEN
6578
6579 process_limits
6580 (
6581 x_return_status => x_return_status
6582 ,x_msg_count => x_msg_count
6583 ,x_msg_data => x_msg_data
6584 ,p_limit_type => 'MAX_QTY_PER_ORDER'
6585 ,p_limit_amount => p_modifier_line_tbl(limit_index).max_qty_per_order
6586 ,p_list_line_id => p_list_line_id
6587 ,p_list_header_id => p_modifier_line_tbl(limit_index).list_header_id
6588 ,p_limit_id => p_modifier_line_tbl(limit_index).max_qty_per_order_id
6589 );
6590
6591
6592 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
6593 x_error_location := limit_index;
6594 RAISE Fnd_Api.g_exc_error;
6595 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
6596 x_error_location := limit_index;
6597 RAISE Fnd_Api.g_exc_unexpected_error;
6598 END IF;
6599
6600 process_limits
6601 (
6602 x_return_status => x_return_status
6603 ,x_msg_count => x_msg_count
6604 ,x_msg_data => x_msg_data
6605 ,p_limit_type =>'MAX_QTY_PER_CUSTOMER'
6606 ,p_limit_amount => p_modifier_line_tbl(limit_index).max_qty_per_customer
6607 ,p_list_line_id => p_modifier_line_tbl(limit_index).list_line_id
6608 ,p_list_header_id => p_modifier_line_tbl(limit_index).list_header_id
6609 ,p_limit_id => p_modifier_line_tbl(limit_index).max_qty_per_customer_id
6610 );
6611
6612 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
6613 x_error_location := limit_index;
6614 RAISE Fnd_Api.g_exc_error;
6615 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
6616 x_error_location := limit_index;
6617 RAISE Fnd_Api.g_exc_unexpected_error;
6618 END IF;
6619
6620 IF g_sd_offer = 'Y' THEN
6621 process_limits
6622 (
6623 x_return_status => x_return_status
6624 ,x_msg_count => x_msg_count
6625 ,x_msg_data => x_msg_data
6626 ,p_limit_type => 'MAX_QTY_PER_RULE'
6627 ,p_limit_amount => p_modifier_line_tbl(limit_index).max_qty_per_rule
6628 ,p_list_line_id => p_list_line_id
6629 ,p_list_header_id => p_modifier_line_tbl(p_modifier_line_tbl.last).list_header_id
6630 ,p_limit_id => p_modifier_line_tbl(limit_index).max_qty_per_rule_id
6631 ,p_limit_exceed_action_code => p_modifier_line_tbl(limit_index).limit_exceed_action_code
6632 );
6633 ELSE
6634 -- nepanda : Fix for bug 10047215 : p_list_line_id is assigned above based on what operation it is (CREATE/UPDATE).
6635 -- Before this case used to come only for UPDATE operation. Now as we need to populate limit value while creating SPR,
6636 -- CREATE oparation will also come here and p_modifier_line_tbl(limit_index).list_line_id will be null for CREATE oparation
6637 process_limits
6638 (
6639 x_return_status => x_return_status
6640 ,x_msg_count => x_msg_count
6641 ,x_msg_data => x_msg_data
6642 ,p_limit_type =>'MAX_QTY_PER_RULE'
6643 ,p_limit_amount => p_modifier_line_tbl(limit_index).max_qty_per_rule
6644 ,p_list_line_id => p_list_line_id -- p_modifier_line_tbl(limit_index).list_line_id -- changed for Bug 10047215
6645 ,p_list_header_id => p_modifier_line_tbl(limit_index).list_header_id
6646 ,p_limit_id => p_modifier_line_tbl(limit_index).max_qty_per_rule_id
6647 );
6648
6649 END IF;
6650
6651 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
6652 x_error_location := limit_index;
6653 RAISE Fnd_Api.g_exc_error;
6654 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
6655 x_error_location := limit_index;
6656 RAISE Fnd_Api.g_exc_unexpected_error;
6657 END IF;
6658
6659 process_limits
6660 (
6661 x_return_status => x_return_status
6662 ,x_msg_count => x_msg_count
6663 ,x_msg_data => x_msg_data
6664 ,p_limit_type =>'MAX_ORDERS_PER_CUSTOMER'
6665 ,p_limit_amount => p_modifier_line_tbl(limit_index).max_orders_per_customer
6666 ,p_list_line_id => p_modifier_line_tbl(limit_index).list_line_id
6667 ,p_list_header_id => p_modifier_line_tbl(limit_index).list_header_id
6668 ,p_limit_id => p_modifier_line_tbl(limit_index).max_orders_per_customer_id
6669 );
6670
6671 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
6672 x_error_location := limit_index;
6673 RAISE Fnd_Api.g_exc_error;
6674 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
6675 x_error_location := limit_index;
6676 RAISE Fnd_Api.g_exc_unexpected_error;
6677 END IF;
6678
6679 process_limits
6680 (
6681 x_return_status => x_return_status
6682 ,x_msg_count => x_msg_count
6683 ,x_msg_data => x_msg_data
6684 ,p_limit_type =>'MAX_AMOUNT_PER_RULE'
6685 ,p_limit_amount => p_modifier_line_tbl(limit_index).max_amount_per_rule
6686 ,p_list_line_id => p_modifier_line_tbl(limit_index).list_line_id
6687 ,p_list_header_id => p_modifier_line_tbl(limit_index).list_header_id
6688 ,p_limit_id => p_modifier_line_tbl(limit_index).max_amount_per_rule_id
6689 );
6690
6691 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
6692 x_error_location := limit_index;
6693 RAISE Fnd_Api.g_exc_error;
6694 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
6695 x_error_location := limit_index;
6696 RAISE Fnd_Api.g_exc_unexpected_error;
6697 END IF;
6698
6699 END IF;
6700 END LOOP;
6701
6702 END IF;
6703
6704 END IF;
6705
6706 Fnd_Msg_Pub.Count_AND_Get
6707 ( p_count => x_msg_count,
6708 p_data => x_msg_data,
6709 p_encoded => Fnd_Api.G_FALSE
6710 );
6711
6712 EXCEPTION
6713 WHEN Fnd_Api.G_EXC_ERROR THEN
6714 x_return_status := Fnd_Api.g_ret_sts_error ;
6715 Fnd_Msg_Pub.Count_AND_Get
6716 ( p_count => x_msg_count,
6717 p_data => x_msg_data,
6718 p_encoded => Fnd_Api.G_FALSE
6719 );
6720 WHEN Fnd_Api.G_EXC_UNEXPECTED_ERROR THEN
6721 x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
6722 Fnd_Msg_Pub.Count_AND_Get
6723 ( p_count => x_msg_count,
6724 p_data => x_msg_data,
6725 p_encoded => Fnd_Api.G_FALSE
6726 );
6727 WHEN OTHERS THEN
6728 x_return_status := Fnd_Api.g_ret_sts_unexp_erroR ;
6729 IF Fnd_Msg_Pub.Check_Msg_Level ( Fnd_Msg_Pub.G_MSG_LVL_UNEXP_ERROR )
6730 THEN
6731 Fnd_Msg_Pub.Add_Exc_Msg( G_PKG_NAME,l_api_name);
6732 END IF;
6733 Fnd_Msg_Pub.Count_AND_Get
6734 ( p_count => x_msg_count,
6735 p_data => x_msg_data,
6736 p_encoded => Fnd_Api.G_FALSE
6737 );
6738 END;
6739
6740
6741 PROCEDURE activate_offer
6742 (
6743 x_return_status OUT NOCOPY VARCHAR2
6744 ,x_msg_count OUT NOCOPY NUMBER
6745 ,x_msg_data OUT NOCOPY VARCHAR2
6746 ,p_qp_list_header_id IN NUMBER
6747 ,p_new_status_id IN NUMBER
6748 )IS
6749
6750 l_api_version CONSTANT NUMBER := 1.0;
6751 l_api_name CONSTANT VARCHAR2(30) := 'activate_offer';
6752 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
6753
6754 l_offer_rec modifier_list_rec_type;
6755 l_amount_error VARCHAR2(1);
6756 l_offer_type VARCHAR2(30);
6757
6758 CURSOR cur_get_ozf_offers IS
6759 SELECT OFFER_ID
6760 , QP_LIST_HEADER_ID
6761 , OFFER_TYPE
6762 , OFFER_CODE
6763 , REUSABLE
6764 , CUSTOM_SETUP_ID
6765 , USER_STATUS_ID
6766 , OWNER_ID
6767 , OBJECT_VERSION_NUMBER
6768 , PERF_DATE_FROM
6769 , PERF_DATE_TO
6770 , STATUS_CODE
6771 , STATUS_DATE
6772 , ORDER_VALUE_DISCOUNT_TYPE
6773 , MODIFIER_LEVEL_CODE
6774 , OFFER_AMOUNT
6775 , LUMPSUM_AMOUNT
6776 , LUMPSUM_PAYMENT_TYPE
6777 , DISTRIBUTION_TYPE
6778 , BUDGET_AMOUNT_FC
6779 , BUDGET_AMOUNT_TC
6780 , TRANSACTION_CURRENCY_CODE
6781 , FUNCTIONAL_CURRENCY_CODE
6782 , ACTIVITY_MEDIA_ID
6783 , BREAK_TYPE
6784 FROM ozf_offers
6785 WHERE qp_list_header_id = p_qp_list_header_id;
6786
6787 CURSOR c_approved_amount(l_id NUMBER) IS
6788 SELECT nvl(sum(approved_amount),0)
6789 FROM ozf_act_budgets
6790 WHERE arc_act_budget_used_by = 'OFFR'
6791 AND act_budget_used_by_id = l_id;
6792
6793 l_status_code varchar2(30);
6794 l_approved_amount number;
6795 l_recal VARCHAR2(1);
6796 BEGIN
6797
6798 SAVEPOINT activate_offer_api;
6799
6800 x_return_status := FND_API.g_ret_sts_success;
6801
6802 l_status_code := OZF_Utility_PVT.get_system_status_code(p_new_status_id);
6803
6804 OPEN cur_get_ozf_offers;
6805 FETCH cur_get_ozf_offers
6806 INTO l_offer_rec.OFFER_ID
6807 ,l_offer_rec.QP_LIST_HEADER_ID
6808 ,l_offer_rec.OFFER_TYPE
6809 ,l_offer_rec.OFFER_CODE
6810 ,l_offer_rec.REUSABLE
6811 ,l_offer_rec.CUSTOM_SETUP_ID
6812 ,l_offer_rec.USER_STATUS_ID
6813 ,l_offer_rec.OWNER_ID
6814 ,l_offer_rec.OBJECT_VERSION_NUMBER
6815 ,l_offer_rec.PERF_DATE_FROM
6816 ,l_offer_rec.PERF_DATE_TO
6817 ,l_offer_rec.STATUS_CODE
6818 ,l_offer_rec.STATUS_DATE
6819 ,l_offer_rec.ORDER_VALUE_DISCOUNT_TYPE
6820 ,l_offer_rec.MODIFIER_LEVEL_CODE
6821 ,l_offer_rec.OFFER_AMOUNT
6822 ,l_offer_rec.LUMPSUM_AMOUNT
6823 ,l_offer_rec.LUMPSUM_PAYMENT_TYPE
6824 ,l_offer_rec.DISTRIBUTION_TYPE
6825 ,l_offer_rec.BUDGET_AMOUNT_FC
6826 ,l_offer_rec.BUDGET_AMOUNT_TC
6827 ,l_offer_rec.TRANSACTION_CURRENCY_CODE
6828 ,l_offer_rec.FUNCTIONAL_CURRENCY_CODE
6829 ,l_offer_rec.ACTIVITY_MEDIA_ID
6830 ,l_offer_rec.BREAK_TYPE;
6831 CLOSE cur_get_ozf_offers;
6832
6833 IF p_new_status_id = OZF_Utility_PVT.get_default_user_status('OZF_OFFER_STATUS','ACTIVE')
6834 AND l_offer_rec.CUSTOM_SETUP_ID = 118 THEN
6835
6836 update ozf_sd_request_headers_all_b set user_status_id= OZF_Utility_PVT.get_default_user_status('OZF_SD_REQUEST_STATUS','ACTIVE')
6837 where offer_id= l_offer_rec.qp_list_header_id;
6838
6839 END IF;
6840
6841 IF l_status_code <> 'ACTIVE' THEN
6842
6843 UPDATE ozf_offers
6844 SET status_code = l_status_code,
6845 status_date = SYSDATE,
6846 object_version_number = object_version_number + 1,
6847 user_status_id = p_new_status_id
6848 WHERE qp_list_header_id = p_qp_list_header_id;
6849
6850
6851
6852 IF l_offer_rec.CUSTOM_SETUP_ID = 118 THEN
6853 IF p_new_status_id = OZF_Utility_PVT.get_default_user_status('OZF_OFFER_STATUS','DENIED_TA')
6854 OR p_new_status_id = OZF_Utility_PVT.get_default_user_status('OZF_OFFER_STATUS','REJECTED') THEN
6855
6856 update ozf_sd_request_headers_all_b set user_status_id= OZF_Utility_PVT.get_default_user_status('OZF_SD_REQUEST_STATUS','OFFER_REJECTED')
6857 where offer_id= l_offer_rec.qp_list_header_id;
6858
6859 END IF;
6860
6861
6862 END IF;
6863
6864 IF SQL%NOTFOUND THEN
6865 RAISE Fnd_Api.g_exc_unexpected_error;
6866 END IF;
6867
6868 RETURN;
6869
6870 END IF;
6871
6872
6873
6874 activate_offer_over(
6875 p_init_msg_list => FND_API.g_false
6876 ,p_api_version => l_api_version
6877 ,p_commit => FND_API.G_FALSE
6878 ,x_return_status => x_return_status
6879 ,x_msg_count => x_msg_count
6880 ,x_msg_data => x_msg_data
6881 ,p_offer_rec => l_offer_rec
6882 ,p_called_from => 'B'
6883 ,x_amount_error => l_amount_error
6884 );
6885
6886 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
6887 RAISE Fnd_Api.g_exc_error;
6888 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
6889 RAISE Fnd_Api.g_exc_unexpected_error;
6890 END IF;
6891
6892 l_recal := FND_PROFILE.VALUE('OZF_BUDGET_ADJ_ALLOW_RECAL');
6893 -- update status according to recal flag
6894 UPDATE ozf_offers
6895 SET status_code = DECODE(l_amount_error, 'Y', DECODE(l_recal, 'N', 'PENDING_ACTIVE', 'Y', 'DRAFT'), 'N', 'ACTIVE'),
6896 status_date = SYSDATE,
6897 object_version_number = object_version_number + 1,
6898 user_status_id = decode(l_amount_error, 'Y', OZF_Utility_PVT.get_default_user_status('OZF_OFFER_STATUS', DECODE(l_recal, 'N', 'PENDING_ACTIVE', 'Y', 'DRAFT')),'N', p_new_status_id)
6899 WHERE qp_list_header_id = p_qp_list_header_id;
6900
6901 /*
6902 -- julou if recal = 'N' if approved>committed -> active otherwise pending_active
6903 IF l_recal = 'N' THEN
6904 UPDATE ozf_offers
6905 SET status_code = decode(l_amount_error,'Y','PENDING_ACTIVE','N','ACTIVE'),
6906 status_date = SYSDATE,
6907 object_version_number = object_version_number + 1,
6908 user_status_id = decode(l_amount_error,'Y',OZF_Utility_PVT.get_default_user_status('OZF_OFFER_STATUS','PENDING_ACTIVE'),'N',p_new_status_id)
6909 WHERE qp_list_header_id = p_qp_list_header_id;
6910 ELSIF FND_PROFILE.VALUE('OZF_BUDGET_ADJ_ALLOW_RECAL') = 'Y' THEN
6911 -- if recal='N' if approved>0 -> active(no status change) otherwise draft
6912 OPEN c_approved_amount(p_qp_list_header_id);
6913 FETCH c_approved_amount INTO l_approved_amount;
6914 CLOSE c_approved_amount;
6915
6916 IF l_approved_amount <= 0 THEN
6917 UPDATE ozf_offers
6918 SET status_code = 'DRAFT',
6919 status_date = SYSDATE,
6920 object_version_number = object_version_number + 1,
6921 user_status_id = OZF_Utility_PVT.get_default_user_status('OZF_OFFER_STATUS','DRAFT')
6922 WHERE qp_list_header_id = p_qp_list_header_id;
6923 END IF;
6924 END IF;
6925 */
6926 IF l_amount_error = 'N' THEN -- update qp to active only when validation passes
6927 IF l_offer_rec.offer_type NOT IN('LUMPSUM', 'SCAN_DATA', 'NET_ACCRUAL') THEN
6928 UPDATE qp_list_headers_b
6929 SET active_flag = 'Y'
6930 WHERE list_header_id = p_qp_list_header_id;
6931
6932 UPDATE qp_qualifiers
6933 SET active_flag='Y'
6934 WHERE list_header_id = p_qp_list_header_id;
6935 END IF;
6936 END IF;
6937 EXCEPTION
6938 WHEN Fnd_Api.G_EXC_ERROR THEN
6939 x_return_status := Fnd_Api.g_ret_sts_error ;
6940 ROLLBACK TO activate_offer_api;
6941 Fnd_Msg_Pub.Count_AND_Get
6942 ( p_count => x_msg_count,
6943 p_data => x_msg_data,
6944 p_encoded => Fnd_Api.G_FALSE
6945 );
6946 WHEN Fnd_Api.G_EXC_UNEXPECTED_ERROR THEN
6947 x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
6948 ROLLBACK TO activate_offer_api;
6949 Fnd_Msg_Pub.Count_AND_Get
6950 ( p_count => x_msg_count,
6951 p_data => x_msg_data,
6952 p_encoded => Fnd_Api.G_FALSE
6953 );
6954 WHEN OTHERS THEN
6955 x_return_status := Fnd_Api.g_ret_sts_unexp_erroR ;
6956 ROLLBACK TO activate_offer_api;
6957 IF Fnd_Msg_Pub.Check_Msg_Level ( Fnd_Msg_Pub.G_MSG_LVL_UNEXP_ERROR )
6958 THEN
6959 Fnd_Msg_Pub.Add_Exc_Msg( G_PKG_NAME,l_api_name);
6960 END IF;
6961 Fnd_Msg_Pub.Count_AND_Get
6962 ( p_count => x_msg_count,
6963 p_data => x_msg_data,
6964 p_encoded => Fnd_Api.G_FALSE
6965 );
6966 END;
6967
6968
6969 PROCEDURE process_order_value
6970 (
6971 x_return_status OUT NOCOPY VARCHAR2
6972 ,x_msg_count OUT NOCOPY NUMBER
6973 ,x_msg_data OUT NOCOPY VARCHAR2
6974 ,p_modifier_line_tbl IN MODIFIER_LINE_TBL_TYPE
6975 , x_modifiers_tbl OUT NOCOPY qp_modifiers_pub.modifiers_tbl_type
6976 ,x_error_location OUT NOCOPY NUMBER
6977 ) IS
6978
6979 l_api_version CONSTANT NUMBER := 1.0;
6980 l_api_name CONSTANT VARCHAR2(30) := 'process_order_value';
6981 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
6982
6983 l_modifiers_tbl Qp_Modifiers_Pub.modifiers_tbl_type;
6984 l_qualifiers_tbl qp_qualifier_rules_pub.qualifiers_tbl_type;
6985 v_modifier_list_rec qp_modifiers_pub.modifier_list_rec_type;
6986 v_modifier_list_val_rec qp_modifiers_pub.modifier_list_val_rec_type;
6987 v_modifiers_tbl qp_modifiers_pub.modifiers_tbl_type;
6988 v_modifiers_val_tbl qp_modifiers_pub.modifiers_val_tbl_type;
6989 v_qualifiers_tbl qp_qualifier_rules_pub.qualifiers_tbl_type;
6990 v_qualifiers_val_tbl qp_qualifier_rules_pub.qualifiers_val_tbl_type;
6991 v_pricing_attr_tbl qp_modifiers_pub.pricing_attr_tbl_type;
6992 v_pricing_attr_val_tbl qp_modifiers_pub.pricing_attr_val_tbl_type;
6993
6994 p_list_line_id NUMBER;
6995 CURSOR cur_get_discount_level(p_list_header_id NUMBER) IS
6996 SELECT modifier_level_code
6997 FROM ozf_offers
6998 WHERE qp_list_header_id = p_list_header_id;
6999
7000 CURSOR cur_get_ov_discount_type(p_list_header_id NUMBER) IS
7001 SELECT order_value_discount_type
7002 FROM ozf_offers
7003 WHERE qp_list_header_id = p_list_header_id;
7004
7005
7006 CURSOR cur_get_offer_enddate(p_list_header_id NUMBER) IS
7007 SELECT start_date_active, end_date_active
7008 FROM qp_list_headers_b
7009 WHERE list_header_id = p_list_header_id;
7010
7011 l_discount_level VARCHAR2(30);
7012 l_order_value_discount_type VARCHAR2(30);
7013 l_pricing_phase_id NUMBER;
7014 l_list_header_id NUMBER;
7015
7016 CURSOR c_adv_options_exist(l_list_header_id NUMBER) IS
7017 SELECT 1
7018 FROM DUAL
7019 WHERE EXISTS (SELECT 1
7020 FROM qp_list_lines
7021 WHERE list_header_id = l_list_header_id);
7022
7023 CURSOR c_adv_options(l_list_header_id NUMBER) IS
7024 SELECT pricing_phase_id,print_on_invoice_flag,incompatibility_grp_code,pricing_group_sequence,product_precedence
7025 FROM qp_list_lines
7026 WHERE list_header_id = l_list_header_id;
7027
7028 l_adv_options_exist NUMBER;
7029 l_override_flag VARCHAR2(1);
7030 l_end_date DATE;
7031 l_start_date DATE;
7032 BEGIN
7033 x_return_status := Fnd_Api.g_ret_sts_success;
7034 l_override_flag := FND_PROFILE.value('OZF_OFFR_OVERRIDE_FLAG');
7035 l_list_header_id := p_modifier_line_tbl(p_modifier_line_tbl.last).list_header_id;
7036
7037 OPEN cur_get_discount_level(l_list_header_id);
7038 FETCH cur_get_discount_level into l_discount_level;
7039 CLOSE cur_get_discount_level;
7040
7041 OPEN cur_get_offer_enddate(l_list_header_id);
7042 FETCH cur_get_offer_enddate into l_start_date, l_end_date;
7043 CLOSE cur_get_offer_enddate;
7044
7045 IF l_discount_level = 'LINEGROUP' THEN
7046 NULL;
7047 ELSIF l_discount_level = 'LINE' THEN
7048 NULL;
7049 ELSIF l_discount_level = 'ORDER' THEN
7050 NULL;
7051 ELSE
7052 l_discount_level := 'LINEGROUP';
7053 END IF;
7054 OZF_Utility_PVT.debug_message(FND_LOG.LEVEL_STATEMENT,l_full_name,'QP Call in process_order_value---');
7055
7056 FOR i in p_modifier_line_tbl.first..p_modifier_line_tbl.last LOOP
7057 IF p_modifier_line_tbl.exists(i) THEN
7058
7059 OZF_DEBUG_PVT.DEBUG_MO('OZF_OFFER_PVT process_order_value before calling QP for list_header_id : '||p_modifier_line_tbl(p_modifier_line_tbl.first).list_header_id);
7060
7061 l_modifiers_tbl(i).operation := p_modifier_line_tbl(i).operation;
7062 l_modifiers_tbl(i).list_header_id := p_modifier_line_tbl(i).list_header_id;
7063 l_modifiers_tbl(i).list_line_id := p_modifier_line_tbl(i).list_line_id;
7064
7065 OPEN cur_get_ov_discount_type(l_list_header_id);
7066 FETCH cur_get_ov_discount_type into l_order_value_discount_type;
7067 CLOSE cur_get_ov_discount_type;
7068
7069 IF p_modifier_line_tbl(i).operation = 'CREATE' THEN
7070
7071 l_modifiers_tbl(i).proration_type_code := 'N';
7072 l_modifiers_tbl(i).print_on_invoice_flag := 'Y';
7073 l_modifiers_tbl(i).modifier_level_code := l_discount_level;
7074 l_modifiers_tbl(i).price_break_type_code := 'POINT';
7075 l_modifiers_tbl(i).automatic_flag := 'Y';
7076 IF l_order_value_discount_type = 'AMT' OR l_order_value_discount_type = 'DIS' THEN
7077 l_modifiers_tbl(i).list_line_type_code := 'DIS';
7078 ELSE
7079 l_modifiers_tbl(i).list_line_type_code := l_order_value_discount_type;
7080 END IF;
7081 l_modifiers_tbl(i).override_flag := l_override_flag;
7082
7083 -- get advanced options
7084 OPEN c_adv_options_exist(p_modifier_line_tbl(1).list_header_id);
7085 FETCH c_adv_options_exist INTO l_adv_options_exist;
7086 CLOSE c_adv_options_exist;
7087
7088 IF l_adv_options_exist IS NULL THEN
7089 IF l_discount_level = 'LINEGROUP' THEN
7090 l_modifiers_tbl(i).pricing_phase_id := FND_PROFILE.value('OZF_PRICING_PHASE_LINEGROUP');
7091 -- IF l_modifiers_tbl(i).pricing_phase_id <> 3 THEN
7092 -- l_modifiers_tbl(i).pricing_phase_id := 3;
7093 -- END IF;
7094 ELSIF l_discount_level = 'LINE' THEN
7095 l_modifiers_tbl(i).pricing_phase_id := FND_PROFILE.value('OZF_PRICING_PHASE_LINE');
7096 -- IF l_modifiers_tbl(i).pricing_phase_id <> 2 THEN
7097 -- l_modifiers_tbl(i).pricing_phase_id := 2;
7098 -- END IF;
7099 ELSIF l_discount_level = 'ORDER' THEN
7100 l_modifiers_tbl(i).pricing_phase_id := FND_PROFILE.value('OZF_PRICING_PHASE_ORDER');
7101 -- IF l_modifiers_tbl(i).pricing_phase_id <> 4 THEN
7102 -- l_modifiers_tbl(i).pricing_phase_id := 4;
7103 -- END IF;
7104 ELSE
7105 l_modifiers_tbl(i).pricing_phase_id := FND_PROFILE.value('OZF_PRICING_PHASE_LINEGROUP');
7106 -- IF l_modifiers_tbl(i).pricing_phase_id <> 3 THEN
7107 -- l_modifiers_tbl(i).pricing_phase_id := 3;
7108 -- END IF;
7109 END IF;
7110
7111 l_modifiers_tbl(i).print_on_invoice_flag := FND_PROFILE.value('OZF_PRINT_ON_INVOICE');
7112 l_modifiers_tbl(i).incompatibility_grp_code := FND_PROFILE.value('OZF_INCOMPATIBILITY_GROUP');
7113
7114 IF l_discount_level <> 'ORDER' THEN
7115 l_modifiers_tbl(i).pricing_group_sequence := FND_PROFILE.value('OZF_PRICING_GROUP_SEQUENCE');
7116 -- IF l_modifiers_tbl(i).pricing_group_sequence <>1 THEN
7117 -- l_modifiers_tbl(i).pricing_group_sequence := 1;
7118 -- END IF;
7119 END IF;
7120
7121 l_modifiers_tbl(i).product_precedence := FND_PROFILE.value('OZF_PRODUCT_PRECEDENCE');
7122
7123 ELSE
7124 OPEN c_adv_options(p_modifier_line_tbl(1).list_header_id);
7125 FETCH c_adv_options INTO l_modifiers_tbl(i).pricing_phase_id,l_modifiers_tbl(i).print_on_invoice_flag,l_modifiers_tbl(i).incompatibility_grp_code,l_modifiers_tbl(i).pricing_group_sequence,l_modifiers_tbl(i).product_precedence;
7126 CLOSE c_adv_options;
7127 END IF;
7128 -- end advanced options
7129
7130 END IF;
7131
7132 IF l_order_value_discount_type = 'DIS' THEN
7133 l_modifiers_tbl(i).override_flag := l_override_flag;
7134 l_modifiers_tbl(i).arithmetic_operator := '%';
7135 l_modifiers_tbl(i).operand := p_modifier_line_tbl(i).operand;
7136 ELSIF l_order_value_discount_type = 'AMT' THEN
7137 l_modifiers_tbl(i).override_flag := l_override_flag;
7138 l_modifiers_tbl(i).arithmetic_operator := 'AMT';
7139 l_modifiers_tbl(i).operand := p_modifier_line_tbl(i).operand;
7140 END IF;
7141
7142 IF p_modifier_line_tbl(i).list_line_type_code = 'TSN' THEN
7143 l_modifiers_tbl(i).override_flag := l_override_flag;
7144 l_modifiers_tbl(i).substitution_context := 'TERMS';
7145 l_modifiers_tbl(i).modifier_level_code := l_discount_level;
7146 -- l_modifiers_tbl(i).pricing_phase_id := 2;
7147 l_modifiers_tbl(i).substitution_attribute := p_modifier_line_tbl(i).substitution_attr;
7148 l_modifiers_tbl(i).substitution_value := p_modifier_line_tbl(i).substitution_val;
7149 l_modifiers_tbl(i).estim_gl_value := p_modifier_line_tbl(i).estim_gl_value;
7150 END IF;
7151
7152 l_modifiers_tbl(i).start_date_active := p_modifier_line_tbl(i).start_date_active;
7153 l_modifiers_tbl(i).end_date_active := p_modifier_line_tbl(i).end_date_active;
7154
7155 IF p_modifier_line_tbl(i).inactive_flag = 'N' THEN
7156 IF l_start_date IS NOT NULL THEN
7157 l_modifiers_tbl(i).end_date_active := GREATEST(l_start_date, SYSDATE);
7158 ELSIF l_end_date IS NOT NULL THEN
7159 l_modifiers_tbl(i).end_date_active := LEAST(l_end_date, SYSDATE);
7160 ELSE
7161 l_modifiers_tbl(i).end_date_active := SYSDATE;
7162 END IF;
7163 --l_modifiers_tbl(i).end_date_active := least(nvl(l_end_date,sysdate-1),sysdate);
7164 ELSE
7165 l_modifiers_tbl(i).end_date_active := p_modifier_line_tbl(i).end_date_active;
7166 END IF;
7167
7168 END IF;
7169 -- rssharma added flex field on 15-Apr-2003
7170 l_modifiers_tbl(i).attribute1 := p_modifier_line_tbl(i).attribute1;
7171 l_modifiers_tbl(i).attribute2 := p_modifier_line_tbl(i).attribute2;
7172 l_modifiers_tbl(i).attribute3 := p_modifier_line_tbl(i).attribute3;
7173 l_modifiers_tbl(i).attribute4 := p_modifier_line_tbl(i).attribute4;
7174 l_modifiers_tbl(i).attribute5 := p_modifier_line_tbl(i).attribute5;
7175 l_modifiers_tbl(i).attribute6 := p_modifier_line_tbl(i).attribute6;
7176 l_modifiers_tbl(i).attribute7 := p_modifier_line_tbl(i).attribute7;
7177 l_modifiers_tbl(i).attribute8 := p_modifier_line_tbl(i).attribute8;
7178 l_modifiers_tbl(i).attribute9 := p_modifier_line_tbl(i).attribute9;
7179 l_modifiers_tbl(i).attribute10 := p_modifier_line_tbl(i).attribute10;
7180 l_modifiers_tbl(i).attribute11 := p_modifier_line_tbl(i).attribute11;
7181 l_modifiers_tbl(i).attribute12 := p_modifier_line_tbl(i).attribute12;
7182 l_modifiers_tbl(i).attribute13 := p_modifier_line_tbl(i).attribute13;
7183 l_modifiers_tbl(i).attribute14 := p_modifier_line_tbl(i).attribute14;
7184 l_modifiers_tbl(i).attribute15 := p_modifier_line_tbl(i).attribute15;
7185 l_modifiers_tbl(i).context := p_modifier_line_tbl(i).context;
7186 -- end change on 15-Apr-2003
7187 debug_message('ENdDateActive is :'||l_modifiers_tbl(i).end_date_active);
7188 END LOOP;
7189
7190 QP_Modifiers_PUB.process_modifiers(
7191 p_api_version_number => 1.0,
7192 p_init_msg_list => FND_API.G_FALSE,
7193 p_return_values => FND_API.G_FALSE,
7194 x_return_status => x_return_status,
7195 x_msg_count => x_msg_count,
7196 x_msg_data => x_msg_data,
7197 p_modifiers_tbl => l_modifiers_tbl,
7198 x_modifier_list_rec => v_modifier_list_rec,
7199 x_modifier_list_val_rec => v_modifier_list_val_rec,
7200 x_modifiers_tbl => v_modifiers_tbl,
7201 x_modifiers_val_tbl => v_modifiers_val_tbl,
7202 x_qualifiers_tbl => v_qualifiers_tbl,
7203 x_qualifiers_val_tbl => v_qualifiers_val_tbl,
7204 x_pricing_attr_tbl => v_pricing_attr_tbl,
7205 x_pricing_attr_val_tbl => v_pricing_attr_val_tbl
7206 );
7207 x_modifiers_tbl := v_modifiers_tbl;
7208
7209 IF x_return_status <> Fnd_Api.g_ret_sts_success THEN
7210 IF v_modifiers_tbl.COUNT > 0 THEN
7211 FOR k IN v_modifiers_tbl.first..v_modifiers_tbl.last LOOP
7212 IF v_modifiers_tbl.EXISTS(k) THEN
7213 IF v_modifiers_tbl(k).return_status <> Fnd_Api.g_ret_sts_success THEN
7214 x_error_location := k;
7215 EXIT;
7216 END IF;
7217 END IF;
7218 END LOOP;
7219 END IF;
7220 END IF;
7221
7222 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
7223 add_message(x_msg_count);
7224 RAISE Fnd_Api.g_exc_error;
7225 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
7226 add_message(x_msg_count);
7227 RAISE Fnd_Api.g_exc_unexpected_error;
7228 END IF;
7229 FOR i in p_modifier_line_tbl.first..p_modifier_line_tbl.last LOOP
7230 IF p_modifier_line_tbl.exists(i) THEN
7231
7232
7233 l_qualifiers_tbl(i).qualifier_id := p_modifier_line_tbl(i).qualifier_id;
7234 l_qualifiers_tbl(i).list_header_id := p_modifier_line_tbl(i).list_header_id; -- list_header_id for order value discount
7235 l_qualifiers_tbl(i).list_line_id := v_modifiers_tbl(i).list_line_id;
7236 l_qualifiers_tbl(i).qualifier_context := 'VOLUME';
7237 l_qualifiers_tbl(i).qualifier_attribute := 'QUALIFIER_ATTRIBUTE10';
7238 l_qualifiers_tbl(i).qualifier_attr_value := p_modifier_line_tbl(i).order_value_from;
7239 IF p_modifier_line_tbl(i).order_value_to IS NOT NULL AND
7240 p_modifier_line_tbl(i).order_value_to <> FND_API.g_miss_char THEN
7241 l_qualifiers_tbl(i).qualifier_attr_value_to := p_modifier_line_tbl(i).order_value_to;
7242 ELSE
7243 l_qualifiers_tbl(i).qualifier_attr_value_to := FND_API.g_miss_char;
7244 END IF;
7245 l_qualifiers_tbl(i).comparison_operator_code := 'BETWEEN';
7246 l_qualifiers_tbl(i).qualifier_grouping_no := 1;
7247 l_qualifiers_tbl(i).operation := p_modifier_line_tbl(i).operation;
7248
7249 END IF;
7250
7251 OZF_DEBUG_PVT.DEBUG_MO('OZF_OFFER_PVT process_order_value before calling QP for list_header_id : '||p_modifier_line_tbl(p_modifier_line_tbl.first).list_header_id);
7252
7253 END LOOP;
7254
7255 OZF_Utility_PVT.debug_message(FND_LOG.LEVEL_STATEMENT,l_full_name,'QP Call in process_order_value 2---p_modifier_line_tbl.count = '|| p_modifier_line_tbl.count);
7256 QP_Modifiers_PUB.process_modifiers(
7257 p_api_version_number => 1.0,
7258 p_init_msg_list => FND_API.G_FALSE,
7259 p_return_values => FND_API.G_FALSE,
7260 x_return_status => x_return_status,
7261 x_msg_count => x_msg_count,
7262 x_msg_data => x_msg_data,
7263 p_qualifiers_tbl => l_qualifiers_tbl,
7264 x_modifier_list_rec => v_modifier_list_rec,
7265 x_modifier_list_val_rec => v_modifier_list_val_rec,
7266 x_modifiers_tbl => v_modifiers_tbl,
7267 x_modifiers_val_tbl => v_modifiers_val_tbl,
7268 x_qualifiers_tbl => v_qualifiers_tbl,
7269 x_qualifiers_val_tbl => v_qualifiers_val_tbl,
7270 x_pricing_attr_tbl => v_pricing_attr_tbl,
7271 x_pricing_attr_val_tbl => v_pricing_attr_val_tbl
7272 );
7273
7274 IF x_return_status <> Fnd_Api.g_ret_sts_success THEN
7275 IF v_qualifiers_tbl.COUNT > 0 THEN
7276 FOR k IN v_qualifiers_tbl.first..v_qualifiers_tbl.last LOOP
7277 IF v_qualifiers_tbl.EXISTS(k) THEN
7278 IF v_qualifiers_tbl(k).return_status <> Fnd_Api.g_ret_sts_success THEN
7279 x_error_location := k;
7280 EXIT;
7281 END IF;
7282 END IF;
7283 END LOOP;
7284 END IF;
7285 END IF;
7286
7287 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
7288 add_message(x_msg_count);
7289 RAISE Fnd_Api.g_exc_error;
7290 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
7291 add_message(x_msg_count);
7292 RAISE Fnd_Api.g_exc_unexpected_error;
7293 END IF;
7294
7295 -- The following code is commented for now. If we decide that we need limits
7296 -- for order value type of discounts, we will open this code up.
7297
7298 /* FOR limit_index in p_modifier_line_tbl.first..p_modifier_line_tbl.last LOOP
7299
7300 IF p_modifier_line_tbl.exists(limit_index) THEN
7301
7302 IF p_modifier_line_tbl(limit_index).operation = 'CREATE' THEN
7303 p_list_line_id := v_modifiers_tbl(limit_index).list_line_id;
7304 ELSE
7305 p_list_line_id := p_modifier_line_tbl(limit_index).list_line_id;
7306 END IF;
7307
7308 IF p_modifier_line_tbl(limit_index).list_line_type_code = 'TSN' THEN
7309 process_limits
7310 (
7311 x_return_status => x_return_status
7312 ,x_msg_count => x_msg_count
7313 ,x_msg_data => x_msg_data
7314 ,p_limit_type =>'MAX_ORDERS_PER_CUSTOMER'
7315 ,p_limit_amount => p_modifier_line_tbl(limit_index).max_orders_per_customer
7316 ,p_list_line_id => p_list_line_id
7317 ,p_list_header_id => p_modifier_line_tbl(limit_index).list_header_id
7318 ,p_limit_id => p_modifier_line_tbl(limit_index).max_orders_per_customer_id
7319 );
7320 ELSIF p_modifier_line_tbl(limit_index).list_line_type_code = 'DIS' THEN
7321 process_limits
7322 (
7323 x_return_status => x_return_status
7324 ,x_msg_count => x_msg_count
7325 ,x_msg_data => x_msg_data
7326 ,p_limit_type =>'MAX_AMOUNT_PER_RULE'
7327 ,p_limit_amount => p_modifier_line_tbl(limit_index).max_amount_per_rule
7328 ,p_list_line_id => p_list_line_id
7329 ,p_list_header_id => p_modifier_line_tbl(limit_index).list_header_id
7330 ,p_limit_id => p_modifier_line_tbl(limit_index).max_amount_per_rule_id
7331 );
7332 END IF;
7333
7334 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
7335 x_error_location := limit_index;
7336 RAISE Fnd_Api.g_exc_error;
7337 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
7338 x_error_location := limit_index;
7339 RAISE Fnd_Api.g_exc_unexpected_error;
7340 END IF;
7341
7342 END IF;
7343 END LOOP; */
7344
7345 Fnd_Msg_Pub.Count_AND_Get
7346 ( p_count => x_msg_count,
7347 p_data => x_msg_data,
7348 p_encoded => Fnd_Api.G_FALSE
7349 );
7350
7351 EXCEPTION
7352 WHEN Fnd_Api.G_EXC_ERROR THEN
7353 x_return_status := Fnd_Api.g_ret_sts_error ;
7354 Fnd_Msg_Pub.Count_AND_Get
7355 ( p_count => x_msg_count,
7356 p_data => x_msg_data,
7357 p_encoded => Fnd_Api.G_FALSE
7358 );
7359 WHEN Fnd_Api.G_EXC_UNEXPECTED_ERROR THEN
7360 x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
7361 Fnd_Msg_Pub.Count_AND_Get
7362 ( p_count => x_msg_count,
7363 p_data => x_msg_data,
7364 p_encoded => Fnd_Api.G_FALSE
7365 );
7366 WHEN OTHERS THEN
7367 x_return_status := Fnd_Api.g_ret_sts_unexp_erroR ;
7368 IF Fnd_Msg_Pub.Check_Msg_Level ( Fnd_Msg_Pub.G_MSG_LVL_UNEXP_ERROR )
7369 THEN
7370 Fnd_Msg_Pub.Add_Exc_Msg( G_PKG_NAME,l_api_name);
7371 END IF;
7372 Fnd_Msg_Pub.Count_AND_Get
7373 ( p_count => x_msg_count,
7374 p_data => x_msg_data,
7375 p_encoded => Fnd_Api.G_FALSE
7376 );
7377 END;
7378
7379
7380 PROCEDURE validate_lumpsum_offer
7381 (
7382 p_init_msg_list IN VARCHAR2
7383 ,x_return_status OUT NOCOPY VARCHAR2
7384 ,x_msg_count OUT NOCOPY NUMBER
7385 ,x_msg_data OUT NOCOPY VARCHAR2
7386 ,p_qp_list_header_id IN NUMBER
7387 )IS
7388
7389 l_api_version CONSTANT NUMBER := 1.0;
7390 l_api_name CONSTANT VARCHAR2(30) := 'validate_lumpsum_offer';
7391 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
7392
7393 CURSOR cur_get_lumpsum_details IS
7394 SELECT status_code,lumpsum_amount,object_version_number,distribution_type,qp_list_header_id,offer_id
7395 FROM ozf_offers
7396 WHERE qp_list_header_id = p_qp_list_header_id;
7397
7398 l_lumpsum_offer cur_get_lumpsum_details%rowtype;
7399
7400 CURSOR cur_get_lumpsum_line_details IS
7401 SELECT nvl(sum(line_lumpsum_qty),0)
7402 FROM ams_act_products
7403 WHERE ARC_ACT_PRODUCT_USED_BY = 'OFFR'
7404 AND ACT_PRODUCT_USED_BY_ID = p_qp_list_header_id;
7405
7406 l_total_distribution NUMBER;
7407
7408 BEGIN
7409 x_return_status := Fnd_Api.g_ret_sts_success;
7410
7411 OPEN cur_get_lumpsum_details;
7412 FETCH cur_get_lumpsum_details INTO l_lumpsum_offer;
7413 CLOSE cur_get_lumpsum_details;
7414
7415 OPEN cur_get_lumpsum_line_details;
7416 FETCH cur_get_lumpsum_line_details INTO l_total_distribution;
7417 CLOSE cur_get_lumpsum_line_details;
7418
7419 IF l_lumpsum_offer.distribution_type = 'AMT' THEN
7420 IF l_lumpsum_offer.STATUS_CODE = 'PENDING' OR l_lumpsum_offer.STATUS_CODE = 'ACTIVE' THEN
7421
7422 IF l_total_distribution <> l_lumpsum_offer.lumpsum_amount THEN
7423 FND_MESSAGE.SET_NAME('OZF','OZF_INVALID_DISTR_ACTIVE');
7424 Fnd_Msg_Pub.ADD;
7425 RAISE FND_API.G_EXC_ERROR;
7426 END IF;
7427
7428 ELSE
7429
7430 IF l_total_distribution > l_lumpsum_offer.lumpsum_amount THEN
7431 FND_MESSAGE.SET_NAME('OZF','OZF_INVALID_DISTRIBUTION');
7432 Fnd_Msg_Pub.ADD;
7433 RAISE FND_API.G_EXC_ERROR;
7434 END IF;
7435
7436 END IF;
7437
7438 ELSIF l_lumpsum_offer.distribution_type = '%' THEN
7439
7440 IF l_lumpsum_offer.STATUS_CODE = 'PENDING' OR l_lumpsum_offer.STATUS_CODE = 'ACTIVE' THEN
7441
7442 IF l_total_distribution <> 100 THEN
7443 FND_MESSAGE.SET_NAME('OZF','OZF_INVALID_DISTR_ACTIVE');
7444 Fnd_Msg_Pub.ADD;
7445 RAISE FND_API.G_EXC_ERROR;
7446 END IF;
7447
7448
7449 ELSE
7450
7451 IF l_total_distribution > 100 THEN
7452 FND_MESSAGE.SET_NAME('OZF','OZF_INVALID_DISTRIBUTION');
7453 Fnd_Msg_Pub.ADD;
7454 RAISE FND_API.G_EXC_ERROR;
7455 END IF;
7456
7457 END IF;
7458
7459 END IF;
7460
7461 Fnd_Msg_Pub.Count_AND_Get
7462 ( p_count => x_msg_count,
7463 p_data => x_msg_data,
7464 p_encoded => Fnd_Api.G_FALSE
7465 );
7466
7467 EXCEPTION
7468 WHEN Fnd_Api.G_EXC_ERROR THEN
7469 x_return_status := Fnd_Api.g_ret_sts_error ;
7470 Fnd_Msg_Pub.Count_AND_Get
7471 ( p_count => x_msg_count,
7472 p_data => x_msg_data,
7473 p_encoded => Fnd_Api.G_FALSE
7474 );
7475 WHEN Fnd_Api.G_EXC_UNEXPECTED_ERROR THEN
7476 x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
7477 Fnd_Msg_Pub.Count_AND_Get
7478 ( p_count => x_msg_count,
7479 p_data => x_msg_data,
7480 p_encoded => Fnd_Api.G_FALSE
7481 );
7482 WHEN OTHERS THEN
7483 x_return_status := Fnd_Api.g_ret_sts_unexp_erroR ;
7484 IF Fnd_Msg_Pub.Check_Msg_Level ( Fnd_Msg_Pub.G_MSG_LVL_UNEXP_ERROR )
7485 THEN
7486 Fnd_Msg_Pub.Add_Exc_Msg( G_PKG_NAME,l_api_name);
7487 END IF;
7488 Fnd_Msg_Pub.Count_AND_Get
7489 ( p_count => x_msg_count,
7490 p_data => x_msg_data,
7491 p_encoded => Fnd_Api.G_FALSE
7492 );
7493
7494 END;
7495
7496
7497 -------------------------------------------------
7498 -- Start of Comments
7499 --
7500 -- NAME
7501 -- check_pg_reqd_items
7502 --
7503 -- PURPOSE
7504 -- Checks the required items for Promotional goods offers
7505 --
7506 -- IN
7507 -- p_modifier_line_tbl IN MODIFIER_LINE_TBL_TYPE
7508 --
7509 -- OUT
7510 -- x_return_status OUT VARCHAR2,
7511 -- x_msg_count OUT NUMBER,
7512 -- x_msg_data OUT VARCHAR2,
7513 -- x_error_location OUT NUMBER
7514 --
7515 -- NOTES
7516 --
7517 -- HISTORY
7518 -- Mon Aug 09 2004:5/30 PM RSSHARMA Created
7519 -- End of Comments
7520 -------------------------------------------------
7521
7522 PROCEDURE check_pg_reqd_items(
7523 x_return_status OUT NOCOPY VARCHAR2
7524 ,x_msg_count OUT NOCOPY NUMBER
7525 ,x_msg_data OUT NOCOPY VARCHAR2
7526 ,p_modifier_line_tbl IN MODIFIER_LINE_TBL_TYPE
7527 ,x_error_location OUT NOCOPY NUMBER
7528 )
7529 IS
7530 BEGIN
7531 FOR i IN p_modifier_line_tbl.first..p_modifier_line_tbl.last LOOP
7532 IF (p_modifier_line_tbl(i).PRODUCT_ATTR_VAL IS NULL OR p_modifier_line_tbl(i).PRODUCT_ATTR_VAL = FND_API.g_miss_char)
7533 OR
7534 ( p_modifier_line_tbl(i).PRODUCT_ATTR IS NULL OR p_modifier_line_tbl(i).PRODUCT_ATTR = FND_API.g_miss_char )
7535 THEN
7536 OZF_Utility_PVT.error_message('OZF_OFFR_ITEM_REQD');
7537 x_return_status := Fnd_Api.g_ret_sts_error;
7538 END IF;
7539 END LOOP;
7540 END check_pg_reqd_items;
7541
7542
7543 PROCEDURE process_promotional_goods
7544 (
7545 x_return_status OUT NOCOPY VARCHAR2
7546 ,x_msg_count OUT NOCOPY NUMBER
7547 ,x_msg_data OUT NOCOPY VARCHAR2
7548 ,p_modifier_line_tbl IN MODIFIER_LINE_TBL_TYPE
7549 ,x_modifiers_tbl OUT NOCOPY qp_modifiers_pub.modifiers_tbl_type
7550 ,x_error_location OUT NOCOPY NUMBER
7551 ) IS
7552
7553 l_api_version CONSTANT NUMBER := 1.0;
7554 l_api_name CONSTANT VARCHAR2(30) := 'process_promotional_goods';
7555 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
7556
7557 tiers_modifier_line_tbl MODIFIER_LINE_TBL_TYPE;
7558 p_list_line_id NUMBER;
7559 l_modifiers_tbl Qp_Modifiers_Pub.modifiers_tbl_type;
7560 l_pricing_attr_tbl Qp_Modifiers_Pub.pricing_attr_tbl_type;
7561 v_modifier_list_rec qp_modifiers_pub.modifier_list_rec_type;
7562 v_modifier_list_val_rec qp_modifiers_pub.modifier_list_val_rec_type;
7563 v_modifiers_tbl qp_modifiers_pub.modifiers_tbl_type;
7564 v_modifiers_val_tbl qp_modifiers_pub.modifiers_val_tbl_type;
7565 v_qualifiers_tbl qp_qualifier_rules_pub.qualifiers_tbl_type;
7566 v_qualifiers_val_tbl qp_qualifier_rules_pub.qualifiers_val_tbl_type;
7567 v_pricing_attr_tbl qp_modifiers_pub.pricing_attr_tbl_type;
7568 v_pricing_attr_val_tbl qp_modifiers_pub.pricing_attr_val_tbl_type;
7569 l_control_rec qp_globals.control_rec_type;
7570
7571 l_modifier_parent_index NUMBER := 0;
7572 l_list_header_id NUMBER;
7573 l_related_modifier_id NUMBER := 0;
7574
7575 CURSOR cur_get_PRG_line_id(p_list_header_id NUMBER) IS
7576 SELECT list_line_id
7577 FROM qp_list_lines
7578 WHERE list_header_id = p_list_header_id
7579 AND list_line_type_code = 'PRG';
7580
7581 l_use_modifier_index boolean;
7582
7583 CURSOR cur_get_discount_level(p_list_header_id NUMBER) IS
7584 SELECT modifier_level_code
7585 FROM ozf_offers
7586 WHERE qp_list_header_id = p_list_header_id;
7587
7588 l_discount_level VARCHAR2(30);
7589 l_pricing_phase_id NUMBER;
7590
7591 CURSOR c_adv_options_exist(l_list_header_id NUMBER) IS
7592 SELECT 1
7593 FROM DUAL
7594 WHERE EXISTS (SELECT 1
7595 FROM qp_list_lines
7596 WHERE list_header_id = l_list_header_id);
7597
7598 CURSOR c_adv_options(l_list_header_id NUMBER) IS
7599 SELECT pricing_phase_id,print_on_invoice_flag,incompatibility_grp_code,pricing_group_sequence,product_precedence
7600 FROM qp_list_lines
7601 WHERE list_header_id = l_list_header_id;
7602
7603 l_adv_options_exist NUMBER;
7604
7605 CURSOR c_get_break_type(l_list_header_id NUMBER) IS
7606 SELECT break_type
7607 FROM ozf_offers
7608 WHERE qp_list_header_id = l_list_header_id;
7609
7610 CURSOR cur_get_offer_enddate(p_list_header_id NUMBER) IS
7611 SELECT start_date_active, end_date_active
7612 FROM qp_list_headers_b
7613 WHERE list_header_id = p_list_header_id;
7614
7615 l_break_type VARCHAR2(30);
7616 l_end_date DATE;
7617 l_start_date DATE;
7618 BEGIN
7619 x_return_status := Fnd_Api.g_ret_sts_success;
7620
7621 l_list_header_id := p_modifier_line_tbl(p_modifier_line_tbl.first).list_header_id;
7622
7623 OPEN cur_get_PRG_line_id(l_list_header_id);
7624 FETCH cur_get_prg_line_id INTO l_related_modifier_id;
7625 CLOSE cur_get_PRG_line_id;
7626
7627
7628 OPEN cur_get_offer_enddate(l_list_header_id);
7629 FETCH cur_get_offer_enddate into l_start_date, l_end_date;
7630 CLOSE cur_get_offer_enddate;
7631
7632 IF nvl(l_related_modifier_id,0) = 0 THEN
7633 l_use_modifier_index := TRUE;
7634 ELSE
7635 l_use_modifier_index := FALSE;
7636 END IF;
7637
7638 OPEN cur_get_discount_level(l_list_header_id);
7639 FETCH cur_get_discount_level into l_discount_level;
7640 CLOSE cur_get_discount_level;
7641
7642 IF l_discount_level = 'LINEGROUP' THEN
7643 NULL;
7644 ELSIF l_discount_level = 'LINE' THEN
7645 NULL;
7646 ELSIF l_discount_level = 'ORDER' THEN
7647 NULL;
7648 ELSE
7649 l_discount_level := 'LINEGROUP';
7650 END IF;
7651
7652 OPEN c_get_break_type(l_list_header_id);
7653 FETCH c_get_break_type INTO l_break_type;
7654 CLOSE c_get_break_type;
7655
7656 FOR i IN p_modifier_line_tbl.first..p_modifier_line_tbl.last LOOP
7657
7658 IF p_modifier_line_tbl.exists(i) THEN
7659
7660 l_modifiers_tbl(i).operation := p_modifier_line_tbl(i).operation;
7661 l_modifiers_tbl(i).list_header_id := p_modifier_line_tbl(i).list_header_id;
7662 l_modifiers_tbl(i).list_line_id := p_modifier_line_tbl(i).list_line_id;
7663 l_modifiers_tbl(i).override_flag := 'N'; -- overriding is not supported
7664
7665 IF p_modifier_line_tbl(i).operation = 'CREATE' THEN
7666 check_pg_reqd_items(
7667 x_return_status => x_return_status
7668 ,x_msg_count => x_msg_count
7669 ,x_msg_data => x_msg_data
7670 ,p_modifier_line_tbl => p_modifier_line_tbl
7671 ,x_error_location => x_error_location
7672 );
7673 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
7674 RAISE Fnd_Api.g_exc_error;
7675 END IF;
7676
7677 IF i = p_modifier_line_tbl.first and l_use_modifier_index = TRUE and p_modifier_line_tbl(i).list_line_type_code = 'RLTD' THEN
7678 l_modifier_parent_index := i;
7679 l_modifiers_tbl(i).list_line_type_code := 'PRG' ;
7680 l_modifiers_tbl(i).override_flag := 'N'; -- overriding is not supported
7681 -- l_modifiers_tbl(i).rltd_modifier_grp_type := 'QUALIFIER';
7682 l_modifiers_tbl(i).rltd_modifier_grp_no := 1;
7683 l_modifiers_tbl(i).price_break_type_code := l_break_type;
7684 l_control_rec.process := FALSE;
7685 ELSIF p_modifier_line_tbl(i).list_line_type_code = 'RLTD' THEN
7686 l_control_rec.process := FALSE;
7687 l_modifiers_tbl(i).list_line_type_code := p_modifier_line_tbl(i).list_line_type_code;
7688 l_modifiers_tbl(i).override_flag := 'N'; -- overriding is not supported
7689 IF l_use_modifier_index = TRUE THEN
7690 l_modifiers_tbl(i).modifier_parent_index := l_modifier_parent_index;
7691 ELSE
7692 l_modifiers_tbl(i).from_rltd_modifier_id := l_related_modifier_id;
7693 END IF;
7694 l_modifiers_tbl(i).rltd_modifier_grp_type := 'QUALIFIER';
7695 l_modifiers_tbl(i).rltd_modifier_grp_no := 1;
7696 l_modifiers_tbl(i).price_break_type_code := l_break_type;
7697 ELSIF p_modifier_line_tbl(i).list_line_type_code = 'DIS' THEN
7698 l_control_rec.process := TRUE;
7699 l_modifiers_tbl(i).list_line_type_code := p_modifier_line_tbl(i).list_line_type_code;
7700 l_modifiers_tbl(i).override_flag := 'N'; -- overriding is not supported
7701 l_modifiers_tbl(i).from_rltd_modifier_id := l_related_modifier_id;
7702 l_modifiers_tbl(i).rltd_modifier_grp_type := 'BENEFIT';
7703 l_modifiers_tbl(i).rltd_modifier_grp_no := 1;
7704 END IF;
7705 l_modifiers_tbl(i).proration_type_code := 'N';
7706 l_modifiers_tbl(i).modifier_level_code := l_discount_level;
7707 l_modifiers_tbl(i).automatic_flag := 'Y';
7708
7709 -- get advanced options
7710 OPEN c_adv_options_exist(p_modifier_line_tbl(1).list_header_id);
7711 FETCH c_adv_options_exist INTO l_adv_options_exist;
7712 CLOSE c_adv_options_exist;
7713
7714 IF l_adv_options_exist IS NULL THEN
7715 IF l_discount_level = 'LINEGROUP' THEN
7716 l_modifiers_tbl(i).pricing_phase_id := FND_PROFILE.value('OZF_PRICING_PHASE_LINEGROUP');
7717 -- IF l_modifiers_tbl(i).pricing_phase_id <> 3 THEN
7718 -- l_modifiers_tbl(i).pricing_phase_id := 3;
7719 -- END IF;
7720 ELSIF l_discount_level = 'LINE' THEN
7721 l_modifiers_tbl(i).pricing_phase_id := FND_PROFILE.value('OZF_PRICING_PHASE_LINE');
7722 -- IF l_modifiers_tbl(i).pricing_phase_id <> 2 THEN
7723 -- l_modifiers_tbl(i).pricing_phase_id := 2;
7724 -- END IF;
7725 ELSIF l_discount_level = 'ORDER' THEN
7726 l_modifiers_tbl(i).pricing_phase_id := FND_PROFILE.value('OZF_PRICING_PHASE_ORDER');
7727 -- IF l_modifiers_tbl(i).pricing_phase_id <> 4 THEN
7728 -- l_modifiers_tbl(i).pricing_phase_id := 4;
7729 -- END IF;
7730 ELSE
7731 l_modifiers_tbl(i).pricing_phase_id := FND_PROFILE.value('OZF_PRICING_PHASE_LINEGROUP');
7732 -- IF l_modifiers_tbl(i).pricing_phase_id <> 3 THEN
7733 -- l_modifiers_tbl(i).pricing_phase_id := 3;
7734 -- END IF;
7735 END IF;
7736
7737 l_modifiers_tbl(i).print_on_invoice_flag := FND_PROFILE.value('OZF_PRINT_ON_INVOICE');
7738 l_modifiers_tbl(i).incompatibility_grp_code := FND_PROFILE.value('OZF_INCOMPATIBILITY_GROUP');
7739
7740 IF l_discount_level <> 'ORDER' THEN
7741 l_modifiers_tbl(i).pricing_group_sequence := FND_PROFILE.value('OZF_PRICING_GROUP_SEQUENCE');
7742 -- IF l_modifiers_tbl(i).pricing_group_sequence <> 1 THEN
7743 -- l_modifiers_tbl(i).pricing_group_sequence := 1;
7744 -- END IF;
7745 END IF;
7746
7747 l_modifiers_tbl(i).product_precedence := FND_PROFILE.value('OZF_PRODUCT_PRECEDENCE');
7748
7749 ELSE
7750 OPEN c_adv_options(p_modifier_line_tbl(1).list_header_id);
7751 FETCH c_adv_options INTO l_modifiers_tbl(i).pricing_phase_id,l_modifiers_tbl(i).print_on_invoice_flag,l_modifiers_tbl(i).incompatibility_grp_code,l_modifiers_tbl(i).pricing_group_sequence,l_modifiers_tbl(i).product_precedence;
7752 CLOSE c_adv_options;
7753 END IF;
7754 -- end advanced options
7755
7756 END IF;
7757
7758 l_modifiers_tbl(i).start_date_active := p_modifier_line_tbl(i).start_date_active;
7759 l_modifiers_tbl(i).end_date_active := p_modifier_line_tbl(i).end_date_active;
7760 l_modifiers_tbl(i).arithmetic_operator := p_modifier_line_tbl(i).arithmetic_operator;
7761 l_modifiers_tbl(i).operand := p_modifier_line_tbl(i).operand;
7762 l_modifiers_tbl(i).benefit_limit := p_modifier_line_tbl(i).benefit_limit;
7763 l_modifiers_tbl(i).benefit_price_list_line_id := p_modifier_line_tbl(i).benefit_price_list_line_id;
7764 l_modifiers_tbl(i).benefit_qty := p_modifier_line_tbl(i).benefit_qty;
7765 l_modifiers_tbl(i).benefit_uom_code := p_modifier_line_tbl(i).benefit_uom_code;
7766 l_pricing_attr_tbl(i).pricing_attribute_id := p_modifier_line_tbl(i).pricing_attribute_id;
7767 l_pricing_attr_tbl(i).product_attribute_context := 'ITEM';
7768 l_pricing_attr_tbl(i).product_attribute := p_modifier_line_tbl(i).product_attr;
7769 l_pricing_attr_tbl(i).product_attr_value := p_modifier_line_tbl(i).product_attr_val;
7770
7771 /*IF p_modifier_line_tbl(i).list_line_type_code <> 'DIS' THEN
7772 IF p_modifier_line_tbl(i).product_uom_code is not null and p_modifier_line_tbl(i).product_uom_code <> FND_API.g_miss_char THEN
7773 l_pricing_attr_tbl(i).product_uom_code := p_modifier_line_tbl(i).product_uom_code;
7774 l_pricing_attr_tbl(i).pricing_attribute_context := 'VOLUME';
7775 l_pricing_attr_tbl(i).pricing_attribute := p_modifier_line_tbl(i).pricing_attr;
7776 l_pricing_attr_tbl(i).pricing_attr_value_from := p_modifier_line_tbl(i).pricing_attr_value_from;
7777 IF p_modifier_line_tbl(i).operation <> 'CREATE' THEN
7778 l_pricing_attr_tbl(i).pricing_attr_value_to := p_modifier_line_tbl(i).pricing_attr_value_to;
7779 END IF;
7780 l_pricing_attr_tbl(i).comparison_operator_code := 'BETWEEN';
7781 END IF;
7782 END IF;*/
7783
7784 -- fix for bug 7321732.
7785 IF p_modifier_line_tbl(i).list_line_type_code <> 'DIS' THEN
7786 IF p_modifier_line_tbl(i).pricing_attr = 'PRICING_ATTRIBUTE10' THEN--if volume_type is qty
7787 IF p_modifier_line_tbl(i).product_uom_code is not null and p_modifier_line_tbl(i).product_uom_code <> FND_API.g_miss_char THEN
7788 l_pricing_attr_tbl(i).product_uom_code := p_modifier_line_tbl(i).product_uom_code;
7789 l_pricing_attr_tbl(i).pricing_attribute_context := 'VOLUME';
7790 l_pricing_attr_tbl(i).pricing_attribute := p_modifier_line_tbl(i).pricing_attr;
7791 l_pricing_attr_tbl(i).pricing_attr_value_from := p_modifier_line_tbl(i).pricing_attr_value_from;
7792 IF p_modifier_line_tbl(i).operation <> 'CREATE' THEN
7793 l_pricing_attr_tbl(i).pricing_attr_value_to := p_modifier_line_tbl(i).pricing_attr_value_to;
7794 END IF;
7795 l_pricing_attr_tbl(i).comparison_operator_code := 'BETWEEN';
7796
7797 ELSIF (p_modifier_line_tbl(i).product_uom_code is null
7798 OR p_modifier_line_tbl(i).product_uom_code = FND_API.g_miss_char
7799 ) AND
7800 ((p_modifier_line_tbl(i).pricing_attr_value_from is not null
7801 AND p_modifier_line_tbl(i).pricing_attr_value_from <> FND_API.g_miss_num) OR
7802 (p_modifier_line_tbl(i).pricing_attr is not null
7803 AND p_modifier_line_tbl(i).pricing_attr <> FND_API.g_miss_char))
7804 THEN
7805 FND_MESSAGE.SET_NAME('OZF','OZF_UOM_QTY_REQD');
7806
7807 Fnd_Msg_Pub.ADD;
7808 RAISE FND_API.G_EXC_ERROR;
7809 END IF;
7810 ELSE -- volume type is amount
7811 l_pricing_attr_tbl(i).product_uom_code := p_modifier_line_tbl(i).product_uom_code;
7812 l_pricing_attr_tbl(i).pricing_attribute_context := 'VOLUME';
7813 l_pricing_attr_tbl(i).pricing_attribute := p_modifier_line_tbl(i).pricing_attr;
7814 l_pricing_attr_tbl(i).pricing_attr_value_from := p_modifier_line_tbl(i).pricing_attr_value_from;
7815 IF p_modifier_line_tbl(i).operation <> 'CREATE' THEN
7816 l_pricing_attr_tbl(i).pricing_attr_value_to := p_modifier_line_tbl(i).pricing_attr_value_to;
7817 END IF;
7818 l_pricing_attr_tbl(i).comparison_operator_code := 'BETWEEN';
7819 END IF;
7820 END IF;
7821
7822 l_pricing_attr_tbl(i).modifiers_index := i;
7823 l_pricing_attr_tbl(i).list_line_id := p_modifier_line_tbl(i).list_line_id;
7824 l_pricing_attr_tbl(i).operation := p_modifier_line_tbl(i).operation;
7825
7826 IF p_modifier_line_tbl(i).inactive_flag = 'N' THEN
7827 IF l_start_date IS NOT NULL THEN
7828 l_modifiers_tbl(i).end_date_active := GREATEST(l_start_date, SYSDATE);
7829 ELSIF l_end_date IS NOT NULL THEN
7830 l_modifiers_tbl(i).end_date_active := LEAST(l_end_date, SYSDATE);
7831 ELSE
7832 l_modifiers_tbl(i).end_date_active := SYSDATE;
7833 END IF;
7834 --l_modifiers_tbl(i).end_date_active := least(nvl(l_end_date,sysdate-1),sysdate);
7835 ELSE
7836 l_modifiers_tbl(i).end_date_active := p_modifier_line_tbl(i).end_date_active;
7837 END IF;
7838
7839 END IF;
7840
7841 -- rssharma added flex field on 15-Apr-2003
7842 l_modifiers_tbl(i).attribute1 := p_modifier_line_tbl(i).attribute1;
7843 l_modifiers_tbl(i).attribute2 := p_modifier_line_tbl(i).attribute2;
7844 l_modifiers_tbl(i).attribute3 := p_modifier_line_tbl(i).attribute3;
7845 l_modifiers_tbl(i).attribute4 := p_modifier_line_tbl(i).attribute4;
7846 l_modifiers_tbl(i).attribute5 := p_modifier_line_tbl(i).attribute5;
7847 l_modifiers_tbl(i).attribute6 := p_modifier_line_tbl(i).attribute6;
7848 l_modifiers_tbl(i).attribute7 := p_modifier_line_tbl(i).attribute7;
7849 l_modifiers_tbl(i).attribute8 := p_modifier_line_tbl(i).attribute8;
7850 l_modifiers_tbl(i).attribute9 := p_modifier_line_tbl(i).attribute9;
7851 l_modifiers_tbl(i).attribute10 := p_modifier_line_tbl(i).attribute10;
7852 l_modifiers_tbl(i).attribute11 := p_modifier_line_tbl(i).attribute11;
7853 l_modifiers_tbl(i).attribute12 := p_modifier_line_tbl(i).attribute12;
7854 l_modifiers_tbl(i).attribute13 := p_modifier_line_tbl(i).attribute13;
7855 l_modifiers_tbl(i).attribute14 := p_modifier_line_tbl(i).attribute14;
7856 l_modifiers_tbl(i).attribute15 := p_modifier_line_tbl(i).attribute15;
7857 l_modifiers_tbl(i).context := p_modifier_line_tbl(i).context;
7858 -- end change on 15-Apr-2003
7859
7860 END LOOP;
7861
7862 QP_Modifiers_GRP.process_modifiers(
7863 p_api_version_number => 1.0,
7864 p_init_msg_list => FND_API.G_FALSE,
7865 p_return_values => FND_API.G_FALSE,
7866 p_commit => FND_API.G_FALSE,
7867 x_return_status => x_return_status,
7868 x_msg_count => x_msg_count,
7869 x_msg_data => x_msg_data,
7870 p_control_rec => l_control_rec,
7871 p_modifiers_tbl => l_modifiers_tbl,
7872 p_pricing_attr_tbl => l_pricing_attr_tbl,
7873 x_modifier_list_rec => v_modifier_list_rec,
7874 x_modifier_list_val_rec => v_modifier_list_val_rec,
7875 x_modifiers_tbl => v_modifiers_tbl,
7876 x_modifiers_val_tbl => v_modifiers_val_tbl,
7877 x_qualifiers_tbl => v_qualifiers_tbl,
7878 x_qualifiers_val_tbl => v_qualifiers_val_tbl,
7879 x_pricing_attr_tbl => v_pricing_attr_tbl,
7880 x_pricing_attr_val_tbl => v_pricing_attr_val_tbl
7881 );
7882 x_modifiers_tbl := v_modifiers_tbl;
7883 IF x_return_status <> Fnd_Api.g_ret_sts_success THEN
7884 IF v_modifiers_tbl.COUNT > 0 THEN
7885 FOR k IN v_modifiers_tbl.first..v_modifiers_tbl.last LOOP
7886 IF v_modifiers_tbl.EXISTS(k) THEN
7887 IF v_modifiers_tbl(k).return_status <> Fnd_Api.g_ret_sts_success THEN
7888 x_error_location := k;
7889 EXIT;
7890 END IF;
7891 END IF;
7892 END LOOP;
7893 END IF;
7894 END IF;
7895
7896 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
7897 add_message(x_msg_count);
7898 RAISE Fnd_Api.g_exc_error;
7899 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
7900 add_message(x_msg_count);
7901 RAISE Fnd_Api.g_exc_unexpected_error;
7902 END IF;
7903
7904 FOR limit_index in p_modifier_line_tbl.first..p_modifier_line_tbl.last LOOP
7905
7906 IF p_modifier_line_tbl.exists(limit_index) THEN
7907
7908 IF p_modifier_line_tbl(limit_index).operation = 'CREATE' THEN
7909 p_list_line_id := v_modifiers_tbl(limit_index).list_line_id;
7910 ELSE
7911 p_list_line_id := p_modifier_line_tbl(limit_index).list_line_id;
7912 END IF;
7913
7914 IF p_modifier_line_tbl(limit_index).list_line_type_code = 'DIS' THEN
7915 process_limits
7916 (
7917 x_return_status => x_return_status
7918 ,x_msg_count => x_msg_count
7919 ,x_msg_data => x_msg_data
7920 ,p_limit_type =>'MAX_QTY_PER_ORDER'
7921 ,p_limit_amount => p_modifier_line_tbl(limit_index).max_qty_per_order
7922 ,p_list_line_id => p_list_line_id
7923 ,p_list_header_id => p_modifier_line_tbl(limit_index).list_header_id
7924 ,p_limit_id => p_modifier_line_tbl(limit_index).max_qty_per_order_id
7925 );
7926
7927 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
7928 x_error_location := limit_index;
7929 RAISE Fnd_Api.g_exc_error;
7930 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
7931 x_error_location := limit_index;
7932 RAISE Fnd_Api.g_exc_unexpected_error;
7933 END IF;
7934
7935
7936 process_limits
7937 (
7938 x_return_status => x_return_status
7939 ,x_msg_count => x_msg_count
7940 ,x_msg_data => x_msg_data
7941 ,p_limit_type =>'MAX_QTY_PER_CUSTOMER'
7942 ,p_limit_amount => p_modifier_line_tbl(limit_index).max_qty_per_customer
7943 ,p_list_line_id => p_list_line_id
7944 ,p_list_header_id => p_modifier_line_tbl(limit_index).list_header_id
7945 ,p_limit_id => p_modifier_line_tbl(limit_index).max_qty_per_customer_id
7946 );
7947
7948 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
7949 x_error_location := limit_index;
7950 RAISE Fnd_Api.g_exc_error;
7951 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
7952 x_error_location := limit_index;
7953 RAISE Fnd_Api.g_exc_unexpected_error;
7954 END IF;
7955
7956 process_limits
7957 (
7958 x_return_status => x_return_status
7959 ,x_msg_count => x_msg_count
7960 ,x_msg_data => x_msg_data
7961 ,p_limit_type =>'MAX_QTY_PER_RULE'
7962 ,p_limit_amount => p_modifier_line_tbl(limit_index).max_qty_per_rule
7963 ,p_list_line_id => p_list_line_id
7964 ,p_list_header_id => p_modifier_line_tbl(limit_index).list_header_id
7965 ,p_limit_id => p_modifier_line_tbl(limit_index).max_qty_per_rule_id
7966 );
7967
7968 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
7969 x_error_location := limit_index;
7970 RAISE Fnd_Api.g_exc_error;
7971 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
7972 x_error_location := limit_index;
7973 RAISE Fnd_Api.g_exc_unexpected_error;
7974 END IF;
7975
7976
7977 END IF;
7978
7979
7980 END IF;
7981 END LOOP;
7982
7983 Fnd_Msg_Pub.Count_AND_Get
7984 ( p_count => x_msg_count,
7985 p_data => x_msg_data,
7986 p_encoded => Fnd_Api.G_FALSE
7987 );
7988
7989 EXCEPTION
7990 WHEN Fnd_Api.G_EXC_ERROR THEN
7991 x_return_status := Fnd_Api.g_ret_sts_error ;
7992 Fnd_Msg_Pub.Count_AND_Get
7993 ( p_count => x_msg_count,
7994 p_data => x_msg_data,
7995 p_encoded => Fnd_Api.G_FALSE
7996 );
7997 WHEN Fnd_Api.G_EXC_UNEXPECTED_ERROR THEN
7998 x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
7999 Fnd_Msg_Pub.Count_AND_Get
8000 ( p_count => x_msg_count,
8001 p_data => x_msg_data,
8002 p_encoded => Fnd_Api.G_FALSE
8003 );
8004 WHEN OTHERS THEN
8005 x_return_status := Fnd_Api.g_ret_sts_unexp_erroR ;
8006 IF Fnd_Msg_Pub.Check_Msg_Level ( Fnd_Msg_Pub.G_MSG_LVL_UNEXP_ERROR )
8007 THEN
8008 Fnd_Msg_Pub.Add_Exc_Msg( G_PKG_NAME,l_api_name);
8009 END IF;
8010 Fnd_Msg_Pub.Count_AND_Get
8011 ( p_count => x_msg_count,
8012 p_data => x_msg_data,
8013 p_encoded => Fnd_Api.G_FALSE
8014 );
8015
8016 END;
8017
8018 PROCEDURE process_trade_deal
8019 (
8020 x_return_status OUT NOCOPY VARCHAR2
8021 ,x_msg_count OUT NOCOPY NUMBER
8022 ,x_msg_data OUT NOCOPY VARCHAR2
8023 ,p_modifier_line_tbl IN MODIFIER_LINE_TBL_TYPE
8024 ,p_list_header_id IN NUMBER
8025 , x_modifiers_tbl OUT NOCOPY qp_modifiers_pub.modifiers_tbl_type
8026 ,x_error_location OUT NOCOPY NUMBER
8027 ) IS
8028
8029 l_api_version CONSTANT NUMBER := 1.0;
8030 l_api_name CONSTANT VARCHAR2(30) := 'process_trade_deal';
8031 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
8032
8033 l_modifier_line_tbl MODIFIER_LINE_TBL_TYPE := p_modifier_line_tbl;
8034 v_off_modifiers_tbl qp_modifiers_pub.modifiers_tbl_type;
8035 v_accr_modifiers_tbl qp_modifiers_pub.modifiers_tbl_type;
8036 temp_modifier_line_tbl MODIFIER_LINE_TBL_TYPE := p_modifier_line_tbl;
8037
8038 l_modifier_line_all_off_tbl MODIFIER_LINE_TBL_TYPE; -- line has both off_invoice and accrual values, off_invoice
8039 l_modifier_line_all_acc_tbl MODIFIER_LINE_TBL_TYPE; -- line has both off_invoice and accrual values, accural
8040 l_modifier_line_off_tbl MODIFIER_LINE_TBL_TYPE; -- line has only off_invoice value
8041 l_modifier_line_acc_tbl MODIFIER_LINE_TBL_TYPE; -- line has only accrual value
8042 v_modifier_all_off_tbl qp_modifiers_pub.modifiers_tbl_type;
8043 v_modifier_all_acc_tbl qp_modifiers_pub.modifiers_tbl_type;
8044 v_modifier_off_tbl qp_modifiers_pub.modifiers_tbl_type;
8045 v_modifier_acc_tbl qp_modifiers_pub.modifiers_tbl_type;
8046 v_modifier_ret_tbl qp_modifiers_pub.modifiers_tbl_type;
8047 l_related_lines_rec ozf_related_lines_pvt.related_lines_rec_type;
8048 l_related_deal_lines_id NUMBER;
8049 l_all_index NUMBER := 0;
8050 l_off_index NUMBER := 0;
8051 l_acc_index NUMBER := 0;
8052 l_index NUMBER := 0;
8053 l_modifier_id NUMBER;
8054 l_related_modifier_id NUMBER;
8055
8056 CURSOR get_accr_pricing_attribute_id (p_list_line_id NUMBER) IS
8057 SELECT pricing_attribute_id
8058 FROM qp_pricing_attributes
8059 WHERE list_line_id = p_list_line_id
8060 AND excluder_flag = 'N';
8061
8062 l_object_version_number NUMBER;
8063
8064 l_accr_qty_limit_id NUMBER;
8065 l_accr_amount_limit_id NUMBER;
8066
8067 CURSOR cur_get_accrual_limit_id(p_limit_number NUMBER,p_list_line_id NUMBER) IS
8068 SELECT limit_id
8069 FROM qp_limits
8070 WHERE limit_number = p_limit_number
8071 AND list_line_id = p_list_line_id;
8072
8073 CURSOR c_modifier_id(l_id NUMBER) IS
8074 SELECT modifier_id, related_modifier_id
8075 FROM ozf_related_deal_lines
8076 WHERE related_deal_lines_id = l_id;
8077
8078 CURSOR c_creation(l_id NUMBER) IS
8079 SELECT creation_date, created_by
8080 FROM ozf_related_deal_lines
8081 WHERE related_deal_lines_id = l_id;
8082
8083 BEGIN
8084 x_return_status := Fnd_Api.g_ret_sts_success;
8085 IF p_modifier_line_tbl.count > 0 THEN
8086 FOR i IN p_modifier_line_tbl.first..p_modifier_line_tbl.last LOOP
8087 IF p_modifier_line_tbl.exists(i) THEN
8088 IF p_modifier_line_tbl(i).max_amount_per_rule IS NOT NULL
8089 AND p_modifier_line_tbl(i).max_amount_per_rule <> FND_API.G_MISS_NUM
8090 AND p_modifier_line_tbl(i).max_amount_per_rule <= 0 THEN
8091 IF Fnd_Msg_Pub.check_msg_level(Fnd_Msg_Pub.g_msg_lvl_error) THEN
8092 Fnd_Message.SET_NAME('OZF','OZF_TRD_DEAL_NEG_AMT');
8093 Fnd_Msg_Pub.ADD;
8094 END IF;
8095 RAISE Fnd_Api.g_exc_error;
8096 END IF;
8097
8098 IF p_modifier_line_tbl(i).max_qty_per_rule IS NOT NULL
8099 AND p_modifier_line_tbl(i).max_qty_per_rule <> FND_API.G_MISS_NUM
8100 AND p_modifier_line_tbl(i).max_qty_per_rule <= 0 THEN
8101 IF Fnd_Msg_Pub.check_msg_level(Fnd_Msg_Pub.g_msg_lvl_error) THEN
8102 Fnd_Message.SET_NAME('OZF','OZF_TRD_DEAL_NEG_QTY');
8103 Fnd_Msg_Pub.ADD;
8104 END IF;
8105 RAISE Fnd_Api.g_exc_error;
8106 END IF;
8107 END IF;
8108 END LOOP;
8109
8110 l_modifier_line_tbl.delete;
8111 FOR i IN p_modifier_line_tbl.first..p_modifier_line_tbl.last LOOP
8112 IF p_modifier_line_tbl.exists(i) THEN
8113 IF p_modifier_line_tbl(i).operation <> FND_API.g_miss_char THEN
8114
8115 IF ((p_modifier_line_tbl(i).operand IS NULL OR p_modifier_line_tbl(i).operand = FND_API.g_miss_num)
8116 OR (p_modifier_line_tbl(i).arithmetic_operator IS NULL OR p_modifier_line_tbl(i).arithmetic_operator = FND_API.g_miss_char))
8117 AND ((p_modifier_line_tbl(i).qd_operand IS NULL OR p_modifier_line_tbl(i).qd_operand = FND_API.g_miss_num)
8118 OR (p_modifier_line_tbl(i).qd_arithmetic_operator IS NULL OR p_modifier_line_tbl(i).qd_arithmetic_operator = FND_API.g_miss_char)) THEN
8119 IF Fnd_Msg_Pub.check_msg_level(Fnd_Msg_Pub.g_msg_lvl_error) THEN
8120 Fnd_Message.SET_NAME('OZF','OZF_TRD_DEAL_NO_OPERAND');
8121 Fnd_Msg_Pub.ADD;
8122 END IF;
8123 RAISE Fnd_Api.g_exc_error;
8124
8125 ELSIF ((p_modifier_line_tbl(i).operand IS NOT NULL AND p_modifier_line_tbl(i).operand <> FND_API.g_miss_num)
8126 AND (p_modifier_line_tbl(i).arithmetic_operator IS NOT NULL AND p_modifier_line_tbl(i).arithmetic_operator <> FND_API.g_miss_char))
8127 AND ((p_modifier_line_tbl(i).qd_operand IS NOT NULL AND p_modifier_line_tbl(i).qd_operand <> FND_API.g_miss_num)
8128 AND (p_modifier_line_tbl(i).qd_arithmetic_operator IS NOT NULL AND p_modifier_line_tbl(i).qd_arithmetic_operator <> FND_API.g_miss_char)) THEN
8129 l_all_index := l_all_index + 1;
8130 l_modifier_line_all_off_tbl(l_all_index) := p_modifier_line_tbl(i);
8131 l_modifier_line_all_acc_tbl(l_all_index) := p_modifier_line_tbl(i);
8132
8133 l_modifier_line_all_acc_tbl(l_all_index).list_line_id := p_modifier_line_tbl(i).qd_list_line_id;
8134 l_modifier_line_all_acc_tbl(l_all_index).operand := p_modifier_line_tbl(i).qd_operand;
8135 l_modifier_line_all_acc_tbl(l_all_index).arithmetic_operator := p_modifier_line_tbl(i).qd_arithmetic_operator;
8136
8137 IF p_modifier_line_tbl(i).list_line_id IS NULL OR p_modifier_line_tbl(i).list_line_id = FND_API.g_miss_num THEN
8138 l_modifier_line_all_off_tbl(l_all_index).operation := 'CREATE';
8139 l_modifier_line_all_off_tbl(l_all_index).list_line_id := FND_API.g_miss_num;
8140 l_modifier_line_all_off_tbl(l_all_index).pricing_attribute_id := FND_API.g_miss_num;
8141 END IF;
8142
8143 IF p_modifier_line_tbl(i).qd_list_line_id IS NULL OR p_modifier_line_tbl(i).qd_list_line_id = FND_API.g_miss_num THEN
8144 l_modifier_line_all_acc_tbl(l_all_index).operation := 'CREATE';
8145 l_modifier_line_all_acc_tbl(l_all_index).list_line_id := FND_API.g_miss_num;
8146 l_modifier_line_all_acc_tbl(l_all_index).pricing_attribute_id := FND_API.g_miss_num;
8147 END IF;
8148
8149 -- l_modifier_line_tbl(i) := p_modifier_line_tbl(i);
8150 l_index := l_index + 1;
8151
8152 IF l_modifier_line_all_acc_tbl(l_all_index).operation = 'UPDATE' THEN
8153 OPEN get_accr_pricing_attribute_id(l_modifier_line_all_acc_tbl(l_all_index).list_line_id);
8154 FETCH get_accr_pricing_attribute_id into l_modifier_line_all_acc_tbl(l_all_index).pricing_attribute_id;
8155 CLOSE get_accr_pricing_attribute_id;
8156 END IF;
8157
8158 ELSIF ((p_modifier_line_tbl(i).operand IS NOT NULL AND p_modifier_line_tbl(i).operand <> FND_API.g_miss_num)
8159 AND (p_modifier_line_tbl(i).arithmetic_operator IS NOT NULL AND p_modifier_line_tbl(i).arithmetic_operator <> FND_API.g_miss_char))
8160 AND ((p_modifier_line_tbl(i).qd_operand IS NULL OR p_modifier_line_tbl(i).qd_operand = FND_API.g_miss_num)
8161 OR (p_modifier_line_tbl(i).qd_arithmetic_operator IS NULL OR p_modifier_line_tbl(i).qd_arithmetic_operator = FND_API.g_miss_char)) THEN
8162 -- fix for bug 7321745
8163 OPEN c_modifier_id(p_modifier_line_tbl(i).qd_related_deal_lines_id);
8164 FETCH c_modifier_id INTO l_modifier_id,l_related_modifier_id;
8165 CLOSE c_modifier_id;
8166
8167 IF l_related_modifier_id IS NOT NULL THEN
8168 IF Fnd_Msg_Pub.check_msg_level(Fnd_Msg_Pub.g_msg_lvl_error) THEN
8169 Fnd_Message.SET_NAME('OZF','OZF_TRD_DEAL_NO_ACC_OPERAND');
8170 Fnd_Msg_Pub.ADD;
8171 x_error_location := i;
8172 END IF;
8173 RAISE Fnd_Api.g_exc_error;
8174 END IF;
8175
8176 l_off_index := l_off_index + 1;
8177 l_modifier_line_off_tbl(l_off_index) := p_modifier_line_tbl(i);
8178 l_index := l_index + 1;
8179 -- l_modifier_line_tbl(l_index) := p_modifier_line_tbl(i);
8180
8181 IF p_modifier_line_tbl(i).list_line_id IS NULL OR p_modifier_line_tbl(i).list_line_id = FND_API.g_miss_num THEN
8182 l_modifier_line_off_tbl(l_off_index).operation := 'CREATE';
8183 l_modifier_line_off_tbl(l_off_index).list_line_id := FND_API.g_miss_num;
8184 l_modifier_line_off_tbl(l_off_index).pricing_attribute_id := FND_API.g_miss_num;
8185 END IF;
8186
8187 ELSIF ((p_modifier_line_tbl(i).qd_operand IS NOT NULL AND p_modifier_line_tbl(i).qd_operand <> FND_API.g_miss_num)
8188 AND (p_modifier_line_tbl(i).qd_arithmetic_operator IS NOT NULL AND p_modifier_line_tbl(i).qd_arithmetic_operator <> FND_API.g_miss_char))
8189 AND ((p_modifier_line_tbl(i).operand IS NULL OR p_modifier_line_tbl(i).operand = FND_API.g_miss_num)
8190 OR (p_modifier_line_tbl(i).arithmetic_operator IS NULL OR p_modifier_line_tbl(i).arithmetic_operator = FND_API.g_miss_char)) THEN
8191
8192 -- fix for bug 7321745
8193
8194 OPEN c_modifier_id(p_modifier_line_tbl(i).qd_related_deal_lines_id);
8195 FETCH c_modifier_id INTO l_modifier_id,l_related_modifier_id;
8196 CLOSE c_modifier_id;
8197
8198 IF l_modifier_id IS NOT NULL AND l_related_modifier_id IS NOT NULL THEN
8199 IF Fnd_Msg_Pub.check_msg_level(Fnd_Msg_Pub.g_msg_lvl_error) THEN
8200 Fnd_Message.SET_NAME('OZF','OZF_TRD_DEAL_NO_OFF_OPERAND');
8201 Fnd_Msg_Pub.ADD;
8202 x_error_location := i;
8203 END IF;
8204 RAISE Fnd_Api.g_exc_error;
8205 END IF;
8206
8207 l_acc_index := l_acc_index + 1;
8208 l_modifier_line_acc_tbl(l_acc_index) := p_modifier_line_tbl(i);
8209
8210 l_modifier_line_acc_tbl(l_acc_index).list_line_id := p_modifier_line_tbl(i).qd_list_line_id;
8211 l_modifier_line_acc_tbl(l_acc_index).operand := p_modifier_line_tbl(i).qd_operand;
8212 l_modifier_line_acc_tbl(l_acc_index).arithmetic_operator := p_modifier_line_tbl(i).qd_arithmetic_operator;
8213
8214 l_index := l_index + 1;
8215 -- l_modifier_line_tbl(l_index) := p_modifier_line_tbl(i);
8216
8217 IF p_modifier_line_tbl(i).qd_list_line_id IS NULL OR p_modifier_line_tbl(i).qd_list_line_id = FND_API.g_miss_num THEN
8218 l_modifier_line_acc_tbl(l_acc_index).operation := 'CREATE';
8219 l_modifier_line_acc_tbl(l_acc_index).list_line_id := FND_API.g_miss_num;
8220 l_modifier_line_acc_tbl(l_acc_index).pricing_attribute_id := FND_API.g_miss_num;
8221 END IF;
8222
8223 IF l_modifier_line_acc_tbl(l_acc_index).operation = 'UPDATE' THEN
8224 OPEN get_accr_pricing_attribute_id(l_modifier_line_acc_tbl(l_acc_index).list_line_id);
8225 FETCH get_accr_pricing_attribute_id into l_modifier_line_acc_tbl(l_acc_index).pricing_attribute_id;
8226 CLOSE get_accr_pricing_attribute_id;
8227 END IF;
8228 END IF;
8229
8230 END IF;
8231 END IF;
8232 --dbms_output.put_line('table count is :'||l_modifier_line_tbl.count);
8233 -- rssharma added flex field on 15-Apr-2003
8234 /* l_modifier_line_all_off_tbl(i).attribute1 := p_modifier_line_tbl(i).attribute1;
8235 l_modifier_line_all_off_tbl(i).attribute2 := p_modifier_line_tbl(i).attribute2;
8236 l_modifier_line_all_off_tbl(i).attribute3 := p_modifier_line_tbl(i).attribute3;
8237 l_modifier_line_all_off_tbl(i).attribute4 := p_modifier_line_tbl(i).attribute4;
8238 l_modifier_line_all_off_tbl(i).attribute5 := p_modifier_line_tbl(i).attribute5;
8239 l_modifier_line_all_off_tbl(i).attribute6 := p_modifier_line_tbl(i).attribute6;
8240 l_modifier_line_all_off_tbl(i).attribute7 := p_modifier_line_tbl(i).attribute7;
8241 l_modifier_line_all_off_tbl(i).attribute8 := p_modifier_line_tbl(i).attribute8;
8242 l_modifier_line_all_off_tbl(i).attribute9 := p_modifier_line_tbl(i).attribute9;
8243 l_modifier_line_all_off_tbl(i).attribute10 := p_modifier_line_tbl(i).attribute10;
8244 l_modifier_line_all_off_tbl(i).attribute11 := p_modifier_line_tbl(i).attribute11;
8245 l_modifier_line_all_off_tbl(i).attribute12 := p_modifier_line_tbl(i).attribute12;
8246 l_modifier_line_all_off_tbl(i).attribute13 := p_modifier_line_tbl(i).attribute13;
8247 l_modifier_line_all_off_tbl(i).attribute14 := p_modifier_line_tbl(i).attribute14;
8248 l_modifier_line_all_off_tbl(i).attribute15 := p_modifier_line_tbl(i).attribute15;
8249 l_modifier_line_all_off_tbl(i).context := p_modifier_line_tbl(i).context;
8250
8251 l_modifier_line_acc_tbl(i).attribute1 := p_modifier_line_tbl(i).attribute1;
8252 l_modifier_line_acc_tbl(i).attribute2 := p_modifier_line_tbl(i).attribute2;
8253 l_modifier_line_acc_tbl(i).attribute3 := p_modifier_line_tbl(i).attribute3;
8254 l_modifier_line_acc_tbl(i).attribute4 := p_modifier_line_tbl(i).attribute4;
8255 l_modifier_line_acc_tbl(i).attribute5 := p_modifier_line_tbl(i).attribute5;
8256 l_modifier_line_acc_tbl(i).attribute6 := p_modifier_line_tbl(i).attribute6;
8257 l_modifier_line_acc_tbl(i).attribute7 := p_modifier_line_tbl(i).attribute7;
8258 l_modifier_line_acc_tbl(i).attribute8 := p_modifier_line_tbl(i).attribute8;
8259 l_modifier_line_acc_tbl(i).attribute9 := p_modifier_line_tbl(i).attribute9;
8260 l_modifier_line_acc_tbl(i).attribute10 := p_modifier_line_tbl(i).attribute10;
8261 l_modifier_line_acc_tbl(i).attribute11 := p_modifier_line_tbl(i).attribute11;
8262 l_modifier_line_acc_tbl(i).attribute12 := p_modifier_line_tbl(i).attribute12;
8263 l_modifier_line_acc_tbl(i).attribute13 := p_modifier_line_tbl(i).attribute13;
8264 l_modifier_line_acc_tbl(i).attribute14 := p_modifier_line_tbl(i).attribute14;
8265 l_modifier_line_acc_tbl(i).attribute15 := p_modifier_line_tbl(i).attribute15;
8266 l_modifier_line_acc_tbl(i).context := p_modifier_line_tbl(i).context;
8267 */
8268 -- end change on 15-Apr-2003
8269
8270 END LOOP;
8271
8272 IF l_modifier_line_all_off_tbl.count > 0 THEN
8273 process_regular_discounts
8274 (
8275 x_return_status => x_return_status,
8276 x_msg_count => x_msg_count,
8277 x_msg_data => x_msg_data,
8278 p_parent_offer_type => 'DEAL',
8279 p_offer_type => 'OFF_INVOICE',
8280 p_modifier_line_tbl => l_modifier_line_all_off_tbl,
8281 x_modifiers_tbl => v_modifier_all_off_tbl,
8282 x_error_location => x_error_location
8283 );
8284
8285 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
8286 RAISE Fnd_Api.g_exc_error;
8287 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
8288 RAISE Fnd_Api.g_exc_unexpected_error;
8289 END IF;
8290 END IF;
8291 IF l_modifier_line_off_tbl.count > 0 THEN
8292 process_regular_discounts
8293 (
8294 x_return_status => x_return_status,
8295 x_msg_count => x_msg_count,
8296 x_msg_data => x_msg_data,
8297 p_parent_offer_type => 'DEAL',
8298 p_offer_type => 'OFF_INVOICE',
8299 p_modifier_line_tbl => l_modifier_line_off_tbl,
8300 x_modifiers_tbl => v_modifier_off_tbl,
8301 x_error_location => x_error_location
8302 );
8303
8304 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
8305 RAISE Fnd_Api.g_exc_error;
8306 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
8307 RAISE Fnd_Api.g_exc_unexpected_error;
8308 END IF;
8309
8310 END IF;
8311
8312 IF l_modifier_line_all_acc_tbl.count > 0 THEN
8313 process_regular_discounts
8314 (
8315 x_return_status => x_return_status,
8316 x_msg_count => x_msg_count,
8317 x_msg_data => x_msg_data,
8318 p_parent_offer_type => 'DEAL',
8319 p_offer_type => 'ACCRUAL',
8320 p_modifier_line_tbl => l_modifier_line_all_acc_tbl,
8321 x_modifiers_tbl => v_modifier_all_acc_tbl,
8322 x_error_location => x_error_location
8323 );
8324
8325 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
8326 RAISE Fnd_Api.g_exc_error;
8327 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
8328 RAISE Fnd_Api.g_exc_unexpected_error;
8329 END IF;
8330 END IF;
8331
8332 IF l_modifier_line_acc_tbl.count > 0 THEN
8333 process_regular_discounts
8334 (
8335 x_return_status => x_return_status,
8336 x_msg_count => x_msg_count,
8337 x_msg_data => x_msg_data,
8338 p_parent_offer_type => 'DEAL',
8339 p_offer_type => 'ACCRUAL',
8340 p_modifier_line_tbl => l_modifier_line_acc_tbl,
8341 x_modifiers_tbl => v_modifier_acc_tbl,
8342 x_error_location => x_error_location
8343 );
8344
8345 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
8346 RAISE Fnd_Api.g_exc_error;
8347 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
8348 RAISE Fnd_Api.g_exc_unexpected_error;
8349 END IF;
8350 END IF;
8351
8352 /*
8353 v_modifier_all_off_tbl
8354 v_modifier_off_tbl
8355 v_modifier_all_acc_tbl
8356 v_modifier_acc_tbl
8357 */
8358 v_modifier_ret_tbl.delete;
8359 IF nvl(v_modifier_all_off_tbl.count,0) > 0 THEN
8360 FOR i in v_modifier_all_off_tbl.first .. v_modifier_all_off_tbl.last LOOP
8361 v_modifier_ret_tbl(nvl(v_modifier_ret_tbl.count,0)+1) := v_modifier_all_off_tbl(i);
8362 END LOOP;
8363 END IF;
8364 IF nvl(v_modifier_off_tbl.count,0) > 0 THEN
8365 FOR i in v_modifier_off_tbl.first .. v_modifier_off_tbl.last LOOP
8366 v_modifier_ret_tbl(nvl(v_modifier_ret_tbl.count,0)+1) := v_modifier_off_tbl(i);
8367 END LOOP;
8368 END IF;
8369 IF nvl(v_modifier_all_acc_tbl.count,0) > 0 THEN
8370 FOR i in v_modifier_all_acc_tbl.first .. v_modifier_all_acc_tbl.last LOOP
8371 v_modifier_ret_tbl(nvl(v_modifier_ret_tbl.count,0)+1) := v_modifier_all_acc_tbl(i);
8372 END LOOP;
8373 END IF;
8374 IF nvl(v_modifier_acc_tbl.count,0) > 0 THEN
8375 FOR i in v_modifier_acc_tbl.first .. v_modifier_acc_tbl.last LOOP
8376 v_modifier_ret_tbl(nvl(v_modifier_ret_tbl.count,0)+1) := v_modifier_acc_tbl(i);
8377 END LOOP;
8378 END IF;
8379
8380 l_all_index := 0;
8381 l_off_index := 0;
8382 l_acc_index := 0;
8383 /*
8384 Fixed issues in updating Trade Deal Discount lines
8385 */
8386 FOR i IN p_modifier_line_tbl.first..p_modifier_line_tbl.last LOOP
8387 IF p_modifier_line_tbl.exists(i) THEN
8388 l_modifier_line_tbl(i) := p_modifier_line_tbl(i);
8389 -- --dbms_output.put_line('i:'||i||' : Operation :'||p_modifier_line_tbl(i).operation);
8390 IF ((p_modifier_line_tbl(i).operand IS NOT NULL AND p_modifier_line_tbl(i).operand <> FND_API.g_miss_num)
8391 AND (p_modifier_line_tbl(i).arithmetic_operator IS NOT NULL AND p_modifier_line_tbl(i).arithmetic_operator <> FND_API.g_miss_char))
8392 AND ((p_modifier_line_tbl(i).qd_operand IS NOT NULL AND p_modifier_line_tbl(i).qd_operand <> FND_API.g_miss_num)
8393 AND (p_modifier_line_tbl(i).qd_arithmetic_operator IS NOT NULL AND p_modifier_line_tbl(i).qd_arithmetic_operator <> FND_API.g_miss_char)) THEN
8394 l_all_index := l_all_index + 1;
8395 l_modifier_line_tbl(i).list_line_id := v_modifier_all_off_tbl(l_all_index).list_line_id;
8396 l_modifier_line_tbl(i).qd_list_line_id := v_modifier_all_acc_tbl(l_all_index).list_line_id;
8397 -- --dbms_output.put_line('All :listlineId'||l_modifier_line_tbl(i).list_line_id || ' td id : '||l_modifier_line_tbl(i).qd_list_line_id);
8398 ELSIF ((p_modifier_line_tbl(i).operand IS NOT NULL AND p_modifier_line_tbl(i).operand <> FND_API.g_miss_num)
8399 AND (p_modifier_line_tbl(i).arithmetic_operator IS NOT NULL AND p_modifier_line_tbl(i).arithmetic_operator <> FND_API.g_miss_char))
8400 AND ((p_modifier_line_tbl(i).qd_operand IS NULL OR p_modifier_line_tbl(i).qd_operand = FND_API.g_miss_num)
8401 OR (p_modifier_line_tbl(i).qd_arithmetic_operator IS NULL OR p_modifier_line_tbl(i).qd_arithmetic_operator = FND_API.g_miss_char)) THEN
8402 l_off_index := l_off_index + 1;
8403 l_modifier_line_tbl(i).list_line_id := v_modifier_off_tbl(l_off_index).list_line_id;
8404 l_modifier_line_tbl(i).qd_list_line_id := null;
8405 -- --dbms_output.put_line('Off :listlineId'||l_modifier_line_tbl(i).list_line_id || ' td id : '||l_modifier_line_tbl(i).qd_list_line_id);
8406 ELSIF ((p_modifier_line_tbl(i).qd_operand IS NOT NULL AND p_modifier_line_tbl(i).qd_operand <> FND_API.g_miss_num)
8407 AND (p_modifier_line_tbl(i).qd_arithmetic_operator IS NOT NULL AND p_modifier_line_tbl(i).qd_arithmetic_operator <> FND_API.g_miss_char))
8408 AND ((p_modifier_line_tbl(i).operand IS NULL OR p_modifier_line_tbl(i).operand = FND_API.g_miss_num)
8409 OR (p_modifier_line_tbl(i).arithmetic_operator IS NULL OR p_modifier_line_tbl(i).arithmetic_operator = FND_API.g_miss_char)) THEN
8410 l_acc_index := l_acc_index + 1;
8411 l_modifier_line_tbl(i).qd_list_line_id := v_modifier_acc_tbl(l_acc_index).list_line_id;
8412 l_modifier_line_tbl(i).list_line_id := null;
8413 -- --dbms_output.put_line('Acc :listlineId'||l_modifier_line_tbl(i).list_line_id || ' td id : '||l_modifier_line_tbl(i).qd_list_line_id);
8414 END IF;
8415 END IF;
8416 END LOOP;
8417 -- Call Related Deal Lines and establish the relation ship.
8418 -- and push estimated_max if estimated is not equal to max.
8419 FOR i IN l_modifier_line_tbl.first..l_modifier_line_tbl.last LOOP
8420 IF l_modifier_line_tbl.exists(i) THEN
8421 IF l_modifier_line_tbl(i).operation <> FND_API.g_miss_char THEN
8422
8423 IF (l_modifier_line_tbl(i).max_qty_per_rule IS NULL OR l_modifier_line_tbl(i).max_qty_per_rule = FND_API.G_MISS_NUM)
8424 AND l_modifier_line_tbl(i).qd_estimated_qty_is_max = 'Y' THEN
8425 IF Fnd_Msg_Pub.check_msg_level(Fnd_Msg_Pub.g_msg_lvl_error) THEN
8426 Fnd_Message.SET_NAME('OZF','OZF_TRD_DEAL_NO_QTY');
8427 Fnd_Msg_Pub.ADD;
8428 END IF;
8429 RAISE Fnd_Api.g_exc_error;
8430 END IF;
8431
8432 IF (l_modifier_line_tbl(i).max_amount_per_rule IS NULL OR l_modifier_line_tbl(i).max_amount_per_rule = FND_API.G_MISS_NUM)
8433 AND l_modifier_line_tbl(i).qd_estimated_amount_is_max = 'Y' THEN
8434 IF Fnd_Msg_Pub.check_msg_level(Fnd_Msg_Pub.g_msg_lvl_error) THEN
8435 Fnd_Message.SET_NAME('OZF', 'OZF_TRD_DEAL_NO_AMT');
8436 Fnd_Msg_Pub.ADD;
8437 END IF;
8438 RAISE Fnd_Api.g_exc_error;
8439 END IF;
8440
8441 l_related_lines_rec := NULL;
8442 l_related_lines_rec.qp_list_header_id := l_modifier_line_tbl(i).list_header_id;
8443
8444 IF l_modifier_line_tbl(i).operation = 'CREATE' THEN
8445 IF l_modifier_line_tbl(i).list_line_id IS NOT NULL AND l_modifier_line_tbl(i).list_line_id <> FND_API.g_miss_num THEN
8446 l_related_lines_rec.modifier_id := l_modifier_line_tbl(i).list_line_id;
8447 IF l_modifier_line_tbl(i).qd_list_line_id IS NOT NULL AND l_modifier_line_tbl(i).qd_list_line_id <> FND_API.g_miss_num THEN
8448 l_related_lines_rec.related_modifier_id := l_modifier_line_tbl(i).qd_list_line_id;
8449 END IF;
8450 ELSE
8451 l_related_lines_rec.modifier_id := l_modifier_line_tbl(i).qd_list_line_id;
8452 END IF;
8453 ELSE
8454 l_related_lines_rec.related_deal_lines_id := l_modifier_line_tbl(i).qd_related_deal_lines_id;
8455 OPEN c_modifier_id(l_related_lines_rec.related_deal_lines_id);
8456 FETCH c_modifier_id INTO l_modifier_id,l_related_modifier_id;
8457 CLOSE c_modifier_id;
8458
8459 IF l_modifier_id = l_modifier_line_tbl(i).list_line_id THEN
8460 l_related_lines_rec.modifier_id := l_modifier_line_tbl(i).list_line_id;
8461 l_related_lines_rec.related_modifier_id := l_modifier_line_tbl(i).qd_list_line_id;
8462 ELSIF l_modifier_id = l_modifier_line_tbl(i).qd_list_line_id THEN
8463 l_related_lines_rec.modifier_id := l_modifier_line_tbl(i).qd_list_line_id;
8464 l_related_lines_rec.related_modifier_id := l_modifier_line_tbl(i).list_line_id;
8465 END IF;
8466
8467 l_related_lines_rec.object_version_number := l_modifier_line_tbl(i).qd_object_version_number;
8468 END IF;
8469
8470 l_related_lines_rec.estimated_qty_is_max := l_modifier_line_tbl(i).qd_estimated_qty_is_max;
8471 l_related_lines_rec.estimated_amount_is_max := l_modifier_line_tbl(i).qd_estimated_amount_is_max;
8472 l_related_lines_rec.estimated_qty := l_modifier_line_tbl(i).max_qty_per_rule;
8473 l_related_lines_rec.estimated_amount := l_modifier_line_tbl(i).max_amount_per_rule;
8474 l_related_lines_rec.estimate_qty_uom := l_modifier_line_tbl(i).estimate_qty_uom;
8475
8476 IF l_modifier_line_tbl(i).operation = 'CREATE' THEN
8477 OZF_Related_Lines_PVT.Create_related_lines
8478 (
8479 p_api_version_number => 1.0
8480 ,x_return_status => x_return_Status
8481 ,x_msg_count => x_msg_count
8482 ,x_msg_data => x_msg_data
8483 ,p_related_lines_rec => l_related_lines_rec
8484 ,x_related_deal_lines_id => l_related_deal_lines_id
8485 );
8486
8487 ELSIF l_modifier_line_tbl(i).operation = 'UPDATE' THEN
8488 OPEN c_creation(l_related_lines_rec.related_deal_lines_id);
8489 FETCH c_creation INTO l_related_lines_rec.creation_date,l_related_lines_rec.created_by;
8490 CLOSE c_creation;
8491 OZF_Related_Lines_PVT.update_related_lines
8492 (
8493 p_api_version_number => 1.0
8494 ,x_return_status => x_return_Status
8495 ,x_msg_count => x_msg_count
8496 ,x_msg_data => x_msg_data
8497 ,p_related_lines_rec => l_related_lines_rec
8498 ,x_object_version_number => l_object_version_number
8499 );
8500 END IF;
8501
8502 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
8503 RAISE Fnd_Api.g_exc_error;
8504 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
8505 RAISE Fnd_Api.g_exc_unexpected_error;
8506 END IF;
8507
8508 END IF;
8509 END IF;
8510 END LOOP;
8511
8512 END IF;
8513
8514 -- process limits
8515 FOR limit_index IN l_modifier_line_tbl.first..l_modifier_line_tbl.last LOOP
8516 IF l_modifier_line_tbl.exists(limit_index) THEN
8517 IF l_modifier_line_tbl(limit_index).operation <> FND_API.g_miss_char THEN
8518 IF l_modifier_line_tbl(limit_index).qd_estimated_qty_is_max = 'Y' THEN
8519 IF l_modifier_line_tbl(limit_index).list_line_id IS NOT NULL
8520 AND l_modifier_line_tbl(limit_index).list_line_id <> FND_API.G_MISS_NUM THEN
8521 process_limits
8522 (
8523 x_return_status => x_return_status
8524 ,x_msg_count => x_msg_count
8525 ,x_msg_data => x_msg_data
8526 ,p_limit_type =>'MAX_QTY_PER_RULE'
8527 ,p_limit_amount => l_modifier_line_tbl(limit_index).max_qty_per_rule
8528 ,p_list_line_id => l_modifier_line_tbl(limit_index).list_line_id
8529 ,p_list_header_id => l_modifier_line_tbl(limit_index).list_header_id
8530 ,p_limit_id => l_modifier_line_tbl(limit_index).max_qty_per_rule_id
8531 );
8532
8533 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
8534 x_error_location := limit_index;
8535 RAISE Fnd_Api.g_exc_error;
8536 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
8537 x_error_location := limit_index;
8538 RAISE Fnd_Api.g_exc_unexpected_error;
8539 END IF;
8540 END IF;
8541
8542 IF l_modifier_line_tbl(limit_index).qd_list_line_id IS NOT NULL
8543 AND l_modifier_line_tbl(limit_index).qd_list_line_id <> FND_API.G_MISS_NUM THEN
8544
8545 OPEN cur_get_accrual_limit_id(3,l_modifier_line_tbl(limit_index).qd_list_line_id);
8546 FETCH cur_get_accrual_limit_id into l_accr_qty_limit_id;
8547 CLOSE cur_get_accrual_limit_id;
8548
8549 process_limits
8550 (
8551 x_return_status => x_return_status
8552 ,x_msg_count => x_msg_count
8553 ,x_msg_data => x_msg_data
8554 ,p_limit_type =>'MAX_QTY_PER_RULE'
8555 ,p_limit_amount => l_modifier_line_tbl(limit_index).max_qty_per_rule
8556 ,p_list_line_id => l_modifier_line_tbl(limit_index).qd_list_line_id
8557 ,p_list_header_id => l_modifier_line_tbl(limit_index).list_header_id
8558 ,p_limit_id => l_accr_qty_limit_id
8559 );
8560
8561 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
8562 x_error_location := limit_index;
8563 RAISE Fnd_Api.g_exc_error;
8564 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
8565 x_error_location := limit_index;
8566 RAISE Fnd_Api.g_exc_unexpected_error;
8567 END IF;
8568 END IF;
8569 END IF;
8570
8571 IF l_modifier_line_tbl(limit_index).qd_estimated_amount_is_max = 'Y' THEN
8572 IF l_modifier_line_tbl(limit_index).list_line_id IS NOT NULL
8573 AND l_modifier_line_tbl(limit_index).list_line_id <> FND_API.G_MISS_NUM THEN
8574 process_limits
8575 (
8576 x_return_status => x_return_status
8577 ,x_msg_count => x_msg_count
8578 ,x_msg_data => x_msg_data
8579 ,p_limit_type =>'MAX_AMOUNT_PER_RULE'
8580 ,p_limit_amount => l_modifier_line_tbl(limit_index).max_amount_per_rule
8581 ,p_list_line_id => l_modifier_line_tbl(limit_index).list_line_id
8582 ,p_list_header_id => l_modifier_line_tbl(limit_index).list_header_id
8583 ,p_limit_id => l_modifier_line_tbl(limit_index).max_amount_per_rule_id
8584 );
8585
8586 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
8587 x_error_location := limit_index;
8588 RAISE Fnd_Api.g_exc_error;
8589 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
8590 x_error_location := limit_index;
8591 RAISE Fnd_Api.g_exc_unexpected_error;
8592 END IF;
8593 END IF;
8594
8595 IF l_modifier_line_tbl(limit_index).qd_list_line_id IS NOT NULL
8596 AND l_modifier_line_tbl(limit_index).qd_list_line_id <> FND_API.G_MISS_NUM THEN
8597
8598 OPEN cur_get_accrual_limit_id(5,l_modifier_line_tbl(limit_index).qd_list_line_id);
8599 FETCH cur_get_accrual_limit_id into l_accr_amount_limit_id;
8600 CLOSE cur_get_accrual_limit_id;
8601
8602 process_limits
8603 (
8604 x_return_status => x_return_status
8605 ,x_msg_count => x_msg_count
8606 ,x_msg_data => x_msg_data
8607 ,p_limit_type =>'MAX_AMOUNT_PER_RULE'
8608 ,p_limit_amount => l_modifier_line_tbl(limit_index).max_amount_per_rule
8609 ,p_list_line_id => l_modifier_line_tbl(limit_index).qd_list_line_id
8610 ,p_list_header_id => l_modifier_line_tbl(limit_index).list_header_id
8611 ,p_limit_id => l_accr_amount_limit_id
8612 );
8613
8614 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
8615 x_error_location := limit_index;
8616 RAISE Fnd_Api.g_exc_error;
8617 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
8618 x_error_location := limit_index;
8619 RAISE Fnd_Api.g_exc_unexpected_error;
8620 END IF;
8621 END IF;
8622 END IF;
8623 END IF;
8624 END IF;
8625 END LOOP;
8626
8627 x_modifiers_tbl := v_modifier_ret_tbl;
8628
8629 EXCEPTION
8630 WHEN Fnd_Api.G_EXC_ERROR THEN
8631 x_return_status := Fnd_Api.g_ret_sts_error ;
8632 Fnd_Msg_Pub.Count_AND_Get
8633 ( p_count => x_msg_count,
8634 p_data => x_msg_data,
8635 p_encoded => Fnd_Api.G_FALSE
8636 );
8637 WHEN Fnd_Api.G_EXC_UNEXPECTED_ERROR THEN
8638 x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
8639 Fnd_Msg_Pub.Count_AND_Get
8640 ( p_count => x_msg_count,
8641 p_data => x_msg_data,
8642 p_encoded => Fnd_Api.G_FALSE
8643 );
8644 WHEN OTHERS THEN
8645 x_return_status := Fnd_Api.g_ret_sts_unexp_erroR ;
8646 IF Fnd_Msg_Pub.Check_Msg_Level ( Fnd_Msg_Pub.G_MSG_LVL_UNEXP_ERROR )
8647 THEN
8648 Fnd_Msg_Pub.Add_Exc_Msg( G_PKG_NAME,l_api_name);
8649 END IF;
8650 Fnd_Msg_Pub.Count_AND_Get
8651 ( p_count => x_msg_count,
8652 p_data => x_msg_data,
8653 p_encoded => Fnd_Api.G_FALSE
8654 );
8655 END;
8656
8657 PROCEDURE validateQpListLines
8658 (
8659 x_return_status OUT NOCOPY VARCHAR2
8660 ,x_msg_count OUT NOCOPY NUMBER
8661 ,x_msg_data OUT NOCOPY VARCHAR2
8662 ,p_modifier_line_tbl IN MODIFIER_LINE_TBL_TYPE
8663 ,p_listHeaderId IN NUMBER
8664 )
8665 IS
8666 CURSOR c_currency(cp_listHeaderId NUMBER)
8667 IS
8668 SELECT transaction_currency_code
8669 FROM ozf_offers
8670 WHERE qp_list_header_id = cp_listHeaderId;
8671 l_currency ozf_offers.transaction_currency_code%TYPE;
8672 BEGIN
8673 x_return_status := FND_API.G_RET_STS_SUCCESS;
8674 IF p_modifier_line_tbl.count > 0 THEN
8675 FOR i in p_modifier_line_tbl.first .. p_modifier_line_tbl.last LOOP
8676 IF p_modifier_line_tbl.exists(i) THEN
8677 OPEN c_currency(cp_listHeaderId => nvl(p_modifier_line_tbl(i).list_header_id,p_listHeaderId));
8678 FETCH c_currency INTO l_currency;
8679 CLOSE c_currency;
8680 IF l_currency IS NULL THEN
8681 IF (p_modifier_line_tbl(i).operand <> FND_API.G_MISS_NUM AND p_modifier_line_tbl(i).operand IS NOT NULL)
8682 AND
8683 (p_modifier_line_tbl(i).arithmetic_operator <> FND_API.G_MISS_CHAR AND p_modifier_line_tbl(i).arithmetic_operator IS NOT NULL)
8684 THEN
8685 IF
8686 (p_modifier_line_tbl(i).list_line_type_code = 'DIS' AND p_modifier_line_tbl(i).arithmetic_operator <> '%' )
8687 THEN
8688 OZF_Utility_PVT.error_message('OZF_OFFR_OPT_CURR_PCNT');
8689 x_return_status := FND_API.G_RET_STS_ERROR;
8690 RAISE FND_API.g_exc_error;
8691 END IF;
8692 END IF;
8693 IF (p_modifier_line_tbl(i).qd_operand <> FND_API.G_MISS_NUM AND p_modifier_line_tbl(i).qd_operand IS NOT NULL)
8694 AND
8695 (p_modifier_line_tbl(i).qd_arithmetic_operator <> FND_API.G_MISS_CHAR AND p_modifier_line_tbl(i).qd_arithmetic_operator IS NOT NULL)
8696 THEN
8697 IF
8698 (p_modifier_line_tbl(i).list_line_type_code = 'DIS' AND p_modifier_line_tbl(i).qd_arithmetic_operator <> '%' )
8699 THEN
8700 OZF_Utility_PVT.error_message('OZF_OFFR_OPT_CURR_PCNT');
8701 x_return_status := FND_API.G_RET_STS_ERROR;
8702 RAISE FND_API.g_exc_error;
8703 END IF;
8704 END IF;
8705 END IF;
8706 END IF;
8707 END LOOP;
8708 END IF;
8709 END validateQpListLines;
8710
8711 PROCEDURE process_qp_list_lines
8712 (
8713 x_return_status OUT NOCOPY VARCHAR2
8714 ,x_msg_count OUT NOCOPY NUMBER
8715 ,x_msg_data OUT NOCOPY VARCHAR2
8716 ,p_offer_type IN VARCHAR2
8717 ,p_modifier_line_tbl IN MODIFIER_LINE_TBL_TYPE
8718 ,p_list_header_id IN NUMBER
8719 ,x_modifier_line_tbl OUT NOCOPY qp_modifiers_pub.modifiers_tbl_type
8720 ,x_error_location OUT NOCOPY NUMBER
8721 )IS
8722 l_api_version CONSTANT NUMBER := 1.0;
8723 l_api_name CONSTANT VARCHAR2(30) := 'process_qp_list_lines';
8724 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
8725 l_modifier_line_tbl qp_modifiers_pub.modifiers_tbl_type;
8726 -- RSSHARMA changed on 06-Feb-2003
8727 CURSOR c_volume_offer_type IS
8728 SELECT volume_offer_type FROM ozf_offers
8729 where qp_list_header_id = p_list_header_id;
8730
8731 l_Volume_offer_type ozf_offers.volume_offer_type%type;
8732
8733 l_modifier_line_rec_tbl MODIFIER_LINE_TBL_TYPE := p_modifier_line_tbl;
8734
8735 BEGIN
8736
8737 SAVEPOINT process_qp_list_lines;
8738
8739 x_return_status := Fnd_Api.g_ret_sts_success;
8740 x_error_location := 0;
8741 validateQpListLines
8742 (
8743 x_return_status => x_return_status
8744 ,x_msg_count => x_msg_count
8745 ,x_msg_data => x_msg_data
8746 ,p_modifier_line_tbl => p_modifier_line_tbl
8747 ,p_listHeaderId => p_list_header_id
8748 );
8749 IF x_return_status = FND_API.G_RET_STS_ERROR THEN
8750 RAISE FND_API.G_EXC_ERROR;
8751 ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
8752 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8753 END IF;
8754
8755 IF p_list_header_id IS NOT NULL AND p_list_header_id<> FND_API.G_MISS_NUM THEN
8756 l_modifier_line_rec_tbl(p_modifier_line_tbl.last).list_header_id := p_list_header_id;
8757 END IF;
8758
8759 IF p_modifier_line_tbl.count > 0 THEN
8760
8761 IF p_offer_type IN ('OFF_INVOICE','TERMS','ACCRUAL') THEN
8762 process_regular_discounts
8763 (
8764 x_return_status => x_return_status,
8765 x_msg_count => x_msg_count,
8766 x_msg_data => x_msg_data,
8767 p_parent_offer_type => p_offer_type,
8768 p_offer_type => p_offer_type,
8769 p_modifier_line_tbl => l_modifier_line_rec_tbl, --Added by nirma
8770 x_modifiers_tbl => l_modifier_line_tbl,
8771 x_error_location => x_error_location
8772 );
8773 ELSIF p_offer_type IN ('OID') THEN
8774 process_promotional_goods
8775 (
8776 x_return_status => x_return_status,
8777 x_msg_count => x_msg_count,
8778 x_msg_data => x_msg_data,
8779 p_modifier_line_tbl => p_modifier_line_tbl,
8780 x_modifiers_tbl => l_modifier_line_tbl,
8781 x_error_location => x_error_location
8782 );
8783 ELSIF p_offer_type IN ('ORDER') THEN
8784 process_order_value
8785 (
8786 x_return_status => x_return_status,
8787 x_msg_count => x_msg_count,
8788 x_msg_data => x_msg_data,
8789 p_modifier_line_tbl => p_modifier_line_tbl,
8790 x_modifiers_tbl => l_modifier_line_tbl,
8791 x_error_location => x_error_location
8792 );
8793 ELSIF p_offer_type IN ('DEAL') THEN -- note trade deal does not return values properly so far
8794 process_trade_deal
8795 (
8796 x_return_status => x_return_status,
8797 x_msg_count => x_msg_count,
8798 x_msg_data => x_msg_data,
8799 p_modifier_line_tbl => p_modifier_line_tbl,
8800 p_list_header_id => p_list_header_id,
8801 x_modifiers_tbl => l_modifier_line_tbl,
8802 x_error_location => x_error_location
8803 );
8804 ELSIF p_offer_type IN ('VOLUME_OFFER') THEN
8805
8806 OPEN c_volume_offer_type ;
8807 fetch c_volume_offer_type INTO l_Volume_offer_type;
8808 CLOSE c_volume_offer_type ;
8809
8810 process_regular_discounts
8811 (
8812 x_return_status => x_return_status,
8813 x_msg_count => x_msg_count,
8814 x_msg_data => x_msg_data,
8815 p_parent_offer_type => p_offer_type,
8816 p_offer_type => l_volume_offer_type,
8817 p_modifier_line_tbl => p_modifier_line_tbl,
8818 x_modifiers_tbl => l_modifier_line_tbl,
8819 x_error_location => x_error_location
8820 );
8821 --rssharma end change on 06-Feb-2003
8822 END IF;
8823
8824 x_modifier_line_tbl := l_modifier_line_tbl;
8825
8826 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
8827 RAISE Fnd_Api.g_exc_error;
8828 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
8829 RAISE Fnd_Api.g_exc_unexpected_error;
8830 END IF;
8831 END IF;
8832 EXCEPTION
8833 WHEN Fnd_Api.G_EXC_ERROR THEN
8834 x_return_status := Fnd_Api.g_ret_sts_error ;
8835 ROLLBACK TO process_qp_list_lines;
8836 Fnd_Msg_Pub.Count_AND_Get
8837 ( p_count => x_msg_count,
8838 p_data => x_msg_data,
8839 p_encoded => Fnd_Api.G_FALSE
8840 );
8841 WHEN Fnd_Api.G_EXC_UNEXPECTED_ERROR THEN
8842 x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
8843 ROLLBACK TO process_qp_list_lines;
8844 Fnd_Msg_Pub.Count_AND_Get
8845 ( p_count => x_msg_count,
8846 p_data => x_msg_data,
8847 p_encoded => Fnd_Api.G_FALSE
8848 );
8849 WHEN OTHERS THEN
8850 x_return_status := Fnd_Api.g_ret_sts_unexp_erroR ;
8851 ROLLBACK TO process_qp_list_lines;
8852 IF Fnd_Msg_Pub.Check_Msg_Level ( Fnd_Msg_Pub.G_MSG_LVL_UNEXP_ERROR )
8853 THEN
8854 Fnd_Msg_Pub.Add_Exc_Msg( G_PKG_NAME,l_api_name);
8855 END IF;
8856 Fnd_Msg_Pub.Count_AND_Get
8857 ( p_count => x_msg_count,
8858 p_data => x_msg_data,
8859 p_encoded => Fnd_Api.G_FALSE
8860 );
8861 END;
8862
8863
8864 PROCEDURE validate_offer_approval
8865 ( x_return_status OUT NOCOPY VARCHAR2
8866 ,x_msg_count OUT NOCOPY NUMBER
8867 ,x_msg_data OUT NOCOPY VARCHAR2
8868 ,p_init_msg_list IN VARCHAR2
8869 ,p_modifier_list_rec IN modifier_list_rec_type
8870 )IS
8871
8872 l_api_version CONSTANT NUMBER := 1.0;
8873 l_api_name CONSTANT VARCHAR2(30) := 'validate_offer_approval';
8874 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
8875 CURSOR c_budget_exist IS
8876 SELECT 1
8877 FROM DUAL
8878 WHERE EXISTS(
8879 SELECT 1
8880 FROM ozf_act_budgets
8881 WHERE arc_act_budget_used_by = 'OFFR'
8882 AND act_budget_used_by_id = p_modifier_list_rec.qp_list_header_id);
8883 l_budget_exist NUMBER;
8884
8885
8886 BEGIN
8887
8888 x_return_status := Fnd_Api.g_ret_sts_success;
8889
8890 OPEN c_budget_exist;
8891 FETCH c_budget_exist INTO l_budget_exist;
8892 CLOSE c_budget_exist;
8893
8894
8895 IF l_budget_exist IS NULL THEN
8896 OZF_Utility_PVT.error_message('OZF_EVE_NO_BGT_SRC');
8897 RAISE FND_API.g_exc_error;
8898 END IF;
8899
8900
8901 -- For Lumpsum Offers if distribution is complete
8902 IF p_modifier_list_rec.offer_type = 'LUMPSUM' AND p_modifier_list_rec.custom_setup_id <> 110 THEN
8903
8904 validate_lumpsum_offer
8905 (
8906 p_init_msg_list => p_init_msg_list
8907 ,x_return_status => x_return_status
8908 ,x_msg_count => x_msg_count
8909 ,x_msg_data => x_msg_data
8910 ,p_qp_list_header_id => p_modifier_list_rec.qp_list_header_id
8911 );
8912
8913 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
8914 RAISE Fnd_Api.g_exc_error;
8915 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
8916 RAISE Fnd_Api.g_exc_unexpected_error;
8917 END IF;
8918
8919 END IF;
8920
8921 Fnd_Msg_Pub.Count_AND_Get
8922 ( p_count => x_msg_count,
8923 p_data => x_msg_data,
8924 p_encoded => Fnd_Api.G_FALSE
8925 );
8926
8927 EXCEPTION
8928 WHEN Fnd_Api.G_EXC_ERROR THEN
8929 x_return_status := Fnd_Api.g_ret_sts_error ;
8930 Fnd_Msg_Pub.Count_AND_Get
8931 ( p_count => x_msg_count,
8932 p_data => x_msg_data,
8933 p_encoded => Fnd_Api.G_FALSE
8934 );
8935 WHEN Fnd_Api.G_EXC_UNEXPECTED_ERROR THEN
8936 x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
8937 Fnd_Msg_Pub.Count_AND_Get
8938 ( p_count => x_msg_count,
8939 p_data => x_msg_data,
8940 p_encoded => Fnd_Api.G_FALSE
8941 );
8942 WHEN OTHERS THEN
8943 x_return_status := Fnd_Api.g_ret_sts_unexp_erroR ;
8944 IF Fnd_Msg_Pub.Check_Msg_Level ( Fnd_Msg_Pub.G_MSG_LVL_UNEXP_ERROR )
8945 THEN
8946 Fnd_Msg_Pub.Add_Exc_Msg( G_PKG_NAME,l_api_name);
8947 END IF;
8948 Fnd_Msg_Pub.Count_AND_Get
8949 ( p_count => x_msg_count,
8950 p_data => x_msg_data,
8951 p_encoded => Fnd_Api.G_FALSE
8952 );
8953 END;
8954
8955
8956 FUNCTION get_campaign_count(p_list_header_id IN NUMBER)
8957 RETURN NUMBER IS
8958 p_count NUMBER := 0;
8959
8960 CURSOR cur_budget_source_count(list_header_id NUMBER) IS
8961 SELECT count(1)
8962 FROM ozf_act_offers
8963 where qp_list_header_id = list_header_id;
8964
8965 BEGIN
8966 OPEN cur_budget_source_count( p_list_header_id ) ;
8967 FETCH cur_budget_source_count INTO p_count ;
8968 CLOSE cur_budget_source_count ;
8969 return p_count ;
8970
8971 EXCEPTION
8972 WHEN OTHERS THEN
8973 RETURN 0;
8974 END;
8975
8976
8977 /*
8978 This function checks id active discount rules exist for an offer.
8979 If active discount rules exist for the offer then the function returns 0
8980 else it returns -1
8981 r12 changes
8982 Changed function to query ozf_offer_discount_lines and ozf_offer_discount_products
8983 if offer type is VOLUME_OFFER
8984 */
8985 FUNCTION discount_lines_exist(p_list_header_id IN NUMBER) RETURN NUMBER
8986 IS
8987 l_lines_count NUMBER := 0;
8988 CURSOR c_list_line(l_list_header_id NUMBER) IS
8989 SELECT COUNT(*)
8990 FROM qp_list_lines
8991 WHERE list_header_id = l_list_header_id
8992 AND decode(greatest(end_date_active, sysdate), sysdate,'N','Y') = 'Y';
8993
8994 CURSOR c_offerType(cp_listHeaderId NUMBER) IS
8995 SELECT offer_type
8996 FROM ozf_offers
8997 WHERE qp_list_header_id = cp_listHeaderId;
8998
8999 CURSOR c_voCnt(cp_listHeaderId NUMBER) IS
9000 SELECT 1 FROM dual WHERE EXISTS(SELECT
9001 'X' FROM ozf_offer_discount_lines a, ozf_offer_discount_products b, ozf_offers c
9002 WHERE a.offer_discount_line_id = b.offer_discount_line_id
9003 AND a.offer_id = c.offer_id
9004 AND c.qp_list_header_id = cp_listHeaderId
9005 );
9006
9007 l_offerType OZF_OFFERS.offer_type%TYPE := null;
9008 l_return NUMBER := -1;
9009 BEGIN
9010 l_offerType := null;
9011 OPEN c_offerType(p_list_header_id);
9012 FETCH c_offerType into l_offerType;
9013 IF (c_offerType%NOTFOUND) THEN
9014 l_offerType := null;
9015 END IF;
9016 CLOSE c_offerType;
9017
9018 l_lines_count := 0;
9019
9020 IF (l_offerType = 'VOLUME_OFFER') THEN
9021 OPEN c_voCnt(p_list_header_id);
9022 FETCH c_voCnt INTO l_lines_count;
9023 IF c_voCnt%NOTFOUND THEN
9024 l_lines_count := 0;
9025 END IF;
9026 CLOSE c_voCnt;
9027 ELSIF (l_offerType = 'ACCRUAL') THEN
9028 OPEN c_list_line(p_list_header_id);
9029 FETCH c_list_line INTO l_lines_count;
9030 IF c_list_line%NOTFOUND THEN
9031 l_lines_count := 0;
9032 END IF;
9033 CLOSE c_list_line;
9034 ELSE
9035 l_lines_count := 0;
9036 END IF;
9037
9038 l_return := -1;
9039 IF l_lines_count <> 0 THEN
9040 l_RETURN := 0;
9041 ELSE
9042 l_RETURN := -1;
9043 END IF;
9044 RETURN l_return;
9045 EXCEPTION
9046 WHEN OTHERS THEN
9047 RETURN -1;
9048
9049 END discount_lines_exist ;
9050
9051
9052 PROCEDURE Update_Offer_Status
9053 (
9054 p_commit IN VARCHAR2
9055 ,x_return_status OUT NOCOPY VARCHAR2
9056 ,x_msg_count OUT NOCOPY NUMBER
9057 ,x_msg_data OUT NOCOPY VARCHAR2
9058 ,p_modifier_list_rec IN modifier_list_rec_type
9059 )
9060 IS
9061
9062 CURSOR c_offer_start_date(p_list_header_id NUMBER) IS
9063 SELECT q.start_date_active, o.start_date
9064 FROM qp_list_headers_b q, ozf_offers o
9065 WHERE o.qp_list_header_id = q.list_header_id
9066 AND q.list_header_id = p_list_header_id;
9067
9068 l_start_date_q DATE;
9069 l_start_date_o DATE;
9070 l_start_date DATE;
9071
9072 l_api_name CONSTANT VARCHAR2(30) := 'update_offer_status';
9073
9074 BEGIN
9075
9076 SAVEPOINT update_offer_status;
9077
9078 OPEN c_offer_start_date(p_modifier_list_rec.qp_list_header_id);
9079 FETCH c_offer_start_date INTO l_start_date_q, l_start_date_o;
9080 CLOSE c_offer_start_date;
9081
9082 IF p_modifier_list_rec.status_code = 'ACTIVE' THEN
9083 IF l_start_date_o IS NULL THEN
9084 l_start_date := GREATEST(NVL(l_start_date_q, SYSDATE), SYSDATE);
9085 ELSE
9086 l_start_date := l_start_date_o;
9087 END IF;
9088 ELSE
9089 l_start_date := l_start_date_o;
9090 END IF;
9091
9092 UPDATE ozf_offers
9093 SET user_status_id = p_modifier_list_rec.user_status_id,
9094 status_code = p_modifier_list_rec.status_code,
9095 status_date = SYSDATE,
9096 start_date = l_start_date,
9097 object_version_number = object_version_number + 1
9098 WHERE qp_list_header_id = p_modifier_list_rec.qp_list_header_id;
9099
9100 IF p_modifier_list_rec.status_code = 'ACTIVE'
9101 AND p_modifier_list_rec.offer_type NOT IN ('LUMPSUM', 'SCAN_DATA', 'NET_ACCRUAL') THEN
9102 UPDATE qp_list_headers_b
9103 SET active_flag = 'Y'
9104 WHERE list_header_id = p_modifier_list_rec.qp_list_header_id;
9105 -- Forward port bug 3143594. 11i.10 bug is 3614058
9106 UPDATE qp_qualifiers
9107 SET active_flag = 'Y'
9108 WHERE list_header_id = p_modifier_list_rec.qp_list_header_id;
9109
9110 END IF;
9111
9112 process_offer_activation
9113 (
9114 p_api_version_number => 1.0
9115 , p_init_msg_list => FND_API.g_false
9116 , p_commit => p_commit
9117 , p_validation_level => FND_API.G_VALID_LEVEL_FULL
9118 , x_return_status => x_return_status
9119 , x_msg_count => x_msg_count
9120 , x_msg_data => x_msg_data
9121 , p_offer_rec => p_modifier_list_rec
9122 );
9123
9124 IF x_return_status = FND_API.G_RET_STS_ERROR THEN
9125 RAISE FND_API.G_EXC_ERROR;
9126 ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
9127 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9128 END IF;
9129
9130
9131 IF p_commit = Fnd_Api.g_true THEN
9132 COMMIT;
9133 END IF;
9134
9135 EXCEPTION
9136 WHEN OTHERS THEN
9137 x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
9138 ROLLBACK TO update_offer_status;
9139 IF Fnd_Msg_Pub.Check_Msg_Level ( Fnd_Msg_Pub.G_MSG_LVL_UNEXP_ERROR ) THEN
9140 Fnd_Msg_Pub.Add_Exc_Msg( G_PKG_NAME,l_api_name);
9141 END IF;
9142 Fnd_Msg_Pub.Count_AND_Get(p_count => x_msg_count,
9143 p_data => x_msg_data,
9144 p_encoded => Fnd_Api.G_FALSE);
9145 END update_offer_status;
9146
9147
9148 PROCEDURE raise_offer_event(p_offer_id IN NUMBER,
9149 p_adjustment_id IN NUMBER :=NULL)
9150 IS
9151 l_item_key varchar2(30);
9152 l_parameter_list wf_parameter_list_t;
9153 BEGIN
9154 l_item_key := p_offer_id ||'_'|| TO_CHAR(SYSDATE,'DDMMRRRRHH24MISS');
9155 l_parameter_list := WF_PARAMETER_LIST_T();
9156
9157 debug_message('Offer Id is :'||p_offer_id );
9158 wf_event.AddParameterToList(p_name => 'P_OFFER_ID',
9159 p_value => p_offer_id,
9160 p_parameterlist => l_parameter_list);
9161
9162 if p_adjustment_id IS NOT NULL then
9163 wf_event.AddParameterToList(p_name => 'P_ADJUSTMENT_ID',
9164 p_value => p_adjustment_id,
9165 p_parameterlist => l_parameter_list);
9166 end if;
9167
9168 debug_message('Item Key is :'||l_item_key);
9169 wf_event.raise( p_event_name => 'oracle.apps.ozf.offer.OfferApproval',
9170 p_event_key => l_item_key,
9171 p_parameters => l_parameter_list);
9172 EXCEPTION
9173 WHEN OTHERS THEN
9174 debug_message('Exception in raising business event');
9175 RAISE Fnd_Api.g_exc_error;
9176 END;
9177
9178 FUNCTION getDateQualifier(p_qpListHeaderId NUMBER)
9179 RETURN VARCHAR2
9180 IS
9181 CURSOR c_dateQualifier(cp_qpListHeaderId NUMBER) IS
9182 SELECT date_qualifier_profile_value
9183 FROM ozf_offers
9184 WHERE qp_list_header_id = cp_qpListHeaderId;
9185 l_dateQualifier VARCHAR2(1):= NULL;
9186 BEGIN
9187 OPEN c_dateQualifier(cp_qpListHeaderId => p_qpListHeaderId ) ;
9188 FETCH c_dateQualifier INTO l_dateQualifier;
9189 IF c_dateQualifier%NOTFOUND THEN
9190 l_dateQualifier := null;
9191 END IF;
9192 CLOSE c_dateQualifier;
9193 return l_dateQualifier;
9194 END getDateQualifier;
9195
9196 PROCEDURE process_modifiers
9197 (
9198 p_init_msg_list IN VARCHAR2
9199 ,p_api_version IN NUMBER
9200 ,p_commit IN VARCHAR2
9201 ,x_return_status OUT NOCOPY VARCHAR2
9202 ,x_msg_count OUT NOCOPY NUMBER
9203 ,x_msg_data OUT NOCOPY VARCHAR2
9204 ,p_offer_type IN VARCHAR2
9205 ,p_modifier_list_rec IN modifier_list_rec_type
9206 ,p_modifier_line_tbl IN MODIFIER_LINE_TBL_TYPE
9207 ,x_qp_list_header_id OUT NOCOPY NUMBER
9208 ,x_error_location OUT NOCOPY NUMBER
9209 )
9210 IS
9211
9212 v_modifier_list_rec modifier_list_rec_type;
9213 temp_modifier_list_rec modifier_list_rec_type := p_modifier_list_rec;
9214 date_temp_modifier_list_rec modifier_list_rec_type := p_modifier_list_rec;
9215 l_modifier_list_rec modifier_list_rec_type := p_modifier_list_rec;
9216 l_offer_id NUMBER;
9217 v_modifier_line_tbl qp_modifiers_pub.modifiers_tbl_type; --
9218 l_modifier_line_tbl MODIFIER_LINE_TBL_TYPE := p_modifier_line_tbl;
9219
9220 l_api_version CONSTANT NUMBER := 1.0;
9221 l_api_name CONSTANT VARCHAR2(30) := 'process_modifiers';
9222 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
9223 l_handle_status VARCHAR2(1);
9224
9225 l_old_status_id NUMBER;
9226 l_approval_type VARCHAR2(30);
9227 l_new_status_code VARCHAR2(30);
9228 l_old_status_code VARCHAR2(30);
9229 l_status_code VARCHAR2(30); -- status from budget API
9230
9231 l_owner_id NUMBER;
9232 l_amount_error VARCHAR2(1);
9233 l_budget_required VARCHAR2(1);
9234 l_approval_required VARCHAR2(1);
9235 l_lines_count NUMBER;
9236
9237 l_offers_rec modifier_list_rec_type := p_modifier_list_rec;
9238
9239 l_na_qual_context VARCHAR2(30);
9240 l_na_qual_attribute VARCHAR2(30);
9241
9242 l_old_offer_id NUMBER;
9243 -- Bug 14138664
9244 l_old_fund_req_curr_code VARCHAR2(15);
9245 l_old_transaction_curr_code VARCHAR2(15);
9246 --//Bug 14158729
9247 l_TPM_process_enabled VARCHAR2 (1) := NVL(fnd_profile.VALUE ('OZF_TPM_PROCESS_ENABLED'),'N');
9248
9249 CURSOR cur_get_user_status IS
9250 SELECT user_status_id,owner_id,status_code,offer_id,transaction_currency_code,fund_request_curr_code
9251 FROM ozf_offers
9252 WHERE qp_list_header_id = p_modifier_list_rec.qp_list_header_id;
9253
9254 CURSOR c_offer_budget IS
9255 SELECT budget_source_type, budget_source_id, budget_amount_tc
9256 FROM ozf_offers
9257 WHERE qp_list_header_id = p_modifier_list_rec.qp_list_header_id;
9258
9259 CURSOR c_budget_required IS
9260 SELECT attr_available_flag
9261 FROM ams_custom_setup_attr
9262 WHERE object_attribute = 'BREQ'
9263 AND custom_setup_id = p_modifier_list_rec.custom_setup_id;
9264
9265 CURSOR c_prod_line IS
9266 SELECT COUNT(*)
9267 FROM ams_act_products
9268 WHERE arc_act_product_used_by = 'OFFR'
9269 AND act_product_used_by_id = p_modifier_list_rec.qp_list_header_id;
9270
9271 CURSOR c_list_line IS
9272 SELECT COUNT(*)
9273 FROM qp_list_lines
9274 WHERE list_header_id = p_modifier_list_rec.qp_list_header_id;
9275
9276 CURSOR c_na_line IS
9277 SELECT COUNT(*)
9278 FROM ozf_offer_discount_lines
9279 WHERE offer_id =
9280 (SELECT offer_id FROM ozf_offers WHERE qp_list_header_id = p_modifier_list_rec.qp_list_header_id);
9281
9282 CURSOR c_prg_buy_count IS
9283 SELECT COUNT(*)
9284 FROM qp_list_lines
9285 WHERE list_header_id = p_modifier_list_rec.qp_list_header_id
9286 AND TRUNC(SYSDATE) <= TRUNC(NVL(end_date_active, SYSDATE))
9287 AND list_line_type_code = 'PRG';
9288
9289 CURSOR c_prg_get_count IS
9290 SELECT COUNT(*)
9291 FROM qp_list_lines
9292 WHERE list_header_id = p_modifier_list_rec.qp_list_header_id
9293 AND TRUNC(SYSDATE) <= TRUNC(NVL(end_date_active, SYSDATE))
9294 AND list_line_type_code = 'DIS';
9295
9296 l_prg_buy_count NUMBER;
9297 l_prg_get_count NUMBER;
9298
9299 -- bug 3412451 need to update budget line upon offer activation if no approval nor validation invoked
9300 CURSOR c_budget_request(p_qp_list_header_id NUMBER) IS
9301 SELECT activity_budget_id
9302 FROM ozf_act_budgets
9303 WHERE act_budget_used_by_id = p_qp_list_header_id
9304 AND arc_act_budget_used_by = 'OFFR';
9305 -- end comment
9306
9307 CURSOR c_vo_line (p_qp_list_header_id NUMBER)IS
9308 SELECT count(*) FROM ozf_offer_discount_products a, ozf_offer_discount_lines b
9309 WHERE a.offer_discount_line_id = b.offer_discount_line_id
9310 AND b.offer_id = (SELECT offer_id FROM ozf_offers WHERE qp_list_header_id = p_qp_list_header_id);
9311
9312 CURSOR c_emptyDiscStruct(cp_qpListheaderId NUMBER) IS
9313 SELECT 1 FROM
9314 ozf_offer_discount_lines a , ozf_offers b
9315 WHERE a.tier_type = 'PBH'
9316 AND a.offer_id = b.offer_id --8013
9317 AND
9318 ( NOT EXISTS(SELECT 'X' FROM ozf_offer_discount_products WHERE offer_discount_line_id = a.offer_discount_line_id AND excluder_flag = 'N')
9319 OR NOT EXISTS(SELECT 'X' FROM ozf_offer_discount_lines WHERE parent_discount_line_id = a.offer_discount_line_id)
9320 )
9321 AND b.qp_list_header_id = cp_qpListheaderId;
9322
9323 l_emptyDiscStruct VARCHAR2(1) := NULL;
9324
9325
9326
9327 CURSOR c_budget_req_count(p_list_header_id NUMBER) IS
9328 SELECT COUNT(*)
9329 FROM ozf_act_budgets
9330 WHERE arc_act_budget_used_by = 'OFFR'
9331 AND status_code = 'NEW'
9332 AND transfer_type = 'REQUEST'
9333 AND act_budget_used_by_id = p_list_header_id;
9334 l_budget_req_count NUMBER := 0;
9335
9336 -- nepanda : Fix for Bug 12950967
9337 CURSOR c_header_limit_exists(p_qp_list_header_id NUMBER) IS
9338 SELECT COUNT(*)
9339 FROM qp_limits
9340 WHERE list_header_id = p_qp_list_header_id
9341 AND list_line_id = -1 ;
9342 l_header_limit_exists NUMBER ;
9343
9344 BEGIN
9345 SAVEPOINT process_modifiers;
9346 --dbms_output.put_line('calling qp procedure');
9347 IF Fnd_Api.to_boolean(p_init_msg_list) THEN
9348 Fnd_Msg_Pub.initialize;
9349 END IF;
9350
9351 IF NOT Fnd_Api.compatible_api_call
9352 (
9353 l_api_version,
9354 p_api_version,
9355 l_api_name,
9356 g_pkg_name
9357 )
9358 THEN
9359 RAISE Fnd_Api.g_exc_unexpected_error;
9360 END IF;
9361 x_return_status := Fnd_Api.g_ret_sts_success;
9362 x_error_location := 0;
9363
9364 -- added by julou 14-DEC-2001 check default profile values before going any further
9365 IF FND_PROFILE.value('OZF_PRICING_PHASE_LINEGROUP') IS NULL THEN
9366 FND_MESSAGE.set_name('OZF','OZF_NO_PRICING_PHASE_LINEGROUP');
9367 FND_MSG_PUB.add;
9368 RAISE FND_API.g_exc_unexpected_error;
9369 END IF;
9370
9371 IF FND_PROFILE.value('OZF_PRICING_PHASE_LINE') IS NULL THEN
9372 FND_MESSAGE.set_name('OZF','OZF_NO_PRICING_PHASE_LINE');
9373 FND_MSG_PUB.add;
9374 RAISE FND_API.g_exc_unexpected_error;
9375 END IF;
9376
9377 IF FND_PROFILE.value('OZF_PRICING_PHASE_ORDER') IS NULL THEN
9378 FND_MESSAGE.set_name('OZF','OZF_NO_PRICING_PHASE_ORDER');
9379 FND_MSG_PUB.add;
9380 RAISE FND_API.g_exc_unexpected_error;
9381 END IF;
9382
9383 IF FND_PROFILE.value('OZF_PRICING_GROUP_SEQUENCE') IS NULL THEN
9384 FND_MESSAGE.set_name('OZF','OZF_NO_PRICING_GROUP_SEQUENCE');
9385 FND_MSG_PUB.add;
9386 RAISE FND_API.g_exc_unexpected_error;
9387 END IF;
9388
9389 IF FND_PROFILE.value('OZF_PRINT_ON_INVOICE') IS NULL THEN
9390 FND_MESSAGE.set_name('OZF','OZF_NO_PRINT_ON_INVOICE');
9391 FND_MSG_PUB.add;
9392 RAISE FND_API.g_exc_unexpected_error;
9393 END IF;
9394 /* julou bug 3498759 - comment OUT NOCOPY as these profiles are not mandatory
9395 IF FND_PROFILE.value('OZF_INCOMPATIBILITY_GROUP') IS NULL THEN
9396 FND_MESSAGE.set_name('OZF','OZF_NO_INCOMPATIBILITY_GROUP');
9397 FND_MSG_PUB.add;
9398 RAISE FND_API.g_exc_unexpected_error;
9399 END IF;
9400 */
9401 IF FND_PROFILE.value('OZF_PRODUCT_PRECEDENCE') IS NULL THEN
9402 FND_MESSAGE.set_name('OZF','OZF_NO_PRODUCT_PRECEDENCE');
9403 FND_MSG_PUB.add;
9404 RAISE FND_API.g_exc_unexpected_error;
9405 END IF;
9406
9407 --//Fix for bug 14158729
9408 IF l_TPM_process_enabled <> 'Y' THEN
9409 -- end of code added by julou
9410 validate_offer_dates(
9411 p_api_version => 1.0
9412 ,p_init_msg_list => p_init_msg_list
9413 ,x_return_status => x_return_status
9414 ,x_msg_count => x_msg_count
9415 ,x_msg_data => x_msg_data
9416 ,p_offer_rec => p_modifier_list_rec
9417 );
9418
9419 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
9420 RAISE Fnd_Api.g_exc_error;
9421 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
9422 RAISE Fnd_Api.g_exc_unexpected_error;
9423 END IF;
9424 END IF;
9425
9426 IF p_modifier_list_rec.modifier_operation <> FND_API.g_miss_char THEN
9427
9428 IF p_modifier_list_rec.modifier_operation = 'UPDATE' THEN
9429
9430 OPEN cur_get_user_status;
9431 FETCH cur_get_user_status INTO l_old_status_id,l_owner_id,l_old_status_code,l_old_offer_id,l_old_transaction_curr_code,l_old_fund_req_curr_code;
9432 CLOSE cur_get_user_status;
9433
9434 --For Bug 14138664
9435 --if associated budget line is available, validate for offer currency change
9436 IF get_budget_source_count(p_modifier_list_rec.qp_list_header_id) > 0 THEN
9437 --if currency is changed
9438 IF p_modifier_list_rec.transaction_currency_code <> FND_API.g_miss_char AND p_modifier_list_rec.transaction_currency_code IS NOT NULL AND l_old_fund_req_curr_code <> p_modifier_list_rec.transaction_currency_code THEN
9439 FND_MESSAGE.set_name('OZF','OZF_REM_ASSO_BUDGET');
9440 FND_MSG_PUB.add;
9441 RAISE FND_API.g_exc_unexpected_error;
9442 END IF;
9443 --if currency is changed to no currency
9444 IF l_old_transaction_curr_code IS NOT NULL AND p_modifier_list_rec.transaction_currency_code IS NULL AND l_old_transaction_curr_code <> FND_PROFILE.VALUE('JTF_PROFILE_DEFAULT_CURRENCY') THEN
9445 FND_MESSAGE.set_name('OZF','OZF_REM_ASSO_BUDGET');
9446 FND_MSG_PUB.add;
9447 RAISE FND_API.g_exc_unexpected_error;
9448 END IF;
9449 END IF;
9450 --end Bug 14138664
9451
9452 IF l_old_status_code = 'ACTIVE' THEN
9453 --julou in active status, if recal='N', validated committed vs approved othterwise do nothing
9454 IF FND_PROFILE.VALUE('OZF_BUDGET_ADJ_ALLOW_RECAL') = 'N' THEN
9455 validate_offer
9456 (
9457 p_api_version => 1.0
9458 ,p_init_msg_list => p_init_msg_list
9459 ,x_return_status => x_return_status
9460 ,x_msg_count => x_msg_count
9461 ,x_msg_data => x_msg_data
9462 ,p_offer_rec => p_modifier_list_rec
9463 );
9464
9465 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
9466 RAISE Fnd_Api.g_exc_error;
9467 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
9468 RAISE Fnd_Api.g_exc_unexpected_error;
9469 END IF;
9470 END IF;
9471 END IF;
9472
9473 IF (p_modifier_list_rec.user_status_id <> FND_API.g_miss_num)
9474 AND (p_modifier_list_rec.user_status_id <> l_old_status_id) THEN
9475
9476 l_new_status_code := OZF_Utility_PVT.get_system_status_code(p_modifier_list_rec.user_status_id);
9477
9478 --IF l_new_status_code = 'ACTIVE' THEN
9479
9480 OZF_Utility_PVT.check_new_status_change
9481 (
9482 p_object_type => 'OFFR',
9483 p_object_id => p_modifier_list_rec.qp_list_header_id,
9484 p_old_status_id => l_old_status_id,
9485 p_new_status_id => p_modifier_list_rec.user_status_id,
9486 p_custom_setup_id => p_modifier_list_rec.custom_setup_id,
9487 x_approval_type => l_approval_type,
9488 x_return_status => x_return_status
9489 );
9490
9491 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
9492 RAISE Fnd_Api.g_exc_error;
9493 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
9494 RAISE Fnd_Api.g_exc_unexpected_error;
9495 END IF;
9496
9497 OPEN c_budget_required;
9498 FETCH c_budget_required INTO l_budget_required;
9499 CLOSE c_budget_required;
9500
9501 --END IF;
9502
9503 END IF;
9504
9505 END IF;
9506
9507 IF p_modifier_list_rec.offer_type = 'VOLUME_OFFER' THEN
9508 l_modifier_list_rec.offer_type := p_modifier_list_rec.volume_offer_type;
9509 END IF;
9510
9511 OZF_Utility_PVT.debug_message(FND_LOG.LEVEL_STATEMENT,l_full_name,'ozf_offers_pvt.process_modifiers before calling offer_dates getDateQualifier = '|| getDateQualifier(p_qpListHeaderId => p_modifier_list_rec.qp_list_header_id));
9512 IF p_modifier_list_rec.modifier_operation = 'UPDATE' THEN
9513 IF getDateQualifier(p_qpListHeaderId => p_modifier_list_rec.qp_list_header_id) = 'A'
9514 THEN
9515 offer_dates(
9516 p_modifier_list_rec => p_modifier_list_rec
9517 ,x_return_status => x_return_status
9518 ,x_msg_count => x_msg_count
9519 ,x_msg_data => x_msg_data
9520 );
9521
9522 ELSIF getDateQualifier(p_qpListHeaderId => p_modifier_list_rec.qp_list_header_id) = 'Y'
9523 THEN
9524 offer_dates(
9525 p_modifier_list_rec => p_modifier_list_rec
9526 ,x_return_status => x_return_status
9527 ,x_msg_count => x_msg_count
9528 ,x_msg_data => x_msg_data
9529 );
9530
9531 l_modifier_list_rec.start_date_active_first := Fnd_Api.g_miss_date;
9532 l_modifier_list_rec.end_date_active_first := Fnd_Api.g_miss_date;
9533 l_modifier_list_rec.start_date_active_second := Fnd_Api.g_miss_date;
9534 l_modifier_list_rec.end_date_active_second := Fnd_Api.g_miss_date;
9535
9536 END IF;
9537
9538 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
9539 RAISE Fnd_Api.g_exc_error;
9540 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
9541 RAISE Fnd_Api.g_exc_unexpected_error;
9542 END IF;
9543 END IF;
9544
9545 IF l_approval_type IS NULL AND (l_budget_required = 'N' OR l_budget_required IS NULL) THEN
9546 l_approval_required := NULL;
9547 ELSE
9548 l_approval_required := 'Y';
9549 END IF;
9550
9551 l_modifier_list_rec.offer_type := p_offer_type;
9552
9553 IF p_modifier_list_rec.global_flag = 'Y' THEN
9554 IF p_modifier_list_rec.orig_org_id IS NOT NULL AND p_modifier_list_rec.orig_org_id <> fnd_api.g_miss_num THEN
9555 FND_MESSAGE.set_name('OZF', 'OZF_CLEAR_OU');
9556 FND_MSG_PUB.add;
9557 RAISE FND_API.g_exc_error;
9558 END IF;
9559 END IF;
9560
9561
9562 l_modifier_list_rec.global_flag := p_modifier_list_rec.global_flag;
9563 l_modifier_list_rec.orig_org_id := p_modifier_list_rec.orig_org_id;
9564
9565 -- if org id is sent from the ui pass it on
9566 -- of org id is not passed from the ui,
9567 -- and if global flag is set as no
9568 -- and if default org profile is not set then raise not default org is profile
9569
9570 -- if orgid is not sent from the ui and
9571
9572 /*
9573 Org Id is always required for ScanData and Lumpsum offers
9574 */
9575 IF (p_offer_type = 'LUMPSUM'OR p_offer_type = 'SCAN_DATA') THEN
9576 IF (
9577 (
9578 (p_modifier_list_rec.modifier_operation = 'CREATE' )
9579 AND
9580 (p_modifier_list_rec.orig_org_id IS NULL OR p_modifier_list_rec.orig_org_id = FND_API.G_MISS_NUM)
9581 )
9582 OR
9583 (
9584 (p_modifier_list_rec.modifier_operation = 'UPDATE' )
9585 AND
9586 (p_modifier_list_rec.orig_org_id IS NULL)
9587 )
9588 )
9589 THEN
9590 FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
9591 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','ORG_ID');
9592 FND_MSG_PUB.add;
9593 RAISE FND_API.g_exc_error;
9594 END IF;
9595 END IF;
9596
9597 -- nepanda : Fix for Bug 12950967 : need to check if header limit is existing already.
9598 -- If not then send amount_limit_id as g_miss_num so that it will get created
9599 OPEN c_header_limit_exists(l_modifier_list_rec.qp_list_header_id);
9600 FETCH c_header_limit_exists into l_header_limit_exists;
9601 CLOSE c_header_limit_exists;
9602 IF l_header_limit_exists = 0 THEN
9603 l_modifier_list_rec.amount_limit_id := FND_API.g_miss_num ;
9604 END IF;
9605
9606 --dbms_output.put_line('calling process qp_ list header');
9607 process_qp_list_header(
9608 p_api_version => 1.0,
9609 p_init_msg_list => p_init_msg_list,
9610 x_return_status => x_return_status,
9611 x_msg_count => x_msg_count,
9612 x_msg_data => x_msg_data,
9613 p_modifier_list_rec => l_modifier_list_rec,
9614 x_modifier_list_rec => v_modifier_list_rec,
9615 p_old_status_id => l_old_status_id,
9616 p_approval_type => l_approval_required,
9617 p_new_status_code => l_new_status_code
9618 );
9619 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
9620 RAISE Fnd_Api.g_exc_error;
9621 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
9622 RAISE Fnd_Api.g_exc_unexpected_error;
9623 END IF;
9624
9625 debug_message('Operation is is :'|| p_modifier_list_rec.modifier_operation);
9626
9627 IF p_modifier_list_rec.modifier_operation = 'CREATE' THEN
9628 temp_modifier_list_rec.qp_list_header_id := v_modifier_list_rec.qp_list_header_id;
9629 x_qp_list_header_id := v_modifier_list_rec.qp_list_header_id;
9630 temp_modifier_list_rec.offer_code := v_modifier_list_rec.name;
9631
9632 ELSIF p_modifier_list_rec.modifier_operation = 'UPDATE' THEN
9633 IF l_new_status_code = 'ACTIVE' AND p_modifier_list_rec.offer_type = 'VOLUME_OFFER' THEN
9634 ozf_check_dup_prod_pvt.check_dup_prod(
9635 x_return_status => x_return_status
9636 ,x_msg_count => x_msg_count
9637 ,x_msg_data => x_msg_data
9638 ,p_offer_id => l_old_offer_id);
9639
9640 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
9641 RAISE Fnd_Api.g_exc_error;
9642 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
9643 RAISE Fnd_Api.g_exc_unexpected_error;
9644 END IF;
9645 END IF;
9646
9647 IF l_approval_type = 'THEME' THEN
9648 temp_modifier_list_rec.user_status_id := OZF_Utility_PVT.get_default_user_status('OZF_OFFER_STATUS','SUBMITTED_TA');
9649 temp_modifier_list_rec.status_code := 'SUBMITTED_TA';
9650 ELSIF l_approval_type = 'BUDGET' THEN
9651 temp_modifier_list_rec.user_status_id := OZF_Utility_PVT.get_default_user_status('OZF_OFFER_STATUS','PENDING');
9652 temp_modifier_list_rec.status_code := 'PENDING';
9653 -- julou budget w/o approval scenario
9654 ELSIF l_budget_required = 'Y' THEN
9655 IF l_new_status_code = 'ACTIVE' THEN
9656 temp_modifier_list_rec.user_status_id := OZF_Utility_PVT.get_default_user_status('OZF_OFFER_STATUS','PENDING_VALIDATION');
9657 temp_modifier_list_rec.status_code := 'PENDING_VALIDATION';
9658 END IF;
9659 ELSE -- no validation or approval required
9660 IF l_new_status_code = 'ACTIVE' THEN
9661 OPEN c_budget_req_count(temp_modifier_list_rec.qp_list_header_id);
9662 FETCH c_budget_req_count INTO l_budget_req_count;
9663 CLOSE c_budget_req_count;
9664
9665 IF l_budget_req_count = 0 THEN
9666 temp_modifier_list_rec.user_status_id := OZF_Utility_PVT.get_default_user_status('OZF_OFFER_STATUS','ACTIVE');
9667 temp_modifier_list_rec.status_code := 'ACTIVE';
9668 ELSE
9669 OZF_budgetapproval_pvt.budget_request_approval(
9670 p_init_msg_list => FND_API.G_FALSE
9671 ,p_api_version => l_api_version
9672 ,p_commit => FND_API.G_FALSE
9673 ,x_return_status => x_return_status
9674 ,x_msg_count => x_msg_count
9675 ,x_msg_data => x_msg_data
9676 ,p_object_type => 'OFFR'
9677 ,p_object_id => temp_modifier_list_rec.qp_list_header_id
9678 ,x_status_code => l_status_code);
9679
9680 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
9681 RAISE Fnd_Api.g_exc_error;
9682 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
9683 RAISE Fnd_Api.g_exc_unexpected_error;
9684 END IF;
9685
9686 temp_modifier_list_rec.user_status_id := OZF_Utility_PVT.get_default_user_status('OZF_OFFER_STATUS',l_status_code);
9687 temp_modifier_list_rec.status_code := l_status_code;
9688 END IF;
9689 END IF;
9690 -- julou end
9691 END IF;
9692
9693 END IF;
9694
9695 IF p_modifier_list_rec.offer_operation <> FND_API.g_miss_char THEN
9696 process_ozf_offer(
9697 p_api_version => 1.0,
9698 p_init_msg_list => p_init_msg_list,
9699 x_return_status => x_return_status,
9700 x_msg_count => x_msg_count,
9701 x_msg_data => x_msg_data,
9702 p_modifier_list_rec => temp_modifier_list_rec,
9703 x_offer_id => l_offer_id
9704 );
9705
9706 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
9707 RAISE Fnd_Api.g_exc_error;
9708 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
9709 RAISE Fnd_Api.g_exc_unexpected_error;
9710 END IF;
9711 /*
9712 IF l_budget_req_count > 0 THEN
9713 OZF_budgetapproval_pvt.budget_request_approval(
9714 p_init_msg_list => FND_API.G_FALSE
9715 ,p_api_version => l_api_version
9716 ,p_commit => FND_API.G_FALSE
9717 ,x_return_status => x_return_status
9718 ,x_msg_count => x_msg_count
9719 ,x_msg_data => x_msg_data
9720 ,p_object_type => 'OFFR'
9721 ,p_object_id => temp_modifier_list_rec.qp_list_header_id
9722 ,x_status_code => l_status_code);
9723
9724 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
9725 RAISE Fnd_Api.g_exc_error;
9726 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
9727 RAISE Fnd_Api.g_exc_unexpected_error;
9728 END IF;
9729 END IF;
9730 */
9731 -- commented for bug 9115198 .
9732 -- If Offer is activated then Raise business event
9733 /*IF (p_modifier_list_rec.modifier_operation = 'UPDATE') AND (p_modifier_list_rec.user_status_id <> FND_API.g_miss_num)
9734 AND (p_modifier_list_rec.user_status_id <> l_old_status_id)
9735 THEN
9736 raise_offer_event(p_offer_id => temp_modifier_list_rec.qp_list_header_id );
9737 END IF;
9738
9739 debug_message('after raise_offer_event:');*/
9740 -- julou create budget request for scan data offer if initial product line is created
9741 -- julou 12-10-2002 if source from campaign, use campaign id as budget source id
9742 -- and create budget request.
9743 IF temp_modifier_list_rec.source_from_parent = 'Y' THEN
9744 temp_modifier_list_rec.budget_source_id := temp_modifier_list_rec.offer_used_by_id;
9745 temp_modifier_list_rec.budget_source_type := 'CAMP';
9746 END IF;
9747
9748 IF p_offer_type = 'SCAN_DATA' THEN
9749 -- IF get_budget_source_count(p_modifier_list_rec.qp_list_header_id) = 0
9750 -- THEN
9751 -- uncommented by gramanat
9752 OPEN c_offer_budget;
9753 FETCH c_offer_budget INTO temp_modifier_list_rec.budget_source_type, temp_modifier_list_rec.budget_source_id, temp_modifier_list_rec.budget_amount_tc;
9754 CLOSE c_offer_budget;
9755 -- end uncommented by gramanat
9756 debug_message('GR: temp_modifier_list_rec.budget_source_type: ' || temp_modifier_list_rec.budget_source_type);
9757 debug_message('GR: temp_modifier_list_rec.budget_source_id: ' || temp_modifier_list_rec.budget_source_id);
9758
9759 IF temp_modifier_list_rec.budget_source_id IS NOT NULL THEN
9760 IF temp_modifier_list_rec.offer_amount = Fnd_Api.g_miss_num THEN
9761 offer_budget(
9762 p_modifier_list_rec => temp_modifier_list_rec
9763 ,x_return_status => x_return_status
9764 ,x_msg_count => x_msg_count
9765 ,x_msg_data => x_msg_data
9766 ,p_operation => p_modifier_list_rec.modifier_operation
9767 );
9768
9769 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
9770 RAISE Fnd_Api.g_exc_error;
9771 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
9772 RAISE Fnd_Api.g_exc_unexpected_error;
9773 END IF;
9774
9775 -- END IF;
9776 END IF;
9777 END IF;
9778 END IF;
9779 -- julou end
9780
9781 IF p_modifier_list_rec.modifier_operation = 'CREATE' THEN
9782 AMS_CampaignRules_PVT.push_source_code(
9783 temp_modifier_list_rec.offer_code,
9784 'OFFR',
9785 x_qp_list_header_id
9786 );
9787 END IF;
9788
9789 END IF;
9790
9791 IF p_modifier_list_rec.offer_operation = 'UPDATE'
9792 AND p_modifier_list_rec.modifier_operation = 'UPDATE' THEN
9793
9794 IF (p_modifier_list_rec.user_status_id <> FND_API.g_miss_num)
9795 AND (p_modifier_list_rec.user_status_id <> l_old_status_id) THEN
9796
9797
9798 IF l_new_status_code = 'ACTIVE' THEN
9799 -- julou bug 2122722 activating offer w/o discount lines
9800 IF p_modifier_list_rec.offer_type IN ('LUMPSUM','SCAN_DATA') THEN
9801 OPEN c_prod_line;
9802 FETCH c_prod_line INTO l_lines_count;
9803 CLOSE c_prod_line;
9804 ELSIF p_modifier_list_rec.offer_type = 'OID' THEN
9805 OPEN c_prg_buy_count;
9806 FETCH c_prg_buy_count INTO l_prg_buy_count;
9807 CLOSE c_prg_buy_count;
9808
9809 OPEN c_prg_get_count;
9810 FETCH c_prg_get_count INTO l_prg_get_count;
9811 CLOSE c_prg_get_count;
9812
9813 l_lines_count := LEAST(l_prg_buy_count, l_prg_get_count);
9814 ELSIF p_modifier_list_rec.offer_type = 'NET_ACCRUAL' THEN
9815 OPEN c_na_line;
9816 FETCH c_na_line INTO l_lines_count;
9817 CLOSE c_na_line;
9818 ELSIF p_modifier_list_rec.offer_type = 'VOLUME_OFFER' THEN
9819
9820 OPEN c_vo_line(p_modifier_list_rec.qp_list_header_id) ;
9821 FETCH c_vo_line INTO l_lines_count;
9822 CLOSE c_vo_line;
9823
9824 OPEN c_emptyDiscStruct(cp_qpListheaderId => p_modifier_list_rec.qp_list_header_id);
9825 FETCH c_emptyDiscStruct INTO l_emptyDiscStruct;
9826 IF c_emptyDiscStruct%NOTFOUND THEN
9827 l_emptyDiscStruct := NULL;
9828 END IF;
9829 CLOSE c_emptyDiscStruct;
9830 ELSE
9831 OPEN c_list_line;
9832 FETCH c_list_line INTO l_lines_count;
9833 CLOSE c_list_line;
9834 END IF;
9835 debug_message('l_lines_count :'||l_lines_count);
9836
9837 IF l_lines_count = 0 THEN
9838 IF p_modifier_list_rec.custom_setup_id <> 110 THEN
9839 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
9840 FND_MESSAGE.set_name('OZF', 'OZF_OFFR_NO_DISC_LINES');
9841 FND_MSG_PUB.add;
9842 END IF;
9843 RAISE FND_API.g_exc_error;
9844 END IF;
9845 END IF;
9846 -- julou end bug 2122722
9847 -- julou BREQ
9848 IF l_emptyDiscStruct = '1' THEN
9849 FND_MESSAGE.set_name('OZF', 'OZF_OFFR_EMPTY_DISC_STRUCT');
9850 FND_MSG_PUB.add;
9851 RAISE FND_API.g_exc_error;
9852 END IF;
9853
9854
9855 IF l_budget_required = 'Y' THEN
9856 IF get_budget_source_count(p_modifier_list_rec.qp_list_header_id) = 0 THEN
9857 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
9858 FND_MESSAGE.set_name('OZF', 'OZF_OFFR_NO_BUDGET_REQUEST');
9859 FND_MSG_PUB.add;
9860 END IF;
9861 RAISE FND_API.g_exc_error;
9862 END IF;
9863 END IF;
9864
9865 -- validate scan data offer budgets
9866 IF p_modifier_list_rec.offer_type = 'SCAN_DATA' THEN
9867 validate_scandata_budget(p_init_msg_list => FND_API.G_FALSE
9868 ,p_api_version => l_api_version
9869 ,x_return_status => x_return_status
9870 ,x_msg_count => x_msg_count
9871 ,x_msg_data => x_msg_data
9872 ,p_qp_list_header_id => p_modifier_list_rec.qp_list_header_id);
9873
9874 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
9875 RAISE Fnd_Api.g_exc_error;
9876 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
9877 RAISE Fnd_Api.g_exc_unexpected_error;
9878 END IF;
9879 END IF;
9880 END IF;
9881
9882
9883
9884 IF l_approval_type IS NULL THEN
9885 -- budget approval is not required, call budget_request_approval
9886 -- enhancement for budget w/o approval scenario
9887 IF l_budget_required = 'Y' AND l_new_status_code = 'ACTIVE' THEN
9888 IF l_old_status_code <> 'PENDING_ACTIVE' THEN
9889 OZF_budgetapproval_pvt.budget_request_approval(
9890 p_init_msg_list => FND_API.G_FALSE
9891 ,p_api_version => l_api_version
9892 ,p_commit => FND_API.G_FALSE
9893 ,x_return_status => x_return_status
9894 ,x_msg_count => x_msg_count
9895 ,x_msg_data => x_msg_data
9896 ,p_object_type => 'OFFR'
9897 ,p_object_id => p_modifier_list_rec.qp_list_header_id
9898 ,x_status_code => l_status_code);
9899
9900 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
9901 RAISE Fnd_Api.g_exc_error;
9902 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
9903 RAISE Fnd_Api.g_exc_unexpected_error;
9904 END IF;
9905
9906 temp_modifier_list_rec.user_status_id := OZF_Utility_PVT.get_default_user_status('OZF_OFFER_STATUS',l_status_code);
9907 temp_modifier_list_rec.status_code := l_status_code;
9908 END IF;
9909 --julou end BREQ
9910 -- julou handle status depending on recal(handled by activate_offer_over).
9911 -- if active(no product validation is required, 'ACTIVE' is returned directly),
9912 -- need to call activate_offer_over for posting, validation, and updating status.
9913 -- otherwise, budget API will call its CP and activate_offer_over is
9914 -- called inside itself. no further action required here.
9915 -- if from PENDING_ACTIVE to ACTIVE, no budget validation is called.
9916 IF l_old_status_code = 'PENDING_ACTIVE' OR l_status_code = 'ACTIVE' THEN
9917 Activate_Offer_over(
9918 p_init_msg_list => FND_API.G_FALSE
9919 ,p_api_version => l_api_version
9920 ,p_commit => FND_API.G_FALSE
9921 ,x_return_status => x_return_status
9922 ,x_msg_count => x_msg_count
9923 ,x_msg_data => x_msg_data
9924 ,p_called_from => 'R'
9925 ,p_offer_rec => temp_modifier_list_rec
9926 ,x_amount_error => l_amount_error
9927 );
9928 debug_message('Activate_Offer_over :'|| x_return_status);
9929 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
9930 RAISE Fnd_Api.g_exc_error;
9931 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
9932 RAISE Fnd_Api.g_exc_unexpected_error;
9933 END IF;
9934 ELSIF l_status_code = 'DRAFT' THEN
9935 -- CP validation fails. update offer to DRAFT
9936 UPDATE ozf_offers
9937 SET status_code = 'DRAFT'
9938 ,user_status_id = OZF_Utility_PVT.get_default_user_status ('OZF_OFFER_STATUS', 'DRAFT')
9939 ,status_date = SYSDATE
9940 ,object_version_number = object_version_number + 1
9941 WHERE qp_list_header_id = p_modifier_list_rec.qp_list_header_id;
9942 END IF;
9943 END IF;-- end l_budget_required='Y'
9944 ELSIF l_approval_type = 'BUDGET' THEN
9945 IF l_old_status_code <> 'PENDING_ACTIVE' THEN
9946 validate_offer_approval
9947 ( x_return_status => x_return_status
9948 ,x_msg_count => x_msg_count
9949 ,x_msg_data => x_msg_data
9950 ,p_init_msg_list => FND_API.G_FALSE
9951 ,p_modifier_list_rec => p_modifier_list_rec );
9952
9953 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
9954 RAISE Fnd_Api.g_exc_error;
9955 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
9956 RAISE Fnd_Api.g_exc_unexpected_error;
9957 END IF;
9958
9959 ams_approval_pvt.StartProcess(
9960 p_activity_type => 'OFFR',
9961 p_activity_id => p_modifier_list_rec.qp_list_header_id,
9962 p_approval_type => 'BUDGET',
9963 p_object_version_number => p_modifier_list_rec.object_version_number+1,
9964 p_orig_stat_id => l_old_status_id,
9965 p_new_stat_id => p_modifier_list_rec.user_status_id,
9966 p_reject_stat_id => OZF_Utility_PVT.get_default_user_status('OZF_OFFER_STATUS','REJECTED'),
9967 p_requester_userid => OZF_Utility_PVT.get_resource_id(NVL(FND_GLOBAL.user_id,-1)),
9968 p_workflowprocess => 'AMS_APPROVAL',
9969 p_item_type => 'AMSAPRV');
9970 ELSE
9971 Activate_Offer_over(
9972 p_init_msg_list => FND_API.G_FALSE
9973 ,p_api_version => l_api_version
9974 ,p_commit => FND_API.G_FALSE
9975 ,x_return_status => x_return_status
9976 ,x_msg_count => x_msg_count
9977 ,x_msg_data => x_msg_data
9978 ,p_called_from => 'R'
9979 ,p_offer_rec => temp_modifier_list_rec
9980 ,x_amount_error => l_amount_error
9981 );
9982
9983 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
9984 RAISE Fnd_Api.g_exc_error;
9985 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
9986 RAISE Fnd_Api.g_exc_unexpected_error;
9987 END IF;
9988 END IF;
9989 ELSIF l_approval_type = 'THEME' THEN
9990 ams_approval_pvt.StartProcess(
9991 p_activity_type => 'OFFR',
9992 p_activity_id => p_modifier_list_rec.qp_list_header_id,
9993 p_approval_type => 'CONCEPT',
9994 p_object_version_number => p_modifier_list_rec.object_version_number+1,
9995 p_orig_stat_id => l_old_status_id,
9996 p_new_stat_id => p_modifier_list_rec.user_status_id,
9997 p_reject_stat_id => OZF_Utility_PVT.get_default_user_status('OZF_OFFER_STATUS','DENIED_TA'),
9998 p_requester_userid => OZF_Utility_PVT.get_resource_id(NVL(FND_GLOBAL.user_id,-1)),
9999 p_workflowprocess => 'AMS_CONCEPT_APPROVAL',
10000 p_item_type => 'AMSAPRV');
10001 END IF;
10002 END IF;
10003 END IF;
10004
10005
10006 IF (p_modifier_list_rec.modifier_operation ='CREATE')
10007 OR
10008 (p_modifier_list_rec.modifier_operation ='UPDATE' AND get_campaign_count(p_modifier_list_rec.qp_list_header_id) < 1)
10009 THEN
10010 IF p_modifier_list_rec.offer_used_by_id <> Fnd_Api.g_miss_num
10011 AND p_modifier_list_rec.offer_used_by_id IS NOT NULL
10012 THEN
10013
10014 offer_object_usage(
10015 p_modifier_list_rec => temp_modifier_list_rec
10016 ,x_return_status => x_return_status
10017 ,x_msg_count => x_msg_count
10018 ,x_msg_data => x_msg_data
10019 );
10020
10021 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
10022 RAISE Fnd_Api.g_exc_error;
10023 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
10024 RAISE Fnd_Api.g_exc_unexpected_error;
10025 END IF;
10026 END IF;
10027 END IF;
10028
10029
10030
10031 -- RSSHARMA changed condition to attach a budget even in create page
10032 -- julou 12-10-2002 if source from campaign, use campaign id as budget source id
10033 -- and create budget request.
10034 IF p_modifier_list_rec.source_from_parent = 'Y' THEN
10035 temp_modifier_list_rec.budget_source_id := p_modifier_list_rec.offer_used_by_id;
10036 temp_modifier_list_rec.budget_source_type := 'CAMP';
10037 END IF;
10038
10039 IF (p_modifier_list_rec.modifier_operation ='CREATE')
10040 OR
10041 (p_modifier_list_rec.modifier_operation ='UPDATE' AND get_budget_source_count(p_modifier_list_rec.qp_list_header_id) < 1)
10042 THEN
10043 IF (temp_modifier_list_rec.budget_source_id <> Fnd_Api.g_miss_num
10044 AND temp_modifier_list_rec.budget_source_id IS NOT NULL )
10045 AND ( p_modifier_list_rec.offer_amount <> Fnd_Api.g_miss_num
10046 AND p_modifier_list_rec.offer_amount IS NOT NULL
10047 )
10048
10049 THEN
10050 offer_budget(
10051 p_modifier_list_rec => temp_modifier_list_rec
10052 ,x_return_status => x_return_status
10053 ,x_msg_count => x_msg_count
10054 ,x_msg_data => x_msg_data
10055 ,p_operation => p_modifier_list_rec.modifier_operation
10056 );
10057 END IF;
10058 END IF;
10059
10060
10061
10062 -- x_return_status := Fnd_Api.g_ret_sts_error;
10063 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
10064 RAISE Fnd_Api.g_exc_error;
10065 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
10066 RAISE Fnd_Api.g_exc_unexpected_error;
10067 END IF;
10068
10069 debug_message('Offer Type is : '|| p_offer_type);
10070 IF p_offer_type NOT IN ('LUMPSUM','SCAN_DATA', 'VOLUME_OFFER', 'NET_ACCRUAL') THEN
10071 IF( (p_modifier_list_rec.custom_setup_id = 119 AND p_modifier_list_rec.modifier_operation = 'CREATE') OR (p_modifier_list_rec.custom_setup_id <> 119 AND p_modifier_list_rec.modifier_operation IN ('CREATE','UPDATE'))) THEN
10072 IF (p_modifier_list_rec.ql_qualifier_id <> Fnd_Api.g_miss_num
10073 AND p_modifier_list_rec.ql_qualifier_id IS NOT NULL)
10074 OR
10075 (
10076 p_modifier_list_rec.sales_method_flag IS NOT NULL
10077 AND
10078 p_modifier_list_rec.sales_method_flag <> Fnd_Api.g_miss_char
10079 )
10080 THEN
10081 offer_qualifier(
10082 p_modifier_list_rec => temp_modifier_list_rec
10083 ,x_return_status => x_return_status
10084 ,x_msg_count => x_msg_count
10085 ,x_msg_data => x_msg_data
10086 );
10087
10088 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
10089 RAISE Fnd_Api.g_exc_error;
10090 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
10091 RAISE Fnd_Api.g_exc_unexpected_error;
10092 END IF;
10093
10094 END IF; -- ql_qualifier_id is not null
10095
10096 END IF; -- operation
10097 ELSIF p_offer_type = 'NET_ACCRUAL' THEN
10098 IF p_modifier_list_rec.na_qualifier_type IS NOT NULL
10099 AND p_modifier_list_rec.na_qualifier_type <> fnd_api.g_miss_char
10100 AND p_modifier_list_rec.na_qualifier_id IS NOT NULL
10101 AND p_modifier_list_rec.na_qualifier_id <> fnd_api.g_miss_num
10102 THEN
10103 /*
10104 IF p_modifier_list_rec.na_qualifier_type = 'CUSTOMER' THEN
10105 l_na_qual_context := 'CUSTOMER';
10106 l_na_qual_attribute := 'QUALIFIER_ATTRIBUTE2';
10107 ELSIF p_modifier_list_rec.na_qualifier_type = 'CUSTOMER_BILL_TO' THEN
10108 l_na_qual_context := 'CUSTOMER';
10109 l_na_qual_attribute := 'QUALIFIER_ATTRIBUTE14';
10110 ELSIF p_modifier_list_rec.na_qualifier_type = 'BUYER' THEN
10111 l_na_qual_context := 'CUSTOMER_GROUP';
10112 l_na_qual_attribute := 'QUALIFIER_ATTRIBUTE3';
10113 ELSIF p_modifier_list_rec.na_qualifier_type = 'LIST' THEN
10114 l_na_qual_context := 'CUSTOMER_GROUP';
10115 l_na_qual_attribute := 'QUALIFIER_ATTRIBUTE1';
10116 ELSIF p_modifier_list_rec.na_qualifier_type = 'SEGMENT' THEN
10117 l_na_qual_context := 'CUSTOMER_GROUP';
10118 l_na_qual_attribute := 'QUALIFIER_ATTRIBUTE2';
10119 ELSIF p_modifier_list_rec.na_qualifier_type = 'TERRITORY' THEN
10120 l_na_qual_context := 'TERRITORY';
10121 l_na_qual_attribute := 'QUALIFIER_ATTRIBUTE1';
10122 ELSIF p_modifier_list_rec.na_qualifier_type = 'SHIP_TO' THEN
10123 l_na_qual_context := 'CUSTOMER';
10124 l_na_qual_attribute := 'QUALIFIER_ATTRIBUTE11';
10125 END IF;
10126 */
10127 INSERT INTO ozf_offer_qualifiers(
10128 qualifier_id
10129 ,creation_date
10130 ,created_by
10131 ,last_update_date
10132 ,last_updated_by
10133 ,last_update_login
10134 ,qualifier_grouping_no
10135 ,qualifier_context
10136 ,qualifier_attribute
10137 ,qualifier_attr_value
10138 ,start_date_active
10139 ,end_date_active
10140 ,offer_id
10141 ,active_flag
10142 ,object_version_number)
10143 VALUES(
10144 ozf_offer_qualifiers_s.NEXTVAL
10145 ,SYSDATE
10146 ,FND_GLOBAL.user_id
10147 ,SYSDATE
10148 ,FND_GLOBAL.user_id
10149 ,FND_GLOBAL.conc_login_id
10150 ,10
10151 ,NULL--l_na_qual_context
10152 ,p_modifier_list_rec.na_qualifier_type--l_na_qual_attribute
10153 ,TO_CHAR(p_modifier_list_rec.na_qualifier_id)
10154 ,p_modifier_list_rec.start_date_active
10155 ,p_modifier_list_rec.end_date_active
10156 ,l_offer_id
10157 ,'Y'
10158 ,1);
10159 END IF;
10160 ELSIF p_offer_type = 'VOLUME_OFFER' THEN
10161 -- v_modifier_list_rec
10162 l_modifier_list_rec := p_modifier_list_rec;
10163 l_modifier_list_rec.offer_id := l_offer_id;
10164 l_modifier_list_rec.qp_list_header_id := v_modifier_list_rec.qp_list_header_id;
10165 vo_qualifier
10166 (
10167 p_init_msg_list => p_init_msg_list
10168 ,p_api_version => p_api_version
10169 ,p_commit => p_commit
10170 ,x_return_status => x_return_status
10171 ,x_msg_count => x_msg_count
10172 ,x_msg_data => x_msg_data
10173 ,p_modifier_list_rec => l_modifier_list_rec
10174 );
10175
10176 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
10177 RAISE Fnd_Api.g_exc_error;
10178 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
10179 RAISE Fnd_Api.g_exc_unexpected_error;
10180 END IF;
10181
10182
10183 END IF; -- OFFER_TYPE
10184
10185 END IF;
10186 debug_message('p_modifier_line_tbl.COUNT :'|| p_modifier_line_tbl.COUNT);
10187 IF p_modifier_line_tbl.COUNT > 0 THEN
10188 process_qp_list_lines
10189 (
10190 x_return_status => x_return_status,
10191 x_msg_count => x_msg_count,
10192 x_msg_data => x_msg_data,
10193 p_offer_type => p_offer_type,
10194 p_modifier_line_tbl => l_modifier_line_tbl,
10195 p_list_header_id => temp_modifier_list_rec.qp_list_header_id,
10196 x_modifier_line_tbl => v_modifier_line_tbl,
10197 x_error_location => x_error_location
10198 );
10199 debug_message('process_qp_list_lines x_return_status '||x_return_status);
10200 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
10201 RAISE Fnd_Api.g_exc_error;
10202 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
10203 RAISE Fnd_Api.g_exc_unexpected_error;
10204 END IF;
10205
10206
10207 END IF;
10208
10209 IF p_modifier_list_rec.custom_setup_id = 118 THEN
10210 IF p_modifier_list_rec.user_status_id = OZF_Utility_PVT.get_default_user_status('OZF_OFFER_STATUS','DENIED_TA')
10211 OR p_modifier_list_rec.user_status_id = OZF_Utility_PVT.get_default_user_status('OZF_OFFER_STATUS','REJECTED') THEN --
10212
10213
10214 update ozf_sd_request_headers_all_b set user_status_id= OZF_Utility_PVT.get_default_user_status('OZF_SD_REQUEST_STATUS','OFFER_REJECTED')
10215 where offer_id=p_modifier_list_rec.qp_list_header_id;
10216
10217 ELSIF p_modifier_list_rec.user_status_id = OZF_Utility_PVT.get_default_user_status('OZF_OFFER_STATUS','ACTIVE') THEN
10218
10219 update ozf_sd_request_headers_all_b set user_status_id= OZF_Utility_PVT.get_default_user_status('OZF_SD_REQUEST_STATUS','ACTIVE')
10220 where offer_id= p_modifier_list_rec.qp_list_header_id;
10221
10222 END IF;
10223 END IF;
10224
10225 Fnd_Msg_Pub.Count_AND_Get
10226 ( p_count => x_msg_count,
10227 p_data => x_msg_data,
10228 p_encoded => Fnd_Api.G_FALSE
10229 );
10230 IF p_commit = Fnd_Api.g_true THEN
10231 COMMIT WORK;
10232 END IF;
10233 EXCEPTION
10234 WHEN Fnd_Api.G_EXC_ERROR THEN
10235 x_return_status := Fnd_Api.g_ret_sts_error ;
10236 ROLLBACK TO process_modifiers;
10237 Fnd_Msg_Pub.Count_AND_Get
10238 ( p_count => x_msg_count,
10239 p_data => x_msg_data,
10240 p_encoded => Fnd_Api.G_FALSE
10241 );
10242 WHEN Fnd_Api.G_EXC_UNEXPECTED_ERROR THEN
10243 x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
10244 ROLLBACK TO process_modifiers;
10245 Fnd_Msg_Pub.Count_AND_Get
10246 ( p_count => x_msg_count,
10247 p_data => x_msg_data,
10248 p_encoded => Fnd_Api.G_FALSE
10249 );
10250 WHEN OTHERS THEN
10251 x_return_status := Fnd_Api.g_ret_sts_unexp_erroR ;
10252 ROLLBACK TO process_modifiers;
10253 IF Fnd_Msg_Pub.Check_Msg_Level ( Fnd_Msg_Pub.G_MSG_LVL_UNEXP_ERROR )
10254 THEN
10255 Fnd_Msg_Pub.Add_Exc_Msg( G_PKG_NAME,l_api_name);
10256 END IF;
10257 Fnd_Msg_Pub.Count_AND_Get
10258 ( p_count => x_msg_count,
10259 p_data => x_msg_data,
10260 p_encoded => Fnd_Api.G_FALSE
10261 );
10262 END;
10263
10264
10265 /*
10266 remaning character or string buffer too small in relate_qp_ozf_for_vo procedure
10267 */
10268
10269
10270
10271 /*
10272 LOgic for buliding relations
10273 1. Discounts
10274 relations for discounts(ozf_discount_lines and qp_list_lines) are stored only if the OZF Products that have apply discount = y.
10275
10276 If the OZF Product has apply discount = n (which may be a discount or an exclusion) and is not an exclusion
10277 then a single qp discount line with list line type code DIS and 0% discount is created.
10278 -- This line can be related to the ozf_product since the ozf product in this case has a one to one relation with qp pricing attribute.
10279 If the ozf product is an exclusion no qp_list_line is created for it. A qp pricing attribute is created for every PBH discount line created for the ozf discount line.
10280
10281 2. Products.
10282 Relations between ozf products and qp products ie ozf_discount_products and qp_pricing_attributes are stored for every product irrespective of the apply discount flag or the include volume flag
10283 */
10284
10285
10286 --===================================Push Discount Rules to QP===========================
10287 PROCEDURE populatePricingAttr
10288 (
10289 x_return_status OUT NOCOPY VARCHAR2
10290 ,x_msg_count OUT NOCOPY NUMBER
10291 ,x_msg_data OUT NOCOPY VARCHAR2
10292 , p_qp_list_header_id IN NUMBER
10293 , p_offDiscountProductId IN NUMBER
10294 , x_pricingAttrRec OUT NOCOPY Qp_Modifiers_Pub.pricing_attr_Rec_type
10295 )
10296 IS
10297 CURSOR c_products(cp_offDiscountProductId NUMBER)IS
10298 SELECT a.offer_discount_line_id
10299 , a.product_context
10300 , a.product_attribute
10301 , a.product_attr_value
10302 , a.apply_discount_flag
10303 , a.include_volume_flag
10304 , a.excluder_flag
10305 , b.volume_break_type
10306 , b.volume_type
10307 , b.discount_type
10308 , b.uom_code
10309 FROM ozf_offer_discount_products a, ozf_offer_discount_lines b
10310 WHERE a.offer_discount_line_id = b.offer_discount_line_id
10311 AND a.off_discount_product_id = cp_offDiscountProductId;
10312 BEGIN
10313 x_return_status := FND_API.G_RET_STS_SUCCESS;
10314 FOR l_products IN c_products(cp_offDiscountProductId => p_offDiscountProductId) LOOP
10315 x_pricingAttrRec.product_attribute_context := l_products.product_context;
10316 x_pricingAttrRec.product_attribute := l_products.product_attribute;
10317 x_pricingAttrRec.product_attr_value := l_products.product_attr_value;
10318 x_pricingAttrRec.product_uom_code := l_products.uom_code;
10319 x_pricingAttrRec.pricing_attribute_context := 'VOLUME';
10320 x_pricingAttrRec.pricing_attribute := l_products.volume_type;
10321 x_pricingAttrRec.comparison_operator_code := 'BETWEEN';
10322 -- x_pricingAttrRec.modifiers_index := i;
10323 x_pricingAttrRec.operation := Qp_Globals.G_OPR_CREATE;
10324 END LOOP;
10325 END populatePricingAttr;
10326
10327 FUNCTION getVOAccrualFlag
10328 (
10329 p_qpListHeaderId IN NUMBER
10330 ) RETURN VARCHAR2 IS
10331 CURSOR c_accrualFlag(cp_qpListHeaderId NUMBER) IS
10332 SELECT decode( VOLUME_OFFER_TYPE, 'ACCRUAL','Y','N')
10333 FROM ozf_offers
10334 WHERE qp_list_header_id = cp_qpListHeaderId;
10335 l_accrualFlag VARCHAR2(1);
10336 BEGIN
10337 OPEN c_accrualFlag(cp_qpListHeaderId => p_qpListHeaderId);
10338 FETCH c_accrualFlag INTO l_accrualFlag;
10339 IF c_accrualFlag%NOTFOUND THEN
10340 l_accrualFlag := 'Y';
10341 END IF;
10342 CLOSE c_accrualFlag;
10343 RETURN l_accrualFlag;
10344 END getVOAccrualFlag;
10345
10346 FUNCTION getDiscountLineId
10347 (
10348 p_offDiscountProductId IN NUMBER
10349 )
10350 RETURN NUMBER IS
10351 CURSOR c_discountLineId(cp_offDiscountProductId NUMBER) IS
10352 SELECT offer_discount_line_id
10353 FROM ozf_offer_discount_products
10354 WHERE off_discount_product_id = cp_offDiscountProductId ;
10355 l_discountLineId ozf_offer_discount_lines.offer_discount_line_id%TYPE;
10356 BEGIN
10357 OPEN c_discountLineId(cp_offDiscountProductId => p_offDiscountProductId);
10358 FETCH c_discountLineId INTO l_discountLineId;
10359 IF c_discountLineId%NOTFOUND THEN
10360 l_discountLineId := null;
10361 END IF;
10362 CLOSE c_discountLineId;
10363 return l_discountLineId;
10364 END getDiscountLineId;
10365
10366 PROCEDURE populatePBHRec
10367 (
10368 x_return_status OUT NOCOPY VARCHAR2
10369 ,x_msg_count OUT NOCOPY NUMBER
10370 ,x_msg_data OUT NOCOPY VARCHAR2
10371 ,x_modifiersRec OUT NOCOPY Qp_Modifiers_Pub.modifiers_rec_type
10372 ,p_offDiscountProductId IN NUMBER
10373 , p_qpListHeaderId IN NUMBER
10374 )
10375 IS
10376 BEGIN
10377 x_return_status := FND_API.G_RET_STS_SUCCESS;
10378 x_modifiersRec.operation := QP_GLOBALS.G_OPR_CREATE;
10379 x_modifiersRec.list_header_id := p_qpListHeaderId;
10380 x_modifiersRec.list_line_type_code := 'PBH';
10381 x_modifiersRec.proration_type_code := 'N';
10382 x_modifiersRec.product_precedence := FND_PROFILE.value('OZF_PRODUCT_PRECEDENCE');
10383 x_modifiersRec.incompatibility_grp_code := FND_PROFILE.value('OZF_INCOMPATIBILITY_GROUP');
10384 x_modifiersRec.print_on_invoice_flag := 'Y';
10385 x_modifiersRec.pricing_phase_id := getPricingPhase(p_listHeaderId => p_qpListHeaderId);
10386 x_modifiersRec.modifier_level_code := getDiscountLevel(p_listHeaderId => p_qpListHeaderId);
10387 x_modifiersRec.automatic_flag := 'Y';
10388 x_modifiersRec.price_break_type_code := 'RANGE';
10389 x_modifiersRec.accum_attribute := 'PRICING_ATTRIBUTE19';
10390 x_modifiersRec.accrual_flag := getVOAccrualFlag(p_qpListHeaderId => p_qpListHeaderId );
10391 IF getDiscountLevel(p_listHeaderId => p_qpListHeaderId) <> 'ORDER' THEN
10392 x_modifiersRec.pricing_group_sequence := FND_PROFILE.value('OZF_PRICING_GROUP_SEQUENCE');
10393 END IF;
10394 x_modifiersRec.attribute1 := getDiscountLineId(p_offDiscountProductId => p_offDiscountProductId);
10395 END populatePBHRec;
10396
10397
10398 PROCEDURE populateZeroDiscounts
10399 (
10400 x_return_status OUT NOCOPY VARCHAR2
10401 ,x_msg_count OUT NOCOPY NUMBER
10402 ,x_msg_data OUT NOCOPY VARCHAR2
10403 ,x_modifiersRec OUT NOCOPY Qp_Modifiers_Pub.modifiers_rec_type
10404 , p_qpListHeaderId IN NUMBER
10405 , p_offDiscountProductId IN NUMBER
10406 )
10407 IS
10408 CURSOR c_discounts( cp_offDiscountProductId NUMBER) IS
10409 SELECT a.volume_break_type
10410 , a.discount_type
10411 FROM ozf_offer_discount_lines a, ozf_offer_discount_products b
10412 WHERE a.offer_discount_line_id = b.offer_discount_line_id
10413 AND b.off_discount_product_id = cp_offDiscountProductId;
10414 BEGIN
10415 x_return_status := FND_API.G_RET_STS_SUCCESS;
10416 FOR l_discounts IN c_discounts(cp_offDiscountProductId => p_offDiscountProductId) LOOP
10417 x_modifiersRec.operation := QP_GLOBALS.G_OPR_CREATE;
10418 x_modifiersRec.list_header_id := p_qpListHeaderId;
10419 x_modifiersRec.accrual_flag := getVOAccrualFlag(p_qpListHeaderId => p_qpListHeaderId );
10420 x_modifiersRec.list_line_type_code := 'DIS';
10421 x_modifiersRec.proration_type_code := 'N';
10422 x_modifiersRec.product_precedence := FND_PROFILE.value('OZF_PRODUCT_PRECEDENCE');
10423 x_modifiersRec.print_on_invoice_flag := 'Y';
10424 x_modifiersRec.pricing_phase_id := getPricingPhase(p_listHeaderId => p_qpListHeaderId );
10425 x_modifiersRec.modifier_level_code := getDiscountLevel(p_listHeaderId => p_qpListHeaderId );
10426 x_modifiersRec.automatic_flag := 'Y';
10427 x_modifiersRec.price_break_type_code := l_discounts.volume_break_type;
10428 x_modifiersRec.arithmetic_operator := l_discounts.discount_type;
10429 x_modifiersRec.operand := 0;
10430 x_modifiersRec.price_by_formula_id := null;
10431 -- x_modifiersRec.modifiers_index := k;
10432 x_modifiersRec.rltd_modifier_grp_type := 'PRICE BREAK';
10433 x_modifiersRec.rltd_modifier_grp_no := 1;
10434 x_modifiersRec.modifier_parent_index := 1;
10435 IF getDiscountLevel(p_listHeaderId => p_qpListHeaderId ) <> 'ORDER' THEN
10436 x_modifiersRec.pricing_group_sequence := FND_PROFILE.value('OZF_PRICING_GROUP_SEQUENCE');
10437 END IF;
10438 x_modifiersRec.attribute1 := -1; -- for later identification
10439 END LOOP;
10440 END populateZeroDiscounts;
10441 PROCEDURE populateRegularDiscounts
10442 (
10443 x_return_status OUT NOCOPY VARCHAR2
10444 ,x_msg_count OUT NOCOPY NUMBER
10445 ,x_msg_data OUT NOCOPY VARCHAR2
10446 ,x_modifiersRec OUT NOCOPY Qp_Modifiers_Pub.modifiers_rec_type
10447 ,p_offerDiscountLineId IN NUMBER
10448 , p_qpListHeaderId IN NUMBER
10449 , p_offDiscountProductId IN NUMBER
10450 )
10451 IS
10452 CURSOR c_discounts(cp_offerDiscountLineId NUMBER , cp_offDiscountProductId NUMBER) IS
10453 SELECT decode(c.apply_discount_flag, 'N',0,a.discount) discount
10454 , decode(c.apply_discount_flag, 'N',null,a.formula_id) formula_id
10455 , b.volume_break_type
10456 , b.discount_type
10457 FROM ozf_offer_discount_lines a, ozf_offer_discount_lines b, ozf_offer_discount_products c
10458 WHERE a.parent_discount_line_id = b.offer_discount_line_id
10459 AND b.offer_discount_line_id = c.offer_discount_line_id
10460 AND c.excluder_flag = 'N'
10461 AND c.off_discount_product_id = cp_offDiscountProductId
10462 AND a.offer_discount_line_id = cp_offerDiscountLineId;
10463
10464 BEGIN
10465 x_return_status := FND_API.G_RET_STS_SUCCESS;
10466 FOR l_discounts IN c_discounts(cp_offerDiscountLineId => p_offerDiscountLineId , cp_offDiscountProductId => p_offDiscountProductId) LOOP
10467 x_modifiersRec.operation := QP_GLOBALS.G_OPR_CREATE;
10468 x_modifiersRec.list_header_id := p_qpListHeaderId;
10469 x_modifiersRec.accrual_flag := getVOAccrualFlag(p_qpListHeaderId => p_qpListHeaderId );
10470 x_modifiersRec.list_line_type_code := 'DIS';
10471 x_modifiersRec.proration_type_code := 'N';
10472 x_modifiersRec.product_precedence := FND_PROFILE.value('OZF_PRODUCT_PRECEDENCE');
10473 x_modifiersRec.print_on_invoice_flag := 'Y';
10474 x_modifiersRec.pricing_phase_id := getPricingPhase(p_listHeaderId => p_qpListHeaderId );
10475 x_modifiersRec.modifier_level_code := getDiscountLevel(p_listHeaderId => p_qpListHeaderId );
10476 x_modifiersRec.automatic_flag := 'Y';
10477 x_modifiersRec.price_break_type_code := l_discounts.volume_break_type;
10478 x_modifiersRec.arithmetic_operator := l_discounts.discount_type;
10479 x_modifiersRec.operand := l_discounts.discount;
10480 x_modifiersRec.price_by_formula_id := l_discounts.formula_id;
10481 -- x_modifiersRec.modifiers_index := k;
10482 x_modifiersRec.rltd_modifier_grp_type := 'PRICE BREAK';
10483 x_modifiersRec.rltd_modifier_grp_no := 1;
10484 x_modifiersRec.modifier_parent_index := 1;
10485 x_modifiersRec.attribute1 := p_offerDiscountLineId; -- for later identification
10486 IF getDiscountLevel(p_listHeaderId => p_qpListHeaderId ) <> 'ORDER' THEN
10487 x_modifiersRec.pricing_group_sequence := FND_PROFILE.value('OZF_PRICING_GROUP_SEQUENCE');
10488 END IF;
10489 END LOOP;
10490 END populateRegularDiscounts;
10491
10492 FUNCTION getMinVolume
10493 (
10494 p_offDiscountProductId NUMBER
10495 )
10496 RETURN NUMBER
10497 IS
10498 CURSOR c_minVolume(cp_offDiscountProductId NUMBER) IS
10499 SELECT min(volume_from)
10500 FROM ozf_offer_discount_lines a, ozf_offer_discount_products b
10501 WHERE a.parent_discount_line_id = b.offer_discount_line_id
10502 AND b.off_discount_product_id = cp_offDiscountProductId;
10503
10504 l_minVolume OZF_OFFER_DISCOUNT_LINES.volume_from%TYPE;
10505 BEGIN
10506 OPEN c_minVolume(cp_offDiscountProductId => p_offDiscountProductId);
10507 FETCH c_minVolume INTO l_minVolume;
10508 IF c_minVolume%NOTFOUND THEN
10509 l_minVolume := null;
10510 END IF;
10511 CLOSE c_minVolume;
10512 return l_minVolume;
10513 END getMinVolume;
10514
10515 PROCEDURE populateDISData
10516 (
10517 x_return_status OUT NOCOPY VARCHAR2
10518 ,x_msg_count OUT NOCOPY NUMBER
10519 ,x_msg_data OUT NOCOPY VARCHAR2
10520 , x_modifiersTbl OUT NOCOPY Qp_Modifiers_Pub.modifiers_tbl_type
10521 , p_offDiscountProductId IN NUMBER
10522 , p_qpListHeaderId IN NUMBER
10523 )
10524 IS
10525 CURSOR c_discounts(cp_offerDiscountProductId NUMBER) IS
10526 SELECT a.offer_discount_line_id
10527 FROM ozf_offer_discount_lines a, ozf_offer_discount_products b
10528 WHERE a.parent_discount_line_id = b.offer_discount_line_id
10529 AND b.off_discount_product_id = cp_offerDiscountProductId;
10530 i NUMBER;
10531 BEGIN
10532 -- initialize
10533 -- loop thru all discounts records
10534 -- populate regular discount data
10535 -- process for apply discount flag
10536 x_return_status := FND_API.G_RET_STS_SUCCESS;
10537 i := 1;
10538 IF getMinVolume(p_offDiscountProductId => p_offDiscountProductId) <> 0 THEN
10539 populateZeroDiscounts
10540 (
10541 x_return_status => x_return_status
10542 ,x_msg_count => x_msg_count
10543 ,x_msg_data => x_msg_data
10544 , x_modifiersRec => x_modifiersTbl(i)
10545 , p_qpListHeaderId => p_qpListHeaderId
10546 , p_offDiscountProductId => p_offDiscountProductId
10547 );
10548 i := i + 1;
10549 END IF;
10550
10551 FOR l_discounts in c_discounts(cp_offerDiscountProductId => p_offDiscountProductId) LOOP
10552 populateRegularDiscounts
10553 (
10554 x_return_status => x_return_status
10555 ,x_msg_count => x_msg_count
10556 ,x_msg_data => x_msg_data
10557 , x_modifiersRec => x_modifiersTbl(i)
10558 , p_offerDiscountLineId => l_discounts.offer_discount_line_id
10559 , p_qpListHeaderId => p_qpListHeaderId
10560 , p_offDiscountProductId => p_offDiscountProductId
10561 );
10562 i := i +1;
10563 END LOOP;
10564 END populateDISData;
10565
10566
10567 PROCEDURE populateModifiers
10568 (
10569 x_return_status OUT NOCOPY VARCHAR2
10570 ,x_msg_count OUT NOCOPY NUMBER
10571 ,x_msg_data OUT NOCOPY VARCHAR2
10572 , p_qp_list_header_id IN NUMBER
10573 , p_offDiscountProductId IN NUMBER
10574 , x_modifiersTbl OUT NOCOPY Qp_Modifiers_Pub.modifiers_tbl_type
10575 )
10576 IS
10577 l_modifiersRec Qp_Modifiers_Pub.modifiers_rec_type;
10578 l_modifiersTbl Qp_Modifiers_Pub.modifiers_tbl_type;
10579 v_modifiersTbl Qp_Modifiers_Pub.modifiers_tbl_type;
10580 i NUMBER;
10581 BEGIN
10582 -- initialize
10583 -- populate PBH data
10584 -- populate DIS data
10585 x_return_status := FND_API.G_RET_STS_SUCCESS;
10586 populatePBHRec
10587 (
10588 x_return_status => x_return_status
10589 ,x_msg_count => x_msg_count
10590 ,x_msg_data => x_msg_data
10591 , x_modifiersRec => l_modifiersRec
10592 , p_qpListHeaderId => p_qp_list_header_id
10593 , p_offDiscountProductId => p_offDiscountProductId
10594 );
10595 IF x_return_status = FND_API.G_RET_STS_ERROR THEN
10596 RAISE FND_API.G_EXC_ERROR;
10597 ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
10598 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10599 END IF;
10600 populateDISData
10601 (
10602 x_return_status => x_return_status
10603 ,x_msg_count => x_msg_count
10604 ,x_msg_data => x_msg_data
10605 , x_modifiersTbl => v_modifiersTbl
10606 , p_qpListHeaderId => p_qp_list_header_id
10607 , p_offDiscountProductId => p_offDiscountProductId
10608 );
10609 IF x_return_status = FND_API.G_RET_STS_ERROR THEN
10610 RAISE FND_API.G_EXC_ERROR;
10611 ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
10612 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10613 END IF;
10614
10615 x_modifiersTbl(1) := l_modifiersRec;
10616 i := 2;
10617 IF nvl(v_modifiersTbl.count,0) > 0 THEN
10618 FOR j in v_modifiersTbl.first .. v_modifiersTbl.last LOOP
10619 IF v_modifiersTbl.exists(j) THEN
10620 x_modifiersTbl(i) := v_modifiersTbl(j);
10621 i := i+1;
10622 END IF;
10623 END LOOP;
10624 END IF;
10625 END populateModifiers;
10626
10627 PROCEDURE processPricingAttr
10628 (
10629 x_return_status OUT NOCOPY VARCHAR2
10630 ,x_msg_count OUT NOCOPY NUMBER
10631 ,x_msg_data OUT NOCOPY VARCHAR2
10632 ,x_pricingAttrRec IN OUT NOCOPY Qp_Modifiers_Pub.pricing_attr_Rec_type
10633 ,p_offerDiscountLineId IN NUMBER
10634 ,p_offDiscountProductId IN NUMBER
10635 )
10636 IS
10637 CURSOR c_volume(cp_offerDiscountLineId NUMBER) IS
10638 SELECT volume_from, volume_to
10639 FROM ozf_offer_discount_lines
10640 WHERE offer_discount_line_id = cp_offerDiscountLineId ;
10641 BEGIN
10642 x_return_status := FND_API.G_RET_STS_SUCCESS;
10643 IF p_offerDiscountLineId = -1 THEN
10644 x_pricingAttrRec.pricing_attr_value_from := 0;
10645 x_pricingAttrRec.pricing_attr_value_to := getMinVolume(p_offDiscountProductId => p_offDiscountProductId);
10646 ELSE
10647 FOR l_volume IN c_volume(cp_offerDiscountLineId => to_number(p_offerDiscountLineId)) LOOP
10648 x_pricingAttrRec.pricing_attr_value_from := l_volume.volume_from;
10649 x_pricingAttrRec.pricing_attr_value_to := l_volume.volume_to;
10650 END LOOP;
10651 END IF;
10652 END processPricingAttr;
10653
10654 PROCEDURE processData
10655 (
10656 x_return_status OUT NOCOPY VARCHAR2
10657 ,x_msg_count OUT NOCOPY NUMBER
10658 ,x_msg_data OUT NOCOPY VARCHAR2
10659 , x_modifiersTbl IN Qp_Modifiers_Pub.modifiers_tbl_type
10660 , x_pricingAttrTbl IN OUT NOCOPY Qp_Modifiers_Pub.pricing_attr_tbl_type
10661 , x_pricingAttrRec IN Qp_Modifiers_Pub.pricing_attr_Rec_type
10662 , p_offDiscountProductId IN NUMBER
10663 )
10664 IS
10665 BEGIN
10666 -- initialise
10667 -- loop thru modifiers tbl
10668 --- for list_line_type_code = PBH simply assign the pricing attr rec
10669 -- for list_line_type_code = DIS populate the volume from and volume to in the pricing attr table
10670 x_return_status := FND_API.G_RET_STS_SUCCESS;
10671 IF nvl(x_modifiersTbl.count,0) > 0 THEN
10672 FOR i in x_modifiersTbl.first .. x_modifiersTbl.last LOOP
10673 IF x_modifiersTbl.exists(i) THEN
10674 x_pricingAttrTbl(i) := x_pricingAttrRec;
10675 x_pricingAttrTbl(i).modifiers_index := i;
10676 IF x_modifiersTbl(i).list_line_type_code = 'DIS' THEN
10677 processPricingAttr
10678 (
10679 x_return_status => x_return_status
10680 ,x_msg_count => x_msg_count
10681 ,x_msg_data => x_msg_data
10682 ,p_offerDiscountLineId => to_number(x_modifiersTbl(i).attribute1)
10683 , p_offDiscountProductId => p_offDiscountProductId
10684 ,x_pricingAttrRec => x_pricingAttrTbl(i)
10685 );
10686 IF x_return_status = FND_API.G_RET_STS_ERROR THEN
10687 RAISE FND_API.G_EXC_ERROR;
10688 ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
10689 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10690 END IF;
10691 END IF;
10692 END IF;
10693 END LOOP;
10694 END IF;
10695 END processData;
10696
10697 PROCEDURE populateExclusions
10698 (
10699 x_return_status OUT NOCOPY VARCHAR2
10700 ,x_msg_count OUT NOCOPY NUMBER
10701 ,x_msg_data OUT NOCOPY VARCHAR2
10702 , p_qpListHeaderId IN NUMBER
10703 , x_pricingAttrTbl IN OUT NOCOPY Qp_Modifiers_Pub.pricing_attr_tbl_type
10704 )
10705 IS
10706 CURSOR c_exclusions(cp_qpListHeaderId IN NUMBER) IS
10707 SELECT a.product_attribute, a.product_attr_value, a.excluder_flag
10708 FROM ozf_offer_discount_products a, ozf_offers b
10709 WHERE a.offer_id = b.offer_id
10710 AND a.excluder_flag = 'Y'
10711 AND b.qp_list_header_id = cp_qpListHeaderId;
10712 i NUMBER;
10713 BEGIN
10714 x_return_status := FND_API.G_RET_STS_SUCCESS;
10715 i := nvl(x_pricingAttrTbl.count,0) +1;
10716 FOR l_exclusions IN c_exclusions(cp_qpListHeaderId => p_qpListHeaderId) LOOP
10717 x_pricingAttrTbl(i).product_attribute_context := 'ITEM';
10718 x_pricingAttrTbl(i).product_attribute := l_exclusions.product_attribute;
10719 x_pricingAttrTbl(i).product_attr_value:= l_exclusions.product_attr_value;
10720 x_pricingAttrTbl(i).excluder_flag := l_exclusions.excluder_flag;
10721 x_pricingAttrTbl(i).modifiers_index := 1;
10722 x_pricingAttrTbl(i).operation := QP_GLOBALS.G_OPR_CREATE;
10723 i := i + 1;
10724 END LOOP;
10725 END populateExclusions;
10726
10727
10728 PROCEDURE relateOzfQpDiscounts
10729 (
10730 x_return_status OUT NOCOPY VARCHAR2
10731 ,x_msg_count OUT NOCOPY NUMBER
10732 ,x_msg_data OUT NOCOPY VARCHAR2
10733 ,p_modifiersTbl IN qp_modifiers_pub.modifiers_tbl_type
10734 )
10735 IS
10736 l_discRec OZF_QP_DISCOUNTS_PVT.qp_discount_rec_type;
10737 l_qpDiscountId NUMBER;
10738 BEGIN
10739 x_return_status := FND_API.G_RET_STS_SUCCESS;
10740 IF nvl(p_modifiersTbl.count,0) > 0 THEN
10741 FOR i in p_modifiersTbl.first .. p_modifiersTbl.last LOOP
10742 IF p_modifiersTbl.exists(i) THEN
10743 IF p_modifiersTbl(i).attribute1 <> '-1' THEN
10744 l_discRec.list_line_id := p_modifiersTbl(i).list_line_id;
10745 l_discRec.offer_discount_line_id := to_number(p_modifiersTbl(i).attribute1);
10746 OZF_QP_DISCOUNTS_PVT.Create_ozf_qp_discount
10747 (
10748 p_api_version_number => 1.0
10749 , p_init_msg_list => FND_API.G_FALSE
10750 , p_commit => FND_API.G_FALSE
10751 , p_validation_level => FND_API.G_VALID_LEVEL_FULL
10752 , x_return_status => x_return_status
10753 , x_msg_count => x_msg_count
10754 , x_msg_data => x_msg_data
10755 , p_qp_disc_rec => l_discRec
10756 , x_qp_discount_id => l_qpDiscountId
10757 );
10758 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10759 return;
10760 END IF;
10761 END IF;
10762 END IF;
10763 END LOOP;
10764 END IF;
10765 END relateOzfQpDiscounts;
10766
10767 PROCEDURE relateOzfQpProducts
10768 (
10769 x_return_status OUT NOCOPY VARCHAR2
10770 ,x_msg_count OUT NOCOPY NUMBER
10771 ,x_msg_data OUT NOCOPY VARCHAR2
10772 ,p_pricingAttrTbl IN qp_modifiers_pub.pricing_attr_tbl_type
10773 ,p_offDiscountProductId IN NUMBER
10774 )
10775 IS
10776 l_prodRec OZF_QP_PRODUCTS_PVT.qp_product_rec_type;
10777 l_qpProductId NUMBER;
10778 BEGIN
10779 x_return_status := FND_API.G_RET_STS_SUCCESS;
10780 IF nvl(p_pricingAttrTbl.count,0) > 0 THEN
10781 FOR i in p_pricingAttrTbl.first .. p_pricingAttrTbl.last LOOP
10782 IF p_pricingAttrTbl.exists(i) THEN
10783 IF p_pricingAttrTbl(i).excluder_flag <> 'Y' THEN
10784 l_prodRec.pricing_attribute_id := p_pricingAttrTbl(i).pricing_attribute_id;
10785 l_prodRec.off_discount_product_id := p_offDiscountProductId;
10786 OZF_QP_PRODUCTS_PVT.Create_ozf_qp_product
10787 (
10788 p_api_version_number => 1.0
10789 , p_init_msg_list => FND_API.G_FALSE
10790 , p_commit => FND_API.G_FALSE
10791 , p_validation_level => FND_API.G_VALID_LEVEL_FULL
10792 , x_return_status => x_return_status
10793 , x_msg_count => x_msg_count
10794 , x_msg_data => x_msg_data
10795 , p_qp_product_rec => l_prodRec
10796 , x_qp_product_id => l_qpProductId
10797 );
10798 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10799 return;
10800 END IF;
10801 END IF;
10802 END IF;
10803 END LOOP;
10804 END IF;
10805 END relateOzfQpProducts;
10806
10807 PROCEDURE relateOzfQp
10808 (
10809 x_return_status OUT NOCOPY VARCHAR2
10810 ,x_msg_count OUT NOCOPY NUMBER
10811 ,x_msg_data OUT NOCOPY VARCHAR2
10812 ,p_modifiersTbl IN qp_modifiers_pub.modifiers_tbl_type
10813 ,p_pricingAttrTbl IN qp_modifiers_pub.pricing_attr_tbl_type
10814 ,p_offDiscountProductId IN NUMBER
10815 )
10816 IS
10817 BEGIN
10818 -- initialize
10819 -- relate discounts
10820 -- relate products
10821 x_return_status := FND_API.G_RET_STS_SUCCESS;
10822 relateOzfQpDiscounts
10823 (
10824 x_return_status => x_return_status
10825 ,x_msg_count => x_msg_count
10826 ,x_msg_data => x_msg_data
10827 ,p_modifiersTbl => p_modifiersTbl
10828 );
10829 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10830 RETURN;
10831 END IF;
10832 relateOzfQpProducts
10833 (
10834 x_return_status => x_return_status
10835 ,x_msg_count => x_msg_count
10836 ,x_msg_data => x_msg_data
10837 ,p_pricingAttrTbl => p_pricingAttrTbl
10838 ,p_offDiscountProductId => p_offDiscountProductId
10839 );
10840 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10841 RETURN;
10842 END IF;
10843 END relateOzfQp;
10844
10845 PROCEDURE pushDiscountRuleToQp
10846 (
10847 x_return_status OUT NOCOPY VARCHAR2
10848 ,x_msg_count OUT NOCOPY NUMBER
10849 ,x_msg_data OUT NOCOPY VARCHAR2
10850 , p_qp_list_header_id IN NUMBER
10851 , p_offDiscountProductId IN NUMBER
10852 , x_error_location OUT NOCOPY NUMBER
10853 , x_modifiersTbl OUT NOCOPY Qp_Modifiers_Pub.modifiers_tbl_type
10854 , x_pricingAttrTbl OUT NOCOPY Qp_Modifiers_Pub.pricing_attr_tbl_type
10855 )
10856 IS
10857 l_pricingAttrTbl Qp_Modifiers_Pub.pricing_attr_tbl_type;
10858 l_pricingAttrRec Qp_Modifiers_Pub.pricing_attr_Rec_type;
10859 l_modifiersTbl Qp_Modifiers_Pub.modifiers_tbl_type;
10860
10861 v_modifier_list_rec qp_modifiers_pub.modifier_list_rec_type;
10862 v_modifier_list_val_rec qp_modifiers_pub.modifier_list_val_rec_type;
10863 v_modifiers_tbl qp_modifiers_pub.modifiers_tbl_type;
10864 v_modifiers_val_tbl qp_modifiers_pub.modifiers_val_tbl_type;
10865 v_qualifiers_tbl qp_qualifier_rules_pub.qualifiers_tbl_type;
10866 v_qualifiers_val_tbl qp_qualifier_rules_pub.qualifiers_val_tbl_type;
10867 v_pricing_attr_tbl qp_modifiers_pub.pricing_attr_tbl_type;
10868 v_pricing_attr_val_tbl qp_modifiers_pub.pricing_attr_val_tbl_type;
10869 l_control_rec qp_globals.control_rec_type;
10870 BEGIN
10871 -- initialize
10872 -- for the product populate pricing attribute
10873 -- populate discount structure
10874 -- assign modifier index to each pricing attribute rec
10875 -- push data to QP
10876 -- process errors
10877 x_return_status := FND_API.G_RET_STS_SUCCESS;
10878 populatePricingAttr
10879 (
10880 x_return_status => x_return_status
10881 ,x_msg_count => x_msg_count
10882 ,x_msg_data => x_msg_data
10883 ,p_qp_list_header_id => p_qp_list_header_id
10884 ,p_offDiscountProductId => p_offDiscountProductId
10885 ,x_pricingAttrRec => l_pricingAttrRec
10886 );
10887
10888 IF x_return_status = FND_API.G_RET_STS_ERROR THEN
10889 RAISE FND_API.G_EXC_ERROR;
10890 ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
10891 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10892 END IF;
10893 populateModifiers
10894 (
10895 x_return_status => x_return_status
10896 ,x_msg_count => x_msg_count
10897 ,x_msg_data => x_msg_data
10898 , p_qp_list_header_id => p_qp_list_header_id
10899 , p_offDiscountProductId => p_offDiscountProductId
10900 , x_modifiersTbl => l_modifiersTbl
10901 );
10902 IF x_return_status = FND_API.G_RET_STS_ERROR THEN
10903 RAISE FND_API.G_EXC_ERROR;
10904 ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
10905 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10906 END IF;
10907 processData
10908 (
10909 x_return_status => x_return_status
10910 , x_msg_count => x_msg_count
10911 , x_msg_data => x_msg_data
10912 , x_modifiersTbl => l_modifiersTbl
10913 , x_pricingAttrRec => l_pricingAttrRec
10914 , x_pricingAttrTbl => l_pricingAttrTbl
10915 , p_offDiscountProductId => p_offDiscountProductId
10916 );
10917 IF x_return_status = FND_API.G_RET_STS_ERROR THEN
10918 RAISE FND_API.G_EXC_ERROR;
10919 ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
10920 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10921 END IF;
10922 populateExclusions
10923 (
10924 x_return_status => x_return_status
10925 , x_msg_count => x_msg_count
10926 , x_msg_data => x_msg_data
10927 , p_qpListHeaderId => p_qp_list_header_id
10928 , x_pricingAttrTbl => l_pricingAttrTbl
10929
10930 );
10931 IF x_return_status = FND_API.G_RET_STS_ERROR THEN
10932 RAISE FND_API.G_EXC_ERROR;
10933 ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
10934 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10935 END IF;
10936 OZF_Utility_PVT.debug_message(FND_LOG.LEVEL_STATEMENT,'OZF_OFFER_PVT.pushDiscountRuleToQp','QP Call in pushDiscountRuleToQp---');
10937 OZF_DEBUG_PVT.DEBUG_MO('OZF_OFFER_PVT pushDiscountRuleToQp before calling QP for list_header_id : '||p_qp_list_header_id);
10938 QP_Modifiers_PUB.process_modifiers(
10939 p_api_version_number => 1.0,
10940 p_init_msg_list => FND_API.G_FALSE,
10941 p_return_values => FND_API.G_FALSE,
10942 x_return_status => x_return_status,
10943 x_msg_count => x_msg_count,
10944 x_msg_data => x_msg_data,
10945 p_modifiers_tbl => l_modifiersTbl,
10946 p_pricing_attr_tbl => l_pricingAttrTbl,
10947 x_modifier_list_rec => v_modifier_list_rec,
10948 x_modifier_list_val_rec => v_modifier_list_val_rec,
10949 x_modifiers_tbl => v_modifiers_tbl,
10950 x_modifiers_val_tbl => v_modifiers_val_tbl,
10951 x_qualifiers_tbl => v_qualifiers_tbl,
10952 x_qualifiers_val_tbl => v_qualifiers_val_tbl,
10953 x_pricing_attr_tbl => v_pricing_attr_tbl,
10954 x_pricing_attr_val_tbl => v_pricing_attr_val_tbl
10955 );
10956 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10957 return;
10958 END IF;
10959 x_modifiersTbl := v_modifiers_tbl;
10960 x_pricingAttrTbl := v_pricing_attr_tbl;
10961 END pushDiscountRuleToQp;
10962
10963 PROCEDURE pushDiscountRuleToQpAndRelate
10964 (
10965 x_return_status OUT NOCOPY VARCHAR2
10966 ,x_msg_count OUT NOCOPY NUMBER
10967 ,x_msg_data OUT NOCOPY VARCHAR2
10968 , p_qp_list_header_id IN NUMBER
10969 , p_offDiscountProductId IN NUMBER
10970 , x_error_location OUT NOCOPY NUMBER
10971 , x_modifiersTbl OUT NOCOPY Qp_Modifiers_Pub.modifiers_tbl_type
10972 , x_pricingAttrTbl OUT NOCOPY Qp_Modifiers_Pub.pricing_attr_tbl_type
10973 )
10974 IS
10975 BEGIN
10976 x_return_status := FND_API.G_RET_STS_SUCCESS;
10977 pushDiscountRuleToQp
10978 (
10979 x_return_status => x_return_status
10980 , x_msg_count => x_msg_count
10981 , x_msg_data => x_msg_data
10982 , p_qp_list_header_id => p_qp_list_header_id
10983 , p_offDiscountProductId => p_offDiscountProductId
10984 , x_error_location => x_error_location
10985 , x_modifiersTbl => x_modifiersTbl
10986 , x_pricingAttrTbl => x_pricingAttrTbl
10987 );
10988 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10989 return;
10990 END IF;
10991 relateOzfQp
10992 (
10993 x_return_status => x_return_status
10994 , x_msg_count => x_msg_count
10995 , x_msg_data => x_msg_data
10996 , p_modifiersTbl => x_modifiersTbl
10997 , p_pricingAttrTbl => x_pricingAttrTbl
10998 , p_offDiscountProductId => p_offDiscountProductId
10999 );
11000 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11001 return;
11002 END IF;
11003 END pushDiscountRuleToQpAndRelate;
11004 /*
11005 This procedure pushes OZF data into qp for pricing execution
11006 There is no one to one mapping between ozf and qp data. the Mapping is slighly more complicated.
11007 The logic for mapping is as
11008 -- for regular product records and product records with include volume = 'N' and apply discount as 'Y'
11009 create the whole discount structure for each product
11010 -- for product records with include volume = Y and apply discount = N create a simple discount record with 0% discount
11011 -- for exclusions there is a separate processing
11012 -- for a product to be excluded from an ozf discount structure, it should be excluded from all the discount structures created in qp
11013 -- the logic used is
11014 -- parse thru the modifier table. For each record with list_line_type_code = 'PBH' create a pricing_attribute_record. relate the two
11015 -- using modifier_index of the modifier record in the modifier table. Add this pricing record to the pricing_attr_tbl
11016
11017 */
11018 PROCEDURE push_discount_rules_to_qp
11019 (
11020 p_init_msg_list IN VARCHAR2
11021 ,p_api_version IN NUMBER
11022 ,p_commit IN VARCHAR2
11023 ,x_return_status OUT NOCOPY VARCHAR2
11024 ,x_msg_count OUT NOCOPY NUMBER
11025 ,x_msg_data OUT NOCOPY VARCHAR2
11026 , p_qp_list_header_id IN NUMBER
11027 , x_error_location OUT NOCOPY NUMBER
11028 )
11029 IS
11030 l_api_name CONSTANT VARCHAR2(30) := 'push_discount_rules_to_qp';
11031 l_api_version_number CONSTANT NUMBER := 1.0;
11032
11033 CURSOR c_products(cp_qpListHeaderId NUMBER)IS
11034 SELECT a.off_discount_product_id
11035 FROM ozf_offer_discount_products a, ozf_offers b
11036 WHERE a.offer_id = b.offer_id
11037 AND a.excluder_flag = 'N'
11038 AND b.qp_list_header_id = cp_qpListHeaderId;
11039
11040 l_modifiersTbl Qp_Modifiers_Pub.modifiers_tbl_type;
11041 l_pricingAttrTbl Qp_Modifiers_Pub.pricing_attr_tbl_type;
11042 l_errorLocation NUMBER;
11043 BEGIN
11044 -- initialize
11045 SAVEPOINT push_disc_rules;
11046 x_return_status := Fnd_Api.g_ret_sts_success;
11047
11048 FOR l_products in c_products(cp_qpListHeaderId => p_qp_list_header_id) LOOP
11049 pushDiscountRuleToQpAndRelate
11050 (
11051 x_return_status => x_return_status
11052 ,x_msg_count => x_msg_count
11053 ,x_msg_data => x_msg_data
11054 , p_qp_list_header_id => p_qp_list_header_id
11055 , p_offDiscountProductId => l_products.off_discount_product_id
11056 , x_error_location => l_errorLocation
11057 , x_modifiersTbl => l_modifiersTbl
11058 , x_pricingAttrTbl => l_pricingAttrTbl
11059 );
11060 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
11061 add_message(x_msg_count);
11062 RAISE Fnd_Api.g_exc_error;
11063 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
11064 add_message(x_msg_count);
11065 RAISE Fnd_Api.g_exc_unexpected_error;
11066 END IF;
11067 END LOOP;
11068
11069
11070
11071 IF p_commit = Fnd_Api.g_true THEN
11072 COMMIT WORK;
11073 END IF;
11074 EXCEPTION
11075 WHEN Fnd_Api.G_EXC_ERROR THEN
11076 x_return_status := Fnd_Api.g_ret_sts_error ;
11077 ROLLBACK TO push_disc_rules;
11078 Fnd_Msg_Pub.Count_AND_Get
11079 ( p_count => x_msg_count,
11080 p_data => x_msg_data,
11081 p_encoded => Fnd_Api.G_FALSE
11082 );
11083 WHEN Fnd_Api.G_EXC_UNEXPECTED_ERROR THEN
11084 x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
11085 ROLLBACK TO push_disc_rules;
11086 Fnd_Msg_Pub.Count_AND_Get
11087 ( p_count => x_msg_count,
11088 p_data => x_msg_data,
11089 p_encoded => Fnd_Api.G_FALSE
11090 );
11091 WHEN OTHERS THEN
11092 x_return_status := Fnd_Api.g_ret_sts_unexp_erroR ;
11093 ROLLBACK TO push_disc_rules;
11094 IF Fnd_Msg_Pub.Check_Msg_Level ( Fnd_Msg_Pub.G_MSG_LVL_UNEXP_ERROR )
11095 THEN
11096 Fnd_Msg_Pub.Add_Exc_Msg( G_PKG_NAME,l_api_name);
11097 END IF;
11098 Fnd_Msg_Pub.Count_AND_Get
11099 ( p_count => x_msg_count,
11100 p_data => x_msg_data,
11101 p_encoded => Fnd_Api.G_FALSE
11102 );
11103
11104 /*1. Get Discount Structures
11105 For each discount structure
11106 get the Discounts
11107 Get products
11108 populate discount and product records
11109 create data in qp
11110 get data created
11111 create relation ship*/
11112 END push_discount_rules_to_qp;
11113
11114 FUNCTION get_grace_days(p_sdr_header_id IN NUMBER)
11115 RETURN NUMBER
11116 IS
11117 p_grace_days NUMBER := 0;
11118 l_supplier_site_id NUMBER;
11119
11120
11121
11122 CURSOR c_get_supplier_site_id(l_sdr_header_id NUMBER) IS
11123 SELECT supplier_site_id
11124 FROM ozf_sd_request_headers_all_b
11125 WHERE request_header_id = l_sdr_header_id;
11126
11127
11128
11129 CURSOR c_get_grace_days(l_supplier_site_id NUMBER) IS
11130 SELECT nvl(grace_days,0)
11131 FROM ozf_supp_trd_prfls_all
11132 WHERE supplier_site_id = l_supplier_site_id;
11133
11134
11135 BEGIN
11136
11137 --dbms_output.put_line('N get_grace_days '||p_sdr_header_id);
11138
11139 OPEN c_get_supplier_site_id( p_sdr_header_id ) ;
11140 FETCH c_get_supplier_site_id INTO l_supplier_site_id ;
11141 CLOSE c_get_supplier_site_id ;
11142
11143
11144 --dbms_output.put_line('N supplier_site_id '||l_supplier_site_id);
11145
11146 OPEN c_get_grace_days( l_supplier_site_id ) ;
11147 FETCH c_get_grace_days INTO p_grace_days ;
11148 CLOSE c_get_grace_days ;
11149
11150
11151
11152 --dbms_output.put_line('N grace_days '||p_grace_days);
11153
11154 RETURN p_grace_days;
11155
11156 EXCEPTION
11157 WHEN OTHERS THEN
11158 RETURN 0;
11159 END;
11160
11161 /*
11162 This procedure creates SD offer header record.
11163 */
11164
11165 PROCEDURE populateSDHeaderRec(
11166 x_return_status OUT NOCOPY VARCHAR2
11167 ,x_msg_count OUT NOCOPY NUMBER
11168 ,x_msg_data OUT NOCOPY VARCHAR2
11169 ,p_operation IN VARCHAR2
11170 ,p_sdr_header_id IN NUMBER
11171 ,p_qp_list_header_id IN NUMBER
11172 ,x_modifier_list_rec OUT NOCOPY Modifier_LIST_Rec_Type
11173 )
11174 IS
11175
11176 CURSOR c_offer_info(l_qp_list_header_id NUMBER) IS
11177 SELECT offer_id,
11178 offer_type,
11179 custom_setup_id,
11180 offer_code,
11181 tier_level,
11182 object_version_number,
11183 budget_source_id --//Bug 10648426
11184 FROM ozf_offers
11185 WHERE qp_list_header_id = l_qp_list_header_id;
11186
11187
11188 CURSOR c_sdr_info(l_sdr_header_id NUMBER) IS
11189 SELECT sales_order_currency,
11190 request_currency_code,
11191 request_start_date,
11192 request_end_date,
11193 authorization_number,
11194 request_number,
11195 asignee_resource_id,
11196 request_basis,
11197 org_id
11198 FROM ozf_sd_request_headers_all_b
11199 WHERE request_header_id = l_sdr_header_id;
11200
11201
11202 l_modifier_list_rec Modifier_LIST_Rec_Type;
11203
11204 l_sales_order_currency VARCHAR2(30);
11205 l_request_currency_code VARCHAR2(30);
11206 l_start_date_active DATE;
11207 l_end_date_active DATE;
11208 l_authorization_number VARCHAR2(3000);
11209 l_request_number VARCHAR2(3000);
11210 l_asignee_resource_id NUMBER;
11211 l_request_basis VARCHAR2(1);
11212 l_org_id NUMBER;
11213
11214 BEGIN
11215
11216 SAVEPOINT populateSDHeaderRec;
11217
11218
11219 IF p_operation='UPDATE' THEN
11220 OPEN c_offer_info(p_qp_list_header_id);
11221 FETCH c_offer_info INTO x_modifier_list_rec.offer_id,
11222 x_modifier_list_rec.offer_type,
11223 x_modifier_list_rec.custom_setup_id,
11224 x_modifier_list_rec.offer_code,
11225 x_modifier_list_rec.tier_level,
11226 x_modifier_list_rec.object_version_number,
11227 x_modifier_list_rec.budget_source_id; --//Bug 10648426
11228 CLOSE c_offer_info;
11229
11230
11231 x_modifier_list_rec.STATUS_CODE := 'ACTIVE';
11232 --l_modifier_list_rec.USER_STATUS_ID := p_modifier_list_rec.USER_STATUS_ID;
11233 x_modifier_list_rec.ACTIVE_FLAG := 'Y';
11234 x_modifier_list_rec.BUDGET_SOURCE_TYPE := 'FUND'; --//Bug 10648426
11235
11236 END IF;
11237
11238 IF p_operation='CREATE' THEN
11239 x_modifier_list_rec.OFFER_TYPE := 'ACCRUAL';
11240 x_modifier_list_rec.CUSTOM_SETUP_ID := 118;
11241 x_modifier_list_rec.OBJECT_VERSION_NUMBER := 1;
11242 x_modifier_list_rec.STATUS_CODE := 'DRAFT';
11243 x_modifier_list_rec.STATUS_DATE := sysdate;
11244 x_modifier_list_rec.ACTIVE_FLAG := 'N';
11245
11246 --//Bug 10648426
11247 x_modifier_list_rec.BUDGET_SOURCE_ID := FND_PROFILE.VALUE('OZF_SD_DEFAULT_BUDGET');
11248 x_modifier_list_rec.BUDGET_SOURCE_TYPE := 'FUND';
11249
11250 END IF;
11251
11252 x_modifier_list_rec.MODIFIER_LEVEL_CODE := 'LINE';
11253 x_modifier_list_rec.BUDGET_AMOUNT_TC := 0;
11254 x_modifier_list_rec.OFFER_AMOUNT := 0;
11255 x_modifier_list_rec.LIST_TYPE_CODE := 'PRO';
11256
11257
11258 OPEN c_sdr_info(p_sdr_header_id);
11259 FETCH c_sdr_info INTO l_sales_order_currency,
11260 l_request_currency_code,
11261 l_start_date_active,
11262 l_end_date_active,
11263 l_authorization_number,
11264 l_request_number,
11265 l_asignee_resource_id,
11266 l_request_basis,
11267 l_org_id;
11268 CLOSE c_sdr_info;
11269
11270 /*uncomment offer code */
11271
11272 debug_message('N: populateSDHeaderRec' || l_sales_order_currency);
11273 debug_message('N: populateSDHeaderRec' || l_request_currency_code);
11274
11275 x_modifier_list_rec.TRANSACTION_CURRENCY_CODE := NVL(l_sales_order_currency, l_request_currency_code);
11276 x_modifier_list_rec.CURRENCY_CODE := NVL(l_sales_order_currency, l_request_currency_code);
11277 x_modifier_list_rec.START_DATE_ACTIVE := trunc(l_start_date_active);
11278 x_modifier_list_rec.END_DATE_ACTIVE := trunc(l_end_date_active + get_grace_days(p_sdr_header_id));
11279 x_modifier_list_rec.NAME := NVL(l_authorization_number, l_request_number);
11280 x_modifier_list_rec.DESCRIPTION := NVL(l_authorization_number, l_request_number);
11281 --fix for bug 7580884
11282 x_modifier_list_rec.OFFER_CODE := l_request_number; --NVL(l_authorization_number, l_request_number);
11283 x_modifier_list_rec.COMMENTS := FND_MESSAGE.GET_STRING('OZF','OZF_SD_OFFER_COMMENTS');
11284 x_modifier_list_rec.ASK_FOR_FLAG := NVL(l_request_basis,'N');
11285
11286 IF l_org_id IS NOT NULL AND l_org_id <> FND_API.G_MISS_NUM
11287 AND NVL(fnd_profile.value('QP_SECURITY_CONTROL'), 'OFF') <> 'OFF' THEN
11288 x_modifier_list_rec.global_flag := 'N';
11289 x_modifier_list_rec.orig_org_id := l_org_id;
11290 ELSE
11291 x_modifier_list_rec.global_flag := 'Y';
11292 END IF;
11293
11294 -- x_modifier_list_rec.global_flag := 'Y';
11295
11296 --//Bug 10648426
11297 -- x_modifier_list_rec.BUDGET_SOURCE_ID := FND_PROFILE.VALUE('OZF_SD_DEFAULT_BUDGET');
11298 -- x_modifier_list_rec.BUDGET_SOURCE_TYPE := 'FUND';
11299
11300 x_modifier_list_rec.OFFER_OPERATION := p_operation;
11301 x_modifier_list_rec.MODIFIER_OPERATION := p_operation;
11302 x_modifier_list_rec.OWNER_ID := l_asignee_resource_id;
11303
11304 debug_message('N: populateSDHeaderRec x_modifier_list_rec.TRANSACTION_CURRENCY_CODE ' || x_modifier_list_rec.TRANSACTION_CURRENCY_CODE);
11305
11306 EXCEPTION
11307 WHEN Fnd_Api.G_EXC_ERROR THEN
11308 x_return_status := Fnd_Api.g_ret_sts_error ;
11309 ROLLBACK TO populateSDHeaderRec;
11310 Fnd_Msg_Pub.Count_AND_Get
11311 ( p_count => x_msg_count,
11312 p_data => x_msg_data,
11313 p_encoded => Fnd_Api.G_FALSE
11314 );
11315 WHEN Fnd_Api.G_EXC_UNEXPECTED_ERROR THEN
11316 x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
11317 ROLLBACK TO populateSDHeaderRec;
11318 Fnd_Msg_Pub.Count_AND_Get
11319 ( p_count => x_msg_count,
11320 p_data => x_msg_data,
11321 p_encoded => Fnd_Api.G_FALSE
11322 );
11323 WHEN OTHERS THEN
11324 x_return_status := Fnd_Api.g_ret_sts_unexp_erroR ;
11325 ROLLBACK TO populateSDHeaderRec;
11326 IF Fnd_Msg_Pub.Check_Msg_Level ( Fnd_Msg_Pub.G_MSG_LVL_UNEXP_ERROR )
11327 THEN
11328 Fnd_Msg_Pub.Add_Exc_Msg( G_PKG_NAME,'populateSDHeaderRec');
11329 END IF;
11330 Fnd_Msg_Pub.Count_AND_Get
11331 ( p_count => x_msg_count,
11332 p_data => x_msg_data,
11333 p_encoded => Fnd_Api.G_FALSE
11334 );
11335 END populateSDHeaderRec;
11336
11337
11338 /*
11339 This procedure creates SD offer discount line records.
11340 The mapping b/w QP and SDR lines is stored in orig_sys_line_ref and orig_sys_header_ref
11341 columns in tables qp_list_lines and qp_pricing_attributes
11342 */
11343
11344 PROCEDURE populateSDDiscountRulesRec(
11345 x_return_status OUT NOCOPY VARCHAR2
11346 ,x_msg_count OUT NOCOPY NUMBER
11347 ,x_msg_data OUT NOCOPY VARCHAR2
11348 ,p_operation IN VARCHAR2
11349 ,p_sdr_header_id IN NUMBER
11350 ,p_qp_list_header_id IN NUMBER
11351 ,x_modifier_line_tbl OUT NOCOPY modifier_line_tbl_type
11352 )
11353 IS
11354
11355 l_modifier_line_tbl MODIFIER_LINE_TBL_TYPE;
11356 l_supplier_site_id NUMBER;
11357 l_allow_qty_increase VARCHAR2(1);
11358 l_prod_index NUMBER := 1;
11359 l_list_line_id NUMBER;
11360 l_orig_sys_line_ref_id NUMBER;
11361 l_converted_amt NUMBER;
11362 l_rate NUMBER;
11363 l_request_currency_code VARCHAR2(15);
11364 l_sales_order_currency VARCHAR2(15);
11365 l_limit_id NUMBER;
11366
11367
11368
11369 CURSOR cur_get_disc_lines IS
11370 SELECT request_line_id,product_context,
11371 prod_catg_id,inventory_item_id,
11372 item_uom,product_cost,
11373 product_cost_currency,
11374 requested_discount_type,
11375 requested_discount_value,
11376 approved_discount_type,
11377 approved_discount_value,
11378 approved_discount_currency,
11379 requested_discount_currency,
11380 cost_basis,limit_qty,
11381 start_date,end_date,
11382 create_from
11383 FROM ozf_sd_request_lines_all
11384 WHERE request_header_id = p_sdr_header_id
11385 AND vendor_approved_flag='Y';
11386
11387 CURSOR cur_get_sys_line_ref_id(p_request_line_id NUMBER,p_qp_list_header_id NUMBER) IS
11388 SELECT list_line_no,list_line_id
11389 FROM qp_list_lines
11390 WHERE list_line_no = to_char(p_request_line_id)
11391 AND list_header_id = p_qp_list_header_id ;
11392
11393 CURSOR cur_get_header_info IS
11394 SELECT sales_order_currency,
11395 request_currency_code,
11396 supplier_site_id
11397 FROM ozf_sd_request_headers_all_b
11398 WHERE request_header_id = p_sdr_header_id;
11399
11400 CURSOR cur_get_qty_inc_flag(p_supplier_site_id NUMBER) IS
11401 SELECT allow_qty_increase
11402 FROM ozf_supp_trd_prfls_all
11403 WHERE supplier_site_id = p_supplier_site_id;
11404
11405
11406 CURSOR cur_get_limit_id(p_list_line_id NUMBER) IS
11407 SELECT limit_id
11408 FROM qp_limits
11409 WHERE list_line_id = p_list_line_id
11410 AND limit_number = 3;
11411
11412
11413
11414 BEGIN
11415 SAVEPOINT populateSDDiscountRulesRec;
11416
11417
11418
11419
11420 x_return_status := Fnd_Api.g_ret_sts_success;
11421 --x_error_location := 0;
11422
11423 debug_message('N: populateSDDiscountRulesRec' || p_operation);
11424
11425
11426 FOR line_rec IN cur_get_disc_lines LOOP
11427 IF line_rec.create_from = 'ADJ' THEN
11428 GOTO l_endoflineloop;
11429 END IF;
11430 debug_message('N: request_line_id' || line_rec.request_line_id);
11431 debug_message('N: l_prod_index' || l_prod_index);
11432 --IF p_operation = 'UPDATE' THEN
11433 debug_message('N: p_qp_list_header_id' || p_qp_list_header_id);
11434 OPEN cur_get_sys_line_ref_id(line_rec.request_line_id,p_qp_list_header_id);
11435 FETCH cur_get_sys_line_ref_id INTO l_orig_sys_line_ref_id,l_list_line_id;
11436 CLOSE cur_get_sys_line_ref_id;
11437 --dbms_output.put_line('N: l_list_line_id' || l_list_line_id);
11438
11439 -- END IF;
11440
11441 debug_message('N: l_orig_sys_line_ref_id' || l_orig_sys_line_ref_id);
11442 IF l_orig_sys_line_ref_id IS NULL OR l_orig_sys_line_ref_id=FND_API.G_MISS_NUM THEN
11443 x_modifier_line_tbl(l_prod_index).OPERATION := 'CREATE';
11444 ELSE
11445 x_modifier_line_tbl(l_prod_index).OPERATION := 'UPDATE';
11446 x_modifier_line_tbl(l_prod_index).list_line_id := l_list_line_id;
11447
11448 OPEN cur_get_limit_id(l_list_line_id);
11449 FETCH cur_get_limit_id INTO l_limit_id;
11450 CLOSE cur_get_limit_id;
11451
11452 x_modifier_line_tbl(l_prod_index).MAX_QTY_PER_RULE_ID := l_limit_id;
11453
11454 END IF;
11455 debug_message('N: list_line_id' || x_modifier_line_tbl(l_prod_index).list_line_id);
11456 debug_message('N: OPERATION' || x_modifier_line_tbl(l_prod_index).OPERATION );
11457 debug_message('N: line_rec.request_line_id ' || line_rec.request_line_id );
11458
11459 x_modifier_line_tbl(l_prod_index).LIST_LINE_NO := to_char(line_rec.request_line_id);
11460 debug_message('N: x_modifier_line_tbl(l_prod_index).LIST_LINE_NO ' || x_modifier_line_tbl(l_prod_index).LIST_LINE_NO );
11461 x_modifier_line_tbl(l_prod_index).LIST_HEADER_ID := p_qp_list_header_id;
11462 --dbms_output.put_line('N: x_modifier_line_tbl(l_prod_index).LIST_HEADER_ID ' || x_modifier_line_tbl(l_prod_index).LIST_HEADER_ID);
11463 x_modifier_line_tbl(l_prod_index).LIST_LINE_TYPE_CODE := 'DIS';
11464 x_modifier_line_tbl(l_prod_index).OPERAND := NVL(line_rec.approved_discount_value, line_rec.requested_discount_value);
11465 x_modifier_line_tbl(l_prod_index).ARITHMETIC_OPERATOR := NVL(line_rec.approved_discount_type, line_rec.requested_discount_type);
11466
11467 --if discount type is NEWPRICE get the discount amount
11468 --if discount type is Amount/Newprice do the currency conevrsion
11469 --Use sysdate as exchange date
11470
11471 debug_message('ARITHMETIC_OPERATOR '||x_modifier_line_tbl(l_prod_index).ARITHMETIC_OPERATOR);
11472 debug_message('product_cost_currency '|| line_rec.product_cost_currency);
11473 debug_message('approved_discount_currency '|| line_rec.approved_discount_currency);
11474 debug_message('requested_discount_currency '|| line_rec.requested_discount_currency);
11475 debug_message('OPERAND '|| x_modifier_line_tbl(l_prod_index).OPERAND);
11476
11477 /*kdass - bug 9470625 - Do not convert NEWPRICE to AMT discount for SDR Offers
11478 IF x_modifier_line_tbl(l_prod_index).ARITHMETIC_OPERATOR = 'NEWPRICE' THEN
11479
11480 IF line_rec.product_cost_currency
11481 <> NVL(line_rec.approved_discount_currency,line_rec.requested_discount_currency) THEN
11482
11483 ozf_utility_pvt.convert_currency (
11484 x_return_status=> x_return_status,
11485 p_from_currency=> line_rec.product_cost_currency,
11486 p_to_currency=> NVL(line_rec.approved_discount_currency,line_rec.requested_discount_currency),
11487 p_conv_date=> sysdate,
11488 p_from_amount=> line_rec.product_cost,
11489 x_to_amount=> l_converted_amt
11490 );
11491
11492 debug_message('l_converted_amt '|| l_converted_amt);
11493
11494 line_rec.product_cost := l_converted_amt;
11495
11496 END IF;
11497
11498 x_modifier_line_tbl(l_prod_index).ARITHMETIC_OPERATOR := 'AMT';
11499 x_modifier_line_tbl(l_prod_index).OPERAND := line_rec.product_cost - x_modifier_line_tbl(l_prod_index).OPERAND;
11500
11501 END IF;
11502 */
11503
11504
11505 OPEN cur_get_header_info;
11506 FETCH cur_get_header_info INTO l_sales_order_currency,
11507 l_request_currency_code,
11508 l_supplier_site_id;
11509 CLOSE cur_get_header_info;
11510
11511 --dbms_output.put_line('l_converted_amt '|| l_converted_amt);
11512
11513
11514 IF x_modifier_line_tbl(l_prod_index).ARITHMETIC_OPERATOR IN ('AMT', 'NEWPRICE')
11515 AND NVL(line_rec.approved_discount_currency,line_rec.requested_discount_currency)
11516 <> NVL(l_sales_order_currency,l_request_currency_code) THEN
11517 ozf_utility_pvt.convert_currency (
11518 x_return_status=> x_return_status,
11519 p_from_currency=> NVL(line_rec.approved_discount_currency,line_rec.requested_discount_currency),
11520 p_to_currency=> NVL(l_sales_order_currency,l_request_currency_code),
11521 p_conv_date=> sysdate,
11522 p_from_amount=> x_modifier_line_tbl(l_prod_index).OPERAND,
11523 x_to_amount=> l_converted_amt
11524 );
11525 x_modifier_line_tbl(l_prod_index).OPERAND := l_converted_amt;
11526 END IF;
11527
11528 IF line_rec.product_context = 'PRODUCT' THEN
11529 x_modifier_line_tbl(l_prod_index).PRODUCT_ATTR := 'PRICING_ATTRIBUTE1';
11530 x_modifier_line_tbl(l_prod_index).PRODUCT_ATTR_VAL := line_rec.inventory_item_id;
11531 Else IF line_rec.product_context = 'PRODUCT_CATEGORY' THEN
11532 x_modifier_line_tbl(l_prod_index).PRODUCT_ATTR := 'PRICING_ATTRIBUTE2';
11533 x_modifier_line_tbl(l_prod_index).PRODUCT_ATTR_VAL := line_rec.prod_catg_id;
11534 ELSE IF line_rec.product_context = 'ALL_ITEMS' THEN
11535 x_modifier_line_tbl(l_prod_index).PRODUCT_ATTR := 'PRICING_ATTRIBUTE3';
11536 x_modifier_line_tbl(l_prod_index).PRODUCT_ATTR_VAL := 'ALL';
11537 END IF;
11538 END IF;
11539 END IF;
11540
11541
11542 x_modifier_line_tbl(l_prod_index).PRODUCT_UOM_CODE := line_rec.item_uom;
11543 x_modifier_line_tbl(l_prod_index).MAX_QTY_PER_RULE := line_rec.limit_qty;
11544 x_modifier_line_tbl(l_prod_index).START_DATE_ACTIVE := trunc(line_rec.start_date);
11545 -- fix for bug 7584161
11546 --x_modifier_line_tbl(l_prod_index).END_DATE_ACTIVE := trunc(line_rec.end_date);
11547 x_modifier_line_tbl(l_prod_index).END_DATE_ACTIVE := trunc(line_rec.end_date+get_grace_days(p_sdr_header_id));
11548 x_modifier_line_tbl(l_prod_index).GENERATE_USING_FORMULA_ID := line_rec.cost_basis;
11549
11550 IF l_supplier_site_id IS NOT NULL
11551 AND l_supplier_site_id <> FND_API.G_MISS_NUM AND x_modifier_line_tbl(l_prod_index).OPERATION = 'CREATE' THEN
11552
11553 OPEN cur_get_qty_inc_flag(l_supplier_site_id);
11554 FETCH cur_get_qty_inc_flag INTO l_allow_qty_increase;
11555 CLOSE cur_get_qty_inc_flag;
11556
11557 IF l_allow_qty_increase = 'Y' THEN
11558 x_modifier_line_tbl(l_prod_index).LIMIT_EXCEED_ACTION_CODE := 'SOFT';
11559 ELSE
11560 x_modifier_line_tbl(l_prod_index).LIMIT_EXCEED_ACTION_CODE := 'HARD';
11561 END IF;
11562
11563 END IF;
11564
11565 l_orig_sys_line_ref_id := NULL;
11566 l_list_line_id := NULL;
11567 l_limit_id := FND_API.G_MISS_NUM;
11568
11569 l_prod_index := l_prod_index+1;
11570 <<l_endoflineloop>>
11571 debug_message('Skip this line' );
11572 END LOOP;
11573
11574
11575
11576 EXCEPTION
11577 WHEN Fnd_Api.G_EXC_ERROR THEN
11578 x_return_status := Fnd_Api.g_ret_sts_error ;
11579 ROLLBACK TO populateSDDiscountRulesRec;
11580 Fnd_Msg_Pub.Count_AND_Get
11581 ( p_count => x_msg_count,
11582 p_data => x_msg_data,
11583 p_encoded => Fnd_Api.G_FALSE
11584 );
11585 WHEN Fnd_Api.G_EXC_UNEXPECTED_ERROR THEN
11586 x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
11587 ROLLBACK TO populateSDDiscountRulesRec;
11588 Fnd_Msg_Pub.Count_AND_Get
11589 ( p_count => x_msg_count,
11590 p_data => x_msg_data,
11591 p_encoded => Fnd_Api.G_FALSE
11592 );
11593 WHEN OTHERS THEN
11594 x_return_status := Fnd_Api.g_ret_sts_unexp_erroR ;
11595 ROLLBACK TO populateSDDiscountRulesRec;
11596 IF Fnd_Msg_Pub.Check_Msg_Level ( Fnd_Msg_Pub.G_MSG_LVL_UNEXP_ERROR )
11597 THEN
11598 Fnd_Msg_Pub.Add_Exc_Msg( G_PKG_NAME,'populateSDDiscountRulesRec');
11599 END IF;
11600 Fnd_Msg_Pub.Count_AND_Get
11601 ( p_count => x_msg_count,
11602 p_data => x_msg_data,
11603 p_encoded => Fnd_Api.G_FALSE
11604 );
11605 END populateSDDiscountRulesRec;
11606
11607 /*
11608 This procedure creates SD offer qualifier line records.
11609 */
11610
11611 PROCEDURE populateSDQualifiers(
11612 x_return_status OUT NOCOPY VARCHAR2
11613 ,x_msg_count OUT NOCOPY NUMBER
11614 ,x_msg_data OUT NOCOPY VARCHAR2
11615 ,p_sdr_header_id IN NUMBER
11616 ,p_qp_list_header_id IN NUMBER
11617 ,x_qualifier_tbl OUT NOCOPY qualifiers_tbl_type
11618 )
11619 IS
11620
11621 l_qualifier_tbl qualifiers_tbl_type;
11622 l_site_use_id NUMBER;
11623 l_cust_acct_id NUMBER;
11624 l_cust_seq_id NUMBER;
11625 l_cust_add_type_code VARCHAR2(250);
11626 l_cust_type_code VARCHAR2(250);
11627 l_qual_index NUMBER:= 1;
11628 l_end_cust_count NUMBER:=0;
11629 l_qualifier_grouping_no NUMBER:=10;
11630 l_internal_order_number NUMBER;
11631 l_order_header_id NUMBER;
11632 l_org_id NUMBER;
11633 l_modlist_count NUMBER:=0;
11634
11635 l_qualifier_context VARCHAR2(250);
11636 l_qualifier_attribute VARCHAR2(250);
11637 l_qualifier_attr_value VARCHAR2(50);
11638 v_qualifier_grouping_no NUMBER :=10;
11639 v_count NUMBER;
11640 l_qualifier_id NUMBER;
11641 l_existing_end_cust_count NUMBER;
11642 l_operation_count NUMBER:=0;
11643
11644
11645 CURSOR cur_get_cust_qual_lines IS
11646 SELECT request_customer_id,party_id,
11647 cust_account_id,site_use_id,
11648 cust_usage_code,end_customer_flag,
11649 cust_usage_value
11650 FROM ozf_sd_customer_details
11651 WHERE request_header_id = p_sdr_header_id
11652 AND end_customer_flag='N'
11653 AND NVL(operation_flag, 'I') = 'I';
11654
11655 CURSOR cur_get_end_cust_qual_lines IS
11656 SELECT request_customer_id,party_id,
11657 cust_account_id,site_use_id,
11658 cust_usage_code,end_customer_flag,
11659 cust_usage_value
11660 FROM ozf_sd_customer_details
11661 WHERE request_header_id = p_sdr_header_id
11662 AND end_customer_flag='Y'
11663 AND NVL(operation_flag, 'I') = 'I';
11664
11665 CURSOR cur_get_end_cust_count IS
11666 SELECT count(request_customer_id)
11667 FROM ozf_sd_customer_details
11668 WHERE request_header_id = p_sdr_header_id
11669 AND end_customer_flag = 'Y';
11670
11671
11672 /*'QUALIFIER_ATTRIBUTE2' --customer name
11673 'QUALIFIER_ATTRIBUTE14' --bill to
11674 'QUALIFIER_ATTRIBUTE11' --ship to
11675 'QUALIFIER_ATTRIBUTE20' --end customer
11676 'QUALIFIER_ATTRIBUTE3' --buying group
11677 'QUALIFIER_ATTRIBUTE1' --list
11678 'QUALIFIER_ATTRIBUTE2' --segment
11679 'QUALIFIER_ATTRIBUTE1' --territory
11680 'QUALIFIER_ATTRIBUTE32' --modlist
11681 'QUALIFIER_ATTRIBUTE21' --order
11682 */
11683
11684 CURSOR cur_get_old_qualifiers IS
11685 SELECT qualifier_id
11686 FROM qp_qualifiers
11687 WHERE list_header_id = p_qp_list_header_id
11688 --bug 12632240 ninarasi
11689 AND ((qualifier_context = 'CUSTOMER'
11690 AND qualifier_attribute IN ('QUALIFIER_ATTRIBUTE2', 'QUALIFIER_ATTRIBUTE14',
11691 'QUALIFIER_ATTRIBUTE11', 'QUALIFIER_ATTRIBUTE20'))
11692 OR (qualifier_context = 'CUSTOMER_GROUP'
11693 AND qualifier_attribute IN ('QUALIFIER_ATTRIBUTE1', 'QUALIFIER_ATTRIBUTE2',
11694 'QUALIFIER_ATTRIBUTE3'))
11695 OR (qualifier_context = 'TERRITORY'
11696 AND qualifier_attribute = 'QUALIFIER_ATTRIBUTE1')
11697 OR (qualifier_context = 'MODLIST'
11698 AND qualifier_attribute = 'QUALIFIER_ATTRIBUTE32'
11699 AND (qualifier_attr_value <>'Y'
11700 OR qualifier_grouping_no <> -1
11701 OR comparison_operator_code <> '='))
11702 OR (qualifier_context = 'ORDER'
11703 AND qualifier_attribute = 'QUALIFIER_ATTRIBUTE21'));
11704
11705 CURSOR cur_get_internal_order_number IS
11706 SELECT internal_order_number,org_id
11707 FROM ozf_sd_request_headers_all_b
11708 WHERE request_header_id = p_sdr_header_id;
11709
11710
11711 CURSOR cur_get_order_header_id (p_internal_order_number NUMBER,p_org_id NUMBER)IS
11712 SELECT header_id
11713 FROM oe_order_headers_all
11714 WHERE order_number = p_internal_order_number
11715 AND org_id=p_org_id;
11716
11717 CURSOR cur_get_modlist_count IS --bug 12632240 ninarasi
11718 SELECT COUNT(qualifier_id)
11719 FROM qp_qualifiers
11720 WHERE list_header_id = p_qp_list_header_id
11721 AND (qualifier_context = 'MODLIST'
11722 AND qualifier_attribute = 'QUALIFIER_ATTRIBUTE32'
11723 AND qualifier_grouping_no = -1
11724 AND comparison_operator_code = '='
11725 AND qualifier_attr_value = 'Y');
11726
11727 --Bug 13981597 - cursor to get count for delete operation (either all end customers to be deleted or some of them)
11728 CURSOR cur_end_cust_operation_count IS
11729 SELECT count(request_customer_id)
11730 FROM ozf_sd_customer_details
11731 WHERE request_header_id = p_sdr_header_id
11732 AND end_customer_flag = 'Y'
11733 AND NVL(operation_flag, 'I') = 'I';
11734
11735
11736 --Bug 13981597 - cursor to fetch customers to be deleted from qp_qualifiers
11737 CURSOR cur_get_del_qualifiers IS
11738 SELECT qualifier_id
11739 FROM qp_qualifiers
11740 WHERE list_header_id = p_qp_list_header_id
11741 AND list_line_id = -1
11742 AND qualifier_attribute = l_qualifier_attribute
11743 AND qualifier_context = l_qualifier_context
11744 AND to_char(qualifier_attr_value) = l_qualifier_attr_value;
11745
11746 --Bug 13981597 - cursor to fetch customers to be inserted and deleted
11747 CURSOR cur_get_qual_lines_no_end_cust IS
11748 SELECT request_customer_id,party_id,
11749 cust_account_id,site_use_id,
11750 cust_usage_code,end_customer_flag,
11751 cust_usage_value, operation_flag
11752 FROM ozf_sd_customer_details
11753 WHERE request_header_id = p_sdr_header_id
11754 AND end_customer_flag = 'N'
11755 AND operation_flag IS NOT NULL;
11756
11757 --Bug 13981597 - cursor to fetch max grouping number
11758 CURSOR cur_max_qualifier_grouping_no IS
11759 SELECT NVL(max(qualifier_grouping_no),0) + 10
11760 FROM qp_qualifiers
11761 WHERE list_header_id = p_qp_list_header_id
11762 AND list_line_id =-1
11763 AND qualifier_grouping_no > 0;
11764
11765
11766 BEGIN
11767 SAVEPOINT populateSDQualifiers;
11768
11769 x_return_status := Fnd_Api.g_ret_sts_success;
11770 --x_error_location := 0;
11771 debug_message('N: populateSDQualifiers' || p_qp_list_header_id);
11772
11773 OPEN cur_get_end_cust_count;
11774 FETCH cur_get_end_cust_count INTO l_end_cust_count;
11775 CLOSE cur_get_end_cust_count;
11776
11777 OPEN cur_get_modlist_count;
11778 FETCH cur_get_modlist_count INTO l_modlist_count;
11779 CLOSE cur_get_modlist_count;
11780
11781 OPEN cur_end_cust_operation_count;
11782 FETCH cur_end_cust_operation_count INTO l_operation_count;
11783 CLOSE cur_end_cust_operation_count;
11784
11785
11786 debug_message('N: populateSDQualifiers' || l_end_cust_count);
11787
11788 --Bug 13981597 - do not delete qualifiers if there are no end customers
11789 IF l_end_cust_count>0 THEN
11790 IF p_qp_list_header_id IS NOT NULL AND p_qp_list_header_id <> FND_API.G_MISS_NUM THEN
11791 FOR old_cust_line_rec IN cur_get_old_qualifiers LOOP
11792 x_qualifier_tbl(l_qual_index).list_header_id := p_qp_list_header_id;
11793 x_qualifier_tbl(l_qual_index).qualifier_id := old_cust_line_rec.qualifier_id;
11794 x_qualifier_tbl(l_qual_index).operation := 'DELETE';
11795 x_qualifier_tbl(l_qual_index).list_line_id := -1;
11796 l_qual_index := l_qual_index+1;
11797 END LOOP;
11798 END IF;
11799 END IF;
11800
11801 IF l_end_cust_count>0 THEN --Check if any end customer exists. If yes then do the customer , end customer grouping
11802 IF l_operation_count>0 THEN --For delete operation(if atleast one end customer is to be kept)-insert costomer and end customer with grouping
11803 FOR cust_line_rec IN cur_get_cust_qual_lines LOOP
11804 FOR end_cust_line_rec IN cur_get_end_cust_qual_lines LOOP
11805
11806 --Populate customer record
11807 x_qualifier_tbl(l_qual_index).list_header_id := p_qp_list_header_id;
11808 x_qualifier_tbl(l_qual_index).qualifier_grouping_no := l_qualifier_grouping_no;
11809
11810 -- IF p_operation<>'DELETE' THEN
11811 IF cust_line_rec.cust_usage_code = 'CUSTOMER' OR
11812 cust_line_rec.cust_usage_code = 'BILL_TO' OR
11813 cust_line_rec.cust_usage_code = 'SHIP_TO' THEN
11814 x_qualifier_tbl(l_qual_index).qualifier_context := 'CUSTOMER';
11815
11816 ELSIF cust_line_rec.cust_usage_code = 'BUYING_GROUP' OR
11817 cust_line_rec.cust_usage_code = 'LIST' OR
11818 cust_line_rec.cust_usage_code='SEGMENT' THEN
11819 x_qualifier_tbl(l_qual_index).qualifier_context := 'CUSTOMER_GROUP';
11820 ELSIF cust_line_rec.cust_usage_code='TERRITORY' THEN
11821 x_qualifier_tbl(l_qual_index).qualifier_context := 'TERRITORY';
11822 END IF;
11823
11824 IF cust_line_rec.cust_usage_code='CUSTOMER' THEN
11825 x_qualifier_tbl(l_qual_index).qualifier_attribute := 'QUALIFIER_ATTRIBUTE2';
11826 x_qualifier_tbl(l_qual_index).qualifier_attr_value := cust_line_rec.cust_account_id;
11827 ELSIF cust_line_rec.cust_usage_code='BILL_TO' THEN
11828 x_qualifier_tbl(l_qual_index).qualifier_attribute := 'QUALIFIER_ATTRIBUTE14';
11829 x_qualifier_tbl(l_qual_index).qualifier_attr_value := cust_line_rec.site_use_id;
11830 ELSIF cust_line_rec.cust_usage_code='SHIP_TO' THEN
11831 x_qualifier_tbl(l_qual_index).qualifier_attribute := 'QUALIFIER_ATTRIBUTE11';
11832 x_qualifier_tbl(l_qual_index).qualifier_attr_value := cust_line_rec.site_use_id;
11833 ELSIF cust_line_rec.cust_usage_code='BUYING_GROUP' THEN
11834 x_qualifier_tbl(l_qual_index).qualifier_attribute := 'QUALIFIER_ATTRIBUTE3';
11835 x_qualifier_tbl(l_qual_index).qualifier_attr_value := cust_line_rec.party_id;
11836 ELSIF cust_line_rec.cust_usage_code='LIST' THEN
11837 x_qualifier_tbl(l_qual_index).qualifier_attribute := 'QUALIFIER_ATTRIBUTE1';
11838 x_qualifier_tbl(l_qual_index).qualifier_attr_value := cust_line_rec.cust_usage_value;
11839 ELSIF cust_line_rec.cust_usage_code='SEGMENT' THEN
11840 x_qualifier_tbl(l_qual_index).qualifier_attribute := 'QUALIFIER_ATTRIBUTE2';
11841 x_qualifier_tbl(l_qual_index).qualifier_attr_value := cust_line_rec.cust_usage_value;
11842 ELSIF cust_line_rec.cust_usage_code='TERRITORY' THEN
11843 x_qualifier_tbl(l_qual_index).qualifier_attribute := 'QUALIFIER_ATTRIBUTE1';
11844 x_qualifier_tbl(l_qual_index).qualifier_attr_value := cust_line_rec.cust_usage_value;
11845 END IF;
11846
11847 x_qualifier_tbl(l_qual_index).operation := 'CREATE';
11848 x_qualifier_tbl(l_qual_index).qualifier_attr_value_to := NULL;
11849 x_qualifier_tbl(l_qual_index).qualifier_id := NULL;
11850 x_qualifier_tbl(l_qual_index).comparison_operator_code := '=';
11851 x_qualifier_tbl(l_qual_index).start_date_active := NULL;
11852 x_qualifier_tbl(l_qual_index).end_date_active := NULL;
11853 x_qualifier_tbl(l_qual_index).activity_market_segment_id := NULL;
11854 x_qualifier_tbl(l_qual_index).list_line_id := -1;
11855
11856 l_qual_index := l_qual_index+1;
11857 --end Populate customer record.
11858 --Start populating end customer record
11859
11860 x_qualifier_tbl(l_qual_index).list_header_id := p_qp_list_header_id;
11861 x_qualifier_tbl(l_qual_index).qualifier_grouping_no := l_qualifier_grouping_no;
11862
11863 --IF p_operation<>'DELETE' THEN
11864 IF end_cust_line_rec.cust_usage_code = 'CUSTOMER' THEN
11865 x_qualifier_tbl(l_qual_index).qualifier_context := 'CUSTOMER';
11866 END IF;
11867
11868 --always customer name as per FDD
11869 x_qualifier_tbl(l_qual_index).qualifier_attribute := 'QUALIFIER_ATTRIBUTE20';
11870 x_qualifier_tbl(l_qual_index).qualifier_attr_value := end_cust_line_rec.cust_account_id;
11871
11872 x_qualifier_tbl(l_qual_index).operation := 'CREATE';
11873 x_qualifier_tbl(l_qual_index).qualifier_attr_value_to := NULL;
11874 x_qualifier_tbl(l_qual_index).qualifier_id := NULL;
11875 x_qualifier_tbl(l_qual_index).comparison_operator_code := '=';
11876 x_qualifier_tbl(l_qual_index).start_date_active := NULL;
11877 x_qualifier_tbl(l_qual_index).end_date_active := NULL;
11878 x_qualifier_tbl(l_qual_index).activity_market_segment_id := NULL;
11879 x_qualifier_tbl(l_qual_index).list_line_id := -1;
11880
11881 l_qual_index := l_qual_index+1;
11882 l_qualifier_grouping_no := l_qualifier_grouping_no+10;
11883 --End populating end customer record
11884 END LOOP;--End of cur_get_end_cust_qual_lines loop
11885
11886 END LOOP;--End of cur_get_cust_qual_lines loop
11887
11888 ELSE --For delete operation(if all the end customer is to be deleted)- Insert only the customer
11889
11890 FOR cust_line_rec IN cur_get_cust_qual_lines LOOP
11891
11892 x_qualifier_tbl(l_qual_index).list_header_id := p_qp_list_header_id;
11893 x_qualifier_tbl(l_qual_index).qualifier_grouping_no := l_qualifier_grouping_no;
11894
11895 IF cust_line_rec.cust_usage_code = 'CUSTOMER' OR
11896 cust_line_rec.cust_usage_code = 'BILL_TO' OR
11897 cust_line_rec.cust_usage_code = 'SHIP_TO' THEN
11898 x_qualifier_tbl(l_qual_index).qualifier_context := 'CUSTOMER';
11899 ELSIF cust_line_rec.cust_usage_code = 'BUYING_GROUP' OR
11900 cust_line_rec.cust_usage_code = 'LIST' OR
11901 cust_line_rec.cust_usage_code='SEGMENT' THEN
11902 x_qualifier_tbl(l_qual_index).qualifier_context := 'CUSTOMER_GROUP';
11903 ELSIF cust_line_rec.cust_usage_code='TERRITORY' THEN
11904 x_qualifier_tbl(l_qual_index).qualifier_context := 'TERRITORY';
11905 END IF;
11906
11907 IF cust_line_rec.cust_usage_code='CUSTOMER' THEN
11908 x_qualifier_tbl(l_qual_index).qualifier_attribute := 'QUALIFIER_ATTRIBUTE2';
11909 x_qualifier_tbl(l_qual_index).qualifier_attr_value := cust_line_rec.cust_account_id;
11910 ELSIF cust_line_rec.cust_usage_code='BILL_TO' THEN
11911 x_qualifier_tbl(l_qual_index).qualifier_attribute := 'QUALIFIER_ATTRIBUTE14';
11912 x_qualifier_tbl(l_qual_index).qualifier_attr_value := cust_line_rec.site_use_id;
11913 ELSIF cust_line_rec.cust_usage_code='SHIP_TO' THEN
11914 x_qualifier_tbl(l_qual_index).qualifier_attribute := 'QUALIFIER_ATTRIBUTE11';
11915 x_qualifier_tbl(l_qual_index).qualifier_attr_value := cust_line_rec.site_use_id;
11916 ELSIF cust_line_rec.cust_usage_code='BUYING_GROUP' THEN
11917 x_qualifier_tbl(l_qual_index).qualifier_attribute := 'QUALIFIER_ATTRIBUTE3';
11918 x_qualifier_tbl(l_qual_index).qualifier_attr_value := cust_line_rec.party_id;
11919 ELSIF cust_line_rec.cust_usage_code='LIST' THEN
11920 x_qualifier_tbl(l_qual_index).qualifier_attribute := 'QUALIFIER_ATTRIBUTE1';
11921 x_qualifier_tbl(l_qual_index).qualifier_attr_value := cust_line_rec.cust_usage_value;
11922 ELSIF cust_line_rec.cust_usage_code='SEGMENT' THEN
11923 x_qualifier_tbl(l_qual_index).qualifier_attribute := 'QUALIFIER_ATTRIBUTE2';
11924 x_qualifier_tbl(l_qual_index).qualifier_attr_value := cust_line_rec.cust_usage_value;
11925 ELSIF cust_line_rec.cust_usage_code='TERRITORY' THEN
11926 x_qualifier_tbl(l_qual_index).qualifier_attribute := 'QUALIFIER_ATTRIBUTE1';
11927 x_qualifier_tbl(l_qual_index).qualifier_attr_value := cust_line_rec.cust_usage_value;
11928 END IF;
11929 x_qualifier_tbl(l_qual_index).operation := 'CREATE';
11930 x_qualifier_tbl(l_qual_index).qualifier_attr_value_to := NULL;
11931 x_qualifier_tbl(l_qual_index).qualifier_id := NULL;
11932 x_qualifier_tbl(l_qual_index).comparison_operator_code := '=';
11933 x_qualifier_tbl(l_qual_index).start_date_active := NULL;
11934 x_qualifier_tbl(l_qual_index).end_date_active := NULL;
11935 x_qualifier_tbl(l_qual_index).activity_market_segment_id := NULL;
11936 x_qualifier_tbl(l_qual_index).list_line_id := -1;
11937
11938 l_qual_index := l_qual_index+1;
11939 l_qualifier_grouping_no := l_qualifier_grouping_no+10;
11940
11941 END LOOP;
11942
11943 END IF; --For delete operation(if all the end customer is to be deleted)
11944
11945 --Bug 13981597 - If there is no end customer then dont process the existing records, process only the new records with operation_flag as I or D
11946 ELSE
11947
11948 OPEN cur_max_qualifier_grouping_no;
11949 FETCH cur_max_qualifier_grouping_no INTO v_qualifier_grouping_no;
11950 CLOSE cur_max_qualifier_grouping_no;
11951
11952 FOR cust_line_rec IN cur_get_qual_lines_no_end_cust LOOP
11953 IF cust_line_rec.cust_usage_code='CUSTOMER' THEN
11954 l_qualifier_context := 'CUSTOMER';
11955 l_qualifier_attribute := 'QUALIFIER_ATTRIBUTE2';
11956 l_qualifier_attr_value := cust_line_rec.cust_account_id;
11957 ELSIF cust_line_rec.cust_usage_code='BILL_TO' THEN
11958 l_qualifier_context := 'CUSTOMER';
11959 l_qualifier_attribute := 'QUALIFIER_ATTRIBUTE14';
11960 l_qualifier_attr_value := cust_line_rec.site_use_id;
11961 ELSIF cust_line_rec.cust_usage_code='SHIP_TO' THEN
11962 l_qualifier_context := 'CUSTOMER';
11963 l_qualifier_attribute := 'QUALIFIER_ATTRIBUTE11';
11964 l_qualifier_attr_value := cust_line_rec.site_use_id;
11965 ELSIF cust_line_rec.cust_usage_code='BUYING_GROUP' THEN
11966 l_qualifier_context := 'CUSTOMER_GROUP';
11967 l_qualifier_attribute := 'QUALIFIER_ATTRIBUTE3';
11968 l_qualifier_attr_value := cust_line_rec.party_id;
11969 ELSIF cust_line_rec.cust_usage_code='LIST' THEN
11970 l_qualifier_context := 'CUSTOMER_GROUP';
11971 l_qualifier_attribute := 'QUALIFIER_ATTRIBUTE1';
11972 l_qualifier_attr_value := cust_line_rec.cust_usage_value;
11973 ELSIF cust_line_rec.cust_usage_code='SEGMENT' THEN
11974 l_qualifier_context := 'CUSTOMER_GROUP';
11975 l_qualifier_attribute := 'QUALIFIER_ATTRIBUTE2';
11976 l_qualifier_attr_value := cust_line_rec.cust_usage_value;
11977 ELSIF cust_line_rec.cust_usage_code='TERRITORY' THEN
11978 l_qualifier_context := 'TERRITORY';
11979 l_qualifier_attribute := 'QUALIFIER_ATTRIBUTE1';
11980 l_qualifier_attr_value := cust_line_rec.cust_usage_value;
11981 END IF;
11982
11983 --Delete if operation_flag is D and the corresponding records are available in qp_qualifiers
11984 IF cust_line_rec.operation_flag = 'D' THEN
11985
11986 x_qualifier_tbl(l_qual_index).qualifier_id := NULL;
11987
11988 OPEN cur_get_del_qualifiers;
11989 FETCH cur_get_del_qualifiers INTO x_qualifier_tbl(l_qual_index).qualifier_id;
11990 CLOSE cur_get_del_qualifiers;
11991
11992 IF x_qualifier_tbl(l_qual_index).qualifier_id IS NOT NULL THEN
11993 x_qualifier_tbl(l_qual_index).list_header_id := p_qp_list_header_id;
11994 x_qualifier_tbl(l_qual_index).operation := 'DELETE';
11995 x_qualifier_tbl(l_qual_index).list_line_id := -1;
11996 l_qual_index := l_qual_index+1;
11997 END IF;
11998
11999 ELSE
12000
12001 x_qualifier_tbl(l_qual_index).list_header_id := p_qp_list_header_id;
12002 x_qualifier_tbl(l_qual_index).qualifier_grouping_no := v_qualifier_grouping_no;
12003 x_qualifier_tbl(l_qual_index).qualifier_context := l_qualifier_context;
12004 x_qualifier_tbl(l_qual_index).qualifier_attribute := l_qualifier_attribute;
12005 x_qualifier_tbl(l_qual_index).qualifier_attr_value := l_qualifier_attr_value;
12006
12007 x_qualifier_tbl(l_qual_index).operation := 'CREATE';
12008 x_qualifier_tbl(l_qual_index).qualifier_attr_value_to := NULL;
12009 x_qualifier_tbl(l_qual_index).qualifier_id := NULL;
12010 x_qualifier_tbl(l_qual_index).comparison_operator_code := '=';
12011 x_qualifier_tbl(l_qual_index).start_date_active := NULL;
12012 x_qualifier_tbl(l_qual_index).end_date_active := NULL;
12013 x_qualifier_tbl(l_qual_index).activity_market_segment_id := NULL;
12014 x_qualifier_tbl(l_qual_index).list_line_id := -1;
12015 l_qual_index := l_qual_index+1;
12016 v_qualifier_grouping_no := v_qualifier_grouping_no+10;
12017 END IF;
12018 END LOOP; --End of cur_get_qual_lines_no_end_cust loop
12019 END IF; --IF for any end customer exists
12020
12021 --After processing records with operation_flag='I' make operation_flag of those records as NULL
12022 UPDATE ozf_sd_customer_details
12023 SET operation_flag = NULL
12024 WHERE request_header_id = p_sdr_header_id
12025 AND operation_flag = 'I';
12026
12027 -- Delete all the records from table ozf_sd_customer_details with operation_flag value as D
12028 DELETE FROM ozf_sd_customer_details
12029 WHERE request_header_id = p_sdr_header_id
12030 AND operation_flag = 'D';
12031
12032 OPEN cur_get_internal_order_number;
12033 FETCH cur_get_internal_order_number INTO l_internal_order_number,l_org_id;
12034 CLOSE cur_get_internal_order_number;
12035
12036 IF l_internal_order_number IS NOT NULL
12037 AND l_internal_order_number <> FND_API.G_MISS_NUM THEN
12038
12039 OPEN cur_get_order_header_id(l_internal_order_number,l_org_id);
12040 FETCH cur_get_order_header_id INTO l_order_header_id;
12041 CLOSE cur_get_order_header_id;
12042
12043 x_qualifier_tbl(l_qual_index).operation := 'CREATE';
12044 x_qualifier_tbl(l_qual_index).qualifier_attribute := 'QUALIFIER_ATTRIBUTE21';
12045 x_qualifier_tbl(l_qual_index).qualifier_attr_value := l_order_header_id;
12046 x_qualifier_tbl(l_qual_index).qualifier_grouping_no := -1;
12047 x_qualifier_tbl(l_qual_index).qualifier_context := 'ORDER';
12048 x_qualifier_tbl(l_qual_index).comparison_operator_code := '=';
12049
12050 x_qualifier_tbl(l_qual_index).list_line_id := -1;
12051 x_qualifier_tbl(l_qual_index).list_header_id := p_qp_list_header_id;
12052 x_qualifier_tbl(l_qual_index).start_date_active := NULL;
12053 x_qualifier_tbl(l_qual_index).end_date_active := NULL;
12054 x_qualifier_tbl(l_qual_index).qualifier_attr_value_to := NULL;
12055 x_qualifier_tbl(l_qual_index).qualifier_id := NULL;
12056
12057 l_qual_index := l_qual_index+1; --ER9447673
12058
12059 END IF;
12060
12061 IF l_modlist_count = 0 THEN --bug 12632240 ninarasi
12062 --ER9447673
12063 x_qualifier_tbl(l_qual_index).operation := 'CREATE';
12064 x_qualifier_tbl(l_qual_index).qualifier_attribute := 'QUALIFIER_ATTRIBUTE32';
12065 x_qualifier_tbl(l_qual_index).qualifier_attr_value := 'Y';
12066 x_qualifier_tbl(l_qual_index).qualifier_grouping_no := -1;
12067 x_qualifier_tbl(l_qual_index).qualifier_context := 'MODLIST';
12068 x_qualifier_tbl(l_qual_index).comparison_operator_code := '=';
12069
12070 x_qualifier_tbl(l_qual_index).list_line_id := -1;
12071 x_qualifier_tbl(l_qual_index).list_header_id := p_qp_list_header_id;
12072 x_qualifier_tbl(l_qual_index).start_date_active := NULL;
12073 x_qualifier_tbl(l_qual_index).end_date_active := NULL;
12074 x_qualifier_tbl(l_qual_index).qualifier_attr_value_to := NULL;
12075 x_qualifier_tbl(l_qual_index).qualifier_id := NULL;
12076 --ER9447673
12077 END IF;
12078
12079 EXCEPTION
12080 WHEN Fnd_Api.G_EXC_ERROR THEN
12081 x_return_status := Fnd_Api.g_ret_sts_error ;
12082 ROLLBACK TO populateSDQualifiers;
12083 Fnd_Msg_Pub.Count_AND_Get
12084 ( p_count => x_msg_count,
12085 p_data => x_msg_data,
12086 p_encoded => Fnd_Api.G_FALSE
12087 );
12088 WHEN Fnd_Api.G_EXC_UNEXPECTED_ERROR THEN
12089 x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
12090 ROLLBACK TO populateSDQualifiers;
12091 Fnd_Msg_Pub.Count_AND_Get
12092 ( p_count => x_msg_count,
12093 p_data => x_msg_data,
12094 p_encoded => Fnd_Api.G_FALSE
12095 );
12096 WHEN OTHERS THEN
12097 x_return_status := Fnd_Api.g_ret_sts_unexp_erroR ;
12098 ROLLBACK TO populateSDQualifiers;
12099 IF Fnd_Msg_Pub.Check_Msg_Level ( Fnd_Msg_Pub.G_MSG_LVL_UNEXP_ERROR )
12100 THEN
12101 Fnd_Msg_Pub.Add_Exc_Msg( G_PKG_NAME,'populateSDQualifiers');
12102 END IF;
12103 Fnd_Msg_Pub.Count_AND_Get
12104 ( p_count => x_msg_count,
12105 p_data => x_msg_data,
12106 p_encoded => Fnd_Api.G_FALSE
12107 );
12108 END populateSDQualifiers;
12109
12110
12111 /*
12112 This procedure is starting point of SD offer creation and updation.
12113 */
12114
12115 PROCEDURE process_sd_modifiers(
12116 p_sdr_header_id IN NUMBER
12117 ,p_init_msg_list IN VARCHAR2 :=FND_API.g_true
12118 ,p_api_version IN NUMBER
12119 ,p_commit IN VARCHAR2 :=FND_API.g_false
12120 ,x_return_status OUT NOCOPY VARCHAR2
12121 ,x_msg_count OUT NOCOPY NUMBER
12122 ,x_msg_data OUT NOCOPY VARCHAR2
12123 ,x_qp_list_header_id IN OUT NOCOPY NUMBER
12124 ,x_error_location OUT NOCOPY NUMBER)
12125 IS
12126 l_api_version CONSTANT NUMBER := 1.0;
12127 l_api_name CONSTANT VARCHAR2(30) := 'process_sd_modifiers';
12128 l_offer_id NUMBER;
12129 l_obj_ver_num NUMBER;
12130 l_excl_index NUMBER := 0;
12131 l_dummy NUMBER;
12132 l_user_status_id NUMBER := 0;
12133 l_accrual_type VARCHAR2(30);
12134 l_cost_center_id NUMBER;
12135 l_supplier_site_id NUMBER;
12136 l_cust_account_id NUMBER;
12137 l_site_use_id NUMBER;
12138 l_operation VARCHAR2(30);
12139 l_access_exists NUMBER;
12140 l_activity_access_id NUMBER;
12141 l_object_version_number NUMBER;
12142 l_access_id NUMBER;
12143 l_qp_list_header_id NUMBER;
12144 l_sdr_status_id NUMBER;
12145
12146 l_old_status_id NUMBER;
12147 l_theme_approval_req VARCHAR2(1);
12148 l_budget_approval_req VARCHAR2(1);
12149
12150
12151 l_modifier_list_rec ozf_offer_pvt.modifier_list_rec_type;
12152 l_modifier_line_tbl ozf_offer_pvt.modifier_line_tbl_type;
12153 l_dummy_modifier_line_tbl ozf_offer_pvt.modifier_line_tbl_type;
12154 l_exclusion_tbl ozf_offer_pvt.pricing_attr_tbl_type;
12155 l_qualifiers_tbl ozf_offer_pvt.qualifiers_tbl_type;
12156 l_qualifiers_tbl_out qp_qualifier_rules_pub.qualifiers_tbl_type;
12157 l_advanced_options_rec ozf_offer_pvt.ADVANCED_OPTION_REC_TYPE;
12158 l_access_rec ams_access_pvt.access_rec_type;
12159
12160
12161
12162 CURSOR c_offer_info(l_qp_list_header_id NUMBER) IS
12163 SELECT offer_id, offer_type, custom_setup_id, offer_code, tier_level, object_version_number, transaction_currency_code, user_status_id
12164 FROM ozf_offers
12165 WHERE qp_list_header_id = l_qp_list_header_id;
12166
12167 CURSOR c_user_status_id(l_new_status VARCHAR2) IS
12168 SELECT min(user_status_id)
12169 FROM ams_user_statuses_vl
12170 WHERE system_status_type = 'OZF_OFFR_STATUS'
12171 AND system_status_code=l_new_status;
12172
12173 CURSOR c_sdr_info(l_sdr_hdr_id NUMBER) IS
12174 SELECT accrual_type,cust_account_id,supplier_site_id
12175 FROM ozf_sd_request_headers_all_b
12176 WHERE request_header_id=l_sdr_hdr_id;
12177
12178 CURSOR c_supp_trd_prfl_info(l_supplier_site_id NUMBER) IS
12179 SELECT cust_account_id, site_use_id
12180 FROM ozf_supp_trd_prfls_all
12181 WHERE supplier_site_id=l_supplier_site_id;
12182
12183
12184 CURSOR c_allow_qty_increase(l_supplier_site_id NUMBER) IS
12185 SELECT allow_qty_increase
12186 FROM ozf_supp_trd_prfls_all
12187 WHERE supplier_site_id=l_supplier_site_id;
12188
12189 CURSOR c_offer_access(l_qp_list_header_id NUMBER,l_request_header_id NUMBER) IS
12190 SELECT access_id,user_id,status
12191 FROM (
12192 SELECT activity_access_id access_id,user_or_role_id user_id,'ACCESS' status
12193 FROM ams_act_access
12194 WHERE act_access_to_object_id=l_qp_list_header_id
12195 AND arc_act_access_to_object='OFFR'
12196 AND arc_user_or_role_type = 'USER'
12197 UNION
12198 SELECT request_access_id access_id, user_id user_id,'REQUEST' status
12199 FROM ozf_sd_request_access
12200 WHERE request_header_id=l_request_header_id
12201 AND approver_flag='Y'
12202 AND enabled_flag='Y');
12203
12204 CURSOR c_access_exists(l_resource_id NUMBER,l_qp_list_header_id NUMBER) IS
12205 SELECT 1
12206 FROM DUAL
12207 WHERE EXISTS (SELECT 1
12208 FROM ams_act_access
12209 WHERE act_access_to_object_id = l_qp_list_header_id
12210 AND arc_act_access_to_object='OFFR'
12211 AND user_or_role_id = l_resource_id
12212 AND arc_user_or_role_type = 'USER');
12213
12214 CURSOR c_offer_access_details(l_qp_list_header_id NUMBER,l_resource_id NUMBER) IS
12215 SELECT activity_access_id,object_version_number
12216 FROM ams_act_access
12217 WHERE act_access_to_object_id = l_qp_list_header_id
12218 AND arc_act_access_to_object = 'OFFR'
12219 AND user_or_role_id = l_resource_id
12220 AND arc_user_or_role_type = 'USER';
12221
12222 CURSOR c_get_sdr_status(p_sdr_header_id NUMBER) IS
12223 SELECT user_status_id
12224 FROM OZF_SD_REQUEST_HEADERS_ALL_B
12225 WHERE request_header_id=p_sdr_header_id;
12226
12227 CURSOR cur_is_theme_appr_req(p_custom_setup_id NUMBER) IS
12228 SELECT attr_available_flag
12229 FROM ams_custom_setup_attr
12230 WHERE custom_setup_id = p_custom_setup_id
12231 AND object_attribute = 'TAPL';
12232
12233 CURSOR cur_is_budget_appr_req(p_custom_setup_id NUMBER) IS
12234 SELECT attr_available_flag
12235 FROM ams_custom_setup_attr
12236 WHERE custom_setup_id = p_custom_setup_id
12237 AND object_attribute = 'BAPL';
12238
12239 CURSOR c_get_sdr_owner(p_sdr_header_id NUMBER) IS
12240 SELECT NVL(resource_id,-1)
12241 FROM ozf_sd_request_access
12242 WHERE request_header_id= p_sdr_header_id;
12243
12244 BEGIN
12245
12246 SAVEPOINT process_sd_modifiers;
12247 IF Fnd_Api.to_boolean(p_init_msg_list) THEN
12248 Fnd_Msg_Pub.initialize;
12249 END IF;
12250
12251 IF NOT Fnd_Api.compatible_api_call(l_api_version,
12252 p_api_version,
12253 l_api_name,
12254 g_pkg_name)
12255 THEN
12256 RAISE Fnd_Api.g_exc_unexpected_error;
12257 END IF;
12258
12259 x_return_status := Fnd_Api.g_ret_sts_success;
12260 x_error_location := 0;
12261 g_sd_offer := 'Y';
12262
12263 debug_message('N: qp_list_header_id' || x_qp_list_header_id);
12264
12265 IF FND_PROFILE.VALUE('OZF_SD_DEFAULT_BUDGET') IS NULL THEN
12266 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
12267 FND_MESSAGE.set_name('OZF', 'OZF_SD_OFFR_NO_BUDGET_REQUEST');
12268 FND_MSG_PUB.add;
12269 END IF;
12270 RAISE Fnd_Api.g_exc_unexpected_error;
12271 END IF;
12272
12273 /*decide operation*/
12274
12275 debug_message('N: qp_list_header_id' || x_qp_list_header_id);
12276
12277 l_qp_list_header_id := x_qp_list_header_id;
12278 IF x_qp_list_header_id IS NULL
12279 OR x_qp_list_header_id = Fnd_Api.g_miss_num THEN
12280 l_operation := 'CREATE';
12281 ELSE
12282 l_operation := 'UPDATE';
12283 END IF;
12284
12285 OPEN c_get_sdr_status(p_sdr_header_id);
12286 FETCH c_get_sdr_status INTO l_sdr_status_id;
12287 CLOSE c_get_sdr_status;
12288
12289 IF l_sdr_status_id = OZF_Utility_PVT.get_default_user_status('OZF_SD_REQUEST_STATUS','CANCELLED')
12290 OR l_sdr_status_id = OZF_Utility_PVT.get_default_user_status('OZF_SD_REQUEST_STATUS','CLOSED') THEN
12291
12292 OPEN c_offer_info(x_qp_list_header_id);
12293 FETCH c_offer_info INTO l_modifier_list_rec.offer_id, l_modifier_list_rec.offer_type,
12294 l_modifier_list_rec.custom_setup_id, l_modifier_list_rec.offer_code,
12295 l_modifier_list_rec.tier_level, l_modifier_list_rec.object_version_number,
12296 l_modifier_list_rec.transaction_currency_code,
12297 l_modifier_list_rec.user_status_id;
12298 CLOSE c_offer_info;
12299
12300
12301 IF x_qp_list_header_id IS NOT NULL THEN
12302 l_modifier_list_rec.qp_list_header_id := x_qp_list_header_id;
12303 l_modifier_list_rec.offer_operation := 'UPDATE';
12304 l_modifier_list_rec.status_code := 'COMPLETED';
12305 l_modifier_list_rec.modifier_operation := 'UPDATE';
12306 --l_modifier_list_rec.operation := 'UPDATE';
12307 l_modifier_list_rec.user_status_id := OZF_Utility_PVT.get_default_user_status('OZF_OFFER_STATUS','COMPLETED');
12308 l_qp_list_header_id := x_qp_list_header_id;
12309
12310 /*Complete Offer*/
12311 process_modifiers(
12312 p_init_msg_list => p_init_msg_list
12313 ,p_api_version => p_api_version
12314 ,p_commit => p_commit
12315 ,x_return_status => x_return_status
12316 ,x_msg_count => x_msg_count
12317 ,x_msg_data => x_msg_data
12318 ,p_offer_type => 'ACCRUAL'
12319 ,p_modifier_list_rec => l_modifier_list_rec
12320 ,p_modifier_line_tbl => l_dummy_modifier_line_tbl -- lines are already created. use empty line.
12321 ,x_qp_list_header_id => x_qp_list_header_id
12322 ,x_error_location => x_error_location);
12323
12324 GOTO COMPLETED_OFFER;
12325
12326 END IF;
12327 END IF;
12328
12329 /*Create Header record*/
12330 populateSDHeaderRec(
12331 x_return_status => x_return_status
12332 ,x_msg_count => x_msg_count
12333 ,x_msg_data => x_msg_data
12334 ,p_operation => l_operation
12335 ,p_sdr_header_id => p_sdr_header_id
12336 ,p_qp_list_header_id => x_qp_list_header_id
12337 ,x_modifier_list_rec => l_modifier_list_rec
12338 );
12339
12340 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
12341 RAISE Fnd_Api.g_exc_error;
12342 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
12343 RAISE Fnd_Api.g_exc_unexpected_error;
12344 END IF;
12345
12346 /*Create Header*/
12347 IF l_operation = 'CREATE' THEN
12348
12349 l_modifier_list_rec.modifier_operation := 'CREATE';
12350 l_modifier_list_rec.status_code := 'DRAFT';
12351 l_modifier_list_rec.user_status_id := ozf_utility_pvt.get_default_user_status('OZF_OFFER_STATUS','DRAFT');--1600;
12352
12353 IF l_modifier_list_rec.OWNER_ID IS NULL OR l_modifier_list_rec.OWNER_ID = fnd_api.g_miss_num THEN
12354 l_modifier_list_rec.OWNER_ID := ozf_utility_pvt.get_resource_id(NVL(FND_GLOBAL.user_id,-1));
12355 ELSE
12356 l_modifier_list_rec.OWNER_ID := l_modifier_list_rec.OWNER_ID;
12357 END IF;
12358
12359 l_modifier_list_rec.modifier_operation := 'CREATE';
12360
12361
12362 debug_message('N: l_modifier_list_rec.TRANSACTION_CURRENCY_CODE ' || l_modifier_list_rec.TRANSACTION_CURRENCY_CODE);
12363 debug_message('x_return_status ' ||x_return_status);
12364 debug_message('x_qp_list_header_id ' ||x_qp_list_header_id);
12365
12366
12367 ELSE
12368
12369 l_modifier_list_rec.qp_list_header_id:= x_qp_list_header_id;
12370
12371 IF l_modifier_list_rec.OWNER_ID IS NULL OR l_modifier_list_rec.OWNER_ID = -1
12372 OR l_modifier_list_rec.OWNER_ID = fnd_api.g_miss_num THEN
12373
12374 OPEN c_get_sdr_owner(p_sdr_header_id);
12375 FETCH c_get_sdr_owner INTO l_modifier_list_rec.OWNER_ID;
12376 CLOSE c_get_sdr_owner;
12377
12378 ELSE
12379 l_modifier_list_rec.OWNER_ID := l_modifier_list_rec.OWNER_ID;
12380 END IF;
12381
12382 END IF;
12383
12384 --dbms_output.put_line('Nirma 2 ' );
12385
12386
12387
12388
12389
12390 debug_message('N: l_offer_id'||l_offer_id);
12391 debug_message('N: l_modifier_list_rec.transaction_currency_code 33'||l_modifier_list_rec.transaction_currency_code);
12392 debug_message('N: pass list_header_id for update'||x_qp_list_header_id);
12393
12394 /*Create Discount Line Records*/
12395
12396 populateSDDiscountRulesRec(
12397 x_return_status => x_return_status
12398 ,x_msg_count => x_msg_count
12399 ,x_msg_data => x_msg_data
12400 ,p_operation => l_operation
12401 ,p_sdr_header_id => p_sdr_header_id
12402 ,p_qp_list_header_id => x_qp_list_header_id
12403 ,x_modifier_line_tbl => l_modifier_line_tbl
12404 );
12405
12406 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
12407 RAISE Fnd_Api.g_exc_error;
12408 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
12409 RAISE Fnd_Api.g_exc_unexpected_error;
12410 END IF;
12411
12412 debug_message('N: 11 l_modifier_line_tbl count ' || l_modifier_line_tbl.count);
12413
12414 /*Create Discount Lines*/
12415
12416 IF l_modifier_line_tbl.count>0 THEN
12417
12418 Ozf_Offer_Pvt.process_modifiers(
12419 p_init_msg_list => p_init_msg_list
12420 ,p_api_version => p_api_version
12421 ,p_commit => p_commit
12422 ,x_return_status => x_return_status
12423 ,x_msg_count => x_msg_count
12424 ,x_msg_data => x_msg_data
12425 ,p_offer_type => 'ACCRUAL'
12426 ,p_modifier_list_rec => l_modifier_list_rec
12427 ,p_modifier_line_tbl => l_modifier_line_tbl
12428 ,x_qp_list_header_id => l_dummy
12429 ,x_error_location => x_error_location);
12430
12431 ELSE
12432
12433 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
12434 FND_MESSAGE.set_name('OZF', 'OZF_OFFR_NO_DISC_LINES');
12435 FND_MSG_PUB.add;
12436 END IF;
12437 RAISE FND_API.g_exc_error;
12438 END IF;
12439
12440 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
12441 RAISE Fnd_Api.g_exc_error;
12442 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
12443 RAISE Fnd_Api.g_exc_unexpected_error;
12444 END IF;
12445
12446
12447 IF l_dummy IS NOT NULL THEN
12448 x_qp_list_header_id:=l_dummy;
12449 END IF;
12450
12451 OPEN c_offer_info(x_qp_list_header_id);
12452 FETCH c_offer_info INTO l_modifier_list_rec.offer_id,
12453 l_modifier_list_rec.offer_type,
12454 l_modifier_list_rec.custom_setup_id,
12455 l_modifier_list_rec.offer_code,
12456 l_modifier_list_rec.tier_level,
12457 l_modifier_list_rec.object_version_number,
12458 l_modifier_list_rec.transaction_currency_code,
12459 l_modifier_list_rec.user_status_id;
12460 CLOSE c_offer_info;
12461
12462
12463 IF l_modifier_list_rec.user_status_id IS NOT NULL AND l_modifier_list_rec.user_status_id <> fnd_api.g_miss_num THEN -- might have additional stage eg ACTIVE to go
12464 --dbms_output.put_line('l_modifier_list_rec.user_status_id set operation as update' );
12465 l_modifier_list_rec.offer_operation := 'UPDATE';
12466 l_modifier_list_rec.modifier_operation := 'UPDATE';
12467 l_modifier_list_rec.user_status_id := l_modifier_list_rec.user_status_id;
12468 l_modifier_list_rec.status_code := ozf_utility_pvt.get_system_status_code(l_modifier_list_rec.user_status_id);
12469 END IF;
12470
12471 /*Create Qualifier Line Records*/
12472 --dbms_output.put_line('N: x_qp_list_header_id '||x_qp_list_header_id);
12473
12474 IF x_qp_list_header_id IS NOT NULL THEN
12475 populateSDQualifiers(
12476 x_return_status => x_return_status
12477 ,x_msg_count => x_msg_count
12478 ,x_msg_data => x_msg_data
12479 ,p_sdr_header_id => p_sdr_header_id
12480 ,p_qp_list_header_id => x_qp_list_header_id
12481 ,x_qualifier_tbl => l_qualifiers_tbl
12482 );
12483 debug_message('N: count3 '||l_qualifiers_tbl.count);
12484
12485 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
12486 RAISE Fnd_Api.g_exc_error;
12487 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
12488 RAISE Fnd_Api.g_exc_unexpected_error;
12489 END IF;
12490
12491 /*Create Market Qualifiers*/
12492 OZF_Utility_PVT.debug_message(FND_LOG.LEVEL_STATEMENT,'OZF_OFFER_PVT.process_sd_modifiers','before process_market_qualifiers 5');
12493 process_market_qualifiers(
12494 p_init_msg_list => p_init_msg_list
12495 ,p_api_version => p_api_version
12496 ,p_commit => p_commit
12497 ,x_return_status => x_return_status
12498 ,x_msg_count => x_msg_count
12499 ,x_msg_data => x_msg_data
12500 ,p_qualifiers_tbl => l_qualifiers_tbl
12501 ,x_error_location => x_error_location
12502 ,x_qualifiers_tbl => l_qualifiers_tbl_out);
12503
12504 debug_message('N: count4 '||l_qualifiers_tbl_out.count);
12505
12506 /*IF x_return_status = Fnd_Api.g_ret_sts_error THEN
12507 RAISE Fnd_Api.g_exc_error;
12508 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
12509 RAISE Fnd_Api.g_exc_unexpected_error;
12510 END IF;*/
12511
12512 debug_message('N: activate the records '||x_return_status);
12513
12514
12515 l_advanced_options_rec.list_header_id := x_qp_list_header_id;
12516
12517 OPEN c_sdr_info(p_sdr_header_id);
12518 FETCH c_sdr_info INTO l_accrual_type, l_cust_account_id, l_supplier_site_id;
12519 CLOSE c_sdr_info;
12520
12521 IF l_accrual_type='SUPPLIER' THEN
12522 OPEN c_supp_trd_prfl_info(l_supplier_site_id);
12523 FETCH c_supp_trd_prfl_info INTO l_cust_account_id,l_site_use_id;
12524 CLOSE c_supp_trd_prfl_info;
12525 END IF;
12526
12527 l_advanced_options_rec.autopay_party_id := l_cust_account_id;
12528
12529 IF l_site_use_id IS NULL THEN
12530 l_advanced_options_rec.autopay_party_attr := 'CUSTOMER';
12531 --l_advanced_options_rec.autopay_party_id := l_cust_account_id;
12532 --l_advanced_options_rec.beneficiary_account_id := l_cust_account_id;
12533 ELSE
12534 l_advanced_options_rec.autopay_party_attr := 'CUSTOMER_BILL_TO';
12535 l_advanced_options_rec.autopay_party_id := l_site_use_id;
12536 --l_advanced_options_rec.beneficiary_account_id := l_cust_account_id;
12537 END IF;
12538
12539 /*Create Advance Option*/
12540 process_adv_options(
12541 p_init_msg_list => p_init_msg_list
12542 ,p_api_version => p_api_version
12543 ,p_commit => p_commit
12544 ,x_return_status => x_return_status
12545 ,x_msg_count => x_msg_count
12546 ,x_msg_data => x_msg_data
12547 ,p_advanced_options_rec => l_advanced_options_rec
12548 );
12549
12550 /*activate the offer */
12551 --change the create record to update record and activate the offer.
12552
12553 OPEN c_offer_info(x_qp_list_header_id);
12554 FETCH c_offer_info INTO l_modifier_list_rec.offer_id, l_modifier_list_rec.offer_type,
12555 l_modifier_list_rec.custom_setup_id, l_modifier_list_rec.offer_code,
12556 l_modifier_list_rec.tier_level, l_modifier_list_rec.object_version_number,
12557 l_modifier_list_rec.transaction_currency_code,
12558 l_modifier_list_rec.user_status_id;
12559 CLOSE c_offer_info;
12560
12561
12562 debug_message('N: process_adv_options '||x_return_status);
12563 debug_message('N: x_qp_list_header_id '|| x_qp_list_header_id);
12564
12565
12566 IF x_qp_list_header_id IS NOT NULL THEN
12567
12568 OPEN cur_is_theme_appr_req(l_modifier_list_rec.custom_setup_id);
12569 FETCH cur_is_theme_appr_req INTO l_theme_approval_req;
12570 CLOSE cur_is_theme_appr_req;
12571
12572
12573
12574 OPEN cur_is_budget_appr_req(l_modifier_list_rec.custom_setup_id);
12575 FETCH cur_is_budget_appr_req INTO l_budget_approval_req;
12576 CLOSE cur_is_budget_appr_req;
12577
12578 debug_message('N: l_theme_approval_req '|| l_theme_approval_req);
12579 debug_message('N: l_budget_approval_req '|| l_budget_approval_req);
12580
12581 IF l_theme_approval_req='Y' THEN
12582
12583 Ams_Approval_Submit_Pvt.Submit_Approval(
12584 p_api_version => 1,
12585 p_init_msg_list => FND_API.g_true,
12586 p_commit => FND_API.g_false,
12587 p_validation_level => FND_API.g_valid_level_full,
12588 p_object_id => x_qp_list_header_id,
12589 p_object_type => 'OFFR',
12590 p_new_status_id => 1640, -- planned status for offers
12591 x_return_status => x_return_status,
12592 x_msg_count => x_msg_count,
12593 x_msg_data => x_msg_data);
12594
12595 ELSIF l_budget_approval_req = 'Y' AND l_theme_approval_req='N' THEN
12596
12597 Ams_Approval_Submit_Pvt.Submit_Approval(
12598 p_api_version => 1,
12599 p_init_msg_list => FND_API.g_false,
12600 p_commit => FND_API.g_false,
12601 p_validation_level => FND_API.g_valid_level_full,
12602 p_object_id => x_qp_list_header_id,
12603 p_object_type => 'OFFR',
12604 p_new_status_id => 1604, -- will come from status dropdown on approval detail page
12605 x_return_status => x_return_status,
12606 x_msg_count => x_msg_count,
12607 x_msg_data => x_msg_data);
12608
12609 ELSE
12610
12611 l_modifier_list_rec.qp_list_header_id := x_qp_list_header_id;
12612 l_modifier_list_rec.offer_operation := 'UPDATE';
12613 l_modifier_list_rec.status_code := 'ACTIVE';
12614 l_modifier_list_rec.modifier_operation := 'UPDATE';
12615 --l_modifier_list_rec.operation := 'UPDATE';
12616 l_modifier_list_rec.user_status_id := OZF_Utility_PVT.get_default_user_status('OZF_OFFER_STATUS','ACTIVE');
12617 l_qp_list_header_id := x_qp_list_header_id;
12618
12619 /*Activate Offer*/
12620 process_modifiers(
12621 p_init_msg_list => p_init_msg_list
12622 ,p_api_version => p_api_version
12623 ,p_commit => p_commit
12624 ,x_return_status => x_return_status
12625 ,x_msg_count => x_msg_count
12626 ,x_msg_data => x_msg_data
12627 ,p_offer_type => 'ACCRUAL'
12628 ,p_modifier_list_rec => l_modifier_list_rec
12629 ,p_modifier_line_tbl => l_dummy_modifier_line_tbl -- lines are already created. use empty line.
12630 ,x_qp_list_header_id => x_qp_list_header_id
12631 ,x_error_location => x_error_location);
12632
12633 /*added this code to make SDR active */
12634
12635 /*IF l_modifier_list_rec.user_status_id = OZF_Utility_PVT.get_default_user_status('OZF_OFFER_STATUS','ACTIVE') THEN
12636
12637 debug_message('p_sdr_header_id1111 = '|| p_sdr_header_id);
12638
12639 update ozf_sd_request_headers_all_b
12640 set user_status_id = OZF_Utility_PVT.get_default_user_status('OZF_SD_REQUEST_STATUS','ACTIVE')
12641 where request_header_id = p_sdr_header_id;
12642
12643 END IF;*/
12644
12645 END IF;
12646
12647
12648
12649 debug_message('N: activate the records1 '||x_return_status);
12650 END IF;
12651
12652 IF x_return_status = Fnd_Api.g_ret_sts_error THEN
12653 RAISE Fnd_Api.g_exc_error;
12654 ELSIF x_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
12655 RAISE Fnd_Api.g_exc_unexpected_error;
12656 END IF;
12657
12658 IF l_qp_list_header_id IS NULL THEN
12659 l_qp_list_header_id := x_qp_list_header_id;
12660 END IF;
12661
12662 /*Add access code*/
12663 debug_message('N: x_qp_list_header_id '||l_qp_list_header_id);
12664 debug_message('N: p_sdr_header_id '||p_sdr_header_id);
12665 debug_message('N: b4 adding access');
12666
12667 FOR l_offer_access_rec IN c_offer_access(l_qp_list_header_id,p_sdr_header_id) LOOP
12668 debug_message('N: l_offer_access_rec.user_id '||l_offer_access_rec.user_id);
12669 debug_message('N: l_qp_list_header_id '||l_qp_list_header_id);
12670 l_access_exists := 0;
12671 OPEN c_access_exists (ozf_utility_pvt.get_resource_id(nvl(l_offer_access_rec.user_id,-1)),l_qp_list_header_id);
12672 FETCH c_access_exists INTO l_access_exists;
12673 CLOSE c_access_exists;
12674 debug_message('N: l_access_exists '||l_access_exists);
12675 debug_message('N: l_offer_access_rec.status '|| l_offer_access_rec.status);
12676
12677 IF l_access_exists <> 1 AND l_offer_access_rec.status='REQUEST' THEN
12678 --CREATE
12679 l_access_rec.act_access_to_object_id := l_qp_list_header_id;
12680 l_access_rec.arc_act_access_to_object := 'OFFR';
12681 l_access_rec.user_or_role_id := ozf_utility_pvt.get_resource_id(l_offer_access_rec.user_id);
12682 l_access_rec.arc_user_or_role_type := 'USER';
12683 l_access_rec.admin_flag := 'Y';
12684 l_access_rec.owner_flag := 'N';
12685 debug_message('N: l_access_rec.user_or_role_id '||l_access_rec.user_or_role_id);
12686 debug_message('N: l_access_rec.act_access_to_object_id '||l_access_rec.act_access_to_object_id);
12687
12688 ams_access_pvt.create_access(
12689 p_api_version => l_api_version
12690 ,p_init_msg_list => fnd_api.g_false
12691 ,p_validation_level => fnd_api.g_valid_level_full
12692 ,x_return_status => x_return_status
12693 ,x_msg_count => x_msg_count
12694 ,x_msg_data => x_msg_data
12695 ,p_commit => fnd_api.g_false
12696 ,p_access_rec => l_access_rec
12697 ,x_access_id => l_access_id);
12698
12699 IF x_return_status = fnd_api.g_ret_sts_error THEN
12700 RAISE fnd_api.g_exc_error;
12701 ELSIF x_return_status = fnd_api.g_ret_sts_unexp_error THEN
12702 RAISE fnd_api.g_exc_unexpected_error;
12703 END IF;
12704 debug_message('N: x_return_status '||x_return_status);
12705 END IF;
12706 END LOOP;
12707 END IF;
12708
12709 <<COMPLETED_OFFER>>
12710 NULL;
12711
12712 IF x_qp_list_header_id IS NULL THEN
12713 x_qp_list_header_id := l_qp_list_header_id;
12714 END IF;
12715
12716
12717 debug_message('Returned Status to Calling API '|| x_return_status);
12718 debug_message('Returned list_header_id to Calling API '|| x_qp_list_header_id);
12719
12720 EXCEPTION
12721 WHEN Fnd_Api.G_EXC_ERROR THEN
12722 x_return_status := Fnd_Api.g_ret_sts_error ;
12723 ROLLBACK TO process_sd_modifiers;
12724 Fnd_Msg_Pub.Count_AND_Get
12725 ( p_count => x_msg_count,
12726 p_data => x_msg_data,
12727 p_encoded => Fnd_Api.G_FALSE
12728 );
12729 WHEN Fnd_Api.G_EXC_UNEXPECTED_ERROR THEN
12730 x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
12731 ROLLBACK TO process_sd_modifiers;
12732 Fnd_Msg_Pub.Count_AND_Get
12733 ( p_count => x_msg_count,
12734 p_data => x_msg_data,
12735 p_encoded => Fnd_Api.G_FALSE
12736 );
12737 WHEN OTHERS THEN
12738 x_return_status := Fnd_Api.g_ret_sts_unexp_erroR ;
12739 ROLLBACK TO process_sd_modifiers;
12740 IF Fnd_Msg_Pub.Check_Msg_Level ( Fnd_Msg_Pub.G_MSG_LVL_UNEXP_ERROR )
12741 THEN
12742 Fnd_Msg_Pub.Add_Exc_Msg( G_PKG_NAME,l_api_name);
12743 END IF;
12744 Fnd_Msg_Pub.Count_AND_Get
12745 ( p_count => x_msg_count,
12746 p_data => x_msg_data,
12747 p_encoded => Fnd_Api.G_FALSE
12748 );
12749
12750 END process_sd_modifiers;
12751
12752 END OZF_Offer_Pvt;
12753