Sunday, 10 March 2024

DML For Updating Salesperson Name in SalesOrder and AR Invoice in APPS R12

 /*DML For Updating Salesperson even after invoicing and closing SalesOrder in APPS R12*/

UPDATE ont.oe_order_headers_all
SET    salesrep_id =
WHERE  org_id =
AND    order_number = ;

UPDATE ont.oe_order_lines_all
SET    salesrep_id =
WHERE  header_id = ;

UPDATE ar.ra_customer_trx_all
SET    primary_salesrep_id =
WHERE  interface_header_context = 'ORDER ENTRY'
AND    interface_header_attribute1 = '<order_number>'
AND    trx_number = ;

UPDATE ar.ra_cust_trx_line_salesreps_all
SET    salesrep_id = 
WHERE  customer_trx_id = ;
/*RA_CUST_TRX_LINE_SALESREPS_ALL table stores sales credit assignments for invoice lines. If Receivables bases your invoice distributions on sales credits, a mapping exists between the sales credit assignments in this table with the RA_CUST_TRX_LINE_GL_DIST_ALL table.The primary key for this table is CUST_TRX_LINE_SALESREP_ID.*/

UPDATE ont.oe_sales_credits
SET    salesrep_id = 
WHERE  header_id = ; 

/*ONT.OE_SALES_CREDIT_HISTORY*/

Wednesday, 6 March 2024

Script for Miscellaneous Issue of all the items in given Subinventory in Oracle APPS R12

 CREATE OR replace PROCEDURE XX_pkmtl_transaction(

p_item_id             IN VARCHAR2,
p_organization_id     IN NUMBER,
p_subinv              IN VARCHAR2,
p_loc                 IN VARCHAR2,
p_lot_no              IN VARCHAR2,
p_uom_code            IN VARCHAR2,
p_quantity            IN NUMBER,
p_new_average_cost    IN NUMBER,
p_transaction_type    IN VARCHAR2,
p_trans_type_ref      IN VARCHAR2,
p_primary_qty         IN NUMBER,
p_revision            IN VARCHAR2,
p_code_combination_id IN NUMBER,
p_fm_serial_number    IN VARCHAR2,
p_to_serial_number    IN VARCHAR2,
x_return_status       OUT VARCHAR2,
x_msg_count           OUT NUMBER,
x_msg_data            OUT VARCHAR2)
IS
  l_transaction_id   NUMBER;
  l_loc_id           NUMBER;
  l_trn_type_id      NUMBER;
  l_segment1         VARCHAR2(150);
  l_segment2         VARCHAR2(150);
  l_segment3         VARCHAR2(150);
  l_segment4         VARCHAR2(150);
  l_segment5         VARCHAR2(150);
  l_expiration_date  DATE;
  l_trans_count      NUMBER;
  lc_result          NUMBER;
  l_subinv_code      mtl_item_locations_kfv.subinventory_code%TYPE;
  r_mtl_trns_rec     mtl_transactions_interface%ROWTYPE;
  r_mtl_lot_rec      mtl_transaction_lots_interface%ROWTYPE;
  r_mtl_ser_rec      mtl_serial_numbers_interface%ROWTYPE;
  g_l_transaction_id NUMBER;
  g_l_lpn_id         NUMBER := 0;
  CURSOR cur_tns_rec IS
    SELECT mtt.*
    FROM   mtl_transaction_types mtt
    WHERE  MTT.transaction_type_name = p_transaction_type;
  r_tns_rec          cur_tns_rec%ROWTYPE;
  PRAGMA autonomous_transaction;
BEGIN
    x_return_status := NULL;

    x_msg_data := NULL;

dbms_output.Put_line('================================================================================');

BEGIN
    SELECT mtl_material_transactions_s.NEXTVAL
    INTO   l_transaction_id
    FROM   dual;
EXCEPTION
    WHEN OTHERS THEN
      l_transaction_id := NULL;
END;

OPEN cur_tns_rec;

FETCH cur_tns_rec INTO r_tns_rec;

