示例#1
0
        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);
                    }
                }
            }
        }
示例#2
0
        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;
                }
            }
        }