Пример #1
0
        protected void LoadData(bool onlyPayGroup)
        {
            currRows.Clear();

            CreateWaitDialog("正在查询...", "请稍等");
            //清除原来的数据
            List <SalaryResult> rows = SalaryResult.GetSalaryResults((string)cbb日历组.EditValue);

            foreach (SalaryResult row in rows)
            {
                if (myPayGroupList.Find(a => a.英文名 == row.薪资组.Trim()) != null)
                {
                    currRows.Add(row);
                }
            }
            if (onlyPayGroup)
            {
                currRows = currRows.FindAll(a => a.薪资组 == (string)ccb薪资组.EditValue);
                SetButtonEnabled();
            }
            currRows = currRows.OrderBy(a => a.财务公司).ThenBy(a => a.财务部门序号).ThenBy(a => a.员工序号).ToList();

            CreateWaitDialog("正在加载...", "请稍等");

            gridControl1.DataSource = currRows;
            gridControl1.RefreshDataSource();

            CloseWaitDialog();
        }
Пример #2
0
        private void btn重新同步_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("重新同步后需重新审核,确实重新同步吗?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2, 0, false) == DialogResult.Yes)
            {
                Thread.Sleep(200);

                CreateWaitDialog("正在同步...", "请耐心等待");
                //删除历史数据
                SalaryAuditingResult.ClearAuditingResult((string)cbb日历组.EditValue, (string)ccb薪资组.EditValue);
                //删除工资表
                PrivateSalary.ClearPrivateSalary((string)cbb日历组.EditValue, (string)ccb薪资组.EditValue);
                //清除旧的抽查记录
                PayCheckRecord.ClearPayCheckRecord((string)cbb日历组.EditValue, (string)ccb薪资组.EditValue);
                //同步基础工资
                StringBuilder sb = SalaryResult.SychSalaryResult((string)cbb日历组.EditValue, (string)ccb薪资组.EditValue);
                //同步工资明细
                StringBuilder sbItem = SalaryResultItem.SychSalaryResultItem((string)cbb日历组.EditValue, (string)ccb薪资组.EditValue);
                sb.Append(sbItem.ToString());

                CloseWaitDialog();

                MyHelper.WriteLog(LogType.信息, "重新同步上表工资", String.Format("日历组:{0}, {1}   薪资组: {2}, {3}", (string)cbb日历组.EditValue, cbb日历组.Text, (string)ccb薪资组.EditValue, ccb薪资组.Text));

                string msg = sb.ToString();
                if (string.IsNullOrEmpty(msg))
                {
                    LoadData(true);
                }
                else
                {
                    MessageBox.Show(msg);
                }
            }
            SetButtonEnabled();
        }
Пример #3
0
        static void Main(string[] args)
        {
            //连接数据库
            SqlConnection conn = MyHelper.GetConnection();

            DevExpress.Xpo.XpoDefault.DataLayer = CreateThreadSafeDataLayer(conn);
            DevExpress.Xpo.Session.DefaultSession.Connection = conn;

            Console.WriteLine("正在同步薪酬体系....");
            SalaryPlan.SychSalaryPlan();

            Console.WriteLine("正在同步薪等....");
            SalaryGrade.SychSalaryGrade();

            Console.WriteLine("正在同步薪级....");
            SalaryStep.SychSalaryStep();

            Console.WriteLine("正在同步员工基本信息....");
            EmployeeInfo.SychEmployeeInfo();

            Console.WriteLine("正在同步工资表....");
            SalaryResult.SychSalaryResult();

            Console.WriteLine("正在清理无效的月薪记录....");
            MonthlySalary.ClearInvalidRecord();

            Console.WriteLine("正在同步绩效考核结果....");
            KpiItem.SychKpiItem();

            Console.WriteLine("同步完毕!");
            //Console.WriteLine("按任意键退出...");
            //Console.ReadKey(true);
        }
