1 PACKAGE pv_check_match_pub AUTHID CURRENT_USER AS
2 /* $Header: pvxvcmps.pls 120.1 2005/12/20 04:39:31 rdsharma noship $ */
3
4 g_pkg_name CONSTANT VARCHAR2(30) := 'PV_CHECK_MATCH_PUB';
5
6 -- ---------------------------------------------------------
7 -- Attribute ID's
8 -- ---------------------------------------------------------
9 g_a_FUE CONSTANT NUMBER := 1;
10 g_a_Customer_Name CONSTANT NUMBER := 500;
11 g_a_Customer_Address_Specified CONSTANT NUMBER := 501;
12 g_a_Customer_Annual_Revenue CONSTANT NUMBER := 502;
13 g_a_Primary_Contact_Specified CONSTANT NUMBER := 503;
14 g_a_Contact_Role CONSTANT NUMBER := 504;
15 g_a_Purchase_Timeframe CONSTANT NUMBER := 505;
16 g_a_Budget_Status CONSTANT NUMBER := 506;
17 g_a_Lead_Score CONSTANT NUMBER := 507;
18 g_a_Lead_Status CONSTANT NUMBER := 508;
19 g_a_Total_Budget CONSTANT NUMBER := 509;
20 g_a_Product_Interest CONSTANT NUMBER := 510;
21 g_a_Purchase_Quantity_Product CONSTANT NUMBER := 511;
22 g_a_Purchase_Amount_Product CONSTANT NUMBER := 512;
23 g_a_Response_Channel CONSTANT NUMBER := 513;
24 g_a_Project_ CONSTANT NUMBER := 514;
25 g_a_Country_ CONSTANT NUMBER := 4;
26 g_a_Campaign_ CONSTANT NUMBER := 16;
27 g_a_Qualify_Flag CONSTANT NUMBER := 517;
28 g_a_Lead_Rating CONSTANT NUMBER := 518;
29 g_a_Sales_Channel CONSTANT NUMBER := 519;
30 g_a_Creation_Date CONSTANT NUMBER := 520;
31 g_a_PSS CONSTANT NUMBER := 9;
32 g_a_Total_Pur_Amt_Product CONSTANT NUMBER := 522;
33 g_a_Total_Pur_Amt_Solutions CONSTANT NUMBER := 523;
34 g_a_Purchase_Qty_Solutions CONSTANT NUMBER := 524;
35 g_a_Purchase_Amount_Solutions CONSTANT NUMBER := 525;
36 g_a_State_ CONSTANT NUMBER := 20;
37 g_a_Opportunity_Status CONSTANT NUMBER := 600;
38 g_a_Sales_Stage CONSTANT NUMBER := 601;
39 g_a_Close_Date CONSTANT NUMBER := 602;
40 g_a_Offer_ CONSTANT NUMBER := 603;
41 g_a_Win_Probability CONSTANT NUMBER := 604;
42 g_a_Sales_Methodology CONSTANT NUMBER := 605;
43 g_a_Customer_Account_Type CONSTANT NUMBER := 606;
44 g_a_Routing_Status CONSTANT NUMBER := 607;
45 g_a_Customer_Category CONSTANT NUMBER := 608;
46 --g_a_Additional_Channel_Offer CONSTANT NUMBER := 9;
47 g_a_Classification_ CONSTANT NUMBER := 610;
48 g_a_Functional_Expertise CONSTANT NUMBER := 700;
49 g_a_Partner_Type CONSTANT NUMBER := 3;
50 g_a_Industry_ CONSTANT NUMBER := 5;
51 g_a_Geographic_Coverage CONSTANT NUMBER := 8;
52 g_a_Partnership_Activity CONSTANT NUMBER := 10;
53 g_a_Partner_Name CONSTANT NUMBER := 11;
54 g_a_Capacity_Rating CONSTANT NUMBER := 18;
55 g_a_Partner_Level CONSTANT NUMBER := 19;
56 g_a_Partner_Enrollment_Date CONSTANT NUMBER := 708;
57 g_a_Total_Vendor_Assigned_Opp CONSTANT NUMBER := 709;
58 g_a_Total_PT_Created CONSTANT NUMBER := 710;
59 g_a_VAD_relationship_exists CONSTANT NUMBER := 711;
60
61 g_a_Area_Code CONSTANT NUMBER := 532;
62 g_a_County CONSTANT NUMBER := 533;
63 g_a_Province CONSTANT NUMBER := 534;
64 g_a_City CONSTANT NUMBER := 535;
65 g_a_Postal_Code CONSTANT NUMBER := 536;
66 g_a_Primary_Email_Specified CONSTANT NUMBER := 537;
67 g_a_customer_name CONSTANT NUMBER := 565;
68 g_a_email_address CONSTANT NUMBER := 582;
69 g_a_email_domain CONSTANT NUMBER := 568;
70 g_a_primary_contact_name CONSTANT NUMBER := 566;
71 g_a_primary_contact_job_title CONSTANT NUMBER := 567;
72 g_a_all CONSTANT NUMBER := 571;
73 g_a_lead_note_type CONSTANT NUMBER := 572;
74 g_a_created_within CONSTANT NUMBER := 573;
75 g_a_interaction_score CONSTANT NUMBER := 574;
76 g_a_Campaign_Setup_Type CONSTANT NUMBER := 575;
77 g_a_business_event_type CONSTANT NUMBER := 801;
78
79
80 /*
81 g_FUE_attr_id CONSTANT NUMBER := 510;
82 --g_FUE_attr_id CONSTANT NUMBER := 1;
83 g_purchase_amount_attr_id CONSTANT NUMBER := 512;
84 g_purchase_quantity_attr_id CONSTANT NUMBER := 511;
85 g_pss_attr_id CONSTANT NUMBER := 521;
86 g_pss_amount_attr_id CONSTANT NUMBER := 525;
87 g_pss_quantity_attr_id CONSTANT NUMBER := 524;
88 */
89 -- ---------------------------------------------------------
90 -- This is a dummy attribute ID, which is not a real
91 -- attribute in the seeded database.
92 -- ---------------------------------------------------------
93 g_dummy_attr_id CONSTANT NUMBER := 0;
94
95 -- ---------------------------------------------------------
96 -- Currency Conversion Status Flag. Currency_Conversion will
97 -- return this number if there is anything wrong during the
98 -- conversion.
99 -- ---------------------------------------------------------
100 g_currency_conversion_error CONSTANT NUMBER := FND_API.G_MISS_NUM;
101
102 -- ---------------------------------------------------------
103 -- Operators
104 -- ---------------------------------------------------------
105 g_equal CONSTANT VARCHAR2(30) := 'EQUALS';
106 g_not_equal CONSTANT VARCHAR2(30) := 'NOT_EQUALS';
107 g_greater_than CONSTANT VARCHAR2(30) := 'GREATER_THAN';
108 g_greater_than_equal CONSTANT VARCHAR2(30) := 'GREATER_THAN_OR_EQUALS';
109 g_less_than CONSTANT VARCHAR2(30) := 'LESS_THAN';
110 g_less_than_equal CONSTANT VARCHAR2(30) := 'LESS_THAN_OR_EQUALS';
111 g_is_null CONSTANT VARCHAR2(30) := 'IS_NULL';
112 g_is_not_null CONSTANT VARCHAR2(30) := 'IS_NOT_NULL';
113 g_between CONSTANT VARCHAR2(30) := 'BETWEEN';
114 g_begins_with CONSTANT VARCHAR2(30) := 'BEGINS_WITH';
115 g_ends_with CONSTANT VARCHAR2(30) := 'ENDS_WITH';
116 g_contains CONSTANT VARCHAR2(30) := 'CONTAINS';
117 g_not_contains CONSTANT VARCHAR2(30) := 'NOT_CONTAINS';
118
119
120 -- -----------------------------------------------------------------
121 -- Used in currency_conversion.
122 --
123 -- g_period_set_name = FND_PROFILE.Value('AS_FORECAST_CALENDAR')
124 -- g_period_type = FND_PROFILE.Value('AS_DEFAULT_PERIOD_TYPE');
125 -- -----------------------------------------------------------------
126 g_period_set_name VARCHAR2(100);
127 g_period_type VARCHAR2(100);
128 g_display_message BOOLEAN := TRUE;
129
130
131 -- ---------------------------------------------------------
132 -- This delimiter is used to separate tokens within an
133 -- attribute value for attributes with multiple tokens like
134 -- currency and purchase amount attributes.
135 --
136 -- For example,
137 -- 1000000:::USD:::20020103145608
138 -- ---------------------------------------------------------
139 g_token_delimiter CONSTANT VARCHAR2(3) := ':::';
140
141
142 TYPE r_entity_attr_value IS RECORD (
143 attribute_value VARCHAR2(4000),
144 return_type VARCHAR2(30)
145 );
146
147 TYPE t_entity_attr_value IS TABLE OF r_entity_attr_value
148 INDEX BY BINARY_INTEGER;
149
150 TYPE r_input_filter IS RECORD (
151 attribute_id NUMBER,
152 attribute_value VARCHAR2(4000)
153 );
154
155 TYPE t_input_filter IS TABLE OF r_input_filter
156 INDEX BY BINARY_INTEGER;
157
158
159
160 PROCEDURE Get_Entity_Attr_Values (
161 p_api_version_number IN NUMBER,
162 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
163 p_commit IN VARCHAR2 := FND_API.G_FALSE,
164 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
165 p_attribute_id IN NUMBER,
166 p_entity IN VARCHAR2,
167 p_entity_id IN NUMBER,
168 p_delimiter IN VARCHAR2,
169 p_expand_attr_flag IN VARCHAR2 := 'Y',
170 x_entity_attr_value IN OUT NOCOPY t_entity_attr_value,
171 x_return_status OUT NOCOPY VARCHAR2,
172 x_msg_count OUT NOCOPY NUMBER,
173 x_msg_data OUT NOCOPY VARCHAR2
174 );
175
176 FUNCTION Check_Match (
177 p_attribute_id IN NUMBER,
178 p_entity_attr_value IN VARCHAR2,
179 p_rule_attr_value IN VARCHAR2,
180 p_rule_to_attr_value IN VARCHAR2,
181 p_operator IN VARCHAR2,
182 p_input_filter IN t_input_filter,
183 p_delimiter IN VARCHAR2,
184 p_return_type IN VARCHAR2,
185 p_rule_currency_code IN VARCHAR2
186 )
187 RETURN BOOLEAN;
188
189 -- ------------------------------------------------------------------
190 -- Expose this to public.
191 -- ------------------------------------------------------------------
192 FUNCTION Check_Match (
193 p_attribute_id IN NUMBER,
194 p_entity IN VARCHAR2,
195 p_entity_id IN NUMBER,
196 p_rule_attr_value IN VARCHAR2,
197 p_rule_to_attr_value IN VARCHAR2,
198 p_operator IN VARCHAR2,
199 p_input_filter IN t_input_filter,
200 p_delimiter IN VARCHAR2,
201 p_rule_currency_code IN VARCHAR2,
202 x_entity_attr_value IN OUT NOCOPY t_entity_attr_value
203 )
204 RETURN BOOLEAN;
205
206
207 PROCEDURE Retrieve_Input_Filter (
208 p_api_version_number IN NUMBER,
209 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
210 p_commit IN VARCHAR2 := FND_API.G_FALSE,
211 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
212 p_process_rule_id IN NUMBER,
213 p_delimiter IN VARCHAR2 := '+++',
214 x_input_filter IN OUT NOCOPY t_input_filter,
215 x_return_status OUT NOCOPY VARCHAR2,
216 x_msg_count OUT NOCOPY NUMBER,
217 x_msg_data OUT NOCOPY VARCHAR2
218 );
219
220 -- -----------------------------------------------------------------------------------
221 -- Currency_Conversion
222 --
223 -- p_entity_attr_value comes in the form of 3 tokens of
224 -- <currency_amount>:::<currency_code>:::<currency_conversion_date>
225 --
226 -- where <currency_conversion_date> has the following date format:
227 --
228 -- yyyymmddhh24miss
229 --
230 -- e.g.
231 -- 100000:::USD:::20020103145100
232 -- -----------------------------------------------------------------------------------
233 FUNCTION Currency_Conversion(
234 p_entity_attr_value IN VARCHAR2,
235 p_rule_currency_code IN VARCHAR2,
236 p_no_exception_flag IN VARCHAR2 := 'N'
237
238 )
239 RETURN NUMBER;
240
241
242 -- -----------------------------------------------------------------------------------
243 -- Currency_Conversion
244 --
245 -- This function does not take 3 tokens as the one above. This assumes that the token
246 -- string has already been parsed into p_amount, p_currency_code, and
247 -- p_currency_conversion_date.
248 -- -----------------------------------------------------------------------------------
249 FUNCTION Currency_Conversion(
250 p_amount IN NUMBER,
251 p_currency_code IN VARCHAR2,
252 p_currency_conversion_date IN DATE := SYSDATE,
253 p_rule_currency_code IN VARCHAR2,
254 p_no_exception_flag IN VARCHAR2 := 'N'
255 )
256 RETURN NUMBER;
257
258
259 -- -----------------------------------------------------------------------------------
260 -- Currency_Conversion
261 -- -----------------------------------------------------------------------------------
262 FUNCTION Currency_Conversion(
263 p_entity_attr_value IN VARCHAR2
264 )
265 RETURN NUMBER;
266
267
268 -- -----------------------------------------------------------------------------------
269 -- Given a string that contains attribute values separated by p_delimiter, retrieve
270 -- the n th (p_index) token in the string.
271 -- e.g.
272 -- p_attr_value_string = '+++abc+++def+++'; p_delimiter = '+++'; p_index = 2.
273 -- This function will return 'def'.
274 -- If p_index is out of bound, return g_out_of_bound.
275 --
276 -- There are 2 types (p_input_type) of p_attr_value_string:
277 -- (1) +++abc+++def+++ ==> 'STD TOKEN'
278 -- (2) 1000000:::USD:::20011225164500 ==> 'In Token'
279 --
280 -- When the p_input_type is 'In Token', we will pad p_attr_value_string with
281 -- p_delimiter like the following:
282 -- :::1000000:::USD:::20011225164500:::
283 -- -----------------------------------------------------------------------------------
284 FUNCTION Retrieve_Token(
285 p_delimiter VARCHAR2,
286 p_attr_value_string VARCHAR2,
287 p_input_type VARCHAR2,
288 p_index NUMBER
289 )
290 RETURN VARCHAR2;
291
295 --
292 -- -----------------------------------------------------------------------------------
293 -- Given a string, p_string, search for the number of tokens separated by the
294 -- delimiter, p_delimiter.
296 -- e.g.
297 -- p_string = '+++abc+++def+++ghi+++'
298 -- p_delimiter = '+++'
299 -- The function will return 3 because there are 3 tokens in the string.
300 -- -----------------------------------------------------------------------------------
301 FUNCTION Get_Num_Of_Tokens (
302 p_delimiter VARCHAR2,
303 p_string VARCHAR2
304 )
305 RETURN NUMBER;
306
307
308 -- -----------------------------------------------------------------------------------
309 -- For given a Partner_Id, Attribute_id, it returns value for currency related attribute
310 --
311 -- -----------------------------------------------------------------------------------
312 FUNCTION get_attr_curr(
313 p_partner_id IN NUMBER ,
314 p_attribute_id IN NUMBER)
315 RETURN VARCHAR2;
316
317 -- -----------------------------------------------------------------------------------
318 -- For given a Partner_Id, Attribute_id, it returns value for count related attribute
319 --
320 -- -----------------------------------------------------------------------------------
321 FUNCTION get_attr_cnt(
322 p_partner_id IN NUMBER ,
323 p_attribute_id IN NUMBER)
324 RETURN NUMBER;
325
326
327 -- -----------------------------------------------------------------------------------
328 -- For given a Partner_Id, Attribute_id, it returns value for rate related attribute
329 --
330 -- -----------------------------------------------------------------------------------
331 FUNCTION get_attr_rate(
332 p_partner_id IN NUMBER ,
333 p_attribute_id IN NUMBER)
334 RETURN NUMBER;
335
336 -- -----------------------------------------------------------------------------------
337 -- For a given ATTRIBUTE_ID, and ATTR_CODE_ID it returns description of the attribute
338 -- code_id. E.g. It's mainly used for Partner_Level attribute only.
339 --
340 -- -----------------------------------------------------------------------------------
341 FUNCTION get_partner_level_desc(
342 p_attribute_id IN NUMBER,
343 p_attr_code_id IN NUMBER
344 )
345 RETURN VARCHAR2;
346
347 -- -----------------------------------------------------------------------------------
348 -- For a given a ATTRIBUTE_ID, and ATTR_CODE, it returns description of the attribute
349 -- code. E.g. It's mainly used for all attributes other than Partner_Level code.
350 --
351 -- -----------------------------------------------------------------------------------
352 FUNCTION get_attr_code_desc(
353 p_attribute_id IN NUMBER,
354 p_attr_code IN VARCHAR2
355 )
356 RETURN VARCHAR2;
357
358 END pv_check_match_pub;