Beispiel #1
0
        public static Recurrence[] GetRecurrences(string serviceBrokerGuid, string groupName,
                    string labServerGuid, string clientGuid, DateTime startTime, DateTime endTime)
        {
            TimeBlock range = new TimeBlock(startTime, endTime);
            List<Recurrence> recurrences = new List<Recurrence>();
            DbConnection connection = FactoryDB.GetConnection();

            // create sql command
            // command executes the "RetrieveRecurrenceIDs" stored procedure
            DbCommand cmd = FactoryDB.CreateCommand("Recurrences_Retrieve", connection);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add(FactoryDB.CreateParameter(cmd,"@sbGuid", serviceBrokerGuid, DbType.AnsiString, 50));
            cmd.Parameters.Add(FactoryDB.CreateParameter(cmd,"@group", groupName, DbType.String, 256));
            cmd.Parameters.Add(FactoryDB.CreateParameter(cmd,"@lsGuid", labServerGuid, DbType.AnsiString, 50));
            cmd.Parameters.Add(FactoryDB.CreateParameter(cmd,"@clientGuid", clientGuid, DbType.AnsiString, 50));
            cmd.Parameters.Add(FactoryDB.CreateParameter(cmd,"@start", DateUtil.SpecifyUTC(startTime), DbType.DateTime));
            cmd.Parameters.Add(FactoryDB.CreateParameter(cmd,"@end", DateUtil.SpecifyUTC(endTime), DbType.DateTime));

            try
            {
                DbDataReader dataReader = null;
                Recurrence recur = null;
                connection.Open();

                //recurrence_id,resource_id,recurrence_type,day_mask,recurrence_start_date,recurrence_num_days
                //recurrence_start_offset,recurrence_end_offset, quantum
                dataReader = cmd.ExecuteReader();
                while (dataReader.Read())
                {
                    recur = new Recurrence();
                    recur.recurrenceId = dataReader.GetInt32(0);
                    recur.resourceId = dataReader.GetInt32(1);
                    recur.recurrenceType = (Recurrence.RecurrenceType)dataReader.GetInt32(2);
                    recur.dayMask = dataReader.GetByte(3);
                    recur.startDate = DateUtil.SpecifyUTC(dataReader.GetDateTime(4));
                    recur.numDays = dataReader.GetInt32(5);
                    recur.startOffset = TimeSpan.FromSeconds((double)dataReader.GetInt32(6));
                    recur.endOffset = TimeSpan.FromSeconds((double)dataReader.GetInt32(7));
                    recur.quantum = dataReader.GetInt32(8);
                    TimeBlock[] blocks = recur.GetTimeBlocks();
                    foreach (TimeBlock tb in blocks)
                    {
                        if (range.Intersects(tb))
                        {
                            recurrences.Add(recur);
                            break;
                        }
                    }
                }
                dataReader.Close();
            }
            catch (Exception ex)
            {
                throw new Exception("Exception thrown in get recurrences", ex);
            }
            finally
            {
                connection.Close();
            }
            return recurrences.ToArray();
        }