Пример #4
0
 private void Init()
 {
     个税起征点   = PsHelper.GetPersonTaxPoint(期间_开始);
     标准职级工资表 = StepPayRate.GetEffectives(期间_开始);
     个人职级工资表 = PersonPayRate.GetEffectives(期间_开始);
     表工资表    = SalaryResult.GetSalaryResults(薪资组, 日历组);
     其它奖扣项   = OtherMoney.GetOtherMoneyList(年, 月);
     工资系数表   = EmpPayRate.GetEmpPayRateList(年, 月);
 }
Пример #5
0
        public SalaryResult GetPage(string filter, int?draw, int?initialPage, int?pageSize, string sortDir, string sortBy)
        {
            using (SATEntities db = new SATEntities())
            {
                var data = db.tb_Salary.ToList();

                int recordsTotal = data.Count();

                if (!string.IsNullOrEmpty(filter))
                {
                    data = data.Where(x => x.SaLevel.ToString().Contains(filter) || x.SaStep.ToString().Contains(filter) || x.SaRate.ToString().Contains(filter)).ToList();
                }

                int recordsFiltered = data.Count();

                switch (sortBy)
                {
                case "SaLevel":
                    data = (sortDir == "asc") ? data.OrderBy(x => x.SaLevel).ToList() : data.OrderByDescending(x => x.SaLevel).ToList();
                    break;

                case "SaStep":
                    data = (sortDir == "asc") ? data.OrderBy(x => x.SaStep).ToList() : data.OrderByDescending(x => x.SaStep).ToList();
                    break;

                case "saRate":
                    data = (sortDir == "asc") ? data.OrderBy(x => x.SaRate).ToList() : data.OrderByDescending(x => x.SaRate).ToList();
                    break;
                }

                int start  = initialPage.HasValue ? (int)initialPage / (int)pageSize : 0;
                int length = pageSize ?? 10;

                var list = data.Select((s, i) => new SalaryViewModel()
                {
                    RowNumber = i + 1,
                    SaID      = s.SaID,
                    SaLevel   = s.SaLevel,
                    SaStep    = s.SaStep,
                    SaRate    = s.SaRate
                }).Skip(start * length).Take(length).ToList();


                SalaryResult result = new SalaryResult();
                result.draw            = draw ?? 0;
                result.recordsTotal    = recordsTotal;
                result.recordsFiltered = recordsFiltered;
                result.data            = list;

                return(result);
            }
        }
        public PersonPayCounter(PayCounter payCounter, SalaryResult salaryResult)
        {
            this.工资计算器 = payCounter;
            this.表工资表  = salaryResult;

            this.员工编号 = salaryResult.员工编号;
            this.姓名   = salaryResult.姓名;
            this.年    = salaryResult.年度;
            this.月    = salaryResult.月份;
            this.薪资组  = salaryResult.薪资组;
            this.日历组  = salaryResult.日历组;
            this.薪酬体系 = salaryResult.薪酬体系编号;

            Calculate();
        }
        List <MonthlySalaryInput> CreateEditingRows()
        {
            List <MonthlySalaryInput> list = new List <MonthlySalaryInput>();

            //排序
            emp_list = emp_list.OrderBy(a => a.部门序号).ThenBy(a => a.机构序号).ThenBy(a => a.机构名称).ThenBy(a => a.员工序号).ToList();
            DateTime lastSalaryDate = SalaryResult.GetLastSalaryDate();
            int      order          = 1;

            foreach (EmployeeInfo emp in emp_list)
            {
                //2018-5-25 只创建没有月薪标准的人员
                //将当前执行的标准带过来
                MonthlySalary effectiveMonthlySalary = MonthlySalary.GetEffective(emp.员工编号, lastSalaryDate);
                if (effectiveMonthlySalary != null)
                {
                    continue;
                }

                string lastSalaryGrade = SalaryResult.GetLastestSalaryGrade(emp.员工编号);
                if (lastSalaryGrade == null)
                {
                    lastSalaryGrade = emp.职等;
                }

                //创建员工月薪记录
                MonthlySalaryInput ms = MonthlySalaryInput.AddMonthlySalaryInput(emp.员工编号, period, isCheck, true);
                ms.序号   = order;
                ms.薪酬体系 = salary_plan;
                ms.职等   = lastSalaryGrade;
                ms.群组   = group;
                //2018-4-23 新建的记录备注不要带过来
                if (ms.录入人.Trim() == "")
                {
                    ms.开始执行日期 = DateTime.MinValue;
                    ms.调整类型   = "";
                    ms.备注     = "";
                }
                ms.Save();
                list.Add(ms);
                order++;
            }

            return(list);
        }
        private void OnEmployeeSelectd(object sender, EmployeeInfo emp)
        {
            if (monthly_salary_list.Find(a => a.员工编号 == emp.员工编号) == null)
            {
                string lastSalaryGrade = SalaryResult.GetLastestSalaryGrade(emp.员工编号);
                if (lastSalaryGrade == null)
                {
                    lastSalaryGrade = emp.职等;
                }

                bool copyEffective = false;
                //将当前执行的标准带过来
                MonthlySalary effectiveMonthlySalary = MonthlySalary.GetEffective(emp.员工编号, DateTime.Today);
                if (effectiveMonthlySalary != null)
                {
                    if (effectiveMonthlySalary.薪酬体系 == salary_plan && effectiveMonthlySalary.职等 == lastSalaryGrade)
                    {
                        copyEffective = true;
                    }
                    //如果是管培生或副总以上人员,都带出来
                    if (jobgrade == null)
                    {
                        copyEffective = true;
                    }
                }
                //创建员工月薪记录
                MonthlySalaryInput item = MonthlySalaryInput.AddMonthlySalaryInput(emp.员工编号, period, isCheck, copyEffective);
                item.序号   = advBandedGridView1.RowCount;
                item.薪酬体系 = salary_plan;
                item.职等   = emp.职等;
                item.群组   = group;
                //2018-4-23 调整类型和备注不要带过来
                item.调整类型 = "";
                item.备注   = "";
                item.Save();

                monthly_salary_list.Add(item);
                UpdateRowNumber();
                gridControl1.RefreshDataSource();
                advBandedGridView1.FocusedRowHandle = advBandedGridView1.RowCount - 1;
            }
        }
        public ActionResult SalaryTable(SalaryResult sr)
        {
            Calculate calculation = new Calculate();
            double    IYPO        = _context.SalaryCalculationConstants.Where(x => x.SCCCode == "IYPO").Select(x => x.SCCRatio).FirstOrDefault();
            double    IKVSPO      = _context.SalaryCalculationConstants.Where(x => x.SCCCode == "IKVSPO").Select(x => x.SCCRatio).FirstOrDefault();
            double    IGSSPO      = _context.SalaryCalculationConstants.Where(x => x.SCCCode == "IGSSPO").Select(x => x.SCCRatio).FirstOrDefault();
            double    IISO        = _context.SalaryCalculationConstants.Where(x => x.SCCCode == "IISO").Select(x => x.SCCRatio).FirstOrDefault();
            double    IDVO        = _context.SalaryCalculationConstants.Where(x => x.SCCCode == "IDVO").Select(x => x.SCCRatio).FirstOrDefault();

            string disability       = "";
            string married          = "";
            string spouseWork       = "";
            string retired          = "";
            int    numberOfChildren = 0;

            List <SalaryResult> resultList = new List <SalaryResult>();
            double insurance      = calculation.EmployeeInsurance(sr.rawSalary, IYPO, IKVSPO, IGSSPO, IISO);
            double stampTax       = calculation.StampTax(sr.rawSalary, IDVO);
            double minLivingAllow = calculation.MinLivingAllowance(married, spouseWork, numberOfChildren);

            if (sr.hiddenBag == "Brüt")
            {
                for (int numberOfMonths = 1; numberOfMonths <= 12; numberOfMonths++)
                {
                    double cita         = calculation.CITA(sr.rawSalary, insurance, numberOfMonths);
                    double mita         = calculation.MITA(cita, numberOfMonths);
                    double resultSalary = calculation.GrossToNet(sr.rawSalary, IYPO, IKVSPO, IGSSPO, IISO, numberOfMonths, IDVO, disability, married, spouseWork, retired, numberOfChildren);

                    resultList.Add(new SalaryResult()
                    {
                        rawSalary      = sr.rawSalary,
                        insurance      = insurance,
                        mita           = mita,
                        stampTax       = stampTax,
                        cita           = cita,
                        resultSalary   = resultSalary,
                        minLivingAllow = minLivingAllow
                    });
                }
            }
            else
            {
                for (int numberOfMonths = 1; numberOfMonths <= 12; numberOfMonths++)
                {
                    double cita         = calculation.CITA(sr.rawSalary, insurance, numberOfMonths);
                    double mita         = calculation.MITA(cita, numberOfMonths);
                    double resultSalary = calculation.NetToGross(sr.rawSalary, IYPO, IKVSPO, IGSSPO, IISO, numberOfMonths, IDVO, disability, married, spouseWork, retired, numberOfChildren);

                    resultList.Add(new SalaryResult()
                    {
                        resultSalary   = resultSalary,
                        insurance      = insurance,
                        mita           = mita,
                        stampTax       = stampTax,
                        cita           = cita,
                        rawSalary      = sr.rawSalary,
                        minLivingAllow = minLivingAllow
                    });
                }
            }
            ViewBag.resultList = resultList;
            ViewBag.hiddenBag  = sr.hiddenBag;
            return(View());
        }
