Exemplo n.º 1
0
        public int UpEmployeeAnnualDays(EmployeeAnnualLeave data, AnnualDaysOffset offsetData)
        {
            using (var trans = _DbContext.Database.BeginTransaction()){
                var count = 0;
                try
                {
                    if (offsetData.reason == "" || offsetData.reason == null)
                    {
                        return(0);
                    }
                    _DbContext.annualdaysoffset.Add(offsetData);
                    count = _DbContext.SaveChanges();
                    if (count == 0)
                    {
                        return(0);
                    }

                    var oDic  = new Dictionary <string, string> {
                    };
                    var nDic  = new Dictionary <string, string> {
                    };
                    var opLog = new OperateLog()
                    {
                        operateID = data.lastOperaAccID,
                        active    = "更新", category = "特休", createTime = definePara.dtNow()
                    };
                    var context = _DbContext.employeeannualleaves.FirstOrDefault(b => b.ID == data.ID);
                    if (context != null)
                    {
                        toNameFn.AddUpEmployeeAnnualDays_convertToDic(ref oDic, context);
                        opLog.employeeID = context.employeeID;

                        context.remainHours    = data.remainHours;
                        context.deadLine       = data.deadLine;
                        context.lastOperaAccID = data.lastOperaAccID;
                        context.updateTime     = data.updateTime;
                        count = _DbContext.SaveChanges();
                    }
                    if (count == 1)
                    {
                        toNameFn.AddUpEmployeeAnnualDays_convertToDic(ref nDic, context);
                        opLog.content  = toNameFn.AddUpEmployeeAnnualDays_convertToText(nDic, oDic);
                        opLog.content += $",原因:{offsetData.reason}"; //主管調整員工餘額
                        saveOperateLog(opLog);                       //紀錄操作紀錄
                    }
                    trans.Commit();
                }
                catch (Exception ex) {
                    count = catchErrorProcess(ex, count);
                }
                return(count);
            }//using
        }
Exemplo n.º 2
0
        public bool chkDeadLineLength(EmployeeAnnualLeave data)
        {
            var isLegal = false;
            var context = _DbContext.employeeannualleaves.FirstOrDefault(b => b.ID == data.ID);

            if (context != null)
            {
                var length = (data.deadLine - context.deadLine).Duration();
                isLegal = length.Days <= 120? true : false;
            }
            return(isLegal);
        }
Exemplo n.º 3
0
        public int addUpAnnualStatus(EmployeeAnnualLeave annualData, AnnualDaysOffset offsetData)
        {
            offsetData.createTime     = annualData.updateTime = definePara.dtNow();
            offsetData.lastOperaAccID = annualData.lastOperaAccID = (int)loginID;
            var isLegal = aRepository.chkDeadLineLength(annualData);
            var res     = 0;

            if (isLegal)
            {
                res = aRepository.UpEmployeeAnnualDays(annualData, offsetData);
            }
            return(res);
        }
        public void RecordEmployeeSpDays(EmployeeAnnualLeave data)
        {
            var dtNow = definePara.dtNow();

            if (data.deadLine <= dtNow)
            {
                return;
            }
            var result = 0;
            var query  = _DbContext.employeeannualleaves.Where(
                b => b.employeeID == data.employeeID && b.ruleID == data.ruleID &&
                b.deadLine > dtNow
                ).ToList();

            foreach (var tmp in query)
            {
                var length = (data.deadLine - tmp.deadLine).Duration();
                if (length.Days <= 120) //若有人手動調整該員工特休期限  為了避免重複新增
                {
                    return;             //同樣條件的特休(只是期限與原先不同) 所作處理 120天為判斷
                }
            }
            data.createTime = dtNow;
            data.deadLine   = data.deadLine.AddSeconds(-1);
            _DbContext.employeeannualleaves.Add(data);
            result = _DbContext.SaveChanges();

            if (result == 1)
            {
                var dic   = new Dictionary <string, string> {
                };
                var opLog = new OperateLog()
                {
                    operateID = data.lastOperaAccID, employeeID = data.employeeID,
                    active    = "新增", category = "特休", createTime = dtNow
                };
                toNameFn.AddUpEmployeeAnnualDays_convertToDic(ref dic, data);
                opLog.content = toNameFn.AddUpEmployeeAnnualDays_convertToText(dic);
                saveOperateLog(opLog);
            }
        }
