示例#1
0
        public LvSettingInfo GetEmpLeaveSettings(string _emno, string _ltcd, DateTime _leavedate)
        {
            LvSettingInfo settingInfo  = new LvSettingInfo();
            double        leaveBalance = 0;

            settingInfo.emp = GetSelectedObject <vw_employment>(new List <ColumnInfo>()
            {
                new ColumnInfo()
                {
                    ColumnName = "emno", ColumnValue = _emno
                }
            });

            //根据员工个人设定
            lvdfbyempDal empDal = new lvdfbyempDal();

            settingInfo.dfbyEmployment = empDal.getLeaveSettingsByEmp(_emno, _ltcd, DateTime.Now);
            leaveBalance = settingInfo.dfbyEmployment;
            if (settingInfo.dfbyEmployment > 0)
            {
                settingInfo.SummaryText.Add("By Employment: " + settingInfo.dfbyEmployment.ToString());
            }

            //根据服务年数设定
            lvdfbyyearsDal yearDal = new lvdfbyyearsDal();

            settingInfo.dfbyYear = yearDal.getLeaveSettingsByYear(_ltcd, Convert.ToDouble(DateTime.Now.Year));
            leaveBalance        += settingInfo.dfbyYear;
            if (settingInfo.dfbyYear > 0)
            {
                settingInfo.SummaryText.Add("By Year: " + settingInfo.dfbyYear.ToString());
            }

            //根据其他设定
            lvdfbyotDal      otherDay          = new lvdfbyotDal();
            List <tlvdfbyod> lstSettingByOther = otherDay.getLeaveSettingsByOther(settingInfo.emp, _ltcd);

            var q1 = (from p in lstSettingByOther
                      where p.tlvdfbyot.dfva == settingInfo.emp.GetType().GetProperty(p.tlvdfbyot.tstdefcfg.finm).GetValue(settingInfo.emp, null).ToString().Trim()
                      where p.fryr <= settingInfo.emp.yearservice &&
                      p.toyr >= (settingInfo.emp.yearservice - 1)
                      select p).ToList();

            for (int i = 0; i < q1.Count; i++)
            {
                settingInfo.dfbyOthers += lstSettingByOther[i].days;
                leaveBalance           += lstSettingByOther[i].days;
                if (lstSettingByOther[i].days > 0)
                {
                    settingInfo.SummaryText.Add("By " + lstSettingByOther[i].tlvdfbyot.dftx + ": " + lstSettingByOther[i].days.ToString());
                }
            }

            //取得上年结转
            lvcryfwdDal carryDal = new lvcryfwdDal();

            settingInfo.DaysCarry = carryDal.getCarryDaysByEmp(settingInfo.emp, _ltcd, Convert.ToDouble(DateTime.Now.Year));
            leaveBalance         += settingInfo.DaysCarry;
            if (settingInfo.DaysCarry > 0)
            {
                settingInfo.SummaryText.Add("From Carryforward: " + settingInfo.DaysCarry.ToString());
            }

            //取得最大限制
            lvlealmtDal limitDal = new lvlealmtDal();

            settingInfo.WeekLimit  = limitDal.GetWeeklmbyEmp(settingInfo.emp, _ltcd, HRMS_Limit_Type.LeaveHours);
            settingInfo.MonthLimit = limitDal.GetMonthlmbyEmp(settingInfo.emp, _ltcd, HRMS_Limit_Type.LeaveHours);
            settingInfo.YearLimit  = limitDal.GetYearlmbyEmp(settingInfo.emp, _ltcd, HRMS_Limit_Type.LeaveHours);

            if (settingInfo.WeekLimit != -1)
            {
                settingInfo.SummaryText.Add("Limit in Week: " + settingInfo.WeekLimit.ToString());
            }
            if (settingInfo.MonthLimit != -1)
            {
                settingInfo.SummaryText.Add("Limit in Month: " + settingInfo.MonthLimit.ToString());
            }
            if (settingInfo.YearLimit != -1)
            {
                settingInfo.SummaryText.Add("Limit in Year: " + settingInfo.YearLimit.ToString());
            }


            //取得已经休假天数
            lvleaappDal appDal = new lvleaappDal();

            settingInfo.WeekConsume  = appDal.getWeekConsumedByEmp(settingInfo.emp, _ltcd, _leavedate);
            settingInfo.MonthConsume = appDal.getMonthConsumedByEmp(settingInfo.emp, _ltcd, _leavedate);
            settingInfo.YearConsume  = appDal.getYearConsumedByEmp(settingInfo.emp, _ltcd, _leavedate);

            if (settingInfo.WeekLimit != -1)
            {
                settingInfo.SummaryText.Add("Consume in Week: " + (Math.Round(settingInfo.WeekConsume, 2)).ToString());
            }
            if (settingInfo.MonthLimit != -1)
            {
                settingInfo.SummaryText.Add("Consume in Month: " + (Math.Round(settingInfo.MonthConsume, 2)).ToString());
            }
            if (settingInfo.YearLimit != -1)
            {
                settingInfo.SummaryText.Add("Consume in Year: " + (Math.Round(settingInfo.YearConsume, 2)).ToString());
            }


            if (settingInfo.WeekLimit != -1)
            {
                settingInfo.WeekBalance = Math.Round(settingInfo.WeekLimit - settingInfo.WeekConsume, 2);
                settingInfo.SummaryText.Add("Balance in Week: " + settingInfo.WeekBalance.ToString());
            }
            if (settingInfo.MonthLimit != -1)
            {
                settingInfo.MonthBalance = Math.Round(settingInfo.MonthLimit - settingInfo.MonthConsume, 2);
                settingInfo.SummaryText.Add("Balance in Month: " + settingInfo.MonthBalance.ToString());
            }
            if (settingInfo.YearLimit != -1)
            {
                settingInfo.YearBalance = Math.Round(settingInfo.YearLimit - settingInfo.YearConsume, 2);
                settingInfo.SummaryText.Add("Balance in Year: " + settingInfo.YearBalance.ToString());
            }

            return(settingInfo);
        }