Пример #10
0
        private void FillTable()
        {
            if (mySalary == null)
            {
                return;
            }

            DateTime 期间开始 = new DateTime(mySalary.年度, mySalary.月份, 1);
            DateTime 期间结束 = 期间开始.AddMonths(1).AddDays(-1);

            EmployeeSalaryStructure 薪酬结构 = mySalary.薪酬结构;
            SalaryResult            表工资  = mySalary.基础工资表;
            PrivateSalary           封闭工资 = mySalary;
            WageLoan          工资借款       = WageLoan.GetEffective(mySalary.员工编号, 期间开始);
            ContractAllowance 契约津贴       = ContractAllowance.GetEffective(mySalary.员工编号, 期间开始);

            decimal 月薪剩余 = 0;

            #region 薪酬结构
            if (薪酬结构 != null)
            {
                cells["G3"].Value = (薪酬结构.年薪_合计 / 10000).ToString("#0.####");
                cells["G4"].Value = (薪酬结构.年薪_奖励 / 10000).ToString("#0.####");
                cells["G5"].Value = (薪酬结构.年薪_12个月 / 10000).ToString("#0.####");
            }
            else
            {
                cells["G3"].Value = (封闭工资.职级工资 * 12 / 10000).ToString("#0.####");
                cells["G5"].Value = 封闭工资.职级工资.ToString("#0.##");
            }

            cells["G6"].Value = 封闭工资.职级工资.ToString("#0.##");
            月薪剩余 = 封闭工资.职级工资;

            if (工资借款 != null)
            {
                List <MonthlyWageLoanItem> items = MonthlyWageLoanItem.GetMonthlyWageLoanItems(mySalary.员工编号);
                items = items.FindAll(a => a.期间开始 >= 工资借款.开始时间 && a.期间开始 <= 期间结束);

                cells["G7"].Value = 工资借款.月借款额度.ToString("#0.##");
                cells["G8"].Value = items.Sum(a => a.月借款标准).ToString("#0.##");

                月薪剩余 -= 工资借款.月借款额度;
            }

            if (契约津贴 != null)
            {
                List <MonthlyContractAllowanceItem> items = MonthlyContractAllowanceItem.GetMonthlyContractAllowanceItems(mySalary.员工编号);
                items = items.FindAll(a => a.期间开始 >= 契约津贴.开始时间 && a.期间开始 <= 期间结束);

                cells["G7"].Value = 契约津贴.月津贴额度.ToString("#0.##");
                cells["G8"].Value = items.Sum(a => a.月津贴标准).ToString("#0.##");

                月薪剩余 -= 契约津贴.月津贴额度;
            }

            月薪剩余 -= 封闭工资.本月执行绩效工资额;

            cells["G16"].Value = 封闭工资.本月执行绩效工资额.ToString("#0.##");
            cells["G17"].Value = 月薪剩余.ToString("#0.##");
            #endregion

            //工资发放
            #region 工资发放

            cells["G18"].Value = 表工资.企业排班天数.ToString("#0.##");
            cells["G19"].Value = 表工资.实际出勤天数.ToString("#0.##");
            cells["G20"].Value = 封闭工资.总出勤工资.ToString("#0.##");

            cells["G21"].Value = 表工资.未休年休假工资.ToString("#0.##");
            cells["G22"].Value = 表工资.实得满勤奖.ToString("#0.##");
            cells["G23"].Value = 封闭工资.总补助工资.ToString("#0.##");

            decimal 加班工资 = 表工资.法定节假日出勤工资 + 表工资.休息日出勤工资 + 表工资.月综合出勤工资 + 表工资.工作日延长工作出勤工资;
            cells["G24"].Value = 加班工资.ToString("#0.##");
            cells["G25"].Value = 表工资.综合考核工资.ToString("#0.##");
            cells["G28"].Value = 封闭工资.奖项_不含满勤奖.ToString("#0.##");
            cells["G29"].Value = 封闭工资.扣项.ToString("#0.##");

            cells["G30"].Value = 封闭工资.工资发放总额.ToString("#0.##");
            //社保缴纳
            cells["G33"].Value = 表工资.住房公积金个人缴纳金额.ToString("#0.##");
            cells["G34"].Value = 表工资.养老保险个人缴纳金额.ToString("#0.##");
            cells["G35"].Value = 表工资.大病医疗个人缴纳金额.ToString("#0.##");
            cells["G36"].Value = 表工资.医疗保险个人缴纳金额.ToString("#0.##");
            cells["G37"].Value = 表工资.失业保险个人缴纳金额.ToString("#0.##");
            cells["G38"].Value = 0; //生育
            cells["G39"].Value = 0; //工伤
            cells["G40"].Value = 表工资.社保个人缴纳金额.ToString("#0.##");
            //预留工资作奖金
            //税后工资
            cells["G43"].Value = 封闭工资.总应税工资.ToString("#0.##");
            cells["G44"].Value = 封闭工资.个人所得税.ToString("#0.##");
            cells["G45"].Value = 封闭工资.总代垫费用.ToString("#0.##");
            cells["G46"].Value = 封闭工资.实发工资.ToString("#0.##");
            //年薪资奖励
            //预留工资作奖金
            //税后奖金

            #endregion
        }
        private void btn保存提交_Click(object sender, EventArgs e)
        {
            bool isSameEditor = false;

            if (grade_list.Count > 0 && grade_list[0].职级工资表 != null)
            {
                if (grade_list[0].职级工资表.Count > 0)
                {
                    RankSalaryStandardInput rss_1 = grade_list[0].职级工资表[0];
                    string editor          = rss_1.录入人;
                    string editor_opposite = rss_1.另一人录入的记录 != null?rss_1.另一人录入的记录.录入人.Trim() : "";

                    if (AccessController.CurrentUser.姓名 == editor_opposite && editor_opposite != "")
                    {
                        isSameEditor = true;
                    }
                }
            }

            if (isSameEditor)
            {
                MessageBox.Show("两次录入不能是同一个人");
                return;
            }

            date开始执行日期.ForeColor = Color.Black;
            date开始执行日期.BackColor = Color.Transparent;

            DateTime lastSalaryDate = SalaryResult.GetLastSalaryDate();

            if (date开始执行日期.DateTime < lastSalaryDate)
            {
                MessageBox.Show("提交失败:开始执行日期不正确,不能小于 " + lastSalaryDate.ToString("yyyy年M月d日"));
                return;
            }

            CreateWaitDialog("正在准备保存...", "请稍等");
            try
            {
                //保存执行日期
                foreach (AdjustJobGrade grade in grade_list)
                {
                    if (grade.职级工资表 == null)
                    {
                        continue;
                    }
                    foreach (RankSalaryStandardInput rss in grade.职级工资表)
                    {
                        rss.开始执行日期 = date开始执行日期.DateTime;
                        rss.录入人    = AccessController.CurrentUser.姓名;
                        rss.录入时间   = DateTime.Now;
                        rss.Save();
                    }
                }

                //检查是否所有职等都录入完成
                foreach (AdjustJobGrade grade in grade_list)
                {
                    if (grade.is_separator)
                    {
                        continue;
                    }

                    if (grade.职级工资表 == null || grade.职级工资表.Count == 0)
                    {
                        MessageBox.Show("提交失败:职级工资未录入完成");
                        return;
                    }
                    foreach (RankSalaryStandardInput rss in grade.职级工资表)
                    {
                        if (rss.月薪 == 0)
                        {
                            MessageBox.Show("提交失败:月薪不能为 0");
                            return;
                        }
                    }
                }
                //如果另一个人没有录入,返回
                RankSalaryStandardInput rss_1 = grade_list[0].职级工资表[0];
                if (rss_1.另一人录入的记录 == null)
                {
                    CloseWaitDialog();
                    MessageBox.Show("提交失败:另一个人还没有录入");
                    return;
                }

                SetWaitDialogCaption("正在比较双人录入是否一致...");

                LoadData(true);
                //检查差异
                bool all_same      = true;
                bool startdate_err = false;
                foreach (AdjustJobGrade grade in grade_list)
                {
                    if (grade.is_separator)
                    {
                        continue;                     //忽略分割行
                    }
                    //手动比较录入的内容
                    grade.CompareInputContent();

                    if (grade.内容不同的字段.Count > 0)
                    {
                        foreach (ModifyField field in grade.内容不同的字段)
                        {
                            if (field.称.StartsWith("R"))
                            {
                                continue;
                            }
                            if (field.称 == "开始执行日期")
                            {
                                startdate_err = true;
                            }
                            all_same = false;
                        }
                        break;
                    }
                }
                if (all_same)
                {
                    date开始执行日期.ForeColor = Color.Black;
                    date开始执行日期.BackColor = Color.Transparent;
                    //转成正式
                    foreach (AdjustJobGrade grade in grade_list)
                    {
                        if (grade.is_separator)
                        {
                            continue;                     //忽略分割行
                        }
                        if (grade.职级工资表 == null)
                        {
                            continue;
                        }
                        foreach (RankSalaryStandardInput rss in grade.职级工资表)
                        {
                            rss.UpdateToFormalTable();
                        }
                        grade.调整记录.UpdateToFormalRecord();
                    }
                    CloseWaitDialog();
                    MessageBox.Show("双人录入成功");
                }
                else
                {
                    //显示差异
                    gridControl1.RefreshDataSource();
                    gridControl1.Refresh();
                    //设置开始执行日期颜色
                    if (startdate_err)
                    {
                        date开始执行日期.ForeColor = Color.Yellow;
                        date开始执行日期.BackColor = Color.Red;
                    }
                    //转成正式
                    MessageBox.Show("红色项目不一致,请重新核对修改");
                }
                gridControl1.Focus();
                this.Refresh();
            }
            catch (Exception err)
            {
                MessageBox.Show(err.Message);
            }
            finally
            {
                CloseWaitDialog();
            }
        }