Oracle Procedure示例03


CREATE OR REPLACE 
PACKAGE XXDM_SOP_OUTBOUND_PKG
  IS
    /*---------------------------------------------------------
      Current Version : 1.00
      Create By       : 
      Create Date     : 2009-05-14
      Purpose         : S&OP Outbound.
      Logicality      :
    ---------------------------------------------------------*/  
   /* The index is important, otherwise {resultset} doesn't work. */
   TYPE SqlReturnTbl IS TABLE OF Varchar(500) INDEX BY BINARY_INTEGER;  

   
   PROCEDURE xxdm_sop_outbound_data
                (p_level_id IN VARCHAR2
                 ,p_member_id IN VARCHAR2
                 ,p_user_id IN NUMBER
                 ,p_fcst_type IN VARCHAR2);    
                 
   PROCEDURE xxdm_sop_outbound_firmed 
                (p_level_id IN VARCHAR2
                 ,p_member_id IN VARCHAR2
                 ,p_user_id IN NUMBER);    
                 
   PROCEDURE xxdm_sop_outbound_notfirmed 
                (p_level_id IN VARCHAR2
                 ,p_member_id IN VARCHAR2
                 ,p_user_id IN NUMBER);   
                 
   PROCEDURE update_sop_outbound_status
                (p_s_id IN NUMBER
                 ,o_result OUT SqlReturnTbl);
                 
   PROCEDURE update_supply_lbfs_flag
                (p_item_id     IN VARCHAR2
                 ,p_ro         IN VARCHAR2
                 ,p_site       IN VARCHAR2  
                 ,p_supplier   IN VARCHAR2
                 ,p_supply_plan_id   IN NUMBER
                 ,p_sales_date       IN VARCHAR2
                 ,o_result OUT SqlReturnTbl);
                 
   PROCEDURE update_supply_po_flag
                (p_item_id           IN VARCHAR2
                 ,p_ro               IN VARCHAR2
                 ,p_site             IN VARCHAR2  
                 ,p_supplier         IN VARCHAR2
                 ,p_supply_plan_id   IN NUMBER
                 ,p_sales_date       IN VARCHAR2
                 ,p_po_flag          IN NUMBER);  
                 
   PROCEDURE insert_sop_outbound_data
                (                      
                p_supply_plan_id               IN  NUMBER,
                p_supply_plan_code             IN  VARCHAR2,
                p_supply_plan_desc             IN  VARCHAR2,
                p_fcst_type                    IN  VARCHAR2,
                p_plan_method                  IN  VARCHAR2,
                p_plc_status                   IN  VARCHAR2,
                p_ro_org                       IN  VARCHAR2,
                p_ro_org_desc                  IN  VARCHAR2,
                p_sp_item                      IN  VARCHAR2,
                p_sp_item_desc                 IN  VARCHAR2,
                p_supplier                     IN  VARCHAR2,
                p_supplier_desc                IN  VARCHAR2,
                p_supplier_site                IN  VARCHAR2,
                p_supplier_site_desc           IN  VARCHAR2,
                p_plan_date                    IN  DATE,
                p_net_demand_qty               IN  NUMBER,
                p_month_idx                    IN  NUMBER,
                p_po_number                    IN  VARCHAR2,
                p_po_status                    IN  VARCHAR2,
                p_created_by                   IN  NUMBER,
                p_creation_date                IN  DATE,
                p_flag                         IN  NUMBER);    
                
    


  PROCEDURE update_outbound_po_status
                (p_action       IN VARCHAR2,
                 p_s_id         IN NUMBER,
                 p_po_status    IN VARCHAR2,
                 p_log_code     IN VARCHAR2);
  PROCEDURE update_sop_outbound_po
                (p_s_id         IN NUMBER,
                 p_pono         IN VARCHAR2,
                 p_log_code     IN VARCHAR2);
END;
/


