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) { var row = e.Row as DaylightShift; if (row == null || row.Year == null || row.TimeZone == null) { return; } var isEditable = row.IsActive == true; if (isEditable) { var newDate = DateTime.UtcNow.Date; newDate = new DateTime((int)row.Year, newDate.Month, newDate.Day) + new TimeSpan(12, 0, 0); var start = newDate; var end = newDate.AddDays(1D); var shift = 60; var dts = new SystemTimeRegionProvider(). FindTimeRegionByTimeZone(row.TimeZone). With(_ => new DaylightSavingTime(newDate.Year, _)); if (dts != null && dts.IsActive) { start = dts.Start; end = dts.End; shift = (int)dts.Offset.TotalMinutes; } 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; } } }