2025-03-27 15:05:14 +08:00

359 lines
18 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
}
}