Beispiel #2
0
        private void renderTimePeriods(HtmlTextWriter output, DateTime date, IEnumerable periods)
        {
            TimeBlock validTime = new TimeBlock(date.AddHours((int)minTOD.Hours), date.AddHours((int)maxTOD.TotalHours));
            if (periods != null)
            {
                IEnumerator enumTP = null;
                try
                {
                    enumTP = periods.GetEnumerator();
                    enumTP.MoveNext();
                    TimePeriod first = (TimePeriod)enumTP.Current;
                    if (first.Start > validTime.Start)
                    {
                        renderVoidTime(output, Convert.ToInt32((first.Start - validTime.Start).TotalSeconds));
                    }
                }
                catch (Exception ex) { }
                finally
                {
                    enumTP.Reset();
                }

                foreach (TimePeriod tp in periods)
                {
                    if (validTime.Intersects(tp))
                    {
                        TimeBlock valid = validTime.Intersection(tp);
                        if (tp.quantum == 0)
                        {
                            renderScheduledTime(output, valid);
                        }
                        else
                        {
                            int cellDur = 0;
                            int tDur = valid.Duration;
                            DateTime cur = valid.Start;
                            DateTime end = valid.End;

                            while (cur < end)
                            {
                                cellDur = defaultCellDuration -(cur.TimeOfDay.Minutes % defaultCellDuration);
                                if(cellDur < defaultCellDuration)
                                    cellDur += defaultCellDuration;
                                if ((end - cur.AddMinutes(cellDur)).TotalMinutes < (defaultCellDuration/2))
                                {
                                    cellDur += Convert.ToInt32((end - cur.AddMinutes(cellDur)).TotalMinutes );
                                }
                                cellDur = (cur.AddMinutes(cellDur) <= end) ? cellDur : (int)(end - cur).TotalMinutes;
                                renderAvailableTime(output, cur, tDur, tp.quantum, cellDur * 60, false);
                                cur = cur.AddMinutes(cellDur);
                                tDur = tDur - (cellDur * 60);

                                //cellDur = (cur.TimeOfDay.Minutes % defaultCellDuration) + defaultCellDuration;
                                //cellDur = (cur.AddMinutes(cellDur) <= end) ? cellDur : (int)(end - cur).TotalMinutes;
                                //renderAvailableTime(output, cur, tDur, tp.quantum, cellDur * 60, false);
                                //cur = cur.AddMinutes(cellDur);
                                //tDur = tDur - (cellDur * 60);
                            }
                        }
                    }
                }
            }
        }
        protected override void PerformDataBinding(IEnumerable schedulingData)
        {
            // don't bind in design mode
            if (DesignMode)
            {
                return;
            }
            base.PerformDataBinding(schedulingData);
            
            MinTOD = TimeSpan.Zero;
            MaxTOD = oneDay;
            // Verify data exists.
            if (schedulingData != null)
            {

                if (NumDays == 1)
                {
                    TimeSpan tmpTS;
                    TimeSpan tmpMinTOD = oneDay;

                    //Check the first timeBlock
                    IEnumerator eTB = schedulingData.GetEnumerator();
                    if (eTB.MoveNext())
                    {
                        tmpTS = (( TimeBlock)eTB.Current).Start.AddMinutes(userTZ).TimeOfDay;
                        if (tmpMinTOD > tmpTS)
                        {
                            tmpMinTOD = tmpTS;
                            MinTOD = tmpMinTOD;
                        }

                    }
                
                }
                if (bindReservations)
                { // should be Reservations
                    reservations = new List<Reservation>();
                    foreach (Reservation r in schedulingData)
                    {
                        reservations.Add(r);
                    }
                }
                else
                {  // should be TimePeriods
                    TimeBlock range = new TimeBlock(StartTime, EndTime);
                    periods = new List<TimePeriod>();
                    foreach (TimePeriod tp in schedulingData)
                    {
                        if(range.Contains(tp)){
                            periods.Add(tp);
                        }
                        else if (range.Intersects(tp))
                        {
                            TimeBlock tmpTB = range.Intersection(tp);
                            periods.Add(new TimePeriod(tmpTB.Start, tmpTB.Duration, tp.quantum));
                        }
                    }
                    TimeBlock[] scheduledTBs = TimeBlock.Remaining(new TimeBlock[] { range }, periods.ToArray());
                    if (scheduledTBs != null && scheduledTBs.Length > 0)
                    {
                        periods.AddRange(TimePeriod.MakeArray(scheduledTBs, 0));
                    }
                    periods.Sort();
                }
            }
            else
            {
                
                periods = new List<TimePeriod>();
                periods.Add(new TimePeriod(StartTime, EndTime, 0));
            }
        }
