Showing posts with label Oracle Pricing. Show all posts
Showing posts with label Oracle Pricing. Show all posts

Friday, October 4, 2013

API to Delete Price List Lines from Price List

DECLARE
   gpr_return_status                                 VARCHAR2 (1) := NULL;
   gpr_msg_count                                     NUMBER := 0;
   gpr_msg_data                                      VARCHAR2 (2000);
   gpr_price_list_rec                                qp_price_list_pub.price_list_rec_type;
   gpr_price_list_val_rec                            qp_price_list_pub.price_list_val_rec_type;
   gpr_price_list_line_tbl                           qp_price_list_pub.price_list_line_tbl_type;
   gpr_price_list_line_val_tbl                       qp_price_list_pub.price_list_line_val_tbl_type;
   gpr_qualifiers_tbl                                qp_qualifier_rules_pub.qualifiers_tbl_type;
   gpr_qualifiers_val_tbl                            qp_qualifier_rules_pub.qualifiers_val_tbl_type;
   gpr_pricing_attr_tbl                              qp_price_list_pub.pricing_attr_tbl_type;
   gpr_pricing_attr_val_tbl                          qp_price_list_pub.pricing_attr_val_tbl_type;
   ppr_price_list_rec                                qp_price_list_pub.price_list_rec_type;
   ppr_price_list_val_rec                            qp_price_list_pub.price_list_val_rec_type;
   ppr_price_list_line_tbl                           qp_price_list_pub.price_list_line_tbl_type;
   ppr_price_list_line_val_tbl                       qp_price_list_pub.price_list_line_val_tbl_type;
   ppr_qualifiers_tbl                                qp_qualifier_rules_pub.qualifiers_tbl_type;
   ppr_qualifiers_val_tbl                            qp_qualifier_rules_pub.qualifiers_val_tbl_type;
   ppr_pricing_attr_tbl                              qp_price_list_pub.pricing_attr_tbl_type;
   ppr_pricing_attr_val_tbl                          qp_price_list_pub.pricing_attr_val_tbl_type;
   k                                                 NUMBER := 1;
   j                                                 NUMBER := 1;
BEGIN
   oe_debug_pub.initialize;
   oe_debug_pub.setdebuglevel (5);
   oe_msg_pub.initialize;
   DBMS_OUTPUT.put_line ('Debug File = ' || oe_debug_pub.g_dir || '/' || oe_debug_pub.g_file);
--dbms_output.put_line('after get price list ');
   /* setup the list_header rec for update */
   gpr_price_list_rec.list_header_id                        := '<price_list_header_id>';
   gpr_price_list_rec.NAME                                  := '<price_list_name>';
   gpr_price_list_rec.list_type_code                        := 'PRL';
   gpr_price_list_rec.description                           := '<price_list_description>';
   gpr_price_list_rec.operation                             := qp_globals.g_opr_update;
-- delete the price list line rec
   gpr_price_list_line_tbl (k).list_header_id               := '<price_list_header_id>';
   gpr_price_list_line_tbl (k).list_line_id                 := '<price_list_line_id>';
   gpr_price_list_line_tbl (k).list_line_type_code          := 'PLL';
   gpr_price_list_line_tbl (k).operation                    := qp_globals.g_opr_delete;
