protected override double CalculateProrata(LeaveProrataEntitle prorataEntitle)
        {
            EEmpPersonalInfo empInfo = new EEmpPersonalInfo();

            empInfo.EmpID = EmpID;
            if (!EEmpPersonalInfo.db.select(dbConn, empInfo))
            {
                return(0);
            }

            int addYear = Convert.ToInt32(((TimeSpan)(prorataEntitle.From - empInfo.EmpDateOfBirth)).TotalDays / 366);

            while (empInfo.EmpDateOfBirth.AddYears(addYear) < prorataEntitle.From)
            {
                addYear++;
            }

            DateTime birthday = empInfo.EmpDateOfBirth.AddYears(addYear);

            if (birthday >= prorataEntitle.From && birthday <= prorataEntitle.To)
            {
                return(prorataEntitle.LeavePlanEntitle.LeavePlanEntitleDays);
            }

            return(0);
        }
        protected override double CalculateProrata(LeaveProrataEntitle prorataEntitle)
        {
            ELeavePlan leavePlan = new ELeavePlan();

            leavePlan.LeavePlanID = prorataEntitle.LeavePlanEntitle.LeavePlanID;
            if (ELeavePlan.db.select(dbConn, leavePlan))
            {
                if (leavePlan.LeavePlanUsePublicHolidayEntitle)
                {
                    DBFilter publicHolidayFilter = new DBFilter();
                    publicHolidayFilter.add(new Match("PublicHolidayDate", ">=", prorataEntitle.From));
                    publicHolidayFilter.add(new Match("PublicHolidayDate", "<=", prorataEntitle.To));
                    //ArrayList statutoryHolidayList = EPublicHoliday.db.select(dbConn, publicHolidayFilter);


                    return(EPublicHoliday.db.count(dbConn, publicHolidayFilter));
                }
                else
                {
                    return(0);
                }
            }
            else
            {
                return(0);
            }
        }
        protected override double CalculateProrata(LeaveProrataEntitle prorataEntitle)
        {
            DateTime MonthlyServiceStartDate = prorataEntitle.ServerYearReferenceDate.AddMonths((prorataEntitle.From.Year - prorataEntitle.ServerYearReferenceDate.Year) * 12 + prorataEntitle.From.Month - prorataEntitle.ServerYearReferenceDate.Month);
            DateTime MonthlyServiceEndDate   = prorataEntitle.ServerYearReferenceDate.AddMonths((prorataEntitle.From.Year - prorataEntitle.ServerYearReferenceDate.Year) * 12 + prorataEntitle.From.Month - prorataEntitle.ServerYearReferenceDate.Month + 1);

            if (MonthlyServiceStartDate > prorataEntitle.To)
            {
                MonthlyServiceStartDate = prorataEntitle.ServerYearReferenceDate.AddMonths((prorataEntitle.From.Year - prorataEntitle.ServerYearReferenceDate.Year) * 12 + prorataEntitle.From.Month - prorataEntitle.ServerYearReferenceDate.Month - 1);
                MonthlyServiceEndDate   = prorataEntitle.ServerYearReferenceDate.AddMonths((prorataEntitle.From.Year - prorataEntitle.ServerYearReferenceDate.Year) * 12 + prorataEntitle.From.Month - prorataEntitle.ServerYearReferenceDate.Month);
            }
            return(((double)((TimeSpan)prorataEntitle.To.Subtract(prorataEntitle.From)).Days + 1) * prorataEntitle.LeavePlanEntitle.LeavePlanEntitleDays / (((TimeSpan)MonthlyServiceEndDate.Subtract(MonthlyServiceStartDate)).Days));
        }
        protected override double CalculateProrata(LeaveProrataEntitle prorataEntitle)
        {
            ELeavePlan leavePlan = new ELeavePlan();

            leavePlan.LeavePlanID = prorataEntitle.LeavePlanEntitle.LeavePlanID;
            if (ELeavePlan.db.select(dbConn, leavePlan))
            {
                if (leavePlan.LeavePlanUseRestDayEntitle)
                {
                    if (leavePlan.LeavePlanRestDayEntitlePeriod.Equals("W"))
                    {
                        //  Weekly Entitle
                        DayOfWeek entitleDayOfWeek;
                        if (leavePlan.LeavePlanRestDayWeeklyEntitleStartDay.Equals("SUN", StringComparison.CurrentCultureIgnoreCase))
                        {
                            entitleDayOfWeek = DayOfWeek.Sunday;
                        }
                        else if (leavePlan.LeavePlanRestDayWeeklyEntitleStartDay.Equals("MON", StringComparison.CurrentCultureIgnoreCase))
                        {
                            entitleDayOfWeek = DayOfWeek.Monday;
                        }
                        else if (leavePlan.LeavePlanRestDayWeeklyEntitleStartDay.Equals("TUE", StringComparison.CurrentCultureIgnoreCase))
                        {
                            entitleDayOfWeek = DayOfWeek.Tuesday;
                        }
                        else if (leavePlan.LeavePlanRestDayWeeklyEntitleStartDay.Equals("WED", StringComparison.CurrentCultureIgnoreCase))
                        {
                            entitleDayOfWeek = DayOfWeek.Wednesday;
                        }
                        else if (leavePlan.LeavePlanRestDayWeeklyEntitleStartDay.Equals("THU", StringComparison.CurrentCultureIgnoreCase))
                        {
                            entitleDayOfWeek = DayOfWeek.Thursday;
                        }
                        else if (leavePlan.LeavePlanRestDayWeeklyEntitleStartDay.Equals("FRI", StringComparison.CurrentCultureIgnoreCase))
                        {
                            entitleDayOfWeek = DayOfWeek.Friday;
                        }
                        else if (leavePlan.LeavePlanRestDayWeeklyEntitleStartDay.Equals("SAT", StringComparison.CurrentCultureIgnoreCase))
                        {
                            entitleDayOfWeek = DayOfWeek.Saturday;
                        }
                        else
                        {
                            entitleDayOfWeek = DefaultDateOfJoin.AddDays(-1).DayOfWeek;
                        }

                        DateTime entitleStartDate = prorataEntitle.From;
                        while (entitleStartDate.DayOfWeek != entitleDayOfWeek)
                        {
                            entitleStartDate = entitleStartDate.AddDays(1);
                        }
                        //  22 ~ 28 days = 4 week, 29 ~ 31 days = 5
                        //  +6 day so that 22+6 ~ 28+6 /6 = 4.xx week =4 week
                        int weekCount = (int)((prorataEntitle.To.Subtract(entitleStartDate).TotalDays + 1 + 6) / 7);
                        return(weekCount * leavePlan.LeavePlanRestDayEntitleDays);
                    }
                    else if (leavePlan.LeavePlanRestDayEntitlePeriod.Equals("M"))
                    {
                        //  Monthly Entitle
                        if (prorataEntitle.From.AddMonths(1).AddDays(-1) <= prorataEntitle.To)
                        {
                            // whole monthly entitle
                            return(leavePlan.LeavePlanRestDayEntitleDays);
                        }
                        else
                        {
                            //  prorata
                            double totalDays = prorataEntitle.To.Subtract(prorataEntitle.From).TotalDays + 1;
                            if (totalDays >= leavePlan.LeavePlanRestDayMonthlyEntitleProrataBase)
                            {
                                return(leavePlan.LeavePlanRestDayEntitleDays);
                            }
                            else
                            {
                                double totalEntitlement = (leavePlan.LeavePlanRestDayEntitleDays * totalDays) / leavePlan.LeavePlanRestDayMonthlyEntitleProrataBase;
                                if (leavePlan.LeavePlanRestDayMonthlyEntitleProrataRoundingRuleID > 0)
                                {
                                    EALProrataRoundingRule roundingRule = new EALProrataRoundingRule();
                                    roundingRule.ALProrataRoundingRuleID = leavePlan.LeavePlanRestDayMonthlyEntitleProrataRoundingRuleID;
                                    if (EALProrataRoundingRule.db.select(dbConn, roundingRule))
                                    {
                                        totalEntitlement = roundingRule.Rounding(dbConn, totalEntitlement);
                                    }
                                }
                                return(totalEntitlement);
                            }
                        }
                    }
                    else
                    {
                        return(0);
                    }
                    //DBFilter statutoryHolidayFilter = new DBFilter();
                    //statutoryHolidayFilter.add(new Match("StatutoryHolidayDate", ">=", prorataEntitle.From));
                    //statutoryHolidayFilter.add(new Match("StatutoryHolidayDate", "<=", prorataEntitle.To));
                    //ArrayList statutoryHolidayList = EStatutoryHoliday.db.select(dbConn, statutoryHolidayFilter);
                }
                else
                {
                    return(0);
                }
            }
            else
            {
                return(0);
            }
        }