How to add scheduler.Templates.event_text into Data()

Hi,
I have another problem :slight_smile:

My scheduler works fine now I think (only timeline trouble…) but I want to add .event_text to every event in normal scheduler view. So I have to add “scheduler.Templates.event_text” into Data().

Every event is made by another user. Every user view only his events. But admin can see all events. But my event in normal view has time and text of event. But I want that events seen by admin, have time and name of creator user and maybe text of event (text of event can be show in edit window).
If I add “scheduler.Templates.event_text” with filled name of user from list in action Scheduler() I get on every event username but on every event is the same username not name of creator of event… So I need to move “scheduler.Templates.event_text” into action Data(), but there I can’t add it :frowning:

Scheduler action on controller:

[HttpGet]
public ActionResult SchedulerAdmin(string me)
{
	DHXScheduler scheduler = new DHXScheduler(this);
	scheduler.Data.Loader.PreventCache();
	scheduler.LoadData = true;
	scheduler.Data.Loader.AddParameter("userid", me);
	scheduler.EnableDataprocessor = true;
	scheduler.Localization.Directory = "locale";
	scheduler.Localization.Set(SchedulerLocalization.Localizations.Czech);
	scheduler.Calendars.AttachMiniCalendar();
	scheduler.Config.xml_date = "%d/%m/%Y %H:%i";
	scheduler.EnableDynamicLoading(SchedulerDataLoader.DynamicalLoadingMode.Day);
	scheduler.Skin = DHXScheduler.Skins.Terrace;
	scheduler.Extensions.Add(SchedulerExtensions.Extension.Recurring);
	scheduler.Data.DataProcessor.UpdateFieldsAfterSave = true;
	scheduler.Extensions.Add(SchedulerExtensions.Extension.Tooltip);

	scheduler.XY.scroll_width = 0;
	scheduler.Config.first_hour = 8;
	scheduler.Config.last_hour = 21;
	scheduler.Config.time_step = 30;
	scheduler.Config.limit_time_select = true;

	scheduler.Config.multi_day = true;
	scheduler.PreventCache();

	var textField = new LightboxText("text", "Popis");
	textField.Focus = true;
	textField.Height = 80;
	scheduler.Lightbox.Add(textField);

	var calendar = new LightboxMiniCalendar("time", "Časový úsek");
	scheduler.Lightbox.Add(calendar); 
	
	var recurre = new LightboxRecurringBlock("rec_type", "Opakování");
	scheduler.Lightbox.Add(recurre);                                

	//Timeline
	if (AccountHelper.LoggedAccount.IsAdmin)
	{
		using (AppDbContext dbcontext = new AppDbContext())
		{
			scheduler.Extensions.Add(SchedulerExtensions.Extension.Collision);
			scheduler.Extensions.Add(SchedulerExtensions.Extension.Minical);

			var select = new LightboxSelect("user_id", "Uživatel");
			var selectUsers = dbcontext.CompanyUserRolesRef
				.Include(x => x.User)
				.Select(s => new
				{
					id = s.User.ID,
					name = s.User.Name,
					surname = s.User.Surname,
					roleId = s.CompanyRoleID
				})
				.OrderBy(x => x.surname)
				.Where(x => x.roleId == 9 || x.roleId == 10)
				.ToList();

			List<string> splittedTechnicId = new List<string>();
			splittedTechnicId = me.Split('$').ToList();

			var listUsers = new List<object>();
			foreach (var ev in splittedTechnicId)
			{
				int techId = Int32.Parse(ev);
				var technicuser = selectUsers.FirstOrDefault(x => x.id == techId);
				if (technicuser != null)
				{
					listUsers.Add(new { key = technicuser.id, label = technicuser.surname + ", " + technicuser.name });
				}
			}

			select.AddOptions(listUsers);
			scheduler.Lightbox.Add(select);

			var timeline = new TimelineView("timeline", "user_id");

			timeline.FolderEventsAvailable = false;
			timeline.FitEvents = false;
			timeline.X_Unit = TimelineView.XScaleUnits.Hour;
			timeline.X_Date = "%H:%i";
			timeline.X_Step = 4;
			timeline.X_Size = 24;
			timeline.X_Start = 2;
			timeline.X_Length = 3;
			timeline.Dy = 40;

			timeline.AddSecondScale(TimelineView.XScaleUnits.Day, "%F %d");
			timeline.RenderMode = TimelineView.RenderModes.Bar;
			timeline.SectionAutoheight = false;

			if (me != null)
			{
				var users = dbcontext.Users //user roles ref
				.Select(s => new
				{
					id = s.ID,
					name = s.Name,
					surname = s.Surname
				})
				.ToList();

				users.Clear();
				List<string> splittedUserId = new List<string>();
				splittedUserId = me.Split('$').ToList();

				foreach (var ev in splittedUserId)
				{
					int userId = Int32.Parse(ev);
					var sendedUserList = dbcontext.Users
						.Select(s => new
						{
							id = s.ID,
							name = s.Name,
							surname = s.Surname
						})
						.FirstOrDefault(x => x.id == userId);
					//If I add here, every event has same user name in view
					//scheduler.Templates.event_text = sendedUserList.name + " " + sendedUserList.surname;
					users.Add(sendedUserList);
				}

				foreach (var item in users)
				{
					TimelineUnit section = new TimelineUnit(item.id, item.name + " " + item.surname);
					timeline.AddOption(section);
					section.AddOption(item.id);
				}
				timeline.AddOption(users);
			}
			else
			{
				var usersTechnics = dbcontext.CompanyUserRolesRef
				.Include(x => x.User)
				.Select(s => new
				{
					id = s.User.ID,
					name = s.User.Name,
					surname = s.User.Surname,
					roleId = s.CompanyRoleID
				})
				.Where(x => x.roleId == 9 || x.roleId == 10)
				.ToList();

				foreach (var item in usersTechnics)
				{
					TimelineUnit section = new TimelineUnit(item.id, item.name + " " + item.surname);
					timeline.AddOption(section);
					section.AddOption(item.id);
				}
				timeline.AddOption(usersTechnics);
			}

			scheduler.Views.Add(timeline);
		}
	}

	return View("SchedulerAdmin", scheduler);
}