--dbms_output.put_line('before process price list ');
   qp_price_list_pub.process_price_list (p_api_version_number          => 1
                                       , p_init_msg_list               => fnd_api.g_false
                                       , p_return_values               => fnd_api.g_false
                                       , p_commit                      => fnd_api.g_false
                                       , x_return_status               => gpr_return_status
                                       , x_msg_count                   => gpr_msg_count
                                       , x_msg_data                    => gpr_msg_data
                                       , p_price_list_rec              => gpr_price_list_rec
                                       , p_price_list_line_tbl         => gpr_price_list_line_tbl
                                       , p_pricing_attr_tbl            => gpr_pricing_attr_tbl
                                       , x_price_list_rec              => ppr_price_list_rec
                                       , x_price_list_val_rec          => ppr_price_list_val_rec
                                       , x_price_list_line_tbl         => ppr_price_list_line_tbl
                                       , x_price_list_line_val_tbl     => ppr_price_list_line_val_tbl
                                       , x_qualifiers_tbl              => ppr_qualifiers_tbl
                                       , x_qualifiers_val_tbl          => ppr_qualifiers_val_tbl
                                       , x_pricing_attr_tbl            => ppr_pricing_attr_tbl
                                       , x_pricing_attr_val_tbl        => ppr_pricing_attr_val_tbl
                                        );
   IF ppr_price_list_line_tbl.COUNT > 0
   THEN
      FOR k IN 1 .. ppr_price_list_line_tbl.COUNT
      LOOP
         DBMS_OUTPUT.put_line ('Record = ' || k || 'Return Status = ' || ppr_price_list_line_tbl (k).return_status);
      END LOOP;
   END IF;
   IF gpr_return_status <> fnd_api.g_ret_sts_success
   THEN
      RAISE fnd_api.g_exc_unexpected_error;
   END IF;
   DBMS_OUTPUT.put_line ('after process price list ');
   FOR k IN 1 .. gpr_msg_count
   LOOP
      gpr_msg_data                                             := oe_msg_pub.get (p_msg_index => k, p_encoded => 'F');
      DBMS_OUTPUT.put_line ('err msg ' || k || ' is: ' || gpr_msg_data);
      NULL;
   END LOOP;
EXCEPTION
   WHEN fnd_api.g_exc_error
   THEN
      gpr_return_status                                        := fnd_api.g_ret_sts_error;
-- Get message count and data
      DBMS_OUTPUT.put_line ('err msg 1 is : ' || gpr_msg_data);
   WHEN fnd_api.g_exc_unexpected_error
   THEN
      gpr_return_status                                        := fnd_api.g_ret_sts_unexp_error;
      DBMS_OUTPUT.put_line (' msg count 2 is : ' || gpr_msg_count);
      FOR k IN 1 .. gpr_msg_count
      LOOP
         gpr_msg_data                                             := oe_msg_pub.get (p_msg_index => k, p_encoded => 'F');
         -- Get message count and data
         DBMS_OUTPUT.put_line ('err msg ' || k || ' is: ' || gpr_msg_data);
         NULL;
      END LOOP;
   WHEN OTHERS
   THEN
      gpr_return_status                                        := fnd_api.g_ret_sts_unexp_error;
      -- Get message count and data
      DBMS_OUTPUT.put_line ('err msg 3 is : ' || gpr_msg_data);
END;
/

HOW to Use QP_PREQ_PUB.PRICE_REQUEST API to Price an Item

For more information please refer to the Metalink Note 759804.1

DECLARE
   p_line_tbl                                        qp_preq_grp.line_tbl_type;
   p_qual_tbl                                        qp_preq_grp.qual_tbl_type;
   p_line_attr_tbl                                   qp_preq_grp.line_attr_tbl_type;
   p_line_detail_tbl                                 qp_preq_grp.line_detail_tbl_type;
   p_line_detail_qual_tbl                            qp_preq_grp.line_detail_qual_tbl_type;
   p_line_detail_attr_tbl                            qp_preq_grp.line_detail_attr_tbl_type;
   p_related_lines_tbl                               qp_preq_grp.related_lines_tbl_type;
   p_control_rec                                     qp_preq_grp.control_record_type;
   x_line_tbl                                        qp_preq_grp.line_tbl_type;
   x_line_qual                                       qp_preq_grp.qual_tbl_type;
   x_line_attr_tbl                                   qp_preq_grp.line_attr_tbl_type;
   x_line_detail_tbl                                 qp_preq_grp.line_detail_tbl_type;
   x_line_detail_qual_tbl                            qp_preq_grp.line_detail_qual_tbl_type;
   x_line_detail_attr_tbl                            qp_preq_grp.line_detail_attr_tbl_type;
   x_related_lines_tbl                               qp_preq_grp.related_lines_tbl_type;
   x_return_status                                   VARCHAR2 (240);
   x_return_status_text                              VARCHAR2 (240);
   qual_rec                                          qp_preq_grp.qual_rec_type;
   line_attr_rec                                     qp_preq_grp.line_attr_rec_type;
   line_rec                                          qp_preq_grp.line_rec_type;
   detail_rec                                        qp_preq_grp.line_detail_rec_type;
   ldet_rec                                          qp_preq_grp.line_detail_rec_type;
   rltd_rec                                          qp_preq_grp.related_lines_rec_type;
   l_pricing_contexts_tbl                            qp_attr_mapping_pub.contexts_result_tbl_type;
   l_qualifier_contexts_tbl                          qp_attr_mapping_pub.contexts_result_tbl_type;
   v_line_tbl_cnt                                    INTEGER;
   i                                                 BINARY_INTEGER;
   l_version                                         VARCHAR2 (240);
   l_file_val                                        VARCHAR2 (60);
