chore: 首次簽入 Thinkyu ASP.NET 專案
- 加入 Visual Studio / ASP.NET .gitignore - 排除建置輸出、IDE 設定、NuGet packages、大型 MSI 安裝檔
This commit is contained in:
@@ -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> ~
|
||||
</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>
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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("是否確定「上班打卡」?")) 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("是否確定「出差外出」?")) 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("是否確定「出差返回」?")) 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("是否確定「下班打卡」?")) 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>
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user