Exemplo n.º 1
0
        private void approveBarButtonItem_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            var empPtoInfo = (EmployeePtoInfo)leaveRequestsBindingSource.Current;

            if (empPtoInfo != null)
            {
                var result = ViewHelper.ShowConfirmDialog("Are you sure to approve this leave request.");
                if (result == DialogResult.Yes)
                {
                    //do the calculation and affect the transaction table.
                    try
                    {
                        LeaveCalculationHelper.ApproveLeaveRequest(empPtoInfo.EmployeeId, empPtoInfo.NumDays, Convert.ToDateTime(empPtoInfo.From));
                        var pto = _proxy.Context.EmployeePtoes.FirstOrDefault(p => p.PtoId == empPtoInfo.PtoId);
                        pto.Status = EmployeePto.StatusApproved;
                        _proxy.Save();
                        RefreshList();
                    }
                    catch (Exception exception)
                    {
                        ViewHelper.ShowErrorMessage("Error occured while calculating the leave.", exception);
                    }
                }
            }
            else
            {
                ViewHelper.ShowErrorMessage("You must first select a leave request to approve.");
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Calculate current leave values for every employees.
        /// </summary>
        public static void CalculateLeaveForAll()
        {
            var proxy   = new LeaveProxy();
            var empList = proxy.Context.Employees.ToList();

            foreach (var em in empList)
            {
                int eid      = em.EmployeeId;
                var employee = proxy.Context.Employees.FirstOrDefault(ep => ep.EmployeeId == eid);
                //if employee isn't active don't calculate the leave.
                if (employee.StatusId != Employee.StatusActive)
                {
                    continue;
                }
                //sy - service year. sy holds only the year part ignoring the month part.
                int sy = DateTime.Today.Subtract(Convert.ToDateTime(employee.HireDate)).Days / 365;
                //fy - the last service year just befor the current year.
                DateTime fy = new DateTime();
                fy = sy > 0 ? Convert.ToDateTime(employee.HireDate).AddYears(sy - 1) : Convert.ToDateTime(employee.HireDate);
                //fyv - the first year remaining leave value
                decimal fyv = 0;
                if (fy == Convert.ToDateTime(employee.HireDate))
                {
                    fyv = 0;
                }
                else
                {
                    fyv = GetRemaingLeaveAmount(fy, eid);
                }

                var     fullYear = Convert.ToDateTime(employee.HireDate).AddYears(sy);
                decimal rate     = Convert.ToDecimal(GetTotalAnnualLeave(DateTime.Today, eid)) / 12;
                decimal md       = Math.Round(Convert.ToDecimal(DateTime.Today.Subtract(fullYear).Days / (362.25 / 12)));
                //tyv - total leave value for the current year.
                decimal tyv = Math.Round(md * rate);

                var obj = proxy.Context.EmployeePtoStatus.FirstOrDefault(es => es.EmployeeId == eid);
                if (obj != null)
                {
                    obj.CurrentCount = tyv;
                    obj.PrevCount    = fyv;
                }
                else
                {
                    obj = new EmployeePtoStatus()
                    {
                        EmployeeId = eid, CurrentCount = tyv, PrevCount = fyv
                    };
                    proxy.Context.EmployeePtoStatus.AddObject(obj);
                }
                var asy = DateTime.Today.Subtract(Convert.ToDateTime(employee.HireDate)).Days / 365;
                employee.CurrentLeaveDays = fyv + tyv;
                employee.YearCount        = asy;
            }
            proxy.Save();
        }
Exemplo n.º 3
0
 public void SaveChanges()
 {
     try
     {
         var obj = (EmployeePto)requestBindingSource.Current;
         obj.Status = EmployeePto.StatusPending;
         _proxy.Context.EmployeePtoes.AddObject(obj);
         _proxy.Save();
         this.Close();
     }
     catch (Exception exception)
     {
         ViewHelper.ShowErrorMessage("Error occured while saving the given leave request.", exception);
     }
 }
Exemplo n.º 4
0
        /// <summary>
        /// Calculate the total number of leave days as of the requested date.
        /// </summary>
        /// <param name="eid"></param>
        /// <param name="numDays"></param>
        /// <param name="reqDate"></param>
        public static void ApproveLeaveRequest(int eid, decimal numDays, DateTime reqDate)
        {
            var proxy    = new LeaveProxy();
            var employee = proxy.Context.Employees.FirstOrDefault(ep => ep.EmployeeId == eid);
            //ty - this year.
            var ty = reqDate.Year;
            //sy - service year. sy holds only the year part ignoring the month part.
            int sy = reqDate.Subtract(Convert.ToDateTime(employee.HireDate)).Days / 365;
            //fy - the last service year just befor the request year.
            DateTime fy = new DateTime();

            fy = sy > 0 ? Convert.ToDateTime(employee.HireDate).AddYears(sy - 1) : Convert.ToDateTime(employee.HireDate);
            //fyv - the first year remaining leave value
            decimal fyv = 0;

            if (fy == Convert.ToDateTime(employee.HireDate))
            {
                fyv = 0;
            }
            else
            {
                fyv = GetRemaingLeaveAmount(fy, eid);
            }

            var     fullYear = Convert.ToDateTime(employee.HireDate).AddYears(sy);
            decimal rate     = Convert.ToDecimal(GetTotalAnnualLeave(reqDate, eid)) / 12;
            decimal md       = Math.Round(Convert.ToDecimal(reqDate.Subtract(fullYear).Days / (362.25 / 12)));
            var     v        = Math.Round(md * rate) - GetAmountTaken(DateTime.Today, eid);
            decimal tyv      = 0;

            if (v >= 0)
            {
                tyv = v;
            }
            var x = numDays;

            if (fyv > 0 && x > 0)
            {
                if (fyv >= x)
                {
                    var obj = new EmployeePtoTransaction()
                    {
                        ApprovedBy   = "####",
                        ApprovedDate = DateTime.Today,
                        EmployeeId   = eid,
                        Year         = fy.Year,
                        NoDays       = x
                    };
                    var obj2 = proxy.Context.EmployeePtoStatus.FirstOrDefault(ep => ep.EmployeeId == eid);
                    if (obj2 != null)
                    {
                        obj2.PrevCount    = fyv - x;
                        obj2.CurrentCount = tyv;
                    }
                    else
                    {
                        obj2 = new EmployeePtoStatus()
                        {
                            EmployeeId = eid, CurrentCount = tyv, PrevCount = fyv - x
                        };
                        proxy.Context.EmployeePtoStatus.AddObject(obj2);
                    }
                    proxy.Context.EmployeePtoTransactions.AddObject(obj);
                    employee.CurrentLeaveDays = (fyv - x) + tyv;
                    proxy.Save();
                    return;
                }
                else
                {
                    x = x - fyv;
                    var obj = new EmployeePtoTransaction()
                    {
                        ApprovedBy   = "####",
                        ApprovedDate = DateTime.Today,
                        EmployeeId   = eid,
                        Year         = fy.Year,
                        NoDays       = fyv
                    };
                    proxy.Context.EmployeePtoTransactions.AddObject(obj);
                }
            }
            if (tyv > 0 && x > 0)
            {
                if (x >= tyv) // case of Overridden
                {
                    var obj = new EmployeePtoTransaction()
                    {
                        ApprovedBy   = "#####",
                        ApprovedDate = DateTime.Today,
                        EmployeeId   = eid,
                        Year         = ty,
                        NoDays       = tyv
                    };
                    var obj2 = proxy.Context.EmployeePtoStatus.FirstOrDefault(ep => ep.EmployeeId == eid);
                    if (obj2 != null)
                    {
                        obj2.PrevCount    = 0;
                        obj2.CurrentCount = 0;
                    }
                    else
                    {
                        obj2 = new EmployeePtoStatus()
                        {
                            EmployeeId = eid, PrevCount = 0, CurrentCount = 0
                        };
                        proxy.Context.EmployeePtoStatus.AddObject(obj2);
                    }
                    proxy.Context.EmployeePtoTransactions.AddObject(obj);
                    employee.CurrentLeaveDays = 0;
                    proxy.Save();
                    return;
                }
                else
                {
                    var obj = new EmployeePtoTransaction()
                    {
                        ApprovedBy   = "#####",
                        ApprovedDate = DateTime.Today,
                        EmployeeId   = eid,
                        Year         = ty,
                        NoDays       = x
                    };
                    var obj2 = proxy.Context.EmployeePtoStatus.FirstOrDefault(ep => ep.EmployeeId == eid);
                    if (obj2 != null)
                    {
                        obj2.PrevCount    = 0;
                        obj2.CurrentCount = tyv - x;
                    }
                    else
                    {
                        obj2 = new EmployeePtoStatus()
                        {
                            EmployeeId = eid, PrevCount = 0, CurrentCount = tyv - x
                        };
                        proxy.Context.EmployeePtoStatus.AddObject(obj2);
                    }
                    proxy.Context.EmployeePtoTransactions.AddObject(obj);
                    employee.CurrentLeaveDays = tyv - x;
                    proxy.Save();
                    return;
                }
            }
        }
Exemplo n.º 5
0
        /// <summary>
        /// Add the intial leave amount all employees.
        /// </summary>
        /// <param name="employees"></param>
        public static void AddInitialLeave(List <EmployeeInfo> employees)
        {
            var proxy = new LeaveProxy();

            foreach (var e in employees)
            {
                var      hd   = Convert.ToDateTime(e.HireDate);
                var      eid  = e.EmployeeId;
                int      sy   = DateTime.Today.Subtract(hd).Days / 365;
                var      emp  = proxy.Context.Employees.FirstOrDefault(ep => ep.EmployeeId == eid);
                decimal  fyv  = 0;
                decimal  tv   = 0;
                DateTime fy   = sy > 0 ? Convert.ToDateTime(hd).AddYears(sy - 1) : Convert.ToDateTime(hd);
                decimal  fyav = GetTotalAnnualLeave(fy, eid);
                // if the use enter a null value for the previous amount we will assum the employee hasn't taken any leave in previous year.
                // if the fy ==  hd  the employee hasn't have 1 year service year, so he willn't have transaction in the previous year.
                if (e.PrevValue != null && fy != hd)
                {
                    fyv = fyav - Convert.ToDecimal(e.PrevValue);
                    var obj = new EmployeePtoTransaction()
                    {
                        Year         = fy.Year,
                        EmployeeId   = eid,
                        NoDays       = fyv,
                        ApprovedBy   = "#####",
                        ApprovedDate = DateTime.Today
                    };
                    proxy.Context.EmployeePtoTransactions.AddObject(obj);
                }
                if (e.CurrentValue != null)
                {
                    var     fullYear = hd.AddYears(sy);
                    decimal rate     = Convert.ToDecimal(GetTotalAnnualLeave(DateTime.Today, eid)) / 12;
                    decimal md       = Math.Round(Convert.ToDecimal(DateTime.Today.Subtract(fullYear).Days / (362.25 / 12)));
                    //tyv - total leave value for the this year.
                    decimal tyv = Math.Round(md * rate);
                    tv = tyv - Convert.ToDecimal(e.CurrentValue);
                    if (tv > 0)
                    {
                        var obj = new EmployeePtoTransaction()
                        {
                            Year         = DateTime.Today.Year,
                            EmployeeId   = eid,
                            NoDays       = tv,
                            ApprovedBy   = "#####",
                            ApprovedDate = DateTime.Today
                        };
                        proxy.Context.EmployeePtoTransactions.AddObject(obj);
                    }
                }


                if (e.PrevValue != null && e.CurrentValue != null)
                {
                    emp.CurrentLeaveDays = Math.Round(Convert.ToDecimal(e.PrevValue) + Convert.ToDecimal(e.CurrentValue));
                    var status = proxy.Context.EmployeePtoStatus.FirstOrDefault(es => es.EmployeeId == eid);
                    if (status != null)
                    {
                        status.PrevCount    = e.PrevValue;
                        status.CurrentCount = e.CurrentValue;
                    }
                    else
                    {
                        status = new EmployeePtoStatus()
                        {
                            EmployeeId = eid, PrevCount = e.PrevValue, CurrentCount = e.CurrentValue
                        };
                        proxy.Context.EmployeePtoStatus.AddObject(status);
                    }
                }
            }
            proxy.Save();
        }