コード例 #1
0
        private void ComputeHours()
        {
            User user = new User();
            user = user.GetUser(Convert.ToInt32(UserId), Convert.ToDateTime(StartTime));
            if (EndTime != null)
            {
                DateTime startdatetime = Convert.ToDateTime(StartTime);
                TimeSpan stime = startdatetime.TimeOfDay;
                TimeSpan etime = Convert.ToDateTime(EndTime).TimeOfDay;
                int curday = (int)startdatetime.DayOfWeek;
                Holiday holiday = new Holiday();

                otcost = 0;
                normalcost = 0;

                double time = Convert.ToDateTime(EndTime).Subtract(Convert.ToDateTime(StartTime)).TotalMinutes;
                if (user.shifting == false)
                {
                    if (user.usePattern == true)
                    {
                        string[] pattern = user.offPattern.Split(',');
                        int patterndays = 0;
                        List<bool> isOffdays = new List<bool>();
                        for (int i = 0; i < pattern.Length; i++)
                        {
                            patterndays += Convert.ToInt32(pattern[i]);
                            for (int j = 0; j < Convert.ToInt32(pattern[i]); j++)
                            {
                                if (i % 2 == 0)
                                    isOffdays.Add(true);
                                else
                                    isOffdays.Add(false);
                            }
                        }
                        int offdayindex = 0;
                        offdayindex = Convert.ToInt32(Math.Floor((startdatetime.Date - user.patternStartDate.Date).TotalDays)) % patterndays;
                        if (TimeSpan.Parse(user.endTime) <= stime || holiday.IsHoliday(startdatetime.Date) || isOffdays[offdayindex] == true) //entry is OT
                        {
                            otmins = time;
                        }
                        else if ((etime == new TimeSpan(0, 0, 0) ? new TimeSpan(1, 0, 0, 0) : etime) > TimeSpan.Parse(user.endTime)) //entry is from normal time to OT
                        {
                            normalmins = TimeSpan.Parse(user.endTime).Subtract(stime).TotalMinutes;
                            otmins = (etime == new TimeSpan(0, 0, 0) ? new TimeSpan(1, 0, 0, 0) : etime).Subtract(TimeSpan.Parse(user.endTime)).TotalMinutes;
                        }
                        else //entry is within normal time
                        {
                            normalmins = time;
                        }
                    }
                    else
                    {
                        if (TimeSpan.Parse(user.endTime) <= stime || holiday.IsHoliday(startdatetime.Date) || curday == user.currentOffDay || curday == user.currentSpecialOffDay || curday == user.currentOptOffDay1 || curday == user.currentOptOffDay2 || curday == user.currentOptOffDay3 || curday == user.currentOptOffDay4) //entry is OT
                        {
                            otmins = time;
                        }
                        else if ((etime == new TimeSpan(0, 0, 0) ? new TimeSpan(1, 0, 0, 0) : etime) > TimeSpan.Parse(user.endTime)) //entry is from normal time to OT
                        {
                            normalmins = TimeSpan.Parse(user.endTime).Subtract(stime).TotalMinutes;
                            otmins = (etime == new TimeSpan(0, 0, 0) ? new TimeSpan(1, 0, 0, 0) : etime).Subtract(TimeSpan.Parse(user.endTime)).TotalMinutes;
                        }
                        else //entry is within normal time
                        {
                            normalmins = time;
                        }
                    }
                }
                else
                {
                    TimeSpan cutoff = user.GetMyCutOfTime();
                    if (user.usePattern == true)
                    {
                        string[] pattern = user.offPattern.Split(',');
                        int patterndays = 0;
                        List<bool> isOffdays = new List<bool>();
                        for (int i = 0; i < pattern.Length; i++)
                        {
                            patterndays += Convert.ToInt32(pattern[i]);
                            for (int j = 0; j < Convert.ToInt32(pattern[i]); j++)
                            {
                                if (i % 2 == 0)
                                    isOffdays.Add(true);
                                else
                                    isOffdays.Add(false);
                            }
                        }
                        int offdayindex = 0;

                        if (stime >= cutoff)
                        {
                            offdayindex = Convert.ToInt32(Math.Floor((startdatetime.Date - user.patternStartDate.Date).TotalDays)) % patterndays;
                            if (holiday.IsHoliday(startdatetime.Date) || isOffdays[offdayindex] == true)
                                otmins = time;
                            else
                                normalmins = time;
                        }
                        else
                        {
                            offdayindex = Convert.ToInt32(Math.Floor((startdatetime.AddDays(-1).Date - user.patternStartDate.Date).TotalDays)) % patterndays;
                            if (TimeSpan.Parse(user.endTime) <= stime || holiday.IsHoliday(startdatetime.AddDays(-1).Date) || isOffdays[offdayindex] == true)
                            {
                                otmins = time;
                            }
                            else if ((etime == new TimeSpan(0, 0, 0) ? new TimeSpan(1, 0, 0, 0) : etime) > TimeSpan.Parse(user.endTime))
                            {
                                normalmins = TimeSpan.Parse(user.endTime).Subtract(stime).TotalMinutes;
                                otmins = (etime == new TimeSpan(0, 0, 0) ? new TimeSpan(1, 0, 0, 0) : etime).Subtract(TimeSpan.Parse(user.endTime)).TotalMinutes;
                            }
                        }
                    }
                    else
                    {
                        if (stime >= cutoff)
                        {
                            if (holiday.IsHoliday(startdatetime.Date) || curday == user.currentOffDay || curday == user.currentSpecialOffDay || curday == user.currentOptOffDay1 || curday == user.currentOptOffDay2 || curday == user.currentOptOffDay3 || curday == user.currentOptOffDay4)
                                otmins = time;
                            else
                                normalmins = time;
                        }
                        else
                        {
                            curday = (int)startdatetime.AddDays(-1).DayOfWeek;
                            if (TimeSpan.Parse(user.endTime) <= stime || holiday.IsHoliday(startdatetime.AddDays(-1).Date) || curday == user.currentOffDay || curday == user.currentSpecialOffDay || curday == user.currentOptOffDay1 || curday == user.currentOptOffDay2 || curday == user.currentOptOffDay3 || curday == user.currentOptOffDay4) //entry is OT
                            {
                                otmins = time;
                            }
                            else if ((etime == new TimeSpan(0, 0, 0) ? new TimeSpan(1, 0, 0, 0) : etime) > TimeSpan.Parse(user.endTime))
                            {
                                normalmins = TimeSpan.Parse(user.endTime).Subtract(stime).TotalMinutes;
                                otmins = (etime == new TimeSpan(0, 0, 0) ? new TimeSpan(1, 0, 0, 0) : etime).Subtract(TimeSpan.Parse(user.endTime)).TotalMinutes;
                            }
                        }
                    }
                }
                double hr = Math.Truncate(time / 60);
                double min = time % 60;
                totalhours = hr == 0 && min == 0 ? "0 min" : (hr > 0 ? hr > 1 ? hr + " hrs" : hr + " hr" : "") + (hr > 0 && min > 0 ? ", " : "") + (min > 0 ? min > 1 ? min + " mins" : min + " min" : "");

                hr = Math.Truncate(normalmins / 60);
                min = normalmins % 60;
                normalhours = hr == 0 && min == 0 ? "0 min" : (hr > 0 ? hr > 1 ? hr + " hrs" : hr + " hr" : "") + (hr > 0 && min > 0 ? ", " : "") + (min > 0 ? min > 1 ? min + " mins" : min + " min" : "");

                hr = Math.Truncate(otmins / 60);
                min = otmins % 60;
                othours = hr == 0 && min == 0 ? "0 min" : (hr > 0 ? hr > 1 ? hr + " hrs" : hr + " hr" : "") + (hr > 0 && min > 0 ? ", " : "") + (min > 0 ? min > 1 ? min + " mins" : min + " min" : "");

            }
        }
