Wednesday, June 8, 2011

How to Backorder Shipment through API


PROCEDURE xxxx_iso_shipping_bkrd (errbuf OUT VARCHAR2, retcode OUT VARCHAR2)
IS
   x_return_status          VARCHAR2 (3000);
   x_msg_count              NUMBER;
   x_msg_data               VARCHAR2 (3000);
   l_msg_count              NUMBER;
   l_msg_data               VARCHAR2 (2000);
   l_msg_index              NUMBER;
--Standard Parameters.
   p_api_version_number     NUMBER;
   init_msg_list            VARCHAR2 (30);
   x_msg_details            VARCHAR2 (3000);
   x_msg_summary            VARCHAR2 (3000);
   p_validation_level       NUMBER;
   p_commit                 VARCHAR2 (30);
--Parameters for WSH_DELIVERIES_PUB.Delivery_Action.
   p_action_code            VARCHAR2 (15);
   p_delivery_id            NUMBER;
   p_delivery_name          VARCHAR2 (30);
   p_asg_trip_id            NUMBER;
   p_asg_trip_name          VARCHAR2 (30);
   p_asg_pickup_stop_id     NUMBER;
   p_asg_pickup_loc_id      NUMBER;
   p_asg_pickup_loc_code    VARCHAR2 (30);
   p_asg_pickup_arr_date    DATE;
   p_asg_pickup_dep_date    DATE;
   p_asg_dropoff_stop_id    NUMBER;
   p_asg_dropoff_loc_id     NUMBER;
   p_asg_dropoff_loc_code   VARCHAR2 (30);
   p_asg_dropoff_arr_date   DATE;
   p_asg_dropoff_dep_date   DATE;
   p_sc_action_flag         VARCHAR2 (10);
   p_sc_close_trip_flag     VARCHAR2 (10);
   p_sc_create_bol_flag     VARCHAR2 (10);
   p_sc_stage_del_flag      VARCHAR2 (10);
   p_sc_trip_ship_method    VARCHAR2 (30);
   p_sc_actual_dep_date     VARCHAR2 (30);
   p_sc_report_set_id       NUMBER;
   p_sc_report_set_name     VARCHAR2 (60);
   p_wv_override_flag       VARCHAR2 (10);
   x_trip_id                VARCHAR2 (30);
   x_trip_name              VARCHAR2 (30);
/*Handle exceptions*/
   fail_api                 EXCEPTION;

   CURSOR lc_get_iso_ship_data
   IS
      SELECT ooh.header_id, ooh.order_number, wnd.delivery_id,
             wnd.NAME delivery_name,
             SUBSTR (wdd.source_header_type_name, 1, 3) whse
        FROM oe_order_headers_all ooh,
             wsh_delivery_details wdd,
             wsh_new_deliveries wnd,
             wsh_delivery_assignments wda
       WHERE 1 = 1
         AND ooh.header_id = wdd.source_header_id
         AND wdd.delivery_detail_id = wda.delivery_detail_id
         AND wda.delivery_id = wnd.delivery_id
         AND wdd.released_status = 'Y'
         --AND ooh.order_source_id = 10
--And    wda.delivery_id = '776213' --- if required pass delivery id as parameter in concurrent program
         AND TRUNC (SYSDATE) - TO_DATE (ooh.booked_date) = 1;

   ln_user_id               NUMBER;
   ln_resp_id               NUMBER;
   ln_resp_app_id           NUMBER;
   ln_reason_id             NUMBER;
