protected void btnEstimateTotalLeaveDay_Click(object sender, EventArgs e)
    {
        lblStatutoryHolidayList.Text = string.Empty;
        if (RequestLeaveAppUnit.SelectedValue.Equals("D"))
        {
            DateTime dtFrom, dtTo;

            if (DateTime.TryParse(RequestLeaveAppDateFrom.Value, out dtFrom) && DateTime.TryParse(RequestLeaveAppDateTo.Value, out dtTo))
            {
                int intLeaveCodeID = 0;
                try
                {
                    intLeaveCodeID = Convert.ToInt32(RequestLeaveCodeID.SelectedValue);
                }
                catch
                {
                }

                DateTime[] dateSkipArray = null;
                double     totalDays     = ELeaveApplication.GetEstimatedNumOfLeaveDays(dbConn, CurEmpID, dtFrom, dtTo, intLeaveCodeID, out dateSkipArray);
                // Start 0000201, Ricky So, 2015-05-28
                if (RequestLeaveAppDateFromAM.Visible == true && RequestLeaveAppDateFromAM.SelectedValue == "PM")
                {
                    totalDays -= 0.5;
                }

                if (RequestLeaveAppDateToAM.Visible == true && RequestLeaveAppDateToAM.SelectedValue == "AM")
                {
                    totalDays -= 0.5;
                }

                if (totalDays < 0)
                {
                    totalDays = 0;
                }
                // End 0000201, Ricky So, 2015-05-28

                RequestLeaveDays.Text = totalDays.ToString();

                if (dateSkipArray.GetLength(0) > 0)
                {
                    lblStatutoryHolidayList.Text = HROne.Common.WebUtility.GetLocalizedString("Date excluded");
                    foreach (DateTime dateSkip in dateSkipArray)
                    {
                        lblStatutoryHolidayList.Text += "<br/>" + dateSkip.ToString("yyyy-MM-dd");
                    }
                }
                LeaveAppDays_TextChanged(sender, e);
            }
        }
        else if (RequestLeaveAppUnit.SelectedValue.Equals("H"))
        {
            LeaveAppTime_TextChanged(sender, e);
        }
        else if (RequestLeaveAppUnit.SelectedValue.Equals("A") || RequestLeaveAppUnit.SelectedValue.Equals("P"))
        {
            RequestLeaveDays.Text = "0.5";
            LeaveAppDays_TextChanged(sender, e);
        }
    }
Example #2
0
    protected void btnEstimateTotalLeaveDay_Click(object sender, EventArgs e)
    {
        lblStatutoryHolidayList.Text = string.Empty;
        if (LeaveAppUnit.SelectedValue.Equals("D"))
        {
            DateTime dtFrom, dtTo;
            if (DateTime.TryParse(LeaveAppDateFrom.Value, out dtFrom) && DateTime.TryParse(LeaveAppDateTo.Value, out dtTo))
            {
                int intLeaveCodeID = 0;
                try
                {
                    intLeaveCodeID = Convert.ToInt32(LeaveCodeID.SelectedValue);
                }
                catch
                {
                }

                DateTime[] dateSkipArray = null;
                double     totalDays     = ELeaveApplication.GetEstimatedNumOfLeaveDays(dbConn, CurEmpID, dtFrom, dtTo, intLeaveCodeID, out dateSkipArray);
                LeaveAppDays.Text = totalDays.ToString();

                if (dateSkipArray.GetLength(0) > 0)
                {
                    lblStatutoryHolidayList.Text = HROne.Common.WebUtility.GetLocalizedString("Date excluded");
                    foreach (DateTime dateSkip in dateSkipArray)
                    {
                        lblStatutoryHolidayList.Text += "<br/>" + dateSkip.ToString("yyyy-MM-dd");
                    }
                }
                LeaveAppDays_TextChanged(sender, e);
                //double totalDays=Math.Abs(((TimeSpan)dtTo.Subtract(dtFrom)).TotalDays) + 1;

                //DBFilter statutoryHolidayFilter = new DBFilter();
                //statutoryHolidayFilter.add(new Match("StatutoryHolidayDate", "<=", dtFrom < dtTo ? dtTo : dtFrom));
                //statutoryHolidayFilter.add(new Match("StatutoryHolidayDate", ">=", dtFrom < dtTo ? dtFrom : dtTo));
                //statutoryHolidayFilter.add("StatutoryHolidayDate", true);
                //ArrayList statutoryList = EStatutoryHoliday.db.select(dbConn, statutoryHolidayFilter);
                //if (statutoryList.Count > 0)
                //{
                //    lblStatutoryHolidayList.Text = HROne.Common.WebUtility.GetLocalizedString("Statutory Holiday");
                //    foreach (EStatutoryHoliday statHol in statutoryList)
                //    {
                //        lblStatutoryHolidayList.Text += "<br/>" + statHol.StatutoryHolidayDate.ToString("yyyy-MM-dd") + "&nbsp" + statHol.StatutoryHolidayDesc;
                //        totalDays--;
                //    }
                //}
                //LeaveAppDays.Text = totalDays.ToString() ;
            }
        }
        else if (LeaveAppUnit.SelectedValue.Equals("H"))
        {
            LeaveAppTime_TextChanged(sender, e);
        }
        else if (LeaveAppUnit.SelectedValue.Equals("A") || LeaveAppUnit.SelectedValue.Equals("P"))
        {
            LeaveAppDays.Text = "0.5";
            LeaveAppDays_TextChanged(sender, e);
        }
    }
Example #3
0
    protected bool loadObject()
    {
        obj            = new ELeaveApplication();
        obj.LeaveAppID = CurLeaveAppID;
        if (!ELeaveApplication.db.select(dbConn, obj))
        {
            return(false);
        }

        if (obj.EmpID != UserID)
        {
            return(false);
        }
        Hashtable values = new Hashtable();

        ELeaveApplication.db.populate(obj, values);
        leaveApplicationBinding.toControl(values);
        //EEmpPersonalInfo EmpInfo = new EEmpPersonalInfo();
        //EmpInfo.EmpID = obj.EmpID;
        //if (EEmpPersonalInfo.db.select(dbConn, EmpInfo))
        //    EmpName.Text = EmpInfo.EmpNo + " - " + EmpInfo.EmpEngFullNameWithAlias;

        if (obj.LeaveAppUnit.Equals("D"))
        {
            TimeRow.Visible = false;
            LeaveAppDateToPlaceHolder.Visible = true;
        }
        else
        {
            TimeRow.Visible = true;
            LeaveAppDateToPlaceHolder.Visible = false;
        }

        string     leaveAuthorizedMessage = CONFIRM_MESSAGE;
        ELeaveCode leaveCode = new ELeaveCode();

        leaveCode.LeaveCodeID = obj.LeaveCodeID;
        if (ELeaveCode.db.select(dbConn, leaveCode))
        {
            LeaveCodeIsShowMedicalCertOptionPanel.Visible = leaveCode.LeaveCodeIsShowMedicalCertOption;

            if (leaveCode.LeaveTypeID.Equals(ELeaveType.COMPENSATION_LEAVE_TYPE(dbConn).LeaveTypeID))
            {
                HoursClaimPanel.Visible = true;
            }
            else
            {
                HoursClaimPanel.Visible = false;
            }
        }
        else
        {
            HoursClaimPanel.Visible = false;
        }



        return(true);
    }
