Exemple #1
0
 private void LevelDown()
 {
     if (SelectedLevel == null)
     {
         SelectedLevel = Levels.FirstOrDefault();
     }
     else
     {
         var index = levels.IndexOf(SelectedLevel);
         if (index > 0)
             SelectedLevel = levels[index - 1];
     }
     RaiseCommands();
 }
Exemple #2
0
        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;
        }
Exemple #3
0
 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();
 }