398 lines
13 KiB
C#
398 lines
13 KiB
C#
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 Wellan.Common;
|
|
using Wellan.Data;
|
|
using System.Data.Common;
|
|
using CRAX;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Collections.Generic;
|
|
|
|
/// <summary>
|
|
/// 專案報表
|
|
/// </summary>
|
|
public partial class forms_report_fmYearReport : Wellan.Web.UI.WUserControlBase
|
|
{
|
|
private DataTable reportData;
|
|
private string reportName = "";
|
|
private string dataFileName = "";
|
|
private string reportTitle = "";
|
|
private string reportPeriod = "";
|
|
private DateTime aYYMM;
|
|
private GetData gd = new GetData();
|
|
private bool OverTimeToMinute;
|
|
|
|
protected void Page_Load(object sender, EventArgs e)
|
|
{
|
|
//ddlBPPNM.DataSource = new BpaaDAC().GetBpaaWithTY();
|
|
//ddlBPPNM.DataBind();
|
|
}
|
|
|
|
protected override void OnInit(EventArgs e)
|
|
{
|
|
base.OnInit(e);
|
|
SetClientFocus(txtYYMM);
|
|
gd.Query = Query;
|
|
}
|
|
|
|
protected void btnOk_Click(object sender, EventArgs e)
|
|
{
|
|
// 檢查此使用者是否有權限處理這個專案
|
|
BprmDAC bprm = new BprmDAC(Query);
|
|
if (!bprm.GetRight(ddlBPPNM.SelectedValue, UserId))
|
|
{
|
|
cvMessage.ErrorMessage = "對不起,你沒有處理這個專案的權限!";
|
|
cvMessage.IsValid = false;
|
|
return;
|
|
}
|
|
|
|
bool result = true;
|
|
bool year = false;
|
|
cvMessage.IsValid = true;
|
|
cvMessage.ErrorMessage = "";
|
|
|
|
string[] tmp = ddlReportSelect.SelectedValue.Split(',');
|
|
reportName = tmp[0];
|
|
dataFileName = tmp[1];
|
|
reportTitle = tmp[2];
|
|
reportPeriod = tmp[3];
|
|
|
|
// 加班費明細 與 出缺勤情形統計表 可以輸入三位表示年報表
|
|
if ((reportName == "RPAR_1X" || reportName == "RPAR_ALL_2") && txtYYMM.Text.Length == 3)
|
|
{
|
|
year = true;
|
|
aYYMM = CheckDate(txtYYMM.Text + "0101", "請輸入正確的年度", ref result, cvMessage);
|
|
if (!result)
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
aYYMM = CheckDate(txtYYMM.Text + "01", "請輸入正確的年月", ref result, cvMessage);
|
|
if (!result)
|
|
return;
|
|
}
|
|
|
|
OverTimeToMinute = gd.GetOverTimeToMinutes(ddlBPPNM.SelectedValue);
|
|
|
|
// 若是加班費明細表且專案年度接單加班時數計算至分鐘
|
|
// 改用 RPAR_1X_1 報表
|
|
if (reportName == "RPAR_1X" && OverTimeToMinute)
|
|
reportName = "RPAR_1X_1";
|
|
if (reportName == "RPAR_0X_1" && OverTimeToMinute)
|
|
reportName = "RPAR_0X_1M";
|
|
if (reportName == "RPAR_ALL_2" && OverTimeToMinute)
|
|
reportName = "RPAR_ALL_2M";
|
|
|
|
bool hasData = false;
|
|
switch (dataFileName)
|
|
{
|
|
case "SACD_01":
|
|
hasData = GetSACDData();
|
|
break;
|
|
case "SSMS_01":
|
|
hasData = GetSSMSData(year);
|
|
break;
|
|
case "SSMS_02":
|
|
hasData = GetSSMSSummaryData();
|
|
break;
|
|
}
|
|
|
|
if (hasData)
|
|
ExportReport(year);
|
|
else
|
|
{
|
|
cvMessage.IsValid = false;
|
|
cvMessage.ErrorMessage = "無符合條件的資料";
|
|
}
|
|
}
|
|
|
|
protected void btnYear_Click(object sender, EventArgs e)
|
|
{
|
|
bool result = true;
|
|
cvMessage.IsValid = true;
|
|
cvMessage.ErrorMessage = "";
|
|
txtYYMM.Text = txtYYMM.Text.Trim();
|
|
string rp = "";
|
|
|
|
if (txtYYMM.Text.Length == 3)
|
|
{
|
|
rp = "YEAR";
|
|
aYYMM = CheckDate(txtYYMM.Text + "0101", "請輸入正確的年度", ref result, cvMessage);
|
|
if (!result)
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
rp = "MONTH";
|
|
aYYMM = CheckDate(txtYYMM.Text + "01", "請輸入正確的年月", ref result, cvMessage);
|
|
if (!result)
|
|
return;
|
|
}
|
|
|
|
Panel1.Visible = true;
|
|
|
|
for (var i = 0; i < ddlReportSelect.Items.Count; i++)
|
|
{
|
|
var listItem = ddlReportSelect.Items[i];
|
|
var v = listItem.Value.Split(',');
|
|
if (v.Length > 3 && v[3].Contains(rp))
|
|
{
|
|
listItem.Enabled = true;
|
|
listItem.Attributes.Remove("style");
|
|
}
|
|
else
|
|
{
|
|
listItem.Enabled = false;
|
|
listItem.Attributes.Add("style", "color: gray");
|
|
}
|
|
}
|
|
|
|
ddlBPPNM.DataSource = new BpaaDAC().GetBpaaWithTY(aYYMM.Year);
|
|
ddlBPPNM.DataBind();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 取得總表用資料
|
|
/// </summary>
|
|
protected bool GetSACDData()
|
|
{
|
|
return gd.GetSACDReportData(ddlBPPNM.SelectedValue, aYYMM, out reportData);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 取得薪資勞健保報表資料
|
|
/// </summary>
|
|
protected bool GetSSMSData(bool year)
|
|
{
|
|
return gd.GetSSMSReportData(ddlBPPNM.SelectedValue, aYYMM, year, out reportData);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 取得薪資總表資料
|
|
/// </summary>
|
|
protected bool GetSSMSSummaryData()
|
|
{
|
|
return gd.GetSSMSSummaryReportData(aYYMM, out reportData);
|
|
}
|
|
|
|
// 列印報表
|
|
protected void PrintReport(bool year)
|
|
{
|
|
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;
|
|
|
|
// 取得客戶名稱
|
|
string custName = WDAC.GetStringValue(Query.ExecuteScalar(
|
|
@"SELECT BCNAM FROM BCUS A
|
|
INNER JOIN BPRJ B ON A.BCNUM=B.BPNUM
|
|
INNER JOIN BPAA C ON B.BPPNM=C.BPPNM
|
|
WHERE C.BPPYN='" + ddlBPPNM.SelectedValue + "'"));
|
|
|
|
// 取得公司名稱
|
|
string companyName = CompanyDAC.GetCompanyName(WDAC.GetStringValue(Query.ExecuteScalar(
|
|
@"SELECT BPCPY FROM BPRJ B
|
|
INNER JOIN BPAA C ON B.BPPNM=C.BPPNM
|
|
WHERE C.BPPYN='" + ddlBPPNM.SelectedValue + "'")));
|
|
|
|
// 取得前段、後段、假日加班比例
|
|
double bpbft;
|
|
double bpaft;
|
|
double bphol;
|
|
string bpovr;
|
|
string bplve;
|
|
gd.GetRASN_Overwork_Rate(ddlBPPNM.SelectedValue, out bpbft, out bpaft, out bphol, out bpovr, out bplve);
|
|
|
|
ReportParameter rp = new ReportParameter();
|
|
rp.Add("公司名稱", companyName);
|
|
rp.Add("客戶名稱", custName);
|
|
rp.Add("報表名稱", reportTitle);
|
|
rp.Add("專案名稱", GetLookup("BPAA", ddlBPPNM.SelectedValue, "BPPYM"));
|
|
rp.Add("年度", WGuard1.WNTSA(aYYMM.Year - WGuard1.CY11, "", false) + "年");
|
|
rp.Add("月份", year ? "一月至十二月" : aYYMM.ToString("MMM", WGuard1.TaiwanCulture));
|
|
rp.Add("前段", "一又三分之一");
|
|
rp.Add("後段", "一又三分之二");
|
|
rp.Add("假日", "1");
|
|
rp.Add("休息日延長", "二又三分之二");
|
|
rp.Add("例假日延長", "2");
|
|
switch (aYYMM.Month)
|
|
{
|
|
case 1:
|
|
case 2:
|
|
case 3:
|
|
rp.Add("季", "第一季");
|
|
break;
|
|
case 4:
|
|
case 5:
|
|
case 6:
|
|
rp.Add("季", "第二季");
|
|
break;
|
|
case 7:
|
|
case 8:
|
|
case 9:
|
|
rp.Add("季", "第三季");
|
|
break;
|
|
case 10:
|
|
case 11:
|
|
case 12:
|
|
rp.Add("季", "第四季");
|
|
break;
|
|
}
|
|
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));
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// 報表匯出 Excel
|
|
/// </summary>
|
|
/// <param name="year"></param>
|
|
protected void ExportReport(bool year)
|
|
{
|
|
//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;
|
|
|
|
// 取得客戶名稱
|
|
string custName = WDAC.GetStringValue(Query.ExecuteScalar(
|
|
@"SELECT BCNAM FROM BCUS A
|
|
INNER JOIN BPRJ B ON A.BCNUM=B.BPNUM
|
|
INNER JOIN BPAA C ON B.BPPNM=C.BPPNM
|
|
WHERE C.BPPYN='" + ddlBPPNM.SelectedValue + "'"));
|
|
|
|
// 取得公司名稱
|
|
string companyName = CompanyDAC.GetCompanyName(WDAC.GetStringValue(Query.ExecuteScalar(
|
|
@"SELECT BPCPY FROM BPRJ B
|
|
INNER JOIN BPAA C ON B.BPPNM=C.BPPNM
|
|
WHERE C.BPPYN='" + ddlBPPNM.SelectedValue + "'")));
|
|
|
|
// 取得前段、後段、假日加班比例
|
|
double bpbft;
|
|
double bpaft;
|
|
double bphol;
|
|
string bpovr;
|
|
string bplve;
|
|
gd.GetRASN_Overwork_Rate(ddlBPPNM.SelectedValue, out bpbft, out bpaft, out bphol, out bpovr, out bplve);
|
|
|
|
var 專案名稱 = GetLookup("BPAA", ddlBPPNM.SelectedValue, "BPPYM").Trim();
|
|
var 年度 = WGuard1.WNTSA(aYYMM.Year - WGuard1.CY11, "", false);
|
|
var 月份 = year ? "一月至十二月" : aYYMM.ToString("MMM", WGuard1.TaiwanCulture);
|
|
|
|
companyName = companyName.Trim();
|
|
custName = custName.Trim();
|
|
reportTitle = reportTitle.Trim();
|
|
|
|
Dictionary<string, string> rp = new Dictionary<string, string>
|
|
{
|
|
{ "公司名稱", companyName },
|
|
{ "客戶名稱", custName },
|
|
{ "報表名稱", reportTitle },
|
|
{ "專案名稱", 專案名稱 },
|
|
{ "年度", 年度 + "年" },
|
|
{ "月份", 月份 },
|
|
{ "前段", "1⅓" },
|
|
{ "後段", "1⅔" },
|
|
{ "假日", "1" },
|
|
{ "休息日延長", "2⅔" },
|
|
{ "例假日延長", "2" }
|
|
};
|
|
switch (aYYMM.Month)
|
|
{
|
|
case 1:
|
|
case 2:
|
|
case 3:
|
|
rp.Add("季", "第一季");
|
|
break;
|
|
case 4:
|
|
case 5:
|
|
case 6:
|
|
rp.Add("季", "第二季");
|
|
break;
|
|
case 7:
|
|
case 8:
|
|
case 9:
|
|
rp.Add("季", "第三季");
|
|
break;
|
|
case 10:
|
|
case 11:
|
|
case 12:
|
|
rp.Add("季", "第四季");
|
|
break;
|
|
}
|
|
|
|
var ms = DoExport(rp);
|
|
if (ms != null)
|
|
{
|
|
ResponseWriteFile(ms, String.Format("{0}_{1}_{2}{3}.xls", 專案名稱, reportTitle, 年度, 月份));
|
|
}
|
|
}
|
|
|
|
protected MemoryStream DoExport(Dictionary<string, string> reportParams)
|
|
{
|
|
ExcelReportBase report = null;
|
|
|
|
switch (reportName)
|
|
{
|
|
case "SSMS_01_1":
|
|
report = new 各項法定提撥費用明細表(); break;
|
|
case "SSMS_02A_1":
|
|
report = new 薪資清冊(); break;
|
|
case "RPAR_0X_1":
|
|
case "RPAR_0X_1M":
|
|
report = new 請假明細(); break;
|
|
case "RPAR_1X":
|
|
case "RPAR_1X_1":
|
|
report = new 加班費明細(); break;
|
|
case "RPAR_3X":
|
|
report = new 外勤工作明細表(); break;
|
|
case "RPAR_ALL_2":
|
|
case "RPAR_ALL_2M":
|
|
report = new 出缺勤情形統計表(); break;
|
|
}
|
|
|
|
if (report == null)
|
|
return null;
|
|
|
|
report.資料來源.Tables.Add(reportData);
|
|
report.報表參數 = reportParams;
|
|
report.公司名稱 = reportParams["公司名稱"];
|
|
report.客戶名稱 = reportParams["客戶名稱"];
|
|
report.專案名稱 = reportParams["專案名稱"];
|
|
report.報表名稱 = reportParams["報表名稱"];
|
|
report.年度 = reportParams["年度"];
|
|
report.月份 = reportParams["月份"];
|
|
report.以時分顯示時數 = OverTimeToMinute;
|
|
|
|
return report.產生報表();
|
|
}
|
|
}
|