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.HelperClasses; using Kreta.BusinessLogic.HelperClasses.ImportCo; using Kreta.BusinessLogic.Helpers.ImportExport; using Kreta.BusinessLogic.Security; 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.TanulokElerhetosegiAdataikImportExport; 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)] [MvcRolePackageAuthorize(TanevEnum.AktEsKovTanev, KretaClaimPackages.Adminisztrator.ClaimValue)] public class TanulokElerhetosegiAdataikImportExportController : BaseImportExportController { #region Fields private const string TovabbUrl = @"/Tanulo/Tanulo"; #endregion Fields #region Properties public static string GridName => "TanulokElerhetosegiAdataikGrid"; public static string GridRowTemplateName => "TanulokElerhetosegiAdataikGridRowTemplate"; public static string TelefonszamGridName => "TelefonszamGrid"; public static string TelefonszamGridRowTemplateName => "TelefonszamGridRowTemplate"; public static string EmailGridName => "EmailGrid"; public static string EmailGridRowTemplateName => "EmailGridRowTemplate"; public static string JavascriptHelperClassName => "TanulokElerhetosegiAdataikImportExportHelper"; public static string ConrtollerName => "TanulokElerhetosegiAdataikImportExport"; #endregion Properties #region Constructors public TanulokElerhetosegiAdataikImportExportController(IUploadFileValidator uploadFileValidator) { UploadFileValidator = uploadFileValidator ?? throw new ArgumentNullException(nameof(uploadFileValidator)); } #endregion Constructors public ActionResult Index() { var model = new TanulokElerhetosegiAdataikImportExportModel { MaxAllowedFileSizeInBytes = UploadFileValidator.Configuration.ImportMaxAllowedFileSizeInBytes, AllowedFileExtensions = UploadFileValidator.Configuration.ImportAllowedFileExtensions }; return View(model); } #region Sablon public ActionResult DownloadTemplate() { MemoryStream memoryStream = new TanulokElerhetosegiAdataikImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetTemplate(); return new FileStreamResult(memoryStream, Core.Constants.ContentTypes.Xlsx) { FileDownloadName = ImportExportTanulokElerhetosegiAdataikResource.ImportSablonFileName }; } #endregion Sablon #region Export [HttpPost] [MvcValidateAjaxAntiForgeryToken] public string Export() { MemoryStream memoryStream = new TanulokElerhetosegiAdataikImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetExport(); return GetExportFileString(memoryStream); } public string NemImportalhatoSorokExport() { MemoryStream memoryStream = new TanulokElerhetosegiAdataikImportExportHelper(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 = TanulokElerhetosegiAdataikImportExportHelper.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 TanulokElerhetosegiAdataikImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).SetImportCo(importData, importMuvelet, ClaimData.IsSzakkepzoIntezmeny); return Json(null); } public ActionResult OpenImportPreviewPopup() { TanulokElerhetosegiAdataikImportCo importCo = new TanulokElerhetosegiAdataikImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).ImportCo; List coList = importCo.TanuloCoList; var importInfoModel = new TanulokElerhetosegiAdataikImportInfoModel { ImportInfoSummaryList = new ImportInfoSummaryListModel { ImportInfoSummaryModelList = new List { GetTelefonImportInfoSummary(importCo, coList.Select(x => x.TelefonList.FirstOrDefault()).Where(x => x != null).ToList()), GetEmailImportInfoSummary(importCo, coList.Select(x => x.EmailList.FirstOrDefault()).Where(x => x != null).ToList()) } }, TelefonImportItemList = new TelefonImportItemListModel { ImportItemModelList = GetTelefonImportItemModelList(importCo.TelefonTanuloImportJsonItemList, coList) }, EmailImportItemList = new EmailImportItemListModel { ImportItemModelList = GetEmailImportItemModelList(importCo.EmailTanuloImportJsonItemList, coList) }, NemImportalhatoItemList = new TanulokElerhetosegiAdataikImportNemImportalhatoItemListModel { 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 GetTelefonImportInfoSummary(TanulokElerhetosegiAdataikImportCo importCo, List coList) { List importJsonItemList = importCo.TelefonTanuloImportJsonItemList; int insertRowCount = importJsonItemList?.Count(x => x.Operation == (int)ImportItemOperationEnum.Insert) ?? 0; int updateRowCount = importJsonItemList?.Count(x => x.Operation == (int)ImportItemOperationEnum.Update) ?? 0; int deleteRowCount = importCo.ImportMuvelet == (int)ImportMuveletEnum.DeleteAndInsert ? coList.Count(x => x.Importalt) : 0; int unchangedRowCount = 0; switch (importCo.ImportMuvelet) { case (int)ImportMuveletEnum.DeleteAndInsert: unchangedRowCount = coList.Count(x => !x.Importalt); break; case (int)ImportMuveletEnum.Insert: unchangedRowCount = coList.Count; break; case (int)ImportMuveletEnum.InsertAndUpdate: unchangedRowCount = coList.Count - updateRowCount; break; } int invalidRowCount = importCo.NemImportalhatoItemList.Count; var importInfoSummary = new ImportInfoSummaryModel { ImportName = ImportExportTanulokElerhetosegiAdataikResource.Telefon, InsertRowCount = insertRowCount.ToString(), UpdateRowCount = updateRowCount.ToString(), DeleteRowCount = deleteRowCount.ToString(), UnchangedRowCount = unchangedRowCount.ToString(), InvalidRowCount = invalidRowCount.ToString() }; return importInfoSummary; } protected static ImportInfoSummaryModel GetEmailImportInfoSummary(TanulokElerhetosegiAdataikImportCo importCo, List coList) { List importJsonItemList = importCo.EmailTanuloImportJsonItemList; int insertRowCount = importJsonItemList?.Count(x => x.Operation == (int)ImportItemOperationEnum.Insert) ?? 0; int updateRowCount = importJsonItemList?.Count(x => x.Operation == (int)ImportItemOperationEnum.Update) ?? 0; int deleteRowCount = importCo.ImportMuvelet == (int)ImportMuveletEnum.DeleteAndInsert ? coList.Count(x => x.Importalt) : 0; int unchangedRowCount = 0; switch (importCo.ImportMuvelet) { case (int)ImportMuveletEnum.DeleteAndInsert: unchangedRowCount = coList.Count(x => !x.Importalt); break; case (int)ImportMuveletEnum.Insert: unchangedRowCount = coList.Count; break; case (int)ImportMuveletEnum.InsertAndUpdate: unchangedRowCount = coList.Count - updateRowCount; break; } int invalidRowCount = importCo.NemImportalhatoItemList.Count; var importInfoSummary = new ImportInfoSummaryModel { ImportName = ImportExportTanulokElerhetosegiAdataikResource.Email, InsertRowCount = insertRowCount.ToString(), UpdateRowCount = updateRowCount.ToString(), DeleteRowCount = deleteRowCount.ToString(), UnchangedRowCount = unchangedRowCount.ToString(), InvalidRowCount = invalidRowCount.ToString() }; return importInfoSummary; } private List GetTelefonImportItemModelList(List importJsonItemList, List tanuloItemCoList) { var importItemModelList = new List(); if (importJsonItemList == null) { if (tanuloItemCoList.Count == 0) { return importItemModelList; } importJsonItemList = new List(); } foreach (TelefonTanuloImportJsonItemCo importJsonItem in importJsonItemList) { var tanulo = tanuloItemCoList.FirstOrDefault(t => t.FelhasznaloId == importJsonItem.FelhasznaloId); importItemModelList.Add(new TelefonImportItemModel { FelhasznaloElotag = tanulo?.FelhasznaloElotag ?? string.Empty, FelhasznaloVezeteknev = tanulo?.FelhasznaloVezeteknev ?? string.Empty, FelhasznaloKeresztnev = tanulo?.FelhasznaloKeresztnev ?? string.Empty, Telefonszam = importJsonItem.Telefonszam ?? string.Empty, IsAlapertelmezett = importJsonItem.IsAlapertelmezett == "T" ? Enum.GetName(typeof(IgenNemEnum), IgenNemEnum.Igen) : Enum.GetName(typeof(IgenNemEnum), IgenNemEnum.Nem), TipusNev = importJsonItem.TipusNev ?? string.Empty, Operation = importJsonItem.Operation }); } foreach (TelefonItemCo co in tanuloItemCoList.Select(x => x.TelefonList.FirstOrDefault()).Where(x => x != null)) { if (!importJsonItemList.Select(x => x.Id).Contains(co.Id)) { importItemModelList.Add(new TelefonImportItemModel { FelhasznaloElotag = co.FelhasznaloElotag ?? string.Empty, FelhasznaloVezeteknev = co.FelhasznaloVezeteknev ?? string.Empty, FelhasznaloKeresztnev = co.FelhasznaloKeresztnev ?? string.Empty, Telefonszam = co.Telefonszam ?? string.Empty, IsAlapertelmezett = co.IsAlapertelmezett == true ? Enum.GetName(typeof(IgenNemEnum), IgenNemEnum.Igen) : Enum.GetName(typeof(IgenNemEnum), IgenNemEnum.Nem), TipusNev = co.TipusNev ?? string.Empty, Operation = (int)ImportItemOperationEnum.Default }); } } return importItemModelList .OrderBy(x => x.FelhasznaloVezeteknev) .ThenBy(x => x.FelhasznaloKeresztnev) .ThenByDescending(x => x.OperationText).ToList(); } private List GetEmailImportItemModelList(List importJsonItemList, List tanuloItemCoList) { var importItemModelList = new List(); if (importJsonItemList == null) { if (tanuloItemCoList.Count == 0) { return importItemModelList; } importJsonItemList = new List(); } foreach (EmailTanuloImportJsonItemCo importJsonItem in importJsonItemList) { var tanulo = tanuloItemCoList.FirstOrDefault(t => t.FelhasznaloId == importJsonItem.FelhasznaloId); importItemModelList.Add(new EmailImportItemModel { FelhasznaloElotag = tanulo?.FelhasznaloElotag ?? string.Empty, FelhasznaloVezeteknev = tanulo?.FelhasznaloVezeteknev ?? string.Empty, FelhasznaloKeresztnev = tanulo?.FelhasznaloKeresztnev ?? string.Empty, EmailCim = importJsonItem.EmailCim ?? string.Empty, IsAlapertelmezett = importJsonItem.IsAlapertelmezett == "T" ? Enum.GetName(typeof(IgenNemEnum), IgenNemEnum.Igen) : Enum.GetName(typeof(IgenNemEnum), IgenNemEnum.Nem), TipusNev = importJsonItem.TipusNev ?? string.Empty, Operation = importJsonItem.Operation }); } foreach (EmailItemCo co in tanuloItemCoList.Select(x => x.EmailList.FirstOrDefault()).Where(x => x != null)) { if (!importJsonItemList.Select(x => x.Id).Contains(co.Id)) { importItemModelList.Add(new EmailImportItemModel { FelhasznaloElotag = co.FelhasznaloElotag ?? string.Empty, FelhasznaloVezeteknev = co.FelhasznaloVezeteknev ?? string.Empty, FelhasznaloKeresztnev = co.FelhasznaloKeresztnev ?? string.Empty, EmailCim = co.EmailCim ?? string.Empty, IsAlapertelmezett = co.IsAlapertelmezett == true ? Enum.GetName(typeof(IgenNemEnum), IgenNemEnum.Igen) : Enum.GetName(typeof(IgenNemEnum), IgenNemEnum.Nem), TipusNev = co.TipusNev ?? string.Empty, Operation = (int)ImportItemOperationEnum.Default }); } } return importItemModelList .OrderBy(x => x.FelhasznaloVezeteknev) .ThenBy(x => x.FelhasznaloKeresztnev) .ThenByDescending(x => x.OperationText).ToList(); } private List GetNemImportalhatoItemModelList(List nemImportalhatoItemList) { var nemImportalhatoItemModelList = new List(); foreach (TanulokElerhetosegiAdataikImportItemCo nemImportalhatoItem in nemImportalhatoItemList) { nemImportalhatoItemModelList.Add(new TanulokElerhetosegiAdataikImportNemImportalhatoItemModel { TanuloNeveImportData = nemImportalhatoItem.TanuloNeveImportData, TanuloOktatasiAzonositoImportData = nemImportalhatoItem.TanuloOktatasiAzonositoImportData, TanuloTelefonszamImportData = nemImportalhatoItem.TanuloTelefonszamImportData, TelefonszamAlapertelmezettImportData = nemImportalhatoItem.TelefonszamAlapertelmezettImportData, TelefonszamTipusaImportData = nemImportalhatoItem.TelefonszamTipusaImportData, TanuloEmailCimImportData = nemImportalhatoItem.TanuloEmailCimImportData, EmailAlapertelmezettImportData = nemImportalhatoItem.EmailAlapertelmezettImportData, EmailTipusImportData = nemImportalhatoItem.EmailTipusImportData, ErrorList = string.Join(Environment.NewLine, nemImportalhatoItem.ErrorList) }); } return nemImportalhatoItemModelList.OrderBy(x => x.TanuloNeveImportData).ToList(); } public ActionResult Import() { if (ModelState.IsValid) { var tanulokElerhetosegiAdataikImportExportHelper = new TanulokElerhetosegiAdataikImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType()); TanulokElerhetosegiAdataikImportCo importCo = tanulokElerhetosegiAdataikImportExportHelper.ImportCo; string tableNameList = "T_TELEFON_OSSZES,T_EMAIL_OSSZES"; var alapertelmezettEmailFelhasznaloIds = importCo.EmailTanuloImportJsonItemList.Where(e => e.IsAlapertelmezett == "T").Select(e => e.FelhasznaloId); var alapertelmezettTelefonFelhasznaloIds = importCo.TelefonTanuloImportJsonItemList.Where(t => t.IsAlapertelmezett == "T").Select(t => t.FelhasznaloId); tanulokElerhetosegiAdataikImportExportHelper.Import(new { ImportJson = importCo }, importCo.ImportMuvelet, tableNameList, alapertelmezettEmailFelhasznaloIds, alapertelmezettTelefonFelhasznaloIds); return Json(new { tovabbUrl = TovabbUrl }); } return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } #endregion Import } }