Files
thinkyu/教育訓練系統/Web/DOC/扣繳明細及寄發通知_實現指南.md
sryang 577060bc78 chore: 首次簽入 Thinkyu ASP.NET 專案
- 加入 Visual Studio / ASP.NET .gitignore
- 排除建置輸出、IDE 設定、NuGet packages、大型 MSI 安裝檔
2026-09-10 09:42:37 +08:00

4.6 KiB
Raw Permalink Blame History

扣繳明細及寄發通知 - 實現指南

概述

此文檔說明如何完成 "扣繳明細及寄發通知" 功能的後端實現。前端 UI 與基本服務框架已完成,需要實現核心的業務邏輯。

已實現的部分

1. 前端 (ASPX + Vue.js)

  • Tab 1 UI 布局完整,包括:

    • 查詢條件輸入欄位
    • 查詢結果表格(支持展開/收合明細)
    • 郵件設定區塊
    • 郵件預覽與發送功能
  • JavaScript 邏輯框架:

    • loadDetailTableDropdowns() - 加載下拉清單
    • searchDetailTable() - 查詢資料
    • exportDetailTable() - 匯出 Excel
    • previewEmail() - 預覽郵件
    • sendEmail() - 發送郵件
    • toggleSelectAll() - 全選/反選

2. 後端服務基框架 (Services/領據處理.asmx.cs)

已新增三個服務方法,框架完整但需實現 SQL 邏輯:

  • SearchDetailTable() - 扣繳明細查詢與匯出
  • SendEmail() - 郵件發送與預覽
  • GetDropdownLists() - 已存在,返回下拉清單

需要實現的部分

1. SearchDetailTable 方法 (Services/領據處理.asmx.cs)

位置: 約 900 行

任務:

  • 根據查詢條件查詢扣繳明細資料
  • 支持 DATA(回傳資料)和 EXPORT(匯出 Excel)兩種模式

返回資料結構DATA 模式):

List<dynamic>  DataTable
{
    編號 ( ID/no) - 用於郵件發送時識別收件者
    領款人姓名
    身分證字號
    戶籍地址
    扣繳類別
    合計金額
    應扣繳稅額
    服務費
    已發送 (boolean) - 判斷是否已發送過郵件
    明細 - List<dynamic>  nested DataTable
    {
        計畫代號
        活動日期
        活動名稱
        扣繳類別
        金額 (講師/勞務費)
        應扣繳稅額
        服務費
    }
}

實現建議:

  1. 使用 DAC_領據 與相關 DAC 類別查詢
  2. 按日期與身分別條件篩選
  3. 使用講師非講師編號進行分組
  4. 對於 EXPORT 模式,可建立新的 Report 類別或使用現有的 Excel 工具

2. SendEmail 方法 (Services/領據處理.asmx.cs)

位置: 約 950 行

任務:

  • PREVIEW 模式:組織郵件預覽資料
  • SENDMAIL 模式:實際發送郵件

實現建議:

  1. PREVIEW 模式:返回將發送的郵件預覽,供確認
  2. SENDMAIL 模式:
    • 遍歷 講師非講師編號 列表
    • 根據編號查詢收件者郵箱地址
    • 使用 .NET 的 SmtpClient 或郵件服務發送
    • 記錄發送時間至資料庫(更新「已發送」欄位)
    • 返回成功/失敗統計

注意:

  • 需要配置 SMTP 服務設定(郵件伺服器、帳號密碼等)
  • 考慮錯誤處理:單個郵件失敗不應中斷整個流程
  • 建議記錄郵件發送日誌

3. 資料庫相關

需要確認:

  • 講師/非講師資料表中是否有郵箱欄位
  • 是否有「郵件發送記錄」表來追蹤已發送狀態
  • 領據資料表的結構與關聯

4. DAC 擴展(如需要)

可能需要新增方法:

  • DAC_領據.SelectDetailByDate() - 按日期範圍查詢明細
  • 郵件發送記錄相關的 DAC 操作
  • 收件者郵箱查詢方法

前端資料綁定說明

ASPX 欄位映射

查詢結果表格預期從後端接收以下欄位:

前端顯示 資料欄位 說明
要發送勾選 item.selected Vue.js 雙向綁定
已發送 item.已發送 boolean
領款人姓名 item.領款人姓名 string
身分證字號 item.身分證字號 string
戶籍地址 item.戶籍地址 string
扣繳類別 item.扣繳類別 string
合計金額 item.合計金額 decimal
應扣繳稅額 item.應扣繳稅額 decimal
服務費 item.服務費 decimal
明細展開 item.showDetail Vue.js 控制
明細列表 item.明細 List

編號欄位處理

JavaScript 代碼支持多種 ID 欄位名稱:

item.ID || item.編號 || item.no

選擇一個作為主要欄位即可

測試檢查清單

  • GetDropdownLists 能正確返回身分別與憑證類別
  • SearchDetailTable(DATA) 返回結構化的查詢結果
  • SearchDetailTable(EXPORT) 能成功匯出 Excel
  • SendEmail(PREVIEW) 能正確組織郵件預覽資料
  • SendEmail(SENDMAIL) 能正確發送郵件
  • 郵件發送後,已發送欄位應更新為是

相關檔案

  • 前端: Forms\領據系統\財稅作業與領據關帳.aspx
  • JavaScript: Scripts\財稅作業與領據關帳.js
  • 後端服務: Services\領據處理.asmx.cs
  • 資料存取: DAC\領據系統\DAC_領據2.cs
  • 文件: DOC\扣繳明細及寄發通知.md