protected virtual void OnAddAbsence() { if (Year < _TodayYear) return; BzEmployeeHoliday employeeentity = GetFocusedEntity(); if (employeeentity == null) return; DateTime minDate = _yearwrapper.BeginYearDate; DateTime maxDate = _yearwrapper.EndYearDate; if (Year == _TodayYear) { minDate = DateTime.Today; } List<DateTime> lstDates = CreateDateListFromSelectedRange(); lstDates.Sort(); SelectAbsenceForm dialog = new SelectAbsenceForm(); dialog.SetMinMaxDate(minDate, maxDate); if (lstDates != null && lstDates.Count > 0) { dialog.BeginDate = lstDates[0]; dialog.EndDate = lstDates[lstDates.Count - 1]; } else { dialog.BeginDate = minDate ; dialog.EndDate = minDate.AddDays (7); } StoreDay sd = _query.StoreDays[dialog.BeginDate]; dialog.SetOpenCloseTime(sd.OpenTime, sd.CloseTime); dialog.AbsenceList = _absencemanager.ToList; if (dialog.Execute()) { List<DateTime> dates = PrepareDateList(dialog.BeginDate, dialog.EndDate, dialog.IgnoreFeast, dialog.IgnoreClosedDay, dialog.IgnoredDays); employeeentity.CheckDates(dates); Absence absence = dialog.SelectedAbsence; if (dates != null && dates.Count > 0) { List<AbsenceTimeRange> newAbsences = new List<AbsenceTimeRange>(); StoreDay storeday = null; AbsenceTimeRange absencetime = null; foreach (DateTime date in dates) { storeday = _query.StoreDays[date]; Debug.Assert(storeday != null); absencetime = new AbsenceTimeRange(); absencetime.ID = ClientEnvironment.AbsenceTimePlanningService.CreateEntity().ID; absencetime.Date = date; absencetime.Absence = absence; absencetime.AbsenceID = absence.ID; absencetime.EmployeeID = employeeentity.EmployeeId; if (absence.IsFixed) { storeday = _query.StoreDays[date]; absencetime.Begin = storeday.OpenTime; absencetime.End = (short)(absencetime.Begin + employeeentity.GetAvgWorkingHourADay(date));//DateTimeHelper.RoundToQuoter(employeeentity.GetAvgWorkingHourADay(date))); } else if (absence.Value != 0) { absencetime.Begin = storeday.OpenTime; absencetime.End = (short)(absencetime.Begin + DateTimeHelper.RoundToQuoter((int)(absence.Value*60))); } else { absencetime.Begin = DateTimeHelper.RoundToQuoter(dialog.BeginTime); absencetime.End = DateTimeHelper.RoundToQuoter(dialog.EndTime); } absencetime.Time = employeeentity.GetAbsenceTimeAsDay(absencetime.Absence, date, (absencetime.End - absencetime.Begin)); newAbsences.Add(absencetime); } if (newAbsences.Count > 0) { employeeentity.SetAbsence(newAbsences); BuildTotalSums(); gvAbsencePlanning.RefreshRow(gvAbsencePlanning.FocusedRowHandle); Modified = true; } } } dialog.Dispose(); }
private void ProcessAbsence(Absence absence) { Debug.Assert(absence != null); if (absence == null) return; BzEmployeeHoliday employeeentity = GetFocusedEntity(); List<DateTime> lstDates = CreateDateListFromSelectedRange(); employeeentity.CheckDates(lstDates); Debug.Assert(employeeentity != null); if (employeeentity == null) return; if (lstDates != null && lstDates.Count > 0) { List<AbsenceTimeRange> newAbsences = new List<AbsenceTimeRange>(); StoreDay storeday = null; AbsenceTimeRange absencetime = null; foreach (DateTime date in lstDates) { storeday = _query.StoreDays[date]; Debug.Assert(storeday != null); absencetime = new AbsenceTimeRange(); absencetime.ID = ClientEnvironment.AbsenceTimePlanningService.CreateEntity().ID; absencetime.Date = date; absencetime.AbsenceID = absence.ID; absencetime.EmployeeID = employeeentity.EmployeeId; absencetime.Absence = absence; absencetime.Begin = storeday.OpenTime; //absencetime.End = (short)(absencetime.Begin + DateTimeHelper.RoundToQuoter(employeeentity.GetAvgWorkingHourADay(date))); absencetime.End = (short)(absencetime.Begin + employeeentity.GetAvgWorkingHourADay(date)); absencetime.Time = employeeentity.GetAbsenceTimeAsDay(absence, date, (absencetime.End - absencetime.Begin)); newAbsences.Add(absencetime); } if (newAbsences.Count > 0) { employeeentity.SetAbsence(newAbsences); BuildTotalSums(); gvAbsencePlanning.RefreshRow(gvAbsencePlanning.FocusedRowHandle); Modified = true; } } }