Thursday, June 16, 2011

MOVE ORDER API

ALLOCATE MOVE ORDER

DECLARE
x_return_status VARCHAR2 (1);
x_msg_data VARCHAR2 (4000);
x_msg_count NUMBER;
l_line_tbl inv_move_order_pub.trolin_tbl_type;

PROCEDURE allocate_move_order (
p_line_tbl IN inv_move_order_pub.trolin_tbl_type
, x_return_status OUT VARCHAR2
, x_msg_data OUT VARCHAR2
, x_msg_count OUT NUMBER
)
IS
x_line_tbl inv_move_order_pub.trolin_tbl_type;
l_trolin_tbl inv_move_order_pub.trolin_tbl_type;
l_mold_tbl inv_mo_line_detail_util.g_mmtt_tbl_type;
l_qty_detailed NUMBER;
l_qty_delivered NUMBER;
l_return_status VARCHAR2 (1);
v_msg_index_out NUMBER;
l_rsr_type inv_reservation_global.mtl_reservation_tbl_type;
i INTEGER;
l_trolin_rec inv_move_order_pub.trolin_rec_type;
BEGIN
x_line_tbl := p_line_tbl;

IF x_line_tbl.COUNT > 0
THEN
FOR j IN x_line_tbl.FIRST .. x_line_tbl.LAST
LOOP
DBMS_OUTPUT.put_line (x_line_tbl (j).line_id);

BEGIN
inv_ppengine_pvt.create_suggestions (p_api_version => 1.0
, p_init_msg_list => fnd_api.g_false
, p_commit => fnd_api.g_false
, p_validation_level => fnd_api.g_valid_level_none
, x_return_status => x_return_status
, x_msg_count => x_msg_count
, x_msg_data => x_msg_data
, p_transaction_temp_id => x_line_tbl (j).line_id
, p_reservations => l_rsr_type
, p_suggest_serial => fnd_api.g_true
, p_plan_tasks => FALSE
, p_quick_pick_flag => 'N'
, p_organization_id => 207
);
DBMS_OUTPUT.put_line ('Return Status is :' || x_return_status);
DBMS_OUTPUT.put_line ('Message Count is :' || x_msg_count);

IF x_return_status = 'S'
THEN
BEGIN
l_trolin_tbl := x_line_tbl;

IF (l_trolin_tbl.COUNT <> 0)
THEN
i := l_trolin_tbl.FIRST;

WHILE i IS NOT NULL
LOOP
IF ( l_trolin_tbl (i).return_status <> fnd_api.g_ret_sts_unexp_error
AND l_trolin_tbl (i).return_status <> fnd_api.g_ret_sts_error
)
THEN
l_trolin_rec := inv_trolin_util.query_row (l_trolin_tbl (i).line_id);
l_trolin_tbl (i) := l_trolin_rec;
l_qty_detailed := l_trolin_tbl (i).quantity_detailed;
l_qty_delivered := NVL (l_trolin_tbl (i).quantity_delivered, 0);

IF NVL (l_qty_detailed, 0) = 0
THEN
l_mold_tbl := inv_mo_line_detail_util.query_rows (p_line_id => l_trolin_tbl (i).line_id);

FOR j IN 1 .. l_mold_tbl.COUNT
LOOP
l_mold_tbl (j).transaction_status := 3;
l_mold_tbl (j).transaction_mode := 1;
l_mold_tbl (j).source_line_id := l_trolin_tbl (i).line_id;
inv_mo_line_detail_util.update_row (l_return_status, l_mold_tbl (j));
END LOOP;

SELECT transaction_header_id, transaction_quantity
INTO l_trolin_tbl (i).transaction_header_id, l_trolin_tbl (i).quantity_detailed
FROM mtl_material_transactions_temp
WHERE move_order_line_id = l_trolin_tbl (i).line_id;

l_trolin_tbl (i).last_update_date := SYSDATE;
l_trolin_tbl (i).last_update_login := fnd_global.login_id;

IF l_trolin_tbl (i).last_update_login = -1
THEN
l_trolin_tbl (i).last_update_login := fnd_global.conc_login_id;
END IF;