BEGIN
   oe_debug_pub.debug_on;
   oe_debug_pub.initialize;
   l_file_val                                               := oe_debug_pub.set_debug_mode ('FILE');
   oe_debug_pub.setdebuglevel (5);
   DBMS_OUTPUT.put_line ('File : ' || l_file_val);
   qp_attr_mapping_pub.build_contexts (p_request_type_code           => 'ONT'
                                     , p_pricing_type                => 'L'
                                     , x_price_contexts_result_tbl   => l_pricing_contexts_tbl
                                     , x_qual_contexts_result_tbl    => l_qualifier_contexts_tbl
                                      );
   v_line_tbl_cnt                                           := 1;
---- Control Record
   p_control_rec.pricing_event                              := 'LINE';   -- 'BATCH';
   p_control_rec.calculate_flag                             := 'Y';   --QP_PREQ_GRP.G_SEARCH_N_CALCULATE;
   p_control_rec.simulation_flag                            := 'N';
   p_control_rec.rounding_flag                              := 'Q';
   p_control_rec.manual_discount_flag                       := 'Y';
   p_control_rec.request_type_code                          := 'ONT';
   p_control_rec.temp_table_insert_flag                     := 'Y';
-------------------------
---- Line Records ---------
   line_rec.request_type_code                               := 'ONT';
   line_rec.line_id                                         := 2125125;   -- Order Line Id. This can be any thing for this script
   line_rec.line_index                                      := '1';   -- Request Line Index
   line_rec.line_type_code                                  := 'LINE';   -- LINE or ORDER(Summary Line)
   line_rec.pricing_effective_date                          := SYSDATE;   -- Pricing as of what date ?
   line_rec.active_date_first                               := SYSDATE;   -- Can be Ordered Date or Ship Date
   line_rec.active_date_second                              := SYSDATE;   -- Can be Ordered Date or Ship Date
   line_rec.active_date_first_type                          := 'NO TYPE';   -- ORD/SHIP
   line_rec.active_date_second_type                         := 'NO TYPE';   -- ORD/SHIP
   line_rec.line_quantity                                   := 1;   -- Ordered Quantity
   line_rec.line_uom_code                                   := 'Ea';   -- Ordered UOM Code
   line_rec.currency_code                                   := 'USD';   -- Currency Code
   line_rec.price_flag                                      := 'Y';   -- Price Flag can have 'Y' , 'N'(No pricing) , 'P'(Phase)
   p_line_tbl (1)                                           := line_rec;
---- Line Attribute Record
   line_attr_rec.line_index                                 := 1;
   line_attr_rec.pricing_context                            := 'ITEM';   --
   line_attr_rec.pricing_attribute                          := 'PRICING_ATTRIBUTE3';
   line_attr_rec.pricing_attr_value_from                    := 'ALL';
   line_attr_rec.validated_flag                             := 'N';
   p_line_attr_tbl (1)                                      := line_attr_rec;
   line_attr_rec.line_index                                 := 1;
   line_attr_rec.pricing_context                            := 'ITEM';   --
   line_attr_rec.pricing_attribute                          := 'PRICING_ATTRIBUTE1';
   line_attr_rec.pricing_attr_value_from                    := '307627';   -- INVENTORY ITEM ID
   line_attr_rec.validated_flag                             := 'N';
   p_line_attr_tbl (2)                                      := line_attr_rec;
