Отображение ещё одной строки Select2
Есть проект по типу календаря загрузки авто. Но на главной странице выводится только время и название задания. 
Интересует возможность добавления в в поле рядом с "Погрузка", например, ответственного. Вот Custom JS:
var routeURL = location.protocol + "//" + location.host;
$(document).ready(function () {
$("#appointmentDate").kendoDateTimePicker({
value: new Date(),
dateInput: false
});
InitializeCalendar();
})
var calendar;
function InitializeCalendar() {
try {
var calendarEl = document.getElementById('calendar');
if (calendarEl != null) {
calendar = new FullCalendar.Calendar(calendarEl, {
initialView: 'dayGridMonth',
headerToolbar: {
left: 'prev,next,today',
center: 'title',
right: 'dayGridMonth,timeGridWeek,timeGridDay'
},
selectable: true,
editable: false,
select: function (event) {
onShowModal(event, null);
},
eventDisplay: 'block',
events: function (fetchInfo, successCallback, failureCallback) {
$.ajax({
url: routeURL + '/api/Appointment/GetCalendarData?doctorId=' + $("#doctorId").val(), /*from apicontroller route*/
type: 'GET',
dataType: 'JSON',
success: function (response) {
var events = [];
if (response.status === 1) {
$.each(response.dataenum, function (i, data) {
events.push({
title: data.title,
description: data.description,
start: data.startDate,
end: data.endDate,
backgroundColor: data.isDoctorApproved ? "#28a745" : "#dc3545",
borderColor: "#162466",
textColor: "white",
id: data.id
});
})
}
successCallback(events);
},
error: function (xhr) {
$.notify("Error", "error");
}
});
},
eventClick: function (info) {
getEventDetailsByEventId(info.event);
}
});
calendar.render();
}
}
catch (e) {
alert(e);
}
}
function onShowModal(obj, isEventDetail) {
if (isEventDetail != null) {
//editing entity
$("#title").val(obj.title);
$("#description").val(obj.description);
$("#appointmentDate").val(obj.startDate);
$("#duration").val(obj.duration);
$("#doctorId").val(obj.doctorId);
$("#patientId").val(obj.patientId);
$("#id").val(obj.id);
$("#labelPatientName").val(obj.patientName);
$("#labelDoctorName").val(obj.doctorName);
/*obj.isDoctorApproved ? $("#labelStatus").html('Approved') : $("#labelStatus").html('Pending');*/
if (obj.isDoctorApproved) {
$("#labelStatus").val('Approved');
$("#btnConfirm").addClass('d-none');
$("#btnSubmit").addClass('d-none');
}
else {
$("#labelStatus").val('Pending');
$("#btnConfirm").removeClass('d-none');
$("#btnSubmit").removeClass('d-none');
}
$("#btnDelete").removeClass('d-none');
}
else {
//adding entity
$("#appointmentDate").val(obj.startStr + " " + new moment().format("hh:mm A"));
$("#id").val(0);
$("#btnDelete").addClass('d-none');
$("#btnSubmit").removeClass('d-none');
}
$("#appointmentInput").modal("show");
}
function onCloseModal() {
$("#appointmentForm")[0].reset();
$("#id").val(0);
$("#title").val('');
$("#description").val('');
$("#appointmentDate").val('');
//$("#duration").val('');
//$("#patientId").val('');
$("#appointmentInput").modal("hide");
}
function onSubmitForm() {
if (checkValidation()) {
var requestData = {
Id: parseInt($("#id").val()), /*from hidden tag*/
Title: $("#title").val(), /*from _AddEditAppointment tags ids*/
Description: $("#description").val(),
StartDate: $("#appointmentDate").val(),
Duration: $("#duration").val(),
DoctorId: $("#doctorId").val(), /*from index view of Appointment, from combobox parameters*/
PatientId: $("#patientId").val(),
};
$.ajax({
url: routeURL + '/api/Appointment/SaveCalendarData', /*from apicontroller route*/
type: 'POST',
data: JSON.stringify(requestData),
contentType: 'application/json',
success: function (response) {
if (response.status === 1 || response.status === 2) {
calendar.refetchEvents();
$.notify(response.message, "success");
onCloseModal();
}
else {
$.notify(response.message, "error");
}
},
error: function (xhr) {
$.notify("Error", "error");
}
});
}
}
function checkValidation() {
var isValid = true;
if ($("#title").val() === undefined || $("#title").val() === "") {
isValid = false;
$("#title").addClass('error');
}
else {
$("#title").removeClass('error');
}
if ($("#appointmentDate").val() === undefined || $("#appointmentDate").val() === "") {
isValid = false;
$("#appointmentDate").addClass('error');
}
else {
$("#appointmentDate").removeClass('error');
}
return isValid;
}
function getEventDetailsByEventId(info) {
$.ajax({
url: routeURL + '/api/Appointment/GetCalendarDataById/' + info.id /*from method*/, /*from apicontroller route*/
type: 'GET',
dataType: 'JSON',
success: function (response) {
if (response.status === 1 && response.dataenum !== undefined) {
onShowModal(response.dataenum, true);
}
successCallback(events);
},
error: function (xhr) {
$.notify("Error", "error");
}
});
}
function onDoctorChange() {
calendar.refetchEvents();
}
function onDeleteAppointment() {
var id = parseInt($("#id").val());
$.ajax({
url: routeURL + '/api/Appointment/DeleteAppointment/' + id,
type: 'GET',
dataType: 'JSON',
success: function (response) {
if (response.status === 1) {
$.notify(response.message, "success");
calendar.refetchEvents();
onCloseModal();
}
else {
$.notify(response.message, "error");
}
},
error: function (xhr) {
$.notify("Error", "error");
}
});
}
function onConfirmAppointment() {
var id = parseInt($("#id").val());
$.ajax({
url: routeURL + '/api/Appointment/ConfirmEvent/' + id,
type: 'GET',
dataType: 'JSON',
success: function (response) {
if (response.status === 1) {
$.notify(response.message, "success");
calendar.refetchEvents();
onCloseModal();
}
else {
$.notify(response.message, "error");
}
},
error: function (xhr) {
$.notify("Error", "error");
}
});
}
Вот контроллер:
namespace AppointmentScheduling.Controllers.Api
{
[Route("api/Appointment")]
[ApiController]
public class ApiController : Controller
{
private readonly IAppointmentService _appointmentService;
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly string loginUserId;
private readonly string role;
public ApiController(IAppointmentService appointmentService, IHttpContextAccessor httpContextAccessor)
{
_appointmentService = appointmentService;
_httpContextAccessor = httpContextAccessor;
loginUserId = _httpContextAccessor.HttpContext.User.FindFirstValue(ClaimTypes.NameIdentifier);
role = _httpContextAccessor.HttpContext.User.FindFirstValue(ClaimTypes.Role);
}
[HttpPost]
[Route("SaveCalendarData")]
public IActionResult SaveCalendarData(AppointmentVM data)
{
CommonResponse<int> commonResponse = new CommonResponse<int>();
try
{
commonResponse.status = _appointmentService.AdUpdate(data).Result;
if(commonResponse.status == 1)
{
commonResponse.message = Helper.appointmentUpdated;
}
if (commonResponse.status == 2)
{
commonResponse.message = Helper.appointmentAdded;
}
}
catch(Exception e)
{
commonResponse.message = e.Message;
commonResponse.status = Helper.failure_code;
}
return Ok(commonResponse);
}
[HttpGet]
[Route("GetCalendarData")]
public IActionResult GetCalendarData(string doctorId)
{
CommonResponse<List<AppointmentVM>> commonResponse = new CommonResponse<List<AppointmentVM>>();
try
{
if(role == Helper.Patient)
{
commonResponse.dataenum = _appointmentService.PatientsEventsById(loginUserId);
commonResponse.status = Helper.success_code;
}
else if(role == Helper.Doctor)
{
commonResponse.dataenum = _appointmentService.DoctorsEventsById(loginUserId);
commonResponse.status = Helper.success_code;
}
else if (role == Helper.Admin)
{
commonResponse.dataenum = _appointmentService.DoctorsEventsById(doctorId);
commonResponse.status = Helper.success_code;
}
}
catch(Exception ex)
{
commonResponse.message = ex.Message;
commonResponse.status = Helper.failure_code;
}
return Ok(commonResponse);
}
[HttpGet]
[Route("GetCalendarDataById/{id}")]
public IActionResult GetCalendarDataById(int id)
{
CommonResponse<AppointmentVM> commonResponse = new CommonResponse<AppointmentVM>();
try
{
commonResponse.dataenum = _appointmentService.GetById(id);
commonResponse.status = Helper.success_code;
}
catch (Exception ex)
{
commonResponse.message = ex.Message;
commonResponse.status = Helper.failure_code;
}
return Ok(commonResponse);
}
[HttpGet]
[Route("DeleteAppointment/{id}")]
public async Task<IActionResult> DeleteAppointment(int id)
{
CommonResponse<int> commonResponse = new CommonResponse<int>();
try
{
commonResponse.status = await _appointmentService.Delete(id);
commonResponse.message = commonResponse.status == 1 ? Helper.appointmentDeleted : Helper.somethingWentWrong;
}
catch (Exception ex)
{
commonResponse.message = ex.Message;
commonResponse.status = Helper.failure_code;
}
return Ok(commonResponse);
}
[HttpGet]
[Route("ConfirmEvent/{id}")]
public IActionResult ConfirmEvent(int id)
{
CommonResponse<int> commonResponse = new CommonResponse<int>();
try
{
var result = _appointmentService.ConfirmEvent(id).Result;
if(result > 0)
{
commonResponse.status = Helper.success_code;
commonResponse.message = Helper.meetingConfirm;
}
else
{
commonResponse.status = Helper.failure_code;
commonResponse.message = Helper.meetingConfirmError;
}
}
catch (Exception ex)
{
commonResponse.message = ex.Message;
commonResponse.status = Helper.failure_code;
}
return Ok(commonResponse);
}
}
}
Заранее, спасибо!)