示例#1
0
 protected override void  submit(ELeaveBalance balanceItem, ELeaveBalanceEntitle balanceEntitle)
 {
     if (!skipALRoundingRule)
     {
         base.submit(balanceItem, balanceEntitle);
     }
 }
 protected override ELeaveBalance CreateLeaveBalanceItem()
 {
     if (leaveTypeDisabledSLCat2 == false)
     {
         currentSLCat2balanceItem = CreateLeaveBalanceItemForCat2();
     }
     return(base.CreateLeaveBalanceItem());
 }
示例#3
0
 protected override double LoadProrata(ELeaveBalance balanceItem, DateTime AsOfDate)
 {
     base.LoadProrata(balanceItem, AsOfDate);
     if (!skipALRoundingRule)
     {
         balanceItem.LeaveBalanceEntitled = ALRounding(EmpID, AsOfDate, balanceItem);
     }
     return(balanceItem.LeaveBalanceEntitled);
 }
 protected override double LoadAdjust(ELeaveBalance balanceItem, DateTime AsOfDate)
 {
     // if CAT2 is enabled and balanceItem is not null
     if (leaveTypeDisabledSLCat2 == false && currentSLCat2balanceItem != null)
     {
         base.LoadAdjust(currentSLCat2balanceItem, AsOfDate);
     }
     return(base.LoadAdjust(balanceItem, AsOfDate));
 }
        protected override void LoadBalance(ELeaveBalance balanceItem, DateTime AsOfDate)
        {
            base.LoadBalance(balanceItem, AsOfDate);

            // if CAT2 is enabled
            if (leaveTypeDisabledSLCat2 == false && currentSLCat2balanceItem != null)
            {
                currentSLCat2balanceItem.BalanceUnit = m_BalanceUnit;
                //currentSLCat2balanceItem.Balance = currentSLCat2balanceItem.getBalance();
            }
        }
        protected override ELeaveBalance CreateNextLeaveBalanceItem(ELeaveBalance lastLeaveBalanceItem)
        {
            if (leaveTypeDisabledSLCat2 == false)
            {
                ELeaveBalance        lastSLCat2balanceItem  = currentSLCat2balanceItem;
                ELeaveBalance        SLCat1balanceItem      = base.CreateNextLeaveBalanceItem(lastLeaveBalanceItem);
                ELeaveBalanceEntitle leaveBalanceEntitleSL2 = null;

                if (lastSLCat2balanceItem != null && lastLeaveBalanceItem != null)
                {
                    currentSLCat2balanceItem.LeaveBalanceBF = lastSLCat2balanceItem.getBalance();
                    if (SLCat1balanceItem.LeaveBalanceForfeiture > 0)
                    {
                        SLCat1balanceItem.LeaveBalanceBF        -= SLCat1balanceItem.LeaveBalanceForfeiture;
                        currentSLCat2balanceItem.LeaveBalanceBF += SLCat1balanceItem.LeaveBalanceForfeiture;
                        SLCat1balanceItem.LeaveBalanceForfeiture = 0;
                    }

                    if (lastSLCat2balanceItem.LeaveBalanceEntitled > 0)
                    {
                        leaveBalanceEntitleSL2 = new ELeaveBalanceEntitle();
                        leaveBalanceEntitleSL2.LeaveBalanceEntitleEffectiveDate   = currentSLCat2balanceItem.LeaveBalanceEffectiveDate;
                        leaveBalanceEntitleSL2.LeaveBalanceEntitleGrantPeriodFrom = lastSLCat2balanceItem.LeaveBalanceEffectiveDate;
                        leaveBalanceEntitleSL2.LeaveBalanceEntitleGrantPeriodTo   = lastSLCat2balanceItem.LeaveBalanceEffectiveEndDate;
                        leaveBalanceEntitleSL2.EmpID                   = currentSLCat2balanceItem.EmpID;
                        leaveBalanceEntitleSL2.LeaveTypeID             = currentSLCat2balanceItem.LeaveTypeID;
                        leaveBalanceEntitleSL2.LeaveBalanceEntitleDays = lastSLCat2balanceItem.LeaveBalanceEntitled;
                    }

                    //  Initial Forfeiture
                    currentSLCat2balanceItem.LeaveBalanceForfeiture = 0;
                    int MaxBF = MaximumBroughtForwardForSLCat2(currentSLCat2balanceItem.LeaveBalanceEffectiveDate);

                    if (MaxBF >= 0)
                    {
                        currentSLCat2balanceItem.LeaveBalanceForfeiture = currentSLCat2balanceItem.LeaveBalanceBF - MaxBF;
                        if (currentSLCat2balanceItem.LeaveBalanceForfeiture < 0)
                        {
                            currentSLCat2balanceItem.LeaveBalanceForfeiture = 0;
                        }
                    }
                }

                balanceItemListSLCat2.Insert(0, currentSLCat2balanceItem);
                submit(currentSLCat2balanceItem, leaveBalanceEntitleSL2);
                return(SLCat1balanceItem);
            }
            else
            {
                return(base.CreateNextLeaveBalanceItem(lastLeaveBalanceItem));
            }
        }
示例#7
0
        //public void RecalculateAfter(DateTime DateAfter)
        //{
        //    foreach (LeaveBalanceProcess balanceProcess in leaveBalanceProcessList)
        //    {
        //        balanceProcess.RecalculateAfter(DateAfter);
        //    }
        //}
        //public void RecalculateAfter(DateTime DateAfter, int LeaveTypeID)
        //{
        //    foreach (LeaveBalanceProcess balanceProcess in leaveBalanceProcessList)
        //    {
        //        if (balanceProcess.LeaveTypeID.Equals(LeaveTypeID))
        //            balanceProcess.RecalculateAfter(DateAfter);
        //    }
        //}

        private void LoadLeaveTypeAndRounding(ELeaveBalance b)
        {
            if (b != null)
            {
                ELeaveType type = new ELeaveType();
                type.LeaveTypeID = b.LeaveTypeID;
                if (ELeaveType.db.select(dbConn, type))
                {
                    b.Name         = type.LeaveType;
                    b.Description  = type.LeaveTypeDesc;
                    b.StringFormat = "0." + string.Empty.PadRight(type.LeaveDecimalPlace, '0');
                }
            }
        }
 protected ELeaveBalance CreateLeaveBalanceItemForCat2()
 {
     if (leaveTypeDisabledSLCat2 == false)
     {
         currentSLCat2balanceItem = new ELeaveBalance();
         currentSLCat2balanceItem.LeaveBalanceEffectiveDate    = NextStartDate();
         currentSLCat2balanceItem.LeaveBalanceEffectiveEndDate = NextStartDate(currentSLCat2balanceItem.LeaveBalanceEffectiveDate).AddDays(-1);
         currentSLCat2balanceItem.EmpID       = EmpID;
         currentSLCat2balanceItem.LeaveTypeID = leaveTypeIDSLCat2;
         return(currentSLCat2balanceItem);
     }
     else
     {
         return(null);
     }
 }
