public DayTrackViewModel(DayTimeTrack dayTimeTrack, TimeTrackFilter timeTrackFilter, ShortEmployee shortEmployee) { DayTimeTrack = dayTimeTrack; TimeTrackFilter = timeTrackFilter; ShortEmployee = shortEmployee; Update(); }
public TimeTrackPartDetailsViewModel(DayTimeTrack dayTimeTrack, ShortEmployee employee, TimeTrackDetailsViewModel parent, Guid? uid = null, TimeSpan? enterTime = null, TimeSpan? exitTime = null) { _DayTimeTrack = dayTimeTrack; _Employee = employee; _Parent = parent; if (uid != null) { UID = uid.Value; EnterTime = enterTime.Value; ExitTime = exitTime.Value; Title = "Редактировать проход"; } else { UID = Guid.NewGuid(); _IsNew = true; Title = "Добавить проход"; } var schedule = ScheduleHelper.GetSingle(employee.ScheduleUID); if (schedule != null) { Zones = new ObservableCollection<TimeTrackZone>(); var gkZones = GKManager.SKDZones.Where(x => schedule.Zones.Any(y => y.ZoneUID == x.UID)); foreach (var zone in gkZones) { Zones.Add(new TimeTrackZone(zone)); } SelectedZone = Zones.FirstOrDefault(); } }
public TimeTrackDetailsViewModel(DayTimeTrack dayTimeTrack, ShortEmployee shortEmployee) { dayTimeTrack.Calculate(); Title = "Время сотрудника " + shortEmployee.FIO + " в течение дня " + dayTimeTrack.Date.Date.ToString("yyyy-MM-dd"); 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); AddCustomPartCommand = new RelayCommand(OnAddCustomPart, CanAddPart); RemovePartCommand = new RelayCommand(OnRemovePart, CanEditRemovePart); EditPartCommand = new RelayCommand(OnEditPart, CanEditRemovePart); DayTimeTrack = dayTimeTrack; ShortEmployee = shortEmployee; DayTimeTrackParts = new ObservableCollection<DayTimeTrackPartViewModel>(); foreach (var timeTrackPart in DayTimeTrack.RealTimeTrackParts) { var employeeTimeTrackPartViewModel = new DayTimeTrackPartViewModel(timeTrackPart); DayTimeTrackParts.Add(employeeTimeTrackPartViewModel); } Documents = new ObservableCollection<DocumentViewModel>(); foreach (var document in dayTimeTrack.Documents) { if (document.EndDateTime > dayTimeTrack.Date.Date) { var documentViewModel = new DocumentViewModel(document); Documents.Add(documentViewModel); } } }
public DayTimeTrack GetRealTimeTrack(Guid employeeUID, IEnumerable<ScheduleZone> scheduleZones, DateTime date, IEnumerable<PassJournal> passJournals) { var dayTimeTrack = new DayTimeTrack(); dayTimeTrack.Date = date; foreach (var passJournal in passJournals.Where(x => x.EmployeeUID == employeeUID && x.EnterTime != null && x.EnterTime.Date <= date.Date && x.ExitTime != null && x.ExitTime.Value.Date >= date.Date && scheduleZones.Select(scheduleZone => scheduleZone.ZoneUID).Contains(x.ZoneUID)).ToList()) { var startTime = new TimeSpan(); var endTime = new TimeSpan(); var startsInPreviousDay = false; var endsInNextDay = false; var enterTime = passJournal.EnterTime; var exitTime = passJournal.ExitTime.Value; if (enterTime.Date == date && exitTime.Date >= date) { startTime = enterTime.TimeOfDay; if (exitTime.Date == date) endTime = exitTime.TimeOfDay; else if (exitTime.Date > date) endTime = TimeSpan.FromDays(1); endsInNextDay = exitTime.Date > date; } else if (enterTime.Date < date && exitTime.Date == date) { startTime = TimeSpan.Zero; ; endTime = exitTime.TimeOfDay; startsInPreviousDay = true; } else if (enterTime.Date < date && exitTime.Date > date) { startTime = TimeSpan.Zero; ; endTime = TimeSpan.FromDays(1); startsInPreviousDay = true; endsInNextDay = true; } if (passJournal.ExitTime.HasValue) { var timeTrackPart = new TimeTrackPart() { StartTime = startTime, EndTime = endTime, ZoneUID = passJournal.ZoneUID, PassJournalUID = passJournal.UID, StartsInPreviousDay = startsInPreviousDay, EndsInNextDay = endsInNextDay }; dayTimeTrack.RealTimeTrackParts.Add(timeTrackPart); } } dayTimeTrack.RealTimeTrackParts = dayTimeTrack.RealTimeTrackParts.OrderBy(x => x.StartTime.Ticks).ToList(); return dayTimeTrack; }
public OperationResult<TimeTrackResult> GetTimeTracks(EmployeeFilter filter, DateTime startDate, DateTime endDate) { return DbServiceHelper.InTryCatch(() => { var operationResult = DbService.EmployeeTranslator.ShortTranslator.Get(filter); if (operationResult.HasError) throw new Exception(operationResult.Error); var employees = DbService.EmployeeTranslator.GetFilteredTableItems(filter, GetEmployeeTableItems()); var employeeUIDs = employees.Select(x => x.UID).ToList(); var passJournals = Context.PassJournals.Where(x => x.EmployeeUID != null && employeeUIDs.Contains(x.EmployeeUID.Value)).ToList(); var timeTrackResult = new TimeTrackResult(); foreach (var employee in employees) { var timeTrackEmployeeResult = GetEmployeeTimeTrack(employee, startDate, endDate, passJournals); timeTrackEmployeeResult.ShortEmployee = DbService.EmployeeTranslator.ShortTranslator.Translate(employee); if (timeTrackEmployeeResult.Error != null) { for (DateTime date = startDate; date <= endDate; date = date.AddDays(1)) { var dayTimeTrack = new DayTimeTrack(); dayTimeTrack.Error = timeTrackEmployeeResult.Error; dayTimeTrack.Date = date; timeTrackEmployeeResult.DayTimeTracks.Add(dayTimeTrack); } } var documentsOperationResult = DbService.TimeTrackDocumentTranslator.Get(employee.UID, startDate, endDate, employee.TimeTrackDocuments); if (!documentsOperationResult.HasError) { var documents = documentsOperationResult.Result; foreach (var document in documents) { document.TimeTrackDocumentType = TimeTrackDocumentTypesCollection.TimeTrackDocumentTypes.FirstOrDefault(x => x.Code == document.DocumentCode); if (document.TimeTrackDocumentType == null) { var documentType = employee.Organisation.TimeTrackDocumnetTypes.FirstOrDefault(x => x.DocumentCode == document.DocumentCode); if (documentType != null) { document.TimeTrackDocumentType = DbService.TimeTrackDocumentTypeTranslator.Translate(documentType); } } if (document.TimeTrackDocumentType != null) { timeTrackEmployeeResult.Documents.Add(document); } } foreach (var document in timeTrackEmployeeResult.Documents) { for (DateTime date = document.StartDateTime; date < new DateTime(document.EndDateTime.Year, document.EndDateTime.Month, document.EndDateTime.Day).AddDays(1); date = date.AddDays(1)) { var dayTimeTracks = timeTrackEmployeeResult.DayTimeTracks.FirstOrDefault(x => x.Date.Date == date.Date); if (dayTimeTracks != null) { dayTimeTracks.Documents.Add(document); } } } } timeTrackResult.TimeTrackEmployeeResults.Add(timeTrackEmployeeResult); } return timeTrackResult; }); }