kreta/KretaWeb/Areas/Tanulo/Views/Hetesek/Index.cshtml
2024-03-13 00:33:46 +01:00

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>