# 領據資料作業 ## 前端程式碼: * 使用 Vue.js 實現動態資料綁定與操作。 * 不使用 Server control * script 部分分離出來放置到 Scripts 目錄 * 使用現代寫法,不要管 IE 相容性 * 比照 付款設定.ascx 以及 付款設定.js 的作法 ## 後端程式碼: * 使用 WebService 實現非同步資料交換。 * 提供 API 端點處理領據、勞務費、差旅費資料的新增、修改、刪除、作廢、列印等需求。 ## 主畫面檔:~/Forms/領據系統/領據資料作業.aspx ### 子畫面檔 * Tab、MultiView、View 以及 User Control 已經放好了: * 查詢: ~/Forms/領據系統/領據查詢.ascx * 領據登錄與修改:~/Forms/領據系統/領據處理.ascx * 列印: ~/Forms/領據系統/領據列印.ascx * 匯入與匯出: ~/Forms/領據系統/領據匯出匯入.ascx ### 寫碼規範 * 把 script 部分分開寫在 Scripts 目錄 * 使用現代寫法,不要管 IE 相容性 * 比照 付款設定.ascx 以及 付款設定.js 的作法 ## 資料存取類別 ### Education.DAC_領據 * 既有程式 * 分為兩個檔案 ~/DAC/領據系統/DAC_領據1.cs 和 ~/DAC/領據系統/DAC_領據2.cs * 若需要擴充,加在結尾 2.cs 裡 * DAC_領據:資料處理類別 * 分頁查詢資料:public 領據List SelectPage(bool noInputReturnAll, int startRowIndex, int maximumRows, DateTime? 活動日期_1, DateTime? 活動日期_2, string 身分別, string 講師_非講師編號, string 憑證類別, string 計畫代號, string 計畫名稱, string 活動類別, string 付款方式, string orderBy = "") * 查詢筆數: public int SelectCount(bool noInputReturnAll, DateTime? 活動日期_1, DateTime? 活動日期_2, string 身分別, string 講師_非講師編號, string 憑證類別, string 計畫代號, string 計畫名稱, string 活動類別, string 付款方式, string orderBy = "") * 新增: public 領據Item InsertOne(領據Item value) * 修改: public 領據Item UpdateOne(領據Item value) * 刪除: public int DeleteOne(string 編號, int DB_APPNO) * 領據List:資料集類別 * 領據Item:資料項目類別 ### Education.DAC_勞務費 * 既有程式 * 分為兩個檔案 ~/DAC/領據系統/DAC_勞務費1.cs 和 ~/DAC/領據系統/DAC_勞務費2.cs * 若需要擴充,加在結尾 2.cs 裡 * DAC_勞務費:資料處理類別 * 查詢:SelectOne(string 領據編號) * 新增:InsertOne(勞務費Item value) * 修改:UpdateOne(勞務費Item value) * 刪除:DeleteOne(string 領據編號, int DB_APPNO) ### Education.DAC_差旅費 * 既有程式 * 分為兩個檔案 ~/DAC/領據系統/DAC_差旅費1.cs 和 ~/DAC/領據系統/DAC_差旅費2.cs * 若需要擴充,加在結尾 2.cs 裡 * DAC_差旅費:資料處理類別 * 查詢:SelectOne(string 領據編號) * 新增:InsertOne(差旅費Item value) * 修改:UpdateOne(差旅費Item value) * 刪除:DeleteOne(string 領據編號, int DB_APPNO) ### 資料關聯 * 1 領據 (編號) <-----> 0-1 勞務費 (領據編號) * 1 領據 (編號) <-----> 0-1 差旅費 (領據編號) ## WebService 端點 ### 領據資料:Services/領據處理.asmx * EnableSession(True) * SelectPage(int pageIndex, int pageSize, DateTime? 活動日期_1, DateTime? 活動日期_2, string 身分別, string 講師_非講師編號, string 憑證類別, string 計畫代號, string 計畫名稱, string 活動類別, string 付款方式, string orderBy = "") - pageIndex 從 1 開始 - pageSize 預設 20 - 查詢 function 用 DAC_領據.SelectPage - 筆數 function 用 DAC_領據.SelectCount bool noInputReturnAll (固定傳 true) int startRowIndex (分頁起點) int maximumRows (分頁大小) - 空白條件視為不限制(noInputReturnAll = true) - 回傳:ServiceResponse(Success, Message, Data: 領據List, TotalCount: 總筆數 ) * Save(bool isNew, 領據Item mainItem, 勞務費Item laborItem, 差旅費Item travelItem):存檔 - isNew:是否為新增 - mainItem:新增或更正的領據資料 - laborItem:新增或更正的勞務費資料 - travelItem:新增或更正的差旅費資料 - 新增呼叫 DAC_領據.InsertOne(領據Item value) - 修改呼叫 DAC_領據.UpdateOne(領據Item value) - 回傳:ServiceResponse(Success, Message) * Delete(string no):刪除領據 - no:要刪除的領據編號 - 呼叫 DAC_領據.DeleteOne(string 編號, int DB_APPNO) - 一併刪除關聯的勞務費與差旅費資料 - 回傳:ServiceResponse(Success, Message) * Void(string no):作廢/取消作廢領據 - no:要作廢/取消作廢的領據編號 - 呼叫 DAC_領據.UpdateOne(領據Item value) 只修改作廢欄位 1=作廢 0=未作廢 - 回傳:ServiceResponse(Success, Message) * CalcTax(int laborFee, string category):計算稅額 * 輸入勞務費計算稅額 * 執行業務 (category 是 9A, 9B 開頭) laborFee >= 20000:laborFee * 10% 四捨五入至整數 * 薪資 (category 是 50) laborFee >= 88501:laborFee * 5% 四捨五入至整數 * Print(List iDList): 列印領據 * 一張一張的列印領據 * 領據列印有兩個單據:勞務費和差旅費 * 先實作取資料以及跑迴圈部分,列印的實作先留空,我後續補充 * 若有勞務費,且勞務費的編號是空的,要給勞務費自動編號,詳情我自己寫,你加個 TODO 就好 * 若有差旅費,且差旅費的編號是空的,要給差旅費自動編號,詳情我自己寫,你加個 TODO 就好 * 如同火車票價匯出一樣返回一個 Excel 檔 ### 火車票價:Services/火車票價.asmx * EnableSession(True) * 車站自動完成搜尋:SelectStation(string key) * 查詢呼叫 DAC_火車票價.查詢車站(key) * 回傳:ServiceResponse(Success, Message, Data: 查詢結果) * 計算票價:SelectFare(起點, 訖點) * 查詢呼叫 DAC_火車票價.查詢票價(起點, 訖點) * 回傳:ServiceResponse(Success, Message, Data: 票價) ## 畫面排列: ### 查詢: * 上方:搜尋列 - 查詢條件 | 編號 | 顯示名稱 | 查詢參數 | 輸入元件 | 下拉資料來源 | | ---- | ------------ | ---------- | -------- | ----------------------------------- | | 1 | 計畫代號 | 計畫代號 | 文字 | | | 2 | 計畫名稱 | 計畫名稱 | 文字 | | | 3 | 活動日期(起) | 活動日期_1 | 日期 | | | 4 | 活動日期(迄) | 活動日期_2 | 日期 | | | 5 | 身分別 | 身分別 | 下拉 | Education.身分別.SearchSelectList | | 6 | 憑證類別 | 憑證類別 | 下拉 | Education.憑證類別.SearchSelectList | | 7 | 活動類別 | 活動類別 | 文字 | | | 8 | 付款方式 | 付款方式 | 下拉 | Education.付款方式.SearchSelectList | - 操作按鈕 - 查詢 - 列印領據 - 製作勾選項目的領據單據 - 作廢 - 作廢 / 取消作廢勾選項目 - 領據登錄 - 新增領據,跳至 "領據登錄與修改" 分頁標籤 * 下方:搜尋結果列表 - 分頁大小選項 10, 20, 30 / 預設 20 - 標題一律水平齊中 - 顯示欄位 | 編號 | 表頭文字 | 資料欄位 | 輸入元件 | 格式化 | 水平對齊 | | ---- | -------------- | -------------- | -------- | --------- | -------- | | 1 | 操作 | | 勾選 | | 中 | | 2 | 計畫代號 | 計畫代號 | | | 中 | | 3 | 活動日期 | 活動日期 | | | 中 | | 4 | 領款人姓名 | 領款人姓名 | | | 中 | | 5 | 身分證字號 | 身分證字號 | | | 中 | | 6 | 憑證類別 | 憑證類別 | | | 中 | | 7 | 活動類別 | 活動類別 | | | 中 | | 8 | 活動名稱事由 | 活動名稱事由 | | | 左 | | 9 | 費用別 | 費用別 | | | 中 | | 10 | 單價 | 單價 | | | 右 | | 11 | 數量 | 數量 | | | 右 | | 12 | 單位 | 單位 | | | 右 | | 13 | 扣繳類別 | 扣繳類別 | | | 中 | | 14 | 勞務費合計金額 | 勞務費合計金額 | | | 右 | | 15 | 應扣繳稅額 | 應扣繳稅額 | | | 右 | | 16 | 服務費 | 服務費 | | | 右 | | 17 | 差旅費合計金額 | 差旅費合計金額 | | | 右 | | 18 | 付款金額 | 付款金額 | | | 右 | | 19 | 製單人員 | 製單人員 | | | 中 | | 20 | 作廢紀錄 | 作廢 | | 1=是 0=否 | 中 | | 21 | 列印次數 | 列印次數 | | | 中 | ### 領據登錄與修改: * 從上到下分三個區塊 * 領據 | 編號 | 顯示名稱 | 資料欄位 | 輸入元件 | 必要 | 唯讀 | 最大長度 | 下拉資料來源 | 自動帶入 / 自動完成 | | ---- | ------------- | ------------ | -------- | ---- | ---- | -------- | ----------------------------------- | ---------------------- | | 1 | 表單編號 | 表單編號 | 文字 | | 是 | | | 自動編號,細節我來處理 | | 2 | 活動日期 | 活動日期 | 日期 | | | | | | | 3 | 身分別 | 身分別 | 下拉 | 是 | | | | | | 4 | 領款人姓名 | 領款人姓名 | 文字 | 是 | | | | | | 5 | 身分證字號 | 身分證字號 | 文字 | | | | | 領款人姓名自動完成帶出 | | 6 | 憑證類別 | 憑證類別 | 下拉 | | | | Education.憑證類別.SearchSelectList | | | 7 | 計畫代號 | 計畫代號 | 文字 | 是 | | | | | | 8 | 計畫名稱 | 計畫名稱 | 文字 | | 是 | | | | | 9 | 活動地點 | 活動地點 | 文字 | | | | | | | 10 | 活動類別 | 活動類別 | 文字 | | | | | | | 11 | 活動名稱/事由 | 活動名稱事由 | 文字 | | | | | | | 12 | 製單人員 | DB_CRUSR | 文字 | | | | | CurrentUserId | | 13 | 付款方式 | 付款方式 | 下拉 | | | | Education.付款方式.SearchSelectList | | * 勞務費 | 編號 | 顯示名稱 | 資料欄位 | 輸入元件 | 必要 | 唯讀 | 最大長度 | 下拉資料來源 | 計算 | | ---- | ---------- | ---------- | -------- | ---- | ---- | -------- | ---------------------------------------- | --------------------------------------------------------------------- | | 1 | 費用別 | 費用別 | 下拉 | 否 | | | Education.勞務費_費用別.SearchSelectList | | | 2 | 單價 | 單價 | 數字 | 否 | | | | | | 3 | 數量 | 數量 | 數字 | 否 | | | | | | 4 | 單位 | 單位 | 文字 | 否 | | | | | | 5 | 扣繳類別 | 扣繳類別 | 下拉 | 否 | | | Education.扣繳類別.SearchSelectList | | | 6 | 合計金額 | 合計金額 | 數字 | 否 | 是 | | | 單價 * 數量 | | 7 | 應扣繳稅額 | 應扣繳稅額 | 數字 | 否 | | | | Services/領據處理.asmx/CalcTax (laborFee=合計金額, category=扣繳類別) | | 8 | 服務費 | 服務費 | 數字 | 否 | | | | | * 差旅費 | 編號 | 顯示名稱 | 資料欄位 | 輸入元件 | 必要 | 唯讀 | 最大長度 | 資料來源 | 計算 | | ---- | ------------- | ------------ | -------- | ---- | ---- | -------- | ---------------------------------------- | ---------------------------------------------------------- | | 1 | 費用別 | 費用別 | 下拉 | | | | Education.差旅費_費用別.SearchSelectList | | | 2 | 起點 | 起點 | 自動完成 | | | | Services/火車票價.asmx/SelectStation | | | 3 | 訖點 | 訖點 | 自動完成 | | | | Services/火車票價.asmx/SelectStation | | | 4 | 捷運/公車 | 捷運公車 | 數字 | | | | | | | 5 | 火車 | 火車 | 數字 | | | | | Services/火車票價.asmx/SelectFare(起點, 訖點) | | 6 | 計程車 | 計程車 | 數字 | | | | | | | 7 | 高鐵/飛機 | 高鐵飛機 | 數字 | | | | | | | 8 | 自行開車 | 自行開車 | 數字 | | | | | | | 9 | 過路費/停車費 | 過路費停車費 | 數字 | | | | | | | 10 | 住宿費 | 住宿費 | 數字 | | | | | | | 11 | 合計金額 | 合計 | 純顯示 | | 是 | | | 捷運公車+火車+計程車+高鐵飛機+自行開車+過路費停車費+住宿費 | ### 列印: 將勾選的領據編號發送到後端 Print 方法,會如同匯出那樣回傳一個 Excel 檔,儲存起來就可以了 ### 匯入與匯出: * 待補充