Example #4
0
    protected void RefreshLeaveCodeID()
    {
        HoursClaimPanel.Visible = false;
        if (!string.IsNullOrEmpty(LeaveCodeID.SelectedValue))
        {
            int tmpLeaveCodeID = 0;
            if (int.TryParse(LeaveCodeID.SelectedValue, out tmpLeaveCodeID))
            {
                ELeaveCode leaveCode = new ELeaveCode();
                leaveCode.LeaveCodeID = tmpLeaveCodeID;
                if (ELeaveCode.db.select(dbConn, leaveCode))
                {
                    PayrollProcessPanel.Visible = !leaveCode.LeaveCodeIsSkipPayrollProcess;
                    LeaveCodeIsShowMedicalCertOptionPanel.Visible = leaveCode.LeaveCodeIsShowMedicalCertOption;
                    if (!leaveCode.LeaveCodeIsSkipPayrollProcess)
                    {
                        ELeaveApplication leaveApp = new ELeaveApplication();
                        leaveApp.LeaveAppID = CurID;
                        if (ELeaveApplication.db.select(dbConn, leaveApp))
                        {
                            ELeaveCode prevLeaveCode = new ELeaveCode();
                            prevLeaveCode.LeaveCodeID = leaveApp.LeaveCodeID;
                            if (ELeaveCode.db.select(dbConn, prevLeaveCode))
                            {
                                if (prevLeaveCode.LeaveCodeIsSkipPayrollProcess)
                                {
                                    LeaveAppNoPayProcess.Checked = false;
                                }
                            }
                        }
                    }

                    if (leaveCode.LeaveTypeID.Equals(ELeaveType.COMPENSATION_LEAVE_TYPE(dbConn).LeaveTypeID))
                    {
                        HoursClaimPanel.Visible = true;
                    }
                    else
                    {
                        HoursClaimPanel.Visible = false;
                    }
                }
            }
        }
        if (HoursClaimPanel.Visible)
        {
            LeaveAppDays.AutoPostBack = true;
            LeaveAppDays.TextChanged += new EventHandler(LeaveAppDays_TextChanged);
        }
        else
        {
            LeaveAppDays.AutoPostBack = false;
            LeaveAppDays.TextChanged -= new EventHandler(LeaveAppDays_TextChanged);
        }
    }
    protected void Delete_Click(object sender, EventArgs e)
    {
        ELeaveApplication c = new ELeaveApplication();

        c.LeaveAppID = CurID;
        db.select(dbConn, c);
        WebUtils.StartFunction(Session, FUNCTION_CODE, c.EmpID);
        db.delete(dbConn, c);
        WebUtils.EndFunction(dbConn);
        //HROne.LeaveCalc.LeaveBalanceCalc leaaveBalCal = new HROne.LeaveCalc.LeaveBalanceCalc(dbConn, c.EmpID);
        //leaaveBalCal.RecalculateAfter(c.LeaveAppDateFrom, ELeaveType.COMPENSATION_LEAVE_TYPE(dbConn).LeaveTypeID);
        HROne.Common.WebUtility.RedirectURLwithEncryptedQueryString(Response, Session, "EmpTab_LeaveApplication_View.aspx?EmpID=" + EmpID.Value);
    }
    protected void Repeater_ItemCommand(object source, RepeaterCommandEventArgs e)
    {
        PageErrors errors = PageErrors.getErrors(ELeaveApplication.db, Page.Master);

        int LeaveAppID = 0;

        if (int.TryParse(((Button)e.Item.FindControl("Cancel")).Attributes["LeaveAppID"], out LeaveAppID))
        {
            ELeaveApplication obj = new ELeaveApplication();
            obj.LeaveAppID = LeaveAppID;
            if (ELeaveApplication.db.select(dbConn, obj))
            {
                //if (obj.EmpPayrollID > 0 || obj.EmpPaymentID > 0)
                //{
                //    //  message prompt to user
                //}
                //else
                {
                    ELeaveCode leaveCode = new ELeaveCode();
                    leaveCode.LeaveCodeID = obj.LeaveCodeID;
                    if (ELeaveCode.db.select(dbConn, leaveCode))
                    {
                        if (leaveCode.LeaveCodeHideInESS)
                        {
                            //  message prompt to user
                        }
                        else
                        {
                            HROne.Common.WebUtility.RedirectURLwithEncryptedQueryString(Response, Session, "ESS_EmpLeaveApplicationCancel.aspx?LeaveAppID=" + LeaveAppID);

                            //AppUtils.StartFunction(dbConn, 0, "PER009", obj.EmpID, true);
                            //ELeaveApplication.db.delete(dbConn, obj);
                            //AppUtils.EndFunction(dbConn);
                            //ESSAuthorizationProcess authorization = new ESSAuthorizationProcess(dbConn);
                            //authorization.CancelLeaveApplicatoin(obj);
                            //errors.addError(HROne.Common.WebUtility.GetLocalizedString("The leave application is cancelled"));
                        }
                    }
                    else
                    {
                        //  message prompt to user
                    }
                }
            }
        }
        view = loadData(info, db, Repeater);
    }
        public void ImportToDatabase(int UploadEmpID)
        {
            DBFilter sessionFilter = new DBFilter();

            sessionFilter.add(new Match("SessionID", m_SessionID));
            if (UploadEmpID > 0)
            {
                sessionFilter.add(new Match("UploadEmpID", UploadEmpID));
            }
            ArrayList uploadLeaveAppList = tempDB.select(dbConn, sessionFilter);

            //Dictionary<int, DateTime> recalLeaveBalanceDateList = new Dictionary<int, DateTime>();

            foreach (EUploadLeaveApplication obj in uploadLeaveAppList)
            {
                ELeaveApplication leaveApplication = new ELeaveApplication();

                if (obj.ImportActionStatus != ImportDBObject.ImportActionEnum.INSERT)
                {
                    leaveApplication.LeaveAppID = obj.LeaveAppID;
                    uploadDB.select(dbConn, leaveApplication);
                }

                obj.ExportToObject(leaveApplication);

                if (obj.ImportActionStatus == ImportDBObject.ImportActionEnum.INSERT)
                {
                    leaveApplication.EmpID = ParseTemp.GetEmpIDFromUploadEmpID(dbConn, obj.UploadEmpID);

                    uploadDB.insert(dbConn, leaveApplication);
                }
                else if (obj.ImportActionStatus == ImportDBObject.ImportActionEnum.UPDATE)
                {
                    uploadDB.update(dbConn, leaveApplication);
                }
                tempDB.delete(dbConn, obj);
            }

            //foreach (int EmpID in recalLeaveBalanceDateList.Keys)
            //{
            //    HROne.LeaveCalc.LeaveBalanceCalc leaaveBalCal = new HROne.LeaveCalc.LeaveBalanceCalc(dbConn, EmpID);
            //    leaaveBalCal.RecalculateAfter(recalLeaveBalanceDateList[EmpID]);

            //}
        }
Example #8
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);
        }
Example #9
0
        private static DateTime getDAWAsOfDate(DatabaseConnection dbConn, int EmpID, int LeaveCodeID, DateTime LeaveDateFrom)
        {
            DBFilter leaveApplicationFilter = new DBFilter();

            leaveApplicationFilter.add(new Match("EmpID", EmpID));
            leaveApplicationFilter.add(new Match("LeaveCodeID", LeaveCodeID));
            leaveApplicationFilter.add(new Match("LeaveAppDateFrom", "<=", LeaveDateFrom.AddDays(-1)));
            leaveApplicationFilter.add(new Match("LeaveAppDateTo", ">=", LeaveDateFrom.AddDays(-1)));
            leaveApplicationFilter.add("LeaveAppDateFrom", true);
            ArrayList leaveAppList = ELeaveApplication.db.select(dbConn, leaveApplicationFilter);

            if (leaveAppList.Count > 0)
            {
                ELeaveApplication leaveApp = (ELeaveApplication)leaveAppList[0];
                return(getDAWAsOfDate(dbConn, EmpID, LeaveCodeID, leaveApp.LeaveAppDateFrom));
            }
            return(LeaveDateFrom);
        }
Example #10
0
    protected void Repeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        DataRowView row = (DataRowView)e.Item.DataItem;
        CheckBox    cb  = (CheckBox)e.Item.FindControl("ItemSelect");

        WebFormUtils.LoadKeys(sdb, row, cb);

        ELeaveApplication obj = new ELeaveApplication();

        sdb.toObject(row.Row, obj);

        if (obj.EmpPaymentID != 0 || obj.EmpPayrollID != 0)
        {
            cb.Visible = false;
        }
        else
        {
            cb.Visible = IsAllowEdit;
        }
    }
Example #11
0
    private string getCurrentLeaveCodeDesc(DateTime periodFromDate, int dayIdx, int empID)
    {
        DateTime currentDate    = periodFromDate.AddDays(dayIdx);
        TimeSpan cutOffTimeSpan = getCurrentCutOffTimeSpan(periodFromDate, dayIdx, empID);

        // retrieve employee leave information of the day
        DBFilter          leaveAppFilter = new DBFilter();
        ELeaveApplication leaveAppData   = new ELeaveApplication();

        leaveAppFilter.add(new Match("EmpID", empID));
        leaveAppFilter.add(new Match("LeaveAppDateFrom", "<=", currentDate.Add(cutOffTimeSpan)));
        leaveAppFilter.add(new Match("LeaveAppDateTo", ">=", currentDate.Add(cutOffTimeSpan)));

        ArrayList leaveAppDataList = ELeaveApplication.db.select(dbConn, leaveAppFilter);
        string    s = "";

        foreach (ELeaveApplication itemData in leaveAppDataList)
        {
            if (s != "")
            {
                s = s + "<br>";
            }

            // get leave code master
            DBFilter   leaveCodeMasterFilter = new DBFilter();
            ELeaveCode leaveCodeMasterData   = new ELeaveCode();
            leaveCodeMasterFilter.add(new Match("leaveCodeID", itemData.LeaveCodeID));
            ArrayList leaveCodeMasterDataList = ELeaveCode.db.select(dbConn, leaveCodeMasterFilter);

            if (leaveCodeMasterDataList != null)
            {
                s = s + ((ELeaveCode)leaveCodeMasterDataList[0]).LeaveCode + " - " + ((ELeaveCode)leaveCodeMasterDataList[0]).LeaveCodeDesc;
            }
        }
        if (s != "")
        {
            s.Replace("<br>", "\n");
        }
        return(s);
    }
