chore: 首次簽入 Thinkyu ASP.NET 專案
- 加入 Visual Studio / ASP.NET .gitignore - 排除建置輸出、IDE 設定、NuGet packages、大型 MSI 安裝檔
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="fmCardDailyReport.ascx.cs"
|
||||
Inherits="forms_report_fmCardDailyReport" %>
|
||||
<%@ Register Assembly="WNET" Namespace="Wellan.Web.UI" TagPrefix="cc1" %>
|
||||
<cc1:WLabel ID="WLabel1" runat="server" CssClass="pageTitle"
|
||||
TextMessageId="">差勤日報表</cc1:WLabel>
|
||||
<asp:CustomValidator ID="cvMessage" runat="server" Display="None"></asp:CustomValidator>
|
||||
<table border="0" cellpadding="0" cellspacing="2">
|
||||
<tr>
|
||||
<td style="text-align: right">
|
||||
<cc1:WLabel ID="lbBPIDN" runat="server" TextMessageId="">日期:</cc1:WLabel>
|
||||
</td>
|
||||
<td>
|
||||
<cc1:WDateTextBox runat="server" ID="txtDate1" />
|
||||
至
|
||||
<cc1:WDateTextBox runat="server" ID="txtDate2" />
|
||||
<cc1:WButton
|
||||
ID="btnDate" runat="server" AccessKey="Y"
|
||||
CssClass="button" OnClick="btnDate_Click"
|
||||
Text="Y.確定日期" />
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: right">
|
||||
<cc1:WLabel ID="WLabel2" runat="server" TextMessageId="">專案:</cc1:WLabel>
|
||||
</td>
|
||||
<td>
|
||||
<cc1:WDropDownList ID="ddlRPPYN"
|
||||
runat="server" CssClass="textInput1"
|
||||
DataTextField="BPPYM" DataValueField="BPPYN"
|
||||
style="min-width:500px">
|
||||
</cc1:WDropDownList>
|
||||
</td>
|
||||
<td class="dataEditCell">
|
||||
<cc1:WButton ID="Next" runat="server"
|
||||
AccessKey="J" CausesValidation="False"
|
||||
CssClass="button" OnClick="Next_Click"
|
||||
Text="J.選擇專案" UseSubmitBehavior="False" />
|
||||
</td>
|
||||
</tr>
|
||||
<asp:Panel runat="server" ID="pnlGroup" Visible="false">
|
||||
<tr>
|
||||
|
||||
<td style="text-align: right">
|
||||
<cc1:WLabel ID="WLabel3" runat="server" TextMessageId="">站別分組:</cc1:WLabel>
|
||||
</td>
|
||||
<td>
|
||||
<div style="float: left">
|
||||
<asp:GridView ID="gvBranch" runat="server" AutoGenerateColumns="false">
|
||||
<Columns>
|
||||
<asp:BoundField DataField="BranchName" HeaderText="站別" />
|
||||
<asp:TemplateField HeaderText="分組順序">
|
||||
<ItemTemplate>
|
||||
<asp:TextBox runat="server" ID="txtGroup" relatevalue='<%# Eval("BranchID") %>' Text='<%# Eval("GroupID") %>' style="width:3em" />
|
||||
</ItemTemplate>
|
||||
</asp:TemplateField>
|
||||
</Columns>
|
||||
</asp:GridView>
|
||||
</div>
|
||||
<div style="float: left; margin-left: 1em; margin-top: 1em; color: blue">
|
||||
提醒您:
|
||||
<ol>
|
||||
<li>分組順序請填寫數字,相同的會歸在一起。</li>
|
||||
<li>分組順序空白者報表不出現。</li>
|
||||
<li>分組順序系統會儲存,供爾後使用。</li>
|
||||
</ol>
|
||||
</div>
|
||||
<div style="clear:both"></div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<cc1:WButton ID="btnOk" runat="server" AccessKey="P" CssClass="button"
|
||||
OnClick="btnOk_Click" Text="P.印表" />
|
||||
</td>
|
||||
</tr>
|
||||
</asp:Panel>
|
||||
</table>
|
||||
|
||||
|
||||
@@ -0,0 +1,191 @@
|
||||
using System;
|
||||
using System.Data;
|
||||
using System.Configuration;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
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;
|
||||
|
||||
public partial class forms_report_fmCardDailyReport : Wellan.Web.UI.WUserControlBase
|
||||
{
|
||||
private RasnDAC rasnDao;
|
||||
private RparDAC rparDao;
|
||||
private ProjectBranchGroupDAC pbgDao;
|
||||
|
||||
private string 公司名稱;
|
||||
private string 專案名稱;
|
||||
private string 客戶名稱;
|
||||
|
||||
private List<ProjectEmployeeItem> 人員Data = null;
|
||||
private List<差勤日報表Item> 請假Data = null;
|
||||
private List<差勤日報表Item> 加班Data = null;
|
||||
private List<差勤日報表Item> 出差Data = null;
|
||||
private List<RASNBRHItem> 站別分組 = null;
|
||||
|
||||
protected void Page_Load(object sender, EventArgs e)
|
||||
{
|
||||
}
|
||||
|
||||
protected override void OnInit(EventArgs e)
|
||||
{
|
||||
base.OnInit(e);
|
||||
|
||||
if (txtDate1.Value.Ticks == 0)
|
||||
txtDate1.Value = DateTime.UtcNow.AddHours(8).Date;
|
||||
if (txtDate2.Value.Ticks == 0)
|
||||
txtDate2.Value = DateTime.UtcNow.AddHours(8).Date;
|
||||
|
||||
SetClientFocus(txtDate1);
|
||||
|
||||
rasnDao = new RasnDAC(Query);
|
||||
rparDao = new RparDAC(Query);
|
||||
pbgDao = new ProjectBranchGroupDAC(Query);
|
||||
}
|
||||
|
||||
protected void btnOk_Click(object sender, EventArgs e)
|
||||
{
|
||||
cvMessage.IsValid = true;
|
||||
cvMessage.ErrorMessage = "";
|
||||
|
||||
if (!CheckProjectRight())
|
||||
return;
|
||||
|
||||
if (!CheckDateValid())
|
||||
return;
|
||||
|
||||
// 取得並儲存畫面輸入的站別歸屬
|
||||
pbgDao.DeleteByProject(ddlRPPYN.SelectedValue);
|
||||
foreach (GridViewRow row in gvBranch.Rows)
|
||||
{
|
||||
var txtGroup = (row.Cells[0].FindControl("txtGroup") as TextBox);
|
||||
if (txtGroup != null)
|
||||
{
|
||||
var group = txtGroup.Text;
|
||||
var branchId = txtGroup.Attributes["relatevalue"];
|
||||
|
||||
if (!string.IsNullOrEmpty(group) && !string.IsNullOrEmpty(branchId))
|
||||
{
|
||||
pbgDao.Insert(ddlRPPYN.SelectedValue, branchId, group);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
專案名稱 = GetLookup("BPAA", ddlRPPYN.SelectedValue, "BPPYM");
|
||||
|
||||
// 取得客戶名稱、公司別
|
||||
公司名稱 = CompanyDAC.GetCompanyName(WDAC.GetStringValue(Query.ExecuteScalar(
|
||||
@"SELECT BPCPY FROM BPRJ B
|
||||
INNER JOIN BPAA C ON B.BPPNM=C.BPPNM
|
||||
WHERE C.BPPYN='" + ddlRPPYN.SelectedValue + "'"))); ;
|
||||
|
||||
客戶名稱 = 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='" + ddlRPPYN.SelectedValue + "'"));
|
||||
|
||||
人員Data = new GetData(Query).GetRASN_DATE_BPPYN(txtDate1.Value, txtDate2.Value, ddlRPPYN.SelectedValue);
|
||||
請假Data = rparDao.取得差勤日報表資料(ddlRPPYN.SelectedValue, txtDate1.Value, txtDate2.Value, RPAR_TYPE.T0_請假);
|
||||
加班Data = rparDao.取得差勤日報表資料(ddlRPPYN.SelectedValue, txtDate1.Value, txtDate2.Value, RPAR_TYPE.T1_加班);
|
||||
出差Data = rparDao.取得差勤日報表資料(ddlRPPYN.SelectedValue, txtDate1.Value, txtDate2.Value, RPAR_TYPE.T3_出差);
|
||||
站別分組 = rasnDao.SelectBranchForReport(ddlRPPYN.SelectedValue);
|
||||
|
||||
if (人員Data.Count != 0)
|
||||
{
|
||||
Do差勤日報表();
|
||||
}
|
||||
else
|
||||
{
|
||||
cvMessage.IsValid = false;
|
||||
cvMessage.ErrorMessage = "無符合條件的資料";
|
||||
}
|
||||
}
|
||||
|
||||
private void Do差勤日報表()
|
||||
{
|
||||
var 報表 = new 差勤日報表();
|
||||
報表.開始日期 = txtDate1.Value;
|
||||
報表.結束日期 = txtDate2.Value;
|
||||
報表.公司名稱 = 公司名稱;
|
||||
報表.客戶名稱 = 客戶名稱;
|
||||
報表.專案名稱 = 專案名稱;
|
||||
報表.專案編號 = ddlRPPYN.SelectedValue;
|
||||
報表.人員Data = 人員Data;
|
||||
報表.請假Data = 請假Data;
|
||||
報表.加班Data = 加班Data;
|
||||
報表.出差Data = 出差Data;
|
||||
報表.站別分組 = 站別分組;
|
||||
報表.以時分顯示時數 = new GetData(Query).GetOverTimeToMinutes(ddlRPPYN.SelectedValue);
|
||||
|
||||
MemoryStream ms = 報表.產生報表();
|
||||
ResponseWriteFile(ms, String.Format("差勤日報表_{0}_{1:yyyyMMdd}_{2:yyyyMMdd}.xls", ddlRPPYN.SelectedValue, txtDate1.Value, txtDate2.Value));
|
||||
}
|
||||
|
||||
protected bool CheckProjectRight()
|
||||
{
|
||||
// 檢查此使用者是否有權限處理這個專案
|
||||
BprmDAC bprm = new BprmDAC(Query);
|
||||
if (!bprm.GetRight(ddlRPPYN.SelectedValue, UserId))
|
||||
{
|
||||
cvMessage.ErrorMessage = "對不起,你沒有處理這個專案的權限!";
|
||||
cvMessage.IsValid = false;
|
||||
pnlGroup.Visible = false;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
protected void Next_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (!CheckProjectRight())
|
||||
return;
|
||||
|
||||
pnlGroup.Visible = true;
|
||||
gvBranch.DataSource = rasnDao.SelectBranchForForm(ddlRPPYN.SelectedValue);
|
||||
gvBranch.DataBind();
|
||||
}
|
||||
|
||||
protected void btnDate_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (!CheckDateValid())
|
||||
return;
|
||||
|
||||
pnlGroup.Visible = false;
|
||||
ddlRPPYN.DataSource = new BpaaDAC().GetBpaa(txtDate1.Value.Year);
|
||||
ddlRPPYN.DataBind();
|
||||
}
|
||||
|
||||
private bool CheckDateValid()
|
||||
{
|
||||
if (txtDate1.Value.Ticks == 0 && txtDate2.Value.Ticks != 0)
|
||||
txtDate1.Value = txtDate2.Value;
|
||||
if (txtDate2.Value.Ticks == 0 && txtDate1.Value.Ticks != 0)
|
||||
txtDate2.Value = txtDate1.Value;
|
||||
|
||||
if (txtDate1.Value.Ticks == 0 || txtDate2.Value.Ticks == 0)
|
||||
{
|
||||
cvMessage.ErrorMessage = "開始日期與結束日期都應輸入!";
|
||||
cvMessage.IsValid = false;
|
||||
return false;
|
||||
}
|
||||
|
||||
// 檢查日期是否跨年
|
||||
if (txtDate1.Value.Year != txtDate2.Value.Year)
|
||||
{
|
||||
cvMessage.ErrorMessage = "日期請勿跨年!";
|
||||
cvMessage.IsValid = false;
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="fmCardReport.ascx.cs"
|
||||
Inherits="forms_report_fmCardReport" %>
|
||||
<%@ Register Assembly="WNET" Namespace="Wellan.Web.UI" TagPrefix="cc1" %>
|
||||
<cc1:WLabel ID="WLabel1" runat="server" CssClass="pageTitle"
|
||||
TextMessageId="">差勤系統報表</cc1:WLabel>
|
||||
<asp:CustomValidator ID="cvMessage" runat="server" Display="None"></asp:CustomValidator>
|
||||
<table border="0" cellpadding="0" cellspacing="2" style="table-layout: fixed">
|
||||
<tr>
|
||||
<td colspan="1" style="height: 0px; width: 40px;"></td>
|
||||
<td colspan="1" style="height: 0px; width: 500px;"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: right">
|
||||
<cc1:WLabel ID="lbBPIDN" runat="server" TextMessageId="">年月:</cc1:WLabel>
|
||||
</td>
|
||||
<td>
|
||||
<asp:TextBox ID="txtYYMM" runat="server" Columns="5" CssClass="textInput1"></asp:TextBox>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: right">
|
||||
<cc1:WLabel ID="WLabel2" runat="server" TextMessageId="">報表:</cc1:WLabel>
|
||||
</td>
|
||||
<td>
|
||||
<asp:RadioButtonList ID="ddlReportSelect" runat="server" CssClass="textInput"
|
||||
CellPadding="5" CellSpacing="0" RepeatColumns="1">
|
||||
<asp:ListItem Value="RPAR_CARD_01,RPAR,差勤月報表" Selected="True">差勤月報表</asp:ListItem>
|
||||
<asp:ListItem Value="RPAR_CARD_02,RPAR_0,請假申請單">請假申請單</asp:ListItem>
|
||||
<asp:ListItem Value="RPAR_CARD_03,RPAR_1,加班申請單">加班申請單</asp:ListItem>
|
||||
<asp:ListItem Value="RPAR_CARD_04,RPAR_3,公差申請單">公差申請單</asp:ListItem>
|
||||
<asp:ListItem Value="RPAR_CARD_05,RPAR_31,差旅費報告單">差旅費報告單</asp:ListItem>
|
||||
<asp:ListItem Value="RPAR_CARD_06,RPAR_1,加班費印領清冊">加班費印領清冊</asp:ListItem>
|
||||
</asp:RadioButtonList>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<cc1:WButton ID="btnOk" runat="server" AccessKey="P" CssClass="button"
|
||||
OnClick="btnOk_Click" Text="P.印表" />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
@@ -0,0 +1,307 @@
|
||||
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;
|
||||
|
||||
/// <summary>
|
||||
/// 差勤系統月報表
|
||||
/// </summary>
|
||||
public partial class forms_report_fmCardReport : Wellan.Web.UI.WUserControlBase
|
||||
{
|
||||
private DataTable reportData = null;
|
||||
private DataTable reportData1 = null;
|
||||
private string reportName = "";
|
||||
private string dataFileName = "";
|
||||
private string reportTitle = "";
|
||||
private DateTime aYYMM;
|
||||
private RparDAC rparDao;
|
||||
private BhrdDAC bhrdDao;
|
||||
private RpadDAC rpadDao;
|
||||
private RtmeDAC rtmeDao;
|
||||
private string 專案編號;
|
||||
private string 公司名稱;
|
||||
private string 專案名稱;
|
||||
private string 客戶名稱;
|
||||
|
||||
protected void Page_Load(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
protected override void OnInit(EventArgs e)
|
||||
{
|
||||
base.OnInit(e);
|
||||
|
||||
if (txtYYMM.Text.Length == 0)
|
||||
txtYYMM.Text = DateTime.UtcNow.AddHours(8).Date.ToString("yyyyMM");
|
||||
|
||||
SetClientFocus(txtYYMM);
|
||||
rparDao = new RparDAC(Query);
|
||||
bhrdDao = new BhrdDAC(Query);
|
||||
rpadDao = new RpadDAC(Query);
|
||||
rtmeDao = new RtmeDAC(Query);
|
||||
}
|
||||
|
||||
protected void btnOk_Click(object sender, EventArgs e)
|
||||
{
|
||||
bool result = true;
|
||||
cvMessage.IsValid = true;
|
||||
cvMessage.ErrorMessage = "";
|
||||
|
||||
aYYMM = CheckDate(txtYYMM.Text + "01", "請輸入正確的年月", ref result, cvMessage);
|
||||
if (!result)
|
||||
return;
|
||||
|
||||
if (aYYMM.ToString("yyyyMM").CompareTo("10104") < 0)
|
||||
{
|
||||
cvMessage.IsValid = false;
|
||||
cvMessage.ErrorMessage = "注意!101 年 4 月之後的資料才可以使用此功能";
|
||||
return;
|
||||
}
|
||||
|
||||
專案編號 = new BpsnDAC(Query).GetProjectByDate(UserId, aYYMM);
|
||||
專案名稱 = GetLookup("BPAA", 專案編號, "BPPYM");
|
||||
|
||||
// 取得客戶名稱、公司別
|
||||
公司名稱 = CompanyDAC.GetCompanyName(WDAC.GetStringValue(Query.ExecuteScalar(
|
||||
@"SELECT BPCPY FROM BPRJ B
|
||||
INNER JOIN BPAA C ON B.BPPNM=C.BPPNM
|
||||
WHERE C.BPPYN='" + 專案編號 + "'"))); ;
|
||||
|
||||
客戶名稱 = 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='" + 專案編號 + "'"));
|
||||
|
||||
string[] tmp = ddlReportSelect.SelectedValue.Split(',');
|
||||
reportName = tmp[0];
|
||||
dataFileName = tmp[1];
|
||||
reportTitle = tmp[2];
|
||||
|
||||
bool hasData = false;
|
||||
switch (dataFileName)
|
||||
{
|
||||
case "RPAR": // 差勤月報表
|
||||
hasData = Get月差勤表資料();
|
||||
break;
|
||||
case "RPAR_0": // 請假申請單
|
||||
hasData = Get出勤資料("請假");
|
||||
break;
|
||||
case "RPAR_1": // 加班申請單, 加班費印領清冊
|
||||
hasData = Get出勤資料("加班");
|
||||
if (reportName == "RPAR_CARD_06")
|
||||
hasData = reportData.Select(
|
||||
string.Format("RPTYP = '{0}' OR RPTYP = '{1}' OR RPTYP = '{2}' OR RPTYP = '{3}'",
|
||||
RPAR_TYPE.T12_非休息日請領加班費,
|
||||
RPAR_TYPE.T14_休息日請領加班費,
|
||||
RPAR_TYPE.T16_國定假日請領加班費,
|
||||
RPAR_TYPE.T18_例假日請領加班費
|
||||
)
|
||||
, "RPRDT").Length > 0;
|
||||
break;
|
||||
case "RPAR_3": // 公差申請單
|
||||
hasData = Get出勤資料("公差");
|
||||
break;
|
||||
case "RPAR_31": // 差旅費報告單
|
||||
hasData = Get出勤資料("差旅費");
|
||||
Get出差費用資料();
|
||||
break;
|
||||
}
|
||||
|
||||
if (hasData)
|
||||
{
|
||||
Do月差勤表(reportTitle);
|
||||
}
|
||||
else
|
||||
{
|
||||
cvMessage.IsValid = false;
|
||||
cvMessage.ErrorMessage = "無符合條件的資料";
|
||||
}
|
||||
}
|
||||
|
||||
private void Do月差勤表(string 類別)
|
||||
{
|
||||
ExcelReportBase 報表 = null;
|
||||
bool 以時分顯示時數 = true;
|
||||
|
||||
switch (類別)
|
||||
{
|
||||
case "差勤月報表":
|
||||
報表 = new 差勤月報表();
|
||||
break;
|
||||
case "請假申請單":
|
||||
報表 = new 請假申請單();
|
||||
以時分顯示時數 = false;
|
||||
break;
|
||||
case "加班申請單":
|
||||
報表 = new 加班申請單();
|
||||
break;
|
||||
case "公差申請單":
|
||||
報表 = new 出差申請單();
|
||||
break;
|
||||
case "差旅費報告單":
|
||||
報表 = new 支出憑證黏存單();
|
||||
break;
|
||||
case "加班費印領清冊":
|
||||
報表 = new 加班費印領清冊();
|
||||
break;
|
||||
}
|
||||
|
||||
if (報表 == null)
|
||||
return;
|
||||
|
||||
報表.資料來源.Tables.Add(reportData);
|
||||
if (reportData1 != null)
|
||||
報表.資料來源.Tables.Add(reportData1);
|
||||
報表.報表時間 = aYYMM;
|
||||
報表.公司名稱 = 公司名稱;
|
||||
報表.客戶名稱 = 客戶名稱;
|
||||
報表.專案名稱 = 專案名稱;
|
||||
報表.專案編號 = 專案編號;
|
||||
報表.以時分顯示時數 = 以時分顯示時數 || new GetData(Query).GetOverTimeToMinutes(專案編號);
|
||||
|
||||
MemoryStream ms = 報表.產生報表();
|
||||
ResponseWriteFile(ms, String.Format("{0}_{1}_{2}.xls", UserId, txtYYMM.Text, 類別));
|
||||
}
|
||||
|
||||
protected bool Get月差勤表資料()
|
||||
{
|
||||
DateTime 日期 = aYYMM;
|
||||
DateTime 下月 = aYYMM.AddMonths(1);
|
||||
reportData = new DataTable();
|
||||
reportData.Columns.Add("日期", typeof(DateTime));
|
||||
reportData.Columns.Add("出勤別", typeof(String));
|
||||
reportData.Columns.Add("員編", typeof(String));
|
||||
reportData.Columns.Add("單位", typeof(String));
|
||||
reportData.Columns.Add("職稱", typeof(String));
|
||||
reportData.Columns.Add("姓名", typeof(String));
|
||||
reportData.Columns.Add("上班", typeof(String));
|
||||
reportData.Columns.Add("下班", typeof(String));
|
||||
reportData.Columns.Add("請假", typeof(String));
|
||||
reportData.Columns.Add("加班", typeof(String));
|
||||
reportData.Columns.Add("公差", typeof(String));
|
||||
reportData.Columns.Add("出差外出", typeof(String));
|
||||
reportData.Columns.Add("出差返回", typeof(String));
|
||||
reportData.Columns.Add("班別名稱", typeof(String));
|
||||
reportData.Columns.Add("班別時間", typeof(String));
|
||||
reportData.Columns.Add("出勤異常", typeof(String));
|
||||
|
||||
BatchService batchService = new BatchService();
|
||||
|
||||
while (日期 < 下月)
|
||||
{
|
||||
DataTable 一天資料 = rparDao.Select出勤資料By人員(日期, UserId);
|
||||
bool 要上班 = !bhrdDao.IsHoliday(UserId, 日期);
|
||||
string 出勤別 = 要上班 ? "上班" : "休假";
|
||||
var btmeItem = rtmeDao.SelectBtmeDay(UserId, 日期);
|
||||
foreach (DataRow r in 一天資料.Rows)
|
||||
{
|
||||
DataRow newRow = reportData.NewRow();
|
||||
newRow["日期"] = 日期;
|
||||
newRow["出勤別"] = 出勤別;
|
||||
newRow["員編"] = r["RANUM"];
|
||||
newRow["單位"] = r["單位"];
|
||||
newRow["職稱"] = r["職稱"];
|
||||
newRow["姓名"] = r["BPNME"];
|
||||
newRow["上班"] = r["RCC01"];
|
||||
newRow["下班"] = r["RCC02"];
|
||||
newRow["請假"] = string.Format("{0:#0}:{1:00}", r["請假時數"], r["請假分數"]);
|
||||
newRow["加班"] = string.Format("{0:#0}:{1:00}", r["加班時數"], r["加班分數"]);
|
||||
newRow["公差"] = string.Format("{0:#0}:{1:00}", r["出差時數"], r["出差分數"]);
|
||||
newRow["出差外出"] = r["RCC07"];
|
||||
newRow["出差返回"] = r["RCC08"];
|
||||
newRow["班別名稱"] = btmeItem != null ? btmeItem.BTNME : "";
|
||||
newRow["班別時間"] = btmeItem != null ? string.Format("{0}-{1}", btmeItem.BTSTM, btmeItem.BTETM) : "";
|
||||
var rapyn = BhrdDAC.GetStringValue(r["RAPYN"]);
|
||||
|
||||
if (!rparDao.IsPunchcardNormal(
|
||||
日期
|
||||
, UserId
|
||||
, rapyn
|
||||
, 要上班
|
||||
, WDAC.GetStringValue(r["RCC01"])
|
||||
, WDAC.GetStringValue(r["RCC02"])
|
||||
, WDAC.GetStringValue(r["RCC07"])
|
||||
, WDAC.GetStringValue(r["RCC08"])
|
||||
).正常)
|
||||
{
|
||||
newRow["出勤異常"] = "(出勤異常)";
|
||||
}
|
||||
|
||||
reportData.Rows.Add(newRow);
|
||||
}
|
||||
|
||||
日期 = 日期.AddDays(1);
|
||||
}
|
||||
|
||||
return reportData.Rows.Count > 0;
|
||||
}
|
||||
|
||||
protected bool Get出勤資料(string 類型)
|
||||
{
|
||||
reportData = rparDao.Select報表資料_013By人員(aYYMM, UserId, 類型);
|
||||
return reportData.Rows.Count > 0;
|
||||
}
|
||||
|
||||
protected void Get出差費用資料()
|
||||
{
|
||||
reportData1 = new DataTable();
|
||||
reportData1.Columns.Add("單號", typeof(String));
|
||||
reportData1.Columns.Add("項次", typeof(Int32));
|
||||
reportData1.Columns.Add("日期", typeof(DateTime));
|
||||
reportData1.Columns.Add("起地點", typeof(String));
|
||||
reportData1.Columns.Add("迄地點", typeof(String));
|
||||
reportData1.Columns.Add("工作摘要", typeof(String));
|
||||
reportData1.Columns.Add("捷運", typeof(Int32));
|
||||
reportData1.Columns.Add("汽車", typeof(Int32));
|
||||
reportData1.Columns.Add("火車", typeof(Int32));
|
||||
reportData1.Columns.Add("高鐵", typeof(Int32));
|
||||
reportData1.Columns.Add("飛機", typeof(Int32));
|
||||
reportData1.Columns.Add("住宿費", typeof(Int32));
|
||||
reportData1.Columns.Add("過路費", typeof(Int32));
|
||||
reportData1.Columns.Add("雜費", typeof(Int32));
|
||||
reportData1.Columns.Add("總計", typeof(Int32));
|
||||
reportData1.Columns.Add("單據號數", typeof(String));
|
||||
reportData1.Columns.Add("備註", typeof(String));
|
||||
|
||||
foreach (DataRow r1 in reportData.Rows)
|
||||
{
|
||||
DataTable t2 = rpadDao.SelectRpar(WDAC.GetStringValue(r1["RPREN"]));
|
||||
foreach (DataRow r2 in t2.Rows)
|
||||
{
|
||||
DataRow newRow = reportData1.NewRow();
|
||||
newRow["單號"] = r2["RPREN"];
|
||||
newRow["項次"] = r2["RPITM"];
|
||||
newRow["日期"] = r2["RPDAT"];
|
||||
newRow["起地點"] = r2["RPSTP"];
|
||||
newRow["迄地點"] = r2["RPEDP"];
|
||||
newRow["工作摘要"] = r1["RPRSN"];
|
||||
newRow["捷運"] = r2["RPF03"];
|
||||
newRow["汽車"] = r2["RPF01"];
|
||||
newRow["火車"] = r2["RPF02"];
|
||||
newRow["高鐵"] = r2["RPF04"];
|
||||
newRow["飛機"] = r2["RPF07"];
|
||||
newRow["住宿費"] = r2["RPF05"];
|
||||
newRow["過路費"] = r2["RPF08"];
|
||||
newRow["雜費"] = r2["RPF06"];
|
||||
newRow["總計"] = r2["RPSUM"];
|
||||
newRow["單據號數"] = r2["RPVCH"];
|
||||
newRow["備註"] = r2["RPDOC"];
|
||||
|
||||
reportData1.Rows.Add(newRow);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,94 @@
|
||||
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="fmDownload.ascx.cs" Inherits="forms_report_fmDownload" %>
|
||||
<%@ Register Assembly="WNET" Namespace="Wellan.Web.UI" TagPrefix="cc1" %>
|
||||
<cc1:WLabel ID="WLabel1" runat="server" CssClass="pageTitle">下載報表檢視器</cc1:WLabel>
|
||||
<div style="font-size: 12pt; line-height:150%">
|
||||
|
||||
<style>
|
||||
li {
|
||||
margin: 10px auto;
|
||||
line-height: 150%;
|
||||
}
|
||||
</style>
|
||||
|
||||
<h3>下載</h3>
|
||||
<ul>
|
||||
<li>下載報表檢視器 <a href="report/CRViewerServer.zip">報表檢視器安裝包</a>
|
||||
</li>
|
||||
<li>下載必要元件安裝包 <a href="report/CRRuntime_32bit_13_0_24.msi">必要元件安裝包</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3>安裝前注意</h3>
|
||||
<ol>
|
||||
<li><p>若先前安裝過舊版本,請至控制台解除安裝 "Maolaoda Report Viewer"</p>
|
||||
<p>Windows 7</p>
|
||||
<img src="picture/uninstall_old_crviewer_win7.png" />
|
||||
<p>Windows 10</p>
|
||||
<img src="picture/uninstall_old_crviewer_win10.png" />
|
||||
</li>
|
||||
</ol>
|
||||
|
||||
<h3>安裝步驟</h3>
|
||||
<ol>
|
||||
<li>
|
||||
下載報表檢視器 <a href="report/CRViewerServer.zip">報表檢視器安裝包</a>
|
||||
</li>
|
||||
<li>
|
||||
將報表檢視器安裝包<b>解壓縮</b>後,執行 Setup 安裝<br />
|
||||
<img src="picture/crserver_files.png" />
|
||||
</li>
|
||||
<li>
|
||||
安裝必要元件 <a href="report/CRRuntime_32bit_13_0_24.msi">必要元件安裝包</a>
|
||||
</li>
|
||||
<li>
|
||||
執行 CRRuntime_32bit_13_0_24.msi 進行必要元件安裝
|
||||
</li>
|
||||
<li>
|
||||
<b>若必要元件安裝失敗</b>,請使用以下步驟:
|
||||
<ul type="square">
|
||||
<li>將 CRRuntime_32bit_13_0_24.msi 複製至「C:\」,方便接下來的操作 </li>
|
||||
<li>點擊開始功能表,輸入「CMD」搜尋</li>
|
||||
<li>於搜尋結果中的「命令提示字元」上按滑鼠右鍵,選擇「以系統管理員身份執行」</li>
|
||||
<li>於「命令提示字元」中輸入「C:\CRRuntime_32bit_13_0_24.msi」按 enter 開始安裝</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>安裝成功之後請重新開機或是執行桌面上的「報表檢視器」捷徑</li>
|
||||
<li>若開機後沒有自動執行,桌面上有「報表檢視器」捷徑,請手動執行</li>
|
||||
<li>報表檢視器會常駐在工具列上<br />
|
||||
Windows 7:<br />
|
||||
<img src="picture/crserver_icon_win7.png" /><br />
|
||||
Windows 10:<br />
|
||||
<img src="picture/crserver_icon_win10.png" /><br />
|
||||
Windows 11:<br />
|
||||
<img src="picture/crserver_icon_win11.png" />
|
||||
</li>
|
||||
<li>可支援各種瀏覽器</li>
|
||||
</ol>
|
||||
|
||||
<h3>注意事項</h3>
|
||||
<ol>
|
||||
<li>報表檢視器可能會被瀏覽器或廣告阻擋軟體誤認為是廣告外掛,<br />
|
||||
若已經安裝好報表檢視器並且已經執行,但依然無法檢視報表時,<br />
|
||||
請設定廣告阻擋軟體,加入此網站為白名單
|
||||
</li>
|
||||
<li>
|
||||
若使用 Chrome、Edge 瀏覽器無法使用報表檢視器,請嘗試這個方法:<br />
|
||||
<ul type="square">
|
||||
<li>
|
||||
於網址列輸入 <b>chrome://flags/</b> 後按 Enter,開啟瀏覽器的旗標設定畫面<br />
|
||||
<img src="picture/chrome_flags.png" />
|
||||
</li>
|
||||
<li>
|
||||
搜尋 <b>Block insecure private network requests</b><br />
|
||||
<img src="picture/chrome_flags_search.png" />
|
||||
</li>
|
||||
<li>
|
||||
將設定改為「Disabled」,然後<b>重開瀏覽器</b><br />
|
||||
<img src="picture/chrome_flags_setok.png" />
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Web;
|
||||
using System.Web.UI;
|
||||
using System.Web.UI.WebControls;
|
||||
|
||||
public partial class forms_report_fmDownload : System.Web.UI.UserControl
|
||||
{
|
||||
protected void Page_Load(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,298 @@
|
||||
<%@ Control Language="C#" AutoEventWireup="true"
|
||||
CodeFile="fmMgmtReport.ascx.cs" Inherits="forms_report_fmMgmtReport" %>
|
||||
<%@ Register Assembly="WNET" Namespace="Wellan.Web.UI"
|
||||
TagPrefix="cc1" %>
|
||||
<cc1:WLabel ID="WLabel1" runat="server" CssClass="pageTitle"
|
||||
TextMessageId="RPTBPSN_ALL_1.NAME"></cc1:WLabel>
|
||||
<asp:CustomValidator ID="cvMessage" runat="server"
|
||||
Display="None"></asp:CustomValidator>
|
||||
<table style="table-layout: fixed" border="0" cellpadding="5" cellspacing="0">
|
||||
<tr>
|
||||
<td colspan="1" style="width: 100px; height: 0px"></td>
|
||||
<td colspan="1" style="width: 120px; height: 0px"></td>
|
||||
<td colspan="1" style="width: 25px; height: 0px"></td>
|
||||
<td colspan="1" style="width: 120px; height: 0px"></td>
|
||||
<td colspan="1" style="width: 120px; height: 0px"></td>
|
||||
<td colspan="1" style="width: 120px; height: 0px"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6">
|
||||
<asp:RadioButtonList ID="rblReport" runat="server" RepeatLayout="Table" CellPadding="5">
|
||||
<asp:ListItem Text="員工資料明細表" Value="BPSN_01,BPSN_01,員工資料明細表"></asp:ListItem>
|
||||
<asp:ListItem Text="員工學歷統計表" Value="BPSN_03,BPSN_01,員工學歷統計表"></asp:ListItem>
|
||||
<asp:ListItem Text="員工年齡統計表" Value="BPSN_04,BPSN_01,員工年齡統計表"></asp:ListItem>
|
||||
<asp:ListItem Text="員工薪資明細表" Value="BPSN_02,BPSN_01,員工薪資明細表"></asp:ListItem>
|
||||
<asp:ListItem Text="投保資料明細表" Value="RPIR_01,RPIR_01,投保資料明細表"></asp:ListItem>
|
||||
<asp:ListItem Text="勞健保異動明細表" Value="RPIR_02,RPIR_01,勞健保異動明細表"></asp:ListItem>
|
||||
</asp:RadioButtonList></td>
|
||||
<!--
|
||||
<asp:ListItem Text="出缺勤情形統計表" Value="RPAR_ALL_1,SSMS_01,出缺勤情形統計表"></asp:ListItem>
|
||||
-->
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="height: 28px; border-bottom: solid 1px black">
|
||||
<asp:Label ID="Label2" runat="server" CssClass="textInput"
|
||||
Font-Bold="True" Style="text-align: center" Text="篩選類型"></asp:Label></td>
|
||||
<td colspan="4" style="height: 28px; border-bottom: solid 1px black">
|
||||
<asp:Label ID="Label3" runat="server" CssClass="textInput"
|
||||
Font-Bold="True" Style="text-align: center" Text="報表條件"></asp:Label></td>
|
||||
<td colspan="1" style="height: 28px; border-bottom: solid 1px black">
|
||||
<asp:Label ID="Label4" runat="server" CssClass="textInput"
|
||||
Font-Bold="True" Style="text-align: center" Text="排序方式"></asp:Label></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="border-right: black 1px solid;">
|
||||
<asp:CheckBox ID="cbbBPENO" runat="server"
|
||||
CssClass="textInput1" Text="員工編號" /></td>
|
||||
<td>
|
||||
<asp:TextBox ID="txtBPENO1" runat="server" CssClass="textInput"></asp:TextBox>
|
||||
</td>
|
||||
<td colspan="1">
|
||||
<asp:Label ID="Label6" runat="server" Text="~"></asp:Label>
|
||||
</td>
|
||||
<td>
|
||||
<asp:TextBox ID="txtBPENO2" runat="server" CssClass="textInput"></asp:TextBox>
|
||||
</td>
|
||||
<td></td>
|
||||
<td colspan="1" rowspan="5" valign="top">
|
||||
<asp:RadioButtonList ID="rblORDER" runat="server">
|
||||
<asp:ListItem Selected="True" Value="A.BPENO">員工編號</asp:ListItem>
|
||||
<asp:ListItem Value="B.RAPYN, A.BPENO">專案</asp:ListItem>
|
||||
</asp:RadioButtonList></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="border-right: black 1px solid;">
|
||||
<asp:CheckBox ID="cbbBPEDY" runat="server"
|
||||
CssClass="textInput1" Text="在職狀況" /></td>
|
||||
<td>
|
||||
<asp:DropDownList ID="ddlBPEDY" runat="server"
|
||||
CssClass="textInput" EnableViewState="False">
|
||||
<asp:ListItem Value="0">不限</asp:ListItem>
|
||||
<asp:ListItem Value="1">在職</asp:ListItem>
|
||||
<asp:ListItem Value="2">離職</asp:ListItem>
|
||||
</asp:DropDownList></td>
|
||||
<td colspan="3"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="border-right: black 1px solid;">
|
||||
<asp:CheckBox ID="cbbBPPNM" runat="server"
|
||||
CssClass="textInput1" Text="專案名稱" /></td>
|
||||
<td colspan="4">
|
||||
<cc1:WDropDownList ID="ddlBPPNM" runat="server"
|
||||
CssClass="textInput" DataTextField="BPPYM"
|
||||
DataValueField="BPPYN">
|
||||
</cc1:WDropDownList></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="border-right: black 1px solid;">
|
||||
<asp:CheckBox ID="cbbBPSDY_PERIOD" runat="server"
|
||||
CssClass="textInput1" Text="到職期間" /><br />
|
||||
<asp:CheckBox ID="cbbBPEDY_PERIOD" runat="server"
|
||||
CssClass="textInput1" Text="離職期間" /><br />
|
||||
<asp:CheckBox ID="cbbPRESENT_PERIOD" runat="server"
|
||||
CssClass="textInput1" Text="出缺勤期間" /></td>
|
||||
<td rowspan="1" valign="middle">
|
||||
<table border="0" cellpadding="0" cellspacing="0"
|
||||
style="width: 100%;">
|
||||
<tr>
|
||||
<td style="width: 100px" valign="middle">
|
||||
<asp:TextBox ID="txtDATE1" runat="server"
|
||||
CssClass="textInput" EnableViewState="False"
|
||||
Text='<%# Bind("BPSDY", "{0:yyyyMMdd}") %>'></asp:TextBox></td>
|
||||
<td valign="middle">
|
||||
<asp:ImageButton ID="btnDATE1_DATE" runat="server"
|
||||
ImageUrl="~/picture/cal.gif" /></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td align="center" rowspan="1" valign="middle">
|
||||
<asp:Label ID="Label1" runat="server" Text="~"></asp:Label></td>
|
||||
<td rowspan="1" valign="middle">
|
||||
<table border="0" cellpadding="0" cellspacing="0"
|
||||
style="width: 100%;">
|
||||
<tr>
|
||||
<td style="width: 100px" valign="middle">
|
||||
<asp:TextBox ID="txtDATE2" runat="server"
|
||||
CssClass="textInput" EnableViewState="False"
|
||||
Text='<%# Bind("BPSDY", "{0:yyyyMMdd}") %>'></asp:TextBox></td>
|
||||
<td valign="middle">
|
||||
<asp:ImageButton ID="btnDATE2_DATE" runat="server"
|
||||
ImageUrl="~/picture/cal.gif" /></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="border-right: black 1px solid;">
|
||||
<asp:CheckBox ID="cbbBPBDY_PERIOD" runat="server"
|
||||
CssClass="textInput1" Text="生日期間" /></td>
|
||||
<td>
|
||||
<asp:DropDownList ID="ddlDATE1" runat="server"
|
||||
CssClass="textInput">
|
||||
<asp:ListItem Text="一月" Value="0101"></asp:ListItem>
|
||||
<asp:ListItem Text="二月" Value="0201"></asp:ListItem>
|
||||
<asp:ListItem Text="三月" Value="0301"></asp:ListItem>
|
||||
<asp:ListItem Text="四月" Value="0401"></asp:ListItem>
|
||||
<asp:ListItem Text="五月" Value="0501"></asp:ListItem>
|
||||
<asp:ListItem Text="六月" Value="0601"></asp:ListItem>
|
||||
<asp:ListItem Text="七月" Value="0701"></asp:ListItem>
|
||||
<asp:ListItem Text="八月" Value="0801"></asp:ListItem>
|
||||
<asp:ListItem Text="九月" Value="0901"></asp:ListItem>
|
||||
<asp:ListItem Text="十月" Value="1001"></asp:ListItem>
|
||||
<asp:ListItem Text="十一月" Value="1101"></asp:ListItem>
|
||||
<asp:ListItem Text="十二月" Value="1201"></asp:ListItem>
|
||||
</asp:DropDownList></td>
|
||||
<td align="center">
|
||||
<asp:Label ID="Label5" runat="server" Text="~"></asp:Label></td>
|
||||
<td>
|
||||
<asp:DropDownList ID="ddlDATE2" runat="server"
|
||||
CssClass="textInput">
|
||||
<asp:ListItem Text="一月" Value="0131"></asp:ListItem>
|
||||
<asp:ListItem Text="二月" Value="0231"></asp:ListItem>
|
||||
<asp:ListItem Text="三月" Value="0331"></asp:ListItem>
|
||||
<asp:ListItem Text="四月" Value="0431"></asp:ListItem>
|
||||
<asp:ListItem Text="五月" Value="0531"></asp:ListItem>
|
||||
<asp:ListItem Text="六月" Value="0631"></asp:ListItem>
|
||||
<asp:ListItem Text="七月" Value="0731"></asp:ListItem>
|
||||
<asp:ListItem Text="八月" Value="0831"></asp:ListItem>
|
||||
<asp:ListItem Text="九月" Value="0931"></asp:ListItem>
|
||||
<asp:ListItem Text="十月" Value="1031"></asp:ListItem>
|
||||
<asp:ListItem Text="十一月" Value="1131"></asp:ListItem>
|
||||
<asp:ListItem Text="十二月" Value="1231"></asp:ListItem>
|
||||
</asp:DropDownList></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="border-right: black 1px solid;">
|
||||
<asp:CheckBox ID="cbbEMPDATE" runat="server"
|
||||
CssClass="textInput1" Text="在職日期" /></td>
|
||||
<td>
|
||||
<table border="0" cellpadding="0"
|
||||
cellspacing="0" style="width: 100%; height: 100%">
|
||||
<tr>
|
||||
<td style="width: 100px">
|
||||
<asp:TextBox ID="txtEMPDATE"
|
||||
runat="server" CssClass="textInput"
|
||||
Text='<%# Bind("BPSDY", "{0:yyyyMMdd}") %>'></asp:TextBox></td>
|
||||
<td>
|
||||
<asp:ImageButton ID="btnEMPDATE_DATE"
|
||||
runat="server" ImageUrl="~/picture/cal.gif" /></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<cc1:WButton ID="btnOk" runat="server" AccessKey="P"
|
||||
CssClass="button" OnClick="btnOk_Click"
|
||||
OnClientClick="ShowProcessing(2000);" Text="P.印表" />
|
||||
|
||||
<script type="text/javascript">
|
||||
var inputControls = [
|
||||
{
|
||||
reportNames: [
|
||||
"BPSN_01", "BPSN_02", "RPIR_01", "RPIR_02"
|
||||
],
|
||||
controlIds: ["FMMGMTREPORT_cbbBPEDY",
|
||||
"FMMGMTREPORT_ddlBPEDY",
|
||||
"FMMGMTREPORT_rblORDER_0",
|
||||
"FMMGMTREPORT_rblORDER_1"],
|
||||
},
|
||||
{
|
||||
reportNames: [
|
||||
"BPSN_01", "BPSN_02", "RPAR_ALL_1", "RPIR_01", "RPIR_02"
|
||||
],
|
||||
controlIds: ["FMMGMTREPORT_cbbBPPNM",
|
||||
"FMMGMTREPORT_ddlBPPNM",
|
||||
"FMMGMTREPORT_rblORDER_0",
|
||||
"FMMGMTREPORT_rblORDER_1"],
|
||||
},
|
||||
{
|
||||
reportNames: [
|
||||
"BPSN_01", "BPSN_02"
|
||||
],
|
||||
controlIds: ["FMMGMTREPORT_cbbBPSDY_PERIOD",
|
||||
"FMMGMTREPORT_cbbBPEDY_PERIOD",
|
||||
"FMMGMTREPORT_txtDATE1",
|
||||
"FMMGMTREPORT_btnDATE1_DATE",
|
||||
"FMMGMTREPORT_txtDATE2",
|
||||
"FMMGMTREPORT_btnDATE2_DATE"],
|
||||
},
|
||||
{
|
||||
reportNames: [
|
||||
"RPAR_ALL_1"
|
||||
],
|
||||
controlIds: ["FMMGMTREPORT_cbbPRESENT_PERIOD",
|
||||
"FMMGMTREPORT_txtDATE1",
|
||||
"FMMGMTREPORT_btnDATE1_DATE",
|
||||
"FMMGMTREPORT_txtDATE2",
|
||||
"FMMGMTREPORT_btnDATE2_DATE"],
|
||||
},
|
||||
{
|
||||
reportNames: [
|
||||
"BPSN_01", "BPSN_02"
|
||||
],
|
||||
controlIds: ["FMMGMTREPORT_cbbBPBDY_PERIOD",
|
||||
"FMMGMTREPORT_ddlDATE1",
|
||||
"FMMGMTREPORT_ddlDATE2"],
|
||||
},
|
||||
{
|
||||
reportNames: [
|
||||
"BPSN_01"
|
||||
],
|
||||
controlIds: ["FMMGMTREPORT_cbbBPENO",
|
||||
"FMMGMTREPORT_txtBPENO1",
|
||||
"FMMGMTREPORT_txtBPENO2"],
|
||||
},
|
||||
{
|
||||
reportNames: [
|
||||
"BPSN_01", "BPSN_02", "BPSN_03", "BPSN_04"
|
||||
],
|
||||
controlIds: ["FMMGMTREPORT_cbbEMPDATE",
|
||||
"FMMGMTREPORT_txtEMPDATE",
|
||||
"FMMGMTREPORT_btnEMPDATE_DATE"]
|
||||
},
|
||||
];
|
||||
|
||||
function inputControl(value) {
|
||||
var tmp = value.split(",");
|
||||
if (tmp.length == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
var reportName = tmp[0];
|
||||
|
||||
for (i = 0; i < inputControls.length; i++) {
|
||||
var inputControl = inputControls[i];
|
||||
for (j = 0; j < inputControl.controlIds.length; j++) {
|
||||
try {
|
||||
var aCtrl = document.getElementById(inputControl.controlIds[j]);
|
||||
aCtrl.disabled = true;
|
||||
if (typeof aCtrl.checked != "undefined")
|
||||
aCtrl.checked = false;
|
||||
}
|
||||
catch
|
||||
{
|
||||
console.log(inputControl.controlIds[j]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < inputControls.length; i++) {
|
||||
var inputControl = inputControls[i];
|
||||
if (inputControl.reportNames.indexOf(reportName) < 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
for (j = 0; j < inputControl.controlIds.length; j++) {
|
||||
try {
|
||||
var aCtrl = document.getElementById(inputControl.controlIds[j]);
|
||||
aCtrl.disabled = false;
|
||||
}
|
||||
catch
|
||||
{
|
||||
console.log(inputControl.controlIds[j]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
@@ -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 "所有日期";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
<%@ Control Language="C#" AutoEventWireup="true"
|
||||
CodeFile="fmYearReport.ascx.cs"
|
||||
Inherits="forms_report_fmYearReport" %>
|
||||
<%@ Register Assembly="WNET" Namespace="Wellan.Web.UI"
|
||||
TagPrefix="cc1" %>
|
||||
<cc1:WLabel ID="WLabel1" runat="server"
|
||||
CssClass="pageTitle" TextMessageId="FMYEARREPORT.NAME"></cc1:WLabel>
|
||||
<asp:CustomValidator ID="cvMessage"
|
||||
runat="server" Display="None"></asp:CustomValidator>
|
||||
<table border="0" cellpadding="0" cellspacing="2">
|
||||
<tr>
|
||||
<td colspan="1" style="height: 0px;"></td>
|
||||
<td colspan="1" style="height: 0px; width: 150px;"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: right">
|
||||
<cc1:WLabel ID="lbBPIDN" runat="server"
|
||||
TextMessageId="">年度(3碼) / 年月(5碼):</cc1:WLabel></td>
|
||||
<td>
|
||||
<asp:TextBox ID="txtYYMM" runat="server"
|
||||
Columns="5" CssClass="textInput1"></asp:TextBox>
|
||||
<cc1:WButton ID="btnYear" runat="server"
|
||||
AccessKey="Y" CssClass="button"
|
||||
OnClick="btnYear_Click" Text="Y.確定" /></td>
|
||||
</tr>
|
||||
</table>
|
||||
<asp:Panel ID="Panel1" runat="server"
|
||||
Width="100%" Visible="False">
|
||||
<table border="0" cellpadding="0"
|
||||
cellspacing="2" style="table-layout: fixed">
|
||||
<tr>
|
||||
<td colspan="1" style="height: 0px; width: 40px;"></td>
|
||||
<td colspan="1" style="width: 500px; height: 0px"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: right">
|
||||
<cc1:WLabel ID="WLabel3" runat="server"
|
||||
TextMessageId="">專案:</cc1:WLabel></td>
|
||||
<td>
|
||||
<cc1:WDropDownList ID="ddlBPPNM"
|
||||
runat="server" CssClass="textInput"
|
||||
DataTextField="BPPYM" DataValueField="BPPYN">
|
||||
</cc1:WDropDownList></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: right; padding-top: 5px;" valign="top">
|
||||
<cc1:WLabel ID="WLabel2" runat="server"
|
||||
TextMessageId="">報表:</cc1:WLabel></td>
|
||||
<td>
|
||||
<asp:RadioButtonList ID="ddlReportSelect"
|
||||
runat="server" CssClass="textInput" CellPadding="5" CellSpacing="0" RepeatColumns="2" RepeatLayout="Table">
|
||||
<%-- <asp:ListItem Value="SACD_01B,SACD_01,經費核銷累計總表,MONTH" Selected="True">經費核銷年度總表</asp:ListItem>
|
||||
<asp:ListItem Value="SACD_02,SACD_01,經費核銷一覽表,MONTH">經費核銷季報表</asp:ListItem>
|
||||
<asp:ListItem Value="SACD_03,SACD_01,經費核銷一覽表,MONTH">經費核銷月報表</asp:ListItem>--%>
|
||||
<asp:ListItem Value="SSMS_01_1,SSMS_01,各項法定提撥費用明細表,MONTH">各項法定提撥費用明細表</asp:ListItem>
|
||||
<asp:ListItem Value="SSMS_02A_1,SSMS_01,薪資清冊,MONTH">薪資清冊</asp:ListItem>
|
||||
<%-- <asp:ListItem Value="SSMS_02B_1,SSMS_01,薪資清冊,MONTH">薪資清冊(多媽媽)</asp:ListItem>--%>
|
||||
<%-- <asp:ListItem Value="SSMS_02C_1,SSMS_01,薪資明細表(內部發薪),MONTH">薪資明細表(內部發薪)</asp:ListItem>--%>
|
||||
<asp:ListItem Value="RPAR_0X_1,SSMS_01,請假明細,MONTH">請假明細</asp:ListItem>
|
||||
<asp:ListItem Value="RPAR_1X,SSMS_01,加班費明細,YEAR|MONTH">加班費明細</asp:ListItem>
|
||||
<asp:ListItem Value="RPAR_3X,SSMS_01,外勤工作明細表,MONTH">外勤工作明細表</asp:ListItem>
|
||||
<%-- <asp:ListItem Value="RPAR_3X,SSMS_01,差旅費明細,MONTH">差旅費明細(多媽媽)</asp:ListItem>
|
||||
<asp:ListItem Value="RPAR_21,SSMS_01,電話費請領清冊,MONTH">電話費明細(多媽媽)</asp:ListItem>
|
||||
<asp:ListItem Value="RPAR_22,SSMS_01,油料補助費明細,MONTH">油料費明細(多媽媽)</asp:ListItem>
|
||||
<asp:ListItem Value="RPAR_3X22,SSMS_01,外勤工作費明細,MONTH">外勤工作費明細(多媽媽)</asp:ListItem>--%>
|
||||
<%-- <asp:ListItem Value="SSMS_03,SSMS_02,薪資總表,MONTH">薪資總表</asp:ListItem>--%>
|
||||
<asp:ListItem Value="RPAR_ALL_2,SSMS_01,出缺勤情形統計表,YEAR|MONTH">出缺勤情形統計表</asp:ListItem>
|
||||
</asp:RadioButtonList>
|
||||
<cc1:WButton ID="btnOk" runat="server"
|
||||
AccessKey="P" CssClass="button"
|
||||
OnClick="btnOk_Click" OnClientClick="ShowProcessing(2000);"
|
||||
Text="P.印表" /></td>
|
||||
</tr>
|
||||
</table>
|
||||
</asp:Panel>
|
||||
@@ -0,0 +1,397 @@
|
||||
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.產生報表();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user