CLOSE cur_tns_rec;

BEGIN
    SELECT gcc.segment1,
           gcc.segment2,
           gcc.segment3,
           gcc.segment4,
           gcc.segment5
    INTO   l_segment1, l_segment2, l_segment3, l_segment4, l_segment5
    FROM   gl_code_combinations gcc
    WHERE  GCC.code_combination_id = p_code_combination_id;
EXCEPTION
    WHEN OTHERS THEN
      l_segment1 := NULL;

      l_segment2 := NULL;

      l_segment3 := NULL;

      l_segment4 := NULL;

      l_segment5 := NULL;
END;

BEGIN
    SELECT inventory_location_id,
           subinventory_code
    INTO   l_loc_id, l_subinv_code
    FROM   mtl_item_locations_kfv
    WHERE  concatenated_segments = p_loc
           AND organization_id = p_organization_id;
EXCEPTION
    WHEN OTHERS THEN
      l_loc_id := NULL;
END;

dbms_output.Put_line('p_loc: '
                     ||p_loc);

dbms_output.Put_line('l_loc_id: '
                     ||l_loc_id);

dbms_output.Put_line('Transaction_type: '
                     ||r_tns_rec.transaction_type_name);

dbms_output.Put_line('p_quantity: '
                     ||p_quantity);

BEGIN
    r_mtl_trns_rec := NULL;

    g_l_transaction_id := NULL;

    r_mtl_trns_rec.transaction_uom := p_uom_code;

    r_mtl_trns_rec.transaction_date := SYSDATE;

    r_mtl_trns_rec.source_code := p_transaction_type;

    r_mtl_trns_rec.source_line_id := l_transaction_id; -- 422170

    r_mtl_trns_rec.source_header_id := l_transaction_id; -- 167091

    r_mtl_trns_rec.process_flag := 1;

    r_mtl_trns_rec.transaction_mode := 3;

    r_mtl_trns_rec.lock_flag := 2;

    r_mtl_trns_rec.locator_id := l_loc_id;

    r_mtl_trns_rec.revision := p_revision;

    r_mtl_trns_rec.last_update_date := SYSDATE;

    r_mtl_trns_rec.last_updated_by := fnd_global.user_id;

    r_mtl_trns_rec.creation_date := SYSDATE;

    r_mtl_trns_rec.created_by := fnd_global.user_id;

    r_mtl_trns_rec.inventory_item_id := p_item_id;

    r_mtl_trns_rec.subinventory_code := Nvl(p_subinv, l_subinv_code);

    r_mtl_trns_rec.organization_id := p_organization_id;

    r_mtl_trns_rec.transaction_quantity := p_quantity;

    r_mtl_trns_rec.primary_quantity := p_primary_qty;

    r_mtl_trns_rec.transaction_type_id := r_tns_rec.transaction_type_id;

    r_mtl_trns_rec.transaction_source_type_id :=
    r_tns_rec.transaction_source_type_id;

    r_mtl_trns_rec.transaction_action_id := r_tns_rec.transaction_action_id;

    r_mtl_trns_rec.transaction_cost := p_new_average_cost;

    --r_mtl_trns_rec.new_average_cost            :=  p_new_average_cost;
    r_mtl_trns_rec.dst_segment1 := l_segment1;

    r_mtl_trns_rec.dst_segment2 := l_segment2;

    r_mtl_trns_rec.dst_segment3 := l_segment3;

    r_mtl_trns_rec.dst_segment4 := l_segment4;

    r_mtl_trns_rec.dst_segment5 := l_segment5;

    r_mtl_trns_rec.transaction_interface_id := l_transaction_id;

    r_mtl_trns_rec.transaction_header_id := l_transaction_id;

    r_mtl_trns_rec.transaction_reference := p_trans_type_ref;

    IF g_l_lpn_id > 0 THEN
      r_mtl_trns_rec.transfer_lpn_id := g_l_lpn_id;

      dbms_output.Put_line('g_l_lpn_id: '
                           ||g_l_lpn_id);
    END IF;

    -- Insert MTI for inv open transactions.
    INSERT INTO mtl_transactions_interface
    VALUES r_mtl_trns_rec;

