DBA Data[Home] [Help]

PACKAGE: APPS.FTE_QP_ENGINE

Source


1 PACKAGE FTE_QP_ENGINE AUTHID CURRENT_USER as
2 /* $Header: FTEFRQPS.pls 115.10 2003/11/14 01:51:43 vphalak ship $ */
3 
4 -- This package encapsulates all qp engine related methods and data structures.
5 -- It provides several utility packages to create engine input records.
6 -- It will also hold engine i/p and o/p in global tables per event.
7 
8   /*
9    TYPE pricing_control_input_rec_type IS RECORD (
10         pricing_event_num         NUMBER,
11         currency_code             VARCHAR2(30),
12         lane_id                   NUMBER,
13         price_list_id             NUMBER,
14         party_id                  NUMBER
15    );
16   */
17 
18    TYPE pricing_engine_def_rec_type    IS RECORD (
19         pricing_event_num         NUMBER,   --index
20         pricing_event_code        VARCHAR2(30),
21         request_type_code         VARCHAR2(30),
22         line_type_code            VARCHAR2(30),
23         price_flag                VARCHAR2(1)
24    );
25 
26    TYPE pricing_engine_def_tab_type IS TABLE OF pricing_engine_def_rec_type INDEX BY BINARY_INTEGER;
27 
28    -- brought over from freight pricing. Contains some changes
29    /*
30    TYPE pricing_engine_input_rec_type IS RECORD
31                 (input_index                                    NUMBER , -- Same as QP engine line_index ?
32                  instance_index                                 NUMBER ,  -- Origin pricing dual instance. Can be more than one input rec only in case of pricing objective consideration/percel hundredwt.
33                  category_id                                    NUMBER DEFAULT NULL, -- Populated for WITHIN
34                  basis                                          NUMBER DEFAULT NULL, -- Populated for ACROSS
35                  line_quantity                                  NUMBER ,
36                  line_uom                                       VARCHAR2(60)  ,
37                  input_set_number                               NUMBER DEFAULT 1  -- indentifies an input set (for stuff like parcel hundred wt)
38                  );
39 
40    TYPE pricing_engine_input_tab_type IS TABLE OF pricing_engine_input_rec_type INDEX BY BINARY_INTEGER;
41   */
42 
43 
44   /*
45    -- brought over from freight pricing. Contains some changes
46    TYPE pricing_attribute_rec_type IS RECORD
47                 (attribute_index                                NUMBER ,
48                  input_index                                    NUMBER , -- Origin QP engine input line index
49                  attribute_name                                 VARCHAR2(60) ,
50                  attribute_value                                VARCHAR2(240),
51                  attribute_value_to                             VARCHAR2(240) DEFAULT NULL
52                  );
53 
54    TYPE pricing_attribute_tab_type IS TABLE OF pricing_attribute_rec_type INDEX BY BINARY_INTEGER;
55   */
56 
57    TYPE qualifier_rec_type IS RECORD
58                 (qualifier_index                                NUMBER ,
59                  input_index                                    NUMBER , -- Origin QP engine input line index
60                  qualifier_name                                 VARCHAR2(60) ,
61                  qualifier_value                                VARCHAR2(240),
62                  qualifier_value_to                             VARCHAR2(240) DEFAULT NULL,
63                  operator                                       VARCHAR2(30)  DEFAULT '='
64                  );
65 
66    -- This type stores additional stuff that should go along with a qp line_rec
67    -- mainly used to associate set number to a line rec
68    TYPE line_extras_rec IS RECORD
69                 (  line_index                                           NUMBER,
70                    input_set_number                                     NUMBER,
71                    category_id                                          NUMBER
72                  );
73    -- This table will have one record per input line rec
74    TYPE line_extras_tab_type IS TABLE OF line_extras_rec INDEX BY BINARY_INTEGER;
75 
76 
77    TYPE commodity_price_rec_type  IS RECORD (
78            category_id               NUMBER, --index
79            unit_price                NUMBER,
80            total_wt                  NUMBER,
81            priced_uom                VARCHAR2(30),       -- AG 5/12
82            output_line_index         NUMBER,       -- AG 5/13
83            output_line_priced_quantity NUMBER,       -- xizhang 11/22/02 in original line uom
84            wt_uom                    VARCHAR2(30) );  -- This will always be in deficit wt. uom
85 
86    TYPE commodity_price_tbl_type IS TABLE OF commodity_price_rec_type INDEX BY BINARY_INTEGER;
87 
88 
89 -- Parcel output conditions
90    G_PAR_NO_MP_PRICE   NUMBER := 1; -- singlepiece all line successful, multipiece all line ipl
91    G_PAR_NO_SP_PRICE   NUMBER := 2; -- singlepiece all line ipl or parcial ipl, multipiece all line successful
92 
93 
94 
95 -- pricing events
96 G_LINE_EVENT_NUM    NUMBER := 1;
97 G_CHARGE_EVENT_NUM  NUMBER := 2;
98 --G_LINE_EVENT_CODE    VARCHAR2(30) := 'LINE';
99 --G_CHARGE_EVENT_CODE  VARCHAR2(30) := 'PRICE_LOAD';  -- should have a proper value (say FTE_CHARGE_EVENT)
100 G_LINE_EVENT_CODE    VARCHAR2(30) := 'FTE_PRICE_LINE';
101 G_CHARGE_EVENT_CODE  VARCHAR2(30) := 'FTE_APPLY_MOD';  -- should have a proper value (say FTE_CHARGE_EVENT)
102 
103 G_EXTRAS_OFFSET    NUMBER := 100000; -- offset that is used to lookup into the extras tbl
104 
105 
106   -- input to QP
107   G_I_LINE_INDEX                   QP_PREQ_GRP.PLS_INTEGER_TYPE;
108   G_I_LINE_TYPE_CODE               QP_PREQ_GRP.VARCHAR_TYPE;
109   G_I_PRICING_EFFECTIVE_DATE       QP_PREQ_GRP.DATE_TYPE   ;
110   G_I_ACTIVE_DATE_FIRST            QP_PREQ_GRP.DATE_TYPE   ;
111   G_I_ACTIVE_DATE_FIRST_TYPE       QP_PREQ_GRP.VARCHAR_TYPE;
112   G_I_ACTIVE_DATE_SECOND           QP_PREQ_GRP.DATE_TYPE   ;
113   G_I_ACTIVE_DATE_SECOND_TYPE      QP_PREQ_GRP.VARCHAR_TYPE ;
114   G_I_LINE_QUANTITY                QP_PREQ_GRP.NUMBER_TYPE ;
115   G_I_LINE_UOM_CODE                QP_PREQ_GRP.VARCHAR_TYPE;
116   G_I_REQUEST_TYPE_CODE            QP_PREQ_GRP.VARCHAR_TYPE;
117   G_I_PRICED_QUANTITY              QP_PREQ_GRP.NUMBER_TYPE;
118   G_I_PRICED_UOM_CODE              QP_PREQ_GRP.VARCHAR_TYPE;
119   G_I_CURRENCY_CODE                QP_PREQ_GRP.VARCHAR_TYPE;
120   G_I_UNIT_PRICE                   QP_PREQ_GRP.NUMBER_TYPE;
121   G_I_PERCENT_PRICE                QP_PREQ_GRP.NUMBER_TYPE;
122   G_I_UOM_QUANTITY                 QP_PREQ_GRP.NUMBER_TYPE;
123   G_I_ADJUSTED_UNIT_PRICE          QP_PREQ_GRP.NUMBER_TYPE;
124   G_I_UPD_ADJUSTED_UNIT_PRICE      QP_PREQ_GRP.NUMBER_TYPE;
125   G_I_PROCESSED_FLAG               QP_PREQ_GRP.VARCHAR_TYPE;
126   G_I_PRICE_FLAG                   QP_PREQ_GRP.VARCHAR_TYPE;
127   G_I_LINE_ID                      QP_PREQ_GRP.NUMBER_TYPE;
128   G_I_PROCESSING_ORDER             QP_PREQ_GRP.PLS_INTEGER_TYPE;
129   G_I_PRICING_STATUS_CODE          QP_PREQ_GRP.VARCHAR_TYPE;
130   G_I_PRICING_STATUS_TEXT          QP_PREQ_GRP.VARCHAR_TYPE;
131   G_I_ROUNDING_FLAG                QP_PREQ_GRP.FLAG_TYPE;
132   G_I_ROUNDING_FACTOR              QP_PREQ_GRP.PLS_INTEGER_TYPE;
133   G_I_QUALIFIERS_EXIST_FLAG        QP_PREQ_GRP.VARCHAR_TYPE;
134   G_I_PRICING_ATTRS_EXIST_FLAG     QP_PREQ_GRP.VARCHAR_TYPE;
135   G_I_PRICE_LIST_ID                QP_PREQ_GRP.NUMBER_TYPE;
136   G_I_VALIDATED_FLAG               QP_PREQ_GRP.VARCHAR_TYPE;
137   G_I_PRICE_REQUEST_CODE           QP_PREQ_GRP.VARCHAR_TYPE;
138   G_I_USAGE_PRICING_TYPE           QP_PREQ_GRP.VARCHAR_TYPE;
139   G_I_LINE_CATEGORY                QP_PREQ_GRP.VARCHAR_TYPE;
140 
141   G_I_A_LINE_INDEX                 QP_PREQ_GRP.PLS_INTEGER_TYPE;
142   G_I_A_LINE_DETAIL_INDEX          QP_PREQ_GRP.PLS_INTEGER_TYPE;
143   G_I_A_ATTRIBUTE_LEVEL            QP_PREQ_GRP.VARCHAR_TYPE;
144   G_I_A_ATTRIBUTE_TYPE             QP_PREQ_GRP.VARCHAR_TYPE;
145   G_I_A_LIST_HEADER_ID             QP_PREQ_GRP.NUMBER_TYPE;
146   G_I_A_LIST_LINE_ID               QP_PREQ_GRP.NUMBER_TYPE;
147   G_I_A_CONTEXT                    QP_PREQ_GRP.VARCHAR_TYPE;
148   G_I_A_ATTRIBUTE                  QP_PREQ_GRP.VARCHAR_TYPE;
149   G_I_A_VALUE_FROM                 QP_PREQ_GRP.VARCHAR_TYPE;
150   G_I_A_SETUP_VALUE_FROM           QP_PREQ_GRP.VARCHAR_TYPE;
151   G_I_A_VALUE_TO                   QP_PREQ_GRP.VARCHAR_TYPE;
152   G_I_A_SETUP_VALUE_TO             QP_PREQ_GRP.VARCHAR_TYPE;
153   G_I_A_GROUPING_NUMBER            QP_PREQ_GRP.PLS_INTEGER_TYPE;
154   G_I_A_NO_QUALIFIERS_IN_GRP       QP_PREQ_GRP.PLS_INTEGER_TYPE;
155   G_I_A_COMPARISON_OPERATOR_TYPE   QP_PREQ_GRP.VARCHAR_TYPE;
156   G_I_A_VALIDATED_FLAG             QP_PREQ_GRP.VARCHAR_TYPE;
157   G_I_A_APPLIED_FLAG               QP_PREQ_GRP.VARCHAR_TYPE;
158   G_I_A_PRICING_STATUS_CODE        QP_PREQ_GRP.VARCHAR_TYPE;
159   G_I_A_PRICING_STATUS_TEXT        QP_PREQ_GRP.VARCHAR_TYPE;
160   G_I_A_QUALIFIER_PRECEDENCE       QP_PREQ_GRP.PLS_INTEGER_TYPE;
161   G_I_A_DATATYPE                   QP_PREQ_GRP.VARCHAR_TYPE;
162   G_I_A_PRICING_ATTR_FLAG          QP_PREQ_GRP.VARCHAR_TYPE;
163   G_I_A_QUALIFIER_TYPE             QP_PREQ_GRP.VARCHAR_TYPE;
164   G_I_A_PRODUCT_UOM_CODE           QP_PREQ_GRP.VARCHAR_TYPE;
165   G_I_A_EXCLUDER_FLAG              QP_PREQ_GRP.VARCHAR_TYPE;
166   G_I_A_PRICING_PHASE_ID           QP_PREQ_GRP.PLS_INTEGER_TYPE;
167   G_I_A_INCOMPATABILITY_GRP_CODE   QP_PREQ_GRP.VARCHAR_TYPE;
168   G_I_A_LINE_DETAIL_TYPE_CODE      QP_PREQ_GRP.VARCHAR_TYPE;
169   G_I_A_MODIFIER_LEVEL_CODE        QP_PREQ_GRP.VARCHAR_TYPE;
170   G_I_A_PRIMARY_UOM_FLAG           QP_PREQ_GRP.VARCHAR_TYPE;
171 
172   g_I_control_rec                  QP_PREQ_GRP.CONTROL_RECORD_TYPE;
173   g_I_line_extras_tbl              line_extras_tab_type;
174 
175   -- output from QP
176   g_O_line_tbl                     QP_PREQ_GRP.LINE_TBL_TYPE;
177   g_O_line_detail_tbl              QP_PREQ_GRP.LINE_DETAIL_TBL_TYPE;
178 
179  -- stores defaults for each pricing event
180  --g_engine_defaults_tab       pricing_engine_def_tab_type;
181 
182 
183 
184  -- we need procedures to :
185  --        create the control record
186  --        create line record
187  --        create attribute record
188  --        create qualifier record
189 
190  -- creates a control record based on defaults and adds it to the input table for the event
191  PROCEDURE create_control_record (p_event_num  IN NUMBER,
192                                   x_return_status  OUT NOCOPY  VARCHAR2);
193 
194  -- creates a single line record and adds it to the event input table
195  PROCEDURE  create_line_record (p_pricing_control_rec       IN  fte_freight_pricing.pricing_control_input_rec_type,
196                                 p_pricing_engine_input_rec  IN  fte_freight_pricing.pricing_engine_input_rec_type,
197                                 x_return_status             OUT NOCOPY  VARCHAR2);
198 
199  -- creates a single qualifier record and adds it to the appropriate i/p table
200  PROCEDURE  create_qual_record (p_event_num             IN  NUMBER,
201                                 p_qual_rec              IN  qualifier_rec_type,
202                                 x_return_status         OUT NOCOPY  VARCHAR2);
203 
204  -- creates a single attribute record and adds it to the appropriate i/p table
205  PROCEDURE  create_attr_record         (p_event_num             IN  NUMBER,
206                                         p_attr_rec              IN  fte_freight_pricing.pricing_attribute_rec_type,
207                                         x_return_status         OUT NOCOPY  VARCHAR2);
208 
209 -- This procedure is called to create pricing attributes per line rec from the input attr rows
210 PROCEDURE prepare_qp_line_attributes (
211         p_event_num               IN     NUMBER,
212         p_input_index             IN     NUMBER,
213         p_attr_rows               IN     fte_freight_pricing.pricing_attribute_tab_type,
214         x_return_status           OUT NOCOPY     VARCHAR2 );
215 
216 PROCEDURE prepare_qp_line_qualifiers (p_event_num            IN     NUMBER,
217                                       p_pricing_control_rec     IN     fte_freight_pricing.pricing_control_input_rec_type,
218                                       p_input_index             IN     NUMBER,
219                                       x_return_status           OUT NOCOPY     VARCHAR2 );
220 
221 
222 -- add one qp output line detail record into qp output line detail table
223 -- most of the qp output should come directly from qp
224 -- since qp cannot handle all of FTE pricing reqirement (e.g. deficit weight for LTL)
225 -- In some cases, FTE pricing engine needs to add some more records into
226 -- qp output tables
227 PROCEDURE add_qp_output_detail(
228   p_line_index		IN NUMBER,
229   p_list_line_type_code	IN VARCHAR2,
230   p_charge_subtype_code IN VARCHAR2,
231   p_adjustment_amount	IN NUMBER,
232   x_return_status OUT NOCOPY  VARCHAR2);
233 
234 --PROCEDURE call_qp_api    ( p_event_num      IN   NUMBER,
235 --                           x_return_status  OUT  VARCHAR2);
236 
237 PROCEDURE   call_qp_api  ( x_qp_output_line_rows    OUT NOCOPY  QP_PREQ_GRP.LINE_TBL_TYPE,
238                            x_qp_output_detail_rows  OUT NOCOPY  QP_PREQ_GRP.LINE_DETAIL_TBL_TYPE,
239                            x_return_status          OUT NOCOPY   VARCHAR2);
240 
241 
242 -- return the pointer to the qp outputs
243 PROCEDURE get_qp_output(
244   x_qp_output_line_rows    OUT NOCOPY  QP_PREQ_GRP.LINE_TBL_TYPE,
245   x_qp_output_detail_rows  OUT NOCOPY  QP_PREQ_GRP.LINE_DETAIL_TBL_TYPE,
246   x_return_status OUT NOCOPY  VARCHAR2);
247 
248 -- other utility methods ---
249 
250  -- this procedure calculates the total base price of a shipment, for a given set.
251  -- multiplies unit price by line quantity
252  -- price is in the priced currency
253 
254  PROCEDURE get_total_base_price       (p_set_num          IN NUMBER DEFAULT 1,
255                                        -- x_priced_currency  OUT NUMBER,
256                                        x_price            OUT NOCOPY  NUMBER,
257                                        x_return_status    OUT NOCOPY  VARCHAR2);
258 
259 -- prorate (apply) new charge across engine output lines by ratio of current unit_price to current total unit price?
260 -- ( it could also be by ratio of current line amount to current total base price)
261 -- assumes that the new price is in the priced currency.
262  PROCEDURE apply_new_base_price       (p_set_num          IN NUMBER  DEFAULT 1,
263                                        p_new_total_price  IN NUMBER,
264                                        x_return_status    OUT NOCOPY  VARCHAR2);
265 
266 
267 -- copies input lines of one event to the input of another event
268 -- the base prices from the source event are carried over to the input of the target event
269 -- currently it will copy only from event 1 to event 2
270  PROCEDURE prepare_next_event_request ( x_return_status    OUT NOCOPY  VARCHAR2);
271 
272    -- get me unit price for each individual commodity for each set
273   -- get me total wt. for each individual commodity
274   -- give me all weights in the deficit wt uom
275   -- currently we have implementation only for event num =1
276  PROCEDURE analyse_output_for_deficit_wt (p_set_num          IN NUMBER,
277                                           p_wt_uom           IN VARCHAR2,
278                                           x_commodity_price_rows  OUT NOCOPY  commodity_price_tbl_type,
279                                           x_return_status    OUT NOCOPY  VARCHAR2);
280 
281  -- delete a set from the input and output lines for event 1
282  PROCEDURE delete_set_from_line_event(p_set_num          IN NUMBER,
283                                       x_return_status    OUT NOCOPY  VARCHAR2);
284 
285 
286 
287  -- delete from event tables for the specified line_index
288  --PROCEDURE delete_lines(p_event_num IN NUMBER DEFAULT 1,
289  --                       p_line_index IN NUMBER,
290  --                       x_return_status    OUT VARCHAR2);
291 
292 PROCEDURE delete_lines(p_line_index      IN NUMBER,
293                        x_qp_output_line_rows    IN OUT NOCOPY  QP_PREQ_GRP.LINE_TBL_TYPE,
294                        x_qp_output_detail_rows  IN OUT NOCOPY  QP_PREQ_GRP.LINE_DETAIL_TBL_TYPE,
295                        x_return_status   OUT NOCOPY  VARCHAR2);
296 
297 -- clear qp input line table, line extra table, attribute/qualifier tabl
298 PROCEDURE clear_qp_input(x_return_status OUT NOCOPY  VARCHAR2);
299 
300  --debug methods
301 
302 PROCEDURE print_qp_input;
303 
304 PROCEDURE print_qp_output;
305 
306 PROCEDURE check_qp_output_errors (x_return_status  OUT NOCOPY  VARCHAR2);
307 
308 PROCEDURE check_tl_qp_output_errors (x_return_status  OUT NOCOPY  VARCHAR2);
309 
310 PROCEDURE check_parcel_output_errors (p_event_num      IN NUMBER,
311                                       x_return_code    OUT NOCOPY  NUMBER,
312                                       x_return_status  OUT NOCOPY  VARCHAR2);
313 
314 PROCEDURE clear_globals (
315   x_return_status OUT NOCOPY VARCHAR2);
316 
317 END FTE_QP_ENGINE;