Example #12
0
        protected RosterTableEventList GenerateEventList(ICollection DBObjectList)
        {
            RosterTableEventList tmpEventList = new RosterTableEventList();

            if (DBObjectList != null)
            {
                foreach (DBObject dbObject in DBObjectList)
                {
                    if (dbObject is ERosterTable)
                    {
                        ERosterTable rosterTable = (ERosterTable)dbObject;
                        ERosterCode  rosterCode  = new ERosterCode();
                        rosterCode.RosterCodeID = rosterTable.RosterCodeID;
                        bool hasRecord = ERosterCode.db.select(dbConn, rosterCode);
                        if (hasRecord || rosterCode.RosterCodeID == 0)
                        {
                            RosterTableEvent eventDetail = new RosterTableEvent();
                            eventDetail.Id = RosterTableEvent.ROSTER_TABLE_ID_PREFIX + "_" + rosterTable.RosterTableID;

                            //  Override Start/End time only when the roster code exists
                            if (rosterTable.RosterTableOverrideInTime.Ticks.Equals(0) || !hasRecord)
                            {
                                eventDetail.StartTime = rosterTable.RosterTableDate.Add(rosterCode.RosterCodeInTime.TimeOfDay);
                            }
                            else
                            {
                                eventDetail.StartTime = rosterTable.RosterTableDate.Add(rosterTable.RosterTableOverrideInTime.TimeOfDay);
                            }

                            if (rosterTable.RosterTableOverrideOutTime.Ticks.Equals(0) || !hasRecord)
                            {
                                eventDetail.EndTime = rosterTable.RosterTableDate.Add(rosterCode.RosterCodeOutTime.TimeOfDay);
                            }
                            else
                            {
                                eventDetail.EndTime = rosterTable.RosterTableDate.Add(rosterTable.RosterTableOverrideOutTime.TimeOfDay);
                            }
                            if (eventDetail.StartTime >= eventDetail.EndTime)
                            {
                                eventDetail.EndTime = eventDetail.EndTime.AddDays(1);

                                if (!DisplayOvernightToNextDay)
                                {
                                    eventDetail.EndTime = eventDetail.EndTime.Date;
                                }
                            }

                            EEmpPersonalInfo empInfo = new EEmpPersonalInfo();
                            empInfo.EmpID = rosterTable.EmpID;
                            EEmpPersonalInfo.db.select(dbConn, empInfo);

                            eventDetail.Subject = (hasRecord ? rosterCode.RosterCode : "(unspecified)") + " - " + empInfo.EmpEngDisplayName;
                            eventDetail.ToolTip = eventDetail.Subject;
                            eventDetail.Label   = rosterCode.RosterClientSiteID;

                            eventDetail.RecurrenceInfo = string.Empty;
                            eventDetail.OwnerId        = rosterCode.RosterClientSiteID;

                            tmpEventList.Add(eventDetail);
                        }
                    }
                    else if (dbObject is ELeaveApplication)
                    {
                        ELeaveApplication leaveApplication = (ELeaveApplication)dbObject;
                        ELeaveCode        leaveCode        = new ELeaveCode();
                        leaveCode.LeaveCodeID = leaveApplication.LeaveCodeID;
                        bool hasRecord = ELeaveCode.db.select(dbConn, leaveCode);
                        if (hasRecord)
                        {
                            RosterTableEvent eventDetail = new RosterTableEvent();
                            eventDetail.Id = RosterTableEvent.LEAVEAPP_ID_PREFIX + "_" + leaveApplication.LeaveAppID;

                            if (leaveApplication.LeaveAppUnit.Equals(ELeaveApplication.LEAVEUNIT_DAYS))
                            {
                                eventDetail.StartTime = leaveApplication.LeaveAppDateFrom;
                                eventDetail.EndTime   = leaveApplication.LeaveAppDateTo.AddDays(1);
                            }
                            else
                            {
                                eventDetail.StartTime = leaveApplication.LeaveAppDateFrom;
                                eventDetail.EndTime   = leaveApplication.LeaveAppDateFrom;
                                if (!leaveApplication.LeaveAppTimeFrom.Ticks.Equals(0))
                                {
                                    eventDetail.StartTime = eventDetail.StartTime.Add(leaveApplication.LeaveAppTimeFrom.TimeOfDay);
                                }
                                if (!leaveApplication.LeaveAppTimeTo.Ticks.Equals(0))
                                {
                                    eventDetail.EndTime = eventDetail.EndTime.Add(leaveApplication.LeaveAppTimeTo.TimeOfDay);
                                }

                                if (leaveApplication.LeaveAppUnit.Equals(ELeaveApplication.LEAVEUNIT_AM))
                                {
                                    if (eventDetail.StartTime.Equals(leaveApplication.LeaveAppDateFrom))
                                    {
                                        eventDetail.StartTime = eventDetail.StartTime.Add(new TimeSpan(0, 0, 0));
                                    }
                                    if (eventDetail.EndTime.Equals(leaveApplication.LeaveAppDateFrom))
                                    {
                                        eventDetail.EndTime = eventDetail.EndTime.Add(new TimeSpan(13, 0, 0));
                                    }
                                }
                                if (leaveApplication.LeaveAppUnit.Equals(ELeaveApplication.LEAVEUNIT_PM))
                                {
                                    if (eventDetail.StartTime.Equals(leaveApplication.LeaveAppDateFrom))
                                    {
                                        eventDetail.StartTime = eventDetail.StartTime.Add(new TimeSpan(13, 0, 0));
                                    }
                                    if (eventDetail.EndTime.Equals(leaveApplication.LeaveAppDateFrom))
                                    {
                                        eventDetail.EndTime = eventDetail.EndTime.AddDays(1);
                                    }
                                }
                                else
                                {
                                    if (eventDetail.StartTime.Equals(leaveApplication.LeaveAppDateFrom))
                                    {
                                        eventDetail.StartTime = eventDetail.StartTime.Add(new TimeSpan(0, 0, 0));
                                    }
                                    if (eventDetail.EndTime.Equals(leaveApplication.LeaveAppDateFrom))
                                    {
                                        eventDetail.EndTime = eventDetail.EndTime.AddDays(1);
                                    }
                                }
                            }


                            EEmpPersonalInfo empInfo = new EEmpPersonalInfo();
                            empInfo.EmpID = leaveApplication.EmpID;
                            EEmpPersonalInfo.db.select(dbConn, empInfo);

                            //eventDetail.Subject = (hasRecord ? leaveCode.LeaveCode : "(unspecified)") + " - " + empInfo.EmpEngDisplayName;

                            if (leaveApplication.LeaveAppDays < 0 || leaveApplication.LeaveAppHours < 0)
                            {
                                eventDetail.IsCancel = true;
                            }

                            string LeaveUnitDetail = string.Empty;
                            if (leaveApplication.LeaveAppUnit.Equals("D"))
                            {
                                LeaveUnitDetail = leaveApplication.LeaveAppDays + " " + "Day" + (leaveApplication.LeaveAppDays > 1 ? "s" : string.Empty);
                            }
                            else if (leaveApplication.LeaveAppUnit.Equals("H"))
                            {
                                if (leaveApplication.LeaveAppTimeFrom.Ticks.Equals(0) || leaveApplication.LeaveAppTimeTo.Ticks.Equals(0))
                                {
                                    LeaveUnitDetail = leaveApplication.LeaveAppHours + " " + "Hour" + (leaveApplication.LeaveAppHours > 1 ? "s" : string.Empty);
                                }
                                else
                                {
                                    LeaveUnitDetail = leaveApplication.LeaveAppTimeFrom.ToString("HH:mm") + "-" + leaveApplication.LeaveAppTimeTo.ToString("HH:mm");
                                }
                            }
                            else if (leaveApplication.LeaveAppUnit.Equals("A"))
                            {
                                if (leaveApplication.LeaveAppDays > 0)
                                {
                                    LeaveUnitDetail = "A.M.";
                                }
                                else
                                {
                                    LeaveUnitDetail = "-A.M.";
                                }
                            }
                            else if (leaveApplication.LeaveAppUnit.Equals("P"))
                            {
                                if (leaveApplication.LeaveAppDays > 0)
                                {
                                    LeaveUnitDetail = "P.M.";
                                }
                                else
                                {
                                    LeaveUnitDetail = "-P.M.";
                                }
                            }

                            eventDetail.Subject = (hasRecord ? leaveCode.LeaveCode : "(unspecified)")
                                                  + (string.IsNullOrEmpty(LeaveUnitDetail) ? string.Empty : ("(" + LeaveUnitDetail + ")"))
                                                  + " - " + empInfo.EmpEngDisplayName;
                            eventDetail.ToolTip = eventDetail.Subject;
                            //eventDetail.Label = rosterCode.RosterClientSiteID;

                            eventDetail.RecurrenceInfo = string.Empty;
                            //eventDetail.OwnerId = rosterCode.RosterClientSiteID;

                            tmpEventList.Add(eventDetail);
                        }
                    }
                    else if (dbObject is EPublicHoliday)
                    {
                        EPublicHoliday   holiday     = (EPublicHoliday)dbObject;
                        RosterTableEvent eventDetail = new RosterTableEvent();
                        eventDetail.Id = RosterTableEvent.PUBLICHOLIDAY_PREFIX + "_" + holiday.PublicHolidayID;

                        eventDetail.StartTime = holiday.PublicHolidayDate;
                        eventDetail.EndTime   = holiday.PublicHolidayDate.AddDays(1);



                        eventDetail.Subject = holiday.PublicHolidayDesc;
                        eventDetail.ToolTip = eventDetail.Subject;
                        //eventDetail.Label = rosterCode.RosterClientSiteID;

                        eventDetail.RecurrenceInfo = string.Empty;
                        //eventDetail.OwnerId = rosterCode.RosterClientSiteID;

                        tmpEventList.Add(eventDetail);
                    }
                    else if (dbObject is EStatutoryHoliday)
                    {
                        EStatutoryHoliday holiday     = (EStatutoryHoliday)dbObject;
                        RosterTableEvent  eventDetail = new RosterTableEvent();
                        eventDetail.Id = RosterTableEvent.STATUTORYHOLIDAY_PREFIX + "_" + holiday.StatutoryHolidayID;

                        eventDetail.StartTime = holiday.StatutoryHolidayDate;
                        eventDetail.EndTime   = holiday.StatutoryHolidayDate.AddDays(1);



                        eventDetail.Subject = holiday.StatutoryHolidayDesc;
                        eventDetail.ToolTip = eventDetail.Subject;
                        //eventDetail.Label = rosterCode.RosterClientSiteID;

                        eventDetail.RecurrenceInfo = string.Empty;
                        //eventDetail.OwnerId = rosterCode.RosterClientSiteID;

                        tmpEventList.Add(eventDetail);
                    }
                }
            }
            return(tmpEventList);
        }
        public DataTable UploadToTempDatabase(DataTable rawDataTable, int UserID)
        {
            if (rawDataTable == null)
            {
                return(GetImportDataFromTempDatabase(null));
            }

            int rowCount = 1;

            foreach (DataRow row in rawDataTable.Rows)
            {
                rowCount++;

                EUploadLeaveApplication uploadLeaveApp = new EUploadLeaveApplication();
                //ELeaveApplication lastLeaveApp = null;

                string EmpNo = row[FIELD_EMP_NO].ToString().Trim();
                uploadLeaveApp.EmpID = Parse.GetEmpID(dbConn, EmpNo, UserID);
                if (uploadLeaveApp.EmpID < 0)
                {
                    errors.addError(ImportErrorMessage.ERROR_ACCESS_DENIED_EMP_NO, new string[] { EmpNo, rowCount.ToString() });
                }

                uploadLeaveApp.UploadEmpID = ParseTemp.GetUploadEmpID(dbConn, EmpNo, m_SessionID);
                if (uploadLeaveApp.UploadEmpID == 0)
                {
                    if (uploadLeaveApp.EmpID == 0)
                    {
                        errors.addError(ImportErrorMessage.ERROR_INVALID_EMP_NO, new string[] { EmpNo, rowCount.ToString() });
                    }
                    else
                    {
                        uploadLeaveApp.UploadEmpID = ImportEmpPersonalInfoProcess.CreateDummyUploadEmployeeInfo(dbConn, uploadLeaveApp.EmpID, m_SessionID, UploadDateTime);
                    }
                }

                try
                {
                    uploadLeaveApp.LeaveAppDateFrom = Parse.toDateTimeObject(row[FIELD_FROM]);
                }
                catch
                {
                    uploadLeaveApp.LeaveAppDateFrom = new DateTime();
                    //errors.addError(ImportErrorMessage.ERROR_INVALID_FIELD_VALUE, new string[] { FIELD_FROM + "=" + row[FIELD_FROM].ToString(), EmpNo, rowCount.ToString() });
                }
                if (uploadLeaveApp.LeaveAppDateFrom.Ticks.Equals(0))
                {
                    errors.addError(ImportErrorMessage.ERROR_INVALID_FIELD_VALUE, new string[] { FIELD_FROM + "=" + row[FIELD_FROM].ToString(), EmpNo, rowCount.ToString() });
                }
                try
                {
                    uploadLeaveApp.LeaveAppDateTo = Parse.toDateTimeObject(row[FIELD_TO]);
                }
                catch
                {
                    uploadLeaveApp.LeaveAppDateTo = new DateTime();
                    //errors.addError(ImportErrorMessage.ERROR_INVALID_FIELD_VALUE, new string[] { FIELD_TO + "=" + row[FIELD_TO].ToString(), EmpNo, rowCount.ToString() });
                }
                if (uploadLeaveApp.LeaveAppDateTo.Ticks.Equals(0))
                {
                    errors.addError(ImportErrorMessage.ERROR_INVALID_FIELD_VALUE, new string[] { FIELD_TO + "=" + row[FIELD_TO].ToString(), EmpNo, rowCount.ToString() });
                }

                if (uploadLeaveApp.LeaveAppDateFrom > uploadLeaveApp.LeaveAppDateFrom)
                {
                    errors.addError(ImportErrorMessage.ERROR_INVALID_FIELD_VALUE, new string[] { FIELD_TO + "=" + row[FIELD_TO].ToString(), EmpNo, rowCount.ToString() });
                }

                uploadLeaveApp.LeaveCodeID = Parse.GetLeaveCodeID(dbConn, row[FIELD_LEAVE_CODE].ToString(), false, UserID);

                if (uploadLeaveApp.LeaveCodeID == 0)
                {
                    errors.addError(ImportErrorMessage.ERROR_INVALID_FIELD_VALUE, new string[] { FIELD_LEAVE_CODE + "=" + row[FIELD_LEAVE_CODE].ToString(), EmpNo, rowCount.ToString() });
                }

                double leaveDays;
                if (double.TryParse(row[FIELD_DAY_TAKEN].ToString(), out leaveDays))
                {
                    uploadLeaveApp.LeaveAppDays = leaveDays;
                }
                else
                {
                    errors.addError(ImportErrorMessage.ERROR_INVALID_FIELD_VALUE, new string[] { FIELD_DAY_TAKEN + "=" + row[FIELD_DAY_TAKEN].ToString(), EmpNo, rowCount.ToString() });
                }
                if (rawDataTable.Columns.Contains(FIELD_HOURS_CLAIM))
                {
                    if (row[FIELD_HOURS_CLAIM] != DBNull.Value)
                    {
                        double hoursClaim;
                        if (double.TryParse(row[FIELD_HOURS_CLAIM].ToString(), out hoursClaim))
                        {
                            uploadLeaveApp.LeaveAppHours = hoursClaim;
                        }
                        else
                        {
                            if (!string.IsNullOrEmpty(row[FIELD_HOURS_CLAIM].ToString().Trim()))
                            {
                                errors.addError(ImportErrorMessage.ERROR_INVALID_FIELD_VALUE, new string[] { FIELD_HOURS_CLAIM + "=" + row[FIELD_HOURS_CLAIM].ToString(), EmpNo, rowCount.ToString() });
                            }
                        }
                    }
                    else
                    {
                        uploadLeaveApp.LeaveAppHours = 0;
                    }
                }
                string tempString;
                if (rawDataTable.Columns.Contains(FIELD_TYPE))
                {
                    tempString = row[FIELD_TYPE].ToString().Replace(" ", "");
                    if (tempString.Equals("Days", StringComparison.CurrentCultureIgnoreCase) ||
                        tempString.Equals("Day", StringComparison.CurrentCultureIgnoreCase) ||
                        tempString.Equals("D", StringComparison.CurrentCultureIgnoreCase))
                    {
                        uploadLeaveApp.LeaveAppUnit = "D";
                    }
                    else if (tempString.Equals("Hours", StringComparison.CurrentCultureIgnoreCase) ||
                             tempString.Equals("Hour", StringComparison.CurrentCultureIgnoreCase) ||
                             tempString.Equals("H", StringComparison.CurrentCultureIgnoreCase))
                    {
                        uploadLeaveApp.LeaveAppUnit = "H";
                    }
                    else if (tempString.Equals("AM", StringComparison.CurrentCultureIgnoreCase) ||
                             tempString.Equals("A", StringComparison.CurrentCultureIgnoreCase))
                    {
                        uploadLeaveApp.LeaveAppUnit = "A";
                    }
                    else if (tempString.Equals("PM", StringComparison.CurrentCultureIgnoreCase) ||
                             tempString.Equals("P", StringComparison.CurrentCultureIgnoreCase))
                    {
                        uploadLeaveApp.LeaveAppUnit = "P";
                    }
                    else if (tempString.Equals(string.Empty))
                    {
                        uploadLeaveApp.LeaveAppUnit = string.Empty;
                    }
                    else
                    {
                        errors.addError(ImportErrorMessage.ERROR_INVALID_FIELD_VALUE, new string[] { FIELD_TYPE + "=" + row[FIELD_TYPE].ToString(), EmpNo, rowCount.ToString() });
                    }
                }
                else if (rawDataTable.Columns.Contains(FIELD_UNIT))
                {
                    //  Obsolate, replaced by Type

                    tempString = row[FIELD_UNIT].ToString().Replace(" ", "");
                    if (tempString.Equals("Days", StringComparison.CurrentCultureIgnoreCase) ||
                        tempString.Equals("Day", StringComparison.CurrentCultureIgnoreCase) ||
                        tempString.Equals("D", StringComparison.CurrentCultureIgnoreCase))
                    {
                        uploadLeaveApp.LeaveAppUnit = "D";
                    }
                    else if (tempString.Equals("Hours", StringComparison.CurrentCultureIgnoreCase) ||
                             tempString.Equals("Hour", StringComparison.CurrentCultureIgnoreCase) ||
                             tempString.Equals("H", StringComparison.CurrentCultureIgnoreCase))
                    {
                        uploadLeaveApp.LeaveAppUnit = "H";
                    }
                    else if (tempString.Equals("AM", StringComparison.CurrentCultureIgnoreCase) ||
                             tempString.Equals("A", StringComparison.CurrentCultureIgnoreCase))
                    {
                        uploadLeaveApp.LeaveAppUnit = "A";
                    }
                    else if (tempString.Equals("PM", StringComparison.CurrentCultureIgnoreCase) ||
                             tempString.Equals("P", StringComparison.CurrentCultureIgnoreCase))
                    {
                        uploadLeaveApp.LeaveAppUnit = "P";
                    }
                    else if (tempString.Equals(string.Empty))
                    {
                        uploadLeaveApp.LeaveAppUnit = string.Empty;
                    }
                    else
                    {
                        errors.addError(ImportErrorMessage.ERROR_INVALID_FIELD_VALUE, new string[] { FIELD_UNIT + "=" + row[FIELD_UNIT].ToString(), EmpNo, rowCount.ToString() });
                    }
                }
                uploadLeaveApp.LeaveAppRemark = row[FIELD_REMARK].ToString();

                tempString = row[FIELD_NOPAYROLLPROCESS].ToString().Replace(" ", "");
                if (tempString.Equals("Yes", StringComparison.CurrentCultureIgnoreCase) ||
                    tempString.Equals("Y", StringComparison.CurrentCultureIgnoreCase))
                {
                    uploadLeaveApp.LeaveAppNoPayProcess = true;
                }
                else if (tempString.Equals("No", StringComparison.CurrentCultureIgnoreCase) ||
                         tempString.Equals("N", StringComparison.CurrentCultureIgnoreCase) ||
                         tempString.Equals(string.Empty))
                {
                    uploadLeaveApp.LeaveAppNoPayProcess = false;
                }
                else if (tempString.Equals(string.Empty))
                {
                    uploadLeaveApp.LeaveAppNoPayProcess = false;
                }
                else
                {
                    errors.addError(ImportErrorMessage.ERROR_INVALID_FIELD_VALUE, new string[] { FIELD_NOPAYROLLPROCESS + "=" + row[FIELD_NOPAYROLLPROCESS].ToString(), EmpNo, rowCount.ToString() });
                }

                //  Enforce No Payroll Process flag to true if leave code is skip payroll process
                ELeaveCode leaveCode = new ELeaveCode();
                leaveCode.LeaveCodeID = uploadLeaveApp.LeaveCodeID;
                if (ELeaveCode.db.select(dbConn, leaveCode))
                {
                    if (leaveCode.LeaveCodeIsSkipPayrollProcess)
                    {
                        uploadLeaveApp.LeaveAppNoPayProcess = true;
                    }
                }
                if (rawDataTable.Columns.Contains(FIELD_MEDICIAL_CERTIFICATE))
                {
                    tempString = row[FIELD_MEDICIAL_CERTIFICATE].ToString().Replace(" ", "");
                    if (tempString.Equals("Yes", StringComparison.CurrentCultureIgnoreCase) ||
                        tempString.Equals("Y", StringComparison.CurrentCultureIgnoreCase))
                    {
                        uploadLeaveApp.LeaveAppHasMedicalCertificate = true;
                    }
                    else if (tempString.Equals("No", StringComparison.CurrentCultureIgnoreCase) ||
                             tempString.Equals("N", StringComparison.CurrentCultureIgnoreCase) ||
                             tempString.Equals(string.Empty))
                    {
                        uploadLeaveApp.LeaveAppHasMedicalCertificate = false;
                    }
                    else if (tempString.Equals(string.Empty))
                    {
                        uploadLeaveApp.LeaveAppHasMedicalCertificate = false;
                    }
                    else
                    {
                        errors.addError(ImportErrorMessage.ERROR_INVALID_FIELD_VALUE, new string[] { FIELD_NOPAYROLLPROCESS + "=" + row[FIELD_NOPAYROLLPROCESS].ToString(), EmpNo, rowCount.ToString() });
                    }
                }

                uploadLeaveApp.SessionID       = m_SessionID;
                uploadLeaveApp.TransactionDate = UploadDateTime;

                if (errors.List.Count <= 0 && uploadLeaveApp.EmpID != 0)
                {
                    //if (rawDataTable.Columns.Contains(FIELD_INTERNAL_ID))
                    //{
                    //    try
                    //    {
                    //        if (!row.IsNull(FIELD_INTERNAL_ID))
                    //        {
                    //            int tmpID = FromHexDecWithCheckDigit((string)row[FIELD_INTERNAL_ID]);
                    //            ELeaveApplication tmpObj = new ELeaveApplication();
                    //            tmpObj.LeaveAppID = tmpID;
                    //            if (ELeaveApplication.db.select(dbConn, tmpObj))
                    //                uploadLeaveApp.LeaveAppID = tmpID;
                    //            else
                    //            {
                    //                errors.addError(ImportErrorMessage.ERROR_INVALID_FIELD_VALUE, new string[] { FIELD_INTERNAL_ID + "=" + row[FIELD_INTERNAL_ID].ToString(), EmpNo, rowCount.ToString() });
                    //                continue;
                    //            }
                    //        }
                    //    }
                    //    catch (Exception ex)
                    //    {
                    //        errors.addError(ImportErrorMessage.ERROR_INVALID_FIELD_VALUE, new string[] { FIELD_INTERNAL_ID + "=" + row[FIELD_INTERNAL_ID].ToString(), EmpNo, rowCount.ToString() });
                    //        continue;
                    //    }
                    //}
                    if (rawDataTable.Columns.Contains(FIELD_SYNC_ID))
                    {
                        if (!row.IsNull(FIELD_SYNC_ID))
                        {
                            string strSynID = row[FIELD_SYNC_ID].ToString();
                            uploadLeaveApp.SynID = strSynID;
                            if (!string.IsNullOrEmpty(strSynID))
                            {
                                DBFilter synIDFilter = new DBFilter();
                                synIDFilter.add(new Match("SynID", strSynID));
                                ArrayList objSameSynIDList = ELeaveApplication.db.select(dbConn, synIDFilter);
                                if (objSameSynIDList.Count > 0)
                                {
                                    uploadLeaveApp.LeaveAppID = ((ELeaveApplication)objSameSynIDList[0]).LeaveAppID;
                                }
                            }
                        }
                    }

                    if (uploadLeaveApp.LeaveAppID == 0)
                    {
                        AND lastObjAndTerms = new AND();
                        lastObjAndTerms.add(new Match("LeaveAppDateTo", ">=", uploadLeaveApp.LeaveAppDateFrom));
                        lastObjAndTerms.add(new Match("LeaveAppDateFrom", "<=", uploadLeaveApp.LeaveAppDateTo));
                        if (!uploadLeaveApp.LeaveAppUnit.Equals("D"))
                        {
                            lastObjAndTerms.add(new Match("LeaveAppUnit", "D"));
                        }


                        ELeaveApplication lastObj = (ELeaveApplication)AppUtils.GetLastObj(dbConn, uploadDB, "LeaveAppDateFrom", uploadLeaveApp.EmpID, lastObjAndTerms);
                        if (lastObj != null)
                        {
                            errors.addError(ImportErrorMessage.ERROR_DATE_FROM_OVERLAP, new string[] { uploadLeaveApp.LeaveAppDateFrom.ToString("yyyy-MM-dd"), rowCount.ToString() });
                            continue;
                        }


                        //lastLeaveApp = (ELeaveApplication)AppUtils.GetLastObj(dbConn, uploadDB, "LeaveAppDateFrom", uploadLeaveApp.EmpID, new Match("LeaveAppDateFrom", "<=", uploadLeaveApp.LeaveAppDateFrom));
                        //if (lastLeaveApp != null)
                        //{

                        //    //if (uploadLeaveApp.LeaveCodeID == lastLeaveApp.LeaveCodeID
                        //    //    && uploadLeaveApp.LeaveAppRemark == lastLeaveApp.LeaveAppRemark
                        //    //    )
                        //    //{
                        //    //    continue;
                        //    //}
                        //    //else
                        //    {
                        //        //// add postion terms with new ID
                        //        //if (lastLeaveApp.LeaveAppDateFrom.Equals(uploadLeaveApp.LeaveAppDateFrom) && lastLeaveApp.LeaveAppUnit.Equals(uploadLeaveApp.LeaveAppUnit) && uploadLeaveApp.LeaveAppUnit.Equals("D"))
                        //        //{
                        //        //    if (lastLeaveApp.EmpPayrollID > 0)
                        //        //    {
                        //        //        errors.addError(ImportErrorMessage.ERROR_LEAVE_DATE_PROCESSED, new string[] { uploadLeaveApp.LeaveAppDateFrom.ToString("yyyy-MM-dd"), rowCount.ToString() });
                        //        //        continue;
                        //        //    }

                        //        //    uploadLeaveApp.LeaveAppID = lastLeaveApp.LeaveAppID;
                        //        //}
                        //        //else
                        //        {


                        //            AND lastObjAndTerms = new AND();
                        //            lastObjAndTerms.add(new Match("LeaveAppDateTo", ">=", uploadLeaveApp.LeaveAppDateFrom));
                        //            lastObjAndTerms.add(new Match("LeaveAppDateFrom", "<=", uploadLeaveApp.LeaveAppDateTo));
                        //            if (!uploadLeaveApp.LeaveAppUnit.Equals("D"))
                        //                lastObjAndTerms.add(new Match("LeaveAppUnit", "D"));


                        //            ELeaveApplication lastObj = (ELeaveApplication)AppUtils.GetLastObj(dbConn, uploadDB, "LeaveAppDateFrom", uploadLeaveApp.EmpID, lastObjAndTerms);
                        //            if (lastObj != null)
                        //            {
                        //                errors.addError(ImportErrorMessage.ERROR_DATE_FROM_OVERLAP, new string[] { uploadLeaveApp.LeaveAppDateFrom.ToString("yyyy-MM-dd"), rowCount.ToString() });
                        //                continue;
                        //            }
                        //        }
                        //    }
                        //}
                    }
                }

                if (uploadLeaveApp.LeaveAppID <= 0)
                {
                    uploadLeaveApp.ImportActionStatus = ImportDBObject.ImportActionEnum.INSERT;
                }
                else
                {
                    uploadLeaveApp.ImportActionStatus = ImportDBObject.ImportActionEnum.UPDATE;
                }

                Hashtable values = new Hashtable();
                tempDB.populate(uploadLeaveApp, values);
                PageErrors pageErrors = new PageErrors(EUploadEmpPersonalInfo.db);
                tempDB.validate(pageErrors, values);
                if (pageErrors.errors.Count == 0)
                {
                    tempDB.insert(dbConn, uploadLeaveApp);
                }
                else
                {
                    pageErrors.addError(rawDataTable.TableName);
                    throw new HRImportException(pageErrors.getPrompt() + "(line " + rowCount.ToString() + ")");
                }
            }
            if (errors.List.Count > 0)
            {
                ClearTempTable();
                throw (new HRImportException(rawDataTable.TableName + "\r\n" + errors.Message()));
            }
            return(GetImportDataFromTempDatabase(null));
        }
    protected void Repeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        DataRowView       row = (DataRowView)e.Item.DataItem;
        ELeaveApplication obj = new ELeaveApplication();

        ELeaveApplication.db.toObject(row.Row, obj);

        Button cancelButton = (Button)e.Item.FindControl("Cancel");

        DBFilter requestLeaveAppCancelFilter = new DBFilter();

        requestLeaveAppCancelFilter.add(new Match("EmpID", CurID));
        requestLeaveAppCancelFilter.add(new Match("LeaveAppID", obj.LeaveAppID));

        DBFilter empRequestFilter = new DBFilter();

        empRequestFilter.add(new Match("EmpID", CurID));
        empRequestFilter.add(new Match("EmpRequestType", EEmpRequest.TYPE_EELEAVECANCEL));
        empRequestFilter.add(new IN("EmpRequestRecordID", "SELECT RequestLeaveAppCancelID FROM " + ERequestLeaveApplicationCancel.db.dbclass.tableName, requestLeaveAppCancelFilter));
        empRequestFilter.add(EEmpRequest.EndStatusDBTerms("EmpRequestStatus", true));

        if (obj.LeaveAppCancelID > 0 || EEmpRequest.db.count(dbConn, empRequestFilter) > 0)
        {
            cancelButton.Visible = false;
        }
        else
        {
            ELeaveCode leaveCode = new ELeaveCode();
            leaveCode.LeaveCodeID = obj.LeaveCodeID;
            if (ELeaveCode.db.select(dbConn, leaveCode))
            {
                if (leaveCode.LeaveCodeHideInESS)
                {
                    cancelButton.Visible = false;
                }
                else
                {
                    //  Temporary set to invisible to add more constraint before launch
                    cancelButton.Visible = isAllowLeaveCancel;
                    cancelButton.Attributes["LeaveAppID"] = obj.LeaveAppID.ToString();
                }
            }
            else
            {
                cancelButton.Visible = false;
            }
        }

        // Start 0000094, Ricky So, 2014-09-09
        Label RequestQty = (Label)e.Item.FindControl("LeaveAppDays");

        string m_unit = ((DataRowView)e.Item.DataItem)["LeaveAppUnit"].ToString();
        double m_appHours;
        double m_appDays;

        Double.TryParse(((DataRowView)e.Item.DataItem)["LeaveAppHours"].ToString(), out m_appHours);
        Double.TryParse(((DataRowView)e.Item.DataItem)["LeaveAppDays"].ToString(), out m_appDays);

        switch (m_unit)
        {
        case "H": RequestQty.Text = m_appHours.ToString("0.000");
            break;

        default: RequestQty.Text = m_appDays.ToString("0.000");
            break;
        }
        // End 0000094, Ricky So, 2014-09-09

        HROne.Common.WebUtility.WebControlsLocalization(Session, e.Item.Controls);
    }
    protected bool loadObject()
    {
        DBFilter filterStatus = new DBFilter();

        filterStatus.add(new Match("EmpRequestRecordID", CurRequestID));
        filterStatus.add(new Match("EmpRequestType", EEmpRequest.TYPE_EELEAVECANCEL));
        ArrayList empRequestList = EEmpRequest.db.select(dbConn, filterStatus);

        if (empRequestList.Count > 0)
        {
            EEmpRequest empRequest = (EEmpRequest)empRequestList[0];
            if (empRequest.EmpID == UserID)
            {
                string submitStatus = empRequest.EmpRequestStatus;
                if ((submitStatus.Equals(EEmpRequest.STATUS_SUBMITTED) || submitStatus.Equals(EEmpRequest.STATUS_ACCEPTED)) && !submitStatus.Equals(EEmpRequest.STATUS_APPROVED))
                {
                    btnCancel.Visible       = true;
                    RejectReasonRow.Visible = false;
                }
                else
                {
                    btnCancel.Visible = false;
                    if (!string.IsNullOrEmpty(empRequest.EmpRequestRejectReason))
                    {
                        RejectReasonRow.Visible = true;
                        lblRejectReason.Text    = empRequest.EmpRequestRejectReason;
                    }
                    else
                    {
                        RejectReasonRow.Visible = false;
                    }
                }
            }
            else
            {
                btnCancel.Visible       = false;
                RejectReasonRow.Visible = false;
            }
            obj = new ERequestLeaveApplicationCancel();
            obj.RequestLeaveAppCancelID = CurRequestID;
            if (!db.select(dbConn, obj))
            {
                return(false);
            }

            Hashtable leaveCancelValues = new Hashtable();
            db.populate(obj, leaveCancelValues);
            cancelBinding.toControl(leaveCancelValues);

            ELeaveApplication leaveApp = new ELeaveApplication();
            leaveApp.LeaveAppID = obj.LeaveAppID;
            if (!ELeaveApplication.db.select(dbConn, leaveApp))
            {
                return(false);
            }

            Hashtable leaveAppValues = new Hashtable();
            ELeaveApplication.db.populate(leaveApp, leaveAppValues);
            leaveAppBinding.toControl(leaveAppValues);
            //EEmpPersonalInfo EmpInfo = new EEmpPersonalInfo();
            //EmpInfo.EmpID = obj.EmpID;
            //if (EEmpPersonalInfo.db.select(dbConn, EmpInfo))
            //    EmpName.Text = EmpInfo.EmpNo + " - " + EmpInfo.EmpEngFullNameWithAlias;

            if (leaveApp.LeaveAppUnit.Equals("D"))
            {
                TimeRow.Visible = false;
                LeaveAppDateToPlaceHolder.Visible = true;
            }
            else
            {
                TimeRow.Visible = true;
                LeaveAppDateToPlaceHolder.Visible = false;
            }

            //string leaveAuthorizedMessage = CONFIRM_MESSAGE;
            ELeaveCode leaveCode = new ELeaveCode();
            leaveCode.LeaveCodeID = leaveApp.LeaveCodeID;
            if (ELeaveCode.db.select(dbConn, leaveCode))
            {
                //LeaveCodeIsShowMedicalCertOptionPanel.Visible = leaveCode.LeaveCodeIsShowMedicalCertOption;

                if (leaveCode.LeaveTypeID.Equals(ELeaveType.COMPENSATION_LEAVE_TYPE(dbConn).LeaveTypeID))
                {
                    HoursClaimPanel.Visible = true;
                }
                else
                {
                    HoursClaimPanel.Visible = false;
                }

                //if (leaveCode.LeaveTypeID.Equals(ELeaveType.ANNUAL_LEAVE_TYPE(dbConn).LeaveTypeID))
                //{
                //    EEmpPersonalInfo empInfo = new EEmpPersonalInfo();
                //    empInfo.EmpID = obj.EmpID;
                //    if (EEmpPersonalInfo.db.select(dbConn, empInfo))
                //    {
                //        if (AppUtils.ServerDateTime().Date <= empInfo.EmpProbaLastDate || obj.LeaveAppDateFrom <= empInfo.EmpProbaLastDate)
                //            leaveAuthorizedMessage = AL_AUTHORIZED_BEFORE_PROBATION_MESSAGE;
                //    }
                //}
            }
            else
            {
                HoursClaimPanel.Visible = false;
            }

            //Authorize.Attributes.Add("onclick", "return confirm(\"" + HROne.Common.WebUtility.GetLocalizedString(leaveAuthorizedMessage) + "\");");
            Reject.Attributes.Add("onclick", "return confirm(\"" + HROne.Common.WebUtility.GetLocalizedString(CONFIRM_MESSAGE) + "\");");


            return(true);
        }
        else
        {
            return(false);
        }
    }
    protected bool loadObject()
    {
        obj = new ELeaveApplication();
        bool isNew = WebFormWorkers.loadKeys(db, obj, DecryptedRequest);

        DBFilter filter = new DBFilter();

        filter.add(new Match("EmpID", CurEmpID));
        filter.add(WebUtils.AddRankFilter(Session, "EmpID", true));
        if (EEmpPersonalInfo.db.count(dbConn, filter) == 0)
        {
            if (CurEmpID <= 0)
            {
                return(false);
            }
            else
            {
                HROne.Common.WebUtility.RedirectURLwithEncryptedQueryString(Response, Session, "~/AccessDeny.aspx");
            }
        }

        if (!db.select(dbConn, obj))
        {
            if (CurID <= 0)
            {
                return(false);
            }
            else
            {
                HROne.Common.WebUtility.RedirectURLwithEncryptedQueryString(Response, Session, "~/AccessDeny.aspx");
            }
        }

        if (obj.EmpID != CurEmpID)
        {
            if (CurID <= 0)
            {
                return(false);
            }
            else
            {
                HROne.Common.WebUtility.RedirectURLwithEncryptedQueryString(Response, Session, "~/AccessDeny.aspx");
            }
        }

        Hashtable values = new Hashtable();

        db.populate(obj, values);

        //int empPayrollID = int.Parse((string)values["EmpPayrollID"]);
        if (obj.EmpPayrollID > 0)
        {
            EEmpPayroll empPayroll = new EEmpPayroll();
            empPayroll.EmpPayrollID = obj.EmpPayrollID;
            if (EEmpPayroll.db.select(dbConn, empPayroll))
            {
                values.Add("PayPeriodID", empPayroll.PayPeriodID.ToString());
            }
        }

        binding.toControl(values);
        if (obj.LeaveAppUnit.Equals("D"))
        {
            TimeRow.Visible = false;
            LeaveAppDateToPlaceHolder.Visible = true;
        }
        else
        {
            TimeRow.Visible = true;
            LeaveAppDateToPlaceHolder.Visible = false;
        }
        if (obj.EmpPaymentID != 0 || obj.EmpPayrollID != 0)
        {
            toolBar.EditButton_Visible    = false;
            toolBar.DeleteButton_Visible  = false;
            toolBar.CustomButton1_Visible = true;
            toolBar.CustomButton2_Visible = true;
        }
        else
        {
            toolBar.EditButton_Visible    = true;
            toolBar.DeleteButton_Visible  = true;
            toolBar.CustomButton1_Visible = false;
            toolBar.CustomButton2_Visible = false;
        }

        if (obj.LeaveAppCancelID > 0)
        {
            toolBar.EditButton_Visible    = false;
            toolBar.DeleteButton_Visible  = false;
            toolBar.CustomButton1_Visible = false;
            toolBar.CustomButton2_Visible = false;
        }

        ELeaveCode leaveCode = new ELeaveCode();

        leaveCode.LeaveCodeID = obj.LeaveCodeID;
        if (ELeaveCode.db.select(dbConn, leaveCode))
        {
            PayrollProcessPanel.Visible = !leaveCode.LeaveCodeIsSkipPayrollProcess;
            LeaveCodeIsShowMedicalCertOptionPanel.Visible = leaveCode.LeaveCodeIsShowMedicalCertOption;
            //if (!leaveCode.LeaveCodeIsSkipPayrollProcess)
            //{
            //    ELeaveApplication leaveApp = new ELeaveApplication();
            //    leaveApp.LeaveAppID = CurID;
            //    if (ELeaveApplication.db.select(dbConn, leaveApp))
            //    {
            //        ELeaveCode prevLeaveCode = new ELeaveCode();
            //        prevLeaveCode.LeaveCodeID = leaveApp.LeaveCodeID;
            //        if (ELeaveCode.db.select(dbConn, prevLeaveCode))
            //            if (prevLeaveCode.LeaveCodeIsSkipPayrollProcess)
            //                LeaveAppNoPayProcess.Checked = false;
            //    }
            //}

            if (leaveCode.LeaveTypeID.Equals(ELeaveType.COMPENSATION_LEAVE_TYPE(dbConn).LeaveTypeID))
            {
                HoursClaimPanel.Visible = true;
            }
            else
            {
                HoursClaimPanel.Visible = false;
            }
        }
        else
        {
            HoursClaimPanel.Visible = false;
        }
        CurEmpID = obj.EmpID;
        return(true);
    }
