Пример #1
0
        private void bandedGridView1_CellValueChanging(object sender, CellValueChangedEventArgs e)
        {
            WageLoan row = bandedGridView1.GetRow(e.RowHandle) as WageLoan;

            if (row != null)
            {
            }
        }
        public MyMonthlyWageLoanItemListForm(WageLoan wageLoan)
        {
            // This call is required by the Windows Form Designer.
            InitializeComponent();

            // TODO: Add any initialization after the InitializeComponent call
            this.currWageLoan = wageLoan;
        }
Пример #3
0
        private void bandedGridView1_FocusedRowChanged(object sender, FocusedRowChangedEventArgs e)
        {
            WageLoan row = bandedGridView1.GetRow(e.PrevFocusedRowHandle) as WageLoan;

            if (row != null)
            {
            }
        }
        private void ShowDetailItems()
        {
            WageLoan item = bandedGridView1.GetRow(bandedGridView1.FocusedRowHandle) as WageLoan;

            if (item != null)
            {
                MyMonthlyWageLoanItemListForm form = new MyMonthlyWageLoanItemListForm(item);
                form.ShowDialog();
            }
        }
        private void btn添加_Click(object sender, EventArgs e)
        {
            List <EmployeeInfo> list = new List <EmployeeInfo>();
            //获取正在执行的报账工资标准
            List <WageLoan> wlList = WageLoan.GetEffectiveWageLoans();

            foreach (WageLoan wl in wlList)
            {
                EmployeeInfo emp = wl.员工信息;
                if (list.Find(a => a.员工编号 == emp.员工编号) == null)
                {
                    list.Add(emp);
                }
            }

            EmployeePickerForm form = new EmployeePickerForm(list);

            form.OnSelected += OnEmployeeSelectd;
            form.ShowDialog();
        }