My code of action Data() in controller:

public ActionResult Data(string userid)
{            
	using (var dbcontext = new AppDbContext())
	{
		var filteredEvents = new List<Events>();
		if (AccountHelper.LoggedAccount.IsAdmin)
		{
			List<Events> filteredEventsAdmin = new List<Events>();
			if (userid != null)
			{
				List<string> splittedUserId = new List<string>();
				splittedUserId = userid.Split('$').ToList();
				foreach (var ev in splittedUserId)
				{
					int userId = Int32.Parse(ev);
					List<Events> userEvent = new List<Events>();
					userEvent = dbcontext.Events.Where(x => x.UserID == userId).ToList();
					
					filteredEventsAdmin.AddRange(userEvent);
					//If I add here, I can't set a "scheduler".. If try to add with all namespace, not working too - don't get Templates.event_text :(
					//scheduler.Templates.event_text = sendedUserList.name + " " + sendedUserList.surname;
				}
			}
			else
			{
				filteredEventsAdmin = dbcontext.Events.ToList();
			}
			filteredEvents = filteredEventsAdmin;
		}
		else
		{
			var filteredEventsUser = dbcontext.Events.Where(x => x.UserID == AccountHelper.LoggedAccount.UserID).ToList();
			filteredEvents = filteredEventsUser;
		}

		var events = filteredEvents.Select(s => new
		{
			id = s.id.ToString(),
			user_id = s.UserID.ToString(),
			text = s.text.ToString(),
			start_date = s.start_date.ToString(),
			end_date = s.end_date.ToString(),
			color = s.color,
			event_length = s.event_length.HasValue ?  s.event_length.ToString() : null,
			event_pid = s.event_pid.HasValue ? s.event_pid.ToString() : null,
			rec_type = s.rec_type != null ? s.rec_type.ToString() : null,
			technic_id = s.technic_id != null ? s.technic_id.ToString() : null
		});
		
		var data = new SchedulerAjaxData(events);
		data.DateFormat = "%d/%m/%Y %H:%i";
		return data;
	}
}

Thanks to all for help!

I need that events look like image in attachement…


I’d recomend to define event_text template on the client:

Scheduler action on controller:... scheduler.BeforeInit.Add("configureTemplates()");// execute "configureTemplates()" js code before initialization on the client side return View("SchedulerAdmin", scheduler);Scheduler action view:<script> function configureTemplates(){ scheduler.templates.event_text = function(start, end, ev){ return ev.name + " " + ev.surname + "<br>" + ev.text; } } </script> ... Model.Render() ...

Great!

Thanks!