359 lines
18 KiB
C#
359 lines
18 KiB
C#
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<Running.Business.SALARYPAYROLL>
|
||
{
|
||
#region 方法 -> 页面加载
|
||
Running.Business.PERSONNELPROINST _PERSONNELPROINST = null;
|
||
protected void Page_Load(object sender, EventArgs e)
|
||
{
|
||
if (IsPostBack) return;
|
||
|
||
//GetData();
|
||
//GridViewEx1.DataBind();
|
||
GridViewEx1.SelectingWithInit<Running.Business.SALARYPAYROLL>(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<Running.Business.SALARYPAYROLL> 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<Running.Business.SALARYPAYROLL>(ObjectDataSource1, GridPageEx1);
|
||
e.SetValue(GridViewEx1);
|
||
}
|
||
#endregion
|
||
|
||
#region 方法 -> 生成汇总表按钮事件
|
||
protected void ButtonCreate_CallBackClick(object sender, ClientSetEventArgs e)
|
||
{
|
||
CreateData();
|
||
GridViewEx1.SelectingWithInit<Running.Business.SALARYPAYROLL>(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 = "备注</th></tr><tr><th>岗位工资";
|
||
//第二行表头
|
||
//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<Running.Business.SALARYPAYROLL> 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<Running.Business.SALARYPAYROLL_OFFICE>(ObjectDataSource1, GridPageEx1);
|
||
e.SetValue(GridViewEx1);
|
||
}
|
||
#endregion
|
||
|
||
#region 方法 -> 翻页事件
|
||
//翻页事件
|
||
protected void GridPageEx1_CallBackPageChanged(object src, ClientSetEventArgs e)
|
||
{
|
||
GridViewEx1.SelectingWithInit<Running.Business.SALARYPAYROLL>(ObjectDataSource1, GridPageEx1);
|
||
//设置UI变化
|
||
e.SetValue(GridViewEx1);
|
||
}
|
||
#endregion
|
||
|
||
}
|
||
} |