dbms_output.Put_line('Record inserted into mtl_transactions_interface with transaction_header_id: '
                     ||l_transaction_id);

g_l_transaction_id := l_transaction_id;

--dbms_output.put_line('Inserted a record'||l_transaction_id);
x_return_status := fnd_api.g_ret_sts_success;
EXCEPTION
    WHEN OTHERS THEN
fnd_file.Put_line
(fnd_file.output, 'in exception ---- inserting data into  MTL_TRANSACTIONS_INTERFACE : '
                  || SQLERRM);

dbms_output.Put_line('Error'
                     ||SQLERRM);

x_return_status := fnd_api.g_ret_sts_error;

x_msg_count := x_msg_count + 1;

x_msg_data := 'Error While Inserting data to MTL_TRANSACTIONS_INTERFACE :'
              ||SQLERRM;
END;

dbms_output.Put_line('STEP1');

IF x_return_status != fnd_api.g_ret_sts_error THEN
  --Successful return of first insert
  IF p_lot_no IS NOT NULL THEN
    --Derive lot expiration date for the lot number
    BEGIN
        SELECT expiration_date
        INTO   l_expiration_date
        FROM   mtl_lot_numbers
        WHERE  lot_number = p_lot_no
               AND inventory_item_id = p_item_id
               AND organization_id = p_organization_id;
    EXCEPTION
        WHEN OTHERS THEN
          dbms_output.Put_line('Exception in fetching lot expiration_date: '
                               ||SQLERRM);

          l_expiration_date := NULL;

          dbms_output.Put_line('STEP2');
    END; dbms_output.Put_line('STEP3');
  dbms_output.Put_line('Expiration_date: '||l_expiration_date);
  dbms_output.Put_line('STEP3.1'); BEGIN IF
  p_lot_no IS NOT NULL THEN dbms_output.Put_line('STEP4');
  --Insert lot number interface if the item is lot controlled.
  r_mtl_lot_rec := NULL; g_l_transaction_id := l_transaction_id;
  r_mtl_lot_rec.transaction_interface_id := l_transaction_id;
  r_mtl_lot_rec.source_code :=
  p_transaction_type; r_mtl_lot_rec.source_line_id := l_transaction_id;
  r_mtl_lot_rec.last_update_date := SYSDATE; r_mtl_lot_rec.last_updated_by :=
  fnd_global.user_id; r_mtl_lot_rec.creation_date := SYSDATE;
  r_mtl_lot_rec.created_by := fnd_global.user_id;
  r_mtl_lot_rec.last_update_login :=
  fnd_global.login_id; r_mtl_lot_rec.lot_number := p_lot_no;
  r_mtl_lot_rec.lot_expiration_date := l_expiration_date;
  r_mtl_lot_rec.transaction_quantity :=
  p_quantity; r_mtl_lot_rec.primary_quantity := p_quantity;
  r_mtl_lot_rec.serial_transaction_temp_id := l_transaction_id;
  dbms_output.Put_line('STEP5'); INSERT INTO
  mtl_transaction_lots_interface VALUES r_mtl_lot_rec;
  dbms_output.Put_line('STEP6'); END IF; EXCEPTION WHEN OTHERS THEN
  x_return_status :=
  fnd_api.g_ret_sts_error; x_msg_count := x_msg_count+1; x_msg_data :=
  'Error While Inserting data to MTL_TRANSACTION_LOTS_INTERFACE :'||SQLERRM;
  dbms_output.Put_line('STEP7'); END;
  END IF;

  /*MTL_SERIAL_NUMBERS_INTERFACE*/
  BEGIN
      IF p_fm_serial_number IS NOT NULL THEN
        dbms_output.Put_line('STEP 4S');

        --Insert lot number interface if the item is lot controlled.
        r_mtl_ser_rec := NULL;

        g_l_transaction_id := l_transaction_id;

        r_mtl_ser_rec.transaction_interface_id := l_transaction_id;

        r_mtl_ser_rec.fm_serial_number := p_fm_serial_number;

        r_mtl_ser_rec.to_serial_number := p_to_serial_number;

        r_mtl_ser_rec.last_update_date := SYSDATE;

        r_mtl_ser_rec.last_updated_by := fnd_global.user_id;

        r_mtl_ser_rec.creation_date := SYSDATE;

        r_mtl_ser_rec.created_by := fnd_global.user_id;

        r_mtl_ser_rec.last_update_login := fnd_global.login_id;

        dbms_output.Put_line('STEP 5S');

        INSERT INTO mtl_serial_numbers_interface
        VALUES r_mtl_ser_rec;

        dbms_output.Put_line('STEP 6S');
      END IF;
  EXCEPTION
      WHEN OTHERS THEN
        x_return_status := fnd_api.g_ret_sts_error;

        x_msg_count := x_msg_count + 1;

        x_msg_data :=
        'Error While Inserting data to MTL_SERIAL_NUMBERS_INTERFACE :'
        ||SQLERRM;

        dbms_output.Put_line('STEP 7S');
  END;