---- Qualifier Attribute Record
   qual_rec.line_index                                      := 1;   -- Attributes for the above line. Attributes are attached with the line index
   qual_rec.qualifier_context                               := 'MODLIST';
   qual_rec.qualifier_attribute                             := 'QUALIFIER_ATTRIBUTE4';
   qual_rec.qualifier_attr_value_from                       := '54824';   -- PRICE LIST ID
   qual_rec.comparison_operator_code                        := '=';
   qual_rec.validated_flag                                  := 'Y';
   p_qual_tbl (1)                                           := qual_rec;
   qual_rec.line_index                                      := 1;
   qual_rec.qualifier_context                               := 'CUSTOMER';
   qual_rec.qualifier_attribute                             := 'QUALIFIER_ATTRIBUTE2';
   qual_rec.qualifier_attr_value_from                       := 16071;   -- CUSTOMER ID;
   qual_rec.comparison_operator_code                        := '=';
   qual_rec.validated_flag                                  := 'Y';
   p_qual_tbl (2)                                           := qual_rec;
   qp_preq_pub.price_request (p_line_tbl
                            , p_qual_tbl
                            , p_line_attr_tbl
                            , p_line_detail_tbl
                            , p_line_detail_qual_tbl
                            , p_line_detail_attr_tbl
                            , p_related_lines_tbl
                            , p_control_rec
                            , x_line_tbl
                            , x_line_qual
                            , x_line_attr_tbl
                            , x_line_detail_tbl
                            , x_line_detail_qual_tbl
                            , x_line_detail_attr_tbl
                            , x_related_lines_tbl
                            , x_return_status
                            , x_return_status_text
                             );
