Hi,
My scheduler is working until the moment i add resource grouping, it will throw this error:
kendo.all.js:5317 Uncaught TypeError: Cannot read property 'length' of undefined at r.sort (kendo.all.js:5317) at r._sortForGrouping (kendo.all.js:5403) at r.groupBy (kendo.all.js:5376) at r.group (kendo.all.js:5354) at Function.r.process (kendo.all.js:5525) at init._queryProcess (kendo.all.js:6941) at init._process (kendo.all.js:6931) at init.success (kendo.all.js:6683) at success (kendo.all.js:6610) at Object.ye.extend.read.n.success (kendo.all.js:5599)
The line that causes the error is:
group: { resources: ["Colleges"]},
My code and a sample of the datasource json response are below:
var tz = "Asia/Dubai"; $(document).ready(function () { $("#scheduler").kendoScheduler({ date: new Date(), selectable: true, editable: { template: $("#editor").html(), editRecurringMode: "dialog" }, edit: function (e) { console.log(e.event); e.preventDefault(); if(e.event.id!=0) { url = '@Url.Action("Details", new { id = "id" })'; url = url.replace('id', e.event.id); } else { var selectedStartDate = ("0"+(e.event.start.getDate())).slice(-2) + "-" + ("0"+(e.event.start.getMonth()+1)).slice(-2) + "-" + e.event.start.getFullYear() + " " + ("0" + e.event.start.getHours()).slice(-2) + ":" + ("0" + e.event.start.getMinutes()).slice(-2); var selectedEndDate = ("0"+(e.event.end.getDate())).slice(-2) + "-" + ("0"+(e.event.end.getMonth()+1)).slice(-2) + "-" + e.event.end.getFullYear() + " " + ("0" + e.event.end.getHours()).slice(-2) + ":" + ("0" + e.event.end.getMinutes()).slice(-2); url= '@Url.Action("Create")?startDate=' + selectedStartDate+'&endDate=' + selectedEndDate; } window.location = url; }, change: function (e) { $("#viewBTN").prop('disabled', (e.events==null || e.events.length!=1)); canCancel = (e.events!=null && e.events.length==1); if (canCancel == true) canCancel = canCancel && e.events[0].StatusID == @CarBookingStatusTypes.Approved.ToInt(); if (canCancel == true) canCancel = canCancel && e.events[0].FromDate > new Date(); $("#deleteBTN").prop('disabled', !canCancel); $("#editBTN").prop('disabled', (e.events==null || e.events.length!=1)); var canAttendTo = (e.events!=null && e.events.length==1); if (canAttendTo == true) canAttendTo = canAttendTo && e.events[0].StatusID == @CarBookingStatusTypes.Pending.ToInt(); $("#attendToBTN").prop('disabled', !canAttendTo); } , views: [ { type: "day", showWorkHours: true, showWorkHours: true, workWeekStart: 7, workWeekEnd: 4 }, { type: "week", selected: true, showWorkHours: true, workWeekStart: 7, workWeekEnd: 4 }, "month" ], timezone: tz, dataSource:{ batch: false, serverFiltering: true, "type": "aspnetmvc-ajax", transport: { read: { url: "/CarBookings/GetAllBookings" , dataType: "json" , data: function (e) { var scheduler = $("#scheduler").data("kendoScheduler"); var result = { FromDate: scheduler.view().startDate().toISOString(), ToDate: new Date(scheduler.view().endDate().getTime() + ((23 * 60 * 60 * 1000) + (59 * 60 * 1000) + (59 * 1000)+ 999)).toISOString() ,skip: scheduler.dataSource.skip(), take: scheduler.dataSource.take(), sort:scheduler.dataSource.sort(), page:scheduler.dataSource.page() } return result; } }, destroy: { url: "/OffenderSchedules/Delete", dataType: "json" } , parameterMap: function (data, operation) { console.log("operation:" + operation); if (operation === "update" || operation === "create") { data.Start = kendo.toString(kendo.parseDate(data.Start), "G"); data.End = data.Start; return JSON.stringify({ postedItem: data }); } else if (operation === "read") { var scheduler = $("#scheduler").data("kendoScheduler"); var endDate = new Date(scheduler.view().endDate().getTime() + ((23 * 60 * 60 * 1000) + (59 * 60 * 1000) + (59 * 1000))); if (data.filter === undefined) { data = $.extend({ filter: { logic: "and", filters: [ { operator: "gte", field: "FromDate", value: kendo.toString(kendo.parseDate(scheduler.view().startDate()), "G") }, { operator: "lte", field: "ToDate", value: kendo.toString(kendo.parseDate(endDate), "G") } ] } }, data); } else if (data.filter.filters === undefined) { data = $.extend({ filters: [ { operator: "gte", field: "FromDate", value: kendo.toString(kendo.parseDate(scheduler.view().startDate()), "G") }, { operator: "lte", field: "ToDate", value: kendo.toString(kendo.parseDate(endDate), "G") } ] } , data.filter); } else { data.filter.filters.push({ logic: "and", filters: [ { operator: "gte", field: "FromDate", value: kendo.toString(kendo.parseDate(scheduler.view().startDate()), "G") }, { operator: "lte", field: "ToDate", value: kendo.toString(kendo.parseDate(endDate), "G") } ] }); } } return data; } } , group: { resources: ["Colleges"]}, resources: [ { field: "collegeID", name: "Colleges", dataSource:[ { text: "Central Services", value: 5, color: "#6eb3fa" } , { text: "College 2", value: 4, color: "#f58a8a" } ], title: "College" } ], schema: { parse: function (response) { for (var i = 0; i < response.Data.length; i++) { if (response.Data[i].VehicleDisplayName == null) response.Data[i]['Title'] = "To:" + response.Data[i].ToLocationText + ', Passengers:' + response.Data[i].CarBookingPassengersList; else response.Data[i]['Title'] = "#:" + response.Data[i].VehicleNumber + "," + response.Data[i].VehicleDisplayName + ",To:" + response.Data[i].ToLocationText + ',Passengers:' + response.Data[i].CarBookingPassengersList; } return response; }, data: "Data", model: { id: "ID", fields: { ID: { from: "ID", type: "number" }, collegeID: { from: "CollegeID",type: "number", nullable: true }, title: { from: "Title", validation: { required: true } }, start: { type: "date", from: "FromDate" }, end: { type: "date", from: "ToDate" }, description: { from: "VehicleDisplayName" }, recurrenceId: { from: "RecurrenceID" }, recurrenceRule: { from: "RecurrenceRule" }, recurrenceException: { from: "RecurrenceException" }, isAllDay: { from: "IsAllDay" }, startTimezone: { type: "string", defaultValue: tz }, endTimezone: { type: "string", defaultValue: tz } } } }, sort:{ field:"FromDate",dir:"asc"} ,change: function(e) { } } }); });
datasource response sample:
{"Data":[{"CreatedByDriver":null,"ID":11,"ApprovalStatusID":null,"StatusID":526,"VehicleID":null,"VehicleNumber":null,"FromDate":"\/Date(1509393600000)\/","ToDate":"\/Date(1509485400000)\/","CreatedByID":"a5cc4472-055a-41f1-96ac-ae024f20869f","DateCreated":"\/Date(1509432711343)\/","LastUpdatedByID":null,"DateLastUpdated":null,"CreatedByName":"User1 ","LastUpdatedByName":null,"StatusName":"Pending","CollegeID":5,"CollegeName":"College 1","FromLocationID":5,"ToLocationID":4,"FromLocationName":"Central Services","FromLocationText":"Central Services","ToLocationName":"College 2","ToLocationText":"College 1","RecurrenceID":null,"RecurrenceRule":null,"RecurrenceException":null,"IsAllDay":false,"CarBookingComments":"I would need to book a car ","ApprovalComments":null,"Vehicle":null,"VehicleDisplayName":","CarBookingPassengersList":"","DriverID":null,"DriverName":null,"DriverAspNetUserName":null,"IsEmergency":true,"PassengerIDs":null,"CarBookingPassengerNames":[],"CreatedByCollegeName":null}]
Thanks
Madani