コード例 #2
0
        private void ComputeCost()
        {
            if (EndTime != null)
            {
                User user = new User();
                user = user.GetUser(Convert.ToInt32(UserId), Convert.ToDateTime(StartTime));
                Holiday holiday = new Holiday();
                OTRateSetting otRateSetting = new OTRateSetting();
                DateTime startdatetime = Convert.ToDateTime(StartTime);
                //int workingdays = holiday.GetWorkingDaysInMonth(user.Id, startdatetime);
                double normalRatePerMin = 0;
                //double normalRatePerMin = Convert.ToDouble((user.currentSalary/workingdays) / user.minsWorkPerDay);
                if (user.minsWorkPerDay < 490)
                    normalRatePerMin = Convert.ToDouble((user.currentSalary * 12) / (2080 * 60));
                else
                    normalRatePerMin = Convert.ToDouble((user.currentSalary * 12) / (2184 * 60));
                normalcost = normalmins * normalRatePerMin;
                otRateSetting = otRateSetting.GetOTRateSettingByDate(startdatetime);

                #region OT COMPUTATION
                otcost = 0;
                if (!user.noOTpay && otRateSetting != null)
                {
                    if (user.currentSalary >= otRateSetting.OTExemptedSalary) //User is Exempted from Salary
                    {
                        otcost = otmins * Convert.ToDouble((otRateSetting.ExemptedSalaryIncentive / 60));
                    }
                    else
                    {
                        if (user.shifting == false)
                        {
                            if (user.usePattern == true)
                            {
                                if (holiday.IsHoliday(startdatetime.Date))
                                {
                                    otcost = otmins * (normalRatePerMin * otRateSetting.OTSpecialRate);
                                }
                                else
                                {
                                    otcost = otmins * (normalRatePerMin * otRateSetting.OTNormalRate);
                                }
                            }
                            else
                            {
                                if (holiday.IsHoliday(startdatetime.Date) || user.isOfficeWorker && user.currentSpecialOffDay == (int)startdatetime.DayOfWeek)
                                {
                                    otcost = otmins * (normalRatePerMin * otRateSetting.OTSpecialRate);
                                }
                                else
                                {
                                    otcost = otmins * (normalRatePerMin * otRateSetting.OTNormalRate);
                                }
                            }
                        }
                        else //For Shifting Hours
                        {
                            TimeSpan stime = startdatetime.TimeOfDay;
                            TimeSpan etime = Convert.ToDateTime(EndTime).TimeOfDay;
                            TimeSpan cutoff = user.GetMyCutOfTime();

                            if (user.usePattern == true)
                            {
                                if (user.offPattern.Trim() != "")
                                {

                                    if (stime >= cutoff)
                                    {
                                        if (holiday.IsHoliday(startdatetime.Date))
                                        {
                                            otcost = otmins * (normalRatePerMin * otRateSetting.OTSpecialRate);
                                        }
                                        else
                                        {
                                            otcost = otmins * (normalRatePerMin * otRateSetting.OTNormalRate);
                                        }
                                    }
                                    else
                                    {
                                        if (holiday.IsHoliday(startdatetime.AddDays(-1).Date))
                                        {
                                            otcost = otmins * (normalRatePerMin * otRateSetting.OTSpecialRate);
                                        }
                                        else
                                        {
                                            otcost = otmins * (normalRatePerMin * otRateSetting.OTNormalRate);
                                        }
                                    }
                                }
                            }
                            else
                            {
                                if (stime >= cutoff)
                                {
                                    if (holiday.IsHoliday(startdatetime.Date) || (user.isOfficeWorker && user.currentSpecialOffDay == (int)startdatetime.DayOfWeek))
                                    {
                                        otcost = otmins * (normalRatePerMin * otRateSetting.OTSpecialRate);
                                    }
                                    else
                                    {
                                        otcost = otmins * (normalRatePerMin * otRateSetting.OTNormalRate);
                                    }
                                }
                                else
                                {
                                    if (holiday.IsHoliday(startdatetime.AddDays(-1).Date) || user.isOfficeWorker && user.currentSpecialOffDay == (int)startdatetime.AddDays(-1).DayOfWeek)
                                    {
                                        otcost = otmins * (normalRatePerMin * otRateSetting.OTSpecialRate);
                                    }
                                    else
                                    {
                                        otcost = otmins * (normalRatePerMin * otRateSetting.OTNormalRate);
                                    }
                                }
                            }
                        }
                    }
                    normalcost = Math.Round(normalcost, 2, MidpointRounding.AwayFromZero);
                    otcost = Math.Round(otcost, 2, MidpointRounding.AwayFromZero);
                }
                #endregion
            }
        }