-- Return Status Information ..
   DBMS_OUTPUT.put_line ('Return Status text ' || x_return_status_text);
   DBMS_OUTPUT.put_line ('Return Status  ' || x_return_status);
   DBMS_OUTPUT.put_line ('+---------Information Returned to Caller---------------------+ ');
   DBMS_OUTPUT.put_line ('-------------Request Line Information-------------------');
   i                                                        := x_line_tbl.FIRST;
   IF i IS NOT NULL
   THEN
      LOOP
         DBMS_OUTPUT.put_line ('Line Index: ' || x_line_tbl (i).line_index);
         DBMS_OUTPUT.put_line ('Unit_price: ' || x_line_tbl (i).unit_price);
         DBMS_OUTPUT.put_line ('Percent price: ' || x_line_tbl (i).percent_price);
         DBMS_OUTPUT.put_line ('Adjusted Unit Price: ' || x_line_tbl (i).adjusted_unit_price);
         DBMS_OUTPUT.put_line ('Pricing status code: ' || x_line_tbl (i).status_code);
         DBMS_OUTPUT.put_line ('Pricing status text: ' || x_line_tbl (i).status_text);
         EXIT WHEN i = x_line_tbl.LAST;
         i                                                        := x_line_tbl.NEXT (i);
      END LOOP;
   END IF;
   DBMS_OUTPUT.put_line ('-----------Pricing Attributes Information-------------');
   i                                                        := x_line_detail_attr_tbl.FIRST;
   IF i IS NOT NULL
   THEN
      LOOP
         DBMS_OUTPUT.put_line ('Line detail Index ' || x_line_detail_attr_tbl (i).line_detail_index);
         DBMS_OUTPUT.put_line ('Context ' || x_line_detail_attr_tbl (i).pricing_context);
         DBMS_OUTPUT.put_line ('Attribute ' || x_line_detail_attr_tbl (i).pricing_attribute);
         DBMS_OUTPUT.put_line ('Value ' || x_line_detail_attr_tbl (i).pricing_attr_value_from);
         DBMS_OUTPUT.put_line ('Status Code ' || x_line_detail_attr_tbl (i).status_code);
         DBMS_OUTPUT.put_line ('---------------------------------------------------');
         EXIT WHEN i = x_line_detail_attr_tbl.LAST;
         i                                                        := x_line_detail_attr_tbl.NEXT (i);
      END LOOP;
   END IF;
   DBMS_OUTPUT.put_line ('-----------Qualifier Attributes Information-------------');
   i                                                        := x_line_detail_qual_tbl.FIRST;
   IF i IS NOT NULL
   THEN
      LOOP
         DBMS_OUTPUT.put_line ('Line Detail Index ' || x_line_detail_qual_tbl (i).line_detail_index);
         DBMS_OUTPUT.put_line ('Context ' || x_line_detail_qual_tbl (i).qualifier_context);
         DBMS_OUTPUT.put_line ('Attribute ' || x_line_detail_qual_tbl (i).qualifier_attribute);
         DBMS_OUTPUT.put_line ('Value ' || x_line_detail_qual_tbl (i).qualifier_attr_value_from);
         DBMS_OUTPUT.put_line ('Status Code ' || x_line_detail_qual_tbl (i).status_code);
         DBMS_OUTPUT.put_line ('---------------------------------------------------');
         EXIT WHEN i = x_line_detail_qual_tbl.LAST;
         i                                                        := x_line_detail_qual_tbl.NEXT (i);
      END LOOP;
   END IF;
   i                                                        := x_line_detail_tbl.FIRST;
   DBMS_OUTPUT.put_line ('------------Price List/Discount Information------------');
   IF i IS NOT NULL
   THEN
      LOOP
         DBMS_OUTPUT.put_line ('Line Index: ' || x_line_detail_tbl (i).line_index);
         DBMS_OUTPUT.put_line ('Line Detail Index: ' || x_line_detail_tbl (i).line_detail_index);
         DBMS_OUTPUT.put_line ('Line Detail Type:' || x_line_detail_tbl (i).line_detail_type_code);
         DBMS_OUTPUT.put_line ('List Header Id: ' || x_line_detail_tbl (i).list_header_id);
         DBMS_OUTPUT.put_line ('List Line Id: ' || x_line_detail_tbl (i).list_line_id);
         DBMS_OUTPUT.put_line ('List Line Type Code: ' || x_line_detail_tbl (i).list_line_type_code);
         DBMS_OUTPUT.put_line ('Adjustment Amount : ' || x_line_detail_tbl (i).adjustment_amount);
         DBMS_OUTPUT.put_line ('Line Quantity : ' || x_line_detail_tbl (i).line_quantity);
         DBMS_OUTPUT.put_line ('Operand Calculation Code: ' || x_line_detail_tbl (i).operand_calculation_code);
         DBMS_OUTPUT.put_line ('Operand value: ' || x_line_detail_tbl (i).operand_value);
         DBMS_OUTPUT.put_line ('Automatic Flag: ' || x_line_detail_tbl (i).automatic_flag);
         DBMS_OUTPUT.put_line ('Override Flag: ' || x_line_detail_tbl (i).override_flag);
         DBMS_OUTPUT.put_line ('status_code: ' || x_line_detail_tbl (i).status_code);
         DBMS_OUTPUT.put_line ('status text: ' || x_line_detail_tbl (i).status_text);
         DBMS_OUTPUT.put_line ('-------------------------------------------');
         EXIT WHEN i = x_line_detail_tbl.LAST;
         i                                                        := x_line_detail_tbl.NEXT (i);
      END LOOP;
   END IF;
   DBMS_OUTPUT.put_line ('--------------Related Lines Information for Price Breaks/Service Items---------------');
   i                                                        := x_related_lines_tbl.FIRST;
   IF i IS NOT NULL
   THEN
      LOOP
         DBMS_OUTPUT.put_line ('Line Index :' || x_related_lines_tbl (i).line_index);
         DBMS_OUTPUT.put_line ('Line Detail Index: ' || x_related_lines_tbl (i).line_detail_index);
         DBMS_OUTPUT.put_line ('Relationship Type Code: ' || x_related_lines_tbl (i).relationship_type_code);
         DBMS_OUTPUT.put_line ('Related Line Index: ' || x_related_lines_tbl (i).related_line_index);
         DBMS_OUTPUT.put_line ('Related Line Detail Index: ' || x_related_lines_tbl (i).related_line_detail_index);
         DBMS_OUTPUT.put_line ('Status Code: ' || x_related_lines_tbl (i).status_code);
         EXIT WHEN i = x_related_lines_tbl.LAST;
         i                                                        := x_related_lines_tbl.NEXT (i);
      END LOOP;
   END IF;
END;