public static List <AdjustJobGrade> GetAdjustJobGradeList(string salary_plan, int year, SemiannualType semiannual, bool insert_separator, bool isVerify) { List <AdjustJobGrade> gradeList = new List <AdjustJobGrade>(); int period = year * 10 + (byte)semiannual; List <RankSalaryStandardInput> rss_list = RankSalaryStandardInput.GetRankSalaryStandardInputs(salary_plan, null, period, isVerify); List <JobGrade> jobGrades = JobGrade.GetJobGrades(salary_plan); foreach (JobGrade grade in jobGrades) { AdjustJobGrade snGrade = new AdjustJobGrade(grade, year, semiannual, isVerify); gradeList.Add(snGrade); } string prev_line_ranknames = ""; //上一行职级名称列表 List <AdjustJobGrade> grades_result = new List <AdjustJobGrade>(); //遍历 foreach (AdjustJobGrade sgrade in gradeList) { if (sgrade.RankNames != "") { //如果职级划分不同,插入一行分割数据 if (prev_line_ranknames != sgrade.RankNames) { if (prev_line_ranknames != "") { grades_result.Add(new AdjustJobGrade(sgrade.RankNames)); } prev_line_ranknames = sgrade.RankNames; } } grades_result.Add(sgrade); } return(grades_result); }
//重新统计 public void Calculate() { int differential = 0; double total = 0; int avg = 0; double yearAdjustRate = 1; int max = 0; int min = 0; List <IRankSalary> rss_list = new List <IRankSalary>(); if (类型 == 0) { foreach (IRankSalary irs in RankSalaryStandard.GetRankSalaryStandards(this.薪酬体系, this.职等, this.期号)) { rss_list.Add(irs); } } else { foreach (IRankSalary irs in RankSalaryStandardInput.GetRankSalaryStandardInputs(this.薪酬体系, this.职等, this.期号, this.类型 == 2)) { rss_list.Add(irs); } } rss_list = rss_list.FindAll(a => a.月薪 > 0).ToList(); //过滤掉没有设置月薪的记录 if (rss_list.Count > 0) { total = rss_list.Sum(a => a.月薪); avg = (int)(total / rss_list.Count); min = rss_list.Min(a => a.月薪); max = rss_list.Max(a => a.月薪); if (rss_list.Count >= 2) { IRankSalary rss0 = rss_list[0]; IRankSalary rss1 = rss_list[1]; differential = rss0.月薪 - rss1.月薪; } } #region 计算年调率 this.每年调资额 = Convert.ToInt32(this.半年调资额 * 1.5); int previous_period = RankSalaryStandard.GetPreviousPeriod(this.薪酬体系, this.期号); GradeSalaryAdjust previous_gsh = GradeSalaryAdjust.GetGradeSalaryAdjust(this.薪酬体系, this.职等, previous_period, 0); //如果找到上期数据(通取正式数据) if (previous_gsh != null) { int avg_previous = previous_gsh.平均工资; if (avg_previous > 0) { yearAdjustRate = (double)每年调资额 / avg_previous; } } else //首次标准 { if (avg != 0) { yearAdjustRate = (double)每年调资额 / avg; } } #endregion this.级差 = differential; this.年调率 = yearAdjustRate; this.平均工资 = avg; this.最低工资 = min; this.最高工资 = max; #region 计算职等差 //获取对比的职等 GradeSalaryAdjust contrast = GradeSalaryAdjust.GetFromCache(this.薪酬体系, this.对比的职等, this.期号, this.类型); if (contrast != null) { this.职等差 = contrast.最低工资 - this.最高工资; } #endregion this.Save(); }
//重新统计 public void Calculate() { int differential = 0; int halfYearAdjust = 0; //半年调 int yearAdjust = 0; double total = 0; int avg = 0; double yearAdjustRate = 0; int max = 0; int min = 0; List <RankSalaryStandardInput> rss_list = RankSalaryStandardInput.GetRankSalaryStandardInputs(this.薪酬体系, this.职等, this.期号, this.是验证录入); if (rss_list.Count > 0) { total = rss_list.Sum(a => a.月薪); avg = (int)(total / rss_list.Count); min = rss_list.Min(a => a.月薪); max = rss_list.Max(a => a.月薪); if (rss_list.Count >= 2) { IRankSalary rss0 = rss_list[0]; IRankSalary rss1 = rss_list[1]; differential = rss0.月薪 - rss1.月薪; } } #region 计算年调率 if (this.期调整 != null) { int avg_previous = previous_gsh.平均工资; if (avg_previous > 0) { halfYearAdjust = avg - previous_gsh.平均工资; yearAdjust = halfYearAdjust * 2; yearAdjustRate = (double)yearAdjust / avg_previous; } } #endregion this.级差 = differential; this.半年调资额 = halfYearAdjust; this.每年调资额 = yearAdjust; this.年调率 = yearAdjustRate; this.平均工资 = avg; this.最低工资 = min; this.最高工资 = max; #region 计算职等差 //获取对比的职等 GradeSalaryAdjustInput contrast = GradeSalaryAdjustInput.GetGradeSalaryAdjustInput(this.薪酬体系, this.对比的职等, this.期号, this.是验证录入); if (contrast != null) { this.职等差 = contrast.最低工资 - this.最高工资; } #endregion this.Save(); }