public TimeTrackViewModel(TimeTrackFilter timeTrackFilter, TimeTrackEmployeeResult timeTrackEmployeeResult) { DocumentsViewModel = new DocumentsViewModel(timeTrackEmployeeResult, timeTrackFilter.StartDate, timeTrackFilter.EndDate); ShortEmployee = timeTrackEmployeeResult.ShortEmployee; ScheduleName = timeTrackEmployeeResult.ScheduleName; if (timeTrackEmployeeResult.DayTimeTracks == null) timeTrackEmployeeResult.DayTimeTracks = new List<DayTimeTrack>(); DayTracks = new ObservableCollection<DayTrackViewModel>(); foreach (var dayTimeTrack in timeTrackEmployeeResult.DayTimeTracks) { dayTimeTrack.Calculate(); var dayTrackViewModel = new DayTrackViewModel(dayTimeTrack, timeTrackFilter, timeTrackEmployeeResult.ShortEmployee); DayTracks.Add(dayTrackViewModel); } Totals = new List<TimeTrackTotal>(); foreach (var timeTrackType in timeTrackFilter.TotalTimeTrackTypeFilters) { Totals.Add(new TimeTrackTotal(timeTrackType)); } foreach (var dayTimeTrack in timeTrackEmployeeResult.DayTimeTracks) { foreach (var timeTrackTotal in dayTimeTrack.Totals) { var total = Totals.FirstOrDefault(x => x.TimeTrackType == timeTrackTotal.TimeTrackType); if (total != null) { total.TimeSpan += timeTrackTotal.TimeSpan; } } } OnPropertyChanged(() => Totals); }
public DocumentsViewModel(TimeTrackEmployeeResult timeTrackEmployeeResult, DateTime startDate, DateTime endDate) { EmployeeUID = timeTrackEmployeeResult.ShortEmployee.UID; OrganisationUID = timeTrackEmployeeResult.ShortEmployee.OrganisationUID; AddCommand = new RelayCommand(OnAdd, CanAdd); EditCommand = new RelayCommand(OnEdit, CanEdit); RemoveCommand = new RelayCommand(OnRemove, CanRemove); AddFileCommand = new RelayCommand(OnAddFile, CanAddFile); OpenFileCommand = new RelayCommand(OnOpenFile, CanOpenFile); RemoveFileCommand = new RelayCommand(OnRemoveFile, CanRemoveFile); Documents = new ObservableCollection<DocumentViewModel>(); if (timeTrackEmployeeResult.Documents != null) { foreach (var document in timeTrackEmployeeResult.Documents.OrderBy(x => x.StartDateTime)) { var documentViewModel = new DocumentViewModel(document); Documents.Add(documentViewModel); } } SelectedDocument = Documents.FirstOrDefault(); IsChanged = false; }
TimeTrackEmployeeResult GetEmployeeTimeTrack(Employee employee, DateTime startDate, DateTime endDate, List<PassJournal> passJournals) { if (employee == null) return new TimeTrackEmployeeResult("Не найден сотрудник"); var schedule = employee.Schedule; if (schedule == null || schedule.IsDeleted) return new TimeTrackEmployeeResult("Не найден график"); var scheduleScheme = employee.Schedule.ScheduleScheme; if (scheduleScheme == null || scheduleScheme.IsDeleted) return new TimeTrackEmployeeResult("Не найдена схема работы"); var days = scheduleScheme.ScheduleDays; var scheduleZones = schedule.ScheduleZones; var nightSettings = employee.Organisation.NightSettings.FirstOrDefault(); var timeTrackEmployeeResult = new TimeTrackEmployeeResult(); timeTrackEmployeeResult.ScheduleName = schedule.Name; var holidays = employee.Organisation.Holidays.Where(x => x.Date >= startDate && x.Date <= endDate); for (DateTime date = startDate; date <= endDate; date = date.AddDays(1)) { if (employee.ScheduleStartDate.Date > date.Date) { timeTrackEmployeeResult.DayTimeTracks.Add(new DayTimeTrack("До начала действия графика") { Date = date }); continue; } var dayTimeTrack = DbService.PassJournalTranslator.GetRealTimeTrack(employee.UID, scheduleZones, date, passJournals); dayTimeTrack.NightSettings = nightSettings != null ? DbService.NightSettingTranslator.Transalte(nightSettings) : null; dayTimeTrack.IsIgnoreHoliday = schedule.IsIgnoreHoliday; dayTimeTrack.IsOnlyFirstEnter = schedule.IsOnlyFirstEnter; dayTimeTrack.AllowedLate = schedule.AllowedLateTimeSpan; dayTimeTrack.AllowedEarlyLeave = schedule.AllowedEarlyLeaveTimeSpan; var realDate = date; var ignoreHolidays = false; var holiday = holidays.FirstOrDefault(x => x.Date == date && x.Type == (int)HolidayType.WorkingHoliday && !x.IsDeleted); if (holiday != null) { if (holiday.TransferDate.HasValue) { realDate = holiday.TransferDate.Value; ignoreHolidays = true; } } var plannedTimeTrackPart = GetPlannedTimeTrackPart(employee, schedule, scheduleScheme, days, realDate, ignoreHolidays, holidays); dayTimeTrack.PlannedTimeTrackParts = plannedTimeTrackPart.TimeTrackParts; dayTimeTrack.IsHoliday = plannedTimeTrackPart.IsHoliday; dayTimeTrack.HolidayReduction = plannedTimeTrackPart.HolidayReduction; dayTimeTrack.SlideTime = plannedTimeTrackPart.SlideTime; dayTimeTrack.Error = plannedTimeTrackPart.Error; timeTrackEmployeeResult.DayTimeTracks.Add(dayTimeTrack); } return timeTrackEmployeeResult; }