using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;
using System.Web.UI.WebControls;
using System.Collections;
using System.Threading;
using LYFZ.Software.MainBusiness.DoorCityProcess;
using System.Dynamic;
namespace LYFZ.Software.MainBusiness.TimeAndAttendance
{
public class frmTimeStatistics : LYFZ.Software.UI.TimeAndAttendance.frmTimeStatistics
{
DataSet dsData = new DataSet();
LYFZ.BLL.BLL_ErpOrder orbll = new BLL.BLL_ErpOrder();
LYFZ.BLL.BLL_Loninbansets lonindansets = new BLL.BLL_Loninbansets();
public frmTimeStatistics()
{
this.Load += frmTimeStatistics_Load;
this.btnLastWeek.Click += btnLastWeek_Click;
this.btnNextWeek.Click += btnNextWeek_Click;
this.btnExport.Click += btnExport_Click;
this.btnPrint.Click += btnPrint_Click;
this.chkWeekMode.Click += chkWeekMode_Click;
this.dgvData.CellMouseDoubleClick += dgvData_CellMouseDoubleClick;
this.dtpYearMonth.ClickChengedValue += dtpYearMonth_ClickChengedValue;
this.btnClose.Click += btnClose_Click;
cbxCompanyList.ComboBoxTree_NodeMouseClick += CbxCompanyList_ComboBoxTree_NodeMouseClick;
//BindCompanyList();
//cbxCompanyList.SelectedIndexChanged += cbxCompanyList_SelectedIndexChanged;
}
private void CbxCompanyList_ComboBoxTree_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
if (!this.chkWeekMode.Checked)
{ this.dtpYearMonth_ClickChengedValue(""); }
else
{ this.GetWeekData(); }
}
void cbxCompanyList_SelectedIndexChanged(object sender, EventArgs e)
{
if (chkWeekMode.Checked)
{
GetWeekData();
}
else
{
dtpYearMonth_ClickChengedValue("");
}
}
void BindCompanyList()
{
BLL.BLL_ErpCompanyInfo bllCompany = new BLL.BLL_ErpCompanyInfo();
DataTable dt = bllCompany.GetAllList().Tables[0];
cbxCompanyList.Items.Add(new ItemValue("", "全部"));
foreach (DataRow dr in dt.Rows)
{
cbxCompanyList.Items.Add(new ItemValue(dr["Company_DividedShop"].ToString(), dr["Company_Name"].ToString_s()));
}
cbxCompanyList.SelectedIndex = 0;
}
DateTime WeekStartDate;
DateTime WeekEndDate;
///
/// 窗体加载事件
///
///
///
void frmTimeStatistics_Load(object sender, EventArgs e)
{
this.panelLastNextWeek.Visible = false;
this.dgvData.dgvColumnHeadersHeight = 48;
this.dgvData.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing;
this.dgvData.ColumnHeadersHeight = 48;
Control.CheckForIllegalCrossThreadCalls = false;
this.dtpYearMonth.StrDateValue = SDateTime.Now.ToString("yyyy-MM");
// 部门人员绑定
LYFZ.Software.MainBusiness.DoorCityProcess.PublicCodeClasses.BindComboBoxTreeView_DepartmentAndEmployee(this.cbxCompanyList, IsFirstNodeNull: true, IsFirstNodeName: "全部", IsShowResign: false, IsShowAdmin: true, tb_User: LYFZ.DAL.DAL_ErpUser.SimpleUserDataTable);
this.cbxCompanyList.AfterSelectLevelFirstNode = true;
this.cbxCompanyList.IsNodeMouseClick = true;
this.cbxCompanyList.IsSelectParentNode = true;
cbxCompanyList.TextFindTag("全部");
#region 获取本周
this.WeekStartDate = SDateTime.Now.AddDays(Convert.ToInt32(SDateTime.Now.DayOfWeek) * -1);
this.WeekEndDate = SDateTime.Now.AddDays(6 - Convert.ToInt32(SDateTime.Now.DayOfWeek));
#endregion
this.chkWeekMode.Checked = true;
if (!this.chkWeekMode.Checked)
{ this.dtpYearMonth_ClickChengedValue(""); }
else
{ this.GetWeekData(); }
}
///
/// 上一个星期
///
///
///
void btnLastWeek_Click(object sender, EventArgs e)
{
this.dgvData.Rows.Clear();
this.WeekStartDate = this.WeekStartDate.AddDays(-7);
this.WeekEndDate = this.WeekEndDate.AddDays(-7);
this.GetWeekData();
}
///
/// 下一个星期
///
///
///
void btnNextWeek_Click(object sender, EventArgs e)
{
this.dgvData.Rows.Clear();
this.WeekStartDate = this.WeekStartDate.AddDays(7);
this.WeekEndDate = this.WeekEndDate.AddDays(7);
this.GetWeekData();
}
///
/// 周模式
///
///
///
void chkWeekMode_Click(object sender, EventArgs e)
{
if (this.chkWeekMode.Checked)
{
this.GetWeekData();
}
else
{
this.dtpYearMonth_ClickChengedValue("");
}
}
///
/// 导出Excel
///
///
///
void btnExport_Click(object sender, EventArgs e)
{
string StrModelName = "";
if (this.chkWeekMode.Checked)
{ StrModelName = this.lblWhichWeek.Text.Trim(); }
else
{ StrModelName = this.dtpYearMonth.StrDateValue.Trim(); }
this.dgvData.ExportDataTable(StrModelName);
}
///
/// 打印
///
///
///
void btnPrint_Click(object sender, EventArgs e)
{
try
{
Hashtable htData = new Hashtable();
htData["y"] = this.dgvData.CurrentCellAddress.Y;
int yyyy = Convert.ToInt32(this.dtpYearMonth.StrYear);
int MM = Convert.ToInt32(this.dtpYearMonth.StrMonth);
int chk = 0;
if (!this.chkWeekMode.Checked)
{ chk = 0; }
else
{ chk = 1; }
htData["chk"] = chk;
htData["time1"] = this.dtpYearMonth.StrYear;
htData["time2"] = this.dtpYearMonth.StrMonth;
htData["dgvData"] = this.dgvData;
LYFZ.Software.MainBusiness.ReportPrint.ReportFixedFormat.PrintFixedFormat(EnumPublic.PrintTypeEnum.考勤报表, htData);
}
catch (Exception ex)
{ MessageBoxCustom.Show(ex.Message); }
}
///
/// 关闭
///
///
///
void btnClose_Click(object sender, EventArgs e)
{
this.Close();
}
///
/// 双击查看考勤详情
///
///
///
void dgvData_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
{
if (e.ColumnIndex >= 0 && e.RowIndex >= 0)
{
if (this.dgvData.Columns[e.ColumnIndex].Tag != null)
{
LYFZ.Software.MainBusiness.TimeAndAttendance.SetSmallForm.AttendanceDetailsSmallForm frm = new SetSmallForm.AttendanceDetailsSmallForm();
frm.StrUserName = this.dgvData.Rows[e.RowIndex].Cells["姓名"].Value.ToString().Trim();
frm.StrUserNumber = this.dgvData.Rows[e.RowIndex].Cells["编号"].Value.ToString().Trim();
frm.StrDateTime = this.dgvData.Columns[e.ColumnIndex].Tag.ToString();
frm.Show();
}
}
}
///
/// 获取工作数据
///
///
///
///
DataTable GetWorkData(string StrWeekStartDate, string StrWeekEndDate, int WorkCount,string companyWhere="")
{
DataTable newTable = new DataTable();
newTable.Columns.Add("编号", typeof(string));
newTable.Columns.Add("姓名", typeof(string));
newTable.Columns.Add("迟到", typeof(string));
newTable.Columns.Add("早退", typeof(string));
newTable.Columns.Add("旷工", typeof(string));
newTable.Columns.Add("漏打卡", typeof(string));
newTable.Columns.Add("休息", typeof(string));
newTable.Columns.Add("请假", typeof(string));
for (int i = 0; i < WorkCount; i++)
{ newTable.Columns.Add(i.ToString().Trim(), typeof(string)); }
LYFZ.ComponentLibrary.FrmLoadHandling.LoadDoWorkMethod(delegate(object obj, System.ComponentModel.BackgroundWorker backgroundWorker)
{
string ExecuteSql = "select User_EmployeeID,User_Name,User_FirstFingerprintID,User_SecondaryFingerprintID from tb_ErpUser Where User_Status='在职' And User_Account <> 'admin' " + companyWhere + " ;";
ExecuteSql += "select ID,User_ID,Time,fixed from loninbansets Where " + PublicCodeClasses.GetDateTime("Time", StrWeekStartDate, StrWeekEndDate, ConnectWord: "") + " and fixed !='' ;";
ExecuteSql += "select no,dbo.fn_CheckDateTime(datetime) AS datetime from dbo.lonindata Where " + PublicCodeClasses.GetDateTime("datetime", StrWeekStartDate, StrWeekEndDate, ConnectWord: "") + " Group By no,dbo.fn_CheckDateTime(datetime);";
ExecuteSql += "select type,date,user_id from loginsign Where " + PublicCodeClasses.GetDateTime("convert(datetime,date)", StrWeekStartDate, StrWeekEndDate, ConnectWord: "") + ";";
ExecuteSql += "select time1,time2,time3,time4,name from lonintimeset;";
DataSet dtSet = orbll.GetView_Custom(ExecuteSql);
BindAttendanceStatistics(dtSet, newTable, StrWeekStartDate, WorkCount);
#region 作废考勤统计
//DataTable dt = dtSet.Tables["ds"];
//DataTable dtPaibanSet = dtSet.Tables["ds1"];
////dtPaibanSet.PrimaryKey = new DataColumn[] { dtPaibanSet.Columns["User_ID"], dtPaibanSet.Columns["Time"] };
//DataTable dtKaoqin = dtSet.Tables["ds2"];
//DataTable dtQiandao = dtSet.Tables["ds3"];
//DataTable dtBanchiSet = dtSet.Tables["ds4"];
//dtBanchiSet.PrimaryKey = new DataColumn[] { dtBanchiSet.Columns["name"] };
//for (int i = 0; i < dt.Rows.Count; i++)
//{
// string StrUserName = dt.Rows[i]["User_Name"].ToString().Trim();
// DataRow newdtRow = newTable.NewRow();
// int intLateToCount = 0;
// int intEarlyGoCount = 0;
// int intKuangGongCount = 0;
// int intMissedPunch=0;
// #region 处理一个星期的每天考勤情况
// for (int j = 0; j < WorkCount; j++)
// {
// try
// {
// Dictionary dataTimeList = new Dictionary();
// string StrDateTime = Convert.ToDateTime(StrWeekStartDate).AddDays(j).ToString("yyyy-MM-dd");
// //排班
// DataRow[] dtRow_PaibanSet = dtPaibanSet.Select( "User_ID = '"+ dt.Rows[i]["User_EmployeeID"].ToString().Trim() +"' and Time = '" + Convert.ToDateTime(StrDateTime).ToString("yyyy-MM-dd")+"'" );
// //打卡
// DataRow[] dtRows_Kaoqin = dtKaoqin.Select("no in ('" + dt.Rows[i]["User_FirstFingerprintID"].ToString().Trim() + "','" + dt.Rows[i]["User_SecondaryFingerprintID"].ToString().Trim() + "')" + PublicCodeClasses.GetDateTime2("datetime", StrDateTime, StrDateTime), sort: "datetime");
// //签单
// DataRow[] dtRows_Qiandao = dtQiandao.Select("user_id = '" + dt.Rows[i]["User_EmployeeID"].ToString().Trim() + "' And date = '" + StrDateTime + "'");
// string StrTextString = "";
// for (int k = 0; k < dtRows_Qiandao.Length; k++)
// { StrTextString += dtRows_Qiandao[k]["type"].ToString().Trim() + ","; }
// string StrValueText = "";
// bool IsFindValueText = true;
// if (dtRow_PaibanSet.Length>0)
// {
// #region 有安排班次
// int forLateToCount = 0;
// int forEarlyGoCount = 0;
// StrValueText = dtRow_PaibanSet[0]["fixed"].ToString().Trim();
// //班次设置
// DataRow dtRow = dtBanchiSet.Rows.Find(dtRow_PaibanSet[0]["fixed"].ToString().Trim());
// if (dtRow != null)
// {
// string StrText = "";
// if (!string.IsNullOrEmpty(dtRow["time3"].ToString().Trim()))
// { StrText = "[A-B][C-D]"; }
// else
// { StrText = "[A-B]"; }
// #region 处理签到
// if (StrTextString.IndexOf(LYFZ.EnumPublic.AttendanceSignType.StrAllDay.Trim()) != -1)
// {
// if (!string.IsNullOrEmpty(dtRow["time3"].ToString().Trim()))
// {
// dataTimeList.Add("time1", "签单");
// dataTimeList.Add("time2", "签单");
// dataTimeList.Add("time3", "签单");
// dataTimeList.Add("time4", "签单");
// StrText = StrText.Replace("A", "签单").Replace("B", "签单").Replace("C", "签单").Replace("D", "签单");
// }
// else
// {
// dataTimeList.Add("time1", "签单");
// dataTimeList.Add("time2", "签单");
// StrText = StrText.Replace("A", "签单").Replace("B", "签单");
// }
// }
// if (StrTextString.IndexOf(LYFZ.EnumPublic.AttendanceSignType.StrFirstParagraph_GoToAndOffWork.Trim()) != -1)
// {
// dataTimeList.Add("time1", "签单");
// dataTimeList.Add("time2", "签单");
// StrText = StrText.Replace("A", "签单").Replace("B", "签单");
// }
// if (StrTextString.IndexOf(LYFZ.EnumPublic.AttendanceSignType.StrFirstParagraph_GoToAndOffWork.Trim()) != -1)
// {
// dataTimeList.Add("time3", "签单");
// dataTimeList.Add("time4", "签单");
// StrText = StrText.Replace("C", "签单").Replace("D", "签单");
// }
// if (StrTextString.IndexOf(LYFZ.EnumPublic.AttendanceSignType.StrFirstParagraph_GoToWork.Trim()) != -1)
// {
// dataTimeList.Add("time1", "签单");
// StrText = StrText.Replace("A", "签单");
// }
// if (StrTextString.IndexOf(LYFZ.EnumPublic.AttendanceSignType.StrFirstParagraph_GoOffWork.Trim()) != -1)
// {
// dataTimeList.Add("time2", "签单");
// StrText = StrText.Replace("B", "签单");
// }
// if (StrTextString.IndexOf(LYFZ.EnumPublic.AttendanceSignType.StrSecondParagraph_GoToWork.Trim()) != -1)
// {
// dataTimeList.Add("time3", "签单");
// StrText = StrText.Replace("C", "签单");
// }
// if (StrTextString.IndexOf(LYFZ.EnumPublic.AttendanceSignType.StrSecondParagraph_GoOffWork.Trim()) != -1)
// {
// dataTimeList.Add("time4", "签单");
// StrText = StrText.Replace("D", "签单");
// }
// #endregion
// #region 获取每个班段的每个打卡的上班下班的时间点
// string StrFirstParagraphDateTime = "";
// string StrFirstParagraphDateTimeToMin = "";
// string StrFirstParagraphDateTimeToMax = "";
// string StrSecondParagraphDateTimeToMin = "";
// string StrSecondParagraphDateTimeToMax = "";
// for (int k = 0; k < dtRows_Kaoqin.Length; k++)
// {
// //遍历获取第一班段的上班时间的最先一次打卡记录,获取时间范围在第一班段的下班时间以前打的卡
// if (Convert.ToDateTime(dtRows_Kaoqin[k]["datetime"]) <= Convert.ToDateTime(StrDateTime + " " + dtRow["time2"].ToString().Trim()))
// {
// if (!string.IsNullOrEmpty(StrFirstParagraphDateTime))
// {
// if (Convert.ToDateTime(dtRows_Kaoqin[k]["datetime"]) < Convert.ToDateTime(StrFirstParagraphDateTime))
// { StrFirstParagraphDateTime = Convert.ToDateTime(dtRows_Kaoqin[k]["datetime"]).ToString("yyyy-MM-dd HH:mm"); }
// }
// else
// {
// StrFirstParagraphDateTime = Convert.ToDateTime(dtRows_Kaoqin[k]["datetime"]).ToString("yyyy-MM-dd HH:mm");
// }
// }
// //1.获取第一班段的下班最小时间(范围大于第一班段下班时间并小于第二班段的上班时间)
// //2.获取第一班段的下班最大时间(范围大于第一班段下班时间并小于第二班段的上班时间)
// if (Convert.ToDateTime(dtRows_Kaoqin[k]["datetime"]) >= Convert.ToDateTime(StrDateTime + " " + dtRow["time2"].ToString().Trim()).AddMinutes(-30))
// {
// //如果没有第二班段,则获取最后打卡下班时间
// if (!string.IsNullOrEmpty(dtRow["time3"].ToString().Trim()))
// {
// if (Convert.ToDateTime(dtRows_Kaoqin[k]["datetime"]) <= Convert.ToDateTime(StrDateTime + " " + dtRow["time3"].ToString().Trim()))
// {
// if (!string.IsNullOrEmpty(StrFirstParagraphDateTimeToMin))
// {
// if (Convert.ToDateTime(dtRows_Kaoqin[k]["datetime"]) < Convert.ToDateTime(StrFirstParagraphDateTimeToMin))
// { StrFirstParagraphDateTimeToMin = Convert.ToDateTime(dtRows_Kaoqin[k]["datetime"]).ToString("yyyy-MM-dd HH:mm"); }
// if (Convert.ToDateTime(dtRows_Kaoqin[k]["datetime"]) > Convert.ToDateTime(StrFirstParagraphDateTimeToMin))
// { StrFirstParagraphDateTimeToMax = Convert.ToDateTime(dtRows_Kaoqin[k]["datetime"]).ToString("yyyy-MM-dd HH:mm"); }
// }
// else
// {
// StrFirstParagraphDateTimeToMin = Convert.ToDateTime(dtRows_Kaoqin[k]["datetime"]).ToString("yyyy-MM-dd HH:mm");
// //StrFirstParagraphDateTimeToMax = StrFirstParagraphDateTimeToMin;
// }
// }
// }
// else if (!string.IsNullOrEmpty(StrFirstParagraphDateTimeToMin))
// {
// if (Convert.ToDateTime(dtRows_Kaoqin[k]["datetime"]) > Convert.ToDateTime(StrFirstParagraphDateTimeToMin))
// { StrFirstParagraphDateTimeToMin = Convert.ToDateTime(dtRows_Kaoqin[k]["datetime"]).ToString("yyyy-MM-dd HH:mm"); }
// }
// else
// { StrFirstParagraphDateTimeToMin = Convert.ToDateTime(dtRows_Kaoqin[k]["datetime"]).ToString("yyyy-MM-dd HH:mm"); }
// }
// //else if (Convert.ToDateTime(dtRows2[k]["datetime"]) < Convert.ToDateTime(StrDateTime + " " + dtRow["time2"].ToString().Trim()) && Convert.ToDateTime(dtRows2[k]["datetime"]) >= Convert.ToDateTime(StrDateTime + " " + dtRow["time1"].ToString().Trim()))
// //{ StrFirstParagraphDateTimeToMax = Convert.ToDateTime(dtRows2[k]["datetime"]).ToString("yyyy-MM-dd HH:mm"); }
// //获取大于第一班段下班时间并且小于第二班段下班时间(用于判断第二段上班卡是否迟到)
// if (!string.IsNullOrEmpty(dtRow["time3"].ToString().Trim()))
// {
// if (Convert.ToDateTime(dtRows_Kaoqin[k]["datetime"]) > Convert.ToDateTime(StrDateTime + " " + dtRow["time3"].ToString().Trim()) &&
// Convert.ToDateTime(dtRows_Kaoqin[k]["datetime"]) < Convert.ToDateTime(StrDateTime + " " + dtRow["time4"].ToString().Trim()))
// {
// if (!string.IsNullOrEmpty(StrSecondParagraphDateTimeToMin))
// {
// if (Convert.ToDateTime(dtRows_Kaoqin[k]["datetime"]) < Convert.ToDateTime(StrSecondParagraphDateTimeToMin))
// { StrSecondParagraphDateTimeToMin = Convert.ToDateTime(dtRows_Kaoqin[k]["datetime"]).ToString("yyyy-MM-dd HH:mm"); }
// }
// else
// { StrSecondParagraphDateTimeToMin = Convert.ToDateTime(dtRows_Kaoqin[k]["datetime"]).ToString("yyyy-MM-dd HH:mm"); }
// }
// //获取第二班段的最后下班打卡时间
// if (Convert.ToDateTime(dtRows_Kaoqin[k]["datetime"]) >= Convert.ToDateTime(StrDateTime + " " + dtRow["time4"].ToString().Trim()).AddMinutes(-30))
// {
// if (!string.IsNullOrEmpty(StrSecondParagraphDateTimeToMax))
// {
// if (Convert.ToDateTime(dtRows_Kaoqin[k]["datetime"]) > Convert.ToDateTime(StrSecondParagraphDateTimeToMax))
// { StrSecondParagraphDateTimeToMax = Convert.ToDateTime(dtRows_Kaoqin[k]["datetime"]).ToString("yyyy-MM-dd HH:mm"); }
// }
// else
// { StrSecondParagraphDateTimeToMax = Convert.ToDateTime(dtRows_Kaoqin[k]["datetime"]).ToString("yyyy-MM-dd HH:mm"); }
// }
// }
// }
// #endregion
// #region 第一班段的上班时间
// if (StrText.Trim().IndexOf("A") != -1)
// {
// //如果获取到第一班段的上班打卡时间晚于第一班段设置的上班时间,则标迟到
// if (!string.IsNullOrEmpty(StrFirstParagraphDateTime))
// {
// dataTimeList.Add("time1", StrFirstParagraphDateTime + "|" + StrDateTime + " " + dtRow["time1"].ToString().Trim());
// //if (Convert.ToDateTime(StrFirstParagraphDateTime) > Convert.ToDateTime(StrDateTime + " " + dtRow["time1"].ToString().Trim()))
// //{
// // forLateToCount++;
// //}
// StrText = StrText.Replace("A", Convert.ToDateTime(StrFirstParagraphDateTime).ToString("HH:mm"));
// }
// //if (!string.IsNullOrEmpty(dtRow["time1"].ToString().Trim()))
// //{
// // StrText = StrText.Replace("A", Convert.ToDateTime(StrDateTime + " " + dtRow["time1"].ToString().Trim()).ToString("HH:mm"));
// //}
// else
// {
// dataTimeList.Add("time1", "");
// StrText = StrText.Replace("A", "");
// //forLateToCount++;
// }
// }
// #endregion
// #region 第一班段的下班时间
// if (StrText.Trim().IndexOf("B") != -1)
// {
// //如果获取到的第一班段的下班打卡时间
// if (!string.IsNullOrEmpty(StrFirstParagraphDateTimeToMin))
// {
// //如果不存在第二班段,则赋上第一班段下班的最小时间
// if (string.IsNullOrEmpty(dtRow["time3"].ToString().Trim()))
// {
// dataTimeList.Add("time2", StrFirstParagraphDateTimeToMin + "|" + StrDateTime + " " + dtRow["time2"].ToString().Trim());
// StrText = StrText.Replace("B", Convert.ToDateTime(StrFirstParagraphDateTimeToMin).ToString("HH:mm"));
// }
// //如果获取到的第一班段下班最大时间不等于最小时间
// else if (StrFirstParagraphDateTimeToMin.Trim() != StrFirstParagraphDateTimeToMax.Trim())
// {
// dataTimeList.Add("time2", StrFirstParagraphDateTimeToMin + "|" + StrDateTime + " " + dtRow["time2"].ToString().Trim());
// StrText = StrText.Replace("B", Convert.ToDateTime(StrFirstParagraphDateTimeToMin).ToString("HH:mm"));
// //StrText = StrText.Replace("C", Convert.ToDateTime(StrFirstParagraphDateTimeToMax).ToString("HH:mm"));
// }
// else
// {
// //如果第一班段的打卡最小时间与最时间相同,离第二班段的时间的上班时间近,则为第二班段上班时间
// if ((Convert.ToDateTime(StrFirstParagraphDateTimeToMin) - Convert.ToDateTime(dtRow["time2"])).Minutes < (Convert.ToDateTime(dtRow["time3"]) - Convert.ToDateTime(StrFirstParagraphDateTimeToMin)).Minutes)
// { StrFirstParagraphDateTimeToMax = StrFirstParagraphDateTimeToMin; }
// else
// {
// dataTimeList.Add("time2", StrFirstParagraphDateTimeToMin + "|" + StrDateTime + " " + dtRow["time2"].ToString().Trim());
// StrText = StrText.Replace("B", Convert.ToDateTime(StrFirstParagraphDateTimeToMin).ToString("HH:mm"));
// }
// }
// }
// //else if (!string.IsNullOrEmpty(dtRow["time4"].ToString().Trim()))
// //{
// // StrText = StrText.Replace("B", Convert.ToDateTime(StrDateTime + " " + dtRow["time4"].ToString().Trim()).ToString("HH:mm"));
// //}
// //else if (!string.IsNullOrEmpty(dtRow["time3"].ToString().Trim()))
// //{
// // StrText = StrText.Replace("B", Convert.ToDateTime(StrDateTime + " " + dtRow["time3"].ToString().Trim()).ToString("HH:mm"));
// //}
// //else if (!string.IsNullOrEmpty(dtRow["time2"].ToString().Trim()))
// //{
// // StrText = StrText.Replace("B", Convert.ToDateTime(StrDateTime + " " + dtRow["time2"].ToString().Trim()).ToString("HH:mm"));
// //}
// else
// {
// dataTimeList.Add("time2", "");
// //forEarlyGoCount++;
// StrText = StrText.Replace("B", "");
// }
// }
// #endregion
// #region 第二班段上、下班时间
// if (!string.IsNullOrEmpty(dtRow["time3"].ToString().Trim()))
// {
// //第二班段上班时间
// if (StrText.Trim().IndexOf("C") != -1)
// {
// if (!string.IsNullOrEmpty(StrFirstParagraphDateTimeToMax) || !string.IsNullOrEmpty(StrSecondParagraphDateTimeToMin))
// {
// if (StrFirstParagraphDateTimeToMax != StrFirstParagraphDateTimeToMin)
// {
// if (!string.IsNullOrEmpty(StrFirstParagraphDateTimeToMax))
// {
// dataTimeList.Add("time3", StrFirstParagraphDateTimeToMax + "|" + StrDateTime + " " + dtRow["time3"].ToString().Trim());
// StrText = StrText.Replace("C", Convert.ToDateTime(StrFirstParagraphDateTimeToMax).ToString("HH:mm"));
// }
// else if (!string.IsNullOrEmpty(StrSecondParagraphDateTimeToMin))
// {
// dataTimeList.Add("time3", StrSecondParagraphDateTimeToMin + "|" + StrDateTime + " " + dtRow["time3"].ToString().Trim());
// StrText = StrText.Replace("C", Convert.ToDateTime(StrSecondParagraphDateTimeToMin).ToString("HH:mm"));
// }
// }
// else if (!string.IsNullOrEmpty(StrFirstParagraphDateTimeToMax) || !string.IsNullOrEmpty(StrSecondParagraphDateTimeToMin))
// {
// if (!string.IsNullOrEmpty(StrFirstParagraphDateTimeToMax) && !string.IsNullOrEmpty(StrSecondParagraphDateTimeToMin))
// {
// if (Convert.ToDateTime(StrFirstParagraphDateTimeToMax) < Convert.ToDateTime(StrSecondParagraphDateTimeToMin))
// {
// //forLateToCount++;
// dataTimeList.Add("time3", StrFirstParagraphDateTimeToMax + "|" + StrDateTime + " " + dtRow["time3"].ToString().Trim());
// StrText = StrText.Replace("C", Convert.ToDateTime(StrFirstParagraphDateTimeToMax).ToString("HH:mm"));
// }
// }
// else if (!string.IsNullOrEmpty(StrFirstParagraphDateTimeToMax) || string.IsNullOrEmpty(StrSecondParagraphDateTimeToMin))
// {
// //forLateToCount++;
// dataTimeList.Add("time3", StrFirstParagraphDateTimeToMax + "|" + StrDateTime + " " + dtRow["tim3e"].ToString().Trim());
// StrText = StrText.Replace("C", Convert.ToDateTime(StrFirstParagraphDateTimeToMax).ToString("HH:mm"));
// }
// else if (string.IsNullOrEmpty(StrFirstParagraphDateTimeToMax) || !string.IsNullOrEmpty(StrSecondParagraphDateTimeToMin))
// {
// //forLateToCount++;
// dataTimeList.Add("time3", StrSecondParagraphDateTimeToMin + "|" + StrDateTime + " " + dtRow["time3"].ToString().Trim());
// StrText = StrText.Replace("C", Convert.ToDateTime(StrSecondParagraphDateTimeToMin).ToString("HH:mm"));
// }
// }
// }
// else
// {
// //forLateToCount++;
// dataTimeList.Add("time3", "");
// StrText = StrText.Replace("C", "");
// }
// }
// //第二班段下班时间
// if (StrText.Trim().IndexOf("D") != -1)
// {
// if (!string.IsNullOrEmpty(StrSecondParagraphDateTimeToMax))
// {
// dataTimeList.Add("time4", StrSecondParagraphDateTimeToMax + "|" + StrDateTime + " " + dtRow["time4"].ToString().Trim());
// StrText = StrText.Replace("D", Convert.ToDateTime(StrSecondParagraphDateTimeToMax).ToString("HH:mm"));
// }
// else
// {
// dataTimeList.Add("time4", "");
// //forEarlyGoCount++;
// StrText = StrText.Replace("D", "");
// }
// }
// }
// #endregion
// //if (forLateToCount > 0)
// //{
// // if (Convert.ToDateTime(SDateTime.Now.ToString("yyyy-MM-dd")) >= Convert.ToDateTime(StrDateTime))
// // { intLateToCount++; }
// //}
// //if (forEarlyGoCount > 0)
// //{
// // if (Convert.ToDateTime(SDateTime.Now.ToString("yyyy-MM-dd")) >= Convert.ToDateTime(StrDateTime))
// // { intEarlyGoCount++; }
// //}
// //if (!string.IsNullOrEmpty(dtRow["time3"].ToString().Trim()))
// //{
// // if (StrText.Trim().IndexOf("A") != -1 && StrText.Trim().IndexOf("B") != -1 && StrText.Trim().IndexOf("C") != -1 && StrText.Trim().IndexOf("D") != -1)
// // { intKuangGongCount++; }
// //}
// //else if (StrText.Trim().IndexOf("A") != -1 && StrText.Trim().IndexOf("B") != -1)
// //{ intKuangGongCount++; }
// StrValueText += StrText.Trim();
// IsFindValueText = false;
// }
// #endregion
// }
// if (IsFindValueText)
// {
// #region 没有安排班次
// #region 处理签到
// string StrText = "[A-B]";
// if (StrTextString.IndexOf(LYFZ.EnumPublic.AttendanceSignType.StrAllDay.Trim()) != -1 || StrTextString.IndexOf(LYFZ.EnumPublic.AttendanceSignType.StrFirstParagraph_GoToAndOffWork.Trim()) != -1 || StrTextString.IndexOf(LYFZ.EnumPublic.AttendanceSignType.StrFirstParagraph_GoToAndOffWork.Trim()) != -1)
// {
// dataTimeList.Add("time1", "签单");
// dataTimeList.Add("time2", "签单");
// StrText = StrText.Replace("A", "签单").Replace("B", "签单");
// }
// if (StrTextString.IndexOf(LYFZ.EnumPublic.AttendanceSignType.StrFirstParagraph_GoToWork.Trim()) != -1 || StrTextString.IndexOf(LYFZ.EnumPublic.AttendanceSignType.StrSecondParagraph_GoToWork.Trim()) != -1)
// {
// dataTimeList.Add("time1", "签单");
// StrText = StrText.Replace("A", "签单");
// }
// if (StrTextString.IndexOf(LYFZ.EnumPublic.AttendanceSignType.StrFirstParagraph_GoOffWork.Trim()) != -1 || StrTextString.IndexOf(LYFZ.EnumPublic.AttendanceSignType.StrSecondParagraph_GoOffWork.Trim()) != -1)
// {
// dataTimeList.Add("time2", "签单");
// StrText = StrText.Replace("B", "签单");
// }
// #endregion
// #region 获取一天的最早的打卡上班时间与最晚的打卡下班时间
// if (StrText.Trim().IndexOf("A") != -1 || StrText.Trim().IndexOf("B") != -1)
// {
// //获取一天的最早的打卡上班时间与最晚的打卡下班时间
// string StrFirstParagraphDateTimeGoUp = "";
// string StrFirstParagraphDateTimeDown = "";
// for (int k = 0; k < dtRows_Kaoqin.Length; k++)
// {
// if (!string.IsNullOrEmpty(StrFirstParagraphDateTimeGoUp))
// {
// if (Convert.ToDateTime(dtRows_Kaoqin[k]["datetime"]) < Convert.ToDateTime(StrFirstParagraphDateTimeGoUp))
// { StrFirstParagraphDateTimeGoUp = Convert.ToDateTime(dtRows_Kaoqin[k]["datetime"]).ToString("yyyy-MM-dd HH:mm"); }
// }
// else
// { StrFirstParagraphDateTimeGoUp = Convert.ToDateTime(dtRows_Kaoqin[k]["datetime"]).ToString("yyyy-MM-dd HH:mm"); }
// if (!string.IsNullOrEmpty(StrFirstParagraphDateTimeDown))
// {
// if (Convert.ToDateTime(dtRows_Kaoqin[k]["datetime"]) > Convert.ToDateTime(StrFirstParagraphDateTimeDown))
// { StrFirstParagraphDateTimeDown = Convert.ToDateTime(dtRows_Kaoqin[k]["datetime"]).ToString("yyyy-MM-dd HH:mm"); }
// }
// else
// { StrFirstParagraphDateTimeDown = Convert.ToDateTime(dtRows_Kaoqin[k]["datetime"]).ToString("yyyy-MM-dd HH:mm"); }
// }
// //替换打卡时间点
// if (!string.IsNullOrEmpty(StrFirstParagraphDateTimeGoUp))
// {
// if (StrFirstParagraphDateTimeGoUp == StrFirstParagraphDateTimeDown)
// {
// if (StrText.Trim().IndexOf("A") != -1 && StrText.Trim().IndexOf("B") != -1)
// {
// dataTimeList.Add("time1", StrFirstParagraphDateTimeGoUp );
// StrText = StrText.Trim().Replace("A", Convert.ToDateTime(StrFirstParagraphDateTimeGoUp).ToString("HH:mm"));
// }
// else if (StrText.Trim().IndexOf("A") != -1 && StrText.Trim().IndexOf("B") == -1)
// {
// dataTimeList.Add("time1", StrFirstParagraphDateTimeGoUp);
// StrText = StrText.Trim().Replace("A", Convert.ToDateTime(StrFirstParagraphDateTimeGoUp).ToString("HH:mm"));
// }
// else if (StrText.Trim().IndexOf("A") == -1 && StrText.Trim().IndexOf("B") != -1)
// {
// dataTimeList.Add("time2", StrFirstParagraphDateTimeGoUp);
// StrText = StrText.Trim().Replace("B", Convert.ToDateTime(StrFirstParagraphDateTimeGoUp).ToString("HH:mm"));
// }
// }
// else
// {
// dataTimeList.Add("time1", StrFirstParagraphDateTimeGoUp);
// dataTimeList.Add("time2", StrFirstParagraphDateTimeDown);
// StrText = StrText.Trim().Replace("A", Convert.ToDateTime(StrFirstParagraphDateTimeGoUp).ToString("HH:mm"));
// StrText = StrText.Trim().Replace("B", Convert.ToDateTime(StrFirstParagraphDateTimeDown).ToString("HH:mm"));
// }
// }
// if (StrText.Trim().IndexOf("A") != -1 && StrText.Trim().IndexOf("B") != -1)
// {
// //intKuangGongCount++;
// dataTimeList.Add("time1", "");
// dataTimeList.Add("time2", "");
// StrText = StrText.Trim().Replace("A", "");
// StrText = StrText.Trim().Replace("B", "");
// }
// if (StrText.Trim().IndexOf("A") != -1 && StrText.Trim().IndexOf("B") == -1)
// {
// //if (Convert.ToDateTime(SDateTime.Now.ToString("yyyy-MM-dd")) >= Convert.ToDateTime(StrDateTime))
// //{ intLateToCount++; }
// dataTimeList.Add("time1", "");
// StrText = StrText.Trim().Replace("A", "");
// }
// if (StrText.Trim().IndexOf("A") == -1 && StrText.Trim().IndexOf("B") != -1)
// {
// //if (Convert.ToDateTime(SDateTime.Now.ToString("yyyy-MM-dd")) >= Convert.ToDateTime(StrDateTime))
// //{ intEarlyGoCount++; }
// dataTimeList.Add("time2", "");
// StrText = StrText.Trim().Replace("B", "");
// }
// }
// #endregion
// StrValueText = StrText.Trim();
// #endregion
// }
// newdtRow[j.ToString().Trim()] = StrValueText.Trim();
// #region 考勤情况统计
// var values = dataTimeList.Values;
// List vals = new List(values);
// string[] strVals = (from val in vals where val != "" select val).ToArray();
// if(strVals.Length==0)
// {
// intKuangGongCount++;
// }
// else
// {
// if(strVals.Length>0&&vals.Count!=strVals.Length)
// {
// intMissedPunch++;
// }
// else
// {
// if(strVals.Length==2)
// {
// string[] stvalus = strVals[0].Split('|');
// string[] envalus = strVals[1].Split('|');
// if (stvalus.Length > 1)
// {
// if(Convert.ToDateTime(stvalus[0])>Convert.ToDateTime(stvalus[1]))
// {
// intLateToCount++;
// }
// }
// if (envalus.Length > 1)
// {
// if (Convert.ToDateTime(envalus[0]) < Convert.ToDateTime(envalus[1]))
// {
// intEarlyGoCount++;
// }
// }
// }
// else if (strVals.Length == 4)
// {
// string[] stvalus1 = strVals[0].Split('|');
// string[] envalus1 = strVals[1].Split('|');
// string[] stvalus2 = strVals[2].Split('|');
// string[] envalus2 = strVals[3].Split('|');
// if (stvalus1.Length > 1)
// {
// if (Convert.ToDateTime(stvalus1[0]) > Convert.ToDateTime(stvalus1[1]))
// {
// intLateToCount++;
// }
// }
// if (stvalus1.Length > 1)
// {
// if (Convert.ToDateTime(stvalus1[0]) < Convert.ToDateTime(stvalus1[1]))
// {
// intEarlyGoCount++;
// }
// }
// if (stvalus2.Length > 1)
// {
// if (Convert.ToDateTime(stvalus2[0]) > Convert.ToDateTime(stvalus2[1]))
// {
// intLateToCount++;
// }
// }
// if (stvalus2.Length > 1)
// {
// if (Convert.ToDateTime(stvalus2[0]) < Convert.ToDateTime(stvalus2[1]))
// {
// intEarlyGoCount++;
// }
// }
// }
// }
// }
// #endregion
// //switch (j)
// //{
// // case 0: newdtRow["星期日"] = StrValueText; break;
// // case 1: newdtRow["星期一"] = StrValueText; break;
// // case 2: newdtRow["星期二"] = StrValueText; break;
// // case 3: newdtRow["星期三"] = StrValueText; break;
// // case 4: newdtRow["星期四"] = StrValueText; break;
// // case 5: newdtRow["星期五"] = StrValueText; break;
// // case 6: newdtRow["星期六"] = StrValueText; break;
// //}
// }
// catch { MessageBoxCustom.Show(i.ToString() + " " + j.ToString() + " " + new System.Diagnostics.StackTrace(new System.Diagnostics.StackFrame(true)).ToString()); }
// }
// #endregion
// newdtRow["编号"] = dt.Rows[i]["User_EmployeeID"].ToString().Trim();
// newdtRow["姓名"] = dt.Rows[i]["User_Name"].ToString().Trim();
// newdtRow["迟到"] = intLateToCount.ToString().Trim();
// newdtRow["早退"] = intEarlyGoCount.ToString().Trim();
// newdtRow["旷工"] = intKuangGongCount.ToString().Trim();
// newdtRow["漏打卡"] = intMissedPunch.ToString().Trim();
// newTable.Rows.Add(newdtRow);
//}
#endregion
});
return newTable;
}
///
/// 新考勤统计
///
///
///
void BindAttendanceStatistics(DataSet dtSet, DataTable newTable, string StrWeekStartDate ,int WorkCount)
{
DataTable dt = dtSet.Tables["ds"];
DataTable dtPaibanSet = dtSet.Tables["ds1"];
//dtPaibanSet.PrimaryKey = new DataColumn[] { dtPaibanSet.Columns["User_ID"], dtPaibanSet.Columns["Time"] };
DataTable dtKaoqin = dtSet.Tables["ds2"];
DataTable dtQiandao = dtSet.Tables["ds3"];
DataTable dtBanchiSet = dtSet.Tables["ds4"];
Dictionary userCheckWork = new Dictionary();
foreach (DataRow dr in dt.Rows)
{
string StrUserName = dr["User_Name"].ToString().Trim();
string EmployeeID = dr["User_EmployeeID"].ToString().Trim();
List fingers = new List();
if(!string.IsNullOrEmpty(dr["User_FirstFingerprintID"].ToString().Trim()))
{
fingers.Add(dr["User_FirstFingerprintID"].ToString());
}
if (!string.IsNullOrEmpty(dr["User_SecondaryFingerprintID"].ToString().Trim()))
{
fingers.Add(dr["User_SecondaryFingerprintID"].ToString());
}
DataRow newdtRow = newTable.NewRow();
int intLateToCount = 0;
int intEarlyGoCount = 0;
int intKuangGongCount = 0;
int intMissedPunch = 0;
int restCount = 0;
int leaveCount = 0;
#region 处理一个星期的每天考勤情况
for (int j = 0; j < WorkCount; j++)
{
try
{
///获取当前时间
DateTime staWeekTime = Convert.ToDateTime(StrWeekStartDate).AddDays(j);
///休息数据
List restConfigList = dtPaibanSet.AsEnumerable().Where(
p =>
p.Field("User_ID") == EmployeeID &&
p.Field("Time").ToString("yyyy-MM-dd") == staWeekTime.ToString("yyyy-MM-dd") &&
p.Field("fixed").ToString()=="休息").ToList();
List leaveConfigList = dtPaibanSet.AsEnumerable().Where(
p =>
p.Field("User_ID") == EmployeeID &&
p.Field("Time").ToString("yyyy-MM-dd") == staWeekTime.ToString("yyyy-MM-dd") &&
p.Field("fixed") == "请假").ToList();
///获取配置的时间段
List workConfig = dtPaibanSet.AsEnumerable().Where(p => p.Field("User_ID") == EmployeeID && p.Field("Time").ToString("yyyy-MM-dd") == staWeekTime.ToString("yyyy-MM-dd")).ToList();
if (workConfig.Count > 0)
{
workConfig = dtBanchiSet.AsEnumerable().Where(p => p.Field("name") == workConfig[0]["fixed"].ToString()).ToList();
}
///获取会员当天配置好的打卡时间段
List dySignList = new List();
List dtKaoqinDr = dtKaoqin.AsEnumerable().Where(p =>
("," + string.Join(",", fingers.ToArray()) + ",").IndexOf("," + p.Field("no") + ",") != -1
&& p.Field("datetime").Trim().Split(' ')[0] == staWeekTime.ToString("yyyy-MM-dd")
).ToList();
foreach (DataRow kqDr in dtKaoqinDr)
{
DateTime tempDateTime;
if (DateTime.TryParse(kqDr["datetime"].ToLowerString(), out tempDateTime))
{
dynamic dyObj = new ExpandoObject();
dyObj.TypeName = "";
dyObj.DateTime = tempDateTime;
dySignList.Add(dyObj);
}
}
if(restConfigList.Count>0)
{
restCount++;
}
if(leaveConfigList.Count>0)
{
leaveCount++;
}
//获取签卡的时间段
dtKaoqinDr = dtQiandao.AsEnumerable().Where(p =>
p.Field("user_id")== EmployeeID
&& p.Field("date").Trim().Split(' ')[0] == staWeekTime.ToString("yyyy-MM-dd")
).ToList();
foreach (DataRow kqDr in dtKaoqinDr)
{
DateTime tempDateTime;
if (DateTime.TryParse(kqDr["date"].ToLowerString(), out tempDateTime))
{
dynamic dyObj = new ExpandoObject();
dyObj.TypeName = kqDr["type"].ToString_s();
dyObj.DateTime = tempDateTime;
dySignList.Add(dyObj);
}
}
///签到时间排序,升序
dySignList = dySignList.OrderBy(a => a.DateTime).ToList();
if (dySignList.Count > 0)
{
///存在排班
if (workConfig.Count > 0)
{
List dyList = new List();
///排班阶段数据提取
if(!string.IsNullOrEmpty(workConfig[0]["time1"].ToString_s()))
{
dynamic dyObj = new ExpandoObject();
dyObj.StartTime = Convert.ToDateTime(staWeekTime.ToString("yyyy-MM-dd")+" " + workConfig[0]["time1"].ToString_s());
dyObj.EndTime = Convert.ToDateTime(staWeekTime.ToString("yyyy-MM-dd") + " " + workConfig[0]["time2"].ToString_s());
dyList.Add(dyObj);
}
if (!string.IsNullOrEmpty(workConfig[0]["time3"].ToString_s()))
{
dynamic dyObj = new ExpandoObject();
dyObj.StartTime = Convert.ToDateTime(staWeekTime.ToString("yyyy-MM-dd") + " " + workConfig[0]["time3"].ToString_s());
dyObj.EndTime = Convert.ToDateTime(staWeekTime.ToString("yyyy-MM-dd") + " " + workConfig[0]["time4"].ToString_s());
dyList.Add(dyObj);
}
string typeText = "";
///存在排班数据
if(dyList.Count>0)
{
///只有一个阶段的排班
if(dyList.Count==1)
{
///获取开始时间和结束时间,开始时间和结束时间对排班数据进行
string stimeDatet = "";
string etimeDatet = "";
TimeSpan timeSpan = dyList[0].EndTime - dyList[0].StartTime;
int hourValue = timeSpan.Hours;
if(dySignList[0].DateTime> dyList[0].StartTime.AddHours(-2)&& dySignList[0].DateTime< dyList[0].StartTime.AddHours(hourValue/2))
{
}
else
{
dynamic dyObj = new ExpandoObject();
dyObj.TypeName = "无数据";
dyObj.DateTime = null;
dySignList.Insert(0,dyObj);
}
//排班对打卡时间进行比较判断是否迟到
if (dySignList[0].TypeName != "无数据")
{
if (dyList[0].StartTime < dySignList[0].DateTime)
{
if (restConfigList.Count == 0 && leaveConfigList.Count == 0)
{
intLateToCount++;
typeText = "迟到";
}
}
stimeDatet = string.IsNullOrEmpty(dySignList[0].TypeName) ? dySignList[0].DateTime.ToString("HH:mm") : dySignList[0].TypeName;
}
else
{
intMissedPunch++;
typeText = "漏";
stimeDatet = "";
}
//排班对打卡时间进行比较判断早退还是漏打卡
if (dyList[0].EndTime > dySignList[dySignList.Count-1].DateTime )
{
if ((dySignList.Count - 1) > 0)
{
if (restConfigList.Count == 0 && leaveConfigList.Count == 0)
{
intEarlyGoCount++;
typeText = "早退";
}
}
else
{
if (restConfigList.Count == 0 && leaveConfigList.Count == 0)
{
intMissedPunch++;
typeText = "漏";
}
}
}
if ((dySignList.Count - 1) > 0)
{
etimeDatet = string.IsNullOrEmpty(dySignList[dySignList.Count - 1].TypeName) ? dySignList[dySignList.Count - 1].DateTime.ToString("HH:mm") : dySignList[dySignList.Count - 1].TypeName;
}
else
{
etimeDatet = "";
}
newdtRow[j.ToString()] = workConfig[0]["name"]+"[" + stimeDatet + "-" + etimeDatet + "]"+(string.IsNullOrEmpty(typeText)?"":"("+ typeText + ")");
}
else
{
///将排班信息进行分组,分成3组
List group1 = dySignList.Where(p => p.DateTime < dyList[0].EndTime).ToList();
List group2 = dySignList.Where(p => p.DateTime >= dyList[0].EndTime && p.DateTime <= dyList[1].StartTime).ToList();
List group3 = dySignList.Where(p => p.DateTime > dyList[1].StartTime).ToList();
string stime1 = "";
string etime1 = "";
string stime2 = "";
string etime2 = "";
if(group1.Count>0)
{
stime1 = group1[0].DateTime.ToString("HH:mm");
//if(dyList[0].StartTime< group1[0].DateTime)
//{
//}
}
if (group2.Count == 0)
{
etime1 = (group1.Count > 1 ? group1[group1.Count - 1].DateTime.ToString("HH:mm") : "");
stime2 = (group3.Count > 0) ? group3[0].DateTime.ToString("HH:mm") : "";
}
else if (group2.Count == 1)
{
TimeSpan timeSpan = dyList[1].StartTime - dyList[0].EndTime;
double halfMinu = timeSpan.TotalMinutes / 2;
if (dyList[0].EndTime.AddMinutes(Convert.ToInt32(halfMinu)) >= group2[0].DateTime)
{
etime1 = group2[0].DateTime.ToString("HH:mm");
if (group3.Count == 1)
{
timeSpan = dyList[1].EndTime - dyList[1].StartTime;
halfMinu = timeSpan.TotalMinutes / 2;
if (dyList[1].StartTime.AddMinutes(Convert.ToInt32(halfMinu)) >= group3[0].DateTime)
{
stime2 = group3[0].DateTime.ToString("HH:mm");
}
else
{
etime2 = group3[0].DateTime.ToString("HH:mm");
}
}
else
{
stime2 = group3[0].DateTime.ToString("HH:mm");
}
}
else
{
stime2 = group2[0].DateTime.ToString("HH:mm");
if (group1.Count > 1)
{
DateTime tempEndTime = group1[group1.Count - 1].DateTime;
if (tempEndTime > dyList[0].EndTime.AddMinutes(-Convert.ToInt32(halfMinu)))
{
etime1= tempEndTime.ToString("HH:mm");
}
}
}
}
else
{
etime1 = group2[0].DateTime.ToString("HH:mm");
stime2 = group2[group2.Count - 1].DateTime.ToString("HH:mm");
if (group3.Count == 1)
{
TimeSpan timeSpan = dyList[1].EndTime - dyList[1].StartTime;
double halfMinu = timeSpan.TotalMinutes / 2;
if (dyList[1].StartTime.AddMinutes(Convert.ToInt32(halfMinu)) < group3[0].DateTime)
{
etime2 = group3[0].DateTime.ToString("HH:mm");
}
}
}
if (group3.Count > 0)
{
etime2 = group3[group3.Count - 1].DateTime.ToString("HH:mm");
if (etime2 == stime2)
{
stime2 = "";
}
}
if (string.IsNullOrEmpty(stime1) && string.IsNullOrEmpty(etime1) && string.IsNullOrEmpty(stime2) && string.IsNullOrEmpty(etime2))
{
if (restConfigList.Count == 0 && leaveConfigList.Count == 0)
{
intKuangGongCount++;
typeText = "旷";
}
}
else if (string.IsNullOrEmpty(stime1)|| string.IsNullOrEmpty(etime1) || string.IsNullOrEmpty(stime2) || string.IsNullOrEmpty(etime2))
{
if (restConfigList.Count == 0 && leaveConfigList.Count == 0)
{
intMissedPunch++;
typeText = "漏";
}
}
if(!string.IsNullOrEmpty(workConfig[0]["time3"].ToString_s()))
{
if (Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd") + " " + workConfig[0]["time1"]) <
Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd") + " " + stime1) ||
Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd") + " " + workConfig[0]["time3"]) <
Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd") + " " + stime2))
{
if (restConfigList.Count == 0 && leaveConfigList.Count == 0)
{
intLateToCount++;
typeText = "迟到";
}
}
}
else
{
if (Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd") + " " + workConfig[0]["time1"]) <
Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd") + " " + stime1))
{
if (restConfigList.Count == 0 && leaveConfigList.Count == 0)
{
intLateToCount++;
typeText = "迟到";
}
}
}
if (!string.IsNullOrEmpty(workConfig[0]["time3"].ToString_s()))
{
if (Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd") + " " + workConfig[0]["time2"]) >
Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd") + " " + etime1) ||
Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd") + " " + workConfig[0]["time4"]) >
Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd") + " " + etime2))
{
if (restConfigList.Count == 0 && leaveConfigList.Count == 0)
{
intEarlyGoCount++;
typeText = "早退";
}
}
}
else
{
if (Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd") + " " + workConfig[0]["time2"]) >
Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd") + " " + etime1))
{
if (restConfigList.Count == 0 && leaveConfigList.Count == 0)
{
intEarlyGoCount++;
typeText = "早退";
}
}
}
if (restConfigList.Count > 0 || leaveConfigList.Count > 0)
{
newdtRow[j.ToString()] = workConfig[0]["name"].ToString_s() + "[" + stime1 + " -" + etime1 + "]" + "[" + stime2 + " -" + etime2 + "]"
+ (restConfigList.Count > 0 ? "(休)" : "") + (leaveConfigList.Count > 0 ? "(假)" : "");
}
else
{
newdtRow[j.ToString()] = workConfig[0]["name"].ToString_s() + "[" + stime1 + " -" + etime1 + "]" + "[" + stime2 + " -" + etime2 + "]"
+ (string.IsNullOrEmpty(typeText) ? "" : "(" + typeText + ")");
}
}
}
else
{
TimeSpan timeSpan = dyList[0].EndTime - dyList[0].StartTime;
int hourValue = timeSpan.Hours;
if (dySignList[0].DateTime > dyList[0].StartTime.AddHours(-2) && dySignList[0].DateTime < dyList[0].StartTime.AddHours(hourValue / 2))
{
}
else
{
dynamic dyObj = new ExpandoObject();
dyObj.TypeName = "无数据";
dyObj.DateTime = null;
dySignList.Insert(0, dyObj);
}
string timeDatet = "";
if (dySignList[0].TypeName != "无数据")
{
timeDatet = string.IsNullOrEmpty(dySignList[0].TypeName) ? dySignList[0].DateTime.ToString("HH:mm") : dySignList[0].TypeName;
}
if (dySignList.Count > 1)
{
newdtRow[j.ToString()] = "[" + timeDatet + " - " + (string.IsNullOrEmpty(dySignList[dySignList.Count - 1].TypeName) ?
dySignList[dySignList.Count - 1].DateTime.ToString("HH:mm") :
dySignList[dySignList.Count - 1].TypeName) + "]" +
(restConfigList.Count > 0 ? "(休)" : "") + (leaveConfigList.Count > 0 ? "(假)" : "");
}
else
{
if (restConfigList.Count == 0 && leaveConfigList.Count == 0)
{
intMissedPunch++;
}
if (restConfigList.Count > 0 || leaveConfigList.Count > 0)
{
newdtRow[j.ToString()] = "[" + timeDatet + " -" + "]" + (restConfigList.Count > 0 ? "(休)" : "") + (leaveConfigList.Count > 0 ? "(假)" : "");
}
else
{
newdtRow[j.ToString()] = "[" + timeDatet + " -" + "](漏)";
}
}
}
}
else
{
string timeDatet = string.IsNullOrEmpty(dySignList[0].TypeName) ? dySignList[0].DateTime.ToString("HH:mm") : dySignList[0].TypeName;
if(dySignList.Count>1)
{
newdtRow[j.ToString()] ="["+ timeDatet + " - " + (string.IsNullOrEmpty(dySignList[dySignList.Count - 1].TypeName) ?
dySignList[dySignList.Count - 1].DateTime.ToString("HH:mm") :
dySignList[dySignList.Count - 1].TypeName)+"]" + (restConfigList.Count > 0 ? "(休)" : "") + (leaveConfigList.Count > 0 ? "(假)" : "");
}
else
{
if (restConfigList.Count == 0 && leaveConfigList.Count == 0)
{
intMissedPunch++;
}
if (restConfigList.Count > 0 || leaveConfigList.Count > 0)
{
newdtRow[j.ToString()] = "[" + timeDatet + " -" + "]" + (restConfigList.Count > 0 ? "(休)" : "") + (leaveConfigList.Count > 0 ? "(假)" : "");
}
else
{
newdtRow[j.ToString()] = "[" + timeDatet + " -" + "](漏)";
}
}
}
}
else
{
if (restConfigList.Count == 0 && leaveConfigList.Count == 0)
{
intKuangGongCount++;
}
if (restConfigList.Count > 0 || leaveConfigList.Count > 0)
{
newdtRow[j.ToString()] = "[" + "-" + "]" + (restConfigList.Count > 0 ? "(休)" : "") + (leaveConfigList.Count > 0 ? "(假)" : "");
}
else
{
newdtRow[j.ToString()] = "[" + "-" + "](旷)";
}
}
}
catch (Exception e)
{
intKuangGongCount++;
newdtRow[j.ToString()] = "[" + "-" + "](旷)";
}
}
newdtRow["编号"] = EmployeeID.Trim();
newdtRow["姓名"] = StrUserName.Trim();
newdtRow["迟到"] = intLateToCount.ToString().Trim();
newdtRow["早退"] = intEarlyGoCount.ToString().Trim();
newdtRow["旷工"] = intKuangGongCount.ToString().Trim();
newdtRow["漏打卡"] = intMissedPunch.ToString().Trim();
newdtRow["休息"] = restCount.ToString().Trim();
newdtRow["请假"] = leaveCount.ToString().Trim();
newTable.Rows.Add(newdtRow);
#endregion
}
}
///
/// 更改日期
///
///
void dtpYearMonth_ClickChengedValue(string SelectValue)
{
this.dtpYearMonth.Visible = true;
this.panelLastNextWeek.Visible = false;
if (string.IsNullOrEmpty(this.dtpYearMonth.StrDateValue.Trim()))
{ MessageBoxCustom.Show("请选择要排班的月份!"); return; }
int IntMonthDay = DateTime.DaysInMonth(this.dtpYearMonth.StrYear, this.dtpYearMonth.StrMonth);
string StrWeekStartDate = this.dtpYearMonth.StrDateValue + "-01";
string StrWeekEndDate = Convert.ToDateTime(StrWeekStartDate).AddMonths(1).AddSeconds(-1).ToString("yyyy-MM-dd");
DataTable newTable = this.GetWorkData(StrWeekStartDate, StrWeekEndDate, IntMonthDay,((ItemValue)GetCompanyDataInfo()).Value.ToString_s());
this.dgvData.Rows.Clear();
string StrColumnName = "编号,姓名,迟到,早退,旷工,漏打卡,休息,请假";
this.dgvData.DataColumns(StrColumnName, strHideField: "编号");
DataGridViewColumn column = null;
for (int i = 1; i <= IntMonthDay; i++)
{
StrColumnName = i + "日\r\n" + Convert.ToDateTime(this.dtpYearMonth.StrDateValue + "-01").AddDays(i - 1).ToString("dddd") + "";
column = new DataGridViewColumn();
column.ReadOnly = true;
column.Name = StrColumnName;
column.HeaderText = StrColumnName;
column.Tag = Convert.ToDateTime(this.dtpYearMonth.StrDateValue + "-01").AddDays(i - 1).ToString("yyyy-MM-dd");
this.dgvData.Columns.Add(column);
}
//this.dgvData.DataColumns(StrColumnName);
this.dgvData.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
this.dgvData.Columns["姓名"].Frozen = true;
for (int i = 0; i < this.dgvData.Columns.Count; i++)
{
switch (this.dgvData.Columns[i].Name.Trim())
{
case "姓名":
case "迟到":
case "早退":
case "旷工":
case "漏打卡":
case "休息":
case "请假":
this.dgvData.Columns[i].Width = 70;
break;
default:
this.dgvData.Columns[i].Width = 100;
break;
}
}
DataGridViewRow dgvr = null;
DataGridViewCell cell = null;
for (int i = 0; i < newTable.Rows.Count; i++)
{
dgvr = new DataGridViewRow();
dgvr.Height = 48;
for (int j = 0; j < newTable.Columns.Count; j++)
{
cell = new DataGridViewTextBoxCell();
cell.Style.BackColor = System.Drawing.Color.White;
string cellValue = newTable.Rows[i][j].ToString().Trim();
SetCellBackColor(cell,ref cellValue);
cell.Value = cellValue;
dgvr.Cells.Add(cell);
}
this.dgvData.Rows.Add(dgvr);
string[] columnsList = "迟到,早退,旷工,漏打卡,休息,请假".Split(',');
foreach (string strColumn in columnsList)
{
string cellText = "";
switch (strColumn)
{
case "迟到":
case "早退":
cellText = "(" + strColumn + ")";
break;
case "请假":
cellText = "(假)";
break;
default:
cellText = "(" + strColumn.ToCharArray()[0] + ")";
break;
}
dgvr.Cells[strColumn].Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
if (Convert.ToDecimal(dgvr.Cells[strColumn].Value) > 0)
{
SetCellBackColor(dgvr.Cells[strColumn], ref cellText);
}
}
}
}
///修改单元格的颜色
void SetCellBackColor(DataGridViewCell cell,ref string cellText)
{
if(cellText.Contains("(休)"))
{
cell.Style.BackColor = System.Drawing.Color.Green;
}
else if (cellText.Contains("(假)"))
{
cell.Style.BackColor = System.Drawing.Color.BlueViolet;
}
else if (cellText.Contains("(迟到)"))
{
cell.Style.BackColor = System.Drawing.Color.Yellow;
cellText = cellText.Replace("(迟到)", "");
}
else if (cellText.Contains("(早退)"))
{
cell.Style.BackColor = System.Drawing.Color.YellowGreen;
cellText = cellText.Replace("(早退)", "");
}
else if (cellText.Contains("(漏)"))
{
cell.Style.BackColor = System.Drawing.Color.Red;
cellText = cellText.Replace("(漏)", "");
}
else if (cellText.Contains("(旷)"))
{
cell.Style.BackColor = System.Drawing.Color.DarkOrange;
cellText = cellText.Replace("(旷)", "");
}
}
///
/// 周统计
///
void GetWeekData()
{
this.panelLastNextWeek.Visible = true;
this.dtpYearMonth.Visible = false;
DataTable newTable = this.GetWorkData(this.WeekStartDate.ToString("yyyy-MM-dd"), this.WeekEndDate.ToString("yyyy-MM-dd"), 7,((ItemValue)GetCompanyDataInfo()).Value.ToString_s());
this.dgvData.Rows.Clear();
string StrColumnName = "编号,姓名,迟到,早退,旷工,漏打卡,休息,请假";
this.dgvData.DataColumns(StrColumnName, strHideField: "编号");
DataGridViewColumn column = null;
for (int i = 0; i < 7; i++)
{
string StrMonthDay = this.WeekStartDate.AddDays(i).ToString("MM月dd日");
switch (i)
{
case 0: StrColumnName = "星期日\r\n";
break;
case 1: StrColumnName = "星期一\r\n";
break;
case 2: StrColumnName = "星期二\r\n";
break;
case 3: StrColumnName = "星期三\r\n";
break;
case 4: StrColumnName = "星期四\r\n";
break;
case 5: StrColumnName = "星期五\r\n";
break;
case 6: StrColumnName = "星期六\r\n";
break;
}
StrColumnName += StrMonthDay;
column = new DataGridViewColumn();
column.ReadOnly = true;
column.Name = StrColumnName;
column.HeaderText = StrColumnName;
column.Tag = this.WeekStartDate.AddDays(i).ToString("yyyy-MM-dd");
this.dgvData.Columns.Add(column);
}
this.dgvData.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
//this.dgvData.DataColumns(StrColumnName);
this.dgvData.Columns["姓名"].Frozen = true;
int IntdgvDataColumnsCount = this.dgvData.Columns.GetColumnCount(DataGridViewElementStates.Visible);
int intdgvDataWidth = (this.dgvData.Width - 50 - 280) / (IntdgvDataColumnsCount - 4);
for (int i = 0; i < this.dgvData.Columns.Count; i++)
{
if (i > 7)
{
if (intdgvDataWidth < 170)
{ this.dgvData.Columns[i].Width = 170; }
else
{ this.dgvData.Columns[i].Width = intdgvDataWidth; }
}
else
{ this.dgvData.Columns[i].Width = 70; }
}
DataGridViewRow dgvr = null;
DataGridViewCell cell = null;
for (int i = 0; i < newTable.Rows.Count; i++)
{
dgvr = new DataGridViewRow();
dgvr.Height = 48;
for (int j = 0; j < newTable.Columns.Count; j++)
{
cell = new DataGridViewTextBoxCell();
cell.Style.BackColor = System.Drawing.Color.White;
string cellValue = newTable.Rows[i][j].ToString().Trim();
SetCellBackColor(cell,ref cellValue);
cell.Value = cellValue;
dgvr.Cells.Add(cell);
}
this.dgvData.Rows.Add(dgvr);
string[] columnsList = "迟到,早退,旷工,漏打卡,休息,请假".Split(',');
foreach(string strColumn in columnsList)
{
string cellText = "";
switch(strColumn)
{
case "迟到":
case "早退":
cellText = "("+ strColumn + ")";
break;
case "请假":
cellText = "(假)";
break;
default:
cellText = "("+ strColumn.ToCharArray()[0] + ")";
break;
}
dgvr.Cells[strColumn].Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
if (Convert.ToDecimal(dgvr.Cells[strColumn].Value) > 0)
{
SetCellBackColor(dgvr.Cells[strColumn],ref cellText);
}
}
}
}
ItemValue GetCompanyDataInfo()
{
ItemValue itemValue = new ItemValue("", "");
if (this.cbxCompanyList.Tag != null && this.cbxCompanyList.TreeView.SelectedNode != null)
{
string dataValue = this.cbxCompanyList.Tag.ToString();
string dataType = this.cbxCompanyList.StrGetName.Trim();
if (dataType.Length > 0)
{
switch (dataType.ToLower())
{
case "storename":
itemValue.Value = "and User_DividedShop = '" + dataValue + "'";
break;
case "department":
itemValue.Value = "and User_Department = '" + dataValue + "'";
break;
case "user":
itemValue.Value = "and User_EmployeeID = '" + dataValue + "'";
break;
}
}
}
return itemValue;
}
}
}