Пример #6
0
        public bool Calculate()
        {
            计算完成 = false;

            try
            {
                bool 工资系数 = false;

                #region 获取月薪酬标准

                //获取交通餐饮补助标准
                交通餐饮补助标准 = PsHelper.GetTrafficSubsidies(员工编号, 期间开始);
                //获取满勤奖标准
                满勤奖标准 = PsHelper.GetFullAttendancePayFromCache(this.表工资表.薪酬体系编号, this.表工资表.薪等编号, 期间开始);
                //工资借款标准
                WageLoan wl = WageLoan.GetEffective(员工编号, 期间开始);
                if (wl != null)
                {
                    工资借款标准 = wl.月借款额度;
                }
                //报账工资标准
                RembursementSalary rs = RembursementSalary.GetEffective(员工编号, 期间开始);
                if (rs != null)
                {
                    报账工资标准 = rs.月度可报账标准_税前;
                }
                //2018-7-9 契约津贴
                ContractAllowance ca = ContractAllowance.GetEffective(员工编号, 期间开始);
                if (ca != null)
                {
                    契约津贴标准 = ca.月津贴额度;
                }

                #endregion

                //获取月薪资料
                if (!ReadMonthlySalaryData())
                {
                    计算错误描述 = "没有找到 " + 姓名 + "【" + 员工编号 + "】" + 年 + "年 " + 月 + "月的职级工资(即执行月薪)";
                    return(false);
                }
                if (执行职级月薪 == 0)
                {
                    计算错误描述 = 姓名 + "【" + 员工编号 + "】" + 年 + "年 " + 月 + "月的职级工资是 0";
                    return(false);
                }
                职级工资_标准 = 执行职级月薪;

                //2018年5月18日 如果录入了员工的薪酬结构,以薪酬结构的工资为准
                SalaryStructure 薪酬结构 = SalaryStructure.GetEffective(员工编号, 期间开始);
                if (薪酬结构 == null)
                {
                    职级工资_实际 = 执行职级月薪;
                }
                else
                {
                    职级工资_实际   = 薪酬结构.月薪项目_小计;
                    本月执行绩效工资额 = 薪酬结构.月薪项目_减项_绩效工资;
                    薪资奖励_月摊   = 薪酬结构.年薪_奖励 / 12;
                    年绩效工资_月摊  = 薪酬结构.年薪_绩效工资 / 12;
                }

                月应发工资 = 职级工资_标准 - 薪资奖励_月摊 - 年绩效工资_月摊 - 工资借款标准 - 报账工资标准 - 福利借款标准 - 契约津贴标准 - 本月执行绩效工资额;

                #region 计算其它奖扣项

                //计算其它奖项
                List <OtherMoney> myOtherMoneyItems = 工资计算器.其它奖扣项.FindAll(a => a.员工编号 == this.员工编号 && a.类型 == "其它奖项");
                其它奖项 = myOtherMoneyItems.Sum(a => a.金额);

                //计算其它扣项
                myOtherMoneyItems = 工资计算器.其它奖扣项.FindAll(a => a.员工编号 == this.员工编号 && a.类型 == "其它扣项");
                其它扣项 = myOtherMoneyItems.Sum(a => a.金额);

                //计算工资降级
                myOtherMoneyItems = 工资计算器.其它奖扣项.FindAll(a => a.员工编号 == this.员工编号 && a.类型 == "工资降级");
                工资降级  = myOtherMoneyItems.Sum(a => a.金额);
                工资降级 += 表工资表.工资降级;

                //计算代垫费用
                myOtherMoneyItems = 工资计算器.其它奖扣项.FindAll(a => a.员工编号 == this.员工编号 && a.类型 == "代垫费用");
                其它代垫费用            = myOtherMoneyItems.Sum(a => a.金额);
                代垫费用 = 表工资表.代垫费用 + 其它代垫费用;
                #endregion

                #region 获取工资系数

                //获取工资系数
                EmpPayRate epRate = 工资计算器.工资系数表.Find(a => a.员工编号 == this.员工编号);
                if (epRate != null)
                {
                    工资系数 = epRate.系数;
                    工资系数 = true;
                }

                #endregion

                //有封闭工资的人才需要计算
                if (职级工资_实际 > 0 || 其它奖项 != 0 || 其它扣项 != 0 || 工资降级 != 0 || 其它代垫费用 != 0)
                {
                    //2017.10.22 如果封闭工资没有设置职级工资,职级工资就是上表工资的工资标准
                    //主要针对没有封闭职级工资,但是有比较大的奖项在封闭工资系统发放的情况
                    if (职级工资_实际 == 0)
                    {
                        职级工资_实际 = 表工资表.表工资 + 工资降级;
                    }

                    #region 计算封闭出勤工资

                    //年休假工资
                    年休假工资 = 表工资表.未休年休假工资;

                    //清除老的还款记录
                    PersonRepayment.Clear(this.员工编号, this.年, this.月);

                    #region 自动创建还款记录

                    //自动创建还款记录
                    List <PersonBorrow> personBorrowList = PersonBorrow.GetMyBorrows(this.员工编号, this.年, this.月);
                    foreach (PersonBorrow borrowItem in personBorrowList)
                    {
                        //如果还有未还清的款
                        if (borrowItem.余额 > 0)
                        {
                            PersonRepayment pRepayment = PersonRepayment.AddPersonRepayment(borrowItem, this.年, this.月);
                            pRepayment.还款金额 = borrowItem.余额 > borrowItem.每月扣还 ? borrowItem.每月扣还 : borrowItem.余额;
                            pRepayment.员工编号 = this.员工编号;
                            pRepayment.创建人  = AccessController.CurrentUser.姓名;
                            pRepayment.创建时间 = DateTime.Now;
                            pRepayment.Save();
                        }
                    }
                    #endregion

                    #region 获取还款记录

                    List <PersonRepayment> prList = PersonRepayment.GetPersonRepayments(this.员工编号, this.年, this.月);
                    if (prList.Count > 0)
                    {
                        PersonRepayment 还款_提前借工资 = prList.Find(a => a.项目 == "提前借工资");
                        if (还款_提前借工资 != null)
                        {
                            提前借工资本月还款额 = 还款_提前借工资.还款金额;
                        }

                        PersonRepayment 还款_个人专用车费用 = prList.Find(a => a.项目 == "个人专用车费用");
                        if (还款_个人专用车费用 != null)
                        {
                            个人专用车费用本月还款额 = 还款_个人专用车费用.还款金额;
                        }
                    }

                    #endregion

                    #region 获取报销记录

                    List <PersonReimbursement> rbList = PersonReimbursement.GetPersonReimbursements(this.员工编号, this.年, this.月);
                    if (rbList.Count > 0)
                    {
                        PersonReimbursement 报销_月租房报销 = rbList.Find(a => a.项目 == "月租房报销");
                        if (报销_月租房报销 != null)
                        {
                            月租房报销费用本月实际报销额 = 报销_月租房报销.报销金额;
                        }

                        PersonReimbursement 报销_探亲飞机票 = rbList.Find(a => a.项目 == "探亲飞机票");
                        if (报销_探亲飞机票 != null)
                        {
                            探亲飞机票本月实际报销额 = 报销_探亲飞机票.报销金额;
                        }
                    }

                    #endregion

                    #region 获取绩效工资

                    EffectivePerformanceSalary 绩效考核 = EffectivePerformanceSalary.GetEffective(this.员工编号, this.年, this.月);
                    if (绩效考核 != null)
                    {
                        //本月执行绩效工资额 = 绩效考核.绩效工资;
                        本月实得绩效工资额 = 绩效考核.实得工资;
                    }

                    #endregion

                    if (工资系数)
                    {
                        本月剩余月薪额 = 职级工资_实际 * 工资系数 - 工资借款标准 - 报账工资标准 - 福利借款标准 - 契约津贴标准;
                    }

                    else
                    {
                        本月剩余月薪额 = 职级工资_实际 - 工资借款标准 - 报账工资标准 - 福利借款标准 - 契约津贴标准;
                    }

                    //2016.6.6 调整,将减掉的部分移到后面
                    //本月剩余月薪额 = 本月剩余月薪额 - 提前借工资本月还款额 - 个人专用车费用本月还款额 - 月租房报销费用本月实际报销额 - 探亲飞机票本月实际报销额 - 本月执行绩效工资额;

                    //计算挂考勤的工资
                    挂考勤的工资 = 本月剩余月薪额 - 表工资表.未休年休假工资;

                    //排班天数
                    排班天数 = 表工资表.企业排班天数;

                    //出勤天数
                    实际出勤天数 = 表工资表.实际出勤天数;

                    #region 计算放弃年休假补助

                    //2018-4-4 计算放弃年休假补助
                    List <WaiveAnnualVacation> wavList = this.工资计算器.放弃年休假记录表.FindAll(a => a.员工编号 == this.员工编号);
                    放弃年休假天数 = wavList.Sum(a => a.放弃天数);
                    放弃年休假补助 = ((职级工资_实际 - 满勤奖标准) / (decimal)21.75) * 放弃年休假天数 * (decimal)0.8;

                    #endregion

                    //封闭出勤工资基准
                    封闭出勤工资计算标准 = 挂考勤的工资 - 工资降级 - 表工资表.表工资 - 满勤奖标准 - 交通餐饮补助标准;
                    //剔除考核工资个人部分
                    封闭出勤工资计算标准 -= 本月执行绩效工资额;
                    //本次发放标准
                    本次发放标准 = 封闭出勤工资计算标准;

                    //出勤天数
                    班别 = 表工资表.班别.Trim();

                    decimal attDays = 实际出勤天数;
                    //封闭出勤工资中, 行政班出勤天数不能大于排班天数
                    if (班别 == "6") //行政班
                    {
                        attDays = 实际出勤天数 > 排班天数 ? 排班天数 : 实际出勤天数;
                    }

                    if (班别 == "6") //行政班
                    {
                        if (实际出勤天数 > 10)
                        {
                            封闭出勤工资 = 封闭出勤工资计算标准 - 封闭出勤工资计算标准 / (decimal)21.75 * (排班天数 - attDays);
                        }
                        else
                        {
                            封闭出勤工资 = (封闭出勤工资计算标准 / (decimal)21.75) * attDays;
                        }
                    }
                    else
                    {
                        if (班别 == "8") //特殊+业务代表+司机
                        {
                            封闭出勤工资 = (封闭出勤工资计算标准 / 排班天数) * attDays;
                        }
                        else
                        {
                            封闭出勤工资 = (封闭出勤工资计算标准 / 26) * attDays;
                        }
                    }

                    #endregion

                    //封闭奖扣合计
                    封闭奖扣合计 = 其它奖项 - 其它扣项;
                    //工资合计
                    //2016.6.6 调整 与上面对应
                    //原来  封闭工资合计 = 封闭出勤工资 + 封闭奖扣合计 + 津贴补助 + 本月实得绩效工资额;
                    封闭工资合计 = 封闭出勤工资 + 封闭奖扣合计 + 津贴补助 + 本月实得绩效工资额 - 提前借工资本月还款额 - 个人专用车费用本月还款额 - 月租房报销费用本月实际报销额 - 探亲飞机票本月实际报销额 + 放弃年休假补助;
                    封闭工资合计 = Math.Round(封闭工资合计, 2, MidpointRounding.AwayFromZero);

                    //总应税工资
                    总应税工资 = 表工资表.合计应税工资额 + 封闭工资合计;  //上表税前应税工资(含年休假工资)加上封闭部分的工资

                    //工资发放总额
                    工资发放总额 = 表工资表.表工资总额 + 表工资表.未休年休假工资 + 封闭工资合计;    //上表工资总额不含年休假

                    //个税(总个税)
                    个人所得税 = GetTax(总应税工资);

                    //实发(含封闭和上表)
                    实发工资 = 总应税工资 - 个人所得税 - 代垫费用;
                    实发工资 = Math.Round(实发工资, 2, MidpointRounding.AwayFromZero);

                    计算完成 = true;
                }
                return(true);
            }
            catch (Exception e)
            {
                计算错误描述 = 姓名 + "【" + 员工编号 + "】计算失败" + e.ToString();
            }
            return(false);
        }
Пример #7
0
 private void btn计算_Click(object sender, EventArgs e)
 {
     WageLoan.AutoGenerateMonthlyWageLoanItems(Convert.ToInt32(year.Value), Convert.ToInt32(month.EditValue));
     LoadData();
 }
 private void EditWageLoanForm_Load(object sender, EventArgs e)
 {
     this.Text = "员工工资借款明细表";
     all_rows  = WageLoan.GetEffectiveWageLoans();
     LoadData(null);
 }
 private void checkEdit包括已失效的_CheckedChanged(object sender, EventArgs e)
 {
     all_rows = checkEdit包括已失效的.Checked ? WageLoan.GetWageLoans(null, true) : WageLoan.GetEffectiveWageLoans();
     LoadData(textEdit关键字.Text.Trim());
 }
Пример #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
        }