END IF;

dbms_output.Put_line('STEP8');

COMMIT;

--call Inventory open transaction api to perform transfer of material from source locator to destination locator.
dbms_output.Put_line('STEP9');

x_return_status := NULL;

x_msg_count := 0;

x_msg_data := NULL;

dbms_output.Put_line('Before Calling process_transactions'
                     ||l_transaction_id);

lc_result := inv_txn_manager_pub.Process_transactions (p_api_version => 1.0,
                          p_init_msg_list => fnd_api.g_false,
             p_commit => fnd_api.g_true,
                          p_validation_level => fnd_api.g_valid_level_full,
                          x_return_status => x_return_status,
             x_msg_count => x_msg_count,
                          x_msg_data => x_msg_data,
             x_trans_count => l_trans_count, p_table
                          => 1, p_header_id => l_transaction_id);

dbms_output.Put_line('STEP10');

dbms_output.Put_line('Return Status'
                     ||x_return_status);

IF Nvl(x_return_status, 'N') <> fnd_api.g_ret_sts_success THEN
  x_return_status := fnd_api.g_ret_sts_error;

  dbms_output.Put_line('Return Status: '
                       ||x_return_status);

  dbms_output.Put_line('Message: '
                       ||x_msg_data);

  dbms_output.Put_line('STEP11');
END IF;

COMMIT;
EXCEPTION
  WHEN OTHERS THEN
             dbms_output.Put_line('In Exception'
                                  ||SQLERRM);

             fnd_msg_pub.Count_and_get (p_count => x_msg_count,
             p_data => x_msg_data,
             p_encoded => fnd_api.g_false);

             dbms_output.Put_line('STEP12');

             ROLLBACK;
END xx_pkmtl_transaction; 