示例#9
0
        protected ELeaveBalance GetAvailableBalance(ELeaveApplication leaveApplicatoin, DateTime periodEndDate)
        {
            ELeaveBalance m_balance = new ELeaveBalance();

            // ******** remove expired entitlement
            foreach (DataRow row in m_earned.Rows)
            {
                if (row["EXPIRY_DATE"] != null && System.Convert.ToDateTime(row["EXPIRY_DATE"]) < leaveApplicatoin.LeaveAppDateFrom)
                {
                    //m_balance.LeaveBalanceEntitled += System.Convert.ToDouble(row["UNUSED_HOURS"]);
                    m_balance.ExpiryForfeit += System.Convert.ToDouble(row["UNUSED_HOURS"]);
                    row["UNUSED_HOURS"]      = 0;
                    //row.Delete();
                }
            }


            // ******* calculate entitled from entitledList and processedList
            foreach (DataRow row in m_earned.Rows)
            {
                if (leaveApplicatoin != null && leaveApplicatoin.LeaveAppHours > 0)
                {
                    if (leaveApplicatoin.LeaveAppHours >= System.Convert.ToDouble(row["UNUSED_HOURS"]))
                    {
                        leaveApplicatoin.LeaveAppHours -= System.Convert.ToDouble(row["UNUSED_HOURS"]);
                        row["UNUSED_HOURS"]             = 0;
                        //row.Delete();
                    }
                    else
                    {
                        row["UNUSED_HOURS"]            = System.Convert.ToDouble(row["UNUSED_HOURS"]) - leaveApplicatoin.LeaveAppHours;
                        leaveApplicatoin.LeaveAppHours = 0;
                    }
                }
                else
                {
                    break;
                }
            }

            m_earned.DefaultView.RowFilter = "UNUSED_HOURS > 0";
            m_earned = m_earned.DefaultView.ToTable();

            return(m_balance);
        }
        protected override double LoadProrata(ELeaveBalance balanceItem, DateTime AsOfDate)
        {
            double prorata = base.LoadProrata(balanceItem, AsOfDate);

            // if CAT2 is enabled...
            if (leaveTypeDisabledSLCat2 == false && balanceItem.LeaveTypeID != leaveTypeIDSLCat2 && currentSLCat2balanceItem != null)
            {
                double maxBF = MaximumBroughtForward(balanceItem.LeaveBalanceEffectiveDate);
                if (balanceItem.getBalance() > maxBF && maxBF >= 0)
                {
                    double difference = balanceItem.getBalance() - maxBF;
                    balanceItem.LeaveBalanceEntitled -= difference;

                    currentSLCat2balanceItem.LeaveBalanceEntitled += difference;
                }
            }
            return(prorata);
        }
        protected override void LoadServerData(DateTime AsOfDate)
        {
            base.LoadServerData(AsOfDate);

            DBFilter filter = new DBFilter();

            filter.add(new Match("EmpID", EmpID));
            filter.add(new Match("LeaveBalanceEffectiveDate", "<=", AsOfDate));
            filter.add(new Match("LeaveTypeID", leaveTypeIDSLCat2));
            filter.add("LeaveBalanceEffectiveDate", false);
            balanceItemListSLCat2 = ELeaveBalance.db.select(dbConn, filter);

            if (balanceItemListSLCat2.Count > 0)
            {
                currentSLCat2balanceItem = (ELeaveBalance)balanceItemListSLCat2[0];
            }
            //CAT2Process = new SickLeaveCat2BalanceProcess(EmpID, balanceItemList);
            //CAT2Process.LoadData(AsOfDate);
        }
示例#12
0
        protected double ALRounding(int EmpID, DateTime AsOfDate, ELeaveBalance balanceItem)
        {
            double           originalProrata = balanceItem.LeaveBalanceEntitled;
            EEmpPositionInfo empPos          = AppUtils.GetLastPositionInfo(dbConn, balanceItem.LeaveBalanceEffectiveEndDate, EmpID);

            if (empPos != null)
            {
                ELeavePlan leavePlan = new ELeavePlan();
                leavePlan.LeavePlanID = empPos.LeavePlanID;
                if (ELeavePlan.db.select(dbConn, leavePlan))
                {
                    if (!leavePlan.LeavePlanALRoundingRuleIsApplyFirstYearBroughtForwardOnly || leavePlan.LeavePlanALRoundingRuleIsApplyFirstYearBroughtForwardOnly && AsOfDate > balanceItem.LeaveBalanceEffectiveEndDate && balanceItem.LeaveBalanceEffectiveDate <= DefaultServiceStartDate)
                    {
                        EALProrataRoundingRule roundingRule = new EALProrataRoundingRule();
                        roundingRule.ALProrataRoundingRuleID = leavePlan.ALProrataRoundingRuleID;
                        if (EALProrataRoundingRule.db.select(dbConn, roundingRule))
                        {
                            return(roundingRule.Rounding(dbConn, originalProrata));
                        }
                    }
                }
            }
            return(originalProrata);
        }
