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.產生報表(); } }