using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Web; using System.Web.Mvc; using Kreta.BusinessLogic.Classes; using Kreta.BusinessLogic.HelperClasses; using Kreta.BusinessLogic.HelperClasses.ImportCo; using Kreta.BusinessLogic.Helpers.ImportExport; using Kreta.BusinessLogic.Security; using Kreta.Enums; using Kreta.Enums.ManualEnums; using Kreta.Enums.ManualEnums.ImportExport; using Kreta.Resources; using Kreta.Web.Areas.ImportExport.Models.CommonModels; using Kreta.Web.Areas.ImportExport.Models.TanuloKifirImportExport; using Kreta.Web.Classes; using Kreta.Web.Helpers; using Kreta.Web.Models.EditorTemplates; using Kreta.Web.Security; namespace Kreta.Web.Areas.ImportExport.Controllers { [MvcRoleClaimsAuthorize(true)] [MvcRolePackageDenyAuthorize(KretaClaimPackages.IsOnlyAlkalmozott.ClaimValue, KretaClaimPackages.IsSzirIntezmeny.ClaimValue)] [MvcRolePackageAuthorize(TanevEnum.KovTanev, KretaClaimPackages.Adminisztrator.ClaimValue)] public class TanuloKifirImportExportController : BaseImportExportController { #region Fields private const string TovabbUrl = @"~/Tanulo/Tanulo"; #endregion Fields #region Properties public static string CimGridName => "CimGrid"; public static string CimGridRowTemplateName => "CimGridRowTemplate"; public static string EmailGridName => "EmailGrid"; public static string EmailGridRowTemplateName => "EmailGridRowTemplate"; public static string TanuloKifirGridName => "TanuloKifirGrid"; public static string TanuloKifirGridRowTemplateName => "TanuloKifirGridRowTemplate"; public static string JavascriptHelperClassName => "TanuloKifirImportExportHelper"; public static string ConrtollerName => "TanuloKifirImportExport"; #endregion Properties #region Constructors public TanuloKifirImportExportController(IUploadFileValidator uploadFileValidator) { UploadFileValidator = uploadFileValidator ?? throw new ArgumentNullException(nameof(uploadFileValidator)); } #endregion Constructors public ActionResult Index() { var model = new TanuloKifirImportExportModel { MaxAllowedFileSizeInBytes = UploadFileValidator.Configuration.ImportMaxAllowedFileSizeInBytes, AllowedFileExtensions = UploadFileValidator.Configuration.ImportAllowedFileExtensions }; return View(model); } #region Export public string NemImportalhatoSorokExport() { MemoryStream memoryStream = new TanuloKifirImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetNemImportalhatoSorokExport(); return GetExportFileString(memoryStream); } #endregion Export #region Import public JsonResult UploadFile(HttpPostedFileBase importFile, int importMuvelet) { UploadFileValidator.ValidateImportFile(importFile); var errorResult = new List(); Dictionary importHeaderList = TanuloKifirImportExportHelper.ImportHeaderList; List> importData = ImportExportHelper.GetImportDataFromExcel(importFile.InputStream, importHeaderList, out List fileErrorResultList); errorResult.AddRange(fileErrorResultList); if (errorResult.Count > 0) { JsonResult errorJson = ThrowCustomError(errorResult); return errorJson; } new TanuloKifirImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).SetImportCo(importData, importMuvelet); return Json(null); } public ActionResult OpenImportPreviewPopup() { TanuloKifirImportCo importCo = new TanuloKifirImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).ImportCo; List coList = importCo.TanuloCoList; var importInfoModel = new TanuloKifirImportInfoModel { ImportInfoSummaryList = new ImportInfoSummaryListModel { ImportInfoSummaryModelList = new List { GetCimImportInfoSummary(importCo, coList.SelectMany(x => x.CimList).ToList()), GetEmailImportInfoSummary(importCo, coList.SelectMany(x => x.EmailList).ToList()), GetTanuloKifirImportInfoSummary(importCo, coList) } }, CimImportItemList = new CimImportItemListModel { ImportItemModelList = GetCimImportItemModelList(importCo.CimKifirImportJsonItemList, coList) }, EmailImportItemList = new EmailImportItemListModel { ImportItemModelList = GetEmailImportItemModelList(importCo.EmailKifirImportJsonItemList, coList) }, MainImportItemList = new TanuloKifirImportItemListModel { ImportItemModelList = GetTanuloKifirImportItemModelList(importCo, coList) }, NemImportalhatoItemList = new TanuloKifirImportNemImportalhatoItemListModel { NemImportalhatoItemModelList = GetNemImportalhatoItemModelList(importCo.NemImportalhatoItemList) } }; var popUpModel = new PopUpModel(importInfoModel, ImportPreviewPopupName); popUpModel.AddCancelBtn(popUpModel, "KretaWindowHelper.destroyAllWindow"); popUpModel.AddBtn(popUpModel, "ImportBtnOk", CommonResource.Importalas, $"{JavascriptHelperClassName}.import", "BtnOk", setDisabledAfterClick: true); popUpModel.AddBtn(popUpModel, "NemImportalhatoSorokExportBtnOk", ImportExportCommonResource.NemImportalhatoSorokExportalasa, $"{JavascriptHelperClassName}.nemImportalhatoSorokExport", "BtnOk"); return PartialView(Constants.General.PopupView, popUpModel); } protected static ImportInfoSummaryModel GetCimImportInfoSummary(TanuloKifirImportCo importCo, List coList) { List importJsonItemList = importCo.CimKifirImportJsonItemList; int updateRowCount = importJsonItemList?.Count(x => x.Operation == (int)ImportItemOperationEnum.Update) ?? 0; int unchangedRowCount = 0; switch (importCo.ImportMuvelet) { case (int)ImportMuveletEnum.Insert: unchangedRowCount = coList.Count; break; case (int)ImportMuveletEnum.InsertAndUpdate: unchangedRowCount = coList.Count - updateRowCount; break; } var importInfoSummary = new ImportInfoSummaryModel { ImportName = ImportExportTanuloKifirResource.Cim, InsertRowCount = importJsonItemList?.Count(x => x.Operation == (int)ImportItemOperationEnum.Insert).ToString() ?? "0", UpdateRowCount = updateRowCount.ToString(), DeleteRowCount = "-", UnchangedRowCount = unchangedRowCount.ToString(), InvalidRowCount = importCo.NemImportalhatoItemList.Count.ToString() }; return importInfoSummary; } protected static ImportInfoSummaryModel GetEmailImportInfoSummary(TanuloKifirImportCo importCo, List coList) { List importJsonItemList = importCo.EmailKifirImportJsonItemList; int updateRowCount = importJsonItemList?.Count(x => x.Operation == (int)ImportItemOperationEnum.Update) ?? 0; int unchangedRowCount = 0; switch (importCo.ImportMuvelet) { case (int)ImportMuveletEnum.Insert: unchangedRowCount = coList.Count; break; case (int)ImportMuveletEnum.InsertAndUpdate: unchangedRowCount = coList.Count - updateRowCount; break; } var importInfoSummary = new ImportInfoSummaryModel { ImportName = ImportExportTanuloKifirResource.Email, InsertRowCount = importJsonItemList?.Count(x => x.Operation == (int)ImportItemOperationEnum.Insert).ToString() ?? "0", UpdateRowCount = updateRowCount.ToString(), DeleteRowCount = "-", UnchangedRowCount = unchangedRowCount.ToString(), InvalidRowCount = importCo.NemImportalhatoItemList.Count.ToString() }; return importInfoSummary; } private static ImportInfoSummaryModel GetTanuloKifirImportInfoSummary(TanuloKifirImportCo importCo, List coList) { List importJsonItemList = importCo.MainImportJsonItemList; int updateRowCount = importJsonItemList?.Count(x => x.Operation == (int)ImportItemOperationEnum.Update) ?? 0; int unchangedRowCount = 0; switch (importCo.ImportMuvelet) { case (int)ImportMuveletEnum.Insert: unchangedRowCount = coList.Count; break; case (int)ImportMuveletEnum.InsertAndUpdate: unchangedRowCount = coList.Count - updateRowCount; break; } var importInfoSummary = new ImportInfoSummaryModel { ImportName = ImportExportTanuloKifirResource.ImportDefaultSheetName, InsertRowCount = importJsonItemList?.Count(x => x.Operation == (int)ImportItemOperationEnum.Insert).ToString() ?? "0", UpdateRowCount = updateRowCount.ToString(), DeleteRowCount = "-", UnchangedRowCount = unchangedRowCount.ToString(), InvalidRowCount = importCo.NemImportalhatoItemList.Count.ToString() }; return importInfoSummary; } protected List GetCimImportItemModelList(List importJsonItemList, List tanuloItemCoList) { var importItemModelList = new List(); if (importJsonItemList == null) { if (tanuloItemCoList.Count == 0) { return importItemModelList; } importJsonItemList = new List(); } //NOTE: Hozzáadjuk azokat a az elemeket, amik az excel-ből jöttek! foreach (CimKifirImportJsonItemCo importJsonItem in importJsonItemList) { importItemModelList.Add(new CimImportItemModel { FelhasznaloElotag = importJsonItem.Elotag ?? string.Empty, FelhasznaloVezeteknev = importJsonItem.Vezeteknev ?? string.Empty, FelhasznaloKeresztnev = importJsonItem.Keresztnev ?? string.Empty, TipusNev = importJsonItem.TipusId.GetDisplayName(ClaimData.SelectedTanevID.Value) ?? string.Empty, Iranyitoszam = importJsonItem.Iranyitoszam ?? string.Empty, Telepules = importJsonItem.Telepules ?? string.Empty, Kozterulet = importJsonItem.Kozterulet ?? string.Empty, KozteruletJellegNev = importJsonItem.KozteruletJellegeNev, Hazszam = importJsonItem.Hazszam ?? string.Empty, Emelet = importJsonItem.Emelet ?? string.Empty, Ajto = importJsonItem.Ajto ?? string.Empty, Operation = importJsonItem.Operation }); } //NOTE: Hozzáadjuk azokat a az elemeket, amik az adatbázisból jöttek! foreach (CimItemCo co in tanuloItemCoList.SelectMany(x => x.CimList)) { if (!importJsonItemList.Select(x => x.Id).Contains(co.Id)) { importItemModelList.Add(new CimImportItemModel { FelhasznaloElotag = co.FelhasznaloElotag ?? string.Empty, FelhasznaloVezeteknev = co.FelhasznaloVezeteknev ?? string.Empty, FelhasznaloKeresztnev = co.FelhasznaloKeresztnev ?? string.Empty, TipusNev = co.TipusNev ?? string.Empty, Iranyitoszam = co.Iranyitoszam ?? string.Empty, Telepules = co.Telepules ?? string.Empty, Kozterulet = co.Kozterulet ?? string.Empty, KozteruletJellegNev = co.KozteruletJellegNev ?? string.Empty, Hazszam = co.Hazszam ?? string.Empty, Emelet = co.Emelet ?? string.Empty, Ajto = co.Ajto ?? string.Empty, Operation = (int)ImportItemOperationEnum.Default }); } } return importItemModelList .OrderBy(x => x.FelhasznaloVezeteknev) .ThenBy(x => x.FelhasznaloKeresztnev) .ThenBy(x => x.TipusNev) .ThenByDescending(x => x.OperationText).ToList(); } protected List GetEmailImportItemModelList(List importJsonItemList, List tanuloItemCoList) { var importItemModelList = new List(); if (importJsonItemList == null) { if (tanuloItemCoList.Count == 0) { return importItemModelList; } importJsonItemList = new List(); } //NOTE: Hozzáadjuk azokat a az elemeket, amik az excel-ből jöttek! foreach (EmailKifirImportJsonItemCo importJsonItem in importJsonItemList) { importItemModelList.Add(new EmailImportItemModel { FelhasznaloElotag = importJsonItem.Elotag ?? string.Empty, FelhasznaloVezeteknev = importJsonItem.Vezeteknev, FelhasznaloKeresztnev = importJsonItem.Keresztnev, TipusNev = importJsonItem.TipusId?.GetDisplayName(ClaimData.SelectedTanevID.Value) ?? string.Empty, EmailCim = importJsonItem.EmailCim, Operation = importJsonItem.Operation }); } //NOTE: Hozzáadjuk azokat a az elemeket, amik az adatbázisból jöttek! foreach (EmailItemCo co in tanuloItemCoList.SelectMany(x => x.EmailList)) { if (!importJsonItemList.Select(x => x.Id).Contains(co.Id)) { importItemModelList.Add(new EmailImportItemModel { FelhasznaloElotag = co.FelhasznaloElotag ?? string.Empty, FelhasznaloVezeteknev = co.FelhasznaloVezeteknev, FelhasznaloKeresztnev = co.FelhasznaloKeresztnev, TipusNev = co.TipusNev ?? string.Empty, EmailCim = co.EmailCim, Operation = (int)ImportItemOperationEnum.Default }); } } return importItemModelList .OrderBy(x => x.FelhasznaloVezeteknev) .ThenBy(x => x.FelhasznaloKeresztnev) .ThenBy(x => x.TipusNev) .ThenByDescending(x => x.OperationText).ToList(); } protected List GetTanuloKifirImportItemModelList(TanuloKifirImportCo importCo, List coList) { var importItemModelList = new List(); List importJsonItemList = importCo.MainImportJsonItemList; if (importJsonItemList == null) { if (!coList.Any()) { return importItemModelList; } importJsonItemList = new List(); } //NOTE: Hozzáadjuk azokat a az elemeket, amik az excel-ből jöttek! foreach (FelhasznaloKifirImportJsonItemCo importJsonItem in importJsonItemList) { importItemModelList.Add(new TanuloKifirImportItemModel { Elotag = importJsonItem.Elotag ?? string.Empty, Vezeteknev = importJsonItem.Vezeteknev, Keresztnev = importJsonItem.Keresztnev, OktatasiAzonosito = importJsonItem.OktatasiAzonosito, SzuletesiHely = importJsonItem.SzuletesiHely, SzuletesiIdo = importJsonItem.SzuletesiIdo, AnyjaNeve = importJsonItem.AnyjaNeve, AllampolgarsagNev = importJsonItem.AllampolgarsagId.GetDisplayName(ClaimData.SelectedTanevID.Value), Operation = importJsonItem.Operation }); } //NOTE: Hozzáadjuk azokat az elemeket, amik az adatbázisból jöttek! foreach (TanuloItemCo co in coList) { if (!importJsonItemList.Select(x => x.Id).Contains(co.Id)) { var operation = (int)ImportItemOperationEnum.Default; importItemModelList.Add(new TanuloKifirImportItemModel { Elotag = co.FelhasznaloElotag ?? string.Empty, Vezeteknev = co.FelhasznaloVezeteknev, Keresztnev = co.FelhasznaloKeresztnev, OktatasiAzonosito = co.FelhasznaloOktatasiAzonosito, SzuletesiHely = co.FelhasznaloSzuletesiHely, SzuletesiIdo = co.FelhasznaloSzuletesiIdo, AnyjaNeve = co.FelhasznaloAnyjaNeve, AllampolgarsagNev = co.AllampolgarsagNev ?? string.Empty, Operation = operation }); } } return importItemModelList.OrderBy(x => x.Vezeteknev).ThenBy(x => x.Keresztnev).ThenByDescending(x => x.OperationText).ToList(); } private List GetNemImportalhatoItemModelList(List nemImportalhatoItemList) { var nemImportalhatoItemModelList = new List(); foreach (TanuloKifirImportItemCo nemImportalhatoItem in nemImportalhatoItemList) { nemImportalhatoItemModelList.Add(new TanuloKifirImportNemImportalhatoItemModel { NevImportData = nemImportalhatoItem.NevImportData, OktatasiAzonositoImportData = nemImportalhatoItem.OktatasiAzonositoImportData, SzuletesiHelyImportData = nemImportalhatoItem.SzuletesiHelyImportData, SzuletesiDatumImportData = nemImportalhatoItem.SzuletesiDatumImportData, AnyjaNeveImportData = nemImportalhatoItem.AnyjaNeveImportData, AllandoLakcimIranyitoszamImportData = nemImportalhatoItem.AllandoLakcimIranyitoszamImportData, AllandoLakcimTelepulesImportData = nemImportalhatoItem.AllandoLakcimTelepulesImportData, AllandoLakcimKozteruletImportData = nemImportalhatoItem.AllandoLakcimKozteruletImportData, ErtesitesiCimIranyitoszamImportData = nemImportalhatoItem.ErtesitesiCimIranyitoszamImportData, ErtesitesiCimTelepulesImportData = nemImportalhatoItem.ErtesitesiCimTelepulesImportData, ErtesitesiCimKozteruletImportData = nemImportalhatoItem.ErtesitesiCimKozteruletImportData, AllampolgarsagImportData = nemImportalhatoItem.AllampolgarsagImportData, EmailCimImportData = nemImportalhatoItem.EmailCimImportData, KilencedikEvfolyamnalAlacsonyabbImportData = nemImportalhatoItem.KilencedikEvfolyamnalAlacsonyabbImportData, ErtesitesiCimNevImportData = nemImportalhatoItem.ErtesitesiCimNevImportData, AltalanosIskolaOmKodjaImportData = nemImportalhatoItem.AltalanosIskolaOmKodjaImportData, AltalanosIskolaNeveImportData = nemImportalhatoItem.AltalanosIskolaNeveImportData, AltalanosIskolaIranyitoszamImportData = nemImportalhatoItem.AltalanosIskolaIranyitoszamImportData, AltalanosIskolaCimImportData = nemImportalhatoItem.AltalanosIskolaCimImportData, AltalanosIskolaTelepulesImportData = nemImportalhatoItem.AltalanosIskolaTelepulesImportData, AltalanosIskolaTelefonszamImportData = nemImportalhatoItem.AltalanosIskolaTelefonszamImportData, AltalanosIskolaEmailCimImportData = nemImportalhatoItem.AltalanosIskolaEmailCimImportData, FelveteltNyertTanulmanyiKeruletNeveImportData = nemImportalhatoItem.FelveteltNyertTanulmanyiKeruletNeveImportData, FelveteltNyertTanulmanyiKeruletKodszamaImportData = nemImportalhatoItem.FelveteltNyertTanulmanyiKeruletKodszamaImportData, FelveteltNyertTanulmanyiKeruletSzovegeImportData = nemImportalhatoItem.FelveteltNyertTanulmanyiKeruletSzovegeImportData, NemNyertFelveteltElutasitasImportData = nemImportalhatoItem.NemNyertFelveteltElutasitasImportData, NemNyertFelveteltBeteltImportData = nemImportalhatoItem.NemNyertFelveteltBeteltImportData, NemNyertFelveteltElobbreNertFelveteltImportData = nemImportalhatoItem.NemNyertFelveteltElobbreNertFelveteltImportData, ErrorList = string.Join(Environment.NewLine, nemImportalhatoItem.ErrorList) }); } return nemImportalhatoItemModelList.OrderBy(x => x.NevImportData).ToList(); } public ActionResult Import() { if (ModelState.IsValid) { var helper = new TanuloKifirImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType()); TanuloKifirImportCo importCo = helper.ImportCo; helper.Import(new { ImportJson = importCo }); return Content(Url.Content(TovabbUrl)); } return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } #endregion Import } }