Пример #1
0
		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);
		}
Пример #2
0
		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;
			
		}
Пример #3
0
		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;
		}