l_trolin_tbl (i).last_updated_by := fnd_global.user_id;
l_trolin_tbl (i).program_id := fnd_global.conc_program_id;
l_trolin_tbl (i).program_update_date := SYSDATE;
l_trolin_tbl (i).request_id := fnd_global.conc_request_id;
l_trolin_tbl (i).program_application_id := fnd_global.prog_appl_id;
inv_trolin_util.update_row (l_trolin_tbl (i));
END IF;
END IF;

i := l_trolin_tbl.NEXT (i);
END LOOP;
END IF;
END;
ELSE
ROLLBACK;
END IF;

IF x_msg_count > 0
THEN
FOR v_index IN 1 .. x_msg_count
LOOP
fnd_msg_pub.get (p_msg_index => v_index
, p_encoded => 'F'
, p_data => x_msg_data
, p_msg_index_out => v_msg_index_out
);
x_msg_data := SUBSTR (x_msg_data, 1, 200);
DBMS_OUTPUT.put_line (x_msg_data);
DBMS_OUTPUT.put_line ('============================================================');
END LOOP;
END IF;
END;
END LOOP;
END IF;
END;
BEGIN
l_line_tbl (1).line_id := 3929705;
allocate_move_order (l_line_tbl, x_return_status, x_msg_data, x_msg_count);
COMMIT;
END;


TRANSACT MOVE ORDER

DECLARE
x_return_status VARCHAR2 (1);

PROCEDURE transact_move_order (p_move_order_id IN NUMBER, x_return_status OUT VARCHAR2)
IS
l_header_id NUMBER;
l_program VARCHAR2 (100);
l_func VARCHAR2 (100);
l_args VARCHAR2 (100);
p_timeout NUMBER;
l_old_tm_success BOOLEAN;
l_rc_field NUMBER;

CURSOR c1 (p_header_id IN NUMBER)
IS
SELECT transaction_header_id
FROM mtl_material_transactions_temp
WHERE transaction_source_id = p_header_id;
BEGIN
mo_global.set_policy_context ('S', 204);
inv_globals.set_org_id (207);
fnd_global.apps_initialize (1005902, 50583, 401);

FOR i IN c1 (p_move_order_id)
LOOP
l_program := 'INXTPU';
l_func := l_program;
l_args := l_program || ' ' || 'TRANS_HEADER_ID=' || TO_CHAR (i.transaction_header_id);
p_timeout := 500;
COMMIT;
l_old_tm_success :=
inv_pick_wave_pick_confirm_pub.inv_tm_launch (program => l_program
, args => l_args
, TIMEOUT => p_timeout
, rtval => l_rc_field
);

IF l_old_tm_success
THEN
x_return_status := 'S';
DBMS_OUTPUT.put_line ('Result is :' || 'Success');
ELSE
x_return_status := 'E';
DBMS_OUTPUT.put_line ('Result is :' || 'Failed');
END IF;

IF x_return_status = 'S'
THEN
COMMIT;
ELSE
ROLLBACK;
END IF;
END LOOP;
END;
BEGIN
transact_move_order (2055447, x_return_status);
COMMIT;
END;

1 comment:

  1. SQL USED:
    SELECT quantity, quantity_delivered, quantity_detailed, required_quantity, line_status
    FROM mtl_txn_request_lines
    WHERE line_id = &enterlineid;
    1. Create move order:
    Quantity: 10
    Quantity Delivered: NULL
    Quantity Detailed: NULL
    Quantity Required: NULL
    Line Status: 1 (Incomplete)

    2. Approve move order:
    Quantity: 10
    Quantity Delivered: NULL
    Quantity Detailed: NULL
    Quantity Required: NULL
    Line Status: 3 (Approved)

    3. Allocate move order for full quantity:
    Quantity: 10
    Quantity Delivered: NULL
    Quantity Detailed: 10
    Quantity Required: NULL
    Line Status: 3 (Approved)

    4. Transact move order:
    Quantity: 10
    Quantity Delivered: 10
    Quantity Detailed: 10
    Quantity Required: NULL
    Line Status: 5 (Closed)

    ReplyDelete