using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Web.Mvc; using Kreta.BusinessLogic.Classes; using Kreta.BusinessLogic.HelperClasses; using Kreta.BusinessLogic.Helpers; using Kreta.BusinessLogic.Helpers.ImportExport; using Kreta.BusinessLogic.Logic; using Kreta.BusinessLogic.Security; using Kreta.Client.Eugyintezes.Configuration; using Kreta.Client.KozpontiKreta; using Kreta.Client.KozpontiKreta.Model; using Kreta.Core; using Kreta.Core.Configuratiaton.Interface; using Kreta.Core.FeatureToggle; using Kreta.Enums; using Kreta.Resources; using Kreta.Web.Areas.Beiratkozas.Models; using Kreta.Web.Classes; using Kreta.Web.Controllers; using Kreta.Web.Helpers; using Kreta.Web.Models.EditorTemplates; using Kreta.Web.Security; using OfficeOpenXml; using ModelStateDictionary = System.Web.Http.ModelBinding.ModelStateDictionary; namespace Kreta.Web.Areas.Beiratkozas.Controllers { [MvcRoleClaimsAuthorize(true)] [MvcRolePackageDenyAuthorize(KretaClaimPackages.IsOnlyAlkalmozott.ClaimValue)] [MvcRolePackageAuthorize(KretaClaimPackages.Adminisztrator.ClaimValue)] public class NebuloController : Controller { #region Properties public static string NewModifyNebuloPopupName => "New_Modify_Popup"; public static string NemFelvettNebuloPopupName => "Nem_Felvett_Popup"; public static string NewModifyNebuloFormName => "NewModifyNebuloForm"; public static string NebuloMultiEditPopupName => "MultiEdit_Popup"; public static string NebuloMultiEditFormName => "NebuloMultiEditForm"; public static string ImportNebuloFormName => "ImportNebuloForm"; public static string KirLoginFormName => "KirLoginForm"; public static string KirLoginPopupName => "KirLogin_Popup"; public static string NebuloTelephelyPopupName => "NebuloTelephely_Popup"; public static string KirFeladatellatasiHelySorszamPopupName => "KirFeladatellatasiHelySorszam_PopUp"; public static string KirFeladatellatasiHelySorszamGridName => "KirFeladatellatasiHelySorszamGrid"; public static string NebuloTelephelyGrid => "NebuloTelephelyGrid"; private IUploadFileValidator UploadFileValidator { get; } private IFeatureContext FeatureContext { get; } private readonly IEugyintezesClientConfiguration EugyintezesClientConfiguration; private readonly IKozpontiKretaConfiguration KozpontiKretaConfiguration; #endregion Properties public NebuloController(IUploadFileValidator uploadFileValidator, IFeatureContext featureContext, IEugyintezesClientConfiguration eugyintezesClientConfiguration, IKozpontiKretaConfiguration kozpontiKretaConfiguration) { UploadFileValidator = uploadFileValidator ?? throw new ArgumentNullException(nameof(uploadFileValidator)); FeatureContext = featureContext ?? throw new ArgumentNullException(nameof(featureContext)); EugyintezesClientConfiguration = eugyintezesClientConfiguration ?? throw new ArgumentNullException(nameof(eugyintezesClientConfiguration)); KozpontiKretaConfiguration = kozpontiKretaConfiguration ?? throw new ArgumentNullException(nameof(kozpontiKretaConfiguration)); } [HttpGet] public ActionResult Index() { var helper = new NebuloHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType()); var intezmenyHelper = new IntezmenyHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType()); var model = new NebuloSearchModel { MaxAllowedFileSizeInBytes = UploadFileValidator.Configuration.ImportMaxAllowedFileSizeInBytes, AllowedFileExtensions = UploadFileValidator.Configuration.ImportAllowedFileExtensions, EnableKirSzinkron = FeatureContext.IsEnabled(Core.Constants.FeatureName.KirSzinkron, ApplicationData.SystemType.ToString(), ClaimData.IntezmenyAzonosito), EnableEugyHatarozat = FeatureContext.IsEnabled(Core.Constants.FeatureName.BeiratkozasEugyHatarozat, ApplicationData.SystemType.ToString(), ClaimData.IntezmenyAzonosito) && helper.GetIsEnableEugyHatarozat(), EnableStatuszVeglegesites = intezmenyHelper.GetIntezmenyiAdatok().EnableBAIStatuszVeglegesites, FeladatellatasiHelyIdSearch = ClaimData.FelhelySzuro }; /*Létszám adatok*/ var client = new KozpontiClient(KozpontiKretaConfiguration.KtrUrl, KozpontiKretaConfiguration.ApiKey); var tanevSorszam = new TanevHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType()).GetTanevInfo().Sorszam; var kozpontiResult = client.GetBeiratkozasLetszamList(new KozpontiNebuloEngedelyezettRequestModel() { IntezmenyAzonosito = ClaimData.IntezmenyAzonosito, TanevId = tanevSorszam }); if (kozpontiResult != null) { model.EOLNemOsszevontOsztaly = kozpontiResult.EngedelyezettOsztaly; model.EOsszLNemOsszevontOsztaly = kozpontiResult.EngedelyezettOsztalyLetszam; model.EOLOsszevontOsztaly = kozpontiResult.EngedelyezettOsszevontOsztaly; model.EOsszLOsszevontOsztaly = kozpontiResult.EngedelyezettOsszevontOsztalyLetszam; } return View(model); } #region Popup actions [HttpPost] [MvcValidateAjaxAntiForgeryToken] public ActionResult OpenNewModifyNebuloPopup(int? id) { bool isModify = id.IsEntityId(); NebuloModel nebuloModel; if (isModify) { NebuloCo co = new NebuloHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetNebuloById(id.Value); nebuloModel = new NebuloModel(co); } else { nebuloModel = new NebuloModel { SzuletesiOrszag = (int)OrszagTipusEnum.Magyarorszag, Anyanyelv = (int)AnyanyelvEnum.magyar, Allampolgarsag = (int)AllampolgarsagEnum.magyar, TKCimeAzonos = true, TK2CimeAzonos = true, THCimeAzonos = true, Tagozat = (int)TagozatTipusEnum.Normal_egesz_napos_iskola, EletvitelszeruOttLakasKorzetes = false, FelvetelStatusza = (int)FelvetelStatuszaTipusEnum.Fuggoben, SNILetszamSuly = 1, BTMLetszamSuly = 1, KirSzolgaltatasTipusId = (int)KirSzolgaltatasTipusEnum.AltalanosFeltetelekSzerintiNevelesOktatas }; } nebuloModel.FeladatellatasiHelyList = GetFeladatellatasiHelyList(); var popupModel = new PopUpModel(nebuloModel, NewModifyNebuloPopupName); popupModel = popupModel.AddCancelBtn(popupModel, "NebuloHelper.newModifyNebuloPopupCancel"); if (!ClaimData.IsBeiratkozasVeglegesitve) { popupModel = popupModel.AddOkBtn(popupModel, "NebuloHelper.newModifyNebuloPopupSave"); if (isModify) { popupModel.AddDeleteBtn(popupModel, "NebuloHelper.newModifyNebuloPopupDelete"); } } else { if (nebuloModel.FelvetelStatusza == (int)FelvetelStatuszaTipusEnum.NemFelveve) { popupModel = popupModel.AddBtn(popupModel, "masodfok", BeiratkozasResource.MasodfokonFelveteltNyert, "NebuloHelper.masodfokConfirmWindow"); } } return PartialView(Constants.General.PopupView, popupModel); } [HttpPost] [MvcValidateAjaxAntiForgeryToken] public ActionResult OpenNebuloNemFelvettPopup(int id) { NebuloCo co = new NebuloHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetNebuloById(id); NebuloModel model = new NebuloModel(co); model.FelvetelStatusza = (int)FelvetelStatuszaTipusEnum.NemFelveve; var popupModel = new PopUpModel(model, NemFelvettNebuloPopupName); popupModel = popupModel.AddCancelBtn(popupModel, "NebuloHelper.nebuloNemFelvettPopupCancel"); popupModel = popupModel.AddOkBtn(popupModel, "NebuloHelper.nebuloNemFelvettPopupSave"); return PartialView(Constants.General.PopupView, popupModel); } [HttpPost] [MvcValidateAjaxAntiForgeryToken] public ActionResult OpenMultiEditNebuloPopup(List idList) { NebuloMultiEditModel nebuloModel = new NebuloMultiEditModel(idList) { FeladatellatasiHelyList = GetFeladatellatasiHelyList() }; var popupModel = new PopUpModel(nebuloModel, NebuloMultiEditPopupName); popupModel = popupModel.AddCancelBtn(popupModel, "NebuloHelper.multiEditPopupCancel"); if (!ClaimData.IsBeiratkozasVeglegesitve) { popupModel = popupModel.AddOkBtn(popupModel, "NebuloHelper.multiEditNebuloPopupSave"); } return PartialView(Constants.General.PopupView, popupModel); } [HttpPost] [MvcValidateAjaxAntiForgeryToken] public ActionResult OpenKirLoginPopup() { if (FeatureContext.IsEnabled(Core.Constants.FeatureName.KirSzinkron, ApplicationData.SystemType.ToString(), ClaimData.IntezmenyAzonosito)) { string token = Cache.Get($"{ClaimData.FelhasznaloNev}_{ClaimData.FelhasznaloId}_{ClaimData.IntezmenyAzonosito}_Token")?.ToString(); var kirFeladatellatasiHelyList = Cache.Get($"{ClaimData.FelhasznaloNev}_{ClaimData.FelhasznaloId}_{ClaimData.IntezmenyAzonosito}_KirFeladatellatasiHelyList") as List; if (string.IsNullOrWhiteSpace(token) || kirFeladatellatasiHelyList == null) { var nebuloKirSzinkronModel = new NebuloKirSzinkronModel { KirLoginModel = new KirLoginModel() }; var popupModel = new PopUpModel(nebuloKirSzinkronModel, KirLoginPopupName); popupModel = popupModel.AddCancelBtn(popupModel, "KirHelper.kirLoginPopupCancel"); popupModel = popupModel.AddBtn(popupModel, "Bejelentkezes", CommonResource.Bejelentkezes, "KirHelper.getKirFeladatellatasiHelyList"); return PartialView(Constants.General.PopupView, popupModel); } var responseMessage = new NebuloApiController(EugyintezesClientConfiguration).KirSzinkron(null); return new JsonResult { Data = new { statusCode = responseMessage.StatusCode, content = responseMessage.Content } }; } return new EmptyResult(); } [HttpPost] [MvcValidateAjaxAntiForgeryToken] public ActionResult OpenNebuloTelephelyPopup() { if (FeatureContext.IsEnabled(Core.Constants.FeatureName.KirSzinkron, ApplicationData.SystemType.ToString(), ClaimData.IntezmenyAzonosito)) { var kirFeladatellatasiHelyList = Cache.Get($"{ClaimData.FelhasznaloNev}_{ClaimData.FelhasznaloId}_{ClaimData.IntezmenyAzonosito}_KirFeladatellatasiHelyList") as List; DataSet nemSzinkronizaltNebulok = new NebuloHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType()) .GetNemSzinkronizaltNebulok(); if (kirFeladatellatasiHelyList != null && nemSzinkronizaltNebulok.Tables[0].Rows.Count > 0) { var nebuloKirSzinkronModel = new NebuloKirSzinkronModel { TelephelyList = kirFeladatellatasiHelyList }; var popupModel = new PopUpModel(nebuloKirSzinkronModel, NebuloTelephelyPopupName); popupModel = popupModel.AddCancelBtn(popupModel, "KirHelper.nebuloTelephelyPopupCancel"); popupModel = popupModel.AddBtn(popupModel, "kirSzinkron_Mentes", "Mentés", "KirHelper.nebuloKirSzinkron"); return PartialView(Constants.General.PopupView, popupModel); } var responseMessage = new NebuloApiController(EugyintezesClientConfiguration).KirSzinkron(null); return new JsonResult { Data = new { statusCode = responseMessage.StatusCode, content = responseMessage.Content } }; } return new EmptyResult(); } #endregion Popup actions [HttpPost] [MvcValidateAjaxAntiForgeryToken] public string GetFilteredExcel(NebuloSearchModel model) { MemoryStream memoryStream = new NebuloImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetExport(model.ToCo()); var guid = Cache.Add(memoryStream); return Url.Action(nameof(CacheController.DownloadFile), nameof(CacheController).Replace("Controller", ""), new { guid, fileName = BeiratkozasResource.NebuloExportFilename, contentType = Core.Constants.ContentTypes.Xlsx, area = "" }); } [HttpPost] [MvcValidateAjaxAntiForgeryToken] private List GetFeladatellatasiHelyList() { FeladatEllatasiHelyHelper helper = new FeladatEllatasiHelyHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType()); var dictionary = helper.GetFeladatEllatasiHelyDDl(""); List list = new List(); foreach (var item in dictionary) { SelectListItem sli = new SelectListItem { Text = item.Value, Value = item.Key }; list.Add(sli); } return list; } public ActionResult GetHibasNebuloExcel() { var stream = new MemoryStream(); var helper = new NebuloHelper(ConnectionTypeExtensions.GetSessionConnectionType()); List nebuloCoList = helper.GetNebuloList(); var nebuloModelList = nebuloCoList.Select(x => new NebuloModel(x)).ToList(); var invalidNebuloNevList = new Dictionary(); var cnt = 0; foreach (var nebuloModel in nebuloModelList) { cnt++; ModelStateDictionary modelStateDictionary = nebuloModel.Validate(ClaimData.SelectedTanevID.Value); var gvCnt = helper.GetOvodasGvCntByNebuloOktAzon(nebuloModel.OktatasiAzonositoSzama); if (!modelStateDictionary.IsValid) { var msg = string.Empty; foreach (var item in modelStateDictionary) { if (msg.Length > 0) { msg += " "; } msg += item.Value.Errors[0].ErrorMessage; } invalidNebuloNevList.Add($"{cnt}. {nebuloModel.NebuloNeve}", msg); } if (gvCnt == 0) { invalidNebuloNevList.Add(nebuloModel.NebuloNeve, BeiratkozasResource.OvisGyereknekNincsGondviseloje); } } var dataSet = new DataSet(); dataSet.Tables.Add(); dataSet.Tables[0].Columns.Add("Nebulo"); dataSet.Tables[0].Columns.Add("HibasAdatok"); foreach (var item in invalidNebuloNevList) { dataSet.Tables[0].Rows.Add(item.Key, item.Value); } DataTable dataTable = dataSet.Tables[0]; ExportLogic.TryCreateHeaderIfNotExist(dataTable); using (var excel = new ExcelPackage(stream)) { ExcelWorksheet workSheet = excel.Workbook.Worksheets.Add(FelhasznalokResource.Export); (string nameFrom, string nameTo, Type type)[] map = new[] { ("Nebulo", BeiratkozasResource.Nebulo, typeof(string)), ("HibasAdatok", BeiratkozasResource.HibasAdatok, typeof(string)), }; var table = ExportLogic.MapDataTable(dataTable, map); workSheet.Cells[1, 1].LoadFromDataTable(table, true); ExportLogic.SetHeaderStyles(workSheet.Cells[1, 1, 1, table.Columns.Count]); workSheet.Cells.AutoFitColumns(); excel.Save(); } stream.Position = 0; var result = new FileStreamResult(stream, Core.Constants.ContentTypes.Xlsx) { FileDownloadName = "NebuloHibasAdatok" + "_" + DateTime.Now.ToString("yyyy_MM_dd") + ".xlsx" }; return result; } } }