chore: 首次簽入 Thinkyu ASP.NET 專案

- 加入 Visual Studio / ASP.NET .gitignore
- 排除建置輸出、IDE 設定、NuGet packages、大型 MSI 安裝檔
This commit is contained in:
2026-09-10 09:42:37 +08:00
commit 577060bc78
2496 changed files with 501389 additions and 0 deletions
+341
View File
@@ -0,0 +1,341 @@
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="fmCardSearch.ascx.cs"
Inherits="forms_punchcard_fmCardSearch" %>
<%@ Register Assembly="WNET" Namespace="Wellan.Web.UI" TagPrefix="cc1" %>
<cc1:WLabel ID="lbFunctionName" runat="server" CssClass="pageTitle"
Text="打卡查詢/補打卡/誤打卡處理" TextMessageId=""></cc1:WLabel>
<asp:CustomValidator ID="cvMessage" runat="server" Display="None"></asp:CustomValidator>
<asp:MultiView ID="MultiView1" runat="server"
ActiveViewIndex="0">
<asp:View ID="View補打" runat="server">
<table border="0" cellpadding="3" cellspacing="0">
<tr>
<td align="right">
<asp:Label ID="Label1" runat="server" Text="年度:"></asp:Label>
</td>
<td>
<asp:TextBox ID="txtYear" runat="server" Columns="4"></asp:TextBox>
</td>
<td>
<asp:Button ID="btnYY" runat="server" CssClass="button" OnClick="btnYY_Click"
Text="確定年度" />
</td>
</tr>
<tr>
<td align="right">
<cc1:WLabel ID="WLabel3" runat="server" TextMessageId="">專案:</cc1:WLabel>
</td>
<td class="dataEditCell">
<cc1:WDropDownList ID="ddlROPYN" runat="server"
CssClass="textInput1" DataTextField="BPPYM"
DataValueField="BPPYN" Width="500px">
</cc1:WDropDownList>
</td>
</tr>
<tr>
<td align="right">
<cc1:WLabel ID="WLabel4" runat="server" TextMessageId="">日期:</cc1:WLabel>
</td>
<td class="dataEditCell">
<cc1:WDateTextBox ID="txtDate" runat="server"
Width="100px" />
</td>
<td class="dataEditCell">
<cc1:WButton ID="btnSearch" runat="server"
CausesValidation="False" CssClass="button"
OnClick="btnSearch_Click" Text="查詢"
UseSubmitBehavior="False" />
</td>
</tr>
<tr>
<td align="right">
<cc1:WLabel ID="WLabel5" runat="server" TextMessageId="">補打時間:</cc1:WLabel>
</td>
<td class="dataEditCell">
<table>
<tr>
<td>
<asp:DropDownList ID="ddlHH" runat="server">
<asp:ListItem Text="00" Value="00" />
<asp:ListItem Text="01" Value="01" />
<asp:ListItem Text="02" Value="02" />
<asp:ListItem Text="03" Value="03" />
<asp:ListItem Text="04" Value="04" />
<asp:ListItem Text="05" Value="05" />
<asp:ListItem Text="06" Value="06" />
<asp:ListItem Text="07" Value="07" />
<asp:ListItem Text="08" Value="08" />
<asp:ListItem Text="09" Value="09" />
<asp:ListItem Text="10" Value="10" />
<asp:ListItem Text="11" Value="11" />
<asp:ListItem Text="12" Value="12" />
<asp:ListItem Text="13" Value="13" />
<asp:ListItem Text="14" Value="14" />
<asp:ListItem Text="15" Value="15" />
<asp:ListItem Text="16" Value="16" />
<asp:ListItem Text="17" Value="17" />
<asp:ListItem Text="18" Value="18" />
<asp:ListItem Text="19" Value="19" />
<asp:ListItem Text="20" Value="20" />
<asp:ListItem Text="21" Value="21" />
<asp:ListItem Text="22" Value="22" />
<asp:ListItem Text="23" Value="23" />
<asp:ListItem Text="24" Value="24" />
<asp:ListItem Text="25" Value="25" />
<asp:ListItem Text="26" Value="26" />
<asp:ListItem Text="27" Value="27" />
<asp:ListItem Text="28" Value="28" />
<asp:ListItem Text="29" Value="29" />
</asp:DropDownList>
</td>
<td>
<cc1:WLabel ID="WLabel6" runat="server" TextMessageId=""></cc1:WLabel>
</td>
<td>
<asp:DropDownList ID="ddlMM" runat="server">
<asp:ListItem Text="00" Value="00" />
<asp:ListItem Text="01" Value="01" />
<asp:ListItem Text="02" Value="02" />
<asp:ListItem Text="03" Value="03" />
<asp:ListItem Text="04" Value="04" />
<asp:ListItem Text="05" Value="05" />
<asp:ListItem Text="06" Value="06" />
<asp:ListItem Text="07" Value="07" />
<asp:ListItem Text="08" Value="08" />
<asp:ListItem Text="09" Value="09" />
<asp:ListItem Text="10" Value="10" />
<asp:ListItem Text="11" Value="11" />
<asp:ListItem Text="12" Value="12" />
<asp:ListItem Text="13" Value="13" />
<asp:ListItem Text="14" Value="14" />
<asp:ListItem Text="15" Value="15" />
<asp:ListItem Text="16" Value="16" />
<asp:ListItem Text="17" Value="17" />
<asp:ListItem Text="18" Value="18" />
<asp:ListItem Text="19" Value="19" />
<asp:ListItem Text="20" Value="20" />
<asp:ListItem Text="21" Value="21" />
<asp:ListItem Text="22" Value="22" />
<asp:ListItem Text="23" Value="23" />
<asp:ListItem Text="24" Value="24" />
<asp:ListItem Text="25" Value="25" />
<asp:ListItem Text="26" Value="26" />
<asp:ListItem Text="27" Value="27" />
<asp:ListItem Text="28" Value="28" />
<asp:ListItem Text="29" Value="29" />
<asp:ListItem Text="30" Value="30" />
<asp:ListItem Text="31" Value="31" />
<asp:ListItem Text="32" Value="32" />
<asp:ListItem Text="33" Value="33" />
<asp:ListItem Text="34" Value="34" />
<asp:ListItem Text="35" Value="35" />
<asp:ListItem Text="36" Value="36" />
<asp:ListItem Text="37" Value="37" />
<asp:ListItem Text="38" Value="38" />
<asp:ListItem Text="39" Value="39" />
<asp:ListItem Text="40" Value="40" />
<asp:ListItem Text="41" Value="41" />
<asp:ListItem Text="42" Value="42" />
<asp:ListItem Text="43" Value="43" />
<asp:ListItem Text="44" Value="44" />
<asp:ListItem Text="45" Value="45" />
<asp:ListItem Text="46" Value="46" />
<asp:ListItem Text="47" Value="47" />
<asp:ListItem Text="48" Value="48" />
<asp:ListItem Text="49" Value="49" />
<asp:ListItem Text="50" Value="50" />
<asp:ListItem Text="51" Value="51" />
<asp:ListItem Text="52" Value="52" />
<asp:ListItem Text="53" Value="53" />
<asp:ListItem Text="54" Value="54" />
<asp:ListItem Text="55" Value="55" />
<asp:ListItem Text="56" Value="56" />
<asp:ListItem Text="57" Value="57" />
<asp:ListItem Text="58" Value="58" />
<asp:ListItem Text="59" Value="59" />
</asp:DropDownList>
</td>
<td> (請輸入「人員工作地」時間)</td>
</tr>
</table>
</td>
<td class="dataEditCell">
</td>
</tr>
</table>
</asp:View>
<asp:View ID="View查詢" runat="server">
<table border="0" cellpadding="3" cellspacing="0">
<tr>
<td align="right">
<cc1:WLabel ID="WLabel7" runat="server" TextMessageId="">日期:</cc1:WLabel>
</td>
<td class="dataEditCell">
<table>
<tr>
<td>
<cc1:WDateTextBox ID="txtDate1" runat="server"
Width="100px" />
</td>
<td>&nbsp;&nbsp;
</td>
<td>
<cc1:WDateTextBox ID="txtDate2" runat="server"
Width="100px" />
</td>
</tr>
</table>
</td>
<td class="dataEditCell">
<cc1:WButton ID="btn確定日期" runat="server"
CausesValidation="False" CssClass="button"
OnClick="btn確定日期_Click" Text="確定日期"
UseSubmitBehavior="False" />
</td>
</tr>
<tr>
<td align="right">
<cc1:WLabel ID="WLabel8" runat="server" TextMessageId="">專案:</cc1:WLabel>
</td>
<td class="dataEditCell">
<cc1:WDropDownList ID="ddl專案" runat="server"
CssClass="textInput1" Width="500px">
</cc1:WDropDownList>
</td>
<td class="dataEditCell">
<cc1:WButton ID="btn確定專案" runat="server"
CausesValidation="False" CssClass="button"
OnClick="btn確定專案_Click" Text="確定專案"
UseSubmitBehavior="False" />
</td>
</tr>
<tr>
<td align="right">
<cc1:WLabel ID="WLabel9" runat="server" TextMessageId="">人員:</cc1:WLabel>
</td>
<td class="dataEditCell">
<cc1:WDropDownList ID="ddl人員" runat="server"
CssClass="textInput1" Width="500px">
</cc1:WDropDownList>
<br />(查詢時不選擇人員,會讓查詢速度緩慢,請斟酌使用)
</td>
<td class="dataEditCell">
<cc1:WButton ID="btn查詢" runat="server"
CausesValidation="False" CssClass="button"
OnClick="btn查詢_Click" Text="查詢" UseSubmitBehavior="False" />
</td>
</tr>
</table>
</asp:View>
</asp:MultiView>
<asp:ObjectDataSource ID="dsCard" runat="server"
OldValuesParameterFormatString="original_{0}"
OnSelecting="dsCard_Selecting" SelectMethod="Select出勤資料"
TypeName="RparDAC">
<SelectParameters>
<asp:Parameter Name="起日" Type="DateTime" />
<asp:Parameter Name="迄日" Type="DateTime" />
<asp:Parameter Name="年度專案" Type="String" />
<asp:Parameter Name="人員編號" />
</SelectParameters>
</asp:ObjectDataSource>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataKeyNames="人員編號" DataSourceID="dsCard" EnableModelValidation="True"
OnRowCommand="GridView1_RowCommand" AllowPaging="True"
PageSize="15" OnRowDataBound="GridView1_RowDataBound">
<Columns>
<asp:BoundField DataField="日期" HeaderText="日期" ReadOnly="True" DataFormatString="{0:yyyyMMdd (ddd)}" />
<asp:BoundField DataField="人員編號" HeaderText="人員編號" ReadOnly="True" />
<asp:BoundField DataField="人員姓名" HeaderText="人員姓名" />
<asp:BoundField DataField="上班時間" HeaderText="上班" />
<asp:BoundField DataField="上班IP" HeaderText="上班IP" />
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="Button1" runat="server" CommandArgument='<%# Eval("人員編號") %>'
CommandName="PUNCH1" Text="補打"
Enabled='<%# Eval("上班時間", "{0:c}").Trim().Length == 0 %>' />
<asp:Button ID="Button2" runat="server" CommandArgument='<%# Eval("人員編號") %>'
CommandName="CLEAR1" Text="清除" OnClientClick="return confirm('是否確定清除此人員上班打卡?');"
Enabled='<%# Eval("上班時間", "{0:c}").Trim().Length > 0 %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="出差外出時間" HeaderText="出差外出" />
<asp:BoundField DataField="出差外出IP" HeaderText="出差外出IP" />
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="Button5" runat="server" CommandArgument='<%# Eval("人員編號") %>'
CommandName="PUNCH7" Text="補打"
Enabled='<%# Eval("出差外出時間", "{0:c}").Trim().Length == 0 %>' />
<asp:Button ID="Button6" runat="server" CommandArgument='<%# Eval("人員編號") %>'
CommandName="CLEAR7" Text="清除" OnClientClick="return confirm('是否確定清除此人員出差外出打卡?');"
Enabled='<%# Eval("出差外出時間", "{0:c}").Trim().Length > 0 %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="出差返回時間" HeaderText="出差返回" />
<asp:BoundField DataField="出差返回IP" HeaderText="出差返回IP" />
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="Button7" runat="server" CommandArgument='<%# Eval("人員編號") %>'
CommandName="PUNCH8" Text="補打"
Enabled='<%# Eval("出差返回時間", "{0:c}").Trim().Length == 0 %>' />
<asp:Button ID="Button8" runat="server" CommandArgument='<%# Eval("人員編號") %>'
CommandName="CLEAR8" Text="清除" OnClientClick="return confirm('是否確定清除此人員出差返回打卡?');"
Enabled='<%# Eval("出差返回時間", "{0:c}").Trim().Length > 0 %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="下班時間" HeaderText="下班" />
<asp:BoundField DataField="下班IP" HeaderText="下班IP" />
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="Button3" runat="server" CommandArgument='<%# Eval("人員編號") %>'
CommandName="PUNCH2" Text="補打"
Enabled='<%# Eval("下班時間", "{0:c}").Trim().Length == 0 %>' />
<asp:Button ID="Button4" runat="server" CommandArgument='<%# Eval("人員編號") %>'
CommandName="CLEAR2" Text="清除" OnClientClick="return confirm('是否確定清除此人員下班打卡?');"
Enabled='<%# Eval("下班時間", "{0:c}").Trim().Length > 0 %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="請假時數" SortExpression="請假時數">
<ItemTemplate>
<asp:Label ID="lb請假時數" runat="server"
Text='<%# String.Format("{0:##0}:{1:00}", Eval("請假時數"), Eval("請假分數")) %>'></asp:Label>
</ItemTemplate>
<ItemStyle HorizontalAlign="Center" />
</asp:TemplateField>
<asp:TemplateField HeaderText="出差時數" SortExpression="出差時數">
<ItemTemplate>
<asp:Label ID="lb出差時數" runat="server"
Text='<%# String.Format("{0:##0}:{1:00}", Eval("出差時數"), Eval("出差分數")) %>'></asp:Label>
</ItemTemplate>
<ItemStyle HorizontalAlign="Center"></ItemStyle>
</asp:TemplateField>
<asp:TemplateField HeaderText="加班時數" SortExpression="加班時數">
<ItemTemplate>
<asp:Label ID="lb加班時數" runat="server"
Text='<%# String.Format("{0:##0}:{1:00}", Eval("加班時數"), Eval("加班分數")) %>'></asp:Label>
</ItemTemplate>
<ItemStyle HorizontalAlign="Center" />
</asp:TemplateField>
<asp:TemplateField HeaderText="備註">
<ItemTemplate>
<asp:Label ID="lb備註" runat="server"
Text='<%# Eval("備註") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<PagerTemplate>
<cc1:WGridViewPager ID="WGridViewPager1" runat="server" />
</PagerTemplate>
</asp:GridView>
+216
View File
@@ -0,0 +1,216 @@
using System;
using System.Data;
using System.Web.UI.WebControls;
using Wellan.Common;
using Wellan.Data;
public partial class forms_punchcard_fmCardSearch : Wellan.Web.UI.WUserControlBase
{
private DateTime date;
private RcrdDAC rcrdDao;
private bool _canEdit = true;
public bool CanEdit
{
get
{
return _canEdit;
}
set
{
_canEdit = value;
}
}
private void SetColumn()
{
if (_canEdit)
{
MultiView1.ActiveViewIndex = 0;
GridView1.Columns[0].Visible = false;
}
else
{
MultiView1.ActiveViewIndex = 1;
lbFunctionName.Text = "出勤查詢";
// GridView1.Columns[4].Visible = false;
GridView1.Columns[5].Visible = false;
GridView1.Columns[7].Visible = false;
GridView1.Columns[8].Visible = false;
GridView1.Columns[10].Visible = false;
GridView1.Columns[11].Visible = false;
GridView1.Columns[13].Visible = false;
GridView1.Columns[14].Visible = false;
}
}
protected void Page_Load(object sender, EventArgs e)
{
if (txtDate.Text == "")
txtDate.Text = DateTime.UtcNow.AddHours(8).Date.ToString("yyyyMMdd");
if (txtDate1.Text == "")
txtDate1.Text = WGuard1.WDAYTRAN(DateTime.UtcNow.AddHours(8).Date, 1).ToString("yyyyMMdd");
if (txtDate2.Text == "")
txtDate2.Text = WGuard1.WDAYTRAN(DateTime.UtcNow.AddHours(8).Date, 31).ToString("yyyyMMdd");
//if (IsPostBack)
// GridView1.DataBind();
}
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
rcrdDao = new RcrdDAC(Query);
SetColumn();
}
protected void btnYY_Click(object sender, EventArgs e)
{
ddlROPYN.DataSource = new BpaaDAC().GetBpaa(WDAC.GetInt32Value(txtYear.Text) + WGuard1.CY11);
ddlROPYN.DataValueField = "BPPYN";
ddlROPYN.DataTextField = "BPPYM";
ddlROPYN.DataBind();
}
protected void btnSearch_Click(object sender, EventArgs e)
{
if (!CheckProjectRight())
return;
GridView1.DataBind();
}
protected void dsCard_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
{
if (CanEdit)
{
CheckDate(txtDate.Text, out date);
if (date.Ticks == 0)
return;
e.InputParameters["起日"] = date;
e.InputParameters["迄日"] = date;
e.InputParameters["年度專案"] = ddlROPYN.SelectedValue;
e.InputParameters["人員編號"] = "";
}
else
{
DateTime date1;
CheckDate(txtDate1.Text, out date1);
DateTime date2;
CheckDate(txtDate2.Text, out date2);
if (date1.Ticks != 0 && date2.Ticks == 0)
date2 = date1;
else if (date2.Ticks != 0 && date1.Ticks == 0)
date1 = date2;
e.InputParameters["起日"] = date1;
e.InputParameters["迄日"] = date2;
e.InputParameters["年度專案"] = ddl專案.SelectedValue;
e.InputParameters["人員編號"] = ddl人員.SelectedValue;
}
}
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (!CheckProjectRight())
return;
CheckDate(txtDate.Text, out date);
if (date.Ticks == 0)
return;
var punchTime = ddlHH.SelectedValue + ":" + ddlMM.SelectedValue + ":00";
var dataAndTime = new DateAndTime(date, date, punchTime, date, punchTime, "台北", "Taipei Standard Time");
switch (e.CommandName)
{
case "PUNCH1": // 補打上班
rcrdDao.PunchRCC01(dataAndTime, e.CommandArgument.ToString(), "補打卡", true);
break;
case "CLEAR1": // 清除上班
rcrdDao.ClearRCC01(date, e.CommandArgument.ToString());
break;
case "PUNCH2": // 補打下班
rcrdDao.PunchRCC02(dataAndTime, e.CommandArgument.ToString(), "補打卡", true);
break;
case "CLEAR2": // 清除下班
rcrdDao.ClearRCC02(date, e.CommandArgument.ToString());
break;
case "PUNCH7": // 補打出差外出
rcrdDao.PunchRCC07(dataAndTime, e.CommandArgument.ToString(), "補打卡", true);
break;
case "CLEAR7": // 清除出差外出
rcrdDao.ClearRCC07(date, e.CommandArgument.ToString());
break;
case "PUNCH8": // 補打出差返回
rcrdDao.PunchRCC08(dataAndTime, e.CommandArgument.ToString(), "補打卡", true);
break;
case "CLEAR8": // 清除出差返回
rcrdDao.ClearRCC08(date, e.CommandArgument.ToString());
break;
}
GridView1.DataBind();
}
protected void btn確定日期_Click(object sender, EventArgs e)
{
ddl專案.DataSource = new BsgpDAC().(txtDate1.Value.Ticks > 0 ? txtDate1.Value.Year - WGuard1.CY11 : 0,
txtDate2.Value.Ticks > 0 ? txtDate2.Value.Year - WGuard1.CY11 : 0, UserId);
ddl專案.DataValueField = "BSPYN";
ddl專案.DataTextField = "BPPYM";
ddl專案.DataBind();
}
protected void btn查詢_Click(object sender, EventArgs e)
{
GridView1.PageIndex = 0;
GridView1.DataBind();
}
protected void btn確定專案_Click(object sender, EventArgs e)
{
if (!CheckProjectRight())
return;
DateTime date1;
CheckDate(txtDate1.Text, out date1);
DateTime date2;
CheckDate(txtDate2.Text, out date2);
DataTable t = new GetData(Query).GetRASN_DATE_BPPYN(date1, date2, ddl專案.SelectedValue, null);
ddl人員.Items.Clear();
ddl人員.Items.Add(new ListItem("(請選擇)", ""));
foreach (DataRow r in t.Rows)
{
ddl人員.Items.Add(new ListItem(String.Format("{0} {1}", r["RANUM"], r["BPNME"]), r["RANUM"].ToString()));
}
}
protected bool CheckProjectRight()
{
// 檢查此使用者是否有權限處理這個專案
// 20230324 移除專案權限檢查
//var bppyn = ddlROPYN.SelectedValue;
//if (!CanEdit)
// bppyn = ddl專案.SelectedValue;
//BprmDAC bprm = new BprmDAC(Query);
//if (!bprm.GetRight(bppyn, UserId))
//{
// //MultiView1.Visible = false;
// cvMessage.ErrorMessage = "對不起,你沒有處理這個專案的權限!";
// cvMessage.IsValid = false;
// return false;
//}
return true;
}
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
//GridView_RowDataBound_Shrink_ViewState(sender, e);
}
}
+207
View File
@@ -0,0 +1,207 @@
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="fmPunchCard.ascx.cs"
Inherits="forms_worker_fmPunchCard" %>
<%@ Register Assembly="WNET" Namespace="Wellan.Web.UI" TagPrefix="cc1" %>
<cc1:WLabel ID="WLabel1" runat="server" CssClass="pageTitle"
Text="打卡作業"></cc1:WLabel>
<asp:CustomValidator ID="cvMessage" runat="server" Display="None"></asp:CustomValidator>
<style type="text/css">
.style2 {
font-size: 30pt;
color: Blue;
font-weight: bold;
}
.style3 {
font-size: 18pt;
font-weight: bold;
line-height: 150%;
}
.style4 {
font-size: 18pt;
font-weight: bold;
line-height: 150%;
color: Red;
}
.buttonOnDuty {
font-size: 36pt;
font-weight: bold;
color: Black;
}
.buttonOffDuty {
font-size: 36pt;
font-weight: bold;
color: Black;
}
</style>
<center>
<table border="1" cellpadding="15" cellspacing="0">
<tr>
<td colspan="2" align="center">
<span <%= showTWTime ? "class='style2'" : "class='hide'" %> >台灣 </span>
<span id="lbCurrentTimeTW" class="style2">0000-00-00 00:00:00</span>
<span <%= showTWTime ? "class='style2'" : "class='hide'" %> ><br />本地 </span>
<span id="lbCurrentTimeLocal" <%= showTWTime ? "class='style2'" : "class='hide'" %>>0000-00-00 00:00:00</span>
</td>
</tr>
<tr>
<td>
<cc1:WButton ID="btnOnDuty" runat="server" Text="上班打卡" CssClass="buttonOnDuty"
OnClick="btnOnDuty_Click" style="font-size: 36pt; height: auto;"
OnClientClick="if(!confirm(&quot;是否確定「上班打卡」?&quot;)) return;"
UseSubmitBehavior="False" />
</td>
<td width="300" align="center">
<cc1:WLabel ID="lbOnDuty" runat="server" CssClass="style2" EnableViewState="False"
TextMessageId=""></cc1:WLabel>
</td>
</tr>
<tr>
<td>
<cc1:WButton ID="btnOut" runat="server" Text="出差外出" CssClass="buttonOnDuty"
OnClick="btnOut_Click" style="font-size: 36pt; height: auto;"
OnClientClick="if(!confirm(&quot;是否確定「出差外出」?&quot;)) return;"
UseSubmitBehavior="False" />
</td>
<td width="300" align="center">
<cc1:WLabel ID="lbOut" runat="server" CssClass="style2" EnableViewState="False"
TextMessageId=""></cc1:WLabel>
</td>
</tr>
<tr>
<td>
<cc1:WButton ID="btnBack" runat="server" Text="出差返回" CssClass="buttonOnDuty"
OnClick="btnBack_Click" style="font-size: 36pt; height: auto;"
OnClientClick="if(!confirm(&quot;是否確定「出差返回」?&quot;)) return;"
UseSubmitBehavior="False" />
</td>
<td width="300" align="center">
<cc1:WLabel ID="lbBack" runat="server" CssClass="style2" EnableViewState="False"
TextMessageId=""></cc1:WLabel>
</td>
</tr>
<tr>
<td>
<cc1:WButton ID="btnOffDuty" runat="server" Text="下班打卡" CssClass="buttonOffDuty"
OnClick="btnOffDuty_Click" style="font-size: 36pt; height: auto;"
OnClientClick="if (!confirm(&quot;是否確定「下班打卡」?&quot;)) return;"
UseSubmitBehavior="False" />
</td>
<td align="center">
<cc1:WLabel ID="lbOffDuty" runat="server" CssClass="style2" EnableViewState="False"
TextMessageId=""></cc1:WLabel>
</td>
</tr>
</table>
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td>
<div class="style3" style="text-align: left">
<br />
請注意:
<ol>
<li>打卡時間以主機時間為準,畫面上時間僅為參考之用。</li>
<li>主機每週會與國家時間伺服器對時。</li>
<li class="style4">打卡後無法取消,請注意不要按錯。</li>
<li>派遣於桃竹苗分署之人員,若有疑義,服務專線如下:<br/>
桃竹苗分署服務專線:03-4855368 分機 1185<br/>
傳真:03-4855912<br/>
email<a href="mailto:hanchiang1@wda.gov.tw">hanchiang1@wda.gov.tw</a></li>
<li>派遣於北分署之人員,若有疑義,服務專線如下:<br/>
02-22560859 分機 102</li>
</ol>
</div>
</td>
</tr>
</table>
</center>
<script type="text/javascript">
//<!--
var now = new Date();
function InitialTime()
{
// now.setTime(<%= nowtime%> - now.getTimezoneOffset() * 60 * 1000);
now.setTime(<%= nowtime %>);
UpdateTime();
StartTimer();
}
function StartTimer()
{
window.setInterval("UpdateTime();", 1000);
}
function UpdateTime()
{
// 顯示台灣時間
const twNow = new Date(now.getTime() + (8 * 60 * 60 * 1000));
let twYear = twNow.getUTCFullYear();
let twMonth = twNow.getUTCMonth() + 1;
let twDay = twNow.getUTCDate();
let twHour = twNow.getUTCHours();
let twMin = twNow.getUTCMinutes();
let twSec = twNow.getUTCSeconds();
if (twHour >= 0 && twHour < 6)
{
let aNow = new Date();
aNow.setTime(twNow.getTime() - 86400000);
twYear = aNow.getUTCFullYear();
twMonth = aNow.getUTCMonth() + 1;
twDay = aNow.getUTCDate();
twHour = twHour + 24;
}
twMonth = String(twMonth).padStart(2, '0');
twDay = String(twDay).padStart(2, '0');
twHour = String(twHour).padStart(2, '0');
twMin = String(twMin).padStart(2, '0');
twSec = String(twSec).padStart(2, '0');
document.getElementById("lbCurrentTimeTW").innerText = `${twYear}-${twMonth}-${twDay} ${twHour}:${twMin}:${twSec}`;
// 顯示當地時間
let year = now.getFullYear();
let month = now.getMonth() + 1;
let day = now.getDate();
let hour = now.getHours();
let min = now.getMinutes();
let sec = now.getSeconds();
if (hour >= 0 && hour < 6) {
let aNow = new Date();
aNow.setTime(now.getTime() - 86400000);
year = aNow.getUTCFullYear();
month = aNow.getUTCMonth() + 1;
day = aNow.getUTCDate();
hour = hour + 24;
}
month = String(month).padStart(2, '0');
day = String(day).padStart(2, '0');
hour = String(hour).padStart(2, '0');
min = String(min).padStart(2, '0');
sec = String(sec).padStart(2, '0');
document.getElementById("lbCurrentTimeLocal").innerText = `${year}-${month}-${day} ${hour}:${min}:${sec}`;
now.setTime(now.getTime() + 1000);
}
InitialTime();
//-->
</script>
+138
View File
@@ -0,0 +1,138 @@
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.Common;
using Wellan.Data;
using Wellan.Common;
public partial class forms_worker_fmPunchCard : Wellan.Web.UI.WUserControlBase
{
private RcrdDAC rcrdDao;
private RasnDAC rasnDao;
protected void Page_Load(object sender, EventArgs e)
{
}
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
rcrdDao = new RcrdDAC(Query);
rasnDao = new RasnDAC(Query);
ReadCard();
ReadRasn();
}
protected long nowtime
{
get { return (DateTime.UtcNow.Ticks - new DateTime(1970, 1, 1).Ticks) / 10000; }
}
protected bool showTWTime { get; set; }
private void ReadCard()
{
var aNow = DateAndTime.GetNow(UserId);
DataTable data = rcrdDao.ReadToday(UserId, aNow.CardDate);
if (data.Rows.Count != 0)
{
lbOnDuty.Text = WQuery.GetStringValue(data.Rows[0]["RCC01"]);
lbOffDuty.Text = WQuery.GetStringValue(data.Rows[0]["RCC02"]);
lbOut.Text = WQuery.GetStringValue(data.Rows[0]["RCC07"]);
lbBack.Text = WQuery.GetStringValue(data.Rows[0]["RCC08"]);
}
// 20220106 解除下班打卡按鈕限制
btnOnDuty.Enabled = lbOnDuty.Text.Length == 0;
// btnOffDuty.Enabled = lbOffDuty.Text.Length == 0 && lbOnDuty.Text.Length > 0;
btnOffDuty.Enabled = lbOffDuty.Text.Length == 0;
btnOut.Enabled = lbOut.Text.Length == 0;
// btnBack.Enabled = lbOut.Text.Length > 0 && lbBack.Text.Length == 0;
btnBack.Enabled = lbBack.Text.Length == 0;
if (lbOnDuty.Text.Length == 0)
lbOnDuty.Text = "(尚未打卡)";
if (lbOffDuty.Text.Length == 0)
lbOffDuty.Text = "(尚未打卡)";
if (lbOut.Text.Length == 0)
lbOut.Text = "(尚未打卡)";
if (lbBack.Text.Length == 0)
lbBack.Text = "(尚未打卡)";
}
private void ReadRasn()
{
showTWTime = false;
var rasnTable = rasnDao.SelectRecent(UserId);
if (rasnTable.Rows.Count > 0)
{
var rawtz = WDAC.GetStringValue(rasnTable.Rows[0]["RAWTZ"]);
if (!string.IsNullOrEmpty(rawtz) && string.Compare(rawtz, "台北") != 0)
{
showTWTime = true;
}
}
}
protected bool CheckPunchCardDays()
{
cvMessage.IsValid = true;
cvMessage.ErrorMessage = string.Empty;
if (rcrdDao.PunchDaysIn7Days(DateAndTime.GetNow(UserId).LocalDate, UserId, false) >= 6)
{
cvMessage.IsValid = false;
cvMessage.ErrorMessage = "不可連續七天打卡";
return false;
}
return true;
}
protected void btnOnDuty_Click(object sender, EventArgs e)
{
if (!CheckPunchCardDays()) return;
var aNow = DateAndTime.GetNow(UserId);
rcrdDao.PunchRCC01(aNow, UserId, Request.UserHostAddress, false);
ReadCard();
}
protected void btnOffDuty_Click(object sender, EventArgs e)
{
if (!CheckPunchCardDays()) return;
var aNow = DateAndTime.GetNow(UserId);
rcrdDao.PunchRCC02(aNow, UserId, Request.UserHostAddress, false);
ReadCard();
}
protected void btnOut_Click(object sender, EventArgs e)
{
if (!CheckPunchCardDays()) return;
var aNow = DateAndTime.GetNow(UserId);
rcrdDao.PunchRCC07(aNow, UserId, Request.UserHostAddress, false);
ReadCard();
}
protected void btnBack_Click(object sender, EventArgs e)
{
if (!CheckPunchCardDays()) return;
var aNow = DateAndTime.GetNow(UserId);
rcrdDao.PunchRCC08(aNow, UserId, Request.UserHostAddress, false);
ReadCard();
}
}