Tuesday, 6 May 2014

PROCEDURE FOR ITEM WISE WITH NON MANDATORY IF ITEM CODE IS NULL OR NOT NULL



GRANT ALL ON  XXTNPL.tnpl_om_stock_in_hand_reel TO APPS.XXTNPL.tnpl_om_stock_in_hand_reel

 CREATE SYNONYM XXTNPL.tnpl_om_stock_in_hand_reel FOR APPS.XXTNPL.tnpl_om_stock_in_hand_reel



GRANT ALL ON  XXTNPL.TNPL_OM_STOCK_IN_HAND TO APPS

 CREATE SYNONYM APPS.TNPL_OM_STOCK_IN_HAND FOR XXTNPL.TNPL_OM_STOCK_IN_HAND;


CREATE OR REPLACE PROCEDURE XXTNPL.tnpl_om_stock_in_hand_reel (
   p_from_date   IN   DATE DEFAULT NULL,
   p_to_date     IN   DATE DEFAULT NULL,
   p_variety     IN   VARCHAR2 DEFAULT NULL,
   p_gsm         IN   VARCHAR2 DEFAULT NULL,
   p_size        IN   VARCHAR2 DEFAULT NULL,
   p_seg         IN   VARCHAR2 DEFAULT NULL,
   p_org_id      IN   NUMBER DEFAULT NULL
)
IS
--DECLARE
--   p_from               DATE          := '1-May-2013';
--   p_to_date            DATE          := '02-May-2013';
--   p_variety            VARCHAR2 (25) := NULL;
--   p_gsm                VARCHAR2 (25) := NULL;
--   p_size               VARCHAR2 (25) := NULL;
--   p_seg                VARCHAR2 (35) := NULL;
--   p_org_id             NUMBER        := 110;
--   l_opn_balace         NUMBER        := NULL;
   l_opn_balace         NUMBER;
   l_close_qty_cal      NUMBER;
   l_open_qty_bal       NUMBER;
   l_open_qty_balance   NUMBER;
   l_receipt_qty        NUMBER;
   l_openinig_lot       NUMBER;
   l_open_lot           NUMBER;
   l_closing_lot        NUMBER;

   CURSOR c1
   IS
    
      SELECT   *
          FROM TNPL_OM_STOCK_IN_HAND
      ORDER BY creation_date;
