init
This commit is contained in:
commit
e124a47765
19374 changed files with 9806149 additions and 0 deletions
410
KretaWeb/Areas/Tanulo/Views/Hetesek/Index.cshtml
Normal file
410
KretaWeb/Areas/Tanulo/Views/Hetesek/Index.cshtml
Normal file
|
@ -0,0 +1,410 @@
|
|||
@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>
|
Loading…
Add table
Add a link
Reference in a new issue