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; using Kreta.BusinessLogic.Helpers.ImportExport; using Kreta.BusinessLogic.Security; using Kreta.Core; 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.FelhasznaloBelepesImportExport; using Kreta.Web.Areas.Tanulo.Helper; 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.IsSzirIntezmeny.ClaimValue)] [MvcRolePackageAuthorize(TanevEnum.AktTanev, KretaClaimPackages.Adminisztrator.ClaimValue)] public class FelhasznaloBelepesImportExportController : BaseImportExportController { #region Fields private const string TovabbUrlAlkalmazott = @"/Alkalmazott/Alkalmazott"; private const string TovabbUrlTanulo = @"/Tanulo/Tanulo"; #endregion Fields #region Properties public static string GridName => "FelhasznaloGrid"; public static string GridRowTemplateName => "FelhasznaloGridRowTemplate"; public static string JavascriptHelperClassName => "FelhasznaloImportExportHelper"; public static string ConrtollerName => "FelhasznaloBelepesImportExport"; #endregion Properties #region Constructors public FelhasznaloBelepesImportExportController(IUploadFileValidator uploadFileValidator) { UploadFileValidator = uploadFileValidator ?? throw new ArgumentNullException(nameof(uploadFileValidator)); } #endregion Constructors #region Index public ActionResult AlkalmazottIndex() { var model = new FelhasznaloBelepesImportExportModel { MaxAllowedFileSizeInBytes = UploadFileValidator.Configuration.ImportMaxAllowedFileSizeInBytes, AllowedFileExtensions = UploadFileValidator.Configuration.ImportAllowedFileExtensions, FelhasznaloBelepesExportImportTipusEnum = FelhasznaloBelepesExportImportTipusEnum.Alkalmazott, ExportFelhasznaloBelepesExportImportTipusEnum = FelhasznaloBelepesExportImportTipusEnum.Alkalmazott, NemImportalhatoSorokFileName = ImportExportFelhasznaloBelepesResource.NemImportalhatoSorokFileNameAlkalmazott, ExportFileName = ImportExportFelhasznaloBelepesResource.ExportFileNameAlkalmazott, ImportalasText = ImportExportFelhasznaloBelepesResource.ImportalasAlkalmazott, TovabbText = ImportExportFelhasznaloBelepesResource.TovabbAlkamazott }; return View("Index", model); } public ActionResult TanuloIndex() { var model = new FelhasznaloBelepesImportExportModel { MaxAllowedFileSizeInBytes = UploadFileValidator.Configuration.ImportMaxAllowedFileSizeInBytes, AllowedFileExtensions = UploadFileValidator.Configuration.ImportAllowedFileExtensions, FelhasznaloBelepesExportImportTipusEnum = FelhasznaloBelepesExportImportTipusEnum.Tanulo, ExportFelhasznaloBelepesExportImportTipusEnum = FelhasznaloBelepesExportImportTipusEnum.Tanulo, NemImportalhatoSorokFileName = ImportExportFelhasznaloBelepesResource.NemImportalhatoSorokFileNameTanulo, ExportFileName = ImportExportFelhasznaloBelepesResource.ExportFileNameTanulo, ImportalasText = ImportExportFelhasznaloBelepesResource.ImportalasTanulo, TovabbText = ImportExportFelhasznaloBelepesResource.TovabbTanulo }; return View("Index", model); } public ActionResult GondviseloIndex() { var model = new FelhasznaloBelepesImportExportModel { MaxAllowedFileSizeInBytes = UploadFileValidator.Configuration.ImportMaxAllowedFileSizeInBytes, AllowedFileExtensions = UploadFileValidator.Configuration.ImportAllowedFileExtensions, FelhasznaloBelepesExportImportTipusEnum = FelhasznaloBelepesExportImportTipusEnum.Gondviselo, ExportFelhasznaloBelepesExportImportTipusEnum = FelhasznaloBelepesExportImportTipusEnum.Gondviselo, NemImportalhatoSorokFileName = ImportExportFelhasznaloBelepesResource.NemImportalhatoSorokFileNameGondviselo, ExportFileName = ImportExportFelhasznaloBelepesResource.ExportFileNameGondviselo, ImportalasText = ImportExportFelhasznaloBelepesResource.ImportalasGondviselo, TovabbText = ImportExportFelhasznaloBelepesResource.TovabbTanulo, IsEmailKuldes = true, IsGeneraltFileLetoltes = true }; return View("Index", model); } #endregion Index #region Sablon public ActionResult DownloadTemplate(FelhasznaloBelepesExportImportTipusEnum tipusEnum) { MemoryStream memoryStream = new FelhasznaloBelepesImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetTemplate(tipusEnum); string fileDownloadName; switch (tipusEnum) { case FelhasznaloBelepesExportImportTipusEnum.Alkalmazott: fileDownloadName = ImportExportFelhasznaloBelepesResource.ImportSablonFileNameAlkalmazott; break; case FelhasznaloBelepesExportImportTipusEnum.Tanulo: fileDownloadName = ImportExportFelhasznaloBelepesResource.ImportSablonFileNameTanulo; break; case FelhasznaloBelepesExportImportTipusEnum.Gondviselo: fileDownloadName = ImportExportFelhasznaloBelepesResource.ImportSablonFileNameGondviselo; break; default: throw new Exception(); } return new FileStreamResult(memoryStream, Core.Constants.ContentTypes.Xlsx) { FileDownloadName = fileDownloadName }; } #endregion Sablon #region Export [HttpPost] [MvcValidateAjaxAntiForgeryToken] public string Export(FelhasznaloBelepesExportImportTipusEnum exportFelhasznaloBelepesExportImportTipusEnum) { MemoryStream memoryStream = new FelhasznaloBelepesImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetExport(exportFelhasznaloBelepesExportImportTipusEnum); return GetExportFileString(memoryStream); } public string NemImportalhatoSorokExport(FelhasznaloBelepesExportImportTipusEnum felhasznaloBelepesExportImportTipusEnum) { MemoryStream memoryStream = new FelhasznaloBelepesImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetNemImportalhatoSorokExport(felhasznaloBelepesExportImportTipusEnum); return GetExportFileString(memoryStream); } #endregion Export #region Import public JsonResult UploadFile(HttpPostedFileBase importFile, int importMuvelet, FelhasznaloBelepesExportImportTipusEnum felhasznaloBelepesExportImportTipusEnum, bool isGeneraltFileLetoltes = false, bool isEmailKuldes = false) { UploadFileValidator.ValidateImportFile(importFile); var errorResult = new List(); var helper = new FelhasznaloBelepesImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType()); Dictionary importHeaderList = helper.DetailsByEnum(felhasznaloBelepesExportImportTipusEnum).ExcelHeaderList; List> importData = ImportExportHelper.GetImportDataFromExcel(importFile.InputStream, importHeaderList, out List fileErrorResultList); errorResult.AddRange(fileErrorResultList); if (errorResult.Count > 0) { JsonResult errorJson = ThrowCustomError(errorResult); return errorJson; } var anotherYearId = Kreta.Web.Classes.Utils.GetAnotherYearId(); helper.SetImportCo(importData, importMuvelet, felhasznaloBelepesExportImportTipusEnum, isGeneraltFileLetoltes, isEmailKuldes, anotherYearId, ClaimData.IsKovTanev, ClaimData.IsSzakkepzoIntezmeny); return Json(null); } public ActionResult OpenImportPreviewPopup() { FelhasznaloBelepesImportCo importCo = new FelhasznaloBelepesImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).ImportCo; var containerMainGridTabName = GetImportName(importCo.TipusEnum); var importInfoModel = new FelhasznaloBelepesImportInfoModel { ContainerMainGridTabName = containerMainGridTabName, ImportInfoSummaryList = new ImportInfoSummaryListModel { ImportInfoSummaryModelList = new List { GetImportInfoSummary(importCo) } }, MainImportItemList = new FelhasznaloBelepesImportItemListModel { ImportItemModelList = GetImportItemModelList(importCo), TipusEnum = importCo.TipusEnum }, NemImportalhatoItemList = new FelhasznaloBelepesImportNemImportalhatoItemListModel { NemImportalhatoItemModelList = GetNemImportalhatoItemModelList(importCo.NemImportalhatoItemList), TipusEnum = importCo.TipusEnum } }; 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); } private static ImportInfoSummaryModel GetImportInfoSummary(FelhasznaloBelepesImportCo importCo) { var coList = importCo.FelhasznaloBelepesCoList.Where(x => x.TipusEnum == importCo.TipusEnum).ToList(); List mainImportJsonItemList = importCo.MainImportJsonItemList; int insertRowCount = mainImportJsonItemList?.Count(x => x.Operation == (int)ImportItemOperationEnum.Insert) ?? 0; int updateRowCount = mainImportJsonItemList?.Count(x => x.Operation == (int)ImportItemOperationEnum.Update) ?? 0; int deleteRowCount = importCo.ImportMuvelet == (int)ImportMuveletEnum.DeleteAndInsert ? coList.Count(x => x.Importalt) : 0; int unchangedRowCount; switch (importCo.ImportMuvelet) { case (int)ImportMuveletEnum.DeleteAndInsert: unchangedRowCount = coList.Count(x => !x.Importalt); break; case (int)ImportMuveletEnum.InsertAndUpdate: unchangedRowCount = coList.Count - updateRowCount - insertRowCount; break; default: unchangedRowCount = coList.Count - insertRowCount; break; } int invalidRowCount = importCo.NemImportalhatoItemList.Count; var importInfoSummary = new ImportInfoSummaryModel { ImportName = GetImportName(importCo.TipusEnum), InsertRowCount = insertRowCount.ToString(), UpdateRowCount = updateRowCount.ToString(), DeleteRowCount = deleteRowCount.ToString(), UnchangedRowCount = unchangedRowCount.ToString(), InvalidRowCount = invalidRowCount.ToString() }; return importInfoSummary; } private List GetImportItemModelList(FelhasznaloBelepesImportCo importCo) { List coList = importCo.FelhasznaloBelepesCoList.Where(x => x.TipusEnum == importCo.TipusEnum).ToList(); var importItemModelList = new List(); List mainImportJsonItemList = importCo.MainImportJsonItemList; if (mainImportJsonItemList == null) { if (!(coList.Count > 0)) { return importItemModelList; } mainImportJsonItemList = new List(); } //NOTE: Hozzáadjuk azokat a az elemeket, amik az excel-ből jöttek! foreach (FelhasznaloBelepesImportJsonItemCo importJsonItem in mainImportJsonItemList) { importItemModelList.Add(new FelhasznaloBelepesImportItemModel { Elotag = importJsonItem.Elotag ?? string.Empty, Vezeteknev = importJsonItem.Vezeteknev, Keresztnev = importJsonItem.Keresztnev, OktatasiAzonosito = importJsonItem.OktatasiAzonosito, SzuletesiIdo = importJsonItem.SzuletesiIdo, GondviseloNev = importJsonItem.GondviseloNev ?? string.Empty, GondviseloRokonsagiFokNev = importJsonItem.GondviseloRokonsagiFokId.HasValue ? importJsonItem.GondviseloRokonsagiFokId.GetDisplayName(ClaimData.SelectedTanevID.Value) : string.Empty, BejelentkezesiNev = importJsonItem.BejelentkezesiNev ?? string.Empty, Jelszo = importJsonItem.JelszoPlainText, Operation = importJsonItem.Operation }); } //NOTE: Hozzáadjuk azokat a az elemeket, amik az adatbázisból jöttek! foreach (FelhasznaloBelepesItemCo co in coList) { if (co.Id.IsEntityId() && !mainImportJsonItemList.Select(x => x.Id).Contains(co.Id) || !co.Id.IsEntityId() && !mainImportJsonItemList.Any(x => x.AlkalmazottId == co.AlkalmazottId && x.TanuloId == co.TanuloId && x.GondviseloId == co.GondviseloId)) { importItemModelList.Add(new FelhasznaloBelepesImportItemModel { Elotag = co.FelhasznaloElotag ?? string.Empty, Vezeteknev = co.FelhasznaloVezeteknev, Keresztnev = co.FelhasznaloKeresztnev, OktatasiAzonosito = co.FelhasznaloOktatasiAzonosito, SzuletesiIdo = co.FelhasznaloSzuletesiIdo, GondviseloNev = co.GondviseloNev ?? string.Empty, GondviseloRokonsagiFokNev = co.GondviseloRokonsagiFokNev ?? string.Empty, BejelentkezesiNev = co.BejelentkezesiNev ?? string.Empty, Jelszo = co.HasJelszo ? new string('*', Core.Constants.General.JelszoMinimumKarakterekSzama) : string.Empty, Operation = importCo.ImportMuvelet == (int)ImportMuveletEnum.DeleteAndInsert && co.Importalt ? (int)ImportItemOperationEnum.Delete : (int)ImportItemOperationEnum.Default }); } } 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 (FelhasznaloBelepesImportItemCo nemImportalhatoItem in nemImportalhatoItemList) { nemImportalhatoItemModelList.Add(new FelhasznaloBelepesImportNemImportalhatoItemModel { NeveImportData = nemImportalhatoItem.NeveImportData, OktatasiAzonositoImportData = nemImportalhatoItem.OktatasiAzonositoImportData, SzuletesiDatumaImportData = nemImportalhatoItem.SzuletesiDatumaImportData, GondviseloNeveImportData = nemImportalhatoItem.GondviseloNeveImportData, GondviseloRokonsagiFokaImportData = nemImportalhatoItem.GondviseloRokonsagiFokaImportData, FelhasznaloNeveImportData = nemImportalhatoItem.FelhasznaloNeveImportData, JelszavaImportData = nemImportalhatoItem.JelszavaImportData, ErrorList = string.Join(Environment.NewLine, nemImportalhatoItem.ErrorList) }); } return nemImportalhatoItemModelList.OrderBy(x => x.NeveImportData).ToList(); } public ActionResult Import() { if (ModelState.IsValid) { FelhasznaloBelepesImportCo importCo = new FelhasznaloBelepesImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).ImportCo; new ImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).Import(new { ImportJson = importCo }, importCo.ImportMuvelet); string tovabbUrl = importCo.TipusEnum == FelhasznaloBelepesExportImportTipusEnum.Alkalmazott ? TovabbUrlAlkalmazott : TovabbUrlTanulo; if (importCo.TipusEnum == FelhasznaloBelepesExportImportTipusEnum.Gondviselo && (importCo.IsEmailKuldes || importCo.IsGeneraltFileLetoltes)) { var hozzaferesGeneralasaHelper = new HozzaferesGeneralasaHelper(ConnectionTypeExtensions.GetOrganizationConnectionType()); var belepesiAdatokListCo = new BelepesiAdatokListCO(); var file = string.Empty; foreach (FelhasznaloBelepesImportJsonItemCo belepesAdatCo in importCo.MainImportJsonItemList) { hozzaferesGeneralasaHelper.UjGondviseloBelepesiAdatokPdfGeneralasEsEmailKuldes(belepesAdatCo.TanuloId.Value, belepesAdatCo.GondviseloId.Value, importCo.IsEmailKuldes, belepesiAdatokListCo, belepesAdatCo.BejelentkezesiNev, belepesAdatCo.JelszoPlainText); } if (importCo.IsGeneraltFileLetoltes) { var nevmodel = new NyomtatvanyNevGeneralasModel { TanevID = ClaimData.AktivTanevID }; var fileName = CommonExtensions.NevGeneralas("BelepesiAdatok", nevmodel); file = BelepesiAdatokPdfLogic.GetFileLetoltesUrl(hozzaferesGeneralasaHelper.ConvertBelepesiAdatokCoToDataset(belepesiAdatokListCo, false), Core.Constants.FrxNames.HozzatartozoJelszoAdatok, fileName); } return Json(new { belepesiAdatokListCo.EmailErrors, file, tovabbUrl }); } return Json(new { tovabbUrl }); } return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } #endregion Import private static string GetImportName(FelhasznaloBelepesExportImportTipusEnum tipusEnum) { string containerMainGridTabName; switch (tipusEnum) { case FelhasznaloBelepesExportImportTipusEnum.Alkalmazott: containerMainGridTabName = ImportExportFelhasznaloBelepesResource.AlkalmazottFelhasznaloBelepesiAdatok; break; case FelhasznaloBelepesExportImportTipusEnum.Tanulo: containerMainGridTabName = ImportExportFelhasznaloBelepesResource.TanuloFelhasznaloBelepesiAdatok; break; case FelhasznaloBelepesExportImportTipusEnum.Gondviselo: containerMainGridTabName = ImportExportFelhasznaloBelepesResource.GondviseloFelhasznaloBelepesiAdatok; break; default: throw new Exception(); } return containerMainGridTabName; } } }