BEGIN
   BEGIN
   execute immediate 'truncate table TNPL_OM_STOCK_IN_HAND';
      INSERT INTO TNPL_OM_STOCK_IN_HAND
                  (creation_date, receipt_qty, receipt_lot, variety, gsm,
                   width_size, dispatch_qty, dispatch_lot, sales_return,
                   sales_lot, stock_return, stock_lot, item_code)
         (SELECT   creation_date, SUM (receipt_qty) receipt_qty,
                   SUM (receipt_lot) receipt_lot, variety, gsm, width_size,
                   SUM (dispatch_qty) dispatch_qty,
                   SUM (dispatch_lot) dispatch_lot,
                   SUM (sales_return) sales_return, SUM (sales_lot)
                                                                   sales_lot,
                   SUM (stock_return) stock_return,
                   SUM (stock_retrun_lot) stock_lot, item_code
              FROM (SELECT   creation_date, /* transaction_type_name,*/ SUM
                                                                          (receipt_qty
                                                                          )
                                                                  receipt_qty,
                             (receipt_lot_plus - receipt_lot_minus
                             ) receipt_lot,
                             variety, gsm, width_size,
                             SUM (dispatch_qty) dispatch_qty,
                             (dispatch_lot_plus - dispatch_lot_minus
                             ) dispatch_lot,
                             sales_return,
                             (sales_lot_plus - sales_lot_minus) sales_lot,
                             stock_return, stock_retrun_lot, item_code
                        FROM (SELECT   creation_date, transaction_type_name,
                                       SUM (receipt_qty) receipt_qty,
                                       COUNT
                                           (receipt_lot_plus)
                                                             receipt_lot_plus,
                                       COUNT
                                          (receipt_lot_minus
                                          ) receipt_lot_minus,
                                       variety, gsm, width_size,
                                       SUM (dispatch_qty) dispatch_qty,
                                       COUNT
                                          (dispatch_lot_plus
                                          ) dispatch_lot_plus,
                                       COUNT
                                          (dispatch_lot_minus
                                          ) dispatch_lot_minus,
                                       SUM (sales_qty) sales_return,
                                       COUNT (sales_lot_plus) sales_lot_plus,
                                       COUNT (sales_lot_minus)
                                                              sales_lot_minus,
                                       COUNT
                                           (stock_retrun_lot)
                                                             stock_retrun_lot,
                                       SUM (stock_return) stock_return,
                                       item_code
                                  FROM (SELECT TRUNC
                                                  (mmt.transaction_date
                                                  ) creation_date,
                                               mtt.transaction_type_name,
                                               msib.segment1 item_code,
                                               (CASE
                                                   WHEN mtt.transaction_type_name NOT IN
                                                          ('Sales order issue',
                                                           'Int Order Intr Ship',
                                                           'RMA Receipt')
                                                      THEN mlot.transaction_quantity
                                                   ELSE 0
                                                END
                                               ) receipt_qty,
                                               (CASE
                                                   WHEN mlot.transaction_quantity >
                                                                             0
                                                   AND mtt.transaction_type_name NOT IN
                                                          ('Sales order issue',
                                                           'Int Order Intr Ship',
                                                           'RMA Receipt')
                                                      THEN mlot.lot_number
                                                   ELSE NULL
                                                END
                                               ) receipt_lot_plus,
                                               (CASE
                                                   WHEN mlot.transaction_quantity <
                                                                             0
                                                   AND mtt.transaction_type_name NOT IN
                                                          ('Sales order issue',
                                                           'Int Order Intr Ship',
                                                           'RMA Receipt')
                                                      THEN mlot.lot_number
                                                   ELSE NULL
                                                END
                                               ) receipt_lot_minus,
                                               SUBSTR (segment1, 4,
                                                       3) variety,
                                               SUBSTR (segment1, 8, 4) gsm,
                                               SUBSTR (segment1,
                                                       12,
                                                       4
                                                      ) width_size,
                                               (CASE
                                                   WHEN mtt.transaction_type_name IN
                                                          ('Sales order issue',
                                                           'Int Order Intr Ship')
                                                      THEN mlot.transaction_quantity
                                                   ELSE 0
                                                END
                                               ) dispatch_qty,
                                               (CASE
                                                   WHEN mlot.transaction_quantity >
                                                                             0
                                                   AND mtt.transaction_type_name IN
                                                          ('Sales order issue',
                                                           'Int Order Intr Ship')
                                                      THEN mlot.lot_number
                                                   ELSE NULL
                                                END
                                               ) dispatch_lot_plus,
                                               (CASE
                                                   WHEN mlot.transaction_quantity <
                                                                             0
                                                   AND mtt.transaction_type_name IN
                                                          ('Sales order issue',
                                                           'Int Order Intr Ship')
                                                      THEN mlot.lot_number
                                                   ELSE NULL
                                                END
                                               ) dispatch_lot_minus,
                                               (CASE
                                                   WHEN mtt.transaction_type_name IN
                                                              ('RMA Receipt')
                                                      THEN mlot.transaction_quantity
                                                   ELSE 0
                                                END
                                               ) sales_qty,
                                               (CASE
                                                   WHEN mlot.transaction_quantity >
                                                                             0
                                                   AND mtt.transaction_type_name IN
                                                              ('RMA Receipt')
                                                      THEN mlot.lot_number
                                                   ELSE NULL
                                                END
                                               ) sales_lot_plus,
                                               (CASE
                                                   WHEN mlot.transaction_quantity <
                                                                             0
                                                   AND mtt.transaction_type_name IN
                                                              ('RMA Receipt')
                                                      THEN mlot.lot_number
                                                   ELSE NULL
                                                END
                                               ) sales_lot_minus,
                                               (CASE
                                                   WHEN mlot.transaction_quantity <
                                                                             0
                                                   AND mtt.transaction_type_name IN
                                                          ('Subinventory Transfer')
                                                   AND mmt.subinventory_code IN
                                                          ('ASRS-1', 'ASRS-2',
                                                           'GODOWN-1')
                                                   AND mmt.transfer_subinventory IN
                                                          ('BUNDLE_ST',
                                                           'BOX_ST',
                                                           'PACK_ST')
                                                      THEN mlot.lot_number
                                                   ELSE NULL
                                                END
                                               ) stock_retrun_lot,
                                               (CASE
                                                   WHEN mtt.transaction_type_name IN
                                                          ('Subinventory Transfer')
                                                   AND mmt.subinventory_code IN
                                                          ('ASRS-1', 'ASRS-2',
                                                           'GODOWN-1')
                                                   AND mmt.transfer_subinventory IN
                                                          ('BUNDLE_ST',
                                                           'BOX_ST',
                                                           'PACK_ST')
                                                   AND mlot.transaction_quantity <
                                                                             0
                                                      THEN mlot.transaction_quantity
                                                   ELSE 0
                                                END
                                               ) stock_return
                                          FROM apps.mtl_system_items_b msib,
                                               apps.mtl_material_transactions mmt,
                                               apps.mtl_transaction_types mtt,
                                               apps.rcv_transactions rt,
                                               apps.mtl_transaction_lot_numbers mlot
                                         WHERE msib.segment1 =
                                                    NVL (p_seg, msib.segment1)
                                           AND SUBSTR (msib.segment1, 1, 1) =
                                                                           'R'
                                           AND msib.inventory_item_id =
                                                         mmt.inventory_item_id
                                           AND msib.organization_id =
                                                           mmt.organization_id
                                           AND mmt.transaction_source_type_id =
                                                  mlot.transaction_source_type_id
                                           AND mmt.inventory_item_id =
                                                        mlot.inventory_item_id
                                           AND mmt.transaction_id =
                                                           mlot.transaction_id
                                           AND msib.inventory_item_id =
                                                         mmt.inventory_item_id
--     And Msib.Segment1 = 'U1Nrdpr006005850910004'
                                           AND rt.transaction_id(+) =
                                                            mmt.transaction_id
                                           AND msib.organization_id =
                                                  NVL (p_org_id,
                                                       msib.organization_id
                                                      )
                                           AND SUBSTR (segment1, 4, 3) =
                                                  NVL (p_variety,
                                                       SUBSTR (segment1, 4, 3)
                                                      )
                                           AND SUBSTR (segment1, 8, 4) =
                                                  NVL (p_gsm,
                                                       SUBSTR (segment1, 8, 4)
                                                      )
                                           AND SUBSTR (segment1, 12, 4) =
                                                  NVL (p_size,
                                                       SUBSTR (segment1, 12,
                                                               4)
                                                      )
                                           AND mtt.transaction_type_id =
                                                       mmt.transaction_type_id
                                           AND mmt.transaction_source_type_id =
                                                  mtt.transaction_source_type_id
                                           AND mmt.transaction_date
                                                  BETWEEN (p_from_date)
                                                      AND (p_to_date))
                              GROUP BY creation_date,
                                       transaction_type_name,
                                       variety,
                                       gsm,
                                       width_size,
                                       item_code)
                    GROUP BY creation_date,
                             receipt_lot_plus,
                             receipt_lot_minus,
                             variety,
                             gsm,
                             width_size,
                             dispatch_lot_plus,
                             dispatch_lot_minus,
                             sales_return,
                             sales_lot_plus,
                             sales_lot_minus,
                             stock_return,
                             stock_retrun_lot,
                             item_code)
          GROUP BY creation_date, variety, gsm, width_size, item_code);
   END;

   BEGIN
      SELECT SUM (stock) stock
        INTO l_opn_balace
        FROM (SELECT   NVL (SUM (mmt.transaction_quantity), 0) AS stock,
                       SUBSTR (segment1, 4, 3) variety,
                       SUBSTR (segment1, 8, 4) p_gsm, msib.segment1,
                       msib.organization_id, SUBSTR (segment1, 12, 4)
                  FROM apps.mtl_system_items_b msib,
                       apps.mtl_material_transactions mmt,
                       apps.rcv_transactions rt
                 WHERE msib.inventory_item_id = mmt.inventory_item_id
                   AND msib.organization_id = mmt.organization_id
                   AND msib.segment1 = NVL (p_seg, msib.segment1)
                   AND SUBSTR (segment1, 4, 3) =
                                      NVL (p_variety, SUBSTR (segment1, 4, 3))
                   AND SUBSTR (segment1, 8, 4) =
                                          NVL (p_gsm, SUBSTR (segment1, 8, 4))
                   AND SUBSTR (segment1, 12, 4) =
                                        NVL (p_size, SUBSTR (segment1, 12, 4))
                   AND rt.transaction_id(+) = mmt.transaction_id
                   AND msib.organization_id =
                                          NVL (p_org_id, msib.organization_id)
                   AND mmt.transaction_date < p_from_date
                   AND transaction_action_id NOT IN (24, 30)
                   AND (logical_transaction = 2 OR logical_transaction IS NULL
                       )
              GROUP BY SUBSTR (segment1, 4, 3),
                       SUBSTR (segment1, 8, 4),
                       msib.organization_id,
                       SUBSTR (segment1, 12, 4),
                       msib.segment1,
                       mmt.transaction_date
              ORDER BY mmt.transaction_date);
   END;

   DBMS_OUTPUT.put_line (l_opn_balace);

   BEGIN
      SELECT COUNT (lot_count)
        INTO l_open_lot                               ----- opening lot number
        FROM (SELECT   CASE
                          WHEN trans_qty <> 0
                             THEN (lot_number)
                       END AS lot_count, item_id, loc
                  FROM (SELECT   SUM (mlot.transaction_quantity) AS trans_qty,
                                 mlot.lot_number AS lot_number,
                                 mmt1.inventory_item_id AS item_id,
                                 mmt1.locator_id AS loc
                            FROM apps.mtl_transaction_lot_numbers mlot,
                                 apps.mtl_material_transactions mmt1,
                                 apps.mtl_system_items_b msib
                           WHERE 1 = 1
--            and mmt1.inventory_item_id    = mlot.inventory_item_id
                             AND msib.inventory_item_id =
                                                        mmt1.inventory_item_id
                             AND msib.organization_id = mmt1.organization_id
                             AND mmt1.transaction_id = mlot.transaction_id
                             AND msib.segment1 = p_seg
                             AND mmt1.subinventory_code IN
                                             ('ASRS-1', 'ASRS-2', 'GODOWN-1')
                             AND mlot.transaction_date < p_from_date
                             AND mlot.organization_id = p_org_id
                        GROUP BY mlot.lot_number,
                                 mmt1.inventory_item_id,
                                 mmt1.locator_id,
                                 mlot.lot_number)
                 WHERE lot_number IS NOT NULL
              GROUP BY trans_qty, item_id, loc, lot_number);
   END;

   FOR i IN c1
   LOOP
      IF p_seg IS NULL
      THEN
         SELECT SUM (stock) stock
           INTO l_open_qty_bal
           FROM (SELECT   NVL (SUM (mmt.transaction_quantity), 0) AS stock,
                          SUBSTR (segment1, 4, 3) variety,
                          SUBSTR (segment1, 8, 4) p_gsm, msib.segment1,
                          msib.organization_id, SUBSTR (segment1, 12, 4)
                     FROM apps.mtl_system_items_b msib,
                          apps.mtl_material_transactions mmt,
                          apps.rcv_transactions rt
                    WHERE msib.inventory_item_id = mmt.inventory_item_id
                      AND msib.organization_id = mmt.organization_id
                      AND msib.segment1 = i.item_code
                      AND SUBSTR (segment1, 4, 3) =
                                      NVL (p_variety, SUBSTR (segment1, 4, 3))
                      AND SUBSTR (segment1, 8, 4) =
                                          NVL (p_gsm, SUBSTR (segment1, 8, 4))
                      AND SUBSTR (segment1, 12, 4) =
                                        NVL (p_size, SUBSTR (segment1, 12, 4))
                      AND rt.transaction_id(+) = mmt.transaction_id
                      AND msib.organization_id =
                                          NVL (p_org_id, msib.organization_id)
                      AND mmt.transaction_date < p_from_date
                      AND transaction_action_id NOT IN (24, 30)
                      AND (   logical_transaction = 2
                           OR logical_transaction IS NULL
                          )
                 GROUP BY SUBSTR (segment1, 4, 3),
                          SUBSTR (segment1, 8, 4),
                          msib.organization_id,
                          SUBSTR (segment1, 12, 4),
                          msib.segment1,
                          mmt.transaction_date
                 ORDER BY mmt.transaction_date);
      ELSE
         l_open_qty_bal := NVL (l_opn_balace, 0);
      END IF;

      IF p_seg IS NULL
      THEN
         SELECT COUNT (lot_count)
           INTO l_openinig_lot                        ----- opening lot number
           FROM (SELECT   CASE
                             WHEN trans_qty <> 0
                                THEN (lot_number)
                          END AS lot_count,
                          item_id, loc
                     FROM (SELECT   SUM
                                       (mlot.transaction_quantity
                                       ) AS trans_qty,
                                    mlot.lot_number AS lot_number,
                                    mmt1.inventory_item_id AS item_id,
                                    mmt1.locator_id AS loc
                               FROM apps.mtl_transaction_lot_numbers mlot,
                                    apps.mtl_material_transactions mmt1,
                                    apps.mtl_system_items_b msib
                              WHERE 1 = 1
--            and mmt1.inventory_item_id    = mlot.inventory_item_id
                                AND msib.inventory_item_id =
                                                        mmt1.inventory_item_id
                                AND msib.organization_id =
                                                          mmt1.organization_id
                                AND mmt1.transaction_id = mlot.transaction_id
                                AND msib.segment1 = i.item_code
                                AND mmt1.subinventory_code IN
                                             ('ASRS-1', 'ASRS-2', 'GODOWN-1')
                                AND mlot.transaction_date < p_from_date
                                AND mlot.organization_id =
                                          NVL (p_org_id, mlot.organization_id)
                           GROUP BY mlot.lot_number,
                                    mmt1.inventory_item_id,
                                    mmt1.locator_id,
                                    mlot.lot_number)
                    WHERE lot_number IS NOT NULL
                 GROUP BY trans_qty, item_id, loc, lot_number);
      ELSE
         DBMS_OUTPUT.put_line ('l_open_qty_bal' || l_open_qty_bal);
         l_openinig_lot := NVL (l_open_lot, 0);
      END IF;

      l_closing_lot :=
           NVL (l_openinig_lot, 0)
         + NVL (i.receipt_lot, 0)
         + NVL (i.dispatch_lot, 0);
      l_close_qty_cal :=
           NVL (l_open_qty_bal, 0)
         + NVL (i.receipt_qty, 0)
         + NVL (i.dispatch_qty, 0);
      DBMS_OUTPUT.put_line ('l_open_qty_bal' || l_open_qty_bal);

      UPDATE TNPL_OM_STOCK_IN_HAND
         SET bal_stock = l_open_qty_bal,
             closing_qty = l_close_qty_cal,
             bal_sto_lot = l_openinig_lot,
             closing_lot = l_closing_lot
       WHERE creation_date = i.creation_date AND item_code = i.item_code;

      l_opn_balace := l_close_qty_cal;
      l_open_lot := l_closing_lot;
   END LOOP;
