In a RadScheduler with a custom provider (inheriting from SchedulerProviderBase), there is no way to get "expanded" appointments (i.e. masters plus occurrences minus exceptions). I devised a solution (as suggested in http://www.telerik.com/forums/scheduler-exporting-a-range-of-appointments), using the Occurrences property of RecurrenceRule: public IEnumerable<Appointment> GetExpandedAppointments(RadScheduler owner, DateTime start, DateTime end) { var result = new List<Appointment>(); foreach (Appointment a in this.GetAppointments(owner)) { // see http://www.telerik.com/forums/scheduler-exporting-a-range-of-appointments if (a.RecurrenceState == RecurrenceState.Master) { RecurrenceRule parsedRule; RecurrenceRule.TryParse(a.RecurrenceRule, out parsedRule); parsedRule.SetEffectiveRange(start, end); int nc = 0; foreach (DateTime occurrence in parsedRule.Occurrences) { Appointment app = a.Clone(); app.ID = a.ID + "_" + ++nc; app.Start = occurrence; app.End = occurrence.Add(a.Duration); app.RecurrenceRule = null; app.RecurrenceParentID = a.ID; app.RecurrenceState = RecurrenceState.Occurrence; result.Add(app); } } else if (a.RecurrenceState != RecurrenceState.Occurrence) { result.Add(a); } } return result; } } I think this functionality can be part of SchedulerProviderBase, there is no custom logic. Thanks Regards Mauro
When working with All-day appointments, it would be really nice to be able to resize them in the week view. In some cases when only working with All-day appointments, we were able to hide the time part of the Scheduler control entirely, but in this case the week view is almost pointless since our end users want to resize appointments a lot!
https://www.screencast.com/t/KlQtYDOxl Workaround: var $ = $ || $telerik.$; var $T = Telerik.Web.UI; var $TS = $T.Scheduler, $TSR = $TS.Rendering, $DateTime = $TS.DateTime; var $SB = Telerik.Web.StringBuilder, timePerMinute = 60000, timePerHour = timePerMinute * 60, timePerDay = timePerHour * 24, daysInWeek = 7, roundedCornersHeight, anchorDateFormat = "yyyy-MM-dd"; $TSVM = Telerik.Web.UI.Scheduler.Views.Month; $TSVM.Model.prototype._createTimeSlot = function (rawIndex, startTime, element) { if (startTime.getHours() == 23) { startTime = $DateTime.add(startTime, 2 * timePerHour); } return new $TSVM.TimeSlot(rawIndex, startTime, element); } $TSVM.Model.prototype.getTimeSlotFromDomElement = function (domElement) { var rawIndex = this._getRawIndexFromDomElement(domElement), startTime = this._getTimeFromDomElement(domElement); if (startTime.getHours() == 23) { startTime = $DateTime.add(startTime, 2 * timePerHour); } return new $TSVM.TimeSlot(rawIndex, startTime, domElement); } Telerik.Web.UI.Scheduler.Rendering.MonthViewRenderer.prototype._updateColumnHeaders = function () { var renderer = this, dayHeaderDateFormat = this._model.get_dayHeaderDateFormat(), firstDayHeaderDateFormat = this._model.get_firstDayHeaderDateFormat(), currentMonth = renderer._owner.get_selectedDate().getMonth(), visibleRangeStart = renderer._model.get_visibleRangeStart(); $.each(this._contentTables, function () { var dateLabels = $("td div.rsDateWrap div.rsDateBox a", this), dayStart = visibleRangeStart, weekDayIndex = 0, weekStart = new Date(dayStart.getTime()); dateLabels.each(function () { var isFirstVisibleDateOfMonth = $DateTime.subtract(dayStart, visibleRangeStart) == 0 && dayStart.getMonth() == currentMonth; var dateHeaderText; if (renderer._owner._renderMode == $T.RenderMode.Mobile) { dateHeaderText = dayStart.getDate().toString(); } else if (dayStart.getDate() == 1 || isFirstVisibleDateOfMonth) { dateHeaderText = dayStart.localeFormat(firstDayHeaderDateFormat); } else { dateHeaderText = renderer._getFormattedDateText(dayStart, dayHeaderDateFormat); } this.href = "#" + dayStart.format(anchorDateFormat); this.innerHTML = dateHeaderText; this.title = dayStart.localeFormat(Sys.CultureInfo.CurrentCulture.dateTimeFormat.ShortDatePattern); var otherMonthCell = currentMonth != dayStart.getMonth(), dateWrapElement = this.parentNode.parentNode.parentNode; $(dateWrapElement).toggleClass('rsOtherMonth', otherMonthCell); if (weekDayIndex == renderer._weekLength - 1) { // Move to the next week, skipping invisible days. weekStart = $DateTime.add(weekStart, 7 * timePerDay); dayStart = new Date(weekStart.getTime()); weekDayIndex = 0; } else { dayStart = $DateTime.add(dayStart, timePerDay); weekDayIndex++; } if (dayStart.getHours() == 23) { dayStart = $DateTime.add(dayStart, 2 * timePerHour); } else if (dayStart.getHours() == 1) { dayStart = $DateTime.add(dayStart, -timePerHour); } if (weekStart.getHours() == 23) { weekStart = $DateTime.add(weekStart, 2 * timePerHour); } else if (weekStart.getHours() == 1) { weekStart = $DateTime.add(dayStart, -timePerHour); } // Wrappers are cleared here to avoid second // traversal of the cells. renderer._clearExtraWraps(dateWrapElement); }); }); }
Hi, Please suggest me how can we show only working hour in timeline view in rad scheduler and hide non working hour. Currently in timeline view all 24 hour time slot is showing , but I want to show only working hour in time slot and hide rest of non working hour for there. Screen shot for current view and desired view is attached below .
Hi
I would like an extended feature to the iCal button that you get with RadScheduler which just deliver the one ical file type,
however it is typical on many event sites to offer alternative formats such as "[Google Outlook iCal Yahoo Apple]" because a user might be on an iPhone and so the text format might have the header information changed to make it natral for an iOS user, where as on an Android device making it natral to a google calendar would be a better fit.
It would be useful in the UserAgent was sniffed to offer a selection that is a natral fit of that environment.
An optional cookie could be left behind on that device to inform the control of the users preference so that is the head of the list.
This means that if Zoom or EventBrite used such a control (which they do) it would mean that your UI offers calendar events that connect to you, and so your UI is a little more sticky.
Sure we can say that the iCal control would do, as many calender's can cope, we could also show the button offering all the major brands and just render exactly the same content then its user error if the appointment not saved. But because Telerik is a leading UX brand, we don't want to know its an ical file we just want it to be a friction-less perfect fit into the users' calendar - they don't need to think it just gets done.
Thanks.
Doug
RE:
https://pages.jetbrains.com/dotnet-days-2020/web
https://splashthat.com/
https://support.google.com/calendar/thread/3231927?hl=en
We have noticed that when you choose 'Yearly' in the recurrence editor that the text 'Recur every' shows up twice in the editor. If you change it to 'Monthly' or any other type of recurrence, this does not happen, and the text only shows up once.
The issue can be replicated in Binding to Generic List live demo.
In http://www.telerik.com/account/support-tickets/view-ticket.aspx?threadid=631805 Plamen indicated a feature request was created to implement CRUD via ODatabinding for the RadScheduler control but I can't find it. Currently it's read-only but we really would like to be able to maintain appointments as well via OData because we already have that API available in our product. This way we don't have to build\maintain a new web service.
We'd like to control how simultaneous appointments are displayed. It would be nice if the appointments are shown above eachother, as it were layers with transparancy. If that's not possible than we'd like to control the placing of the appointments. For example the appointments in order of priority from left to right.
In firefox, the scheduler adds additional option buttons and checkboxes.
There is an OnClientTimeSlotClick event that fires if the user clicks in a single time slot. If the user clicks in one time slot and drags to select multiple time slots before releasing the mouse button no event is fired. It would be useful if the existing event was fired in this case, or another event was added to fire in this case.
When moving from 2.611.45 to the latest 2.717.45 ASP.NET AJAX binaries, we are experiencing a problem with the client-side drag ('move') of appointments. Repro steps: * Unpack the attached MVC project (bare-bones...does web-service binding on an XML document). Run the project (just go to the /Home/Index action). You should see the RadScheduler there. * Create an appointment of AT LEAST 90 MINUTES duration. This should succeed. * Drag the appointment up/down. I have included a piece of sample JavaScript which prints out the eventArgs.get_targetSlot().get_startTime() value. Expected results: * The logged value coincides with the visual position of the start of the appointment while it is being dragged. Actual results: * The logged value is offset by a constant amount compared to what is being shown on the Scheduler during the drag. For example, the appointment will appear to be shown at 12:00 but the value retrieved in script will be 12:30. This only seems to be reproducible for appointments of 90 minutes or longer. It does not occur with your 2.611.45 binaries. I noticed that you guys changed your implementation of client-side methods like _startDrag, _raiseMoveEnd, _finishDrag etc in this latest release...it might have something to do with that, but I didn't have time to go debugging your script. (Note: The attached zip is only a zip of the cleaned project file. The only non-standard MVC4 assemblies are your Telerik assemblies, so you'll just have to fix up the path to those so that the project builds.)
can be replicated on this on-line demo-http://demos.telerik.com/aspnet-ajax/scheduler/examples/timelineview/defaultcs.aspx