Example #17
0
    protected bool loadObject()
    {
        obj = new ELeaveApplication();
        bool isNew = WebFormWorkers.loadKeys(db, obj, DecryptedRequest);

        DBFilter filter = new DBFilter();

        filter.add(new Match("EmpID", CurEmpID));
        filter.add(WebUtils.AddRankFilter(Session, "EmpID", true));
        if (EEmpPersonalInfo.db.count(dbConn, filter) == 0)
        {
            if (CurEmpID <= 0)
            {
                return(false);
            }
            else
            {
                HROne.Common.WebUtility.RedirectURLwithEncryptedQueryString(Response, Session, "~/AccessDeny.aspx");
            }
        }

        if (!db.select(dbConn, obj))
        {
            if (CurID <= 0)
            {
                return(false);
            }
            else
            {
                HROne.Common.WebUtility.RedirectURLwithEncryptedQueryString(Response, Session, "~/AccessDeny.aspx");
            }
        }

        if (obj.EmpID != CurEmpID)
        {
            if (CurID <= 0)
            {
                return(false);
            }
            else
            {
                HROne.Common.WebUtility.RedirectURLwithEncryptedQueryString(Response, Session, "~/AccessDeny.aspx");
            }
        }

        Hashtable values = new Hashtable();

        db.populate(obj, values);
        binding.toControl(values);

        //  Check if the record is payroll process
        if (obj.EmpPaymentID != 0 || obj.EmpPayrollID != 0)
        {
            toolBar.DeleteButton_Visible = false;
            //toolBar.SaveButton_Visible = false;
//            toolBar.SaveButton_ClientClick = HROne.Translation.PromptMessage.LEAVEAPP_FORCE_EDIT_JAVASCRIPT;
            toolBar.SaveButton_ClientClick = HROne.Translation.PromptMessage.CreateConfirmDialogJavascript(HROne.Common.WebUtility.GetLocalizedStringByCode("LEAVEAPP_FORCE_EDIT_JAVASCRIPT", "The leave application is payroll processed.\r\nYou need to adjust the payroll record manually.\r\nAre you sure to save?"), toolBar.FindControl("SaveButton"));
        }
        if (obj.LeaveAppCancelID > 0)
        {
            toolBar.DeleteButton_Visible = false;
            toolBar.SaveButton_Visible   = false;
        }
        CurEmpID = obj.EmpID;
        return(true);
    }
