410 lines
14 KiB
Text
410 lines
14 KiB
Text
@using Kreta.Web.Areas.Tanulo.Models
|
|
@using Kreta.Web.Helpers.Grid
|
|
@using Kreta.BusinessLogic.Classes
|
|
@using Kreta.Resources
|
|
|
|
@model OsztalyTanuloiSearchModel
|
|
|
|
@{
|
|
const string HetesekController = Constants.Controllers.Hetesek;
|
|
const string HetesekApiController = Constants.ApiControllers.HetesekApi;
|
|
const string gridName = "HetesekGrid";
|
|
const string searchFormName = "HetesekSearchForm";
|
|
const string warningMessage = "WarningMessage";
|
|
}
|
|
|
|
@section AddSearchPanel {
|
|
@using (Html.SearchPanelSideBar(searchFormName, gridName))
|
|
{
|
|
@Html.KretaComboBoxFor(x => x.OsztalyCsoport, Url.HttpRouteUrl(Constants.RouteKey.ActionApi, new { controller = Constants.ApiControllers.ComboBoxHelperApi, action = "GetTanitottOsztalyokList", isVegyes = true })).AutoBind(true).RenderSearchPanelSideBar()
|
|
}
|
|
}
|
|
|
|
<style>
|
|
.k-grid tbody .k-button {
|
|
min-width: 12px;
|
|
}
|
|
|
|
.k-grid-content .k-button-icontext {
|
|
background-color: #7c8a99 !important;
|
|
}
|
|
|
|
.k-grid-content {
|
|
max-height: 60vh !important;
|
|
}
|
|
|
|
</style>
|
|
|
|
<div>
|
|
@Html.KretaButton("ValidateHetes", HetesResource.HetesekMentese, clickEventName: "function() {HetesekHelper.validateHetes()}", htmlAttributes: new Dictionary<string, object> { { "style", "background-color:#54a5d1" } })
|
|
@Html.KretaButton("DeleteFutureHetesInOsztalyCsoport", HetesResource.JovobeliHetesekTorleseAzOsztalyban, clickEventName: "function() {HetesekHelper.deleteFutureHetesInOsztalyCsoport()}", htmlAttributes: new Dictionary<string, object> { { "style", "background-color:#a94442" } })
|
|
<h5>@string.Format(HetesResource.KerjukAzAdatokSzerkesztesehezKattintsonAHetesTanulokOszlopMegfeeloMezojebeEgyHetreMaximumXHetesJelolhetoKi, Kreta.Web.Constants.General.HetesekMaximalisSzama.ToString())</h5>
|
|
<h5 id="@warningMessage" style="display:none;">@HetesResource.NemMentettModositasokVannakAFeluleten</h5>
|
|
@(
|
|
Html.KretaGrid<HetesekModel>(
|
|
gridName,
|
|
getUrl: new GridApiUrl(HetesekApiController, "GetHetesekGrid", new Dictionary<string, string>()),
|
|
dataParameterFunction: searchFormName,
|
|
allowPaging: false,
|
|
pageSizes: null,
|
|
allowSorting: false,
|
|
showSorszam: false,
|
|
batchEdit: true,
|
|
allowScrolling: true,
|
|
dataBoundAdditionalFunction: "HetesekHelper.changeGridView();"
|
|
)
|
|
.Columns(columns =>
|
|
{
|
|
columns.Bound(c => c.HetSorszam).Width("10%");
|
|
columns.Bound(c => c.HetKezdoNap).Format(SDAFormat.Format[SDAFormat.FormatType.ShortDate]).Width("10%");
|
|
columns.Bound(c => c.HetUtolsoNap).Format(SDAFormat.Format[SDAFormat.FormatType.ShortDate]).Width("10%");
|
|
columns.Bound(c => c.Hetirend).Width("10%");
|
|
columns.Bound(c => c.Tanulok).ClientTemplate("#=HetesekHelper.TanuloTemplate(Tanulok,HetSorszam)#").EditorTemplateName("HetesTanuloTemplate")
|
|
.EditorViewData(new { gridId = gridName, dataSourceFunction = "HetesekHelper.TanulokForMultiSelect", hetSorszamPropName = "HetSorszam", tanulokPropName = "Tanulok" }).HtmlAttributes(new { data_resetable = "" }).Width("34%");
|
|
columns.Command(command => command.Custom("Delete").Text(" ").Click("function(e) {HetesekHelper.hetesDelete(e)}")).Width("5%");
|
|
columns.Command(command => command.Custom("AutoSet").Text(HetesResource.AutomatikusBeallitasEttolAHettol).Click("function(e) {HetesekHelper.hetesSet(e)}")).Width("21%");
|
|
})
|
|
.Editable(editable => editable.Mode(GridEditMode.InCell).DisplayDeleteConfirmation(false))
|
|
.Events(e => e.Edit("function(e) {HetesekHelper.hetesEdit(e)}").Save("function(e) {HetesekHelper.hetesSave(e)}"))
|
|
)
|
|
</div>
|
|
<script>
|
|
var HetesekHelper = (function () {
|
|
var hetesekHelper = function () { };
|
|
|
|
var gridName = "@gridName";
|
|
var searchFormName = "@searchFormName";
|
|
var warningMessage = "@warningMessage";
|
|
|
|
var url = {
|
|
GetFrissHetSorszamokTanulokkal: "@Url.Action("GetFrissHetSorszamokTanulokkal", HetesekController, new { area = Constants.Areas.Tanulo })",
|
|
ValidateHetesek: "@Url.HttpRouteUrl(Constants.RouteKey.ActionApi, new { controller = HetesekApiController, action = "ValidateHetesek" })",
|
|
SaveHetesek: "@Url.HttpRouteUrl(Constants.RouteKey.ActionApi, new { controller = HetesekApiController, action = "SaveHetesek" })",
|
|
DeleteFutureHetesInOsztalyCsoport: "@Url.HttpRouteUrl(Constants.RouteKey.ActionApi, new { controller = HetesekApiController, action = "DeleteFutureHetesInOsztalyCsoport" })",
|
|
};
|
|
|
|
var hetesTanulok = @Html.Raw(ViewData["HetSorszamokTanulokkal"]);
|
|
|
|
hetesekHelper.TanulokForMultiSelect = function (hetSorszam) {
|
|
return hetesTanulok.filter(row => row.HetSorszam == hetSorszam);
|
|
};
|
|
|
|
function showWarningForSave(show) {
|
|
if (show) {
|
|
document.getElementById(warningMessage).style.display = "block";
|
|
} else {
|
|
document.getElementById(warningMessage).style.display = "none";
|
|
}
|
|
}
|
|
|
|
function refreshHetesTanulok(data) {
|
|
hetesTanulok = CommonUtils.JSONparse(data);
|
|
|
|
KretaGridHelper.refreshGridSearchPanel(gridName, searchFormName);
|
|
|
|
$(`#${gridName}`).removeClass("disabledGrid");
|
|
|
|
showWarningForSave(false);
|
|
}
|
|
|
|
function getOsztalyCsoport() {
|
|
var { OsztalyCsoport } = KretaGridHelper.getSearchParameterObject(searchFormName);
|
|
|
|
return OsztalyCsoport;
|
|
}
|
|
|
|
hetesekHelper.changeOsztalyCsoport = function () {
|
|
var osztalyCsoportId = getOsztalyCsoport();
|
|
|
|
AjaxHelper.DoPost(url.GetFrissHetSorszamokTanulokkal, { osztalyCsoportId }, refreshHetesTanulok);
|
|
};
|
|
|
|
hetesekHelper.TanuloTemplate = function (tanuloIds, hetSorszam) {
|
|
if (CommonUtils.isNullOrUndefined(tanuloIds) && CommonUtils.isNullOrUndefined(hetSorszam)) {
|
|
return "";
|
|
}
|
|
|
|
var ismeretlen = "@TantargyResource.Ismeretlen";
|
|
|
|
try {
|
|
if (hetSorszam) {
|
|
if (!CommonUtils.isNullOrUndefined(tanuloIds) && tanuloIds.length) {
|
|
var tanuloArr = tanuloIds.split(",").map(x => Number(x));
|
|
|
|
var nevek = hetesTanulok.filter(row => row.HetSorszam == hetSorszam && tanuloArr.includes(row.TanuloId))
|
|
.map(x => x.Nev)
|
|
.join(", ");
|
|
|
|
if (!nevek) {
|
|
return ismeretlen;
|
|
}
|
|
|
|
return nevek;
|
|
}
|
|
|
|
return "";
|
|
}
|
|
|
|
return ismeretlen;
|
|
} catch {
|
|
return ismeretlen;
|
|
}
|
|
};
|
|
|
|
hetesekHelper.changeGridView = function () {
|
|
$(".k-grid-Delete").find("span")
|
|
.addClass("k-icon k-delete");
|
|
};
|
|
|
|
function tanulokIndexForMulti(tanuloIds, hetSorszam) {
|
|
var emptyArr = [];
|
|
|
|
if ((CommonUtils.isNullOrUndefined(tanuloIds) || !tanuloIds.length) && isNaN(hetSorszam)) {
|
|
return emptyArr;
|
|
}
|
|
|
|
try {
|
|
if (isNaN(hetSorszam)) {
|
|
return emptyArr;
|
|
}
|
|
|
|
if (!CommonUtils.isNullOrUndefined(tanuloIds) && tanuloIds.length) {
|
|
var tanuloArr = tanuloIds.split(",").map(x => Number(x));
|
|
|
|
var result = hetesTanulok.filter(row => row.HetSorszam == hetSorszam && tanuloArr.includes(row.TanuloId))
|
|
.map(x => x.ID);
|
|
|
|
return result;
|
|
}
|
|
|
|
return emptyArr;
|
|
} catch {
|
|
return emptyArr;
|
|
}
|
|
}
|
|
|
|
hetesekHelper.hetesEdit = function (e) {
|
|
var hetSorszamElement = e.container.find("input[name=HetSorszam]");
|
|
|
|
if (hetSorszamElement.length) {
|
|
KretaGridHelper.getKendoGridData(gridName).closeCell(e.container);
|
|
|
|
return;
|
|
}
|
|
|
|
var hetKezdoNapElement = e.container.find("input[name=HetKezdoNap]");
|
|
|
|
if (hetKezdoNapElement.length) {
|
|
KretaGridHelper.getKendoGridData(gridName).closeCell(e.container);
|
|
|
|
return;
|
|
}
|
|
|
|
var hetUtolsoNapElement = e.container.find("input[name=HetUtolsoNap]");
|
|
|
|
if (hetUtolsoNapElement.length) {
|
|
KretaGridHelper.getKendoGridData(gridName).closeCell(e.container);
|
|
|
|
return;
|
|
}
|
|
|
|
var hetirendElement = e.container.find("input[name=Hetirend]");
|
|
|
|
if (hetirendElement.length) {
|
|
KretaGridHelper.getKendoGridData(gridName).closeCell(e.container);
|
|
|
|
return;
|
|
}
|
|
|
|
var tanulokElement = e.container.find("input[name=Tanulok]");
|
|
|
|
if (tanulokElement.length) {
|
|
var tanulokMultiCombo = tanulokElement.data("kendoMultiSelect");
|
|
|
|
tanulokMultiCombo.value(tanulokIndexForMulti(tanulokElement.attr("data-Tids"), tanulokElement.attr("data-Hs")));
|
|
}
|
|
};
|
|
|
|
hetesekHelper.hetesDelete = function (e) {
|
|
var row = $(e.currentTarget).closest("tr");
|
|
|
|
var uid = row.data("uid");
|
|
|
|
var rows = KretaGridHelper.getAllRows(gridName);
|
|
|
|
for (var i = 0; i < rows.length; i++) {
|
|
var currentRow = rows[i];
|
|
|
|
if (currentRow.uid == uid) {
|
|
// Törlés modelből
|
|
currentRow.Tanulok = null;
|
|
// Törlés DOMból
|
|
row.find($("td[data-resetable]")).empty();
|
|
|
|
showWarningForSave(true);
|
|
break;
|
|
}
|
|
}
|
|
};
|
|
|
|
hetesekHelper.hetesSave = function (e) {
|
|
var tanulokElement = e.container.find("input[name=Tanulok]");
|
|
|
|
showWarningForSave(true);
|
|
|
|
if (tanulokElement.length) {
|
|
var tanulokMultiCombo = tanulokElement.data("kendoMultiSelect");
|
|
|
|
var selected = tanulokMultiCombo.value();
|
|
|
|
var tanulok = hetesTanulok.filter(row => selected.includes(row.ID))
|
|
.map(x => x.TanuloId);
|
|
|
|
e.model.Tanulok = tanulok.join(",");
|
|
|
|
e.preventDefault();
|
|
}
|
|
};
|
|
|
|
function success(message) {
|
|
KretaGridHelper.refreshGrid(gridName);
|
|
|
|
KretaWindowHelper.successFeedBackWindow(undefined, message);
|
|
|
|
showWarningForSave(false);
|
|
}
|
|
|
|
function saveSuccess() {
|
|
success("@HetesResource.AHetesekMenteseSikerult");
|
|
}
|
|
|
|
function saveHetesek(data) {
|
|
AjaxHelper.DoPost(url.SaveHetesek, data, saveSuccess);
|
|
}
|
|
|
|
hetesekHelper.validateHetes = function () {
|
|
var postData = KretaGridHelper.getAllRows(gridName);
|
|
|
|
AjaxHelper.DoPost(url.ValidateHetesek, postData, saveHetesek);
|
|
};
|
|
|
|
function deleteSuccess() {
|
|
success("@HetesResource.AJovobeliHetesekTorleseAzOsztalySikerult");
|
|
}
|
|
|
|
function futureHetesInOsztalyCsoportDelete() {
|
|
var id = getOsztalyCsoport();
|
|
|
|
AjaxHelper.DoPostQuery(url.DeleteFutureHetesInOsztalyCsoport, null, { id }, deleteSuccess);
|
|
}
|
|
|
|
hetesekHelper.deleteFutureHetesInOsztalyCsoport = function () {
|
|
KretaWindowHelper.confirmWindow("@CommonResource.Kerdes", "@HetesResource.BiztosanTorliAJovobeliHeteseketAzOsztalyban", futureHetesInOsztalyCsoportDelete);
|
|
};
|
|
|
|
function getNextTanulok(hetSorszam, prevNevElotagNelkul, hanyKell) {
|
|
var dummyId = -1;
|
|
var tanulokAHeten = hetesekHelper.TanulokForMultiSelect(hetSorszam);
|
|
|
|
tanulokAHeten.push({ NevElotagNelkul: prevNevElotagNelkul, TanuloId: dummyId });
|
|
|
|
tanulokAHeten.sort(CommonUtils.hunSorterWithKey("NevElotagNelkul"));
|
|
|
|
var tanulokAHetenCount = tanulokAHeten.length;
|
|
|
|
var startIndex = tanulokAHeten.reduce((start, val, index) => {
|
|
if (val.NevElotagNelkul == prevNevElotagNelkul && val.TanuloId == dummyId) {
|
|
// Az újonnan hozzárakott utáni elem indexe
|
|
start = index + 1;
|
|
|
|
// Ha tovább futnánk a tömbön
|
|
if (start >= tanulokAHetenCount) {
|
|
start = 0;
|
|
}
|
|
}
|
|
|
|
return start;
|
|
}, 0);
|
|
|
|
var ujTanulok = [];
|
|
|
|
for (var i = 0; i < hanyKell; i++) {
|
|
var index = startIndex + i;
|
|
|
|
// Ha túl futunk a tömbön, akkor az elejétől kezdjük a számozást
|
|
if (index >= tanulokAHetenCount) {
|
|
index %= tanulokAHetenCount;
|
|
}
|
|
|
|
var row = tanulokAHeten[index];
|
|
|
|
// Ha dummy tanulóhoz érünk kilépünk
|
|
if (row.NevElotagNelkul == prevNevElotagNelkul && row.TanuloId == dummyId) {
|
|
break;
|
|
}
|
|
|
|
ujTanulok.push({ Nev: row.Nev, NevElotagNelkul: row.NevElotagNelkul, TanuloId: row.TanuloId });
|
|
}
|
|
|
|
return ujTanulok;
|
|
}
|
|
|
|
hetesekHelper.hetesSet = function (e) {
|
|
var currentRow = KretaGridHelper.getRowData($(e.currentTarget), gridName);
|
|
|
|
var startHetSorszam = currentRow.HetSorszam;
|
|
var prevHetSorszam = startHetSorszam - 1;
|
|
|
|
var hanyKell = 1;
|
|
var prevNevElotagNelkul = "";
|
|
|
|
showWarningForSave(true);
|
|
|
|
KretaGridHelper.getAllRows(gridName).forEach(val => {
|
|
if (val.HetSorszam == prevHetSorszam) {
|
|
if (!CommonUtils.isNullOrUndefined(val.Tanulok) && val.Tanulok.length) {
|
|
var prevTanulok = val.Tanulok.split(",").map(x => Number(x));
|
|
|
|
hanyKell = prevTanulok.length;
|
|
|
|
var hetesek = hetesTanulok.filter(row => row.HetSorszam == prevHetSorszam && prevTanulok.includes(row.TanuloId));
|
|
|
|
hetesek.sort(CommonUtils.hunSorterWithKey("NevElotagNelkul"));
|
|
|
|
prevNevElotagNelkul = hetesek[hetesek.length - 1].NevElotagNelkul;
|
|
}
|
|
}
|
|
|
|
if (val.HetSorszam == startHetSorszam) {
|
|
|
|
var tanulok = getNextTanulok(startHetSorszam, prevNevElotagNelkul, hanyKell);
|
|
|
|
if (tanulok && tanulok.length) {
|
|
val.Tanulok = tanulok.map(x => x.TanuloId).join(",");
|
|
|
|
var tanulokColumn = document.querySelector(`tr[data-uid="${val.uid}"] td[data-resetable]`);
|
|
|
|
tanulokColumn.textContent = tanulok.map(x => x.Nev).join(", ");
|
|
|
|
prevNevElotagNelkul = tanulok[tanulok.length - 1].NevElotagNelkul;
|
|
}
|
|
|
|
startHetSorszam++;
|
|
}
|
|
});
|
|
};
|
|
|
|
return hetesekHelper;
|
|
})();
|
|
|
|
// Keresés gomb működésének felülírása
|
|
$("#searchPanelBtn").off().on("click", function () {
|
|
var popup = $("#popupNotification").data("kendoNotification");
|
|
|
|
if (popup) {
|
|
popup.hide();
|
|
}
|
|
|
|
HetesekHelper.changeOsztalyCsoport();
|
|
});
|
|
</script>
|