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;
///
/// 專案報表
///
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();
}
///
/// 取得總表用資料
///
protected bool GetSACDData()
{
return gd.GetSACDReportData(ddlBPPNM.SelectedValue, aYYMM, out reportData);
}
///
/// 取得薪資勞健保報表資料
///
protected bool GetSSMSData(bool year)
{
return gd.GetSSMSReportData(ddlBPPNM.SelectedValue, aYYMM, year, out reportData);
}
///
/// 取得薪資總表資料
///
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));
}
///
/// 報表匯出 Excel
///
///
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 rp = new Dictionary
{
{ "公司名稱", 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 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.產生報表();
}
}