private int CalculateAbsences(Period period, AbstractCalendarEntry entry) { var p = GetNormalizedPeriod(period); if (!(entry.To >= p.Start && entry.From <= p.End)) { return(0); } if (entry.From >= p.Start && entry.To <= p.End) { return(entry.To.Day - entry.From.Day + 1); } if (entry.From <= p.Start && entry.To >= p.End) { return(p.End.Day - p.Start.Day + 1); } if (entry.From <= p.Start && entry.To <= p.End) { return(entry.To.Day - p.Start.Day + 1); } if (entry.From >= p.Start && entry.To >= p.End) { return(p.End.Day - entry.From.Day + 1); } return(0); }
private int GetCoefficient(AbstractCalendarEntry e, int year, int month) { var periodId = Periods .First(p => p.Start.Year == year && p.Start.Month == month) .Id; var resourceId = e.CalendarEmployee.Employee.Id; return(Capacities .First(rc => rc.ResourceId == resourceId && rc.PeriodId == periodId) .Capacity); }
private Dictionary <string, int> GetWorkDaysCountFromDataRange(Tuple <int, int> fromDataTuple, Tuple <int, int> toDataTuple, int year, AbstractCalendarEntry e) { var startDay = 0; var endDay = 0; var startMonth = 0; var endMonth = 0; var result = new Dictionary <string, int>(); if (fromDataTuple.Item1 == -1 && toDataTuple.Item1 != -1) { startMonth = 1; startDay = 1; endMonth = toDataTuple.Item1; endDay = toDataTuple.Item2; } else if (fromDataTuple.Item1 != -1 && toDataTuple.Item1 == -1) { startMonth = fromDataTuple.Item1; startDay = fromDataTuple.Item2; endMonth = 12; endDay = 31; } else { startMonth = fromDataTuple.Item1; startDay = fromDataTuple.Item2; endMonth = toDataTuple.Item1; endDay = toDataTuple.Item2; } for (int i = startMonth; i <= endMonth; i++) { string monthName = new DateTime(year, i, 1).GetMonthName().ToLower(); var coef = GetCoefficient(e, year, i); var lastDay = 0; if (i == endMonth) { lastDay = endDay; } else { lastDay = DateTime.DaysInMonth(year, i); } var firstDay = 0; if (i != startMonth) { firstDay = 1; } else { firstDay = startDay; } var allWorkDays = GetWorkDaysCountInMonth(year, i, 1, DateTime.DaysInMonth(year, i)); var workDaysWithAbsence = GetWorkDaysCountInMonth(year, i, firstDay, lastDay); int value = Convert.ToInt32((((double)(workDaysWithAbsence)) / (double)allWorkDays * coef)); if (!result.ContainsKey(monthName)) { result[monthName] = 0; } result[monthName] += value; } return(result); }