BEGIN
   ln_user_id := apps.fnd_profile.VALUE ('USER_ID');

   IF ln_user_id IS NULL
   THEN
      ln_user_id := -1;
   END IF;

   ln_resp_id := apps.fnd_profile.VALUE ('RESP_ID');
   ln_resp_app_id := apps.fnd_profile.VALUE ('RESP_APPL_ID');

   BEGIN
      fnd_global.apps_initialize (ln_user_id, ln_resp_id, ln_resp_app_id);
   END;

   FOR lc_iso_ship_dt IN lc_get_iso_ship_data
   LOOP
      EXIT WHEN lc_get_iso_ship_data%NOTFOUND;
      p_action_code := 'CONFIRM';         -- The action code for ship confirm
      p_delivery_id := lc_iso_ship_dt.delivery_id;
                         --620600; -- The delivery that needs to be confirmed
      p_delivery_name := lc_iso_ship_dt.delivery_name;
                                            --'620600'; -- The delivery name,
      p_sc_action_flag := 'C';                      -- Ship entered quantity.
      p_sc_stage_del_flag := 'N';                                           --
      --p_sc_trip_ship_method := Null; -- The ship method code
      /*Call to WSH_DELIVERIES_PUB.Delivery_Action. */
      wsh_deliveries_pub.delivery_action
                           (p_api_version_number        => 1.0,
                            p_init_msg_list             => init_msg_list,
                            x_return_status             => x_return_status,
                            x_msg_count                 => x_msg_count,
                            x_msg_data                  => x_msg_data,
                            p_action_code               => p_action_code,
                            p_delivery_id               => p_delivery_id,
                            p_delivery_name             => p_delivery_name,
                            p_asg_trip_id               => p_asg_trip_id,
                            p_asg_trip_name             => p_asg_trip_name,
                            p_asg_pickup_stop_id        => p_asg_pickup_stop_id,
                            p_asg_pickup_loc_id         => p_asg_pickup_loc_id,
                            p_asg_pickup_loc_code       => p_asg_pickup_loc_code,
                            p_asg_pickup_arr_date       => p_asg_pickup_arr_date,
                            p_asg_pickup_dep_date       => p_asg_pickup_dep_date,
                            p_asg_dropoff_stop_id       => p_asg_dropoff_stop_id,
                            p_asg_dropoff_loc_id        => p_asg_dropoff_loc_id,
                            p_asg_dropoff_loc_code      => p_asg_dropoff_loc_code,
                            p_asg_dropoff_arr_date      => p_asg_dropoff_arr_date,
                            p_asg_dropoff_dep_date      => p_asg_dropoff_dep_date,
                            p_sc_action_flag            => p_sc_action_flag,
                            p_sc_close_trip_flag        => p_sc_close_trip_flag,
                            p_sc_create_bol_flag        => p_sc_create_bol_flag,
                            p_sc_stage_del_flag         => p_sc_stage_del_flag,
                            p_sc_trip_ship_method       => p_sc_trip_ship_method,
                            p_sc_actual_dep_date        => p_sc_actual_dep_date,
                            p_sc_report_set_id          => p_sc_report_set_id,
                            p_sc_report_set_name        => p_sc_report_set_name,
                            p_wv_override_flag          => p_wv_override_flag,
                            x_trip_id                   => x_trip_id,
                            x_trip_name                 => x_trip_name
                           );

      IF (x_return_status <> wsh_util_core.g_ret_sts_success)
      THEN
         fnd_file.put_line (fnd_file.LOG,
                               'Successfully BackOrdered for Order Number - '
                            || lc_iso_ship_dt.order_number
                           );
         COMMIT;
      ELSE
         fnd_file.put_line
            (fnd_file.LOG,
                'Could not able to Back Order Line Due to Following Reasons -'
             || x_return_status
             || ' for header id - '
             || lc_iso_ship_dt.header_id
            );
         ROLLBACK;
      /* FOR j IN 1 .. l_msg_count
         LOOP
          fnd_msg_pub.get (p_msg_index => j,
           p_encoded => fnd_api.g_false,
            p_data => l_msg_data,
             p_msg_index_out => l_msg_index);
         fnd_file.put_line(fnd_file.log,'Error Message is=> '|| l_msg_data);
         END LOOP;*/
      END IF;
   END LOOP;

   COMMIT;
END;

Inventory Period Close for All Organization through API


