import './sign_todo_model.dart'; import '../services/generic_api_service.dart'; class SignTodoApiService { final GenericApiService _apiService = GenericApiService(); /// 1. 取得待簽核清單 /// 對應後端 SP: [bpm_sign_todo] Future> fetchSignTodos() async { // 根據 bpm_sign_todo.txt,此 SP 僅需傳入 @token // fetchProcedure 會自動從 AuthManager 抓取 token 並加入 body return await _apiService.fetchProcedure( procedureEndpoint: "bpm_sign_todo", params: {}, // 除了 token 之外無其他參數 fromJson: (json) => SignTodoItem.fromJson(json), ); } /// 2. 執行簽核動作 (同意/駁回) /// 對應後端 SP: [bpmm02_sign_active] Future executeSign({ required String type, // @sign_type: A:同意, R:駁回 required String uuid, // @uuid: functionTag 或 flow_id required String billNo, // @source_pk_value: 單號 required String note, // @sign_note: 簽核意見 String nextSigner = '', // @next_signer: 指定下一關簽核人 (選填) }) async { // 準備傳送給 SP 的參數 Map (不含 token,fetchProcedure 會補齊) final Map params = { "sign_type": type, "uuid": uuid, "source_pk_value": billNo, "sign_note": note, "next_signer": nextSigner.isEmpty ? "*" : nextSigner, // 根據 SP 註解,空值傳 * }; try { // 呼叫 bpmm02_sign_active // 註:SP 若執行成功通常回傳 code: 0,data 可能為空或執行訊息 final result = await _apiService.fetchProcedure( procedureEndpoint: "bpmm02_sign_active", params: params, fromJson: (json) => json, // 簽核動作僅需確認 code,回傳值暫不處理 ); // fetchProcedure 內部若 code != 0 會回傳空清單, // 這裡簡單判定只要沒拋出 exception 且 code 為 0 即視為成功 return true; } catch (e) { print("SignTodoApiService.executeSign 異常: $e"); return false; } } }