private void LevelDown() { if (SelectedLevel == null) { SelectedLevel = Levels.FirstOrDefault(); } else { var index = levels.IndexOf(SelectedLevel); if (index > 0) SelectedLevel = levels[index - 1]; } RaiseCommands(); }
private static LevelViewModel GetLevel( Staffing.StaffingViewModel model, TimeSpan period, string name, Func<DateTime, DateTime> changeStartPeriodDate, Func<DateTime, string> getTimePartName, Func<DateTime, DateTime> getNextPeriodStartDate ) { var level = new LevelViewModel() { Name = name, Period = period }; if (model == null) return level; var dtNow = DateTime.Now; var now = new DateTime(dtNow.Year, dtNow.Month, dtNow.Day); var start = now - TimeSpan.FromDays(period.TotalDays / 2d); var end = start + period; var departments = model.Departments.AsEnumerable().Traverse(i => i.Childs).Select(i => i.Data.Department); var periodStart = changeStartPeriodDate(start); periodStart = new DateTime(periodStart.Year, periodStart.Month, periodStart.Day); var getName = new Func<DateTime, DateTime, string>((dt0, dt1) => { var nameStart = getTimePartName(dt0); var nameEnd = getTimePartName(dt1); return (nameStart == nameEnd) ? nameStart : $"{nameStart} - {nameEnd}"; }); while (periodStart < end) { var periodEnd = getNextPeriodStartDate(periodStart).AddDays(-1); // periodStart + TimeSpan.FromDays(7); var tp = new TimePartViewModel() { Start = periodStart, End = periodEnd, IsCurrent = periodStart <= now && now <= periodEnd, Name = getName(periodStart, periodEnd) }; var employees = model.Employees .Where(e => e.Employee.Birthday.HasValue) .Select(e => new { EmployeeVM = e, YearBirthday = GetEmployeeDateBirthFor(tp.Start, tp.End, e.Employee.Birthday.Value) }) .Where(e => e.YearBirthday.HasValue) .OrderBy(r => r.YearBirthday.Value) .Select(e => new EmployeeViewModel() { Employee = e.EmployeeVM.Employee, Department = e.EmployeeVM.Department, Age = e.YearBirthday.Value.Year - e.EmployeeVM.Employee.Birthday.Value.Year, DayOfBirthday = e.YearBirthday.Value, }); foreach (var e in employees) tp.Employee.Add(e); level.Parts.Add(tp); periodStart = periodEnd.AddDays(1); } for (int i = level.Parts.Count - 1; i >= 1; i--) if (level.Parts[i].Employee.Count == 0 && level.Parts[i - 1].Employee.Count == 0) { level.Parts[i - 1].End = level.Parts[i].End; level.Parts[i - 1].IsCurrent |= level.Parts[i].IsCurrent; level.Parts[i - 1].Name = getName(level.Parts[i - 1].Start, level.Parts[i - 1].End); level.Parts.RemoveAt(i); } return level; }
private void LevelUp() { if (SelectedLevel == null) { SelectedLevel = Levels.LastOrDefault(); } else { var index = levels.IndexOf(SelectedLevel); if (index < Levels.Count - 1) SelectedLevel = levels[index + 1]; } RaiseCommands(); }