/*Script for Miscellaneous issue of all the items in given Subinventory*/
DECLARE
    v_return_status VARCHAR2(1000);
    v_msg_count     NUMBER;
    v_msg_data      VARCHAR2(1000);
    CURSOR c1 IS
      SELECT moqd.organization_id,
             moqd.inventory_item_id,
             msib.segment1                          item_code,
             moqd.subinventory_code                 ISSUE_SUBINV,
             moqd.revision,
             msib.primary_uom_code,--moqd.TRANSACTION_UOM_CODE,
             moqd.locator_id,
             moqd.lot_number,
             NULL                                   serial_number,
             SUM(moqd.primary_transaction_quantity) onhand_quantity,
             --SUM(moqd.transaction_quantity) onhand_quantity,
             milkfv.concatenated_segments           locators
      FROM   apps.mtl_system_items_b msib,
             apps.mtl_onhand_quantities_detail moqd,
             apps.mtl_item_locations_kfv milkfv
      WHERE  msib.organization_id = 105
             AND msib.inventory_item_id = moqd.inventory_item_id
             AND msib.organization_id = moqd.organization_id
             AND moqd.subinventory_code = 'S19'
             AND milkfv.inventory_location_id(+) = moqd.locator_id
             AND msib.inventory_item_status_code = 'Active'
             AND msib.mtl_transactions_enabled_flag = 'Y'
      --AND msib.segment1 = :p_item
      GROUP  BY moqd.organization_id,
                moqd.inventory_item_id,
                msib.segment1,
                moqd.subinventory_code,
                moqd.revision,
                msib.primary_uom_code,--moqd.TRANSACTION_UOM_CODE,
                moqd.locator_id,
                moqd.lot_number,
                milkfv.concatenated_segments
      UNION
      SELECT moqd.organization_id,
             moqd.inventory_item_id,
             msib.segment1                item_code,
             moqd.subinventory_code,
             moqd.revision,
             msib.primary_uom_code,--moqd.TRANSACTION_UOM_CODE,
             moqd.locator_id,
             moqd.lot_number,
             serial_number,
             1                            onhand_quantity,
             --SUM(moqd.transaction_quantity) onhand_quantity,
             milkfv.concatenated_segments locators
      FROM   mtl_system_items_b msib,
             mtl_onhand_quantities_detail moqd,
             mtl_item_locations_kfv milkfv,
             mtl_serial_numbers msn
      WHERE  1 = 1
             AND msib.organization_id = 105
             AND msib.inventory_item_id = moqd.inventory_item_id
             AND msib.organization_id = moqd.organization_id
             AND moqd.subinventory_code = 'S19'
             AND milkfv.inventory_location_id(+) = moqd.locator_id
             AND msib.inventory_item_status_code = 'Active'
             AND msib.mtl_transactions_enabled_flag = 'Y'
             AND msn.current_organization_id = moqd.organization_id
             AND moqd.subinventory_code = msn.current_subinventory_code
             AND msn.current_status = 3 --Resides in stores
             AND moqd.inventory_item_id = msn.inventory_item_id
             AND moqd.lot_number = msn.lot_number
      GROUP  BY moqd.organization_id,
                moqd.inventory_item_id,
                msib.segment1,
                moqd.subinventory_code,
                moqd.revision,
                msib.primary_uom_code,--moqd.TRANSACTION_UOM_CODE,
                moqd.locator_id,
                moqd.lot_number,
                serial_number,
                milkfv.concatenated_segments;
BEGIN
    dbms_output.Put_line('Hi....!!!! ');

    fnd_global.Apps_initialize(1250, 51441, 401);

    FOR c IN c1 LOOP
        Xx_pkmtl_transaction(p_item_id => c.inventory_item_id,
        p_organization_id => c.organization_id, p_subinv => c.issue_subinv,
        p_loc => c.locators,
        p_lot_no => c.lot_number, p_uom_code => c.primary_uom_code,
        p_quantity => Abs(c.onhand_quantity) *- 1,
        p_transaction_type => 'Miscellaneous issue',
        p_trans_type_ref => 'REMARK.....', p_primary_qty => NULL,
        p_revision => c.revision, p_new_average_cost => NULL, --C.cost,
        p_code_combination_id => NULL, --C.DISTRIBUTION_ACCOUNT_ID,
        p_fm_serial_number => c.serial_number, --C.FM_SERIAL_NUMBER,
        p_to_serial_number => c.serial_number, --C.TO_SERIAL_NUMBER,
        x_return_status => v_return_status, x_msg_count => v_msg_count,
        x_msg_data => v_msg_data);

        dbms_output.Put_line('Item : '
                             ||c.item_code
                             ||' X_RETURN_STATUS->'
                             ||v_return_status
                             ||'    X_MSG_COUNT->'
                             ||v_msg_count
                             ||'    X_MSG_DATA->'
                             ||v_msg_data);

        COMMIT;
    END LOOP;

    dbms_output.Put_line('Done...!!!');
EXCEPTION
    WHEN OTHERS THEN
      dbms_output.Put_line('Error  '
                           ||SQLERRM);
END;