示例#2
0
        public void DoCarryforward(vw_employment _emp, string _ltcd, int _yearToCarry)
        {
            try
            {
                #region get Standard Work Hours
                double stdWorkHours    = 0;
                string strStdWorkHours = ((StSystemConfig)Parameter.CURRENT_SYSTEM_CONFIG).PrSWHPD;

                try
                {
                    if (strStdWorkHours == string.Empty)
                    {
                        stdWorkHours = 8;
                    }
                    else
                    {
                        stdWorkHours = Convert.ToDouble(strStdWorkHours);
                    }
                }
                catch
                {
                    stdWorkHours = 8;
                }
                #endregion

                double        leaveEntitlement = 0;
                double        hoursToCarry     = 0;
                LvSettingInfo settingInfo      = new LvSettingInfo();
                settingInfo.emp = _emp;

                DateTime startDate = new DateTime(_yearToCarry, 1, 1);
                DateTime endDate   = new DateTime(_yearToCarry, 12, 31);

                //根据员工个人设定
                lvdfbyempDal empDal = new lvdfbyempDal();
                settingInfo.dfbyEmployment = empDal.getLeaveSettingsByEmp(_emp.emno, _ltcd, endDate);
                leaveEntitlement           = settingInfo.dfbyEmployment;

                //根据服务年数设定
                double         yearDiff = DateTime.Now.Year - _yearToCarry;
                lvdfbyyearsDal yearDal  = new lvdfbyyearsDal();
                settingInfo.dfbyYear = yearDal.getLeaveSettingsByYear(_ltcd, (settingInfo.emp.yearservice.Value - yearDiff) < 0 ? 0 : (settingInfo.emp.yearservice.Value - yearDiff));
                leaveEntitlement    += settingInfo.dfbyYear;

                //根据其他设定
                lvdfbyotDal      otherDay          = new lvdfbyotDal();
                List <tlvdfbyod> lstSettingByOther = otherDay.getLeaveSettingsByOther(settingInfo.emp, _ltcd);

                var q1 = (from p in lstSettingByOther
                          where p.tlvdfbyot.dfva == settingInfo.emp.GetType().GetProperty(p.tlvdfbyot.tstdefcfg.finm).GetValue(settingInfo.emp, null).ToString().Trim()
                          where p.fryr <= ((settingInfo.emp.yearservice - yearDiff) < 0 ? 0 : (settingInfo.emp.yearservice - yearDiff)) &&
                          p.toyr >= (((settingInfo.emp.yearservice - yearDiff) - 1) < 0 ? 0 : ((settingInfo.emp.yearservice - yearDiff) - 1)) &&
                          p.tlvdfbyot.ltcd == _ltcd
                          select p).ToList();

                for (int i = 0; i < q1.Count; i++)
                {
                    settingInfo.dfbyOthers += lstSettingByOther[i].days;
                    leaveEntitlement       += lstSettingByOther[i].days;
                }

                //取得上年结转
                lvcryfwdDal carryDal = new lvcryfwdDal();
                settingInfo.DaysCarry = carryDal.getCarryDaysByEmp(settingInfo.emp, _ltcd, startDate.Year);
                leaveEntitlement     += settingInfo.DaysCarry;

                //取得最大限制
                lvlealmtDal limitDal = new lvlealmtDal();
                settingInfo.YearLimit = limitDal.GetYearlmbyEmp(settingInfo.emp, _ltcd, HRMS_Limit_Type.LeaveCarryforwardHours);

                //取得已经休假小时数
                lvleaappDal appDal = new lvleaappDal();
                settingInfo.YearConsume = appDal.getYearConsumedByEmp(settingInfo.emp, _ltcd, startDate);

                if ((settingInfo.YearLimit != -1) && (Math.Round(settingInfo.YearLimit / stdWorkHours, 2) <= (leaveEntitlement - Math.Round(settingInfo.YearConsume / stdWorkHours, 2))))
                {
                    //settingInfo.YearBalance = Math.Round(settingInfo.YearLimit - settingInfo.YearConsume, 2);
                    hoursToCarry = settingInfo.YearLimit;
                }
                else
                {
                    hoursToCarry = leaveEntitlement * stdWorkHours - settingInfo.YearConsume;
                }

                #region 保存
                bool isNeedToSave = true;


                if (((StSystemConfig)Parameter.CURRENT_SYSTEM_CONFIG).LvINCV == "Y")
                {
                    if (hoursToCarry <= 0)
                    {
                        hoursToCarry = 0;
                    }
                }

                if (isNeedToSave &&
                    (settingInfo.YearConsume != 0 ||
                     leaveEntitlement != 0 || settingInfo.YearLimit != -1 || hoursToCarry != 0))
                {
                    tlvcryfwd carryForward = new tlvcryfwd();
                    carryForward.daro = null;
                    carryForward.days = Math.Round(hoursToCarry / stdWorkHours, 2);
                    carryForward.hrcs = 0;
                    carryForward.emno = _emp.emno;
                    carryForward.hors = hoursToCarry;
                    carryForward.ltcd = _ltcd;
                    carryForward.year = _yearToCarry.ToString();
                    carryForward.lmur = Function.GetCurrentUser();
                    carryForward.lmtm = DateTime.Now;
                    carryForward.cnsu = settingInfo.YearConsume;
                    carryForward.enti = leaveEntitlement;
                    carryForward.limt = settingInfo.YearLimit;

                    DoInsert <tlvcryfwd>(carryForward);
                }
                #endregion
            }
            catch (UtilException ex)
            {
                throw ex;
            }
            catch (Exception ex)
            {
                throw new UtilException(ex.Message, ex);
            }
        }