Ejemplo n.º 1
0
        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;
            }
        }
Ejemplo n.º 2
0
        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;
                }
            }
        }
Ejemplo n.º 3
0
        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;
                }
            }
        }
Ejemplo n.º 4
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);
                    }
                }
            }
        }
Ejemplo n.º 5
0
        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);
            }
        }
Ejemplo n.º 6
0
            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));
            }