END;
/

------------------------------BUNDLE--------------------------------------------------------

CREATE OR REPLACE PROCEDURE XXTNPL.tnpl_om_stock_in_hand_bundle (
   p_from_date   IN   DATE DEFAULT NULL,
   p_to_date     IN   DATE DEFAULT NULL,
   p_variety     IN   VARCHAR2 DEFAULT NULL,
   p_gsm         IN   VARCHAR2 DEFAULT NULL,
   p_size        IN   VARCHAR2 DEFAULT NULL,
   p_seg         IN   VARCHAR2 DEFAULT NULL,
   p_org_id      IN   NUMBER DEFAULT NULL
)
IS
--DECLARE
--   p_from_date               DATE          := '1-May-2013';
--   p_to_date            DATE          := '02-May-2013';
--   p_variety            VARCHAR2 (25) := NULL;
--   p_gsm                VARCHAR2 (25) := NULL;
--   p_size               VARCHAR2 (25) := NULL;
--   p_seg                VARCHAR2 (35) := NULL;    --'U3NRDPR008005850910003';
--   p_org_id             NUMBER        := 110;
--   l_opn_balace         NUMBER        := NULL;
   l_opn_balace         NUMBER;
   l_close_qty_cal      NUMBER;
   l_open_qty_bal       NUMBER;
   l_open_qty_balance   NUMBER;
   l_receipt_qty        NUMBER;
   l_openinig_lot       NUMBER;
   l_open_lot           NUMBER;
   l_closing_lot        NUMBER;

   CURSOR c1
   IS
   
      SELECT   *
          FROM TNPL_OM_STOCK_IN_HAND
      ORDER BY creation_date;