示例#13
0
        public ArrayList getCurrentBalanceList(bool forESSOnly)
        {
            ArrayList balanceList = new ArrayList();


            foreach (LeaveBalanceProcess balanceProcess in leaveBalanceProcessList.Values)
            {
                ELeaveBalance leaveBalance = balanceProcess.getLatestLeaveBalance();
                if (leaveBalance != null)
                {
                    //bool addToList = true;
                    if (forESSOnly)
                    {
                        ELeaveType leaveType = new ELeaveType();
                        leaveType.LeaveTypeID = leaveBalance.LeaveTypeID;
                        if (!ELeaveType.db.select(dbConn, leaveType))
                        {
                            continue;
                        }
                        if (leaveType.LeaveTypeIsESSHideLeaveBalance)
                        {
                            continue;
                        }
                        DBFilter countESSLeaveCodeFilter = new DBFilter();
                        countESSLeaveCodeFilter.add(new Match("LeaveTypeID", leaveBalance.LeaveTypeID));
                        countESSLeaveCodeFilter.add(new Match("LeaveCodeHideInESS", false));
                        if (ELeaveCode.db.count(dbConn, countESSLeaveCodeFilter) <= 0)
                        {
                            continue;
                        }
                        //addToList = false;
                    }

                    //if (addToList)
                    {
                        LoadLeaveTypeAndRounding(leaveBalance);
                        if (leaveBalance.LeaveBalanceEntitled != 0 || leaveBalance.getBalance() != 0 || leaveBalance.Taken != 0 || leaveBalance.Reserved != 0)
                        {
                            balanceList.Add(leaveBalance);
                        }
                    }
                }

                // Start 2013-12-02, Ricky So, Avoid showing CAT2 Sick Leave entry
                if ((ELeaveType.SLCAT2_LEAVE_TYPE(dbConn)).LeaveTypeIsDisabled == false)
                {
                    if (balanceProcess is SickLeaveBalanceProcess)
                    {
                        leaveBalance = ((SickLeaveBalanceProcess)balanceProcess).getLatestCAT2LeaveBalance();
                        if (leaveBalance != null)
                        {
                            bool addToList = true;
                            if (forESSOnly)
                            {
                                DBFilter countESSLeaveCodeFilter = new DBFilter();
                                countESSLeaveCodeFilter.add(new Match("LeaveTypeID", leaveBalance.LeaveTypeID));
                                countESSLeaveCodeFilter.add(new Match("LeaveCodeHideInESS", false));
                                if (ELeaveCode.db.count(dbConn, countESSLeaveCodeFilter) <= 0)
                                {
                                    addToList = false;
                                }
                            }

                            if (addToList)
                            {
                                LoadLeaveTypeAndRounding(leaveBalance);
                                if (leaveBalance.LeaveBalanceEntitled != 0 || leaveBalance.getBalance() != 0 || leaveBalance.Taken != 0 || leaveBalance.Reserved != 0)
                                {
                                    balanceList.Add(leaveBalance);
                                }
                            }
                        }
                    }
                }
                //if (balanceProcess is SickLeaveBalanceProcess)
                //{
                //    leaveBalance = ((SickLeaveBalanceProcess)balanceProcess).getLatestCAT2LeaveBalance();
                //    if (leaveBalance != null)
                //    {
                //        bool addToList = true;
                //        if (forESSOnly)
                //        {
                //            DBFilter countESSLeaveCodeFilter = new DBFilter();
                //            countESSLeaveCodeFilter.add(new Match("LeaveTypeID", leaveBalance.LeaveTypeID));
                //            countESSLeaveCodeFilter.add(new Match("LeaveCodeHideInESS", false));
                //            if (ELeaveCode.db.count(dbConn, countESSLeaveCodeFilter) <= 0)
                //                addToList = false;
                //        }

                //        if (addToList)
                //        {
                //            LoadLeaveTypeAndRounding(leaveBalance);
                //            if (leaveBalance.LeaveBalanceEntitled != 0 || leaveBalance.getBalance() != 0 || leaveBalance.Taken != 0 || leaveBalance.Reserved != 0)
                //                balanceList.Add(leaveBalance);
                //        }
                //    }
                //}


                // End 2013-12-02, Ricky So, Avoid showing CAT2 Sick Leave entry
            }

            return(balanceList);
        }
    // End 0000008, Ricky So, 2014-11-21

    protected void Save_Click(object sender, EventArgs e)
    {
        // speciailzed for TakYue only
        double m;

        try
        {
            m = Convert.ToDouble(RequestLeaveDays.Text);
        }
        catch
        {
            PageErrors invalideInputError = PageErrors.getErrors(db, Page);
            invalideInputError.clear();
            invalideInputError.addError("Invalid Days Taken value.");
            return;
        }

        if (!applicableDays.Value.Equals("") && !applicableDays.Value.Contains(m.ToString("0.00")))
        {
            PageErrors invalideInputError = PageErrors.getErrors(db, Page);
            invalideInputError.clear();
            invalideInputError.addError("Days Taken must be in this range : " + applicableDays.Value);
            return;
        }
        // end specializations

        ERequestLeaveApplication c = new ERequestLeaveApplication();

        if (!RequestLeaveAppUnit.SelectedValue.Equals("D"))
        {
            RequestLeaveAppDateTo.Value = RequestLeaveAppDateFrom.Value;
        }

        Hashtable values = new Hashtable();

        binding.toValues(values);

        PageErrors errors = PageErrors.getErrors(db, Page);

        errors.clear();


        db.validate(errors, values);

        if (!errors.isEmpty())
        {
            return;
        }


        db.parse(values, c);

        if (c.RequestLeaveAppUnit.Equals("D"))
        {
            // the following 2 fields are not bind to controls
            c.RequestLeaveAppDateFromAM = this.RequestLeaveAppDateFromAM.SelectedValue;
            c.RequestLeaveAppDateToAM   = this.RequestLeaveAppDateToAM.SelectedValue;
        }

        if (!c.RequestLeaveAppUnit.Equals("D"))
        {
            //c.RequestLeaveAppDateTo = c.RequestLeaveAppDateFrom;
            if (c.RequestLeaveAppTimeTo < c.RequestLeaveAppTimeFrom)
            {
                errors.addError("RequestLeaveAppTimeFrom", "Invald hours");
            }
        }
        else
        {
            if (c.RequestLeaveAppDateTo < c.RequestLeaveAppDateFrom)
            {
                errors.addError("RequestLeaveAppDateFrom", "Date To cannot be earlier than Date From");
            }
            // Start 0000201, Ricky So, 2015-05-29
            else if (c.RequestLeaveAppDateTo == c.RequestLeaveAppDateFrom)
            {
                if (c.RequestLeaveAppDateFromAM.CompareTo(c.RequestLeaveAppDateToAM) > 0)
                {
                    errors.addError("RequestLeaveAppDateFrom", "Date To cannot be earlier/equal than Date From");
                }
                else if (c.RequestLeaveAppDateFromAM.CompareTo(c.RequestLeaveAppDateToAM) == 0)
                {
                    // Convert to Half Day application if only AM/PM is applied
                    c.RequestLeaveAppUnit       = c.RequestLeaveAppDateFromAM.Substring(0, 1);
                    c.RequestLeaveAppDateFromAM = null;
                    c.RequestLeaveAppDateToAM   = null;
                    c.RequestLeaveDays          = 0.5;
                }
            }
            // End 0000201, Ricky So, 2015-05-29
            else
            {
                TimeSpan ts = c.RequestLeaveAppDateTo.Subtract(c.RequestLeaveAppDateFrom);
                if (c.RequestLeaveDays > ts.Days + 1)
                {
                    errors.addError("RequestLeaveDays", "Days taken is too large");
                }
            }
        }
        if (c.RequestLeaveAppDateFrom.Month != c.RequestLeaveAppDateTo.Month || c.RequestLeaveAppDateFrom.Year != c.RequestLeaveAppDateTo.Year)
        {
            errors.addError("Leave application must be within the same month");
        }

        if (HoursClaimPanel.Visible)
        {
            if (c.RequestLeaveAppHours <= 0)
            {
                errors.addError(string.Format(HROne.Translation.PageErrorMessage.ERROR_FIELD_REQUIRED, new string[] { lblLeaveAppHours.Text }));
            }
        }

        ELeaveCode curreintLeaveCode = new ELeaveCode();

        curreintLeaveCode.LeaveCodeID = c.RequestLeaveCodeID;
        if (ELeaveCode.db.select(dbConn, curreintLeaveCode))
        {
            ELeaveType leaveType = new ELeaveType();
            leaveType.LeaveTypeID = curreintLeaveCode.LeaveTypeID;
            if (ELeaveType.db.select(dbConn, leaveType))
            {
                // Start 0000008, Ricky So, 2014-11-21
                double m_hours = 0;
                double m_days  = 0;
                GetPendingLeaveBalance(c.EmpID, leaveType.LeaveTypeID, out m_hours, out m_days);
                // End 0000008, Ricky So, 2014-11-21

                if (leaveType.LeaveTypeIsESSIgnoreEntitlement)
                {
                    HROne.LeaveCalc.LeaveBalanceCalc    calc           = new HROne.LeaveCalc.LeaveBalanceCalc(dbConn, c.EmpID);
                    HROne.LeaveCalc.LeaveBalanceProcess balanceProcess = calc.getLeaveBalanceProcess(leaveType.LeaveTypeID);
                    // assume as at today (since entitlement is ignored, as-at-date doesn't make any difference
                    balanceProcess.LoadData(AppUtils.ServerDateTime().Date);
                    ELeaveBalance balance = balanceProcess.getLatestLeaveBalance();

                    // Start 0000008, Ricky So, 2014-11-21
                    //if (balance == null
                    //    || (balance.getBalance() - balance.LeaveBalanceEntitled < c.RequestLeaveDays && balanceProcess.BalanceUnit == ELeaveBalance.LeaveBalanceUnit.Day)
                    //    || (balance.getBalance() - balance.LeaveBalanceEntitled < c.RequestLeaveAppHours && balanceProcess.BalanceUnit == ELeaveBalance.LeaveBalanceUnit.Hour)
                    //    )
                    if (balance == null ||
                        (balance.getBalance() - m_days - balance.LeaveBalanceEntitled < c.RequestLeaveDays && balanceProcess.BalanceUnit == ELeaveBalance.LeaveBalanceUnit.Day) ||
                        (balance.getBalance() - m_hours - balance.LeaveBalanceEntitled < c.RequestLeaveAppHours && balanceProcess.BalanceUnit == ELeaveBalance.LeaveBalanceUnit.Hour)
                        )
                    // Start 0000008, Ricky So, 2014-11-21
                    {
                        errors.addError(ERROR_MESSAGE_BALANCE_NOT_ENOUGH);
                    }
                }
                else if (leaveType.LeaveTypeIsESSRestrictNegativeBalanceAsOfApplicationDateFrom ||
                         leaveType.LeaveTypeIsESSRestrictNegativeBalanceAsOfApplicationDateTo ||
                         leaveType.LeaveTypeIsESSRestrictNegativeBalanceAsOfEndOfLeaveYear ||
                         leaveType.LeaveTypeIsESSRestrictNegativeBalanceAsOfToday)
                {
                    HROne.LeaveCalc.LeaveBalanceCalc    calc           = new HROne.LeaveCalc.LeaveBalanceCalc(dbConn, c.EmpID);
                    HROne.LeaveCalc.LeaveBalanceProcess balanceProcess = calc.getLeaveBalanceProcess(leaveType.LeaveTypeID);

                    if (leaveType.LeaveTypeIsESSRestrictNegativeBalanceAsOfToday)
                    {
                        balanceProcess.LoadData(AppUtils.ServerDateTime().Date);
                        ELeaveBalance balance = balanceProcess.getLatestLeaveBalance();
                        // Start 0000093, Ricky So, 2014-09-06
                        if (balance == null)
                        {
                            errors.addError(ERROR_MESSAGE_BALANCE_NOT_ENOUGH);
                        }
                        // Start 0000008, Ricky So, 2014-11-21
                        //else if ((balance.getBalance() - c.RequestLeaveDays < -1 * leaveType.LeaveTypeIsESSAllowableAdvanceBalance && balanceProcess.BalanceUnit == ELeaveBalance.LeaveBalanceUnit.Day) ||
                        //          (balance.getBalance() - c.RequestLeaveAppHours < -1 * leaveType.LeaveTypeIsESSAllowableAdvanceBalance && balanceProcess.BalanceUnit == ELeaveBalance.LeaveBalanceUnit.Hour)
                        //         )
                        else if ((balance.getBalance() - m_days - c.RequestLeaveDays < -1 * leaveType.LeaveTypeIsESSAllowableAdvanceBalance && balanceProcess.BalanceUnit == ELeaveBalance.LeaveBalanceUnit.Day) ||
                                 (balance.getBalance() - m_hours - c.RequestLeaveAppHours < -1 * leaveType.LeaveTypeIsESSAllowableAdvanceBalance && balanceProcess.BalanceUnit == ELeaveBalance.LeaveBalanceUnit.Hour)
                                 )
                        // End 0000008, Ricky So, 2014-11-21
                        {
                            errors.addError(ERROR_MESSAGE_BALANCE_NOT_ENOUGH);
                        }

                        //if (balance == null
                        //    || (balance.getBalance() < c.RequestLeaveDays && balanceProcess.BalanceUnit == ELeaveBalance.LeaveBalanceUnit.Day)
                        //    || (balance.getBalance() < c.RequestLeaveAppHours && balanceProcess.BalanceUnit == ELeaveBalance.LeaveBalanceUnit.Hour)
                        //    )
                        //{
                        //    errors.addError(ERROR_MESSAGE_BALANCE_NOT_ENOUGH);
                        //}
                        // End 0000093, Ricky So, 2014-09-06
                    }
                    if (errors.isEmpty() && leaveType.LeaveTypeIsESSRestrictNegativeBalanceAsOfApplicationDateFrom)
                    {
                        balanceProcess.LoadData(c.RequestLeaveAppDateFrom);
                        ELeaveBalance balance = balanceProcess.getLatestLeaveBalance();
                        // Start 0000093, Ricky So, 2014-09-06
                        if (balance == null)
                        {
                            errors.addError(ERROR_MESSAGE_BALANCE_NOT_ENOUGH);
                        }
                        // Start 0000008, Ricky So, 2014-11-21
                        //else if ((balance.getBalance() - c.RequestLeaveDays < -1 * leaveType.LeaveTypeIsESSAllowableAdvanceBalance && balanceProcess.BalanceUnit == ELeaveBalance.LeaveBalanceUnit.Day) ||
                        //          (balance.getBalance() - c.RequestLeaveAppHours < -1 * leaveType.LeaveTypeIsESSAllowableAdvanceBalance && balanceProcess.BalanceUnit == ELeaveBalance.LeaveBalanceUnit.Hour)
                        //         )
                        else if ((balance.getBalance() - m_days - c.RequestLeaveDays < -1 * leaveType.LeaveTypeIsESSAllowableAdvanceBalance && balanceProcess.BalanceUnit == ELeaveBalance.LeaveBalanceUnit.Day) ||
                                 (balance.getBalance() - m_hours - c.RequestLeaveAppHours < -1 * leaveType.LeaveTypeIsESSAllowableAdvanceBalance && balanceProcess.BalanceUnit == ELeaveBalance.LeaveBalanceUnit.Hour)
                                 )
                        // End 0000008, Ricky So, 2014-11-21
                        {
                            errors.addError(ERROR_MESSAGE_BALANCE_NOT_ENOUGH);
                        }

                        //if (balance == null
                        //    || (balance.getBalance() < c.RequestLeaveDays && balanceProcess.BalanceUnit == ELeaveBalance.LeaveBalanceUnit.Day)
                        //    || (balance.getBalance() < c.RequestLeaveAppHours && balanceProcess.BalanceUnit == ELeaveBalance.LeaveBalanceUnit.Hour)
                        //    )
                        //{
                        //    errors.addError(ERROR_MESSAGE_BALANCE_NOT_ENOUGH);
                        //}
                        // End 0000093, Ricky So, 2014-09-06
                    }
                    if (errors.isEmpty() && leaveType.LeaveTypeIsESSRestrictNegativeBalanceAsOfApplicationDateTo)
                    {
                        balanceProcess.LoadData(c.RequestLeaveAppDateTo);
                        ELeaveBalance balance = balanceProcess.getLatestLeaveBalance();
                        // Start 0000093, Ricky So, 2014-09-06
                        if (balance == null)
                        {
                            errors.addError(ERROR_MESSAGE_BALANCE_NOT_ENOUGH);
                        }
                        // Start 0000008, Ricky So, 2014-11-21
                        //else if ((balance.getBalance() - c.RequestLeaveDays < -1 * leaveType.LeaveTypeIsESSAllowableAdvanceBalance && balanceProcess.BalanceUnit == ELeaveBalance.LeaveBalanceUnit.Day) ||
                        //          (balance.getBalance() - c.RequestLeaveAppHours < -1 * leaveType.LeaveTypeIsESSAllowableAdvanceBalance && balanceProcess.BalanceUnit == ELeaveBalance.LeaveBalanceUnit.Hour)
                        //         )
                        else if ((balance.getBalance() - m_days - c.RequestLeaveDays < -1 * leaveType.LeaveTypeIsESSAllowableAdvanceBalance && balanceProcess.BalanceUnit == ELeaveBalance.LeaveBalanceUnit.Day) ||
                                 (balance.getBalance() - m_hours - c.RequestLeaveAppHours < -1 * leaveType.LeaveTypeIsESSAllowableAdvanceBalance && balanceProcess.BalanceUnit == ELeaveBalance.LeaveBalanceUnit.Hour)
                                 )
                        // End 0000008, Ricky So, 2014-11-21
                        {
                            errors.addError(ERROR_MESSAGE_BALANCE_NOT_ENOUGH);
                        }
                        //if (balance == null
                        //    || (balance.getBalance() < c.RequestLeaveDays && balanceProcess.BalanceUnit == ELeaveBalance.LeaveBalanceUnit.Day)
                        //    || (balance.getBalance() < c.RequestLeaveAppHours && balanceProcess.BalanceUnit == ELeaveBalance.LeaveBalanceUnit.Hour)
                        //    )
                        //{
                        //    errors.addError(ERROR_MESSAGE_BALANCE_NOT_ENOUGH);
                        //}
                        // End 0000093, Ricky So, 2014-09-06
                    }
                    if (errors.isEmpty() && leaveType.LeaveTypeIsESSRestrictNegativeBalanceAsOfEndOfLeaveYear)
                    {
                        balanceProcess.LoadData(AppUtils.ServerDateTime().Date);
                        ELeaveBalance balance = balanceProcess.getLatestLeaveBalance();

                        if (!balance.LeaveBalanceEffectiveEndDate.Ticks.Equals(0))
                        {
                            balanceProcess.LoadData(balance.LeaveBalanceEffectiveEndDate);
                            balance = balanceProcess.getLatestLeaveBalance();
                        }
                        // Start 0000093, Ricky So, 2014-09-06
                        if (balance == null)
                        {
                            errors.addError(ERROR_MESSAGE_BALANCE_NOT_ENOUGH);
                        }
                        // Start 0000008, Ricky So, 2014-11-21
                        //else if ((balance.getBalance() - c.RequestLeaveDays < -1 * leaveType.LeaveTypeIsESSAllowableAdvanceBalance && balanceProcess.BalanceUnit == ELeaveBalance.LeaveBalanceUnit.Day) ||
                        //          (balance.getBalance() - c.RequestLeaveAppHours < -1 * leaveType.LeaveTypeIsESSAllowableAdvanceBalance && balanceProcess.BalanceUnit == ELeaveBalance.LeaveBalanceUnit.Hour)
                        //         )
                        else if ((balance.getBalance() - m_days - c.RequestLeaveDays < -1 * leaveType.LeaveTypeIsESSAllowableAdvanceBalance && balanceProcess.BalanceUnit == ELeaveBalance.LeaveBalanceUnit.Day) ||
                                 (balance.getBalance() - m_hours - c.RequestLeaveAppHours < -1 * leaveType.LeaveTypeIsESSAllowableAdvanceBalance && balanceProcess.BalanceUnit == ELeaveBalance.LeaveBalanceUnit.Hour)
                                 )
                        // End 0000008, Ricky So, 2014-11-21
                        {
                            errors.addError(ERROR_MESSAGE_BALANCE_NOT_ENOUGH);
                        }
                        //if (balance == null
                        //    || (balance.getBalance() < c.RequestLeaveDays  && balanceProcess.BalanceUnit == ELeaveBalance.LeaveBalanceUnit.Day)
                        //    || (balance.getBalance() < c.RequestLeaveAppHours  && balanceProcess.BalanceUnit == ELeaveBalance.LeaveBalanceUnit.Hour)
                        //    )
                        //{
                        //    errors.addError(ERROR_MESSAGE_BALANCE_NOT_ENOUGH);
                        //}
                        // End 0000093, Ricky So, 2014-09-06
                    }
                }
            }
        }

        if (!errors.isEmpty())
        {
            return;
        }

        ArrayList overlapLeaveAppList = new ArrayList();

        if (c.IsOverlapLeaveApplication(dbConn, out overlapLeaveAppList))
        {
            string strDailyOverlapMessage  = string.Empty;
            string strHourlyOverlapMessage = string.Empty;

            foreach (BaseObject overlapLeaveApp in overlapLeaveAppList)
            {
                if (overlapLeaveApp is ELeaveApplication)
                {
                    ELeaveApplication previousLeaveApp = (ELeaveApplication)overlapLeaveApp;
                    if (previousLeaveApp.LeaveAppUnit.Equals("D") || c.RequestLeaveAppUnit.Equals("D"))
                    {
                        if (string.IsNullOrEmpty(strDailyOverlapMessage))
                        {
                            strDailyOverlapMessage = "Leave dates cannot overlap with previous leave applications";
                        }
                        ELeaveCode leaveCode = new ELeaveCode();
                        leaveCode.LeaveCodeID = previousLeaveApp.LeaveCodeID;
                        if (ELeaveCode.db.select(dbConn, leaveCode))
                        {
                            // Start 0000201, Ricky So, 2015-06-02
                            //strDailyOverlapMessage += "\r\n- " + previousLeaveApp.LeaveAppDateFrom.ToString("yyyy-MM-dd") + (previousLeaveApp.LeaveAppDateFrom.Equals(previousLeaveApp.LeaveAppDateTo) ? "" : " To " + previousLeaveApp.LeaveAppDateTo.ToString("yyyy-MM-dd")) + " " + leaveCode.LeaveCodeDesc;
                            strDailyOverlapMessage += "\r\n- " + previousLeaveApp.LeaveAppDateFrom.ToString("yyyy-MM-dd");

                            if (previousLeaveApp.LeaveAppUnit == "A")
                            {
                                strDailyOverlapMessage += "AM";
                            }
                            else if (previousLeaveApp.LeaveAppUnit == "P")
                            {
                                strDailyOverlapMessage += "PM";
                            }
                            else if (previousLeaveApp.LeaveAppUnit == "D" && !string.IsNullOrEmpty(previousLeaveApp.LeaveAppDateFromAM))
                            {
                                strDailyOverlapMessage += previousLeaveApp.LeaveAppDateFromAM;
                            }
                            else
                            if (previousLeaveApp.LeaveAppDateFrom.Equals(previousLeaveApp.LeaveAppDateTo))
                            {
                                strDailyOverlapMessage += " To " + previousLeaveApp.LeaveAppDateTo.ToString("yyyy-MM-dd");
                            }

                            if (previousLeaveApp.LeaveAppUnit == "D" && !string.IsNullOrEmpty(previousLeaveApp.LeaveAppDateToAM))
                            {
                                strDailyOverlapMessage += previousLeaveApp.LeaveAppDateToAM;
                            }
                            else
                            {
                                strDailyOverlapMessage += "   " + leaveCode.LeaveCodeDesc;
                            }
                            // End 0000201, Ricky So, 2015-06-02
                        }
                    }
                    else
                    {
                        if (string.IsNullOrEmpty(strHourlyOverlapMessage))
                        {
                            strHourlyOverlapMessage = "Leave time cannot overlap with previous leave applications";
                        }
                    }
                }
                else if (overlapLeaveApp is ERequestLeaveApplication)
                {
                    ERequestLeaveApplication previousRequestLeaveApp = (ERequestLeaveApplication)overlapLeaveApp;

                    if (previousRequestLeaveApp.RequestLeaveAppUnit.Equals("D") || c.RequestLeaveAppUnit.Equals("D"))
                    {
                        if (string.IsNullOrEmpty(strDailyOverlapMessage))
                        {
                            strDailyOverlapMessage = "Leave dates cannot overlap with previous leave applications";
                        }
                        ELeaveCode leaveCode = new ELeaveCode();
                        leaveCode.LeaveCodeID = previousRequestLeaveApp.RequestLeaveCodeID;
                        if (ELeaveCode.db.select(dbConn, leaveCode))
                        {
                            // Start 0000201, Ricky So, 2015-06-02
                            //strDailyOverlapMessage += "\r\n- " + previousRequestLeaveApp.RequestLeaveAppDateFrom.ToString("yyyy-MM-dd") + (previousRequestLeaveApp.RequestLeaveAppDateFrom.Equals(previousRequestLeaveApp.RequestLeaveAppDateTo) ? "" : " To " + previousRequestLeaveApp.RequestLeaveAppDateTo.ToString("yyyy-MM-dd")) + " " + leaveCode.LeaveCodeDesc;
                            strDailyOverlapMessage += "\r\n- " + previousRequestLeaveApp.RequestLeaveAppDateFrom.ToString("yyyy-MM-dd");

                            if (previousRequestLeaveApp.RequestLeaveAppUnit == "A")
                            {
                                strDailyOverlapMessage += "AM";
                            }
                            else if (previousRequestLeaveApp.RequestLeaveAppUnit == "P")
                            {
                                strDailyOverlapMessage += "PM";
                            }
                            else if (previousRequestLeaveApp.RequestLeaveAppUnit == "D" && !string.IsNullOrEmpty(previousRequestLeaveApp.RequestLeaveAppDateFromAM))
                            {
                                strDailyOverlapMessage += previousRequestLeaveApp.RequestLeaveAppDateFromAM;
                            }
                            else
                            if (previousRequestLeaveApp.RequestLeaveAppDateFrom.Equals(previousRequestLeaveApp.RequestLeaveAppDateTo))
                            {
                                strDailyOverlapMessage += " To " + previousRequestLeaveApp.RequestLeaveAppDateTo.ToString("yyyy-MM-dd");
                            }

                            if (previousRequestLeaveApp.RequestLeaveAppUnit == "D" && !string.IsNullOrEmpty(previousRequestLeaveApp.RequestLeaveAppDateToAM))
                            {
                                strDailyOverlapMessage += previousRequestLeaveApp.RequestLeaveAppDateToAM;
                            }
                            else
                            {
                                strDailyOverlapMessage += "   " + leaveCode.LeaveCodeDesc;
                            }
                            // End 0000201, Ricky So, 2015-06-02
                        }
                    }
                    else
                    {
                        if (string.IsNullOrEmpty(strHourlyOverlapMessage))
                        {
                            strHourlyOverlapMessage = "Leave time cannot overlap with previous leave applications";
                        }
                    }
                }
            }

            if (!string.IsNullOrEmpty(strDailyOverlapMessage))
            {
                errors.addError(strDailyOverlapMessage);
            }
            if (!string.IsNullOrEmpty(strHourlyOverlapMessage))
            {
                errors.addError(strHourlyOverlapMessage);
            }
        }

        if (!errors.isEmpty())
        {
            return;
        }

        try
        {
            ESSAuthorizationProcess authorization = new ESSAuthorizationProcess(dbConn);
            authorization.SubmitLeaveApplication(c);
        }
        catch (Exception ex)
        {
            errors.addError(ex.Message);
        }

        if (!errors.isEmpty())
        {
            return;
        }
        if (c.RequestLeaveAppHasMedicalCertificate)
        {
            string message = ESystemParameter.getParameter(dbConn, ESystemParameter.PARAM_CODE_ESS_LEAVE_MEDICIAL_CERT_ALERT);
            if (!string.IsNullOrEmpty(message))
            {
                message = message.Replace("\r", "\\r").Replace("\n", "\\n");
                ScriptManager.RegisterStartupScript(Page, Page.GetType(), "leaveAppAlert", "alert(\"" + message + "\"); window.location=\"./ESS_EmpRequestStatus.aspx\";", true);
                //ScriptManager.RegisterStartupScript(Page, Page.GetType(), "errorMessage", "popupDialog(\"testing\");", true);

                return;
            }
        }
        HROne.Common.WebUtility.RedirectURLwithEncryptedQueryString(Response, Session, "~/ESS_EmpRequestStatus.aspx");
    }
