DELIMITER //

CREATE OR REPLACE PROCEDURE zen_create_json_reset_codeid(
  IN p_uuid VARCHAR(100),
  IN p_FunctionTag VARCHAR(100),
  IN p_code_id VARCHAR(100),
  IN p_query_type VARCHAR(100)
)
/*
  function   : 判斷傳入的 FunctionTag, 重新設定 FunctionTag_org/FunctionTag/code_id
  description: 此段程式是因為 Wizard 除了支援完整 crud 的程式外, 也一併支援 view only, insert only 等不完全程式, 所以才會有此段程式
  Build Date : 2023/12/20
  
  Modify History
    Item Who        Date       Modify Docs
    ==== ========== ========== ================================================
    1    Michael    2023/12/20 根據 v1.0 重構
*/
BEGIN
    DECLARE v_FunctionTag VARCHAR(100);
    DECLARE v_code_id VARCHAR(100);
    
    -- 通用寫法
    SET v_FunctionTag = p_FunctionTag;
    SET v_code_id = p_code_id;
    
    /*
      @FunctionTag = crmm02 產生查詢專用的 ViewForm
      @FunctionTag_org = crmm02_V
    */
    IF RIGHT(v_FunctionTag, 2) = '_V' THEN
        SET v_FunctionTag = SUBSTRING(v_FunctionTag, 1, LENGTH(v_FunctionTag)-2);
        
        -- 特別判斷一下 Template(先處理 MD, Single 暫時先不處理)
        IF v_code_id LIKE '%MasterDetail%' THEN
            SET v_code_id = 'MasterDetail-View';
        ELSEIF v_code_id LIKE '%Single%' THEN
            -- Single 也一併支援了吧(ok)
            SET v_code_id = 'singleEntry-View';
        END IF;
    END IF;
    
    /*
      最單純的 SingleGridView(通常是被開窗查詢用) 2022-09-24
    */
    IF RIGHT(v_FunctionTag, 3) = '_gv' THEN
        SET v_FunctionTag = SUBSTRING(v_FunctionTag, 1, LENGTH(v_FunctionTag)-3);
        
        -- 適用於所有的表單
        SET v_code_id = 'SingleGridView';
    END IF;
    
    -- MD 的 Detail Insert(開發中...)
    IF RIGHT(v_FunctionTag, 3) = '_DI' THEN
        SET v_FunctionTag = SUBSTRING(v_FunctionTag, 1, LENGTH(v_FunctionTag)-3);
        
        -- 特別判斷一下 Template(先處理 MD, Single 暫時先不處理)
        IF v_code_id LIKE '%MasterDetail%' THEN
            SET v_code_id = 'MasterDetail-Detail-Insert';
        END IF;
    END IF;
    
    IF RIGHT(v_FunctionTag, 2) = '_I' THEN
        SET v_FunctionTag = SUBSTRING(v_FunctionTag, 1, LENGTH(v_FunctionTag)-2);
        
        -- 特別判斷一下 Template(先處理 MD, Single 暫時先不處理)
        IF v_code_id LIKE '%Single%' THEN
            SET v_code_id = 'singleEntry-Insert';
        ELSEIF v_code_id LIKE '%MasterDetail%' THEN
            -- MasterDetail 也一併支援了吧, 但是只會產生 Master 的 Insert(ok)
            SET v_code_id = 'MasterDetail-Insert';
        END IF;
    END IF;

    -- 將傳入的 json 寫入暫存表方便處理
    INSERT INTO zen_wizard_tmp (uuid,zen_key,zen_value,create_date) VALUES (p_uuid, 'FunctionTag', v_FunctionTag, NOW());
    INSERT INTO zen_wizard_tmp (uuid,zen_key,zen_value,create_date) VALUES (p_uuid, 'code_id', v_code_id, NOW());
    
    -- 一些簡單的 update 也放此處
    /*
      新增 query_type=C 複雜的多欄位Query
                      E 簡單的單欄查詢 
    */
    UPDATE zen_function SET query_type='E' WHERE IFNULL(query_type,'')='';
    UPDATE zen_function SET op_width=100 WHERE op_width IS NULL;
    UPDATE zen_function SET is_bpm='N' WHERE is_bpm IS NULL;
    UPDATE zen_function SET is_extend='N' WHERE is_extend IS NULL;
    
    /*
      處理一下 zen_fields 的 null 值
      fieldchecknull,fieldro
    */
    UPDATE zen_fields SET fieldchecknull = 'N' WHERE IFNULL(fieldchecknull,'') = '';
    UPDATE zen_fields SET fieldro = 'N' WHERE IFNULL(fieldro,'') = '';
END //