BEGIN
   BEGIN
    execute immediate 'truncate table TNPL_OM_STOCK_IN_HAND';
      INSERT INTO TNPL_OM_STOCK_IN_HAND
                  (creation_date, receipt_qty, receipt_lot, variety, gsm,
                   width_size, dispatch_qty, dispatch_lot, sales_return,
                   sales_lot, stock_return, stock_lot, item_code)
         (SELECT   creation_date, SUM (receipt_qty) receipt_qty,
                   ROUND (  NVL ((receipt_qty / NVL (conversion_rate, 1)), 0)
                          * 1000
                         ) receipt_lot,
                   variety, gsm, width_size, SUM (dispatch_qty) dispatch_qty,
                   ROUND (  NVL ((dispatch_qty / NVL (conversion_rate, 1)), 0)
                          * 1000
                         ) dispatch_lot,
                   SUM (sales_return) sales_return,
                   ROUND (  NVL ((sales_return / NVL (conversion_rate, 1)), 0)
                          * 1000
                         ) sales_lot,
                   SUM (stock_return) stock_return,
                   ROUND (  NVL ((stock_return / NVL (conversion_rate, 1)), 0)
                          * 1000
                         ) stock_lot,
                   item_code
              FROM (SELECT   creation_date, conversion_rate,
                             SUM (receipt_qty) receipt_qty, variety, gsm,
                             width_size, SUM (dispatch_qty) dispatch_qty,
                             sales_return, stock_return, item_code
                        FROM (SELECT   creation_date, transaction_type_name,
                                       conversion_rate,
                                       SUM (receipt_qty) receipt_qty, variety,
                                       gsm, width_size,
                                       SUM (dispatch_qty) dispatch_qty,
                                       SUM (sales_qty) sales_return,
                                       SUM (stock_return) stock_return,
                                       item_code
                                  FROM (SELECT TRUNC
                                                  (mmt.transaction_date
                                                  ) creation_date,
                                               msib.segment1 item_code,
                                               mucc.conversion_rate
                                                              conversion_rate,
                                               mtt.transaction_type_name,
                                               (CASE
                                                   WHEN mtt.transaction_type_name NOT IN
                                                          ('Sales order issue',
                                                           'Int Order Intr Ship',
                                                           'RMA Receipt')
                                                      THEN mmt.transaction_quantity
                                                   ELSE 0
                                                END
                                               ) receipt_qty,
                                               SUBSTR (segment1, 4,
                                                       3) variety,
                                               SUBSTR (segment1, 8, 4) gsm,
                                               SUBSTR (segment1,
                                                       12,
                                                       4
                                                      ) width_size,
                                               (CASE
                                                   WHEN mtt.transaction_type_name IN
                                                          ('Sales order issue',
                                                           'Int Order Intr Ship')
                                                      THEN mmt.transaction_quantity
                                                   ELSE 0
                                                END
                                               ) dispatch_qty,
                                               (CASE
                                                   WHEN mtt.transaction_type_name IN
                                                              ('RMA Receipt')
                                                      THEN mmt.transaction_quantity
                                                   ELSE 0
                                                END
                                               ) sales_qty,
                                               (CASE
                                                   WHEN mtt.transaction_type_name IN
                                                          ('Subinventory Transfer')
                                                   AND mmt.subinventory_code IN
                                                          ('ASRS-1', 'ASRS-2',
                                                           'GODOWN-1')
                                                   AND mmt.transfer_subinventory IN
                                                          ('BUNDLE_ST',
                                                           'BOX_ST',
                                                           'PACK_ST')
                                                   AND mmt.transaction_quantity <
                                                                             0
                                                      THEN mmt.transaction_quantity
                                                   ELSE 0
                                                END
                                               ) stock_return
                                          FROM apps.mtl_system_items_b msib,
                                               apps.mtl_material_transactions mmt,
                                               apps.mtl_transaction_types mtt,
                                               apps.rcv_transactions rt,
                                               apps.mtl_uom_class_conversions mucc
                                         WHERE msib.segment1 =
                                                    NVL (p_seg, msib.segment1)
                                           AND SUBSTR (msib.segment1, 1, 1) IN
                                                  ('U', 'P', 'R', 'S', 'X',
                                                   'Z')
                                           AND msib.inventory_item_id =
                                                         mmt.inventory_item_id
                                           AND msib.organization_id =
                                                           mmt.organization_id
                                           AND msib.inventory_item_id =
                                                         mmt.inventory_item_id
                                           AND rt.transaction_id(+) =
                                                            mmt.transaction_id
                                           AND msib.organization_id =
                                                  NVL (p_org_id,
                                                       msib.organization_id
                                                      )
                                           AND SUBSTR (segment1, 4, 3) =
                                                  NVL (p_variety,
                                                       SUBSTR (segment1, 4, 3)
                                                      )
                                           AND SUBSTR (segment1, 8, 4) =
                                                  NVL (p_gsm,
                                                       SUBSTR (segment1, 8, 4)
                                                      )
                                           AND SUBSTR (segment1, 12, 4) =
                                                  NVL (p_size,
                                                       SUBSTR (segment1, 12,
                                                               4)
                                                      )
                                           AND mtt.transaction_type_id =
                                                       mmt.transaction_type_id
                                           AND mmt.transaction_source_type_id =
                                                  mtt.transaction_source_type_id
                                           AND mmt.transaction_date
                                                  BETWEEN (p_from_date)
                                                      AND (p_to_date)
                                           AND mucc.inventory_item_id =
                                                         mmt.inventory_item_id)
                              GROUP BY creation_date,
                                       transaction_type_name,
                                       variety,
                                       gsm,
                                       width_size,
                                       conversion_rate,
                                       item_code)
                    GROUP BY creation_date,
                             variety,
                             gsm,
                             width_size,
                             sales_return,
                             stock_return,
                             conversion_rate,
                             item_code)
          GROUP BY creation_date,
                   variety,
                   gsm,
                   width_size,
                   receipt_qty,
                   conversion_rate,
                   dispatch_qty,
                   sales_return,
                   stock_return,
                   item_code);
   END;

   BEGIN
      SELECT stock
        INTO l_opn_balace
        FROM (SELECT   NVL (SUM (mmt.transaction_quantity), 0) AS stock
                  FROM apps.mtl_system_items_b msib,
                       apps.mtl_material_transactions mmt,
                       apps.rcv_transactions rt
                 WHERE msib.inventory_item_id = mmt.inventory_item_id
                   AND msib.organization_id = mmt.organization_id
                   AND msib.segment1 = NVL (p_seg, msib.segment1)
                   AND rt.transaction_id(+) = mmt.transaction_id
                   AND msib.organization_id =
                                          NVL (p_org_id, msib.organization_id)
                   AND mmt.transaction_date < p_from_date
                   AND transaction_action_id NOT IN (24, 30)
                   AND (logical_transaction = 2 OR logical_transaction IS NULL
                       )
              ORDER BY mmt.transaction_date);
   END;

   BEGIN
      SELECT SUM (stock) stock
        INTO l_open_lot
        FROM (SELECT ROUND (NVL ((stock / NVL (conversion_rate, 1)), 0) * 1000
                           ) stock
                FROM (SELECT   NVL ((mmt.transaction_quantity), 0) AS stock,
                               uom.conversion_rate
                          FROM apps.mtl_system_items_b msib,
                               apps.mtl_material_transactions mmt,
                               apps.rcv_transactions rt,
                               apps.mtl_uom_class_conversions uom
                         WHERE msib.inventory_item_id = mmt.inventory_item_id
                           AND msib.organization_id = mmt.organization_id
                           AND msib.segment1 = NVL (p_seg, msib.segment1)
                           AND rt.transaction_id(+) = mmt.transaction_id
                           AND msib.organization_id =
                                          NVL (p_org_id, msib.organization_id)
                           AND mmt.transaction_date < p_from_date
                           AND uom.inventory_item_id = mmt.inventory_item_id
                           AND transaction_action_id NOT IN (24, 30)
                           AND (   logical_transaction = 2
                                OR logical_transaction IS NULL
                               )
                      --group by uom.conversion_rate , mmt.transaction_date
                      ORDER BY mmt.transaction_date));
   END;

   DBMS_OUTPUT.put_line (l_opn_balace);

   FOR i IN c1
   LOOP
      IF p_seg IS NULL
      THEN
         SELECT stock
           INTO l_opn_balace
           FROM (SELECT   NVL (SUM (mmt.transaction_quantity), 0) AS stock
                     FROM apps.mtl_system_items_b msib,
                          apps.mtl_material_transactions mmt,
                          apps.rcv_transactions rt
                    WHERE msib.inventory_item_id = mmt.inventory_item_id
                      AND msib.organization_id = mmt.organization_id
                      AND msib.segment1 = i.item_code
                      AND rt.transaction_id(+) = mmt.transaction_id
                      AND msib.organization_id =
                                          NVL (p_org_id, msib.organization_id)
                      AND mmt.transaction_date < p_from_date
                      AND transaction_action_id NOT IN (24, 30)
                      AND (   logical_transaction = 2
                           OR logical_transaction IS NULL
                          )
                 ORDER BY mmt.transaction_date);
      ELSE
         l_open_qty_bal := NVL (l_opn_balace, 0);
      END IF;

      DBMS_OUTPUT.put_line ('l_open_qty_bal' || l_open_qty_bal);

      IF p_seg IS NULL
      THEN
         SELECT SUM (stock) stock
           INTO l_openinig_lot
           FROM (SELECT ROUND (  NVL ((stock / NVL (conversion_rate, 1)), 0)
                               * 1000
                              ) stock
                   FROM (SELECT   NVL ((mmt.transaction_quantity),
                                       0
                                      ) AS stock,
                                  uom.conversion_rate
                             FROM apps.mtl_system_items_b msib,
                                  apps.mtl_material_transactions mmt,
                                  apps.rcv_transactions rt,
                                  apps.mtl_uom_class_conversions uom
                            WHERE msib.inventory_item_id =
                                                         mmt.inventory_item_id
                              AND msib.organization_id = mmt.organization_id
                              AND msib.segment1 = i.item_code
                              AND rt.transaction_id(+) = mmt.transaction_id
                              AND msib.organization_id =
                                          NVL (p_org_id, msib.organization_id)
                              AND mmt.transaction_date < p_from_date
                              AND uom.inventory_item_id =
                                                         mmt.inventory_item_id
                              AND transaction_action_id NOT IN (24, 30)
                              AND (   logical_transaction = 2
                                   OR logical_transaction IS NULL
                                  )
                         --group by uom.conversion_rate , mmt.transaction_date
                         ORDER BY mmt.transaction_date));
      ELSE
         DBMS_OUTPUT.put_line (l_open_lot);
         l_openinig_lot := NVL (l_open_lot, 0);
         DBMS_OUTPUT.put_line ('l_openinig_lot' || l_openinig_lot);
      END IF;

      ----      DBMS_OUTPUT.put_line ('l_open_lot' || l_open_lot);
      l_closing_lot :=
           NVL (l_openinig_lot, 0)
         + NVL (i.receipt_lot, 0)
         + NVL (i.dispatch_lot, 0);
      l_open_qty_bal := NVL (l_opn_balace, 0);
      DBMS_OUTPUT.put_line (l_open_qty_bal);
      l_close_qty_cal :=
           NVL (l_open_qty_bal, 0)
         + NVL (i.receipt_qty, 0)
         + NVL (i.dispatch_qty, 0);

      UPDATE TNPL_OM_STOCK_IN_HAND
         SET bal_stock = l_open_qty_bal,
             closing_qty = l_close_qty_cal,
             bal_sto_lot = l_openinig_lot,
             closing_lot = l_closing_lot
       WHERE creation_date = i.creation_date AND item_code = i.item_code;

      l_opn_balace := l_close_qty_cal;
      l_open_lot := l_closing_lot;
   END LOOP;
END;
/