示例#15
0
        protected override void LoadServerData(DateTime asOfDate)
        {
            ELeaveBalance m_balance    = new ELeaveBalance();
            ELeaveBalance m_preBalance = new ELeaveBalance();
            ELeaveBalance m_curBalance = new ELeaveBalance();
            ELeaveBalance m_subBalance;

            DateTime m_periodFromDate = new DateTime(1900, 1, 1);
            DateTime m_periodToDate   = asOfDate;

            m_balance.EmpID       = EmpID;
            m_balance.LeaveTypeID = LeaveTypeID;
            m_balance.BalanceUnit = ELeaveBalance.LeaveBalanceUnit.Hour;
            m_balance.LeaveBalanceEffectiveDate = new DateTime(asOfDate.Year, 1, 1);

            ArrayList entitledList  = LoadAllEntitled(m_periodFromDate, asOfDate, m_balance.EmpID);
            ArrayList adjustedList  = LoadAllAdjust(m_periodFromDate, asOfDate, EmpID, m_balance.LeaveTypeID);
            ArrayList takenList     = LoadAllTaken(m_periodFromDate, m_periodToDate, EmpID, m_balance.LeaveTypeID);
            ArrayList processedList = new ArrayList();
            ArrayList removalList   = new ArrayList();

            m_earned = BuildEarnedTable(entitledList, adjustedList);

            m_preBalance.LeaveBalanceEntitled = GetEntitledBalance(m_periodFromDate, m_balance.LeaveBalanceEffectiveDate.AddDays(-1));
            m_preBalance.Adjust = GetAdjustedBalance(m_periodFromDate, m_balance.LeaveBalanceEffectiveDate.AddDays(-1));

            //********************* before effective date ******************/
            foreach (ELeaveApplication o in takenList) // process Taken before effective date
            {
                if (o.LeaveAppDateFrom >= m_balance.LeaveBalanceEffectiveDate)
                {
                    break;
                }

                double m_takenHours = o.LeaveAppHours;

                // check available balance before process leave taken
                m_subBalance = GetAvailableBalance(o, m_balance.LeaveBalanceEffectiveDate.AddDays(-1)); //, entitledList, processedList, adjustedList, o.LeaveAppHours);
                m_preBalance.ExpiryForfeit += m_subBalance.ExpiryForfeit;
                m_preBalance.Taken         += m_takenHours;

                removalList.Add(o);
            }

            foreach (ELeaveApplication o in removalList)
            {
                takenList.Remove(o);
            }

            m_balance.LeaveBalanceBF = m_preBalance.LeaveBalanceEntitled +
                                       m_preBalance.Adjust -
                                       m_preBalance.Taken -
                                       m_preBalance.ExpiryForfeit;

            m_balance.LeaveBalanceEntitled = GetEntitledBalance(m_balance.LeaveBalanceEffectiveDate, asOfDate);
            m_balance.Adjust = GetAdjustedBalance(m_balance.LeaveBalanceEffectiveDate, asOfDate);

            foreach (ELeaveApplication o in takenList) // process Taken after effective date
            {
                if (o.LeaveAppDateFrom > asOfDate)
                {
                    break;
                }

                double m_takenHours = o.LeaveAppHours;

                // check available balance before process leave taken
                m_subBalance = GetAvailableBalance(o, asOfDate);
                m_curBalance.ExpiryForfeit += m_subBalance.ExpiryForfeit;
                m_curBalance.Taken         += m_takenHours;

                removalList.Add(o);
            }
            foreach (ELeaveApplication o in removalList)
            {
                takenList.Remove(o);
            }

            m_balance.Taken         = m_curBalance.Taken;
            m_balance.ExpiryForfeit = m_curBalance.ExpiryForfeit;

            // let unused entitlement/adjustment expire if there are no further taken.
            m_balance.ExpiryForfeit += GetUnusedExpiredBalance(asOfDate);

            //********************** get next expiry information *************/
            if (m_earned.Rows.Count > 0)
            {
                m_earned.DefaultView.Sort = "EXPIRY_DATE, UNUSED_HOURS desc";
                m_earned = m_earned.DefaultView.ToTable();

                foreach (DataRow row in m_earned.Rows)
                {
                    if (row["EXPIRY_DATE"] != null && System.Convert.ToDateTime(row["EXPIRY_DATE"]).CompareTo(asOfDate) >= 0 &&
                        System.Convert.ToDouble(row["UNUSED_HOURS"]) > 0)
                    {
                        if (m_balance.NextExpiryDate.Ticks.Equals(0))
                        {
                            m_balance.NextExpiryDate    = System.Convert.ToDateTime(row["EXPIRY_DATE"]);
                            m_balance.NextExpiryForfeit = System.Convert.ToDouble(row["UNUSED_HOURS"]);
                        }
                        else if (m_balance.NextExpiryDate == System.Convert.ToDateTime(row["EXPIRY_DATE"]))
                        {
                            m_balance.NextExpiryForfeit += System.Convert.ToDouble(row["UNUSED_HOURS"]);
                        }
                    }
                }
                if (m_balance.NextExpiryForfeit <= 0)
                {
                    m_balance.NextExpiryDate = new DateTime();
                }
            }

            // find the reserved
            m_balance.Reserved = GetReservedBalance(takenList, asOfDate);

            balanceItemList.Add(m_balance);
        }
        protected override double LoadTaken(ELeaveBalance balanceItem, DateTime AsOfDate)
        {
            base.LoadTaken(balanceItem, AsOfDate);

            DateTime DateFrom, DateTo;

            DateFrom = balanceItem.LeaveBalanceEffectiveDate;
            DateTo   = balanceItem.LeaveBalanceEffectiveEndDate;

            DBFilter rosterCodeFilter = new DBFilter();

            rosterCodeFilter.add(new Match("RosterCodeType", ERosterCode.ROSTERTYPE_CODE_PUBLICHOLIDAY));

            //  Use AttendanceRecord as primary source for Rest Day taken
            {
                DBFilter attendanceRecordFilter = new DBFilter();
                attendanceRecordFilter.add(new Match("AttendanceRecordDate", ">=", DateFrom));
                attendanceRecordFilter.add(new Match("EmpID", balanceItem.EmpID));
                attendanceRecordFilter.add(new IN("RosterCodeID", "Select RosterCodeID from " + ERosterCode.db.dbclass.tableName, rosterCodeFilter));
                ArrayList AttendanceRecordList = EAttendanceRecord.db.select(dbConn, attendanceRecordFilter);

                foreach (EAttendanceRecord attendanceRecord in AttendanceRecordList)
                {
                    //  Check if duplicate rest day leave application exists
                    //
                    double   actualDayTaken         = 1;
                    DBFilter leaveApplicationFilter = new DBFilter();
                    DBFilter leaveCodeFilter        = new DBFilter();
                    leaveCodeFilter.add(new Match("LeaveTypeID", LeaveTypeID));
                    leaveApplicationFilter.add(new Match("EmpID", balanceItem.EmpID));
                    leaveApplicationFilter.add(new Match("LeaveAppDateFrom", "<=", attendanceRecord.AttendanceRecordDate));
                    leaveApplicationFilter.add(new Match("LeaveAppDateTo", ">=", attendanceRecord.AttendanceRecordDate));
                    leaveApplicationFilter.add(new IN("LeaveCodeID", "SELECT LeaveCodeID FROM " + ELeaveCode.db.dbclass.tableName, leaveCodeFilter));
                    ArrayList leaveAppList = ELeaveApplication.db.select(dbConn, leaveApplicationFilter);
                    foreach (ELeaveApplication leaveApp in leaveAppList)
                    {
                        actualDayTaken -= leaveApp.LeaveAppDays;
                    }

                    if (actualDayTaken > 0)
                    {
                        if (attendanceRecord.AttendanceRecordDate <= AsOfDate && attendanceRecord.AttendanceRecordDate <= DateTo)
                        {
                            balanceItem.Taken += actualDayTaken;
                        }
                        else
                        {
                            balanceItem.Reserved += actualDayTaken;
                        }
                    }
                }
            }
            //  Use rostertable for Rest Day taken only if attendence record does not exist
            {
                DBFilter rosterTableFilter = new DBFilter();
                rosterTableFilter.add(new Match("RosterTableDate", ">=", DateFrom));
                rosterTableFilter.add(new Match("EmpID", balanceItem.EmpID));
                rosterTableFilter.add(new IN("RosterCodeID", "Select RosterCodeID from " + ERosterCode.db.dbclass.tableName, rosterCodeFilter));
                DBFilter notExistsFilter = new DBFilter();
                notExistsFilter.add(new MatchField("RosterTableDate", "AttendanceRecordDate"));
                notExistsFilter.add(new Match("EmpID", balanceItem.EmpID));
                rosterTableFilter.add(new Exists(EAttendanceRecord.db.dbclass.tableName + " ar", notExistsFilter, true));
                ArrayList rosterTableList = ERosterTable.db.select(dbConn, rosterTableFilter);

                foreach (ERosterTable rosterTable in rosterTableList)
                {
                    //  Check if duplicate rest day leave application exists
                    //
                    double   actualDayTaken         = 1;
                    DBFilter leaveApplicationFilter = new DBFilter();
                    DBFilter leaveCodeFilter        = new DBFilter();
                    leaveCodeFilter.add(new Match("LeaveTypeID", LeaveTypeID));
                    leaveApplicationFilter.add(new Match("EmpID", balanceItem.EmpID));
                    leaveApplicationFilter.add(new Match("LeaveAppDateFrom", "<=", rosterTable.RosterTableDate));
                    leaveApplicationFilter.add(new Match("LeaveAppDateTo", ">=", rosterTable.RosterTableDate));
                    leaveApplicationFilter.add(new IN("LeaveCodeID", "SELECT LeaveCodeID FROM " + ELeaveCode.db.dbclass.tableName, leaveCodeFilter));
                    ArrayList leaveAppList = ELeaveApplication.db.select(dbConn, leaveApplicationFilter);
                    foreach (ELeaveApplication leaveApp in leaveAppList)
                    {
                        actualDayTaken -= leaveApp.LeaveAppDays;
                    }

                    if (actualDayTaken > 0)
                    {
                        if (rosterTable.RosterTableDate <= AsOfDate && rosterTable.RosterTableDate <= DateTo)
                        {
                            balanceItem.Taken += actualDayTaken;
                        }
                        else
                        {
                            balanceItem.Reserved += actualDayTaken;
                        }
                    }
                }
            }

            //DBFilter filter = new DBFilter();
            //filter.add(new Match("RosterTableDate", ">=", DateFrom));
            //filter.add(new Match("EmpID", balanceItem.EmpID));
            //DBFilter rosterCodeFilter = new DBFilter();
            //rosterCodeFilter.add(new Match("RosterCodeType", ERosterCode.ROSTERTYPE_CODE_STATUTORYHOLIDAY));
            //filter.add(new IN("RosterCodeID", "Select RosterCodeID from " + ERosterCode.db.dbclass.tableName, rosterCodeFilter));
            //ArrayList rosterTableList = ERosterTable.db.select(dbConn, filter);

            //foreach (ERosterTable rosterTable in rosterTableList)
            //{
            //    //  Check if duplicate rest day leave application exists
            //    //
            //    double actualDayTaken = 1;
            //    DBFilter leaveApplicationFilter = new DBFilter();
            //    DBFilter leaveCodeFilter = new DBFilter();
            //    leaveCodeFilter.add(new Match("LeaveTypeID", LeaveTypeID));
            //    leaveApplicationFilter.add(new Match("EmpID", balanceItem.EmpID));
            //    leaveApplicationFilter.add(new Match("LeaveAppDateFrom", "<=", rosterTable.RosterTableDate));
            //    leaveApplicationFilter.add(new Match("LeaveAppDateTo", ">=", rosterTable.RosterTableDate));
            //    leaveApplicationFilter.add(new IN("LeaveCodeID", "SELECT LeaveCodeID FROM " + ELeaveCode.db.dbclass.tableName, leaveCodeFilter));
            //    ArrayList leaveAppList = ELeaveApplication.db.select(dbConn, leaveApplicationFilter);
            //    foreach (ELeaveApplication leaveApp in leaveAppList)
            //        actualDayTaken -= leaveApp.LeaveAppDays;

            //    if (actualDayTaken > 0)
            //        if (rosterTable.RosterTableDate <= AsOfDate && rosterTable.RosterTableDate <= DateTo)
            //            balanceItem.Taken += actualDayTaken;
            //        else
            //            balanceItem.Reserved += actualDayTaken;
            //}

            return(balanceItem.Taken);
        }