PROCEDURE inventory_close_api (
   errbuf          OUT      VARCHAR2,
   retcode         OUT      NUMBER,
   p_company       IN       VARCHAR2,
   p_fiscal_year   IN       NUMBER,
   p_period_num    IN       NUMBER
)
AS
   CURSOR ls_period_close (
      lc_company       VARCHAR2,
      ln_fiscal_year   NUMBER,
      ln_period_num    NUMBER
   )
   IS
      SELECT b.organization_code, b.organization_name, a.*
        FROM org_acct_periods a, org_organization_definitions b
       WHERE a.period_set_name = lc_company
         AND a.period_year = ln_fiscal_year
         AND a.period_num = ln_period_num
         AND a.open_flag = 'Y'
         AND a.organization_id = b.organization_id;

   lc_return_status    VARCHAR2 (1);
   lc_msg_data         VARCHAR2 (2000);
   lc_errbuf           VARCHAR2 (2000);
   ln_msg_count        NUMBER;
   p_closing_rowid     VARCHAR2 (100);
   x_wip_failed        BOOLEAN;
   x_close_failed      BOOLEAN;
   x_download_failed   BOOLEAN;
   x_req_id            NUMBER;
   x_return_status     VARCHAR2 (100);
   ln_user_id          NUMBER;
   ln_org_id           NUMBER;
   ln_resp_id          NUMBER;
   ln_resp_app_id      NUMBER;
BEGIN
   fnd_file.put_line (fnd_file.LOG,
                         '1st paramaeter - '
                      || p_company
                      || ' - 2nd Parameter - '
                      || p_fiscal_year
                      || ' - 3rd Parameter - '
                      || p_period_num
                     );
   fnd_file.put_line (fnd_file.output,
                         'WHSE'
                      || '       '
                      || 'PERIOD NUM'
                      || '      '
                      || 'PERIOD YR'
                     );
   ln_user_id := 1738;                  --:=APPS.FND_PROFILE.VALUE('USER_ID');
   ln_resp_id := apps.fnd_profile.VALUE ('RESP_ID');
   ln_resp_app_id := apps.fnd_profile.VALUE ('RESP_APPL_ID');
   ln_org_id := apps.fnd_profile.VALUE ('ORG_ID');

   BEGIN
      fnd_client_info.set_org_context (ln_org_id);
   END;

   BEGIN
      fnd_global.apps_initialize (1738, ln_resp_id, ln_resp_app_id);
   END;

   FOR ln_period_close IN ls_period_close (p_company,
                                           p_fiscal_year,
                                           p_period_num
                                          )
   LOOP
      EXIT WHEN ls_period_close%NOTFOUND;
      cst_accountingperiod_pub.close_period
               (p_api_version                 => 1.0,
                p_org_id                      => ln_period_close.organization_id,
                p_user_id                     => ln_period_close.created_by,
                p_login_id                    => ln_period_close.last_update_login,
                p_closing_acct_period_id      => ln_period_close.acct_period_id,
                p_period_close_date           => SYSDATE,
                p_schedule_close_date         => ln_period_close.schedule_close_date,
                p_closing_rowid               => p_closing_rowid,
                x_wip_failed                  => x_wip_failed,
                x_close_failed                => x_close_failed,
                x_download_failed             => x_download_failed,
                x_req_id                      => x_req_id,
                x_return_status               => x_return_status
               );
      fnd_file.put_line (fnd_file.output,
                            ln_period_close.organization_code
                         || '               '
                         || ln_period_close.period_num
                         || '       '
                         || ln_period_close.period_year
                        );

      IF lc_return_status <> 'S'
      THEN
         fnd_file.put_line (fnd_file.LOG, 'STATUS : ' || lc_return_status);
         COMMIT;

         IF ln_msg_count <= 1
         THEN
            lc_errbuf := lc_errbuf || lc_msg_data;
         ELSE
            FOR ln_i IN 1 .. ln_msg_count
            LOOP
               lc_errbuf := lc_errbuf || ' ' || fnd_msg_pub.get (ln_i, 'F');
               fnd_file.put_line (fnd_file.LOG, 'STATUS : ' || lc_errbuf);
            END LOOP;
         END IF;
      END IF;

      IF     ln_period_close.period_close_date IS NOT NULL
         AND ln_period_close.open_flag = 'Y'
      THEN
         fnd_file.put_line
                          (fnd_file.LOG,
                              'Inventory period still open for - '
                           || ln_period_close.organization_code
                           || 'as there are pending transactions for the month.'
                          );
      ELSE
         fnd_file.put_line (fnd_file.LOG,
                               'Inventory period closed for organization - '
                            || ln_period_close.organization_code
                           );
      END IF;
   END LOOP;

   COMMIT;
EXCEPTION
   WHEN OTHERS
   THEN
      fnd_file.put_line (fnd_file.LOG,
                         'Exception - Inventory Close API' || SQLERRM
                        );
END;

