コード例 #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;
            }
        }
コード例 #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;
                }
            }
        }
コード例 #3
0
        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);
        }
コード例 #4
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;
                }
            }
        }
コード例 #5
0
 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);
            }