using BLL; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using Model; using System.Linq; namespace FineUIPro.Web.ManHours { public partial class ManHoursActual : PageBase { private bool AppendToEnd = false; protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { GetButtonPower(); btnClose.OnClientClick = ActiveWindow.GetHideReference(); this.txtMonth.Text = string.Format("{0:yyyyMM}", DateTime.Now); if (DateTime.Now.Day > 21) { txtMonth.MaxDate = DateTime.Now.AddMonths(1); } else if (DateTime.Now.Day < 25) { txtMonth.MaxDate = DateTime.Now; } txtMonth_TextChanged(null,null); string UserId = Request.Params["UserId"]; if (!string.IsNullOrEmpty(UserId)) { this.ddType.DataTextField = "ConstText"; this.ddType.DataValueField = "ConstValue"; this.ddType.DataSource = BLL.ConstService.GetConstListByGroupId(BLL.Const.MyTimeSheet_Type); this.ddType.DataBind(); // 删除选中单元格的客户端脚本 //string deleteScript = GetDeleteScript(); //新增数据初始值 JObject defaultObj = new JObject(); defaultObj.Add("Type", ""); defaultObj.Add("Account", ""); defaultObj.Add("Description", ""); defaultObj.Add("Hours", ""); defaultObj.Add("Month", DateTime.Now.ToString("yyyy-MM-dd")); defaultObj.Add("Itype", "1"); defaultObj.Add("DisciplineId", ""); defaultObj.Add("Discipline", ""); defaultObj.Add("EProjectId", ""); defaultObj.Add("UserId", Request.Params["UserId"].ToString()); defaultObj.Add("UserName", ""); defaultObj.Add("Roles", ""); defaultObj.Add("ResourcePlanId", ""); defaultObj.Add("ManHoursPlanId", ""); // 在第一行新增一条数据 btnNew.OnClientClick = Grid1.GetAddNewRecordReference(defaultObj, AppendToEnd); // 删除选中行按钮 //btnDelete.OnClientClick = Grid1.GetNoSelectionAlertReference("Please select at least one record!") + deleteScript; // 绑定表格 BindGrid(Request.Params["UserId"].ToString()); } } } // 删除选中行的脚本 //private string GetDeleteScript() //{ // return Confirm.GetShowReference("Delete selected row?", String.Empty, MessageBoxIcon.Question, Grid1.GetDeleteSelectedRowsReference(), String.Empty); //} #region BindGrid private void BindGrid(string UserId) { //string dt1 = GetFirstDayOfMonth().ToString("yyyy-MM-dd"); //string dt2 = GetLastDayOfMonth().ToString("yyyy-MM-dd"); //DateTime m = Convert.ToDateTime(string.Format("{0:yyyyMM}", this.txtMonth.Text)); //string dt1 = string.Format("{0:yyyy-MM}", m.AddMonths(-1)) + "-21"; //string dt2 = string.Format("{0:yyyy-MM}", m) + "-20"; string strSql = @"SELECT [ManHoursActualId],[ManHoursPlanId],[ResourcePlanId],[EProjectId],[Type],[Description],[DisciplineId], [Discipline],[UserId],[UserName],[Roles],[Account],[Month],[Hours],[Itype] FROM ManHours_Actual where UserId=@UserId and ManHoursDate = @manHoursDate"; SqlParameter[] parameter = new SqlParameter[] { new SqlParameter("@UserId",UserId), new SqlParameter("@manHoursDate",this.txtMonth.Text.Trim()), //new SqlParameter("@dt2",dt2) }; DataTable tb = SQLHelper.GetDataTableRunText(strSql, parameter); //Grid1.RecordCount = tb.Rows.Count; //tb = GetFilteredTable(Grid1.FilteredData, tb); //var table = this.GetPagedDataTable(Grid1, tb); Grid1.DataSource = tb; Grid1.DataBind(); OutputSummaryData();//显示本月人工时和总人工时 } #region 得到一个月的第一天和最后一天的日期 /// /// 得到本月的第一天日期 /// /// DateTime //public static DateTime GetFirstDayOfMonth() //{ // return GetFirstDayOfMonth(DateTime.Now); //} /// /// 得到本月的最有一天的日期 /// /// DateTime //public static DateTime GetLastDayOfMonth() //{ // return GetLastDayOfMonth(DateTime.Now); //} /// /// 得到一个月的第一天 /// /// 这个月的随便一天 /// DateTime //public static DateTime GetFirstDayOfMonth(DateTime someday) //{ // int totalDays = DateTime.DaysInMonth(someday.Year, someday.Month); // DateTime result; // int ts = 1 - someday.Day; // result = someday.AddDays(ts); // return result; //} /// /// 得到一个月的最后一天 /// /// 这个月的随便一天 /// DateTime //public static DateTime GetLastDayOfMonth(DateTime someday) //{ // int totalDays = DateTime.DaysInMonth(someday.Year, someday.Month); // DateTime result; // int ts = totalDays - someday.Day; // result = someday.AddDays(ts); // return result; //} #endregion #endregion #region Grid1数据绑定前事件 protected void Grid1_PreDataBound(object sender, EventArgs e) { // 设置LinkButtonField的点击客户端事件 //LinkButtonField deleteField = Grid1.FindColumn("Delete") as LinkButtonField; //deleteField.OnClientClick = GetDeleteScript(); } #endregion #region 保存 /// /// 提交按钮 /// /// /// protected void btnSave_Click(object sender, EventArgs e) { List list = new List(); DateTime nowTime = DateTime.Now; int day = nowTime.Day; int house = nowTime.Hour; int month = nowTime.Month; int selectMonth = Convert.ToInt32(txtMonth.Text.Substring(4, 2)); if (CurrUser.Account != Const.Gly) { if (month == selectMonth && (day > 25 || (day == 25 && house >= 12))) { Alert.ShowInTop("本月填写日期已截止!", MessageBoxIcon.Warning); return; } else if (selectMonth == month + 1 && day < 21) { Alert.ShowInTop("下月人工时填写还未开放!", MessageBoxIcon.Warning); return; } else { JArray ConstructionArr = Grid1.GetMergedData(); if (ConstructionArr.Count > 0) { Model.ManHours_Actual Actual = null; for (int c = 0; c < ConstructionArr.Count; c++) { Actual = new Model.ManHours_Actual(); JObject objects = (JObject)ConstructionArr[c]; if (objects["values"]["ManHoursActualId"] != null && !string.IsNullOrEmpty(objects["values"]["ManHoursActualId"].ToString())) { Actual.ManHoursActualId = Convert.ToString(objects["values"]["ManHoursActualId"]); } else { Actual.ManHoursActualId = SQLHelper.GetNewID(typeof(Model.ManHours_Actual)); } Actual.ResourcePlanId = Convert.ToString(objects["values"]["ResourcePlanId"]); Actual.Roles = Convert.ToString(objects["values"]["Roles"]); Actual.EProjectId = Convert.ToString(objects["values"]["EProjectId"]); Actual.ManHoursPlanId = Convert.ToString(objects["values"]["ManHoursPlanId"]); Actual.UserId = Convert.ToString(objects["values"]["UserId"]); Actual.UserName = Convert.ToString(objects["values"]["UserName"]); Actual.DisciplineId = Convert.ToString(objects["values"]["DisciplineId"]); Actual.Discipline = Convert.ToString(objects["values"]["Discipline"]); if (objects["values"]["Type"] != null && !string.IsNullOrEmpty(objects["values"]["Type"].ToString())) { Actual.Type = Convert.ToString(objects["values"]["Type"]); } else { Alert.ShowInTop("Please select Type!", MessageBoxIcon.Warning); return; } Actual.Account = Convert.ToString(objects["values"]["Account"]); Actual.Month = Convert.ToDateTime(objects["values"]["Month"].ToString()); if (string.IsNullOrEmpty(objects["values"]["Hours"].ToString())) { Alert.ShowInTop("Please fill in the Hours!"); return; } Actual.Hours = double.Parse(objects["values"]["Hours"].ToString()); Actual.Description = objects["values"]["Description"].ToString(); Actual.ManHoursDate = this.txtMonth.Text.Trim(); // Actual.Itype = int.Parse(objects["values"]["Itype"].ToString()); if ((Actual.Type == "T00_Normal Work" || Actual.Type.Contains("OverTime")) && Actual.ManHoursPlanId == "") { Alert.ShowInTop("项目无计划人工时,请联系项目经理确认!"); return; } list.Add(Actual); } } bool result = BLL.PlanService.AddTran(Request.Params["UserId"].ToString(), list, txtMonth.Text.Trim()); if (result) { ShowNotify("Save successfully!", MessageBoxIcon.Success); PageContext.RegisterStartupScript(ActiveWindow.GetHidePostBackReference()); } else { Alert.ShowInParent("Save failed!"); return; } } } else { JArray ConstructionArr = Grid1.GetMergedData(); if (ConstructionArr.Count > 0) { Model.ManHours_Actual Actual = null; for (int c = 0; c < ConstructionArr.Count; c++) { Actual = new Model.ManHours_Actual(); JObject objects = (JObject)ConstructionArr[c]; if (objects["values"]["ManHoursActualId"] != null && !string.IsNullOrEmpty(objects["values"]["ManHoursActualId"].ToString())) { Actual.ManHoursActualId = Convert.ToString(objects["values"]["ManHoursActualId"]); } else { Actual.ManHoursActualId = SQLHelper.GetNewID(typeof(Model.ManHours_Actual)); } Actual.ResourcePlanId = Convert.ToString(objects["values"]["ResourcePlanId"]); Actual.Roles = Convert.ToString(objects["values"]["Roles"]); Actual.EProjectId = Convert.ToString(objects["values"]["EProjectId"]); Actual.ManHoursPlanId = Convert.ToString(objects["values"]["ManHoursPlanId"]); Actual.UserId = Convert.ToString(objects["values"]["UserId"]); Actual.UserName = Convert.ToString(objects["values"]["UserName"]); Actual.DisciplineId = Convert.ToString(objects["values"]["DisciplineId"]); Actual.Discipline = Convert.ToString(objects["values"]["Discipline"]); if (objects["values"]["Type"] != null && !string.IsNullOrEmpty(objects["values"]["Type"].ToString())) { Actual.Type = Convert.ToString(objects["values"]["Type"]); } else { Alert.ShowInTop("Please select Type!", MessageBoxIcon.Warning); return; } Actual.Account = Convert.ToString(objects["values"]["Account"]); Actual.Month = Convert.ToDateTime(objects["values"]["Month"].ToString()); if (string.IsNullOrEmpty(objects["values"]["Hours"].ToString())) { Alert.ShowInTop("Please fill in the Hours!"); return; } Actual.Hours = double.Parse(objects["values"]["Hours"].ToString()); Actual.Description = objects["values"]["Description"].ToString(); Actual.ManHoursDate = this.txtMonth.Text.Trim(); // Actual.Itype = int.Parse(objects["values"]["Itype"].ToString()); if ((Actual.Type == "T00_Normal Work" || Actual.Type.Contains("OverTime")) && Actual.ManHoursPlanId == "") { Alert.ShowInTop("项目无计划人工时,请联系项目经理确认!"); return; } list.Add(Actual); } } bool result = BLL.PlanService.AddTran(Request.Params["UserId"].ToString(), list, txtMonth.Text.Trim()); if (result) { ShowNotify("Save successfully!", MessageBoxIcon.Success); PageContext.RegisterStartupScript(ActiveWindow.GetHidePostBackReference()); } else { Alert.ShowInParent("Save failed!"); return; } } } #endregion #region 查找 /// /// 查找计划人工时 /// /// /// protected void btnSelect_Click(object sender, EventArgs e) { string window = String.Format("SelectPlan.aspx?UserId={0}", Request.Params["UserId"].ToString(), "查找 - "); PageContext.RegisterStartupScript(Window1.GetSaveStateReference(hdItemsString.ClientID) + Window1.GetShowReference(window)); } #endregion #region 关闭弹出窗口 /// /// 关闭窗口 /// /// /// protected void Window1_Close(object sender, EventArgs e) { List actualLists = new List(); //绑定之前已有的人工时 JArray ConstructionArr = Grid1.GetMergedData(); if (ConstructionArr.Count > 0) { Model.ManHours_Actual Actual = null; for (int i = 0; i < ConstructionArr.Count; i++) { Actual = new ManHours_Actual(); JObject objects = (JObject)ConstructionArr[i]; if (objects["values"]["ManHoursActualId"] != null) { Actual.ManHoursActualId = Convert.ToString(objects["values"]["ManHoursActualId"]); } else { Actual.ManHoursActualId = Guid.NewGuid().ToString(); } Actual.ResourcePlanId = Convert.ToString(objects["values"]["ResourcePlanId"]); Actual.Roles = Convert.ToString(objects["values"]["Roles"]); Actual.EProjectId = Convert.ToString(objects["values"]["EProjectId"]); Actual.ManHoursPlanId = Convert.ToString(objects["values"]["ManHoursPlanId"]); Actual.UserId = Convert.ToString(objects["values"]["UserId"]); Actual.UserName = Convert.ToString(objects["values"]["UserName"]); Actual.DisciplineId = Convert.ToString(objects["values"]["DisciplineId"]); Actual.Discipline = Convert.ToString(objects["values"]["Discipline"]); Actual.Type = Convert.ToString(objects["values"]["Type"]); Actual.Account = Convert.ToString(objects["values"]["Account"]); Actual.Month = Convert.ToDateTime(objects["values"]["Month"].ToString()); if (string.IsNullOrEmpty(objects["values"]["Hours"].ToString())) { Alert.ShowInParent("Please fill in the Hours!"); return; } Actual.Hours = int.Parse(objects["values"]["Hours"].ToString()); Actual.Description = objects["values"]["Description"].ToString(); actualLists.Add(Actual); } } List newActualLists = new List(); List lists = Funs.GetStrListByStr(hdItemsString.Text, ','); foreach (var item in lists) { if (!string.IsNullOrEmpty(item)) { var manHoursPlan = BLL.PlanService.GetPlanById(item); Model.ManHours_Actual actual = new Model.ManHours_Actual(); if (manHoursPlan != null) { actual.Month = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd")); actual.Account = manHoursPlan.Account; actual.Description = manHoursPlan.ProjectControl_JobNo + "-" + manHoursPlan.ProjectControl_JobTitle; actual.ResourcePlanId = manHoursPlan.ResourcePlanId; actual.ManHoursPlanId = manHoursPlan.ManHoursPlanId; actual.Roles = manHoursPlan.Roles; actual.EProjectId = manHoursPlan.EProjectId; actual.UserId = manHoursPlan.EngineerId; actual.UserName = manHoursPlan.EngineerName; actual.DisciplineId = manHoursPlan.DisciplineId; actual.Discipline = manHoursPlan.Discipline; actualLists.Add(actual); } } } this.Grid1.DataSource = actualLists; this.Grid1.DataBind(); } #endregion #region 显示本月总人工时和实际人工时的和 //显示本月总人工时和实际人工时的和 private void OutputSummaryData() { decimal monthManHours = 0;//本月总人工时的和 decimal actualManHours = 0;//实际人工时的和 string userId = Request.Params["UserId"]; if (!string.IsNullOrEmpty(userId)) { actualManHours = BLL.Sys_ActualManHourMonthSetService.GetHoursByMonth(DateTime.Now);//总月度人工时 //monthManHours = BLL.PlanService.getSumManHoursByUserIdAndMonth(userId, DateTime.Now);//本月实际人工时 } int rowsCount = this.Grid1.Rows.Count; for (int i = 0; i < rowsCount; i++) { monthManHours += Convert.ToDecimal(this.Grid1.Rows[i].Values[5]); } JObject summary = new JObject(); summary.Add("Type", "∑Target:" + actualManHours.ToString()); summary.Add("Hours", "∑Sum:" + monthManHours.ToString()); Grid1.SummaryData = summary; } #endregion #region 权限设置 /// /// 菜单按钮权限 /// private void GetButtonPower() { var buttonList = BLL.CommonService.GetAllButtonList(this.CurrUser.UserId, BLL.Const.ManHoursMenuId); if (buttonList.Count() > 0) { if (buttonList.Contains(BLL.Const.BtnTimeSheet)) { this.btnNew.Hidden = false; this.btnDelete.Hidden = false; this.btnSelect.Hidden = false; this.btnSave.Hidden = false; } } } #endregion #region 日期选择事件 protected void txtMonth_TextChanged(object sender, EventArgs e) { if (!string.IsNullOrEmpty(this.txtMonth.Text.Trim())) { BindGrid(Request.Params["UserId"].ToString()); if ((this.txtMonth.Text.Trim() == string.Format("{0:yyyyMM}", DateTime.Now) && (DateTime.Now.Day < 25 || (DateTime.Now.Day == 25 && DateTime.Now.Hour < 12))) || (this.txtMonth.Text.Trim() == string.Format("{0:yyyyMM}", DateTime.Now.AddMonths(1)) && DateTime.Now.Day >=21 ) || this.CurrUser.Account == BLL.Const.Gly) { IsEnabelButton(true); } else { IsEnabelButton(false); } } } private void IsEnabelButton(bool b) { if (b == true) { this.btnNew.Enabled = true; this.btnSave.Enabled = true; this.btnDelete.Enabled = true; this.btnSelect.Enabled = true; } else { this.btnNew.Enabled = false; this.btnSave.Enabled = false; this.btnDelete.Enabled = false; this.btnSelect.Enabled = false; } } #endregion } }