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" : ""); } }
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 } }