protected virtual void DaylightShift_RowPersisting(PXCache cache, PXRowPersistingEventArgs e) { DaylightShift row = e.Row as DaylightShift; if (row == null || row.Year == null || row.TimeZone == null || row.IsActive == true) { return; } DaylightSavingTime dts = GetDST(row.TimeZone, (int)row.Year); if ((dts != null && dts.IsActive && row.FromDate == dts.Start && row.ToDate == dts.End && row.Shift == (int)dts.DaylightOffset.TotalMinutes) || (row.FromDate == null && row.ToDate == null && row.Shift == null)) { DaylightShift savedRow = PXSelectReadonly <DaylightShift, Where <DaylightShift.year, Equal <Current <DaylightShiftFilter.year> >, And <DaylightShift.timeZone, Equal <Required <DaylightShift.timeZone> > > > > .SelectWindowed(this, 0, 1, row.TimeZone); row.FromDate = savedRow.FromDate; row.ToDate = savedRow.ToDate; row.Shift = savedRow.Shift; } }
protected virtual void DaylightShift_RowUpdated(PXCache sender, PXRowUpdatedEventArgs e) { DaylightShift row = e.Row as DaylightShift; if (row == null || row.Year == null || row.TimeZone == null) { return; } bool isEditable = row.IsActive == true; if (isEditable) { DefaultEditableRow(row); } else { DaylightSavingTime dts = GetDST(row.TimeZone, (int)row.Year); if (dts != null && dts.IsActive) { row.FromDate = dts.Start; row.ToDate = dts.End; row.Shift = (int)dts.DaylightOffset.TotalMinutes; } else { row.ToDate = null; row.FromDate = null; row.Shift = null; } } }
protected override CalendarEvent ConvertToEntity(Func <string, bool, string> getField) { var timeZoneId = getField("TimeZoneId", false); var eventName = getField("EventName", false); var endDate = getField("EndDate", false); CalendarEvent newEntity; if (string.IsNullOrEmpty(timeZoneId)) // when timezoneid is null means Holiday { if (string.IsNullOrEmpty(eventName)) { throw new NoNullAllowedException(); } newEntity = new Holiday { Country = _country.ToString(), EventName = eventName }; } else { if (string.IsNullOrEmpty(endDate)) { throw new NoNullAllowedException(); } newEntity = new DaylightSavingTime { EventName = "DST", TimeZone = TimeZoneInfo.FindSystemTimeZoneById(timeZoneId) }; } newEntity.Start = Convert.ToDateTime(getField("StartDate", true)); newEntity.End = string.IsNullOrEmpty(endDate) ? newEntity.Start.AddDays(1) : Convert.ToDateTime(endDate); return(newEntity); }
private void DefaultEditableRow(DaylightShift row) { DaylightShift savedRow = PXSelectReadonly <DaylightShift, Where <DaylightShift.year, Equal <Current <DaylightShiftFilter.year> >, And <DaylightShift.timeZone, Equal <Required <DaylightShift.timeZone> > > > > .SelectWindowed(this, 0, 1, row.TimeZone); DateTime newDate = DateTime.UtcNow.Date; newDate = new DateTime((int)row.Year, newDate.Month, newDate.Day) + new TimeSpan(12, 0, 0); DateTime start = newDate; DateTime end = newDate.AddDays(1D); int shift = 60; DaylightSavingTime dts = GetDST(row.TimeZone, newDate.Year); if (dts != null && dts.IsActive) { start = dts.Start; end = dts.End; shift = (int)dts.DaylightOffset.TotalMinutes; } if (savedRow != null) { row.Year = savedRow.Year; if (row.ToDate == null || row.ToDate == end) { row.ToDate = savedRow.ToDate; } if (row.FromDate == null || row.FromDate == start) { row.FromDate = savedRow.FromDate; } if (row.Shift == null || row.Shift == shift) { row.Shift = savedRow.Shift; } } else { if (row.Year == null) { row.Year = newDate.Year; } if (row.ToDate == null) { row.ToDate = end; } if (row.FromDate == null) { row.FromDate = start; } if (row.Shift == null) { row.Shift = shift; } } }
public IDialogBoxPresenter OpenAddDstDialog(IDialogBoxPresenter dialog) { NewCalendarEvent = new DaylightSavingTime() { TimeZone = SelectedTimeZone }; BeforeDialog(dialog); dialog.Text = "DST"; return(dialog); }
public bool IsAmbiguousTime(DateTime dateTime) { DaylightSavingTime daylightSavingTime = new DaylightSavingTime(dateTime.Year, this); Func <DaylightSavingTime, DateTime, bool> isAmbiguous = (dst, dt) => dst.IsActive && dateTime >= dst.End - dst.Offset && dateTime <= dst.End; if (isAmbiguous(daylightSavingTime, dateTime)) { return(true); } if (daylightSavingTime.Start.Year < daylightSavingTime.End.Year) // for southern hemisphere { daylightSavingTime = new DaylightSavingTime(dateTime.Year - 1, this); return(isAmbiguous(daylightSavingTime, dateTime)); } return(false); }