Example #18
0
        protected void SubmitButton_Click(object sender, EventArgs e)
        {
            ERosterTable rosterTable = new ERosterTable();

            Binding ebinding = new Binding(dbConn, ERosterTable.db);

            ebinding.add(RosterTableID);
            ebinding.add(RosterTableDate);
            ebinding.add(EmpID);
            ebinding.add(new DropDownVLBinder(ERosterTable.db, RosterCodeID, ERosterCode.VLRosterCode));
            ebinding.add(RosterTableOverrideInTime);
            ebinding.add(RosterTableOverrideOutTime);

            Hashtable values = new Hashtable();

            ebinding.toValues(values);
            ERosterTable.db.parse(values, rosterTable);
            ERosterCode rosterCode = new ERosterCode();

            rosterCode.RosterCodeID = rosterTable.RosterCodeID;
            if (ERosterCode.db.select(dbConn, rosterCode))
            {
                if (rosterCode.RosterCodeInTime.TimeOfDay.Equals(rosterTable.RosterTableOverrideInTime.TimeOfDay))
                {
                    rosterTable.RosterTableOverrideInTime = new DateTime(0);
                }
                if (rosterCode.RosterCodeOutTime.TimeOfDay.Equals(rosterTable.RosterTableOverrideOutTime.TimeOfDay))
                {
                    rosterTable.RosterTableOverrideOutTime = new DateTime(0);
                }

                if (rosterCode.RosterCodeType.Equals(ERosterCode.ROSTERTYPE_CODE_LEAVE) && rosterCode.LeaveCodeID > 0)
                {
                    ELeaveCode leaveCode = new ELeaveCode();
                    leaveCode.LeaveCodeID = rosterCode.LeaveCodeID;
                    if (ELeaveCode.db.select(dbConn, leaveCode))
                    {
                        ELeaveApplication leaveApp = new ELeaveApplication();
                        leaveApp.LeaveAppDateFrom = rosterTable.RosterTableDate;
                        leaveApp.LeaveAppDateTo   = rosterTable.RosterTableDate;
                        leaveApp.LeaveAppDays     = 1;
                        leaveApp.LeaveAppUnit     = "D";
                        leaveApp.LeaveCodeID      = leaveCode.LeaveCodeID;
                        leaveApp.EmpID            = rosterTable.EmpID;

                        ELeaveApplication.db.insert(dbConn, leaveApp);

                        rosterTable.LeaveAppID = leaveApp.LeaveAppID;
                        //HROne.LeaveCalc.LeaveBalanceCalc leaaveBalCal = new HROne.LeaveCalc.LeaveBalanceCalc(dbConn, rosterTable.EmpID);
                        //leaaveBalCal.RecalculateAfter(rosterTable.RosterTableDate);
                    }
                    else
                    {
                        rosterTable.LeaveAppID = 0;
                    }
                }
            }
            ERosterTable oldRosterTable = new ERosterTable();

            oldRosterTable.RosterTableID = rosterTable.RosterTableID;
            if (ERosterTable.db.select(dbConn, oldRosterTable))
            {
                if (oldRosterTable.LeaveAppID > 0)
                {
                    ELeaveApplication leaveApp = new ELeaveApplication();
                    leaveApp.LeaveAppID = oldRosterTable.LeaveAppID;
                    if (ELeaveApplication.db.select(dbConn, leaveApp))
                    {
                        if (leaveApp.EmpPayrollID <= 0)
                        {
                            ELeaveApplication.db.delete(dbConn, leaveApp);
                            //HROne.LeaveCalc.LeaveBalanceCalc leaaveBalCal = new HROne.LeaveCalc.LeaveBalanceCalc(dbConn, oldRosterTable.EmpID);
                            //leaaveBalCal.RecalculateAfter(oldRosterTable.RosterTableDate);
                        }
                    }
                }
            }

            ERosterTable.db.update(dbConn, rosterTable);

            //// Create resource based on the selected user
            ////Resource user = new Resource("User", int.Parse(UserDropDown.SelectedValue), UserDropDown.SelectedItem.Text);
            //DateTime start = RadScheduler1.DisplayToUtc(StartTime.SelectedDate.Value);
            //DateTime end = RadScheduler1.DisplayToUtc(EndTime.SelectedDate.Value);

            //if (EditedAppointmentID == null)
            //{
            //    // Insert
            //    Appointment appointment = new Appointment(null, start, end, DescriptionText.Text);
            //    //appointment.Resources.Add(user);

            //    RadScheduler1.InsertAppointment(appointment);
            //}
            //else
            //{
            //    Appointment appointment = RadScheduler1.Appointments.FindByID(EditedAppointmentID);
            //    Appointment appointmentToUpdate = RadScheduler1.PrepareToEdit(appointment, RadScheduler1.EditingRecurringSeries);

            //    appointmentToUpdate.Subject = DescriptionText.Text;
            //    appointmentToUpdate.Start = start;
            //    appointmentToUpdate.End = end;

            //    // Remove the existing user resource, if any
            //    Resource existingUser = appointmentToUpdate.Resources.GetResourceByType("User");
            //    if (existingUser != null)
            //    {
            //        appointmentToUpdate.Resources.Remove(existingUser);
            //    }
            //    //appointmentToUpdate.Resources.Add(user);

            //    RadScheduler1.UpdateAppointment(appointmentToUpdate);
            //}
        }
