I use the following code to show the calendar:
<div class="section">
<script id="event-template" type="text/x-kendo-template">
<div class="item-template" title="#: title #">
<div class="title">#: title #</div>
</div>
</script>
<div class="daily-container">
@(Html.Kendo().Scheduler<WaterFlowReadingModel>()
.Name("Daily")
.Events(e =>
{
e.Navigate("scheduler_navigate");
e.DataBound("scheduler_databound");
})
.Date((DateTime)ViewBag.Month)
.StartTime((DateTime)ViewBag.Month)
.EventTemplateId("event-template")
.Views(v =>
{
v.MonthView();
})
.DataSource(d =>
d.Model(m =>
{
m.Id(f => f.Id);
m.RecurrenceId(f => f.RecurrenceRule);
m.Field(f => f.Title).DefaultValue("No title");
}).ServerOperation(true)
.Read(read => read.Action("GetMetricDaily", "Metric",
new { type = 1, start = ViewBag.Month.AddMonths(-1), end = ViewBag.Month.AddMonths(1) }))
))
</div>
</div>
Javascript:
function scheduler_navigate(e) {
var start = kendo.format('{0:d}', this.view().startDate());
var end = kendo.format('{0:d}', this.view().endDate());
$.ajax({
url: "@(Url.Action("GetMetricDaily", "Metric"))",
data: {
start: start,
end: end,
}, success: function () {
var scheduler = $("#Daily").data("kendoScheduler");
scheduler.refresh();
}
});
}
function scheduler_databound(e) {
var today = e.date;
var scheduler = $("#Daily").data("kendoScheduler");
var newDate = scheduler.date();
console.log(newDate, today);
$.ajax({
url: "@(Url.Action("GetStatistics", "Metric"))",
dataType: "json",
data: {
month: kendo.format('{0:d}', newDate),
}, success: function (data) {
//console.log(data);
date = new Date(data.ReportingPeriod.match(/\d+/)[0] * 1);
$("#TotalMonthlyDischargeVolume").val(data.TotalMonthlyDischargeVolume);
$("#NumberOfDaysOfDischargeToSewer").val(data.NumberOfDaysOfDischargeToSewer);
$("#MaximumDailyFlow").val(data.MaximumDailyFlow);
$("#ReportingPeriod").val(kendo.toString(date, "Y"));
}
});
};
The problem is that when I select a different month, no data at all is shown unless I select the current month again, which then shows current data.
Controller code:
public ActionResult GetMetricDaily([DataSourceRequest] DataSourceRequest request, DateTime start, DateTime end)
{
using (var db = new DatabaseContext())
{
// Water flows
var lastMonth = db.WaterFlows
.Where(w => w.TimeStamp > start && w.TimeStamp < end && w.TotalizerReading >= 1)
.Select(x => new WaterFlowReadingModel()
{
Title = x.TotalizerReading.ToString(),
Start = x.TimeStamp,
End = x.TimeStamp,
Id = x.Id,
}).ToList();
// pH Readings
var result = db.pHReadings.Where(w => w.TimeStamp > start && w.TimeStamp < end)
.GroupBy(o => EntityFunctions.TruncateTime(o.TimeStamp))
.Select(g => new
{
Date = g.Key,
Min = g.Min(o => o.pHValue),
Max = g.Max(o => o.pHValue),
Avg = g.Average(o => o.pHValue)
})
.ToList();
var output = new List<WaterFlowReadingModel>();
foreach (var item in result)
{
var title = $"PH - Min: {item.Min:F} / Max: {item.Max:F} / Avg: {item.Avg:F}";
output.Add( new WaterFlowReadingModel()
{
Title = title,
Start = item.Date ?? DateTime.Today,
End = item.Date ?? DateTime.Today,
Id = 0
});
}
lastMonth.AddRange(output);
return Json(lastMonth.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
}
}
I have a scheduler that I've created in MVC and reset the data with via javascript
@(Html.Kendo().Scheduler<MyProject.Models.Schedule.Kendo.ISchedulerData>()
.Name("edit-scheduler")
.Date((DateTime)MyProject.Helper.Date.StringToDateTime(ViewBag.EventHeader.StartDate.ToString("MM/dd/yyyy")))
.StartTime((DateTime)MyProject.Helper.Date.StringToDateTime(ViewBag.EventHeader.StartDate.ToString("MM/dd/yyyy")))
.EndTime((DateTime)MyProject.Helper.Date.StringToDateTime(ViewBag.EventHeader.EndDate.ToString("MM/dd/yyyy")))
.EventTemplate(
"#=eventTemplate(SupplierNumber,SupplierName, MeridiemDeliveryTime, OrdersReadable, OrderGroup1,OrderGroup2,OrderGroup3,OrderGroup4,OrderGroup5,OrderGroup6,OrderGroup7,OrderGroup8,IsEvent,Color)#"
)
.Views(views =>
{
views.MonthView(month =>
{
month.Selected(true);
month.EventsPerDay(20);
month.AdaptiveSlotHeight(true);
month.EventHeight("auto");
month.EventSpacing(5);
});
})
.Timezone("EST")
.Editable(true)
.Editable(editable => editable.Confirmation(false))
.Resources(resource =>
{
resource.Add(m => m.ActiveSupplierNumber)
.Title("Owner")
.DataTextField("Text")
.DataValueField("Value")
.DataColorField("Color")
.BindTo(ViewBag.Colors);
})
.DataSource(d => d
.Read(read => read.Action("GetStoreSchedule", "ScheduleData").Data("scheduler_Data"))
)
.Events(e =>
{
e.Remove("scheduler_Remove");
e.Edit("scheduler_Edit");
e.MoveEnd("scheduler_MoveEnd");
e.MoveStart("scheduler_MoveStart");
e.ResizeStart("scheduler_ResizeEnd");
e.DataBound("scheduler_DataBound");
})
)
With my scheduler_Data() like this
var _eventHeaderId = 1;
var _stageId = '0B579CE9-2CB8-4ACF-9EC1-892378632823'; // This changes frequently
function scheduler_Data() {
var store = $("#edit-store-dropdown").data("kendoDropDownList").value();
var supplier = $("#edit-supplier-dropdown").data("kendoDropDownList").value();
var sdata = {};
sdata["eventHeaderId"] = parseInt(_eventHeaderId);
sdata["stageId"] = _stageId;
sdata["store"] = parseInt(store);
sdata["supplier"] = parseInt(supplier);
return sdata;
}
The first time the page loads, there is no store, the controller does not return data, the scheduler remains blank (exactly as expected)
As I do other things on the page, the store dropdown has a value, and I run some code that updates the _stageId and does some database work, then it refreshes the scheduler, which basically is just me doing this.
scheduler.dataSource.read(); scheduler.refresh();
This all works perfectly. My scheduler populates from the database. However, if I click into a day (triggering scheduler_Edit) - it creates the event offset by one day, if there is at least 3 other events in the previous day. So if Sunday has 3 events, and I click Monday, it adds the event to Sunday. If I have 2 events on Sunday and click Monday, it adds the event to Monday
So I put some code into scheduler_Edit()
console.log("You clicked " + e.event.start);
If I cancel my custom edit window, and click in the same place on scheduler it populates exactly where it should
And the console bears that out
And from that point, it adds to the correct day until I redo the refresh scheduler code
scheduler.dataSource.read(); scheduler.refresh();
Then it happens again?
Am I doing something weirdly wrong?
i am getting the error when i use @html.kendo()
it showing are you missing any directives
>please suggest any solution
Hi everyone,
I'm in the process of developing an ASP.NET MVC application that should provide the ability to record the time worked by an employee with a chart.
I use the Telerik UI Scheduler for this. The integration and use in general works perfectly, but the EditorTemplate gives me problems. (see code)
As you can see, I'm trying to open data from a database in a DropDown using "ViewData" within the EditorTemplate. In the index function (ActionResult) in the controller I have declared the "ViewData", which gets the data from the database via a service.
Now the problem: If I want to use the "ViewData", the EditorTemplate can no longer be built. (See error in browser console -> pic in attachement)
If I use this ViewData in a PartialView it works without problems.
However, if I comment out this part in the controller (from "var projects..." to "...ToList();") and leave the EditorTemplate the same, everything works again and I can open the EditorTemplate via double-click on the scheduler. But I still can't get the data.
What do I have to do so that I can use the data from the "ViewData" in the EditorTemplate?
I hope someone can help me.
Controller: (TimeTrackingController.cs)
public async Task<ActionResult> Index() //TODO: ActionResult
{
// ignore this below ----------------------------------------------
var overview = new ActivityOverviewModel();
overview.PaList = new List<PA>
{
new PA
{
Id = 1,
Number = 201885445,
PaName = "Inbetriebnahme",
OrderNumber = 201745965,
OrderName = "Ein sehr schwieriger Auftrag",
ProjectNumber = 2019788458,
ProjectName = "Laser für Gießerei programmieren",
CompanyName = "Constellium Rolled Products",
PlannedHours = 70,
CurrentHours = 80,
PaLeft = false,
TechnicallyReady = true,
Favorite = false
},
new PA
{
Id = 1,
Number = 201888874,
PaName = "Lösungsfindung",
OrderNumber = 2197811144,
OrderName = "Ein sehr schwieriger zweiter Auftrag",
ProjectNumber = 2019788458,
ProjectName = "Laser für Eingang programmieren",
CompanyName = "S&K Anlagentechnik",
PlannedHours = 70,
CurrentHours = 45,
PaLeft = false,
TechnicallyReady = false,
Favorite = false
}
};
// ignore this above ----------------------------------------------
var projects = await _projectService.GetProjectsForTimelineCreateAsync();
ViewData["ActiveProjects"] = projects.Select(p => new TimelineCreateProjectModel
{
ProjectId = p.ProjectId,
ProjectInfo = $"{p.ProjectNumber} - {p.ProjectName}"
}).OrderByDescending(p => p.ProjectInfo).ToList();
return View(overview);
}
Index.cshtml:
<div id="right">
@(Html.Kendo().Scheduler<ActivityModel>()
.Name("ActivityScheduler")
.Editable(e => e.TemplateName("EditActivity"))
//.StartTime(new DateTime(2022, 01, 1, 5, 00, 00)) // scheduler starts at 5 am
.DataSource(d => d
.Read(r => r.Action("ActivityCalendarRead", "TimeTracking", new { area = "Sktcrm" }))
.ServerOperation(true))
.Views(v =>
{
v.DayView();
v.WeekView(view => view.Selected(true));
v.MonthView();
})
.Events(ev =>
{
ev.Edit("tripChanged");
ev.Add("tripChanged");
ev.DataBound("checkHolidays");
ev.DataBinding("navigate");
})
.Editable(e => e.Window(w => w.Title("Aktivität bearbeiten")))
)
</div>
EditorTemplate: (EditActivity.cshtml)
<div>
@(Html.Kendo().DropDownList()
.Name("project")
/*.BindTo(new List<string>()
{
"Test ",
"Projekt 123",
"Leer",
"Test 2"
})*/
.ValuePrimitive(true)
.OptionLabel("Projekt wählen...")
.DataValueField("ProjectId")
.DataTextField("ProjectInfo")
.BindTo((IEnumerable) ViewData["ActiveProjects"]) // TODO: doesnt work!!!
.Filter(FilterType.Contains)
.HtmlAttributes(new {@class = "kendoSelectMain"}))
</div>
Thanks in advance
Lars
Hi,
We have a scheduler with two views - a week view and a timeline view. When in the week view all events seem to show - however when in the timeline view any event that finishes on the day in question disappears. The start date does not seem to matter. For events that cross days they appear on any day that isnt the end date - so for example if i have an event that starts Monday through to Thursday the event will show on Monday, Tuesday and Wednesday but not Thursday. Navigating to Thursday does display the event briefly but then the event disapears.
The Razor code for the scheduler is:
@(Html.Kendo().Scheduler<F0CUSWeb.Models.PlanningScheduleViewModel>()
.Name("apptScheduler")
.AutoBind(true)
.HtmlAttributes(new { style = "height: 80vh;" })
.MajorTick(120)
.Editable(editable =>
{
editable.Destroy(false);
editable.Move(false);
editable.Resize(false);
editable.Confirmation(true);
})
.Views(views =>
{
views.TimelineWeekView(timeline =>
{
timeline.DateHeaderTemplate("<span class='k-link k-nav-day'>#=kendo.toString(date, 'ddd dd MMM yy')#</span>");
timeline.MajorTimeHeaderTemplate("<span class='k-link k-nav-day' style='font-size:12px'>#=kendo.toString(date, 'HH:mm')#</span>");
timeline.Title("Week View");
timeline.ColumnWidth(30);
timeline.MajorTick(480);
timeline.WorkDayStart(new DateTime(2010, 1, 1, 0, 0, 0));
timeline.WorkDayEnd(new DateTime(2010, 1, 1, 23, 59, 59));
timeline.ShowWorkHours(false);
});
views.TimelineView(timeline =>
{
timeline.DateHeaderTemplate("<span class='k-link k-nav-day'>#=kendo.toString(date, 'ddd dd MMM yy')#</span>");
timeline.MajorTimeHeaderTemplate("<span class='k-link k-nav-day' style='font-size:12px'>#=kendo.toString(date, 'HH:mm')#</span>");
timeline.Title("Day View");
timeline.StartTime(new DateTime(2010, 1, 1, 6, 0, 0));
timeline.EndTime(new DateTime(2010, 1, 1, 20, 0, 0));
timeline.ColumnWidth(20);
timeline.MajorTick(60);
});
})
.Events(e =>
{
e.DataBound("apptSchedulerBound");
e.Navigate("onSchedulerNavigate");
})
.DataSource(ds =>
{
ds.Events(events =>
{
events.Error("endAnimation");
});
ds.Read(read => read.Action("GetSchemeSchedule", "Planning").Data("schemeScheduleString"));
})
.Group(group => group.Resources("Gang").Orientation(SchedulerGroupOrientation.Vertical))
.Resources(resource =>
{
resource.Add(m => m.Gang)
.Title("Gang")
.Name("Gang")
.DataSource(ds => ds
.Custom()
.Transport(transport => transport.Read(read => read.Action("GetGangsForSchemePlanning", "Planning")/*.Data("getGangsForAppts")*/))
.Schema(s => s
.Data("Data")
.Total("Total")
.Model(m =>
{
m.Id("ID");
m.Field("Name", typeof(string));
})))
.Multiple(true)
.DataValueField("ID")
.DataTextField("Name");
})
.EventTemplateId("eventTemplate")
)
Any help would be appreciated as it is driving us mad!
Thanks
Hi ,
I am Using kendo scheduler
I am facing issue wrong appointment time is shown on the calendar. The appointment is Stored in Database as Datetime.
and I'm retrieving the database value and showing values in kendo scheduler control
here in my local solution its showing correct data time (database value : 5 PM Indian timing Its showing correctly)
but in server side its showing wrong time(UK Timimg, Its showing wrong time)
//Old recurrence exception:
recurrenceException:
"20160603T050000Z;20160503T050000Z;"
//New recurrence exception:
recurrenceException:
"20160603T050000Z,20160503T050000Z"