//更新到正式表
        public void UpdateToFormalTable()
        {
            if (另一人录入的记录 == null || this.内容不同的字段.Count > 0)
            {
                return;
            }

            MonthlyWageLoanItem m = MonthlyWageLoanItem.AddMonthlyWageLoanItem(this.员工编号, this.年, this.月);

            this.CopyWatchMember(m);

            m.创建人  = this.录入人;
            m.创建时间 = DateTime.Now;
            m.Save();

            //更新生效标记
            if (!this.已生效)
            {
                this.生效时间 = DateTime.Now;
                this.Save();

                MonthlyWageLoanItemEntry opposite = 另一人录入的记录;
                opposite.生效时间 = DateTime.Now;
                opposite.Save();
            }
        }
        public static MonthlyWageLoanItem AddMonthlyWageLoanItem(string emplid, int year, int month)
        {
            MonthlyWageLoanItem item = GetMonthlyWageLoanItem(emplid, year, month);

            if (item == null)
            {
                item      = new MonthlyWageLoanItem();
                item.标识   = Guid.NewGuid();
                item.员工编号 = emplid;
                item.年    = year;
                item.月    = month;
                item.创建人  = AccessController.CurrentUser == null ? "系统" : AccessController.CurrentUser.姓名;
                item.创建时间 = DateTime.Now;
                item.Save();
            }
            return(item);
        }
        protected override void OnSaving()
        {
            if (this.期间 == null)
            {
                this.期间 = GetPeriod(年, 月);
            }

            MonthlyWageLoanItem found = GetMonthlyWageLoanItem(this.员工编号, this.期间);

            if (found != null && found.标识 != this.标识)
            {
                throw new Exception("已存在该员工的报销记录,不能重复创建。");
            }
            else
            {
                base.OnSaving();
            }

            MONTHLYWAGELOANITEM_CACHE.Set(CacheKey, this, TimeSpan.FromHours(10));
        }
        public static MonthlyWageLoanItem GetMonthlyWageLoanItem(Guid id)
        {
            MonthlyWageLoanItem obj = (MonthlyWageLoanItem)Session.DefaultSession.GetObjectByKey(typeof(MonthlyWageLoanItem), id);

            return(obj);
        }
예제 #5
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);
        }