I am trying to find a way to load Rooms into Resources section in Telerik Scheduler UI. The Scheduler UI is bound to theMeeting
Model where a user can book rooms for meeting from the Room. What I am trying to do is find a way to bind resources "Rooms" from another controller and Model and How to change the resource when user select deferent office
From View
<div class="row">
<div class="col-md-12">
<ul class="nav nav-tabs" id="officeTab"><li><a class="office" href="#" data-value="3">London</a></li><li><a class="office" href="#" data-value="5">Hanover</a></li><li><a class="office" href="#" data-value="4">Owen Sound</a></li><li><a class="office" href="#" data-value="1">Seaforth</a></li><li><a class="office" href="#" data-value="6">St. Thomas</a></li><li><a class="office" href="#" data-value="2">Stratford</a></li><li><a class="office" href="#" data-value="8">Woodstock</a></li></ul>
</div>
</div>
<div>
@(Html.Kendo().Scheduler<Meeting>().Name("scheduler").Date(new DateTime(2017, 5, 13))
.StartTime(new DateTime(2017, 5, 13, 7, 00, 00))
.Editable(true)
.Views(views =>
{
views.DayView();
views.AgendaView();
})
.Height(600)
.Timezone("Etc/UTC")
.Group(group => { group.Resources("Rooms"); group.Date(true); })
.Resources(resource =>
{
resource.Add(m => m.RoomId)
.Title("Room")
.Name("Rooms")
.DataTextField("Text")
.DataValueField("Value")
.DataColorField("Color")
.DataSource(d => d.Read("Get", "Room"));
}).DataSource(d => d
.WebApi()
.Model(m =>
{
m.Id(f => f.RecordId);
m.Field(f => f.Title).DefaultValue("No title");
m.Field(f => f.Title).DefaultValue("No title");
})
.Events(events => events.Error("error_handler"))
.Read(read => read.Action("Get", "Meeting"))
.Create(create => create.Action("Post", "Meeting"))
.Destroy(destroy => destroy.Action("Delete", "Meeting", new { recordId = "{0}" }))
.Update(update => update.Action("Put", "Meeting", new { recordId = "{0}" }))
).Deferred())
@section scripts {
@Html.Kendo().DeferredScripts()
}
<script>
function error_handler(e) {
var errors = $.parseJSON(e.xhr.responseText);
if (errors) {
alert("Errors:\n" + errors.join("\n"));
}
}
</script>
</div>
//MeetingController
using Kendo.Mvc.Extensions;
using Kendo.Mvc.UI;
using Microsoft.AspNetCore.Mvc;
using RoomBooking.Application.Couties.Queries;
using RoomBooking.Application.Rooms.Queries;
using RoomBooking.Domain;
namespace RoomBooking.Presentation.Controllers
{
[Route("api/v1/[controller]")]
public class MeetingController : Controller
{
[HttpGet]
public DataSourceResult Get([DataSourceRequest]DataSourceRequest request)
{
//return meetingData.GetAll().ToDataSourceResult(request);
return this.meetingService.GetAll().ToDataSourceResult(request); ;
}
public MeetingController(ISchedulerEventService<MeetingModel> meetingService, ISchedulerEventService<ListRoomModel> resourcesService)
{
this.meetingService = meetingService;
this.resourcesService = resourcesService;
}
private readonly ISchedulerEventService<MeetingModel> meetingService;
private readonly ISchedulerEventService<ListRoomModel> resourcesService;
}
}
//RoomController
using Kendo.Mvc.Extensions;
using Kendo.Mvc.UI;
using Microsoft.AspNetCore.Mvc;
using RoomBooking.Application.Couties.Queries;
using RoomBooking.Application.Rooms.Queries;
using RoomBooking.Domain;
namespace RoomBooking.Presentation.Controllers
{
[Route("api/v1/[controller]")]
public class RoomController : Controller
{
[HttpGet]
public DataSourceResult Get([DataSourceRequest]DataSourceRequest request)
{
//return meetingData.GetAll().ToDataSourceResult(request);
//return this.getRoomsListQuery.Execute().ToDataSourceResult(request);
var result = this.resourcesService.GetAll().ToDataSourceResult(request);
return result;
}
public RoomController(ISchedulerEventService<ListRoomModel> resourcesService)
{
this.resourcesService = resourcesService;
}
private readonly ISchedulerEventService<ListRoomModel> resourcesService;
}
}
I found how to load Items into Resources using this example from asp.net MVC you can use the same method in asp.net core the link https://github.com/telerik/ui-for-aspnet-mvc-examples/tree/master/scheduler/scheduler-resource-editing
@using Kendo.Mvc.UI
@using Kendo.Mvc.UI.Fluent
@using RoomBooking.Domain
@{
ViewData["Title"] = "Home Page";
}
<div class="row">
<div class="col-md-12">
<ul id="officeTab" class="nav nav-tabs"></ul>
</div>
</div>
<div>
@(Html.Kendo().Scheduler<Meeting>().Name("scheduler").Date(new DateTime(2017, 5, 13))
.StartTime(new DateTime(2017, 5, 13, 7, 00, 00))
.Editable(true)
.Views(views =>
{
views.DayView();
views.AgendaView();
})
.Height(600)
.Timezone("Etc/UTC")
.Group(group => { group.Resources("Rooms"); group.Date(true); })
.Resources(resource =>
{
//resource.Add(m => m.RoomId).Title("Room").Name("Rooms").DataTextField("Text").DataValueField("Value").DataColorField("Color").BindTo(new[]
//{
// new {Text = "Meeting Room 101", Value = 1, Color = "#6eb3fa"},
// new {Text = "Meeting Room 201", Value = 2, Color = "#f58a8a"}
//});
resource.Add(m => m.RoomId)
.Title("Room")
.Name("Rooms")
.DataTextField("Text")
.DataSource(
ds => ds.Custom()
.Type("aspnetmvc-ajax")
.Transport(t => t.Read(r =>
r.Action("readRoom", "Room")))
.Schema(s => s.Data("Data").Total("Total").Errors("Errors").Model(m =>
{
m.Id("Value");
m.Field("Value", typeof(int));
m.Field("Text", typeof(string));
m.Field("Color", typeof(string));
})
));
})
.DataSource(d => d
.WebApi()
.Model(m =>
{
m.Id(f => f.RecordId);
m.Field(f => f.Title).DefaultValue("No title");
m.Field(f => f.Title).DefaultValue("No title");
})
.Events(events => events.Error("error_handler"))
.Read(read => read.Action("Get", "Meeting"))
.Create(create => create.Action("Post", "Meeting"))
.Destroy(destroy => destroy.Action("Delete", "Meeting", new { recordId = "{0}" }))
.Update(update => update.Action("Put", "Meeting", new { recordId = "{0}" }))
).Deferred())
@section scripts {
@Html.Kendo().DeferredScripts()
}
<script>
function error_handler(e) {
var errors = $.parseJSON(e.xhr.responseText);
if (errors) {
alert("Errors:\n" + errors.join("\n"));
}
}
</script>
</div>