-- =====================================================================
-- 付款单付款账户改为手输：erp_finance_payment.account_id -> account_name
-- =====================================================================
-- 背景：
--   1. 公司没有财务模块，付款账户不再从 erp_account 主数据选择，改为普通手输文本
--   2. 前端已改为 Input 手输，提交字段为 accountName（String）
--   3. 后端已改为存储 accountName（对应列 account_name），不再使用 account_id
-- 方案：
--   1. 若表缺少 account_name 列则补充（幂等，已存在则跳过）
--   2. 将已有 account_id 关联的账户名称回填到 account_name（仅回填空值，不覆盖手输内容）
--   3. 删除旧的 account_id 列（幂等，已删除则跳过）
-- 适用数据库：MySQL 8.x
-- 注意：SQL 脚本中不包含 tenant_id（项目未使用多租户）
-- =====================================================================

-- 1. 确保 account_name 列存在（已存在则跳过，兼容部分迁移过的库）
SET @col_exists = (SELECT COUNT(*) FROM information_schema.columns
                   WHERE table_schema = DATABASE() AND table_name = 'erp_finance_payment' AND column_name = 'account_name');
SET @sql = IF(@col_exists = 0,
              'ALTER TABLE erp_finance_payment ADD COLUMN account_name varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT ''付款账户'' AFTER account_id',
              'SELECT 1');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

-- 2. 迁移已有数据：仅当 account_name 为空时，用 account_id 关联的账户名称回填（不覆盖已手输的值）
UPDATE erp_finance_payment p
LEFT JOIN erp_account a ON p.account_id = a.id
SET p.account_name = a.name
WHERE (p.account_name IS NULL OR p.account_name = '')
  AND p.deleted = 0;

-- 3. 删除旧的 account_id 列（已删除则跳过）
SET @col_exists = (SELECT COUNT(*) FROM information_schema.columns
                   WHERE table_schema = DATABASE() AND table_name = 'erp_finance_payment' AND column_name = 'account_id');
SET @sql = IF(@col_exists = 1,
              'ALTER TABLE erp_finance_payment DROP COLUMN account_id',
              'SELECT 1');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