Exemplo n.º 5
0
        private void calSeniorityAndLeave(List <EmployeeDetail> emDetail)
        {
            var spDaysRule = Repository.GetAnnualLeaveRule();

            foreach (var detail in emDetail)
            {
                var dtNow   = definePara.dtNow();
                var dtStart = detail.startWorkDate; //報到日
                if (dtStart.Year == 1 || dtStart > dtNow)
                {
                    continue;
                }
                var totalMonth = Repository.calThisEmployeeSeniority(detail); //該員工總年資 unit:month
                var useIndex   = -1;
                for (var i = 0; i < spDaysRule.Count; i++)                    //list<spDaysRule> 有排序 從小到大
                {
                    if (totalMonth >= (spDaysRule[i].seniority) * 12)         //年資有到規則設定的年資
                    {
                        useIndex = i;
                    }
                }
                var data = new EmployeeAnnualLeave()
                {
                    employeeID = detail.accountID
                };
                data.deadLine = dtStart; //特休期限
                if (useIndex == -1)      //沒有符合其中一項特休
                {
                    continue;
                }
                var dayToHour = definePara.dayToHour();
                data.ruleID      = spDaysRule[useIndex].ID;
                data.specialDays = spDaysRule[useIndex].specialDays;
                var buffMonth    = (spDaysRule[useIndex].buffDays) / 30;                  //緩衝天數 days to month
                var seniorityMon = (int)((spDaysRule[useIndex].seniority) * 12);          //特休規則年資 unit:month
                var dlMonth      = seniorityMon == 6? seniorityMon : normalDeadLineMonth; //特休基本期限
                var addYear      = 0;
                if ((totalMonth - seniorityMon) >= dlMonth)
                {
                    addYear = (totalMonth - seniorityMon) / 12;                       //滿n年以上但只能用舊規則(無新規則)
                }
                var addMon = seniorityMon + dlMonth + buffMonth;                      //規則年資+基本期限+緩衝天數
                data.deadLine    = data.deadLine.AddYears(addYear).AddMonths(addMon); //從報到日開始算
                data.remainHours = data.specialDays * dayToHour;

                Repository.RecordEmployeeSpDays(data);

                if (useIndex >= 1 || addYear > 0)   //大部分員工有2條紀錄(今年的期限與明年的期限)
                {
                    var data02 = new EmployeeAnnualLeave()
                    {
                        employeeID  = data.employeeID, ruleID = data.ruleID,
                        specialDays = data.specialDays, deadLine = data.deadLine
                    };

                    if (addYear > 0)                                    //需優先判斷 不然若useIndex=0 下面的[useIndex-1]會報錯
                    {
                        data02.deadLine = data02.deadLine.AddYears(-1); //使用同規則 直接-1年
                    }
                    else
                    {
                        data02.deadLine    = data02.deadLine.AddYears(-1).AddMonths(-buffMonth); //滿N年
                        data02.ruleID      = spDaysRule[useIndex - 1].ID;
                        data02.specialDays = spDaysRule[useIndex - 1].specialDays;
                        buffMonth          = (spDaysRule[useIndex - 1].buffDays) / 30; //days to month
                        data02.deadLine    = data02.deadLine.AddMonths(buffMonth);
                    }
                    data02.remainHours = data02.specialDays * dayToHour;

                    Repository.RecordEmployeeSpDays(data02);
                }
            }//foreach
        }
        public void AddUpEmployeeAnnualDays_convertToDic(ref Dictionary <string, string> Dic, EmployeeAnnualLeave data)
        {
            var query = (from a in _DbContext.employeeannualleaves
                         join b in _DbContext.annualleaverule on a.ruleID equals b.ID
                         where a.ID == data.ID
                         select new{
                b.seniority
            }).FirstOrDefault();

            data = (data == null? new EmployeeAnnualLeave() : data);

            Dic.Add("seniority", query == null? "不存在" : query.seniority == 0.5? "6個月" : $"{query.seniority}年");
            Dic.Add("spDays", data.specialDays.ToString());

            var dayToHour = definePara.dayToHour();
            var day       = (int)data.remainHours / dayToHour;
            var hour      = (int)data.remainHours % dayToHour;

            Dic.Add("remain", $"{day}天" + (hour == 0? "": $"{hour}小時"));
            Dic.Add("deadLine", data.deadLine.ToString("yyyy-MM-dd"));
        }