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
+488
View File
@@ -0,0 +1,488 @@
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Text;
using System.Data.Common;
using Wellan.Data;
using Wellan.Common;
using System.IO;
using CRAX;
/// <summary>
/// 管理報表
/// </summary>
public partial class forms_report_fmMgmtReport : Wellan.Web.UI.WUserControlBase
{
private DateTime Date1;
private DateTime Date2;
private DateTime EmpDate;
private ReportParameter rp = new ReportParameter();
private string reportName = "";
private string dataFileName = "";
private string reportTitle = "";
protected void Page_Load(object sender, EventArgs e)
{
// 輸出 onclick 事件
foreach (ListItem item in rblReport.Items)
{
item.Attributes.Add("onclick", "inputControl(\"" + item.Value + "\");");
}
RegisterCalendarEvent(this, "btnDATE1_DATE", "txtDATE1");
RegisterCalendarEvent(this, "btnDATE2_DATE", "txtDATE2");
RegisterCalendarEvent(this, "btnEMPDATE_DATE", "txtEMPDATE");
}
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
ddlBPPNM.DataSource = new BpaaDAC().GetBpaaWithTYPlusNone();
ddlBPPNM.DataBind();
}
private bool CheckInput()
{
cvMessage.ErrorMessage = "";
cvMessage.IsValid = true;
bool result = true;
if (rblReport.SelectedIndex == -1)
{
cvMessage.ErrorMessage += "請選擇報表";
result = false;
}
string[] tmp = rblReport.SelectedValue.Split(',');
if (tmp.Length > 2)
{
reportName = tmp[0];
dataFileName = tmp[1];
reportTitle = tmp[2];
}
switch (reportName)
{
case "BPSN_01":
if (!cbbBPEDY.Checked &&
!cbbBPPNM.Checked &&
!cbbBPSDY_PERIOD.Checked &&
!cbbBPEDY_PERIOD.Checked &&
!cbbBPBDY_PERIOD.Checked &&
!cbbBPENO.Checked &&
!cbbEMPDATE.Checked)
{
cvMessage.ErrorMessage += "請選擇篩選類型";
result = false;
}
break;
case "BPSN_02":
if (!cbbBPEDY.Checked &&
!cbbBPPNM.Checked &&
!cbbBPSDY_PERIOD.Checked &&
!cbbBPEDY_PERIOD.Checked &&
!cbbBPBDY_PERIOD.Checked &&
!cbbEMPDATE.Checked)
{
cvMessage.ErrorMessage += "請選擇篩選類型";
result = false;
}
break;
case "RPAR_ALL_1":
if (!cbbBPPNM.Checked &&
!cbbPRESENT_PERIOD.Checked)
{
cvMessage.ErrorMessage += "請選擇篩選類型";
result = false;
}
break;
case "RPAR_01":
if (!cbbBPEDY.Checked &&
!cbbBPPNM.Checked)
{
cvMessage.ErrorMessage += "請選擇篩選類型";
result = false;
}
break;
}
if (cbbBPSDY_PERIOD.Checked ||
cbbBPEDY_PERIOD.Checked ||
cbbPRESENT_PERIOD.Checked)
{
Date1 = CheckDate(txtDATE1.Text, "期間起始日期請輸入正確的日期", ref result, cvMessage);
Date2 = CheckDate(txtDATE2.Text, "期間結束日期請輸入正確的日期", ref result, cvMessage);
}
if (cbbEMPDATE.Checked)
{
EmpDate = CheckDate(txtEMPDATE.Text, "在職日期請輸入正確的日期", ref result, cvMessage);
}
cvMessage.IsValid = result;
RegisterStartupScript("INPUT CONTROL", "inputControl(\"" + rblReport.SelectedValue + "\");");
ProcessCustomValidatorMessage(cvMessage);
return result;
}
protected void btnOk_Click(object sender, EventArgs e)
{
if (!CheckInput())
return;
DataTable reportData;
if (!GetData(out reportData))
{
cvMessage.ErrorMessage = "無符合條件的資料";
cvMessage.IsValid = false;
return;
}
// 將資料輸出成 MDB 檔案
WTableTr tableTr = new WTableTr();
string realFileName = tableTr.ExportToMDB(reportData, ReportDataPath + dataFileName + ".mdb", dataFileName, true, true, false);
realFileName = "reportData/" + Path.GetFileName(realFileName);
reportData.Dispose();
tableTr = null;
// 將參數輸出成 RPP 檔案
string realParamFileName = "reportData/" + Path.GetFileName(rp.Save(ReportDataPath + reportName + ".rpp", true));
RegisterStartupScript("REPORT_JS",
CRAXHelper.GetReportScriptJSONP(Context,
GetWebRootUrl() + "CRAX/",
"../report/" + reportName + ".rpt",
"../" + realFileName,
"../" + realParamFileName,
"",
reportName + ".rpt",
dataFileName + ".mdb",
reportName + ".rpp",
"",
"",
"",
"",
"",
0,
0));
}
private bool GetData(out DataTable Result)
{
GetData gd = new GetData();
gd.Query = Query;
switch (dataFileName)
{
case "BPSN_01":
return GetDataBPSN_01(out Result);
case "RPIR_01":
return GetDataRPIR_01(out Result);
default:
Result = new DataTable();
return false;
}
}
private bool GetDataRPIR_01(out DataTable Result)
{
StringBuilder sql = new StringBuilder();
rp.Clear();
rp.Add("公司名稱", GetString("COMPANY.NAME"));
rp.Add("報表名稱", reportTitle);
DbCommand cmd = Query.NewCommand();
sql.Append(
@"SELECT * FROM
(
SELECT A.RPREN, 0 AS RPITM, '1899/12/31' AS RPBDT, A.RPENO, A.RPSDT, A.RPEDT, A.RPSLY, A.RPAMT, A.RPFMY, A.RPFM1, A.RPFM2,
A.RPFM3, A.RPSLA, A.RPDIS, A.RPDIH, A.RPOLD, A.RPNAT, A.RPPTP, A.RPLIS, A.RPHIS, A.RPDOC,
B.BPNME, B.BPSDY, B.BPEDY, C.RAPYN, D.BPPYM RAPYNX, A.TRDAT, B.BPIDN
FROM RPIR A
LEFT OUTER JOIN BPSNView B ON A.RPENO=B.BPENO
LEFT OUTER JOIN RASN C ON A.RPENO=C.RANUM AND C.RAEDT IS NULL
LEFT OUTER JOIN BPAA D ON C.RAPYN=D.BPPYN
UNION
SELECT A.RPREN, A.RPITM, A.RPBDT, A.RPENO, A.RPSDT, A.RPEDT, A.RPSLY, A.RPAMT, A.RPFMY, A.RPFM1, A.RPFM2,
A.RPFM3, A.RPSLA, A.RPDIS, A.RPDIH, A.RPOLD, A.RPNAT, A.RPPTP, A.RPLIS, A.RPHIS, A.RPDOC,
B.BPNME, B.BPSDY, B.BPEDY, C.RAPYN, D.BPPYM RAPYNX, A.TRDAT, B.BPIDN
FROM RPIB A
LEFT OUTER JOIN BPSNView B ON A.RPENO=B.BPENO
LEFT OUTER JOIN RASN C ON A.RPENO=C.RANUM AND C.RAEDT IS NULL
LEFT OUTER JOIN BPAA D ON C.RAPYN=D.BPPYN
) TMP
WHERE 1=1 ");
string reportFilter = "";
// 在職狀況
//if (RadioButton1.Checked)
if (cbbBPEDY.Checked)
{
switch (ddlBPEDY.SelectedValue)
{
case "0":
//rp.Add("報表條件", "全部員工");
reportFilter = "在職狀況:全部";
break;
case "1":
sql.Append(" AND (BPEDY IS NULL OR BPEDY >= @TODAY)");
//rp.Add("報表條件", "在職員工");
reportFilter = "在職狀況:在職";
break;
case "2":
sql.Append(" AND (BPEDY < @TODAY)");
//rp.Add("報表條件", "離職員工");
reportFilter = "在職狀況:離職";
break;
}
cmd.Parameters.Add(Query.NewParameter("TODAY", String.Format(WGuard1.InvariantCulture, "{0:yyyy-MM-dd}", DateTime.UtcNow.AddHours(8).Date)));
}
// 專案名稱
//else if (RadioButton2.Checked)
if (cbbBPPNM.Checked)
{
if (ddlBPPNM.SelectedValue != "")
{
if (ddlBPPNM.SelectedValue != "000000001")
{
sql.Append(" AND RAPYN=@RAPYN");
cmd.Parameters.Add(Query.NewParameter("RAPYN", ddlBPPNM.SelectedValue));
//rp.Add("報表條件", ddlBPPNM.SelectedItem.Text);
reportFilter += (reportFilter.Length > 0 ? "/" : "") + "專案名稱:" + ddlBPPNM.SelectedItem.Text;
}
else
{
sql.Append(" AND RAPYN IS NULL");
//rp.Add("報表條件", ddlBPPNM.SelectedItem.Text);
reportFilter += (reportFilter.Length > 0 ? "/" : "") + "專案名稱:" + ddlBPPNM.SelectedItem.Text;
}
}
else
//rp.Add("報表條件", "全部專案");
reportFilter += (reportFilter.Length > 0 ? "/" : "") + "專案名稱:全部專案";
}
rp.Add("報表條件", reportFilter);
switch (rblORDER.SelectedIndex)
{
case 0:
sql.Append(" ORDER BY RPENO, RPREN, RPITM");
rp.Add("排序方式", "員工編號順序");
reportName += "_01";
break;
case 1:
sql.Append(" ORDER BY RAPYN, RPENO, RPREN, RPITM");
rp.Add("排序方式", "專案順序");
reportName += "_02";
break;
}
cmd.CommandText = sql.ToString();
DbDataAdapter da = Query.NewDataAdapter(cmd);
DbConnection conn = Query.NewConnection();
cmd.Connection = conn;
Result = new DataTable();
da.FillSchema(Result, SchemaType.Mapped);
da.Fill(Result);
return Result.Rows.Count > 0;
}
private bool GetDataBPSN_01(out DataTable Result)
{
StringBuilder sql = new StringBuilder();
rp.Clear();
rp.Add("公司名稱", GetString("COMPANY.NAME"));
rp.Add("報表名稱", reportTitle);
DbCommand cmd = Query.NewCommand();
// SQL command 第 6 行的換行是故意的,這樣資料中才會有換行符號
sql.Append(
string.Format(@"SELECT A.*, B.RAPYN, C.BPPYM RAPYNX, B.RABRH, D.BSRMK RABRHX, B.RAJNO, E.BPJME RAJNOX, B.RACNO, F.BPCME RACNOX,
CASE WHEN B.RAPYN IS NOT NULL THEN F.BPSRM ELSE (SELECT TOP 1 BPSRM FROM (SELECT '1899/12/31' BPBDT, BPSRM FROM BPSL WHERE BPENO=A.BPENO UNION SELECT RPBDT AS BPBDT, RPSRM AS BPSRM FROM RPSL WHERE RPENO=A.BPENO) X ORDER BY BPBDT DESC) END AS BPSRM,
CASE WHEN B.RAPYN IS NOT NULL THEN F.BPP02 ELSE (SELECT TOP 1 BPP02 FROM (SELECT '1899/12/31' BPBDT, BPP02 FROM BPSL WHERE BPENO=A.BPENO UNION SELECT RPBDT AS BPBDT, RPP02 AS BPSRM FROM RPSL WHERE RPENO=A.BPENO) Y ORDER BY BPBDT DESC) END AS BPP02,
G.BCNAM AS BCBNKX,
'【' + (SELECT TOP 1 BSSCR FROM BCLS WHERE BSPAR='BCUSZON' AND BSCLS=SUBSTRING(C.BPPYN,4,1)) + '】
' + C.BPPYM RAPYNX1, ISNULL(I.RPCPY, H.RPCPY) AS RPCPY
FROM BPSNView A
LEFT OUTER JOIN RASN B ON A.BPENO=B.RANUM AND B.RAEDT IS NULL AND B.RASDT <= '{0}'
LEFT OUTER JOIN BPAA C ON B.RAPYN=C.BPPYN
LEFT OUTER JOIN BCLS D ON D.BSCLS=B.RABRH AND D.BSPAR='BPSNBRH'
LEFT OUTER JOIN BPJA E ON E.BPPYN=B.RAPYN AND E.BPJNO=B.RAJNO
LEFT OUTER JOIN BPJB F ON F.BPPYN=B.RAPYN AND F.BPJNO=B.RAJNO AND F.BPCNO=B.RACNO
LEFT OUTER JOIN BRML G ON A.BPBNK=G.BCNUM
LEFT OUTER JOIN RPIR H ON A.BPENO=H.RPENO AND H.RPREN=(SELECT MAX(RPREN) FROM RPIR WHERE RPENO=A.BPENO)
LEFT OUTER JOIN RPIB I ON H.RPREN=I.RPREN AND I.RPITM=(SELECT MAX(RPITM) FROM RPIB WHERE RPREN=I.RPREN)
WHERE 1=1 ", DateTime.UtcNow.AddHours(8).ToString("yyyy-MM-dd", WGuard1.InvariantCulture) ));
string reportFilter = "";
// 員工學歷統計表 與 員工年齡統計表要抓在職員工
if (reportName == "BPSN_03" || reportName == "BPSN_04")
{
sql.Append(" AND A.BPEDY IS NULL");
}
// 員工編號
if (cbbBPENO.Checked)
{
if (txtBPENO1.Text.Length > 0 && txtBPENO2.Text.Length > 0)
{
sql.Append(" AND A.BPENO BETWEEN @BPENO1 AND @BPENO2 ");
Query.AddParam(cmd, "BPENO1", txtBPENO1.Text);
Query.AddParam(cmd, "BPENO2", txtBPENO2.Text);
reportFilter += (reportFilter.Length > 0 ? "/" : "") + String.Format("員工編號:{0}至{1}", txtBPENO1.Text, txtBPENO2.Text);
}
if (txtBPENO1.Text.Length > 0 && txtBPENO2.Text.Length == 0)
{
sql.Append(" AND A.BPENO >= @BPENO1 ");
Query.AddParam(cmd, "BPENO1", txtBPENO1.Text);
reportFilter += (reportFilter.Length > 0 ? "/" : "") + String.Format("員工編號:{0}之後", txtBPENO1.Text);
}
if (txtBPENO1.Text.Length == 0 && txtBPENO2.Text.Length > 0)
{
sql.Append(" AND A.BPENO <= @BPENO2 ");
Query.AddParam(cmd, "BPENO2", txtBPENO2.Text);
reportFilter += (reportFilter.Length > 0 ? "/" : "") + String.Format("員工編號:{0}之前", txtBPENO2.Text);
}
}
// 在職狀況
if (cbbBPEDY.Checked)
{
switch (ddlBPEDY.SelectedValue)
{
case "0":
//rp.Add("報表條件", "全部員工");
reportFilter += (reportFilter.Length > 0 ? "/" : "") + "在職狀況:全部";
break;
case "1":
sql.Append(" AND (A.BPEDY IS NULL OR A.BPEDY >= @TODAY)");
//rp.Add("報表條件", "在職員工");
reportFilter += (reportFilter.Length > 0 ? "/" : "") + "在職狀況:在職";
break;
case "2":
sql.Append(" AND (A.BPEDY < @TODAY)");
//rp.Add("報表條件", "離職員工");
reportFilter += (reportFilter.Length > 0 ? "/" : "") + "在職狀況:離職";
break;
}
cmd.Parameters.Add(Query.NewParameter("TODAY", String.Format(WGuard1.InvariantCulture, "{0:yyyy-MM-dd}", DateTime.UtcNow.AddHours(8).Date)));
}
// 專案名稱
if (cbbBPPNM.Checked)
{
if (ddlBPPNM.SelectedValue != "")
{
if (ddlBPPNM.SelectedValue != "000000001")
{
sql.Append(" AND B.RAPYN=@RAPYN");
Query.AddParam(cmd, "RAPYN", ddlBPPNM.SelectedValue);
reportFilter += (reportFilter.Length > 0 ? "/" : "") + "專案名稱:" + ddlBPPNM.SelectedItem.Text;
}
else
{
sql.Append(" AND B.RAPYN IS NULL");
reportFilter += (reportFilter.Length > 0 ? "/" : "") + "專案名稱:" + ddlBPPNM.SelectedItem.Text;
}
}
else
reportFilter += (reportFilter.Length > 0 ? "/" : "") + "專案名稱:全部專案";
}
// 到職期間
if (cbbBPSDY_PERIOD.Checked)
{
reportFilter += (reportFilter.Length > 0 ? "/" : "") + "到職期間:" + PreparePeriod("A.BPSDY", sql, cmd);
}
// 離職期間
if (cbbBPEDY_PERIOD.Checked)
{
reportFilter += (reportFilter.Length > 0 ? "/" : "") + "離職期間:" + PreparePeriod("A.BPEDY", sql, cmd);
}
// 生日期間
if (cbbBPBDY_PERIOD.Checked)
{
sql.Append(" AND (RIGHT(CONVERT(VARCHAR(8), A.BPBDY, 112), 4)>=@DATE1 AND RIGHT(CONVERT(VARCHAR(8), A.BPBDY, 112), 4)<=@DATE2) ");
Query.AddParam(cmd, "DATE1", ddlDATE1.SelectedValue);
Query.AddParam(cmd, "DATE2", ddlDATE2.SelectedValue);
if (ddlDATE1.SelectedIndex != ddlDATE2.SelectedIndex)
{
reportFilter += (reportFilter.Length > 0 ? "/" : "") + "生日月份:" + String.Format("{0} 至 {1}", ddlDATE1.SelectedItem.Text, ddlDATE2.SelectedItem.Text);
}
else
{
reportFilter += (reportFilter.Length > 0 ? "/" : "") + "生日月份:" + String.Format("{0}", ddlDATE1.SelectedItem.Text);
}
}
// 在職日期
if (cbbEMPDATE.Checked)
{
sql.Append(" AND (A.BPSDY <= @EMPDATE AND (A.BPEDY > @EMPDATE OR A.BPEDY IS NULL))");
Query.AddParam(cmd, "EMPDATE", EmpDate);
reportFilter += (reportFilter.Length > 0 ? "/" : "") + "在職日期:" + string.Format("{0:yyyy}年{0:MM}月{0:dd}日", EmpDate);
}
rp.Add("報表條件", reportFilter);
sql.Append(String.Format(" ORDER BY {0}", rblORDER.SelectedValue));
switch (rblORDER.SelectedIndex)
{
case 0:
rp.Add("排序方式", "員工編號順序");
break;
case 1:
rp.Add("排序方式", "專案順序");
break;
}
cmd.CommandText = sql.ToString();
Result = Query.Select(cmd);
return Result.Rows.Count > 0;
}
private string PreparePeriod(string fieldName, StringBuilder sql, DbCommand cmd)
{
if (Date1.Ticks > 0 && Date2.Ticks > 0)
{
sql.Append(" AND (" + fieldName + " > @DATE1 AND " + fieldName + " < @DATE2) ");
cmd.Parameters.Add(Query.NewParameter("DATE1", Date1.AddDays(-1)));
cmd.Parameters.Add(Query.NewParameter("DATE2", Date2.AddDays(1)));
return String.Format("{0:yyyy}年{0:MM}月{0:dd}日 至 {1:yyyy}年{1:MM}月{1:dd}日 ", Date1, Date2);
}
else if (Date1.Ticks > 0 && Date2.Ticks == 0)
{
sql.Append(" AND (" + fieldName + " > @DATE1) ");
cmd.Parameters.Add(Query.NewParameter("DATE1", Date1.AddDays(-1)));
return String.Format("{0:yyyy}年{0:MM}月{0:dd}日後 ", Date1);
}
else if (Date1.Ticks == 0 && Date2.Ticks > 0)
{
sql.Append(" AND (" + fieldName + " < @DATE2) ");
cmd.Parameters.Add(Query.NewParameter("DATE2", Date2.AddDays(1)));
return String.Format("{0:yyyy}年{0:MM}月{0:dd}日前 ", Date2);
}
else
return "所有日期";
}
}