DELIMITER //

CREATE OR REPLACE PROCEDURE zen_create_json_comps_others_gridview(
  IN p_uuid VARCHAR(100),
  IN p_FieldObject VARCHAR(100),
  IN p_tblName VARCHAR(100),
  IN p_FieldName VARCHAR(100),
  IN p_FieldCN NVARCHAR(100),
  IN p_fielddefault VARCHAR(100),
  IN p_FieldDS VARCHAR(2),
  IN p_FieldCheckNull VARCHAR(2),
  IN p_query_type VARCHAR(1),
  IN p_fieldfm VARCHAR(100),
  IN p_rowid INT
)
/*
  function   : amis Wizard 產生 json UI 的核心程式(每個 Component 有各自的 json UI 定義)
  description: 本段 sp 主要是設定 input-text 中 view 部分的 json 定義(實在是太長了)
               後來發現, 除了特殊的元件要獨立的 sp 特別處理外, 一般元件可以都統一在 input-text 的 sp 加上一些判斷即可
  Build Date : 2023/12/20
  Modified   : 2025/08/09 (轉換為 MariaDB 版本)
  
  Modify History
    Item Who        Date       Modify Docs
    ==== ========== ========== ================================================
    1    Michael    2023/12/20 根據 v1.0 重構
    2    Assistant  2025/08/09 轉換為 MariaDB 版本
*/
BEGIN
  DECLARE v_comps TEXT;
  DECLARE v_QueryFlds VARCHAR(1000);
  DECLARE v_QueryData VARCHAR(2000);
  DECLARE v_QueryType VARCHAR(600);
  DECLARE v_code_para VARCHAR(100);
  DECLARE v_gridType VARCHAR(100);
  DECLARE v_db VARCHAR(200);
  DECLARE v_ip VARCHAR(200);
  DECLARE v_field_df TEXT;
  DECLARE v_crlf VARCHAR(2);
  
  SET v_crlf = CONCAT(CHAR(13), CHAR(10));
  SET v_ip = '${ls:base_ip}';
  SET v_db = '${ls:base_db}';

  /*
    for GridView, grid couluns不顯示
    query_type 要傳入
  */
  SET v_QueryFlds = '';
  SET v_QueryData = '';
  SET v_QueryType = '';
  
  SET v_gridType = 'text';  -- static(配合 quitEdit 會有跨行的問題)
  IF LOCATE('date', p_FieldObject) > 0 THEN
    SET v_gridType = 'date';
  END IF;
  
  IF p_FieldObject = 'hidden' THEN
    SET v_gridType = 'hidden';
  END IF;
  
  -- if p_FieldDS = 'Y' and (p_FieldObject <> 'hidden') begin
  IF p_FieldDS = 'Y' THEN
    -- Query Header Define
    SET v_QueryFlds = CONCAT(v_QueryFlds, p_FieldName, '^');
    SET v_QueryData = CONCAT(v_QueryData, '${search_', p_FieldName, '}', '^');
    
    IF LOCATE('int', p_FieldObject) > 0 OR LOCATE('decimal', p_FieldObject) > 0 THEN
      SET v_QueryType = CONCAT(v_QueryType, 'I', '^');
    ELSE  -- 20230425 C 的預設改為 Clike, 因為大部分的情況應該都是用 like 查詢比較正常 (set v_QueryType = v_QueryType + 'C' + '^';)
      SET v_QueryType = CONCAT(v_QueryType, 'Clike', '^');
    END IF;
    
    /*
      amis v1.3.4 後的版本, 支援 Grid 數字靠右的機制
           v1.3.2 後的版本, 支援 Grid 欄位可以拖拉的機制
      但是都有一個前提, 否則會異常, 就是不能設 Grid Column 的 Width
      所以修改 Wizard, 不再設定 Grid Column 的 Width 2021-10-30
      
      新增 searchable 的多欄位查詢定義 2022-04-23
    */
    SET v_field_df = '';
    
    IF p_fielddefault = '0' OR p_fielddefault = '1' THEN
      SET v_field_df = CONCAT('                    "align": "right",', v_crlf);
    END IF;
          
    /*
      這裡同時應處理 select / options / picker(暫緩處理) 和 mapping 的 setup
      這一段專門在處理 Query Header UX, 認真寫的話會非常複雜, 目前先解決主要的 UX, 慢慢地改善
      2022-05-18 Michael
    */
    
    IF p_FieldObject = 'mapping' THEN
      -- select @view_blob=dbo.zen_get_mapping(@tblName,@FieldName);
      SET v_gridType = 'mapping';
      SET v_field_df = CONCAT(v_field_df, zen_get_mapping(p_tblName, p_FieldName), v_crlf);
      
      IF p_FieldCheckNull = 'Q' OR p_FieldCheckNull = 'A' THEN
        SET v_field_df = CONCAT(v_field_df,
          '                    "searchable": {', v_crlf,
          '                      "type": "select",', v_crlf,
          '                      "name": "search_', p_FieldName, '",', v_crlf,
          zen_get_keyvalue(p_tblName, p_FieldName), v_crlf,
          '                      "label": "', p_FieldCN, '"', v_crlf,
          '                    },', v_crlf
        );
      END IF;
    ELSEIF p_FieldObject = 'options' THEN
      -- option 是特殊的 select, 但還是 select
      SET v_gridType = 'select';
      SET v_field_df = CONCAT(v_field_df,
        '                    "disabled": true,', v_crlf,
        zen_get_keyvalue(p_tblName, p_FieldName), v_crlf
      );
      
      IF p_FieldCheckNull = 'Q' OR p_FieldCheckNull = 'A' THEN
        SET v_field_df = CONCAT(v_field_df,
          '                    "searchable": {', v_crlf,
          '                      "type": "select",', v_crlf,
          '                      "name": "search_', p_FieldName, '",', v_crlf,
          zen_get_keyvalue(p_tblName, p_FieldName), v_crlf,
          '                      "label": "', p_FieldCN, '"', v_crlf,
          '                    },', v_crlf
        );
      END IF;
    ELSEIF p_FieldObject = 'switch' THEN
      SET v_gridType = 'switch';
      SET v_field_df = CONCAT(
        '                    "trueValue": "Y",', v_crlf,
        '                    "falseValue": "N",', v_crlf
      );
    ELSEIF p_FieldObject = 'checkbox' THEN
      SET v_gridType = 'checkbox';
      SET v_field_df = CONCAT(
        '                    "trueValue": "Y",', v_crlf,
        '                    "falseValue": "N",', v_crlf
      );
    ELSEIF p_FieldObject = 'progress' THEN
      SET v_gridType = 'progress';
    -- Link 下載檔案(格式內容差異較大)
    ELSEIF p_FieldObject = 'link-file' THEN
      SET v_gridType = 'link';
      SET v_field_df = CONCAT(
        '        "href": "${', p_FieldName, '}",', v_crlf,
        '        "body": "檔案下載",', v_crlf
      );
    ELSEIF p_FieldObject = 'link' THEN
      SET v_gridType = 'link';
      SET v_field_df = CONCAT(
        '        "href": "${', p_FieldName, '}",', v_crlf,
        '        "body": "${', p_FieldName, '}",', v_crlf
      );
    -- 其他一般元件
    ELSEIF (p_query_type = 'C') AND (p_FieldCheckNull = 'Q' OR p_FieldCheckNull = 'A') THEN
      -- 非日期欄位
      IF LOCATE('date', p_FieldObject) <= 0 THEN
        SET v_field_df = CONCAT(v_field_df,
          '                    "searchable": {', v_crlf,
          '                      "type": "input-text",', v_crlf,
          '                      "name": "search_', p_FieldName, '",', v_crlf,
          '                      "label": "', p_FieldCN, '"', v_crlf,
          '                    },', v_crlf
        );
      ELSE
        SET v_field_df = CONCAT(v_field_df,
          '                    "searchable": {', v_crlf,
          '                      "type": "input-date-range",', v_crlf,
          '                      "format": "YYYY-MM-DD",', v_crlf,
          '                      "name": "search_', p_FieldName, '",', v_crlf,
          '                      "label": "', p_FieldCN, '"', v_crlf,
          '                    },', v_crlf
        );
      END IF;
    ELSEIF p_FieldObject = 'input-date' THEN
      SET v_field_df = CONCAT('                      "format": "YYYY-MM-DD",', v_crlf);
    ELSEIF (p_FieldObject = 'input-number') THEN
      -- 讀取設定
      IF IFNULL(p_fieldfm, '') = '' THEN
        SET p_fieldfm = 'd0';
      END IF;
      
      SET p_fieldfm = CONCAT('"${ls:sys@', p_fieldfm, '}"');
      
      SET v_field_df = CONCAT(
        '                    "align": "right",', v_crlf,
        '            		   "precision": ', p_fieldfm, ',', v_crlf
      );
    END IF;
    
    SET v_comps = CONCAT(
      '                  {', v_crlf,
      '                    "type": "', v_gridType, '",', v_crlf,
      '                    "name": "', p_FieldName, '",', v_crlf,
      v_field_df,
      '                    "label": "', p_FieldCN, '"', v_crlf,
      '                  }'
    );
  END IF;
  
  UPDATE zen_wizard_jsondata SET json_gridview = v_comps WHERE uuid = p_uuid AND rowid = p_rowid;
END //

DELIMITER ;