Beispiel #4
0
        protected override void PerformDataBinding(IEnumerable schedulingData)
        {
            // don't bind in design mode
            if (DesignMode)
            {
                return;
            }

            base.PerformDataBinding(schedulingData);

            // Verify data exists.
            if (schedulingData != null)
            {

                TimeSpan tmpTS;
                TimeSpan oneDay = TimeSpan.FromDays(1);
                maxTOD = TimeSpan.Zero.Subtract(TimeSpan.FromMinutes(userTZ));
                minTOD = oneDay;

                foreach (ITimeBlock tb in schedulingData)
                {
                    tmpTS = tb.Start.AddMinutes(userTZ).TimeOfDay;
                    if (minTOD > tmpTS)
                        minTOD = tmpTS;
                    tmpTS = tmpTS.Add(TimeSpan.FromSeconds(tb.Duration));
                    if (tmpTS.TotalHours < 24)
                    {
                        if (maxTOD < tmpTS)
                        {
                            maxTOD = tmpTS;
                        }
                    }
                    else if (tmpTS.TotalHours == 24)
                    {
                        maxTOD = tmpTS;
                    }
                    else
                    {
                        minTOD = TimeSpan.Zero;
                        maxTOD = TimeSpan.FromHours(24);
                        break;
                    }
                }
                if (bindReservations)
                { // should be Reservations
                    reservations = new List<Reservation>();
                    foreach (Reservation r in schedulingData)
                    {
                        reservations.Add(r);
                    }
                }
                else
                {  // should be TimePeriods
                    TimeBlock range = new TimeBlock(StartTime, EndTime);
                    periods = new List<TimePeriod>();
                    foreach (TimePeriod tp in schedulingData)
                    {
                        if(range.Contains(tp)){
                            periods.Add(tp);
                        }
                        else if (range.Intersects(tp))
                        {
                            TimeBlock tmpTB = range.Intersection(tp);
                            periods.Add(new TimePeriod(tmpTB.Start, tmpTB.Duration, tp.quantum));
                        }
                    }
                    TimeBlock[] scheduledTBs = TimeBlock.Remaining(new TimeBlock[] { range }, periods.ToArray());
                    if (scheduledTBs != null && scheduledTBs.Length > 0)
                    {
                        periods.AddRange(TimePeriod.MakeArray(scheduledTBs, 0));
                    }
                    periods.Sort();
                }
            }
            else
            {
                minTOD = TimeSpan.Zero;
                maxTOD = TimeSpan.FromHours(24);
                periods = new List<TimePeriod>();
                periods.Add(new TimePeriod(StartTime, EndTime, 0));
            }
        }
 private void renderTimePeriods(HtmlTextWriter output, DateTime date, List<TimePeriod> periods)
 {
     TimeBlock validTime = new TimeBlock(date.AddHours((int)minTOD.Hours), endTime);
     TimeBlock valid;
     DateTime cur = DateTime.MinValue;
     DateTime end = DateTime.MinValue;
     if (periods != null && periods.Count >0)
     {
         try
         {
             TimePeriod first = periods[0];
             if (first.Start > validTime.Start)
             {
                 renderVoidTime(output, Convert.ToInt32((first.Start - validTime.Start).TotalSeconds));
             }
         }
         catch (Exception ex) {
             throw ex;
         }
         foreach (TimePeriod tp in periods)
         {
             if (validTime.Intersects(tp))
             {
                 valid = validTime.Intersection(tp);
                 cur = valid.Start;
                 end = valid.End;
                 if (tp.quantum == 0)
                 {
                     renderScheduledTime(output, valid);
                 }
                 else
                 {
                     int cellDur = 0;
                     int tDur = valid.Duration;
                     
                     while (cur < end && cur < endOfDay)
                     {
                         cellDur = defaultCellDuration -( cur.TimeOfDay.Minutes % defaultCellDuration);
                         if(cellDur < defaultCellDuration) 
                             cellDur += defaultCellDuration;
                         if ((end - cur.AddMinutes(cellDur)).TotalMinutes < (defaultCellDuration/2))
                         {
                             cellDur += Convert.ToInt32((end - cur.AddMinutes(cellDur)).TotalMinutes );
                         }
                         cellDur = (cur.AddMinutes(cellDur) <= endOfDay) ? cellDur : (int)(endOfDay - cur).TotalMinutes;
                         renderAvailableTime(output, cur, tDur, tp.quantum, cellDur * 60, false);
                         cur = cur.AddMinutes(cellDur);
                         tDur = tDur - (cellDur * 60);
                     }
                 }
             }
         } // End of foreach period
         if (end < endOfDay)
         {
             renderScheduledTime(output, new TimeBlock(end,endOfDay));
         }
     }
 }