Example #19
0
    protected void Save_Click(object sender, EventArgs e)
    {
        ELeaveApplication c = new ELeaveApplication();

        if (!LeaveAppUnit.SelectedValue.Equals("D"))
        {
            LeaveAppDateTo.Value = LeaveAppDateFrom.Value;
        }
        Hashtable values = new Hashtable();

        binding.toValues(values);

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

        errors.clear();


        db.validate(errors, values);

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


        db.parse(values, c);

        if (!c.LeaveAppUnit.Equals("D"))
        {
            //c.LeaveAppDateTo = c.LeaveAppDateFrom;
            if (c.LeaveAppTimeTo < c.LeaveAppTimeFrom)
            {
                errors.addError(HROne.Translation.PageErrorMessage.ERROR_INVALID_HOUR);
            }
        }
        else
        {
            EEmpPersonalInfo empInfo = new EEmpPersonalInfo();
            empInfo.EmpID = c.EmpID;
            if (EEmpPersonalInfo.db.select(dbConn, empInfo))
            {
                if (c.LeaveAppDateTo < c.LeaveAppDateFrom)
                {
                    errors.addError(HROne.Translation.PageErrorMessage.ERROR_DATE_TO_TOO_EARLY);
                }
                else
                {
                    if (c.LeaveAppDateFrom < empInfo.EmpDateOfJoin)
                    {
                        errors.addError(HROne.Translation.PageErrorMessage.ERROR_DATE_TOO_EARLY);
                    }
                    EEmpTermination empTerm = EEmpTermination.GetObjectByEmpID(dbConn, c.EmpID);
                    if (empTerm != null)
                    {
                        if (c.LeaveAppDateTo > empTerm.EmpTermLastDate)
                        {
                            errors.addError(HROne.Translation.PageErrorMessage.ERROR_DATE_TOO_LATE);
                        }
                    }
                    TimeSpan ts = c.LeaveAppDateTo.Subtract(c.LeaveAppDateFrom);
                    if (c.LeaveAppDays > ts.Days + 1)
                    {
                        errors.addError(HROne.Translation.PageErrorMessage.ERROR_DAYS_TOO_LARGE);
                    }
                }
            }
        }

        if (c.LeaveAppDateFrom.Month != c.LeaveAppDateTo.Month || c.LeaveAppDateFrom.Year != c.LeaveAppDateTo.Year)
        {
            errors.addError(HROne.Translation.PageErrorMessage.ERROR_LEAVE_APP_NOT_SAME_MTH);
        }

        if (HoursClaimPanel.Visible)
        {
            if (c.LeaveAppHours <= 0)
            {
                errors.addError(string.Format(HROne.Translation.PageErrorMessage.ERROR_FIELD_REQUIRED, new string[] { lblLeaveAppHours.Text }));
            }
        }
        //DBFilter overlapCheckingFilter = new DBFilter();
        //overlapCheckingFilter.add(new Match("EmpID", c.EmpID));
        //overlapCheckingFilter.add(new Match("LeaveAppID", "<>", c.LeaveAppID));
        //overlapCheckingFilter.add(new Match("LeaveAppDateFrom", "<=", c.LeaveAppDateTo));
        //overlapCheckingFilter.add(new Match("LeaveAppDateTo", ">=", c.LeaveAppDateFrom));
        //if (c.LeaveAppUnit.Equals("H"))
        //    overlapCheckingFilter.add(new Match("LeaveAppUnit", "D"));

        //if (overlapDailyLeaveAppList.Count > 0)
        //{
        //    errors.addError(HROne.Translation.PageErrorMessage.ERROR_LEAVE_APP_OVERLAP);
        //    foreach (ELeaveApplication overlapDailyLeaveApp in overlapDailyLeaveAppList)
        //    {
        //        ELeaveCode leaveCode = new ELeaveCode();
        //        leaveCode.LeaveCodeID = overlapDailyLeaveApp.LeaveCodeID;
        //        if (ELeaveCode.db.select(dbConn, leaveCode))
        //        {
        //            errors.addError("- " + overlapDailyLeaveApp.LeaveAppDateFrom.ToString("yyyy-MM-dd") + (overlapDailyLeaveApp.LeaveAppDateFrom.Equals(overlapDailyLeaveApp.LeaveAppDateTo) ? "" : " To " + overlapDailyLeaveApp.LeaveAppDateTo.ToString("yyyy-MM-dd")) + " " + leaveCode.LeaveCodeDesc);
        //        }
        //    }
        //}
        //if (c.LeaveAppUnit.Equals("H"))
        //{
        //    DateTime newLeaveAppTimeFrom = c.LeaveAppDateFrom.Date.Add(new TimeSpan(c.LeaveAppTimeFrom.Hour, c.LeaveAppTimeFrom.Minute, c.LeaveAppTimeFrom.Second));
        //    DateTime newLeaveAppTimeTo = c.LeaveAppDateTo.Date.Add(new TimeSpan(c.LeaveAppTimeTo.Hour, c.LeaveAppTimeTo.Minute, c.LeaveAppTimeTo.Second));
        //    while (newLeaveAppTimeFrom > newLeaveAppTimeTo)
        //        newLeaveAppTimeTo.AddDays(1);

        //    overlapCheckingFilter = new DBFilter();
        //    overlapCheckingFilter.add(new Match("EmpID", c.EmpID));
        //    overlapCheckingFilter.add(new Match("LeaveAppID", "<>", c.LeaveAppID));
        //    overlapCheckingFilter.add(new Match("LeaveAppDateFrom", "<=", c.LeaveAppDateTo));
        //    overlapCheckingFilter.add(new Match("LeaveAppDateTo", ">=", c.LeaveAppDateFrom));
        //    overlapCheckingFilter.add(new Match("LeaveAppUnit", "H"));
        //    ArrayList leaveAppList = ELeaveApplication.db.select(dbConn, overlapCheckingFilter);
        //    foreach (ELeaveApplication oldLeaveApp in leaveAppList)
        //    {
        //        DateTime oldLeaveAppTimeFrom = oldLeaveApp.LeaveAppDateFrom.Date.Add(new TimeSpan(oldLeaveApp.LeaveAppTimeFrom.Hour, oldLeaveApp.LeaveAppTimeFrom.Minute, oldLeaveApp.LeaveAppTimeFrom.Second));
        //        DateTime oldLeaveAppTimeTo = oldLeaveApp.LeaveAppDateTo.Date.Add(new TimeSpan(oldLeaveApp.LeaveAppTimeTo.Hour, oldLeaveApp.LeaveAppTimeTo.Minute, oldLeaveApp.LeaveAppTimeTo.Second));
        //        while (oldLeaveAppTimeFrom > oldLeaveAppTimeTo)
        //            oldLeaveAppTimeTo.AddDays(1);

        //        if (!newLeaveAppTimeFrom.Equals(newLeaveAppTimeTo) && !oldLeaveAppTimeFrom.Equals(oldLeaveAppTimeTo))
        //            //  Only check if the following case exists
        //            // Time A From------- Time B From ---------- Time B To ------------Time A To
        //            if (newLeaveAppTimeFrom <= oldLeaveAppTimeFrom && oldLeaveAppTimeTo <= newLeaveAppTimeTo || oldLeaveAppTimeFrom <= newLeaveAppTimeFrom && newLeaveAppTimeTo <= oldLeaveAppTimeTo)
        //                errors.addError(HROne.Translation.PageErrorMessage.ERROR_LEAVE_APP_TIME_OVERLAP);
        //    }
        //}
        ArrayList overlapLeaveAppList = new ArrayList();

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

            foreach (ELeaveApplication overlapLeaveApp in overlapLeaveAppList)
            {
                if (overlapLeaveApp.LeaveAppUnit.Equals("D") || c.LeaveAppUnit.Equals("D"))
                {
                    if (string.IsNullOrEmpty(strDailyOverlapMessage))
                    {
                        strDailyOverlapMessage = HROne.Translation.PageErrorMessage.ERROR_LEAVE_APP_OVERLAP;
                    }
                    ELeaveCode errorLeaveCode = new ELeaveCode();
                    errorLeaveCode.LeaveCodeID = overlapLeaveApp.LeaveCodeID;
                    if (ELeaveCode.db.select(dbConn, errorLeaveCode))
                    {
                        // Start 0000201, Ricky So, 2015-06-02
                        //strDailyOverlapMessage += "\n- " + overlapLeaveApp.LeaveAppDateFrom.ToString("yyyy-MM-dd") +
                        //                                   (overlapLeaveApp.LeaveAppDateFrom.Equals(overlapLeaveApp.LeaveAppDateTo) ? "" : " To " +
                        //                                   overlapLeaveApp.LeaveAppDateTo.ToString("yyyy-MM-dd")) + " " +
                        //                                   errorLeaveCode.LeaveCodeDesc;
                        strDailyOverlapMessage += "\n- " + overlapLeaveApp.LeaveAppDateFrom.ToString("yyyy-MM-dd");

                        if (overlapLeaveApp.LeaveAppUnit == "A")
                        {
                            strDailyOverlapMessage += "AM";
                        }
                        else if (overlapLeaveApp.LeaveAppUnit == "P")
                        {
                            strDailyOverlapMessage += "PM";
                        }
                        else if (overlapLeaveApp.LeaveAppUnit == "D" && !string.IsNullOrEmpty(overlapLeaveApp.LeaveAppDateFromAM))
                        {
                            strDailyOverlapMessage += overlapLeaveApp.LeaveAppDateFromAM;
                        }
                        else

                        if (overlapLeaveApp.LeaveAppDateFrom.Equals(overlapLeaveApp.LeaveAppDateTo))
                        {
                            strDailyOverlapMessage += " To " + overlapLeaveApp.LeaveAppDateTo.ToString("yyyy-MM-dd");
                        }

                        if (overlapLeaveApp.LeaveAppUnit == "D" && !string.IsNullOrEmpty(overlapLeaveApp.LeaveAppDateToAM))
                        {
                            strDailyOverlapMessage += overlapLeaveApp.LeaveAppDateToAM;
                        }
                        else
                        {
                            strDailyOverlapMessage += "   " + errorLeaveCode.LeaveCodeDesc;
                        }
                        // End 0000201, Ricky So, 2015-06-02
                    }
                }
                else
                {
                    if (string.IsNullOrEmpty(strHourlyOverlapMessage))
                    {
                        strHourlyOverlapMessage = HROne.Translation.PageErrorMessage.ERROR_LEAVE_APP_TIME_OVERLAP;
                    }
                }
            }

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

        ELeaveCode leaveCode = new ELeaveCode();

        leaveCode.LeaveCodeID = c.LeaveCodeID;
        if (ELeaveCode.db.select(dbConn, leaveCode))
        {
            if (leaveCode.LeaveCodeIsSkipPayrollProcess)
            {
                c.LeaveAppNoPayProcess = true;
            }
        }

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

        WebUtils.StartFunction(Session, FUNCTION_CODE, c.EmpID);
        //LeaveBalanceCalc leaaveBalCal = new LeaveBalanceCalc(dbConn, c.EmpID);

        if (CurID < 0)
        {
//            Utils.MarkCreate(Session, c);

            db.insert(dbConn, c);
            CurID = c.LeaveAppID;
            //leaaveBalCal.RecalculateAfter(c.LeaveAppDateFrom, leaveCode.LeaveTypeID);
//            url = Utils.BuildURL(-1, CurID);
        }
        else
        {
//            Utils.Mark(Session, c);
            //ELeaveApplication leaveBalApp = new ELeaveApplication();
            //leaveBalApp.LeaveAppID = CurID;
            //db.select(dbConn, leaveBalApp);
            db.update(dbConn, c);
            //leaaveBalCal.RecalculateAfter(leaveBalApp.LeaveAppDateFrom < c.LeaveAppDateFrom ? leaveBalApp.LeaveAppDateFrom : c.LeaveAppDateFrom);
        }
        WebUtils.EndFunction(dbConn);


        HROne.Common.WebUtility.RedirectURLwithEncryptedQueryString(Response, Session, "Emp_LeaveApplication_View.aspx?EmpID=" + c.EmpID + "&LeaveAppID=" + CurID);
    }
    protected string generateToolTipMessage(EEmpRequest empRequest)
    {
        string message = "Employee No:\t%EMP_NO%\r\n" +
                         "Employee:\t%EMP_NAME%\r\n" +
                         "Leave Date:\t%LEAVEAPP_PERIOD%\r\n" +
                         "Leave Type:\t%LEAVE_CODE%\r\n" +
                         "Taken     :\t%LEAVEAPP_DAYS% %LEAVEAPP_UNIT%\r\n" +
                         "Hours Claims:\t%LEAVEAPP_HOURSCLAIM%\r\n" +
                         "Reason:\t%LEAVEAPPCANCEL_REMARK%\r\n";

        ESSAuthorizationProcess process = new ESSAuthorizationProcess(dbConn);

        EEmpPersonalInfo ApplicantEmpInfo = process.GetEmpInfo(empRequest.EmpID);

        Hashtable mailContentParameterTable = new Hashtable();

        mailContentParameterTable = process.GenerateEmpInfoHashTable(ApplicantEmpInfo, mailContentParameterTable);

        if (empRequest.EmpRequestType == EEmpRequest.TYPE_EELEAVEAPP)
        {
            DBFilter RequestEmpFilter = new DBFilter();
            RequestEmpFilter.add(new Match("RequestLeaveAppID", empRequest.EmpRequestRecordID));
            ArrayList empRequestList = ERequestLeaveApplication.db.select(dbConn, RequestEmpFilter);
            if (empRequestList.Count > 0)
            {
                ERequestLeaveApplication empLeaveRequest = (ERequestLeaveApplication)empRequestList[0];

                mailContentParameterTable = process.GenerateRequestLeaveApplicationHashTable(empLeaveRequest, mailContentParameterTable);
            }
        }
        else if (empRequest.EmpRequestType == EEmpRequest.TYPE_EELEAVECANCEL)
        {
            DBFilter RequestEmpFilter = new DBFilter();
            RequestEmpFilter.add(new Match("RequestLeaveAppCancelID", empRequest.EmpRequestRecordID));
            ArrayList empRequestList = ERequestLeaveApplicationCancel.db.select(dbConn, RequestEmpFilter);
            if (empRequestList.Count > 0)
            {
                ERequestLeaveApplicationCancel requestLeaveAppCancel = (ERequestLeaveApplicationCancel)empRequestList[0];
                mailContentParameterTable.Add("%LEAVEAPPCANCEL_REMARK%", requestLeaveAppCancel.RequestLeaveAppCancelReason);
                ELeaveApplication leaveApp = new ELeaveApplication();
                leaveApp.LeaveAppID = requestLeaveAppCancel.LeaveAppID;
                if (ELeaveApplication.db.select(dbConn, leaveApp))
                {
                    ERequestLeaveApplication dummyRequestLeave = ERequestLeaveApplication.CreateDummyRequestLeaveAppliction(leaveApp);
                    mailContentParameterTable = process.GenerateRequestLeaveApplicationHashTable(dummyRequestLeave, mailContentParameterTable);
                }
            }
        }
        string MessageBodyTemplate = message;

        foreach (string key in mailContentParameterTable.Keys)
        {
            MessageBodyTemplate = MessageBodyTemplate.Replace(key, mailContentParameterTable[key].ToString());
        }
        string[] messageBodyLineArray = MessageBodyTemplate.Split(new string[] { "\r\n", "\r", "\n" }, StringSplitOptions.None);
        string   newMessageBody       = string.Empty;

        foreach (string messageLine in messageBodyLineArray)
        {
            if (string.IsNullOrEmpty(messageLine) || messageLine.IndexOf("%") == messageLine.LastIndexOf("%"))
            {
                if (string.IsNullOrEmpty(newMessageBody))
                {
                    newMessageBody = messageLine;
                }
                else
                {
                    newMessageBody += "\r\n" + messageLine;
                }
            }
        }
        return(newMessageBody);
    }
    // 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");
    }