using SuperMap.RealEstate.Web.UI.WebControls; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data; using SuperMap.RealEstate.Web.UI; using Running = SuperMap.RealEstate.Personnel.Running; using Business = SuperMap.RealEstate.Personnel.Storage.Business; using HWSB = SuperMap.RealEstate.HighWay.Storage.Business; using HZQR.Common; using Personnel.WebSite.Shanxi; namespace SuperMap.RealEstate.Personnel.Compents.SalaryPayroll { public partial class Default : UI.UserControlsEx { #region 方法 -> 页面加载 Running.Business.PERSONNELPROINST _PERSONNELPROINST = null; protected void Page_Load(object sender, EventArgs e) { if (IsPostBack) return; //GetData(); //GridViewEx1.DataBind(); GridViewEx1.SelectingWithInit(ObjectDataSource1, GridPageEx1); } #endregion #region 方法 -> 页面加载前执行 protected override void OnInit(EventArgs e) { Common.PageHelper.CreateHeaderStyle(Page); _PERSONNELPROINST = Running.Business.PERSONNELPROINST.CreateInstance(Page); base.ButtonVisible = false; base.OnInit(e); } #endregion #region 方法 -> 查询SQL设置 //查询SQL设置 protected void GridViewEx1_SelectMethodParameters(object sender, SelectMethodParametersArgs e) { //搜索选项的搜索条件过滤 //if (!string.IsNullOrEmpty(TextBox_Search.Text)) // e.AddOrParams(GridViewSearch1, TextBox_Search.Text); //且搜索条件 e.AddAndParams("PERSONNELPROINST_ID", _PERSONNELPROINST.PERSONNELPROINST_ID); e.AddAndParams("SALARY_DATE", ddlYear.SelectedValue + "-" + ddlMonth.SelectedValue.PadLeft(2, '0')); //或搜索条件 //e.AddOrParams(字段名, 值); //排序 e.AddOrderByParams("DEPARTMENT_NAME", false); } #endregion #region 方法 -> 载入数据 //载入数据 public override bool LoadData() { if (_PERSONNELPROINST != null) { Running.Business.SALARYPAYROLL _SALARYPAYROLL = new Running.Business.SALARYPAYROLL(_PERSONNELPROINST); _SALARYPAYROLL.AddSearchParameter("PERSONNELPROINST_ID", _PERSONNELPROINST.PERSONNELPROINST_ID); if (_SALARYPAYROLL.Search()) { InitDropdown(_SALARYPAYROLL.SALARY_DATE.Split('-')[0].TryParseToInt()); ddlYear.SelectedValue = _SALARYPAYROLL.SALARY_DATE.Split('-')[0]; ddlMonth.SelectedValue = _SALARYPAYROLL.SALARY_DATE.Split('-')[1]; } else { InitDropdown(); } } else { InitDropdown(); } lblTitle.Text = "实业集团" + ddlYear.SelectedValue + "年" + ddlMonth.SelectedValue.TryParseToInt() + "月工资发放汇总表"; return true; } #endregion #region 方法 -> 初始化下拉框 public void InitDropdown(int selectYear = 0) { DateTime date = DateTime.Now; int year = date.Month == 12 ? date.Year - 1 : date.Year;// 取当前时间年,若为12月,则年份向前一年 ListItemEx yearItem = null; //向过去的年份循环20年 for (int i = year; i > year - 20; i--) { yearItem = new ListItemEx(i.ToString() + "年", i.ToString()); ddlYear.Items.Add(yearItem); } ddlYear.SelectedValue = selectYear > 0 ? selectYear.ToString() : year.ToString(); int month = ddlYear.SelectedValue.TryParseToInt() == date.Year ? date.Month - 1 : 12;//月份不能大于上个月 ListItemEx monthItem = null; //循环12个月 for (int i = 1; i <= month; i++) { monthItem = new ListItemEx(i.ToString() + "月", i.ToString("00")); ddlMonth.Items.Add(monthItem); } ddlMonth.SelectedValue = month.ToString("00"); } #endregion #region 方法 -> 生成汇总数据 public void CreateData() { string salaryDate = ddlYear.SelectedValue + "-" + ddlMonth.SelectedValue.PadLeft(2, '0'); #region 汇总数据是否已存在 if ((salaryDate + "01").TryParseToDateTime() >= (DateTime.Now.ToString("yyyy-MM") + "01").TryParseToDateTime()) { throw new Exception("暂无" + salaryDate + "工资汇总数据"); } //若生成汇总表,则判断是否已存在审批数据 string sqlWhere = string.Format(" WHERE SALARY_DATE='{0}' AND PERSONNELPROINST_ID<>{1}", salaryDate, _PERSONNELPROINST.PERSONNELPROINST_ID); DataTable dtExist = new Running.Business.SALARYPAYROLL(Transaction).FillDataTable(sqlWhere); if (dtExist.Rows.Count > 0) { throw new Exception(salaryDate + "工资汇总数据已存在"); } dtExist = new Business.SALARYPAYROLL(Transaction).FillDataTable(sqlWhere); if (dtExist.Rows.Count > 0) { throw new Exception(salaryDate + "工资汇总数据已存在"); } #endregion sqlWhere = " WHERE A.STAFF_ID=B.STAFF_ID AND B.SERVERPART_ID IS NOT NULL AND B.DEPARTMENT_NAME IS NOT NULL "; //薪资月份 sqlWhere += "AND TO_CHAR(A.PAID_DATE,'YYYY-MM')='" + salaryDate + "' "; //服务区 if (string.IsNullOrWhiteSpace(Request["SERVERPART_ID"])) { if (!string.IsNullOrWhiteSpace(Request["FIELDENUM_ID"])) { //查询区域权限 string _FIELDENUM_ID = Request["FIELDENUM_ID"].ToDecrypt(); new HWSB.SERVERPART(this.Transaction).GetSubServerpart(ref _FIELDENUM_ID, _FIELDENUM_ID, ""); sqlWhere += "AND B.SERVERPART_ID IN (SELECT SERVERPART_ID FROM HIGHWAY_STORAGE.T_SERVERPART WHERE FIELDENUM_ID EXISTS (" + _FIELDENUM_ID + "))"; } else { sqlWhere += "AND B.SERVERPART_ID IN (SELECT SERVERPART_ID FROM HIGHWAY_STORAGE.T_SERVERPART WHERE PROVINCE_CODE = (" + ProvinceID + "))"; } } Running.Business.SALARYPAYROLL SALARYPAYROLL = new Running.Business.SALARYPAYROLL(_PERSONNELPROINST); SALARYPAYROLL.AddSearchParameter("SALARY_DATE", salaryDate); SALARYPAYROLL.AddSearchParameter("PERSONNELPROINST_ID", _PERSONNELPROINST.PERSONNELPROINST_ID); if (!SALARYPAYROLL.Search()) { //若不存在汇总数据,则添加 //生成工资明细数据 ThirdParty.SalaryCalculate("1=1", "A.STAFF_ID", salaryDate, Page.PassportInfo.ID.TryParseToInt(), Page.PassportInfo.Name, -1, Transaction); //查询薪资明细 DataTable dtSalary = new Business.STAFF(Transaction).ExecuteDataTable(@" SELECT B.SERVERPART_ID,(CASE WHEN MAX(C.SERVERPART_NAME) IS NULL THEN MAX(B.DEPARTMENT_NAME) ELSE MAX(C.SERVERPART_NAME) END) AS DEPARTMENT_NAME,SUM(NVL(A.POSITION_SALARY,0)) AS POSITION_SALARY, SUM(CASE WHEN A.PAID_STATE=1 THEN TAKE_WAGES ELSE 0 END)AS PAIDSALARY, SUM(NVL(A.MINIMUM_SALARY,0)+NVL(A.RANKLEVEL_SALARY,0)+NVL(A.SENIORITY_SALARY,0)+NVL(A.SKILLLEVEL_SALARY,0)) AS FIXED_SALARY, SUM(NVL(A.KPI_SALARY_MONTH,0)) AS KPI_SALARY_MONTH, SUM(NVL(A.OTHER_PAY,0)+NVL(A.KPI_SALARY_YEAR,0)) AS KPI_SALARY_YEAR, SUM(NVL(A.DEDUCTION_SALARY,0)+NVL(A.DEDUCTION_TAX,0)+NVL(A.MEAL_EXPENSE,0)+NVL(A.ENDOWMENT_INSURANCE,0)+ NVL(A.MEDICAL_INSURANCE,0)+NVL(A.UNEMPLOYMENT_INSURANCE,0)+NVL(A.HOUSING_PROVIDENT_FUND,0)) AS DEDUCTION_SALARY FROM PERSONNEL_STORAGE.T_STAFFSALARY A,PERSONNEL_STORAGE.T_STAFF B" + " LEFT JOIN HIGHWAY_STORAGE.T_SERVERPART C ON B.SERVERPART_ID=C.SERVERPART_ID" + sqlWhere + "GROUP BY B.SERVERPART_ID ORDER BY MAX(C.SERVERPART_INDEX)"); //dtSalary.DefaultView.Sort = "DEPARTMENT_NAME"; //dtSalary = dtSalary.DefaultView.ToTable(); //删除运行库该流程,之前已生成汇总数据 List SALARYPAYROLLList = new Running.Business.SALARYPAYROLL(_PERSONNELPROINST).FillCollection( "WHERE PERSONNELPROINST_ID = " + _PERSONNELPROINST.PERSONNELPROINST_ID); foreach (Running.Business.SALARYPAYROLL _SALARYPAYROLL in SALARYPAYROLLList) { _SALARYPAYROLL.Delete(); } //向运行库添加汇总数据 foreach (DataRow dr in dtSalary.Rows) { Running.Business.SALARYPAYROLL _SALARYPAYROLL = new Running.Business.SALARYPAYROLL(Transaction); _SALARYPAYROLL.AddSearchParameter("DEPARTMENT_ID", dr["SERVERPART_ID"]); _SALARYPAYROLL.AddSearchParameter("SALARY_DATE", salaryDate); _SALARYPAYROLL.AddSearchParameter("PERSONNELPROINST_ID", _PERSONNELPROINST.PERSONNELPROINST_ID); if (!_SALARYPAYROLL.Search()) { _SALARYPAYROLL.ResetProperty(); _SALARYPAYROLL.PERSONNELPROINST_ID = _PERSONNELPROINST.PERSONNELPROINST_ID; _SALARYPAYROLL.DEPARTMENT_ID = dr["SERVERPART_ID"].TryParseToInt(); _SALARYPAYROLL.DEPARTMENT_NAME = dr["DEPARTMENT_NAME"].ToString(); _SALARYPAYROLL.SALARY_DATE = salaryDate; _SALARYPAYROLL.PAIDSALARY = dr["PAIDSALARY"].TryParseToDouble(); _SALARYPAYROLL.POSITION_SALARY = dr["POSITION_SALARY"].TryParseToDouble(); _SALARYPAYROLL.FIXED_SALARY = dr["FIXED_SALARY"].TryParseToDouble(); _SALARYPAYROLL.KPI_SALARY_MONTH = dr["KPI_SALARY_MONTH"].TryParseToDouble(); _SALARYPAYROLL.KPI_SALARY_YEAR = dr["KPI_SALARY_YEAR"].TryParseToDouble(); _SALARYPAYROLL.DEDUCTION_SALARY = dr["DEDUCTION_SALARY"].TryParseToDouble(); _SALARYPAYROLL.Insert(); } } } } #endregion #region 方法 -> 月份选择事件 protected void ddlMonth_CallBackSetControl(object sender, ClientSetEventArgs e) { lblTitle.Text = "实业集团" + ddlYear.SelectedValue + "年" + ddlMonth.SelectedValue.TryParseToInt() + "月工资发放汇总表"; e.SetInnerHtml(lblTitle, lblTitle.Text); GridViewEx1.SelectingWithInit(ObjectDataSource1, GridPageEx1); e.SetValue(GridViewEx1); } #endregion #region 方法 -> 生成汇总表按钮事件 protected void ButtonCreate_CallBackClick(object sender, ClientSetEventArgs e) { CreateData(); GridViewEx1.SelectingWithInit(ObjectDataSource1, GridPageEx1); e.SetValue(GridViewEx1); } #endregion #region 方法 -> 行绑定事件 double sumPAIDSALARY = 0, sumPOSITION_SALARY = 0, sumFIXED_SALARY = 0, sumKPI_SALARY_MONTH = 0, sumKPI_SALARY_YEAR = 0, sumDEDUCTION_SALARY = 0, sumSUBTOTAL = 0; protected void GridViewEx1_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.Header) { //第一行表头 TableCellCollection tbHeader = e.Row.Cells; tbHeader.Clear(); tbHeader.Add(new TableHeaderCell()); tbHeader[0].Attributes.Add("rowspan", "2"); tbHeader[0].Text = "序号"; tbHeader.Add(new TableHeaderCell()); tbHeader[1].Attributes.Add("rowspan", "2"); tbHeader[1].Text = "单位、部门"; tbHeader.Add(new TableHeaderCell()); tbHeader[2].Attributes.Add("rowspan", "2"); tbHeader[2].Text = "已发放工资总计"; tbHeader.Add(new TableHeaderCell()); tbHeader[3].Attributes.Add("colspan", "6"); tbHeader[3].Text = "本月应发工资"; tbHeader.Add(new TableHeaderCell()); tbHeader[4].Attributes.Add("rowspan", "2"); tbHeader[4].Text = "备注岗位工资"; //第二行表头 //tbHeader.Add(new TableHeaderCell()); //tbHeader[5].Text = "岗位工资"; tbHeader.Add(new TableHeaderCell()); tbHeader[5].Text = "固定部分"; tbHeader.Add(new TableHeaderCell()); tbHeader[6].Text = "月绩效"; tbHeader.Add(new TableHeaderCell()); tbHeader[7].Text = "年绩效总额"; tbHeader.Add(new TableHeaderCell()); tbHeader[8].Text = "扣款"; tbHeader.Add(new TableHeaderCell()); tbHeader[9].Text = "小计"; } else if (e.Row.RowType == DataControlRowType.DataRow) { //备注 if (e.Row.Cells[9].Text.Length > 15) { e.Row.Cells[9].ToolTip = e.Row.Cells[9].Text; e.Row.Cells[9].Text = e.Row.Cells[9].Text.Substring(0, 15) + "..."; } //小计:岗位工资+ // 固定部分(基础工资+职级工资+工龄工资+学历职称工资)+ // 月绩效+ // 年绩效总额(年绩效+其他)- // 扣款(应扣工资+应扣税款+代扣伙食费+养老保险+医疗保险+失业保险+公积金) e.Row.Cells[8].Text = (e.Row.Cells[3].Text.TryParseToDouble() + e.Row.Cells[4].Text.TryParseToDouble() + e.Row.Cells[5].Text.TryParseToDouble() + e.Row.Cells[6].Text.TryParseToDouble() - e.Row.Cells[7].Text.TryParseToDouble()).ToString(); sumPAIDSALARY += e.Row.Cells[2].Text.TryParseToDouble(); sumPOSITION_SALARY += e.Row.Cells[3].Text.TryParseToDouble(); sumFIXED_SALARY += e.Row.Cells[4].Text.TryParseToDouble(); sumKPI_SALARY_MONTH += e.Row.Cells[5].Text.TryParseToDouble(); sumKPI_SALARY_YEAR += e.Row.Cells[6].Text.TryParseToDouble(); sumDEDUCTION_SALARY += e.Row.Cells[7].Text.TryParseToDouble(); sumSUBTOTAL += e.Row.Cells[8].Text.TryParseToDouble(); string PAYROLL_ID = GridViewEx1.DataKeys[e.Row.RowIndex].Values["PAYROLL_ID"].ToEncrypt(); e.Row.Attributes["onclick"] = GridViewEx1.GetOpenPopDialogClientScript("/Personnel/Compents/SalaryPayroll/SALARYPAYROLLPage.aspx?ID=" + PAYROLL_ID, 700, 400); } else if (e.Row.RowType == DataControlRowType.Footer) { e.Row.Cells[1].Text = "合计"; e.Row.Cells[2].Text = sumPAIDSALARY.ToString(); e.Row.Cells[3].Text = sumPOSITION_SALARY.ToString(); e.Row.Cells[4].Text = sumFIXED_SALARY.ToString(); e.Row.Cells[5].Text = sumKPI_SALARY_MONTH.ToString(); e.Row.Cells[6].Text = sumKPI_SALARY_YEAR.ToString(); e.Row.Cells[7].Text = sumDEDUCTION_SALARY.ToString(); e.Row.Cells[8].Text = sumSUBTOTAL.ToString(); } } #endregion #region 方法 -> 保存按钮执行前 public override void OnDataAction_BeforeSave(DataActionEventArgs e) { if (GridViewEx1.Rows.Count == 0) { throw new Exception("暂未生成工资汇总数据"); } base.OnDataAction_BeforeSave(e); } #endregion #region 方法 -> 年份选择事件-联动月份 protected void ddlYear_CallBackSetControl(object sender, ClientSetEventArgs e) { ddlMonth.Clear(); DateTime date = DateTime.Now; int month = ddlYear.SelectedValue.TryParseToInt() == date.Year ? date.Month - 1 : 12;//月份不能大于上个月 ListItemEx monthItem = null; //循环月份 for (int i = 1; i <= month; i++) { monthItem = new ListItemEx(i.ToString() + "月", i.ToString("00")); ddlMonth.Items.Add(monthItem); } ddlMonth.SelectedValue = ddlYear.SelectedValue.TryParseToInt() == date.Year ? month.ToString("00") : "01"; e.SetDropDownListEx(ddlMonth); lblTitle.Text = "实业集团" + ddlYear.SelectedValue + "年" + ddlMonth.SelectedValue.TryParseToInt() + "月工资发放汇总表"; e.SetInnerHtml(lblTitle, lblTitle.Text); GridViewEx1.SelectingWithInit(ObjectDataSource1, GridPageEx1); e.SetValue(GridViewEx1); } #endregion #region 方法 -> 翻页事件 //翻页事件 protected void GridPageEx1_CallBackPageChanged(object src, ClientSetEventArgs e) { GridViewEx1.SelectingWithInit(ObjectDataSource1, GridPageEx1); //设置UI变化 e.SetValue(GridViewEx1); } #endregion } }