chore: 首次簽入 Thinkyu ASP.NET 專案

- 加入 Visual Studio / ASP.NET .gitignore
- 排除建置輸出、IDE 設定、NuGet packages、大型 MSI 安裝檔
This commit is contained in:
2026-09-10 09:42:37 +08:00
commit 577060bc78
2496 changed files with 501389 additions and 0 deletions
@@ -0,0 +1,703 @@
//
// 這個檔案是 領據 資料表的資料存取類別 檔案二
// 您可以修改這個檔案,加入您自訂的屬性與方法
//
using Education;
using Education.Services;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using WebLib;
namespace Education
{
///<summary>
/// 領據 資料存取類別
///</summary>
public partial class DAC_領據 : WebLib.DAC
{
#region
///<summary>
/// InsertOne 之前會執行此方法
/// 在這裡可以做一些檢查或是自動編號等動作
/// 回傳 false 會打斷 InsertOne 的執行
///</summary>
protected virtual bool BeforeInsertOne(Item value)
{
value. = 0;
value. = 0;
if (string.IsNullOrEmpty(value.))
{
value. = Next單號(value., _tableName, "表單編號", "YYYYMMDD<9999>", "");
}
return true;
}
///<summary>
/// InsertOne 之後會執行此方法
///</summary>
protected virtual void AfterInsertOne(Item value)
{
}
///<summary>
/// InsertOne 發生錯誤時會執行此方法
///</summary>
///<param name="handled">錯誤是否已經處理妥當</param>
protected virtual void OnInsertOneError(Exception error, out bool handled)
{
handled = false;
}
///<summary>
/// UpdateOne 之前會執行此方法
/// 在這裡可以做一些檢查
/// 回傳 false 會打斷 UpdateOne 的執行
///</summary>
protected virtual bool BeforeUpdateOne(Item value)
{
return true;
}
///<summary>
/// UpdateOne 之前會執行此方法
/// 在這裡可以做一些檢查
/// 回傳 false 會打斷 UpdateOne 的執行
///</summary>
protected virtual bool BeforeUpdateOne(Item value, Item original_value)
{
return true;
}
///<summary>
/// UpdateOne 之後會執行此方法
///</summary>
protected virtual void AfterUpdateOne(Item value)
{
}
///<summary>
/// UpdateOne 之後會執行此方法
///</summary>
protected virtual void AfterUpdateOne(Item value, Item original_value)
{
}
///<summary>
/// UpdateOne 發生錯誤時會執行此方法
///</summary>
///<param name="handled">錯誤是否已經處理妥當</param>
protected virtual void OnUpdateOneError(Exception error, out bool handled)
{
handled = false;
}
///<summary>
/// DeleteOne 之前會執行此方法
/// 在這裡可以做一些檢查
/// 回傳 false 會打斷 DeleteOne 的執行
///</summary>
protected virtual bool BeforeDeleteOne(Item value)
{
return true;
}
///<summary>
/// DeleteOne 之後會執行此方法
///</summary>
protected virtual void AfterDeleteOne(Item value)
{
}
///<summary>
/// DeleteOne 之前會執行此方法
/// 在這裡可以做一些檢查
/// 回傳 false 會打斷 DeleteOne 的執行
///</summary>
protected virtual bool BeforeDeleteOne(int , int DB_APPNO)
{
return true;
}
///<summary>
/// DeleteOne 之後會執行此方法
///</summary>
protected virtual void AfterDeleteOne(int , int DB_APPNO)
{
}
///<summary>
/// DeleteOne 發生錯誤時會執行此方法
///</summary>
///<param name="handled">錯誤是否已經處理妥當</param>
protected virtual void OnDeleteOneError(Exception error, out bool handled)
{
handled = false;
}
#endregion
// 有另外加上去的屬性及方法,請加在這裡
///<summary>
/// 計算資料庫中符合重複條件的筆數
/// 重複條件:活動日期 + 領款人姓名 + 計畫代號 + 活動名稱事由
///</summary>
public int CountDuplicates(DateTime , string , string , string )
{
DbCommand cmd = NewCommand();
cmd.CommandText = "select count(1) from [領據] where 活動日期 = @活動日期 and 領款人姓名 = @領款人姓名 and 計畫代號 = @計畫代號 and ISNULL(活動名稱事由,'') = @活動名稱事由";
AddParam(cmd, "活動日期", );
AddParam(cmd, "領款人姓名", ?? "");
AddParam(cmd, "計畫代號", ?? "");
AddParam(cmd, "活動名稱事由", ?? "");
int count;
ExecuteScalar(cmd, out count);
return count;
}
///<summary>
/// 給查詢畫面用的 SelectPage 方法
///</summary>
[DataObjectMethod(DataObjectMethodType.Select)]
public List SelectPageWithRelations(bool noInputReturnAll, int startRowIndex, int maximumRows, DateTime? _1, DateTime? _2, string , string _非講師編號, string , string , string , string , string , string = null, string orderBy = "")
{
List result = new List();
bool noInput = true;
IDataList list = result as IDataList;
DbCommand cmdSelect = NewCommand();
cmdSelect.CommandText =
String.Format("select top {0} * from (", maximumRows)
+ "select " + _allFields
+ ", row_number() over (order by " + (orderBy == null || orderBy.Length == 0 ? _orderBy : orderBy) + ") as rowid "
+ _from + _where;
AddWhere(cmdSelect, ref noInput, _1, _2, , _非講師編號, , , , , , );
cmdSelect.CommandText += ") as TMP1 where rowid > @startRowIndex ";
AddParam(cmdSelect, "startRowIndex", startRowIndex);
if (!noInputReturnAll && noInput)
return result;
Select(cmdSelect, ref list);
var dao_勞務費 = new DAC_勞務費(conn);
var dao_差旅費 = new DAC_差旅費(conn);
var dao_BPSN = new DAC_BPSN(conn);
var dao講師 = new DAC_講師(conn);
var dao講師評價 = new DAC_講師外訓滿意度(conn);
var Cache = new Dictionary<string, int?>();
var Cache = new Dictionary<string, bool>();
result.ForEach(item =>
{
item.DB_CRUSR_NAME = dao_BPSN.Get員工姓名(item.DB_CRUSR);
item.DB_TRUSR_NAME = dao_BPSN.Get員工姓名(item.DB_TRUSR);
string CacheKey = (item._非講師編號 ?? string.Empty).Trim() + "|" + (item. ?? string.Empty).Trim();
if (!Cache.TryGetValue(CacheKey, out int? ))
{
if (!string.IsNullOrEmpty(item._非講師編號)
&& int.TryParse(item._非講師編號.Trim(), out int parsedTeacherNo))
{
= parsedTeacherNo;
}
else if (!string.IsNullOrEmpty(item.))
{
var = dao講師.Select(false, item..Trim(), null, null)
.FirstOrDefault(t => t. == item..Trim());
if ( != null)
= .;
}
Cache[CacheKey] = ;
}
string CacheKey = .HasValue
? .Value + "|" + item..Date.Ticks
: string.Empty;
bool = .HasValue
&& (Cache.TryGetValue(CacheKey, out bool cached有講師評價)
? cached有講師評價
: Cache[CacheKey] = dao講師評價
.Select(false, null, , item., item., null, null, null, null, null)
.Any());
item. = ? "有" : "無";
var = dao_勞務費.SelectOne(item.).FirstOrDefault();
var = dao_差旅費.SelectOne(item.).FirstOrDefault();
if ( != null)
{
item._編號 = .;
item._費用別 = .;
item._單價 = .;
item._數量 = .;
item._單位 = .;
item._扣繳類別 = .;
item._扣繳類別名稱 = .GetName(.);
item._合計金額 = .;
item._應扣繳稅額 = .;
item._服務費 = .;
item._作廢 = .;
}
else
{
item._編號 = string.Empty;
item._費用別 = string.Empty;
item._單價 = 0;
item._數量 = 0;
item._單位 = string.Empty;
item._扣繳類別 = string.Empty;
item._扣繳類別名稱 = string.Empty;
item._合計金額 = 0;
item._應扣繳稅額 = 0;
item._服務費 = 0;
item._作廢 = 0;
}
if ( != null)
{
item._編號 = .;
item._票價資訊 = .;
item._費用別 = .;
item._起點 = .;
item._訖點 = .;
item._捷運公車 = .;
item._火車 = .;
item._計程車 = .;
item._高鐵飛機 = .;
item._自行開車 = .;
item._過路費停車費 = .;
item._住宿費 = .宿;
item._合計 = .;
item._作廢 = .;
}
else
{
item._編號 = string.Empty;
item._票價資訊 = string.Empty;
item._費用別 = string.Empty;
item._起點 = string.Empty;
item._訖點 = string.Empty;
item._捷運公車 = 0;
item._火車 = 0;
item._計程車 = 0;
item._高鐵飛機 = 0;
item._自行開車 = 0;
item._過路費停車費 = 0;
item._住宿費 = 0;
item._合計 = 0;
item._作廢 = 0;
}
});
return result;
}
public List SelectSummary(bool noInputReturnAll, int startRowIndex, int maximumRows, DateTime? , DateTime? , string , string )
{
List tempData = new List();
bool noInput = true;
IDataList list = tempData as IDataList;
DbCommand cmdSelect = NewCommand();
// 取出明細資料
cmdSelect.CommandText = String.Format("select top {0} * from (", maximumRows)
+ @"select A.講師_非講師編號, A.領款人姓名, A.活動日期, A.身分證字號, 1 堂數
, ISNULL(B.合計金額, 0) - ISNULL(B.應扣繳稅額, 0) - ISNULL(B.服務費, 0) + ISNULL(C.合計, 0) 付款金額
, row_number() over (order by A.領款人姓名) as rowid
from 領據 A
left join 勞務費 B on A.編號 = B.領據編號 and B.編號 is not NULL and B.編號 <> ''
left join 差旅費 C on A.編號 = C.領據編號 and C.編號 is not NULL and C.編號 <> ''
where 1=1
";
AddWhere(cmdSelect, ref noInput, , , , null, null, null, null, null, );
cmdSelect.CommandText += ") as TMP1 where 付款金額 > 0 and rowid > @startRowIndex ";
AddParam(cmdSelect, "startRowIndex", startRowIndex);
if (!noInputReturnAll && noInput)
return tempData;
Select(cmdSelect, ref list);
var dao付款設定 = new DAC_付款設定(conn);
foreach (var r in tempData)
{
// 加入付款設定資料
var paymentSetting = dao付款設定.SelectRecentlyActivated(r._非講師編號, r.);
if (paymentSetting != null)
{
r. = .GetActuralValue(paymentSetting.);
r. = .GetName(paymentSetting.);
r. = paymentSetting.;
r. = paymentSetting.;
r. = paymentSetting.;
r. = paymentSetting.;
}
}
// 彙整
// 這裡要用領款人姓名 + 身分證字號 + 扣繳類別 + 帳戶名 + 匯款帳號 + 銀行分行代碼 來彙總
// 加總堂數 和 付款金額
List result = new List();
// 按照 (領款人姓名、身分證字號、扣繳類別、帳戶名、匯款帳號、銀行分行代碼) 分組彙總
var groupedData = tempData.GroupBy(x => new
{
x.,
x.,
x.,
x.,
x.,
x.,
x.,
x.
});
foreach (var group in groupedData)
{
var summaryItem = new Item
{
= group.Key.,
= group.Key.,
= group.Key.,
= group.Key.,
= group.Key.,
= group.Key.,
= group.Key.,
= group.Key.,
// 堂數是數量,加總所有同組的數量
= group.Sum(x => x.),
// 付款金額直接加總
= group.Sum(x => x.)
};
result.Add(summaryItem);
}
return result;
}
public List<Item> SelectDetail(bool noInputReturnAll, int startRowIndex, int maximumRows,
DateTime? , DateTime? , string , string )
{
DAC_講師 dao講師 = new DAC_講師(this.conn);
DAC_非講師 dao非講師 = new DAC_非講師(this.conn);
List tempData = new List();
bool noInput = true;
IDataList list = tempData as IDataList;
DbCommand cmdSelect = NewCommand();
// 取出明細資料
cmdSelect.CommandText = String.Format("select top {0} * from (", maximumRows)
+ @"select A.編號, A.講師_非講師編號, A.領款人姓名, A.身分證字號, A.身分別, A.郵件已發送
, ISNULL(B.合計金額, 0) - ISNULL(B.應扣繳稅額, 0) - ISNULL(B.服務費, 0) 講師勞務費
, ISNULL(B.應扣繳稅額, 0) 應扣繳稅額
, ISNULL(B.服務費, 0) 服務費
, B.扣繳類別
, A.計畫代號
, CONVERT(varchar(10), A.活動日期, 121) 活動日期
, A.活動名稱事由
, A.憑證類別
, B.編號 領據編號
, B.費用別
, B.單價
, B.數量
, B.單位
, row_number() over (order by A.領款人姓名) as rowid
from 領據 A
join 勞務費 B on A.編號 = B.領據編號 and B.編號 is not NULL and B.編號 <> ''
where 1=1";
List<WhereItem> wheres = new List<WhereItem>();
if ( != null && != null)
{
noInput = false;
wheres.Add(WhereItem.GreatThanOrEqual(fieldName: "A.活動日期", value: ));
wheres.Add(WhereItem.LessThan(fieldName: "A.活動日期", value: .Value.AddDays(1)));
}
else if ( != null && == null)
{
noInput = false;
wheres.Add(WhereItem.GreatThanOrEqual(fieldName: "A.活動日期", value: ));
}
else if ( == null && != null)
{
noInput = false;
wheres.Add(WhereItem.LessThan(fieldName: "A.活動日期", value: .Value.AddDays(1)));
}
if ( != null && .Length > 0)
{
noInput = false;
wheres.Add(WhereItem.Equal(fieldName: "A.身分別", value: ));
}
if ( != null && .Length > 0)
{
noInput = false;
wheres.Add(WhereItem.Equal(fieldName: "A.憑證類別", value: ));
}
AddWhere(cmdSelect, wheres);
cmdSelect.CommandText += ") as TMP1 where rowid > @startRowIndex ";
AddParam(cmdSelect, "startRowIndex", startRowIndex);
if (!noInputReturnAll && noInput)
return new List<Item>();
Select(cmdSelect, ref list);
// 加入付款設定資料
var dao付款設定 = new DAC_付款設定(conn);
foreach (var r in tempData)
{
r. = .GetName(r.);
r. = .GetActuralValue(r.);
}
// 分組彙整
List<Item> result = new List<Item>();
var groupedData = tempData.GroupBy(x => new
{
x._非講師編號,
x.,
x.,
x.,
x.,
x.,
});
foreach (var group in groupedData)
{
var = string.Empty;
var = string.Empty;
if (group.Key. == "講師")
{
var t = dao講師.SelectOne(DAC.GetInt32(group.Key._非講師編號)).FirstOrDefault();
if (t != null)
{
= string.Format("{0}{1}{2}", t._縣市, t._鄉鎮市區, t._街道地址);
= t.;
}
}
else
{
var t = dao非講師.SelectOne(group.Key._非講師編號).FirstOrDefault();
if (t != null)
{
= string.Format("{0}{1}{2}", t._縣市, t._鄉鎮市區, t._街道地址);
= t.;
}
}
var summaryItem = new Item
{
_非講師編號 = group.Key._非講師編號,
= group.Key.,
= group.Key.,
= ,
= ,
= group.Key.,
= group.Key.,
= group.Sum(x => x.),
= group.Sum(x => x.),
= group.Sum(x => x.)
};
var i = 1;
foreach (var detail in group.ToList())
{
summaryItem..Add(detail);
}
result.Add(summaryItem);
}
return result;
}
}
///<summary>
///領據 資料集合類別
///</summary>
public partial class List : List<Item>
{
// 有另外加上去的屬性及方法,請加在這裡
}
///<summary>
///個人費用彙整表 資料集合類別
///</summary>
public partial class List : List<Item>, IDataList
{
public void Fill(DbDataReader reader)
{
DAC.FillData<Item>(reader, this);
}
}
///<summary>
///扣繳明細 資料集合類別
///</summary>
public partial class List : List<Item>, IDataList
{
public void Fill(DbDataReader reader)
{
DAC.FillData<Item>(reader, this);
}
}
///<summary>
///個人費用彙整表 資料紀錄類別
///</summary>
[Serializable]
public partial class Item : DataItemBase
{
/// <summary>講師/非講師編號 (用於內部查詢)</summary>
public string _非講師編號 { get; set; }
/// <summary>領款人姓名</summary>
public string { get; set; }
/// <summary>活動日期 (用於查詢付款設定)</summary>
public DateTime? { get; set; }
/// <summary>身分證字號</summary>
public string { get; set; }
/// <summary>堂數 (數量)</summary>
[DataObjectField(false)]
public int { get; set; }
/// <summary>付款金額</summary>
[DataObjectField(false)]
public int { get; set; }
/// <summary>扣繳類別</summary>
[DataObjectField(false)]
public string { get; set; }
/// <summary>扣繳類別名稱 (顯示用)</summary>
[DataObjectField(false)]
public string { get; set; }
/// <summary>帳戶名</summary>
[DataObjectField(false)]
public string { get; set; }
/// <summary>匯款帳號</summary>
[DataObjectField(false)]
public string { get; set; }
/// <summary>銀行分行代碼</summary>
[DataObjectField(false)]
public string { get; set; }
/// <summary>銀行分行</summary>
[DataObjectField(false)]
public string { get; set; }
}
///<summary>
///領據 資料紀錄類別
///</summary>
public partial class Item
{
// 有另外加上去的屬性及方法,請加在這裡
public bool { get { return string.Compare(PublicVariable., string.Format("{0:yyyy-MM}", )) >= 0; } }
public string DB_CRUSR_NAME { get; set; }
public string DB_TRUSR_NAME { get; set; }
public string { get; set; }
public string _編號 { get; set; }
public string _費用別 { get; set; }
public int? _單價 { get; set; }
public decimal? _數量 { get; set; }
public string _單位 { get; set; }
public string _扣繳類別 { get; set; }
public string _扣繳類別名稱 { get; set; }
public int? _合計金額 { get; set; }
public int? _應扣繳稅額 { get; set; }
public int? _服務費 { get; set; }
public int? _作廢 { get; set; }
public string _編號 { get; set; }
public string _票價資訊 { get; set; }
public string _費用別 { get; set; }
public string _起點 { get; set; }
public string _訖點 { get; set; }
public int? _捷運公車 { get; set; }
public int? _火車 { get; set; }
public int? _計程車 { get; set; }
public int? _高鐵飛機 { get; set; }
public int? _自行開車 { get; set; }
public int? _過路費停車費 { get; set; }
public int? _住宿費 { get; set; }
public int? _合計 { get; set; }
public int? _作廢 { get; set; }
}
///<summary>
///扣繳明細 資料紀錄類別
///</summary>
[Serializable]
public partial class Item : DataItemBase
{
public string _非講師編號 { get; set; }
public string { get; set; }
public string { get; set; }
public string { get; set; }
public string { get; set; }
public string { get; set; }
public string { get; set; }
public int { get; set; }
public int { get; set; }
public int { get; set; }
public List<Item> { get; set; }
public Item()
{
= new List<Item>();
}
}
public partial class Item : DataItemBase
{
public string { get; set; }
public string { get; set; }
public string { get; set; }
public string { get; set; }
public List<Item> { get; set; }
public int { get; set; }
public int { get; set; }
public int { get; set; }
public Item()
{
= new List<Item>();
}
}
public class Item : DataItemBase
{
public int { get; set; }
public string _非講師編號 { get; set; }
public string { get; set; }
public string { get; set; }
public string { get; set; }
public string { get; set; }
public string { get; set; }
public string { get; set; }
public string { get; set; }
public string { get; set; }
public string { get; set; }
public string { get; set; }
public string { get; set; }
public string { get; set; }
public string { get; set; }
public int { get; set; }
public decimal { get; set; }
public string { get; set; }
public int { get; set; }
public int { get; set; }
public int { get; set; }
public string { get; set; }
}
}