Esempio n. 1
0
        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;
        }
Esempio n. 3
0
        //清理无效的记录
        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);
        }
Esempio n. 4
0
        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();
 }
Esempio n. 6
0
        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);
        }
Esempio n. 7
0
        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);
        }
Esempio n. 9
0
 public static string GetGrade(SalaryResult sr)
 {
     //"003": //广西华劲竹林发展有限公司
     //"005": //赣州华劲竹林发展有限公司
     if (sr.公司编号 == "003" || sr.公司编号 == "005")
     {
         return(GetGrade2(sr));
     }
     else
     {
         return(GetGrade1(sr));
     }
 }
Esempio n. 10
0
        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.公司简称;
                }
            }
        }
Esempio n. 11
0
        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();
            }
        }
Esempio n. 12
0
        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);
        }
Esempio n. 13
0
        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();
            }
        }
Esempio n. 14
0
        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.速算扣除数;
            }
        }
Esempio n. 15
0
        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(职务等级);
        }
Esempio n. 17
0
        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.##") : "—";
        }
Esempio n. 18
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);
            }
        }
Esempio n. 19
0
        //自动创建借款记录
        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);
        }
Esempio n. 20
0
        /// <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);
        }