private static void GetSeq(SalResult sr, SalaryResult item) { OleDbConnection conn = null; try { conn = new OleDbConnection(MyHelper.GetPsConnectionString()); conn.Open(); using (OleDbCommand cmd = conn.CreateCommand()) { cmd.CommandText = String.Format("SELECT B.SEQ_NBR AS DEPT_SEQ, A.COMPANY, A.C_GP_DEPT, A.SEQ_NBR AS EMP_SEQ FROM SYSADM.PS_C_GP_DEPT_EMP_C A left join SYSADM.PS_C_GP_DEPT B on A.Company = B.Company AND A.c_gp_dept = B.c_gp_dept where EMPLID='{0}' and a.effdt < date'{1}' and rownum=1 order by a.effdt desc", sr.员工编号, (new DateTime(sr.年度, sr.月份, 1)).AddMonths(1).ToString("yyyy-M-d")); OleDbDataReader rs = cmd.ExecuteReader(); if (rs.Read()) { CompanyInfo company = CompanyInfo.Get((string)rs["COMPANY"]); if (company != null) { item.财务公司 = company.公司名称; } item.财务部门 = (string)rs["C_GP_DEPT"]; item.财务部门序号 = Convert.ToInt32(rs["DEPT_SEQ"]); item.员工序号 = Convert.ToInt32(rs["EMP_SEQ"]); } rs.Close(); } } finally { if (conn != null) { conn.Close(); } } }
//自动创建契约津贴发放记录 public static List<MonthlyContractAllowanceItem> AutoGenerateMonthlyContractAllowanceItems(int year, int month) { List<MonthlyContractAllowanceItem> list = new List<MonthlyContractAllowanceItem>(); //获取正在执行的借款标准 List<ContractAllowance> ContractAllowanceList = GetContractAllowances(year, month); foreach (ContractAllowance wa in ContractAllowanceList) { SalaryResult sr = SalaryResult.GetFromCache(wa.员工编号, year, month); //如果已经发上表工资 if (sr != null) { if (sr.企业排班天数 == 0) continue; MonthlyContractAllowanceItem item = MonthlyContractAllowanceItem.AddMonthlyContractAllowanceItem(wa.员工编号, year, month); item.姓名 = sr.姓名; item.月津贴标准 = wa.月津贴额度; item.应出勤天数 = sr.企业排班天数; item.实际出勤天数 = sr.实际出勤天数; item.实际发放金额 = Math.Round(wa.月津贴额度 * (sr.实际出勤天数 / sr.企业排班天数), 2); item.Save(); list.Add(item); } } return list; }
//清理无效的记录 public static List <EmployeeInfo> ClearInvalidRecord() { List <EmployeeInfo> empListChanged = new List <EmployeeInfo>(); List <EmployeeInfo> empList = EmployeeInfo.GetHasPayEmployeeList(); //最近一次发工资的日期 DateTime lastSalaryDate = SalaryResult.GetLastSalaryDate(); if (lastSalaryDate == DateTime.MinValue) { return(empListChanged); } //上月最后一天(相当于该员工有工资的最后一个月,这里是相对的概念) DateTime preMonthLastDayDate = new DateTime(lastSalaryDate.Year, lastSalaryDate.Month, 1).AddMonths(1).AddDays(-1); //上上月 DateTime prePreMonthLastDayDate = preMonthLastDayDate.AddMonths(-1); DateTime expiredDate = prePreMonthLastDayDate; foreach (EmployeeInfo emp in empList) { //2018-7-24 管培生薪酬体系特殊,不随公司与职务等级变化,不设异动判断 if (emp.是管培生) { continue; } MonthlySalary ms = GetEffective(emp.员工编号, lastSalaryDate); if (ms != null) { SalaryResult sr = SalaryResult.GetFromCache(emp.员工编号, lastSalaryDate.Year, lastSalaryDate.Month); if (sr != null) { SalaryResult prev_sr = SalaryResult.GetFromCache(emp.员工编号, prePreMonthLastDayDate.Year, prePreMonthLastDayDate.Month); //如果公司、职等都没变 if (prev_sr == null || (prev_sr.公司编号 == sr.公司编号 && ms.职等 == sr.工资职等)) { continue; } expiredDate = new DateTime(sr.年度, sr.月份, 1).AddDays(-1); } else { continue; } if (ms.截止日期 < ms.开始执行日期) { continue; } //截止日期为上上月最后一天 ms.截止日期 = expiredDate; ms.Save(); empListChanged.Add(emp); } } return(empListChanged); }
public static string GetGrade1(SalaryResult sr) { //有二级分类的职务等级 string JOB_HAS_SECONDARY = "主任|副主任|工程师|班长|"; try { if (sr.职等名称 == null) { return(null); } //职等默认等于职务等级 string grade = GetGrade(sr.职等名称); if (JOB_HAS_SECONDARY.IndexOf(grade + "|") == -1) { return(grade); } else { DeptInfo dept = sr.所在机构.部门; //如果找不到部门 if (dept == null) { return(grade); } //获取部门板块属性 string fun = dept.职能类型; //获取班长岗位级别 string level = ""; if (sr.所在机构.车间 != null) { MonitorLevel mv = MonitorLevel.Get(sr.所在机构.车间.部门编号, sr.职务代码); if (mv != null) { level = mv.级别名称; } } if (level == "") { return(fun + grade); } else { return(level + grade); } } } catch (Exception err) { Common.WriteLog(Environment.CurrentDirectory + "\\LogFiles\\Error.log", err.ToString()); } return(null); }
protected override void OnLoaded() { if (string.IsNullOrEmpty(this.职务名称)) { this.职务名称 = PsHelper.GetValue(PsHelper.职务代码, this.基础工资表.职务代码); this.Save(); } salaryResult = SalaryResult.GetFromCache(this.员工编号, this.年度, this.月份); base.OnLoaded(); }
private SalaryResult GetSalaryResult(string emplid, DateTime date) { SalaryResult salary = SalaryResult.GetFromCache(emplid, date.Year, date.Month); if (salary != null) { PrivateSalaryCache.Set(emplid, salary, TimeSpan.FromHours(4)); } return(salary); }
public static string GetGrade2(SalaryResult sr) { //有二级分类的职务等级 string JOB_HAS_SECONDARY = "经理|副经理|科员|"; try { if (sr.职等名称 == null) { return(null); } //职等默认等于职务等级 string grade = GetGrade(sr.职等名称); if (JOB_HAS_SECONDARY.IndexOf(grade + "|") == -1) { return(grade); } else { DeptInfo dept = sr.所在机构.部门; //如果找不到部门 if (dept == null) { return(grade); } //获取部门板块属性 string fun = dept.职能类型; if (fun == "部门") { return("部门" + grade); } else { if (grade == "科员") { return("林场科员"); } else { return("经营区" + grade); } } } } catch (Exception err) { Common.WriteLog(Environment.CurrentDirectory + "\\LogFiles\\Error.log", err.ToString()); } return(null); }
//获取纳税清单 public static List <PersonalTax> GetPersonalTaxList(int year, int month, string company) { List <PersonalTax> list = new List <PersonalTax>(); List <SalaryResult> salaryList = SalaryResult.GetSalaryResults(year, month, company, null); foreach (SalaryResult item in salaryList) { list.Add(new PersonalTax(item)); } return(list); }
public static string GetGrade(SalaryResult sr) { //"003": //广西华劲竹林发展有限公司 //"005": //赣州华劲竹林发展有限公司 if (sr.公司编号 == "003" || sr.公司编号 == "005") { return(GetGrade2(sr)); } else { return(GetGrade1(sr)); } }
public EmployeeSalary(SalaryResult sr, PrivateSalary ps) { 表工资 = sr; 封闭工资 = ps; //处理,获取相关数据 this.员工编号 = sr.员工编号; this.姓名 = sr.姓名; this.职务 = PsHelper.GetValue(PsHelper.职务代码, 表工资.职务代码); this.年度 = sr.年度.ToString() + " 年"; this.月份 = sr.月份.ToString() + " 月"; this.季度 = (Convert.ToInt32(sr.月份 / 3) + 1).ToString() + " 季度"; //this.金额 = 封闭工资 == null ? 上表工资.上表工资 : 封闭工资.职级工资; this.金额 = 封闭工资 == null ? 表工资.表工资总额 : 封闭工资.工资发放总额; this.职等 = sr.职等; this.发放单位 = sr.财务公司; DeptInfo dept = DeptInfo.Get(sr.机构编号); if (dept != null) { this.本部 = dept.本部; this.体系 = dept.体系; this.公司 = dept.公司.部门名称; if (dept.部门 != null) { this.部门 = dept.部门.部门名称; } if (dept.区域 != null) { this.区域 = dept.区域.部门名称; } if (dept.省办 != null) { this.省办 = dept.省办.部门名称.Replace("省办", ""); } if (dept.城市 != null) { this.城市 = dept.城市.部门名称.Replace("市办", ""); } } else { CompanyInfo company = CompanyInfo.Get(sr.公司编号); if (company != null) { this.公司 = company.公司简称; } } }
protected override void OnSaving() { if (string.IsNullOrEmpty(this.员工编号)) { this.员工编号 = ""; return; } if (string.IsNullOrEmpty(this.类型)) { throw new Exception("类型不能为空."); } if (this.录入时间 == DateTime.MinValue) { this.录入时间 = DateTime.Now; } //判断已经审核的薪资组不能修改 SalaryResult salResult = SalaryResult.GetFromCache(this.员工编号, this.年, this.月); if (salResult == null) { throw new Exception("未发现【" + this.姓名 + "】的工资记录,请先生成工资表后再录入。"); } else { SalaryAuditingResult auditingResult = SalaryAuditingResult.GetSalaryAuditingResult(salResult.薪资组, this.年, this.月); if (auditingResult == null) { throw new Exception("未发现【" + salResult.薪资组名称 + "】的工资审核情况表"); } else { if (auditingResult.已审核) { throw new Exception("薪资组【" + salResult.薪资组名称 + "】的工资已经审核,不能添加或修改。"); } } } OtherMoney found = GetOtherMoney(this.员工编号, this.年, this.月, this.类型, this.项目名称); if (found != null && found.标识 != this.标识) { throw new Exception("同一个奖扣项不能重复录入."); } else { base.OnSaving(); } }
public static SalaryResult AddSalaryResult(string empNo, int year, int month) { SalaryResult sr = GetFromCache(empNo, year, month); if (sr == null) { sr = new SalaryResult(); sr.标识 = Guid.NewGuid(); sr.员工编号 = empNo; sr.年度 = year; sr.月份 = month; sr.Save(); } return(sr); }
protected override void OnSaving() { if (string.IsNullOrEmpty(this.姓名)) { throw new Exception("姓名不能为空."); } if (this.录入时间 == DateTime.MinValue) { this.录入时间 = DateTime.Now; } //判断已经审核的薪资组不能修改 SalaryResult salResult = SalaryResult.GetFromCache(this.员工编号, this.年, this.月); if (salResult == null) { throw new Exception("未发现" + this.姓名 + "的工资记录."); } else { SalaryAuditingResult auditingResult = SalaryAuditingResult.GetSalaryAuditingResult(salResult.薪资组, this.年, this.月); if (auditingResult == null) { throw new Exception("未发现" + this.姓名 + "的工资审核情况表"); } else { if (auditingResult.已审核) { throw new Exception(this.姓名 + "的工资已经审核,不能添加或修改。"); } } } EmpPayRate found = GetEmpPayRate(this.员工编号, this.年, this.月); if (found != null && found.标识 != this.标识) { throw new Exception("每个员工每月只有一个工资系数."); } else { base.OnSaving(); } }
public PersonalTax(SalaryResult salary) { 表工资 = salary; 封闭工资 = PrivateSalary.GetPrivateSalary(salary.员工编号, salary.年度, salary.月份); CalRunInfo cal = CalRunInfo.Get(salary.日历组); 年 = cal.年度; 月 = cal.月份; 期间_开始 = cal.开始日期; 期间_结束 = cal.结束日期; 期间 = String.Format("{0}年{1}", 年, 月) + "月"; 发放单位 = salary.财务公司; 员工编号 = salary.员工编号; 姓名 = salary.姓名; 身份证号 = salary.身份证号; 养老保险个人缴纳金额 = salary.养老保险个人缴纳; 医疗保险个人缴纳金额 = salary.基本医疗个人缴纳 + salary.大病医疗个人缴纳金额; 失业保险个人缴纳金额 = salary.失业保险个人缴纳; 住房公积金个人缴纳金额 = salary.住房公积金个人缴纳; 应税工资额 = 表工资.应税工资额; 个人所得税 = 封闭工资 == null ? 表工资.个人所得税金额 : 封闭工资.个人所得税; 工资发放总额 = 表工资.表工资总额 + 表工资.未休年休假工资; //如果有封闭工资 if (封闭工资 != null) { 应税工资额 = 封闭工资.总应税工资; 工资发放总额 = 封闭工资.工资发放总额; } 个税起征点 = PsHelper.GetPersonTaxPoint(期间_开始); decimal taxIncome = 应税工资额 - 个税起征点; if (taxIncome > 0) { TaxInfo tax = TaxInfo.Get(taxIncome); 税率 = tax.税率; 速算扣除数 = tax.速算扣除数; } }
public static List <EmployeeSalary> GetEmployeeSalarys(DateTime start, DateTime end, string companyCode) { List <EmployeeSalary> list = new List <EmployeeSalary>(); DateTime currMonth = start; while (currMonth <= end) { //取出当前月份的工资明细 List <SalaryResult> srList = SalaryResult.GetSalaryResults(currMonth.Year, currMonth.Month, companyCode); //遍历 foreach (SalaryResult sr in srList) { PrivateSalary ps = PrivateSalary.GetPrivateSalary(sr.员工编号, sr.年度, sr.月份); EmployeeSalary es = new EmployeeSalary(sr, ps); list.Add(es); } currMonth = currMonth.AddMonths(1); } return(list); }
public void Calculate() { decimal 标准职务工资, 个人职务工资; 是标准职务工资 = true; 满勤奖_显示 = "—"; 年休假_显示 = "—"; 津贴补助_显示 = "—"; //获取薪酬信息 GetPayInfo(); //获取上表工资标准 SalaryBaseInfo sbi = PsHelper.GetSalaryGrade(员工编号, 期间_开始); if (sbi != null) { 表工资标准 = sbi.表工资标准; 年休假工资 = sbi.年休假工资; 满勤奖金额 = sbi.满勤奖金额; 满勤奖_显示 = 满勤奖金额 > 0 ? 满勤奖金额.ToString("#0.##") : "—"; 年休假_显示 = 年休假工资 > 0 ? 年休假工资.ToString("#0.##") : "—";; } #region 计算职务工资 StepPayRate stepPayRate = null; List <StepPayRate> rates = 标准职务工资表.FindAll(a => a.薪级标识 == 薪级_月初).OrderByDescending(a => a.执行日期).ToList(); if (rates.Count > 0) { stepPayRate = rates[0]; 开始执行日期 = 开始执行日期_月初; } //月底职级 List <StepPayRate> rates_月底 = 标准职务工资表.FindAll(a => a.薪级标识 == 薪级_月底).OrderByDescending(a => a.执行日期).ToList(); if (rates.Count > 0) { StepPayRate stepPayRate_月底 = rates[0]; //如果月底职级改变,去工资低的 if (stepPayRate_月底.标识 != stepPayRate.标识) { stepPayRate = stepPayRate.工资额 < stepPayRate_月底.工资额 ? stepPayRate : stepPayRate_月底; 开始执行日期 = 开始执行日期_月底; } } PersonPayRate personPayRate = null; List <PersonPayRate> pRates = 个人职务工资表.FindAll(a => a.生效日期 == 期间_开始 && a.员工编号 == this.员工编号).OrderByDescending(a => a.生效日期).ToList(); if (isRealtime) { pRates = 个人职务工资表.FindAll(a => a.效 && a.员工编号 == this.员工编号).OrderByDescending(a => a.生效日期).ToList(); } if (pRates.Count > 0) { personPayRate = pRates[0]; 开始执行日期 = personPayRate.生效日期; //津贴补助 津贴补助 = personPayRate.津贴1金额 + personPayRate.津贴2金额; 津贴补助_显示 = 津贴补助 > 0 ? 津贴补助.ToString("#0.##") : "—"; } 标准职务工资 = stepPayRate == null ? 0 : stepPayRate.工资额; 个人职务工资 = personPayRate == null ? 0 : personPayRate.月薪; 职务工资 = 个人职务工资 == 0 ? 标准职务工资 : 个人职务工资; 是标准职务工资 = 个人职务工资 == 0; //2017-7-23 加上年休假工资 职级工资 = 职务工资 + 年休假工资; //重新计算有效的薪等薪级 工资职级 = " - "; if (stepPayRate != null && 是标准职务工资) { 封闭薪等 = stepPayRate.薪等标识; 封闭薪级 = stepPayRate.薪级标识; SalaryNode grade = SalaryNode.工资等级表.Find(a => a.标识 == 封闭薪等); if (grade != null) { 薪等 = grade.称; } grade = SalaryNode.工资等级表.Find(a => a.标识 == 封闭薪级); if (grade != null) { 薪级 = grade.称; } 工资职级 = 薪等 + 薪级; } #endregion SalaryResult sr = SalaryResult.GetFromCache(员工编号, 年, 月); 公司编码 = sr == null ? employeeInfo.公司 : sr.公司编号; 职务等级 = sr == null ? employeeInfo.职务等级 : sr.职务等级; 职级 = PsHelper.GetSupvsrLvDescr(职务等级); }
private void InitData(PrivateSalary salary) { this.employeeInfo = salary.员工信息; this.privateSalary = salary; this.publicSalary = salary.基础工资表; 期间 = salary.年度 + "年" + salary.月份 + "月"; 公司序号 = employeeInfo.公司序号; 职务 = employeeInfo.职务名称; 职级名称 = LvDescrCache.Get(employeeInfo.职务等级, () => GetLvDescr(employeeInfo.职务等级), TimeSpan.FromHours(18)); 工龄 = employeeInfo.工龄 / (decimal)12.0; 年龄 = employeeInfo.年龄; 学历 = employeeInfo.学历; 籍贯 = employeeInfo.籍贯; 华劲工龄 = employeeInfo.华劲工龄; 任职时间 = employeeInfo.任职时间; 月薪类型 = salary.月薪类型; 岗位级别 = salary.管培生级别; 是管培生 = employeeInfo.是管培生; 是主管 = employeeInfo.职务名称 != null && (employeeInfo.职务名称.IndexOf("部门主管") != -1 || employeeInfo.职务名称.IndexOf("厂长") != -1 || employeeInfo.职务名称.IndexOf("场长") != -1); LevelInfo level = LevelInfoCache.Get(employeeInfo.职务等级, () => GetLevelInfo(employeeInfo.职务等级), TimeSpan.FromHours(18)); if (level != null) { 职等 = level.级别; } 满勤奖_显示 = "—"; 年休假_显示 = "—"; 津贴补助_显示 = "—"; 公司编码 = publicSalary.公司编号; 部门编码 = publicSalary.部门编号; 职务等级 = publicSalary.职务等级; 工资职等 = publicSalary.工资职等; if (privateSalary != null) { 表工资标准 = this.publicSalary.表工资 + this.publicSalary.工资降级; 年休假工资 = this.publicSalary.未休年休假工资; 满勤奖金额 = this.publicSalary.应得满勤奖; if (privateSalary.年度 < 2018) { 职务工资 = this.privateSalary.职级工资 - 满勤奖金额; 职级工资 = 职务工资 + 满勤奖金额 + 年休假工资; } else { 职务工资 = this.privateSalary.职务工资; 职级工资 = this.privateSalary.职级工资; } 总工资 = this.privateSalary.总工资; 薪等 = this.privateSalary.薪等; 薪级 = this.privateSalary.薪级; 职等名称 = this.privateSalary.评定职等; 执行职级 = this.privateSalary.执行职级; SalaryResult sr = publicSalary; 公司编码 = sr == null ? employeeInfo.公司 : sr.公司编号; 职务等级 = sr == null ? employeeInfo.职务等级 : sr.职务等级; 工资职级 = this.privateSalary.薪等名称 + this.privateSalary.薪级名称; 薪等名称 = this.privateSalary.薪等名称; 薪级名称 = this.privateSalary.薪级名称; } 职级 = LvDescrCache.Get(职务等级, () => GetLvDescr(职务等级), TimeSpan.FromHours(18)); 月薪_显示 = 月薪.ToString("#0.##"); 年薪_显示 = 年薪.ToString("#0.##"); 职务工资_显示 = 职务工资.ToString("#0.##"); 满勤奖_显示 = 满勤奖金额 > 0 ? 满勤奖金额.ToString("#0.##") : "—"; 年休假_显示 = 年休假工资 > 0 ? 年休假工资.ToString("#0.##") : "—"; }
private static bool SychSalaryResult(SalResult sr) { try { SalaryResult item = AddSalaryResult(sr.员工编号, sr.年度, sr.月份); #region 日历信息 item.日历组 = sr.日历组; item.期间 = sr.期间; #endregion item.姓名 = sr.姓名; item.员工类型 = sr.员工类型; item.身份证号 = sr.身份证号; #region 所属机构 item.公司编号 = sr.公司编号; item.机构编号 = sr.机构编号; item.部门编号 = sr.部门编号; item.公司名称 = sr.公司名称; item.部门名称 = sr.部门名称; #endregion #region 财务信息 item.银行账号 = sr.银行账号; item.帐户名称 = sr.帐户名称; GetSeq(sr, item); #endregion #region 薪酬体系 item.薪资组 = sr.薪资组.Trim(); item.薪资集合 = sr.薪资集合; item.薪酬体系编号 = sr.薪酬体系编号; item.薪等编号 = sr.薪等编号; item.薪级编号 = sr.薪级编号; SalaryGrade grade = SalaryGrade.Get(item.薪资集合, item.薪酬体系编号, item.薪等编号, new DateTime(item.年度, item.月份, 1)); if (grade != null) { item.薪等名称 = grade.薪等名称; } PayGroup group = PayGroup.Get(item.薪资组); if (group != null) { item.薪资组名称 = group.中文名; } #endregion #region 职务数据 item.职务代码 = sr.职务代码; item.职务等级 = sr.职务等级; item.职位编号 = sr.职位编号; item.班别 = sr.班别; #endregion #region 出勤情况 item.企业排班天数 = sr.企业排班天数; item.法定工作日天数 = sr.法定工作日天数; item.实际出勤天数 = sr.实际出勤天数; item.法定工作日出勤天数 = sr.法定工作日出勤天数; item.法定节假日出勤天数 = sr.法定节假日出勤天数; item.休息日出勤天数 = sr.休息日出勤天数; item.月综合出勤天数 = sr.月综合出勤天数; item.工作日延长出勤小时数 = sr.工作日延长出勤小时数; #endregion #region 出勤工资 item.法定工作日出勤工资 = sr.法定工作日出勤工资; item.法定节假日出勤工资 = sr.法定节假日出勤工资; item.休息日出勤工资 = sr.休息日出勤工资; item.月综合出勤工资 = sr.月综合出勤工资; item.工作日延长工作出勤工资 = sr.工作日延长工作出勤工资; #endregion item.未休年休假工资 = sr.未休年休假工资; item.特殊社保的基准工资 = sr.特殊社保的基准工资; item.基数等级与基准工资差额 = sr.基数等级与基准工资差额; item.交通餐饮补助 = sr.交通餐饮补助; #region 社保缴纳 item.养老保险个人缴纳金额 = sr.养老保险个人缴纳金额; item.医疗保险个人缴纳金额 = sr.医疗保险个人缴纳金额; item.失业保险个人缴纳金额 = sr.失业保险个人缴纳金额; item.住房公积金个人缴纳金额 = sr.住房公积金个人缴纳金额; item.大病医疗个人缴纳金额 = sr.大病医疗个人缴纳金额; //社保合计 item.社保个人缴纳金额 = sr.社保个人缴纳金额; item.社保公司缴纳金额 = sr.社保公司缴纳金额; #endregion #region 累加器 item.出勤工资 = sr.出勤工资; item.津贴补助 = sr.津贴补助; item.综合考核工资 = sr.综合考核工资; item.奖项 = sr.奖项; item.扣项 = sr.扣项; #endregion #region 工资类别小计 item.挂钩效益工资 = sr.挂钩效益工资; item.其他所得 = sr.其他所得; item.其他扣款 = sr.其他扣款; item.预留风险金 = sr.预留风险金; item.实得满勤奖 = sr.实得满勤奖; item.应得满勤奖 = sr.应得满勤奖; item.表工资 = sr.表工资; item.设定工资 = sr.设定工资; item.基准工资 = sr.基准工资; item.工资降级 = sr.工资降级; item.代垫费用 = sr.代垫费用; item.个人所得税金额 = sr.个人所得税金额; item.表工资总额 = sr.表工资总额; item.应税工资额 = sr.应税工资额; item.合计应税工资额 = sr.合计应税工资额; item.实发工资总额 = sr.实发工资总额; #endregion item.工资职等 = GetGrade(item); item.次同步时间 = DateTime.Now; item.Save(); return(true); } catch (Exception e) { YiKang.Common.WriteToEventLog("同步工资失败:" + e.ToString()); return(false); } }
//自动创建借款记录 public static List <MonthlyWageLoanItem> AutoGenerateMonthlyWageLoanItems(int year, int month) { List <MonthlyWageLoanItem> list = new List <MonthlyWageLoanItem>(); //获取正在执行的借款标准 //2018-9-13 部分员工可能会有多条执行标准,查询结果按开始时间先后排序,执行的原则是新的标准会替代旧的标准,所以实际会计算多次,后计算的覆盖旧的 List <WageLoan> wageLoanList = GetWageLoans(year, month); foreach (WageLoan wl in wageLoanList) { SalaryResult sr = SalaryResult.GetFromCache(wl.员工编号, year, month); //如果已经发上表工资 if (sr != null) { if (sr.企业排班天数 == 0) { continue; } string 班别 = sr.班别.Trim(); decimal 月借款额度 = wl.月借款额度; decimal 排班天数 = sr.企业排班天数; decimal 实际出勤天数 = sr.实际出勤天数; decimal 实际借款金额 = 0; if (班别 == "6") //行政班 { if (sr.实际出勤天数 > 10) { 实际借款金额 = 月借款额度 - 月借款额度 / (decimal)21.75 * (排班天数 - 实际出勤天数); } else { 实际借款金额 = (月借款额度 / (decimal)21.75) * 实际出勤天数; } } else { if (班别 == "8") //特殊+业务代表+司机 { 实际借款金额 = (月借款额度 / 排班天数) * 实际出勤天数; } else { 实际借款金额 = (月借款额度 / 26) * 实际出勤天数; } } MonthlyWageLoanItem item = MonthlyWageLoanItem.AddMonthlyWageLoanItem(wl.员工编号, year, month); item.姓名 = sr.姓名; item.约定税率 = wl.约定税率; item.月借款标准 = wl.月借款额度; item.应出勤天数 = sr.企业排班天数; item.实际出勤天数 = sr.实际出勤天数; item.实际借款金额 = Math.Round(实际借款金额, 2, MidpointRounding.AwayFromZero); item.代缴个税 = Math.Round(item.实际借款金额 * wl.约定税率 * (decimal)0.01, 2, MidpointRounding.AwayFromZero); item.税后实发金额 = item.实际借款金额 - item.代缴个税; item.Save(); list.Add(item); } } return(list); }
/// <summary> /// 通过 Id 获取 /// </summary> /// <param name="id"></param> /// <returns></returns> public static SalaryResult GetSalaryResult(Guid id) { SalaryResult obj = (SalaryResult)MyHelper.XpoSession.GetObjectByKey(typeof(SalaryResult), id); return(obj); }