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; } } }
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; } } }
protected IEnumerable calendar() { if (Filter.Current.With(_ => _.Year) == null) { yield break; } var hashtable = new HybridDictionary(); foreach (DaylightShift row in PXSelect <DaylightShift, Where <DaylightShift.year, Equal <Current <DaylightShiftFilter.year> > > > . Select(this)) { var timeZoneInfo = (PXTimeZoneInfo)_timeZonesHashtable[row.TimeZone]; row.TimeZoneDescription = timeZoneInfo.DisplayName; row.OriginalShift = timeZoneInfo.BaseUtcOffset.TotalMinutes; yield return(row); hashtable.Add(row.TimeZone, row); } if (hashtable.Count < _timeZonesHashtable.Count) { var provider = new SystemTimeRegionProvider(); foreach (DictionaryEntry entry in _timeZonesHashtable) { var id = entry.Key; if (!hashtable.Contains(id)) { var timeZoneInfo = (PXTimeZoneInfo)entry.Value; var year = (int)Filter.Current.Year; var row = new DaylightShift { Year = year, TimeZone = (string)id, TimeZoneDescription = PXMessages.LocalizeFormatNoPrefix(timeZoneInfo.DisplayName), IsActive = false, OriginalShift = timeZoneInfo.BaseUtcOffset.TotalMinutes }; var dts = provider.FindTimeRegionByTimeZone((string)id). With(_ => new DaylightSavingTime(year, _)); if (dts != null && dts.IsActive) { row.ToDate = dts.End; row.FromDate = dts.Start; row.Shift = (int)dts.Offset.TotalMinutes; } yield return(row); } } } }
protected virtual void DaylightShift_RowInserting(PXCache sender, PXRowInsertingEventArgs 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); } }
private TimeZoneInfo.AdjustmentRule Initialize(DefinitionParameters parameter) { DaylightShift row = null; var id = parameter.Id; var year = parameter.Year; using (new PXConnectionScope()) using (PXDataRecord rec = PXDatabase.SelectSingle <DaylightShift> ( new PXDataField(typeof(DaylightShift.fromDate).Name), new PXDataField(typeof(DaylightShift.toDate).Name), new PXDataField(typeof(DaylightShift.shift).Name), new PXDataFieldValue(typeof(DaylightShift.isActive).Name, PXDbType.Bit, 1), new PXDataFieldValue(typeof(DaylightShift.year).Name, PXDbType.Int, year), new PXDataFieldValue(typeof(DaylightShift.timeZone).Name, PXDbType.VarChar, id) )) { if (rec != null) { row = new DaylightShift(); row.IsActive = true; row.Year = year; row.TimeZone = id; row.FromDate = rec.GetDateTime(0); row.ToDate = rec.GetDateTime(1); row.Shift = rec.GetInt32(2); } } if (row == null || string.IsNullOrEmpty(row.TimeZone)) { return(_systemProvider.FindTimeRegionByTimeZone(id).With(_ => _.GetAdjustmentRule(year))); } var start = new DateTime(year, 1, 1); var end = new DateTime(year, 12, 31); var delta = TimeSpan.FromMinutes(row.Shift ?? 0); var tranStart = GetTransitionTime((DateTime)row.FromDate); var tranEnd = GetTransitionTime((DateTime)row.ToDate); return(TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule(start, end, delta, tranStart, tranEnd)); }