CREATE OR REPLACE 
PACKAGE BODY XXDM_SOP_OUTBOUND_PKG
IS
   /*------------------------------------------------------------------------------
     Created by 
     Function:
                S&OP Outbound.
     Logicality:
                this procedure use to S&OP Outbound
                
     Input:     p_level_id		-- demantra data model items level id
				p_member_id		-- demantra data model items member id
				p_user_id		-- demantra user id
     Output:
		        null
   ------------------------------------------------------------------------------*/
   PROCEDURE xxdm_sop_outbound_data
                (p_level_id IN VARCHAR2
                 ,p_member_id IN VARCHAR2
                 ,p_user_id IN NUMBER
                 ,p_fcst_type IN VARCHAR2)    
    IS
        v_level_id                      NUMBER;
        v_member_id                     NUMBER;
        v_count                         NUMBER;
        v_notice_id                     VARCHAR2 (100);         
        v_plan_method                   VARCHAR2 (10); 
        v_supply_plan_code              VARCHAR2 (10); 
        v_substruct                     NUMBER :=0; 
        v_index                         NUMBER :=0; 
        v_plan_date_old                 NUMBER :=0; 
        v_plan_date_new                 NUMBER :=0; 
        v_ro_org                        VARCHAR2 (10);  
        v_ro                            VARCHAR2 (10);  
        v_org                           VARCHAR2 (10);  
        v_input_name                    VARCHAR2 (50);  
        exp_supply_code_isnull          EXCEPTION;    
        exp_plan_method_isnull          EXCEPTION;  
        --  IRP AND MP AND EOL-B > 0  
        CURSOR cur_supply_one IS 
                SELECT t_ep_ro_org.ro_org,
                       t_ep_ro_org.ro_org_desc,
                       t_ep_item.item,
                       t_ep_i_att_1.i_att_1_desc as dm_item_desc,
                       t_ep_ebs_supplier.ebs_supplier,
                       t_ep_ebs_supplier.ebs_supplier_desc,
                       t_ep_site.site,
                       t_ep_site.dm_site_desc,
                       supply_plan_data.sales_date,
                       t_ep_i_att_6.i_att_6_desc AS plc_status,
                       nvl(supply_plan_data.ro_vendor_accept, supply_plan_data.ro_net_demand) as net_demand_qty
                  FROM demantra.supply_plan_data supply_plan_data,
                       demantra.mdp_matrix mdp_matrix,
                       demantra.t_ep_ro_org t_ep_ro_org,
                       demantra.t_ep_item t_ep_item,
                       demantra.t_ep_site t_ep_site,
                       demantra.t_ep_ebs_supplier t_ep_ebs_supplier,
                       demantra.t_ep_i_att_6 t_ep_i_att_6,
                       demantra.t_ep_i_att_1 t_ep_i_att_1 
                WHERE supply_plan_data.supply_plan_id = p_member_id
                   AND supply_plan_data.item_id = mdp_matrix.item_id
                   AND supply_plan_data.location_id = mdp_matrix.location_id
                   AND mdp_matrix.t_ep_ro_org_ep_id = t_ep_ro_org.t_ep_ro_org_ep_id
                   AND mdp_matrix.t_ep_item_ep_id = t_ep_item.t_ep_item_ep_id
                   AND mdp_matrix.t_ep_site_ep_id = t_ep_site.t_ep_site_ep_id
                   AND mdp_matrix.t_ep_ebs_supplier_ep_id = t_ep_ebs_supplier.t_ep_ebs_supplier_ep_id
                   AND mdp_matrix.t_ep_i_att_6_ep_id = t_ep_i_att_6.t_ep_i_att_6_ep_id
                   AND t_ep_item.item = t_ep_i_att_1.i_att_1
                   AND (t_ep_i_att_6.i_att_6_desc IN ('IRP','MP') 
                          OR (t_ep_i_att_6.i_att_6_desc ='EOL-B' 
                              AND nvl(supply_plan_data.ro_vendor_accept, supply_plan_data.ro_net_demand)>0 ));  
        
        --  EOL-V AND EOL-B > 0    
        CURSOR cur_supply_two IS 
                SELECT 'BNQ:TPC' ro_org,
                       'BNQ:TPC' ro_org_desc,
                       t_ep_item.item,
                       t_ep_i_att_1.i_att_1_desc as dm_item_desc,
                       t_ep_ebs_supplier.ebs_supplier,
                       t_ep_ebs_supplier.ebs_supplier_desc,
                       t_ep_site.site,
                       t_ep_site.dm_site_desc,
                       supply_plan_data.sales_date,
                       t_ep_i_att_6.i_att_6_desc AS plc_status,
                       nvl(supply_plan_data.tpc_vendor_accept, supply_plan_data.tpc_net_demand) as net_demand_qty
                  FROM demantra.supply_plan_data supply_plan_data,
                       demantra.mdp_matrix mdp_matrix,
                       demantra.t_ep_ro_org t_ep_ro_org,
                       demantra.t_ep_item t_ep_item,
                       demantra.t_ep_site t_ep_site,
                       demantra.t_ep_ebs_supplier t_ep_ebs_supplier,
                       demantra.t_ep_i_att_6 t_ep_i_att_6,
                       demantra.t_ep_i_att_1 t_ep_i_att_1 
                 WHERE supply_plan_data.supply_plan_id = p_member_id
                   AND supply_plan_data.item_id = mdp_matrix.item_id
                   AND supply_plan_data.location_id = mdp_matrix.location_id
                   AND mdp_matrix.t_ep_ro_org_ep_id = t_ep_ro_org.t_ep_ro_org_ep_id
                   AND mdp_matrix.t_ep_item_ep_id = t_ep_item.t_ep_item_ep_id
                   AND mdp_matrix.t_ep_site_ep_id = t_ep_site.t_ep_site_ep_id
                   AND mdp_matrix.t_ep_ebs_supplier_ep_id = t_ep_ebs_supplier.t_ep_ebs_supplier_ep_id
                   AND mdp_matrix.t_ep_i_att_6_ep_id = t_ep_i_att_6.t_ep_i_att_6_ep_id
                   AND t_ep_item.item = t_ep_i_att_1.i_att_1
                   AND (t_ep_i_att_6.i_att_6_desc = 'EOL-V'
                          OR (t_ep_i_att_6.i_att_6_desc ='EOL-B' 
                              AND nvl(supply_plan_data.tpc_vendor_accept, supply_plan_data.tpc_net_demand)>0));  
                   
        --EOL-B IS NULL OR =0                               
        CURSOR cur_supply_three IS 
                SELECT t_ep_ro_org.ro_org,
                       t_ep_ro_org.ro_org_desc,
                       t_ep_item.item,
                       t_ep_i_att_1.i_att_1_desc as dm_item_desc,
                       t_ep_ebs_supplier.ebs_supplier,
                       t_ep_ebs_supplier.ebs_supplier_desc,
                       t_ep_site.site,
                       t_ep_site.dm_site_desc,
                       supply_plan_data.sales_date,
                       t_ep_i_att_6.i_att_6_desc AS plc_status,
                       0 as net_demand_qty
                  FROM demantra.supply_plan_data supply_plan_data,
                       demantra.mdp_matrix mdp_matrix,
                       demantra.t_ep_ro_org t_ep_ro_org,
                       demantra.t_ep_item t_ep_item,
                       demantra.t_ep_site t_ep_site,
                       demantra.t_ep_ebs_supplier t_ep_ebs_supplier,
                       demantra.t_ep_i_att_6 t_ep_i_att_6,
                       demantra.t_ep_i_att_1 t_ep_i_att_1 
                WHERE supply_plan_data.supply_plan_id = p_member_id
                   AND supply_plan_data.item_id = mdp_matrix.item_id
                   AND supply_plan_data.location_id = mdp_matrix.location_id
                   AND mdp_matrix.t_ep_ro_org_ep_id = t_ep_ro_org.t_ep_ro_org_ep_id
                   AND mdp_matrix.t_ep_item_ep_id = t_ep_item.t_ep_item_ep_id
                   AND mdp_matrix.t_ep_site_ep_id = t_ep_site.t_ep_site_ep_id
                   AND mdp_matrix.t_ep_ebs_supplier_ep_id = t_ep_ebs_supplier.t_ep_ebs_supplier_ep_id
                   AND mdp_matrix.t_ep_i_att_6_ep_id = t_ep_i_att_6.t_ep_i_att_6_ep_id
                   AND t_ep_item.item = t_ep_i_att_1.i_att_1
                   AND t_ep_i_att_6.i_att_6_desc = 'EOL-B'
                   AND (nvl(supply_plan_data.ro_vendor_accept, supply_plan_data.ro_net_demand) IS NULL OR nvl(supply_plan_data.ro_vendor_accept, supply_plan_data.ro_net_demand)=0)
                   AND (nvl(supply_plan_data.tpc_vendor_accept, supply_plan_data.tpc_net_demand) IS NULL OR nvl(supply_plan_data.tpc_vendor_accept, supply_plan_data.tpc_net_demand)=0);
                              
        CURSOR cur_plan IS 
                SELECT   supply_plan_id, TO_CHAR (plan_date, 'yyyymm') AS plan_date
                    FROM demantra.xxdm_sop_outbound
                   WHERE supply_plan_id = p_member_id
                GROUP BY supply_plan_id, TO_CHAR (plan_date, 'yyyymm')
                ORDER BY plan_date;
        rec_one         cur_supply_one%ROWTYPE;
        rec_two         cur_supply_two%ROWTYPE;
        rec_three       cur_supply_three%ROWTYPE;
        rec_plan        cur_plan%ROWTYPE;        
   BEGIN 
        
       dbms_output.put_line('aaa ');
       v_level_id:=TO_NUMBER(p_level_id);
       v_member_id:=TO_NUMBER(p_member_id);  
        
       -- v_level_id:=p_level_id; -- add by steven
       -- v_member_id:=p_member_id; -- add by steven
        
        --SUPPLY_PLAN_ID is member id        
        -- get SUPPLY_PLAN_CODE is v_notice_id
        --v_notice_id:='20090522-PRJ-BQP-IRP-001';
        v_notice_id := demantra.xxdm_util_pkg.xxdm_get_notice_id (v_level_id, v_member_id);
        dbms_output.put_line('v_notice_id=' || v_notice_id); --for test
        --SELECT * FROM DEMANTRA.SUPPLY_PLAN
        
        IF v_notice_id IS NULL THEN
            RAISE exp_supply_code_isnull; 
        END IF;

        --get plan method
        v_plan_method := demantra.xxdm_util_pkg.xxdm_get_plan_method(v_member_id);    
        IF v_plan_method IS NULL THEN
            --RAISE exp_plan_method_isnull; 
            NULL;
        END IF;
        dbms_output.put_line('v_plan_method=' || v_plan_method); --for test
        
        v_supply_plan_code := demantra.xxdm_util_pkg.xxdm_get_supply_plan_code(v_member_id);           
        
        
        --delete data before inserting data
        IF p_fcst_type='1' THEN
            DELETE FROM demantra.xxdm_sop_outbound
                  WHERE supply_plan_id = v_member_id;
        ELSIF p_fcst_type='2' THEN
            DELETE FROM demantra.xxdm_sop_outbound
                  WHERE supply_plan_id = v_member_id AND po_number IS NULL;
        ELSE
            NULL;
        END IF;
        
        --  IRP AND MP AND EOL-B > 0 
        OPEN cur_supply_one;
        LOOP
            FETCH cur_supply_one INTO rec_one;
            EXIT WHEN cur_supply_one%NOTFOUND;
            
            insert_sop_outbound_data(v_member_id,v_supply_plan_code,v_notice_id,p_fcst_type,v_plan_method
                                     ,rec_one.plc_status,rec_one.ro_org,rec_one.ro_org_desc,rec_one.item,rec_one.dm_item_desc
                                     ,rec_one.ebs_supplier,rec_one.ebs_supplier_desc,rec_one.site,rec_one.dm_site_desc,rec_one.sales_date
                                     ,round(rec_one.net_demand_qty,0),0,'','',p_user_id
                                     ,sysdate,0);
                
        END LOOP;
        CLOSE cur_supply_one;
        
        --  EOL-V AND EOL-B > 0    
        OPEN cur_supply_two;
        LOOP
            FETCH cur_supply_two INTO rec_two;
            EXIT WHEN cur_supply_two%NOTFOUND;
            
            insert_sop_outbound_data(v_member_id,v_supply_plan_code,v_notice_id,p_fcst_type,v_plan_method
                                     ,rec_two.plc_status,rec_two.ro_org,rec_two.ro_org_desc,rec_two.item,rec_two.dm_item_desc
                                     ,rec_two.ebs_supplier,rec_two.ebs_supplier_desc,rec_two.site,rec_two.dm_site_desc,rec_two.sales_date
                                     ,round(rec_two.net_demand_qty,0),0,'','',p_user_id
                                     ,sysdate,0);
                
        END LOOP;
        CLOSE cur_supply_two;
        
        --EOL-B IS NULL OR =0   
        OPEN cur_supply_three;
        LOOP
            FETCH cur_supply_three INTO rec_three;
            EXIT WHEN cur_supply_three%NOTFOUND;
            
            insert_sop_outbound_data(v_member_id,v_supply_plan_code,v_notice_id,p_fcst_type,v_plan_method
                                     ,rec_three.plc_status,rec_three.ro_org,rec_three.ro_org_desc,rec_three.item,rec_three.dm_item_desc
                                     ,rec_three.ebs_supplier,rec_three.ebs_supplier_desc,rec_three.site,rec_three.dm_site_desc,rec_three.sales_date
                                     ,round(rec_three.net_demand_qty,0),0,'','',p_user_id
                                     ,sysdate,1);
                
        END LOOP;
        CLOSE cur_supply_three;
        
        --re caculate month_idx
        OPEN cur_plan;
        LOOP   
        FETCH cur_plan INTO rec_plan;
            EXIT WHEN cur_plan%NOTFOUND;
            
            IF v_index > 1 THEN
                v_plan_date_new := to_number(rec_plan.plan_date);
                v_substruct := v_plan_date_new - v_plan_date_old;
                v_plan_date_old := v_plan_date_new;
            ELSE
                v_plan_date_old := to_number(rec_plan.plan_date);
                v_substruct := 1;
            END IF;
            
            v_index := v_index + v_substruct;
            UPDATE demantra.xxdm_sop_outbound
               SET month_idx = v_index
             WHERE supply_plan_id = rec_plan.supply_plan_id
               AND TO_CHAR (plan_date, 'yyyymm') = rec_plan.plan_date;
        END LOOP;
        CLOSE cur_plan;        

        UPDATE demantra.xxdm_sop_outbound
           SET ro_org = 'BNQ:TPC',
               ro = 'TPC',
               org = 'TPC',
               flag=0
         WHERE month_idx > 12 AND flag = 1;        


        FOR rec_temp IN (SELECT mps.input_name
                            FROM apps.msc_plan_sched_v mps,
                            demantra.supply_plan sp
                            WHERE sp.supply_plan_id=p_member_id
                            AND sp.plan_id=mps.plan_id AND ROWNUM<=1) LOOP                             
            UPDATE demantra.xxdm_sop_outbound
                SET FACILITY = substr(rec_temp.input_name,10,3) 
            WHERE supply_plan_id = p_member_id AND FACILITY IS NULL;
        END LOOP;
                
        
        FOR rec_temp IN (SELECT mps.input_name
                            FROM apps.msc_plan_sched_v mps,
                            demantra.supply_plan sp
                            WHERE sp.supply_plan_id=p_member_id
                            AND sp.plan_id=mps.plan_id) LOOP 
            xxdm_util_pkg.insert_step_log_common(rec_temp.input_name,'O','','','','','005');
        END LOOP;

        dbms_output.put_line('Successfully.');
        COMMIT;        
   EXCEPTION
        WHEN exp_supply_code_isnull THEN
            ROLLBACK;
            raise_application_error(-20101, 'supply plan code is null.');  
        WHEN exp_plan_method_isnull THEN
            ROLLBACK;
            raise_application_error(-20102, 'plan method is null.');            
        WHEN OTHERS THEN
            ROLLBACK;
            RAISE;
   END;
   
   /*------------------------------------------------------------------------------
     Created by 
     Function:
                S&OP Outbound insert single data.
     Logicality:
                this procedure use to S&OP Outbound
                
     Input:     
				
				
     Output:
		        null
   ------------------------------------------------------------------------------*/
   PROCEDURE insert_sop_outbound_data
                (                      
                p_supply_plan_id               IN  NUMBER,
                p_supply_plan_code             IN  VARCHAR2,
                p_supply_plan_desc             IN  VARCHAR2,
                p_fcst_type                    IN  VARCHAR2,
                p_plan_method                  IN  VARCHAR2,
                p_plc_status                   IN  VARCHAR2,
                p_ro_org                       IN  VARCHAR2,
                p_ro_org_desc                  IN  VARCHAR2,
                p_sp_item                      IN  VARCHAR2,
                p_sp_item_desc                 IN  VARCHAR2,
                p_supplier                     IN  VARCHAR2,
                p_supplier_desc                IN  VARCHAR2,
                p_supplier_site                IN  VARCHAR2,
                p_supplier_site_desc           IN  VARCHAR2,
                p_plan_date                    IN  DATE,
                p_net_demand_qty               IN  NUMBER,
                p_month_idx                    IN  NUMBER,
                p_po_number                    IN  VARCHAR2,
                p_po_status                    IN  VARCHAR2,
                p_created_by                   IN  NUMBER,
                p_creation_date                IN  DATE,
                p_flag                         IN  NUMBER 
                 )    
    IS
        v_count                         NUMBER;
        v_ro                            VARCHAR2 (10);  
        v_org                           VARCHAR2 (10);  
        v_category                      VARCHAR2 (240);  
        v_outbound_lbfs_flag            NUMBER;  
        v_lbfs_status                   VARCHAR2 (1);  
    BEGIN 
        SELECT 1
          INTO v_count
          FROM demantra.xxdm_sop_outbound
         WHERE supply_plan_id = p_supply_plan_id
           AND fcst_type = p_fcst_type
           AND ro_org = p_ro_org
           AND sp_item = p_sp_item
           AND supplier = p_supplier
           AND supplier_site = p_supplier_site
           AND plan_date = TO_DATE(TO_CHAR(p_plan_date,'YYYY-MM-DD'),'YYYY-MM-DD');
           
    EXCEPTION
        WHEN NO_DATA_FOUND  THEN
            --insert data                    
            v_ro := demantra.xxdm_util_pkg.xxdm_get_ro(p_ro_org);
            v_org := demantra.xxdm_util_pkg.xxdm_get_org(p_ro_org);
            --v_ro := demantra.xxdm_util_pkg.xxdm_get_substr_before_split(p_ro_org,':');
            --v_org := demantra.xxdm_util_pkg.xxdm_get_substr_after_split(p_ro_org,':');
            --dbms_output.put_line('p_sp_item='||p_sp_item);     -- for test   
            v_category := demantra.xxdm_util_pkg.xxdm_get_item_category(p_sp_item);           
            --dbms_output.put_line('v_category='||v_category);   -- for test
            v_outbound_lbfs_flag :=demantra.xxdm_util_pkg.get_outbound_lbfs_flag(p_sp_item,v_ro,p_supplier_site,p_supplier,p_supply_plan_id,TO_CHAR('YYYYMMDD'));
            dbms_output.put_line('v_outbound_lbfs_flag ='||v_outbound_lbfs_flag);
            IF v_outbound_lbfs_flag = 1 THEN
                v_lbfs_status :='Y';
            ELSE
                v_lbfs_status :='X';
            END IF;
            
            INSERT INTO demantra.xxdm_sop_outbound
                        (s_id
                        ,supply_plan_id
                        ,supply_plan_code
                        ,supply_plan_desc
                        ,fcst_type
                        ,plan_method
                        ,plc_status
                        ,ro
                        ,org
                        ,ro_org
                        ,ro_org_desc
                        ,sp_item
                        ,sp_item_desc
                        ,category
                        ,supplier
                        ,supplier_desc
                        ,supplier_site
                        ,supplier_site_desc
                        ,plan_date
                        ,net_demand_qty
                        ,month_idx
                        ,po_number
                        ,po_status
                        ,created_by
                        ,creation_date
                        ,flag
                        ,lbfs_status
                        )
                        VALUES
                        (demantra.xxdm_sop_outbound_s.NEXTVAL                      
                        ,p_supply_plan_id
                        ,p_supply_plan_code
                        ,p_supply_plan_desc
                        ,p_fcst_type
                        ,p_plan_method
                        ,p_plc_status
                        ,v_ro
                        ,v_org
                        ,p_ro_org
                        ,p_ro_org_desc
                        ,p_sp_item                        
                        ,p_sp_item_desc
                        ,v_category
                        ,p_supplier
                        ,p_supplier_desc
                        ,p_supplier_site
                        ,p_supplier_site_desc
                        ,p_plan_date
                        ,p_net_demand_qty
                        ,p_month_idx
                        ,p_po_number
                        ,p_po_status
                        ,p_created_by
                        ,p_creation_date  
                        ,p_flag  
                        ,v_lbfs_status         
                        );      
    END;
    

   
   /*------------------------------------------------------------------------------
     Created by 
     Function:
                S&OP Outbound not confirmed.
     Logicality:
                this procedure use to S&OP Outbound
                
     Input:     p_level_id		-- demantra data model items level id
				p_member_id		-- demantra data model items member id
				p_user_id		-- demantra user id
     Output:
		        null
   ------------------------------------------------------------------------------*/
   PROCEDURE xxdm_sop_outbound_notfirmed 
                (p_level_id IN VARCHAR2
                 ,p_member_id IN VARCHAR2
                 ,p_user_id IN NUMBER)
   IS
   BEGIN 
         insert into demantra.xxdm_log_id values(p_level_id,p_member_id,p_user_id);
         commit;
         xxdm_sop_outbound_data(p_level_id,p_member_id,p_user_id,1);
   EXCEPTION
       WHEN OTHERS THEN
            RAISE;
   END;
   
   /*------------------------------------------------------------------------------
     Created by 
     Function:
                S&OP Outbound confirmed.
     Logicality:
                this procedure use to S&OP Outbound
                
     Input:     p_level_id		-- demantra data model items level id
				p_member_id		-- demantra data model items member id
				p_user_id		-- demantra user id
     Output:
		        null
   ------------------------------------------------------------------------------*/
   PROCEDURE xxdm_sop_outbound_firmed 
                (p_level_id   IN VARCHAR2
                 ,p_member_id IN VARCHAR2
                 ,p_user_id   IN NUMBER)
   IS 
   BEGIN 
        xxdm_sop_outbound_data(p_level_id,p_member_id,p_user_id,2);
   EXCEPTION
        WHEN OTHERS THEN
            RAISE;
   END;
   
   /*------------------------------------------------------------------------------
     Created by HI4/Robbie.Zhu on 2009-5-14
     Function:
                update outbound lbfs status
     Logicality:
                
                
     Input:     p_s_id		--   seqence id
     Output:
		        null
   ------------------------------------------------------------------------------*/
   PROCEDURE update_sop_outbound_status
                (p_s_id IN NUMBER,
                 o_result OUT SqlReturnTbl)
   IS
   BEGIN 
         UPDATE demantra.xxdm_sop_outbound
           SET lbfs_status = 'Y'
          WHERE s_id = p_s_id;
         o_result(1) := 'update_sop_outbound_status successfully.';   
   EXCEPTION
       WHEN OTHERS THEN
         RAISE;
   END;
   
   /*------------------------------------------------------------------------------
     Created by 
     Function:
                update lbfs flag
     Logicality:
                
                
     Input:     
     Output:
		        null
   ------------------------------------------------------------------------------*/
   PROCEDURE update_supply_lbfs_flag
                (p_item_id     IN VARCHAR2
                 ,p_ro         IN VARCHAR2
                 ,p_site       IN VARCHAR2  
                 ,p_supplier   IN VARCHAR2
                 ,p_supply_plan_id   IN NUMBER
                 ,p_sales_date       IN VARCHAR2
                 ,o_result OUT SqlReturnTbl)
   IS
   BEGIN 
         UPDATE demantra.supply_plan_data
           SET  t_ep_outbound_lbfs_flag = 1
         WHERE item_id IN (SELECT item_id
                             FROM demantra.t_ep_item i, demantra.items items
                            WHERE i.t_ep_item_ep_id = items.t_ep_item_ep_id
                              AND i.item = p_item_id)
           AND location_id IN
               (SELECT loc.location_id
                  FROM demantra.t_ep_organization o,
                      demantra.t_ep_site  s,
                      demantra.t_ep_ebs_supplier ss,
                      demantra.location  loc
                 WHERE loc.t_ep_organization_ep_id = o.t_ep_organization_ep_id
                   AND loc.t_ep_site_ep_id = s.t_ep_site_ep_id
                   AND loc.t_ep_ebs_supplier_ep_id = ss.t_ep_ebs_supplier_ep_id
                   AND o.organization = p_ro
                   AND s.site = p_site
                   AND ss.ebs_supplier = p_supplier)
          AND supply_plan_id = p_supply_plan_id
          AND sales_date = TO_DATE (p_sales_date, 'YYYYMMDD');

 

         o_result(1) := 'update_supply_lbfs_flag successfully. ';   
   EXCEPTION
       WHEN OTHERS THEN
         RAISE;
   END;
   
   /*------------------------------------------------------------------------------
     Created by 
     Function:
                update po flag
     Logicality:
                
                
     Input:     
     Output:
		        null
   ------------------------------------------------------------------------------*/
   PROCEDURE update_supply_po_flag
                (p_item_id           IN VARCHAR2
                 ,p_ro               IN VARCHAR2
                 ,p_site             IN VARCHAR2  
                 ,p_supplier         IN VARCHAR2
                 ,p_supply_plan_id   IN NUMBER
                 ,p_sales_date       IN VARCHAR2
                 ,p_po_flag          IN NUMBER)
   IS
   BEGIN 
         UPDATE demantra.supply_plan_data
           SET t_ep_outbound_po_flag = p_po_flag
         WHERE item_id IN (SELECT item_id
                             FROM demantra.t_ep_item i, demantra.items items
                            WHERE i.t_ep_item_ep_id = items.t_ep_item_ep_id
                              AND i.item = p_item_id)
           AND location_id IN
               (SELECT loc.location_id
                  FROM demantra.t_ep_organization o,
                      demantra.t_ep_site s,
                      demantra.t_ep_ebs_supplier ss,
                      demantra.location loc
                 WHERE loc.t_ep_organization_ep_id = o.t_ep_organization_ep_id
                   AND loc.t_ep_site_ep_id = s.t_ep_site_ep_id
                   AND loc.t_ep_ebs_supplier_ep_id = ss.t_ep_ebs_supplier_ep_id
                   AND o.organization = p_ro
                   AND s.site = p_site
                   AND ss.ebs_supplier = p_supplier)
           AND supply_plan_id = p_supply_plan_id
           AND sales_date = TO_DATE (p_sales_date, 'YYYYMMDD');


   EXCEPTION
       WHEN OTHERS THEN
         RAISE;
   END;
   
   /*------------------------------------------------------------------------------
     Created by 
     Function:
                update outbound po number
     Logicality:
                
                
     Input:     p_s_id		--   seqence id
     Output:
		        null
   ------------------------------------------------------------------------------*/
   PROCEDURE update_sop_outbound_po
                (p_s_id         IN NUMBER,
                 p_pono         IN VARCHAR2,
                 p_log_code     IN VARCHAR2)
   IS   
   v_supply_plan_id                   NUMBER;
   BEGIN 
        /*SELECT a.supply_plan_id
          INTO v_supply_plan_id
          FROM demantra.xxdm_sop_outbound a
         WHERE a.ROWID = p_row_id;    */    
        
        UPDATE demantra.xxdm_sop_outbound
           SET po_number = p_pono,po_status=NULL
         WHERE s_id = p_s_id;

        /*FOR rec_temp IN (SELECT mps.input_name
                            FROM apps.msc_plan_sched_v mps,
                            demantra.supply_plan sp
                            WHERE sp.supply_plan_id=v_supply_plan_id
                            AND sp.plan_id=mps.plan_id) LOOP 
            xxdm_util_pkg.insert_step_log_common2(rec_temp.input_name,'O','','','','',p_log_code);
        END LOOP; */
         
   EXCEPTION
       WHEN OTHERS THEN
         RAISE;
   END;
   
   /*------------------------------------------------------------------------------
     Created by 
     Function:
                update outbound po status
     Logicality:
                
                
     Input:     p_s_id		--   seqence id
     Output:
		        null
   ------------------------------------------------------------------------------*/
   PROCEDURE update_outbound_po_status
                (p_action       IN VARCHAR2,
                 p_s_id         IN NUMBER,
                 p_po_status    IN VARCHAR2,
                 p_log_code     IN VARCHAR2)
   IS   
   v_supply_plan_id                   NUMBER;
   v_action                           VARCHAR2 (50);  
   v_sp_item                          VARCHAR2 (240); 
   v_ro                               VARCHAR2 (10); 
   v_supplier                         VARCHAR2 (240);
   v_supplier_site                    VARCHAR2 (240);  
   v_plan_date                        DATE;
   BEGIN 
   
        v_action := UPPER(p_action);
        SELECT a.supply_plan_id,a.sp_item,a.ro,a.supplier,a.supplier_site,a.plan_date
          INTO v_supply_plan_id,v_sp_item,v_ro,v_supplier,v_supplier_site,v_plan_date
          FROM demantra.xxdm_sop_outbound a
         WHERE a.s_id = p_s_id;   
        
        CASE v_action
            WHEN 'APPORVE' THEN
                UPDATE demantra.xxdm_sop_outbound
                   SET po_status = p_po_status
                 WHERE s_id = p_s_id;              
                update_supply_po_flag(v_sp_item,v_ro,v_supplier_site,v_supplier,v_supply_plan_id,TO_CHAR(v_plan_date,'YYYYMMDD'),1);
                FOR rec_temp IN (SELECT mps.input_name
                            FROM apps.msc_plan_sched_v mps,
                            demantra.supply_plan sp
                            WHERE sp.supply_plan_id=v_supply_plan_id
                            AND sp.plan_id=mps.plan_id) LOOP 
                    xxdm_util_pkg.insert_step_log_common2(rec_temp.input_name,'O','','','','',p_log_code);
                END LOOP; 
            WHEN 'CANCEL' THEN                 
                UPDATE demantra.xxdm_sop_outbound
                   SET po_number = '',po_status = p_po_status
                 WHERE s_id = p_s_id;    
                update_supply_po_flag(v_sp_item,v_ro,v_supplier_site,v_supplier,v_supply_plan_id,TO_CHAR(v_plan_date,'YYYYMMDD'),0);   
            ELSE DBMS_OUTPUT.PUT_LINE('No such action');
        END CASE;
         
   EXCEPTION
       WHEN OTHERS THEN
         RAISE;
   END;   
    
END;
/




發佈了24 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章