How to create Lot through API in OPM

CREATE OR REPLACE PROCEDURE APPS.XXXX_AUTO_LOT_CREATION(
p_item_number VARCHAR2,
p_lot_number VARCHAR2,
p_qc_grade VARCHAR2,
p_batch_id VARCHAR2,
p_plant_code VARCHAR2)
--p_ic_lots_mst_rec OUT ic_lots_mst%ROWTYPE,
--p_return_status OUT VARCHAR2)
IS
l_lot_rec GMIGAPI.lot_rec_typ;
x_ic_lots_mst_row ic_lots_mst%ROWTYPE;
x_ic_lots_cpg_row ic_lots_cpg%ROWTYPE;
x_return_status VARCHAR2(10);
x_msg_count NUMBER;
x_msg_data VARCHAR2(2000);
l_setup_api BOOLEAN;
l_pub_message varchar2(4000);
l_loop_cnt NUMBER;
l_dummy_cnt NUMBER;
l_user_name varchar2(50);
v_lot_id Number;
ln_user_id NUMBER;
ln_resp_id NUMBER;
ln_resp_app_id NUMBER;
ln_org_id NUMBER;
BEGIN
BEGIN
FND_client_info.set_org_context(ln_org_id);
END;
ln_user_id := APPS.FND_PROFILE.VALUE('USER_ID');
ln_resp_id := APPS.FND_PROFILE.VALUE('RESP_ID');
ln_resp_app_id := APPS.FND_PROFILE.VALUE('RESP_APPL_ID');
ln_org_id := APPS.FND_PROFILE.VALUE('ORG_ID');
BEGIN
FND_GLOBAL.apps_initialize(ln_user_id,ln_resp_id,ln_resp_app_id);
END;
l_lot_rec.item_no := p_item_number;
l_lot_rec.lot_no := p_lot_number;
l_lot_rec.QC_GRADE := p_qc_grade;
l_lot_rec.lot_created := sysdate;
l_lot_rec.attribute11 := p_batch_id;
l_lot_rec.attribute12 := p_plant_code;
BEGIN
SELECT user_name
INTO l_user_name
FROM fnd_user
WHERE user_id = fnd_global.user_id; Exception
WHEN NO_DATA_FOUND THEN
fnd_file.put_line (fnd_file.LOG,' Not a Valid User.');
WHEN OTHERS THEN
fnd_file.put_line (fnd_file.LOG,' Not a Valid User.');
End;
l_setup_api := GMIGUTL.SETUP(p_user_name =>l_user_name);
GMIPAPI.Create_lot(p_api_version => 3.0
, p_init_msg_list => 'T'
, p_commit => 'T'
, p_validation_level => FND_API.G_VALID_LEVEL_FULL
, p_lot_rec => l_lot_rec
, x_ic_lots_mst_row => x_ic_lots_mst_row
, x_ic_lots_cpg_row => x_ic_lots_cpg_row
, x_return_status => x_return_status
, x_msg_count => x_msg_count
, x_msg_data => x_msg_data);
IF x_msg_count > 0 THEN
l_loop_cnt :=1;
<>
LOOP
FND_MSG_PUB.Get
(p_msg_index => l_loop_cnt,
p_data => x_msg_data,
p_encoded => FND_API.G_FALSE,
p_msg_index_out => l_dummy_cnt);
l_pub_message := l_pub_message||x_msg_data;
l_loop_cnt := l_loop_cnt + 1;
IF l_loop_cnt > x_msg_count THEN
EXIT error_msg_loop;
END IF;
-- DBMS_OUTPUT.PUT_LINE('11Not Created'||l_pub_message);
END LOOP error_msg_loop;
END IF;
IF x_return_status = 'S' THEN
fnd_file.put_line(fnd_file.LOG,'Lot Created For Item :'||p_item_number||' and Lot Id is : '||x_ic_lots_mst_row.lot_id);
--DBMS_OUTPUT.PUT_LINE('Created');
ELSE
fnd_file.put_line(fnd_file.LOG,'Lot Not Created For Item :'||p_item_number||' For the Reason : '||l_pub_message);
--DBMS_OUTPUT.PUT_LINE('Not Created'||l_pub_message);
END IF;
END XXXX_AUTO_LOT_CREATION;
/