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.BusinessLogic.Utils; using Kreta.Enums; using Kreta.Enums.ManualEnums; using Kreta.Enums.ManualEnums.ImportExport; using Kreta.Resources; using Kreta.Web.Areas.ImportExport.Models.AlkalmazottMunkaugyiAdatokImportExport; using Kreta.Web.Areas.ImportExport.Models.CommonModels; 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)] [MvcRolePackageAuthorize(TanevEnum.AktEsKovTanev, KretaClaimPackages.Adminisztrator.ClaimValue)] public class AlkalmazottMunkaugyiAdatokImportExportController : BaseImportExportController { #region Fields private const string TovabbUrl = @"~/Alkalmazott/Alkalmazott"; #endregion Fields #region Properties public static string GridName => "AlkalmazottMunkaugyiAdatokGrid"; public static string GridRowTemplateName => "AlkalmazottMunkaugyiAdatokGridRowTemplate"; public static string JavascriptHelperClassName => "AlkalmazottMunkaugyiAdatokImportExportHelper"; public static string ControllerName => "AlkalmazottMunkaugyiAdatokImportExport"; #endregion Properties #region Constructors public AlkalmazottMunkaugyiAdatokImportExportController(IUploadFileValidator uploadFileValidator) { UploadFileValidator = uploadFileValidator ?? throw new ArgumentNullException(nameof(uploadFileValidator)); } #endregion Constructors public ActionResult Index() { var model = new AlkalmazottMunkaugyiAdatokImportExportModel() { MaxAllowedFileSizeInBytes = UploadFileValidator.Configuration.ImportMaxAllowedFileSizeInBytes, AllowedFileExtensions = UploadFileValidator.Configuration.ImportAllowedFileExtensions }; return View(model); } #region Sablon public ActionResult DownloadTemplate() { MemoryStream memoryStream = new AlkalmazottMunkaugyiAdatokImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetTemplate(); return new FileStreamResult(memoryStream, Core.Constants.ContentTypes.Xlsx) { FileDownloadName = ImportExportAlkalmazottMunkaugyiAdatokResource.ImportSablonFileName }; } #endregion Sablon #region Export [HttpPost] [MvcValidateAjaxAntiForgeryToken] public string Export() { MemoryStream memoryStream = new AlkalmazottMunkaugyiAdatokImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetExport(); return GetExportFileString(memoryStream); } [HttpPost] [MvcValidateAjaxAntiForgeryToken] public string NemImportalhatoSorokExport() { MemoryStream memoryStream = new AlkalmazottMunkaugyiAdatokImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetNemImportalhatoSorokExport(); return GetExportFileString(memoryStream); } #endregion Export #region Import public JsonResult UploadFile(HttpPostedFileBase importFile) { UploadFileValidator.ValidateImportFile(importFile); var errorResult = new List(); Dictionary importHeaderList = AlkalmazottMunkaugyiAdatokImportExportHelper.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 AlkalmazottMunkaugyiAdatokImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).SetImportCo(importData, ClaimData.IsSzakkepzoIntezmeny); return Json(null); } public ActionResult OpenImportPreviewPopup() { AlkalmazottMunkaugyiAdatokImportCo importCo = new AlkalmazottMunkaugyiAdatokImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).ImportCo; var importInfoModel = new AlkalmazottMunkaugyiAdatokImportInfoModel { ImportInfoSummaryList = new ImportInfoSummaryListModel { ImportInfoSummaryModelList = new List { GetImportInfoSummary(importCo) } }, MainImportItemList = new AlkalmazottMunkaugyiAdatokImportItemListModel { ImportItemModelList = GetImportItemModelList(importCo) }, NemImportalhatoItemList = new AlkalmazottMunkaugyiAdatokImportNemimportalhatoItemListModel { 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); } public ActionResult Import() { if (ModelState.IsValid) { AlkalmazottMunkaugyiAdatokImportCo importCo = new AlkalmazottMunkaugyiAdatokImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).ImportCo; new AlkalmazottMunkaugyiAdatokImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).Import(importCo.MainImportJsonItemList); return Content(Url.Content(TovabbUrl)); } return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } private static ImportInfoSummaryModel GetImportInfoSummary(AlkalmazottMunkaugyiAdatokImportCo importCo) { List coList = importCo.AlkalmazottMunkaugyiAdatokCoList; 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 = coList.Count - updateRowCount; int invalidRowCount = importCo.NemImportalhatoItemList.Count; var importInfoSummary = new ImportInfoSummaryModel { ImportName = ImportExportAlkalmazottMunkaugyiAdatokResource.ImportDefaultSheetName, InsertRowCount = insertRowCount.ToString(), UpdateRowCount = updateRowCount.ToString(), DeleteRowCount = deleteRowCount.ToString(), UnchangedRowCount = unchangedRowCount.ToString(), InvalidRowCount = invalidRowCount.ToString() }; return importInfoSummary; } private List GetImportItemModelList(AlkalmazottMunkaugyiAdatokImportCo importCo) { List coList = importCo.AlkalmazottMunkaugyiAdatokCoList; 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 (AlkalmazottMunkaugyiAdatokImportJsonItemCo importJsonItem in mainImportJsonItemList) { importItemModelList.Add(new AlkalmazottMunkaugyiAdatokImportItemModel { PedagogusNeve = CommonUtils.GetDisplayableString(importJsonItem.PedagogusNeve, ClaimData.SelectedTanevID.Value), PedagogusElotag = CommonUtils.GetDisplayableString(importJsonItem.PedagogusElotag, ClaimData.SelectedTanevID.Value), PedagogusUtonev = CommonUtils.GetDisplayableString(importJsonItem.PedagogusUtonev, ClaimData.SelectedTanevID.Value), PedagogusVezeteknev = CommonUtils.GetDisplayableString(importJsonItem.PedagogusVezeteknev, ClaimData.SelectedTanevID.Value), PedagogusAnyjaNeve = CommonUtils.GetDisplayableString(importJsonItem.PedagogusAnyjaNeve, ClaimData.SelectedTanevID.Value), SzuletesiDatum = CommonUtils.GetDisplayableString(importJsonItem.SzuletesiDatum, ClaimData.SelectedTanevID.Value), SzuletesiHely = CommonUtils.GetDisplayableString(importJsonItem.SzuletesiHely, ClaimData.SelectedTanevID.Value), OktatasiAzonosito = CommonUtils.GetDisplayableString(importJsonItem.OktatasiAzonosito, ClaimData.SelectedTanevID.Value), AdoazonositoJel = CommonUtils.GetDisplayableString(importJsonItem.AdoazonositoJel, ClaimData.SelectedTanevID.Value), BesorolasiFokozat = CommonUtils.GetDisplayableString((BesorolasiFokozatTipusEnum?)importJsonItem.BesorolasiFokozat, ClaimData.SelectedTanevID.Value), Munkakor = CommonUtils.GetDisplayableString((MunkakorTipusEnum?)importJsonItem.Munkakor, ClaimData.SelectedTanevID.Value), Munkaviszony = CommonUtils.GetDisplayableString((MunkaviszonyTipusEnum?)importJsonItem.Munkaviszony, ClaimData.SelectedTanevID.Value), KotelezoOraszam = CommonUtils.GetDisplayableString(importJsonItem.KotelezoOraszam, ClaimData.SelectedTanevID.Value), MunkaidoKedvezmenyOraszam = CommonUtils.GetDisplayableString(importJsonItem.MunkaidoKedvezmenyOraszam, ClaimData.SelectedTanevID.Value), MunkaidoKedvezmenyOka = CommonUtils.GetDisplayableString((MunkaidoKedvezmenyOkaEnum?)importJsonItem.MunkaidoKedvezmenyOka, ClaimData.SelectedTanevID.Value), AlkalmazasKezdete = CommonUtils.GetDisplayableString(importJsonItem.AlkalmazasKezdete, ClaimData.SelectedTanevID.Value), FoglalkoztatasTipus = CommonUtils.GetDisplayableString((FoglalkoztatasTipusaEnum?)importJsonItem.FoglalkoztatasTipus, ClaimData.SelectedTanevID.Value), VezetoiOraszamOka = CommonUtils.GetDisplayableString((VezetoiOraszamokTipusEnum?)importJsonItem.VezetoiOraszamOka, ClaimData.SelectedTanevID.Value), FeladatellatasiHely = CommonUtils.GetDisplayableString(importJsonItem.FeladataellatasiHely, ClaimData.SelectedTanevID.Value), IsTartosTavollet = CommonUtils.GetDisplayableString(importJsonItem.IsTartosTavollet, ClaimData.SelectedTanevID.Value), IsBetoltetlenAllashely = CommonUtils.GetDisplayableString(importJsonItem.IsBetoltetlenAllashely, ClaimData.SelectedTanevID.Value), IsKulsoAlkalmazott = CommonUtils.GetDisplayableString(importJsonItem.IsKulsoAlkalmazott, ClaimData.SelectedTanevID.Value), IsFoallasu = CommonUtils.GetDisplayableString(importJsonItem.IsFoallasu, ClaimData.SelectedTanevID.Value), IsNyugdijas = CommonUtils.GetDisplayableString(importJsonItem.IsNyugdijas, ClaimData.SelectedTanevID.Value), IsSzakertoiVagyVizsgaelnokiTevekenysegu = CommonUtils.GetDisplayableString(importJsonItem.IsSzakertoiVagyVizsgaelnokiTevekenysegu, ClaimData.SelectedTanevID.Value), IsSzakmaiTovabbkepzes = CommonUtils.GetDisplayableString(importJsonItem.IsSzakmaiTovabbkepzes, ClaimData.SelectedTanevID.Value), IsSzakvizsga = CommonUtils.GetDisplayableString(importJsonItem.IsSzakvizsga, ClaimData.SelectedTanevID.Value), IsAttanito = CommonUtils.GetDisplayableString(importJsonItem.IsAttanito, ClaimData.SelectedTanevID.Value), IsAttanitoMasIntezmenynel = CommonUtils.GetDisplayableString(importJsonItem.IsAttanitoMasIntezmenynel, ClaimData.SelectedTanevID.Value), IsTartosTavollevoHelyettesites = CommonUtils.GetDisplayableString(importJsonItem.IsTartosTavollevoHelyettesites, ClaimData.SelectedTanevID.Value), IsSzakertoKutatotanar = CommonUtils.GetDisplayableString(importJsonItem.IsSzakerto, ClaimData.SelectedTanevID.Value), Operation = importJsonItem.Operation }); } //NOTE: Hozzáadjuk azokat a az elemeket, amik az adatbázisból jöttek! foreach (AlkalmazottMunkaugyiAdatokCo co in coList) { if (!mainImportJsonItemList.Select(x => x.Id).Contains(co.MunkaugyiAdatId)) { importItemModelList.Add(new AlkalmazottMunkaugyiAdatokImportItemModel { PedagogusNeve = CommonUtils.GetDisplayableString(co.Nev, ClaimData.SelectedTanevID.Value), PedagogusElotag = CommonUtils.GetDisplayableString(co.FelhasznaloElotag, ClaimData.SelectedTanevID.Value), PedagogusVezeteknev = CommonUtils.GetDisplayableString(co.FelhasznaloVezeteknev, ClaimData.SelectedTanevID.Value), PedagogusUtonev = CommonUtils.GetDisplayableString(co.FelhasznaloKeresztnev, ClaimData.SelectedTanevID.Value), PedagogusAnyjaNeve = CommonUtils.GetDisplayableString(co.FelhasznaloAnyjaNeve, ClaimData.SelectedTanevID.Value), SzuletesiDatum = CommonUtils.GetDisplayableString(co.FelhasznaloSzuletesiIdo, ClaimData.SelectedTanevID.Value), SzuletesiHely = CommonUtils.GetDisplayableString(co.FelhasznaloSzuletesiHely, ClaimData.SelectedTanevID.Value), OktatasiAzonosito = CommonUtils.GetDisplayableString(co.FelhasznaloOktatasiAzonosito, ClaimData.SelectedTanevID.Value), AdoazonositoJel = CommonUtils.GetDisplayableString(co.AdoazonositoJel, ClaimData.SelectedTanevID.Value), BesorolasiFokozat = CommonUtils.GetDisplayableString((BesorolasiFokozatTipusEnum?)co.BesorolasiFokozat, ClaimData.SelectedTanevID.Value), Munkakor = CommonUtils.GetDisplayableString((MunkakorTipusEnum?)co.Munkakor, ClaimData.SelectedTanevID.Value), Munkaviszony = CommonUtils.GetDisplayableString((MunkaviszonyTipusEnum?)co.FoglalkoztatasModja, ClaimData.SelectedTanevID.Value), KotelezoOraszam = CommonUtils.GetDisplayableString(co.KotelezoOraszam, ClaimData.SelectedTanevID.Value), MunkaidoKedvezmenyOraszam = CommonUtils.GetDisplayableString(co.MunkaidoKedvezmenyOraszam, ClaimData.SelectedTanevID.Value), MunkaidoKedvezmenyOka = CommonUtils.GetDisplayableString((MunkaidoKedvezmenyOkaEnum?)co.MunkaidoKedvezmenyOka, ClaimData.SelectedTanevID.Value), AlkalmazasKezdete = CommonUtils.GetDisplayableString(co.AlkalmazasKezdete, ClaimData.SelectedTanevID.Value), FoglalkoztatasTipus = CommonUtils.GetDisplayableString((FoglalkoztatasTipusaEnum?)co.FoglalkoztatasTipusa, ClaimData.SelectedTanevID.Value), VezetoiOraszamOka = CommonUtils.GetDisplayableString((VezetoiOraszamokTipusEnum?)co.VezetoiOraszamOka, ClaimData.SelectedTanevID.Value), FeladatellatasiHely = CommonUtils.GetDisplayableString(co.FeladatellatasiHely, ClaimData.SelectedTanevID.Value), IsTartosTavollet = CommonUtils.GetDisplayableString(co.IsTartosTavollet, ClaimData.SelectedTanevID.Value), IsBetoltetlenAllashely = CommonUtils.GetDisplayableString(co.IsBetoltetlenAllashely, ClaimData.SelectedTanevID.Value), IsKulsoAlkalmazott = CommonUtils.GetDisplayableString(co.IsKulsoAlkalmazott, ClaimData.SelectedTanevID.Value), IsFoallasu = CommonUtils.GetDisplayableString(co.IsFoallasu, ClaimData.SelectedTanevID.Value), IsNyugdijas = CommonUtils.GetDisplayableString(co.IsNyugdijas, ClaimData.SelectedTanevID.Value), IsSzakertoiVagyVizsgaelnokiTevekenysegu = CommonUtils.GetDisplayableString(co.IsSzakertoiVagyVizsgaelnokiTevekenysegu, ClaimData.SelectedTanevID.Value), IsSzakmaiTovabbkepzes = CommonUtils.GetDisplayableString(co.IsSzakmaiTovabbkepzes, ClaimData.SelectedTanevID.Value), IsSzakvizsga = CommonUtils.GetDisplayableString(co.IsSzakvizsga, ClaimData.SelectedTanevID.Value), IsAttanito = CommonUtils.GetDisplayableString(co.IsAttanito, ClaimData.SelectedTanevID.Value), IsAttanitoMasIntezmenynel = CommonUtils.GetDisplayableString(co.IsAttanitoMasIntezmenynel, ClaimData.SelectedTanevID.Value), IsTartosTavollevoHelyettesites = CommonUtils.GetDisplayableString(co.IsTartosTavollevoHelyettesites, ClaimData.SelectedTanevID.Value), IsSzakertoKutatotanar = CommonUtils.GetDisplayableString(co.IsSzakerto, ClaimData.SelectedTanevID.Value), Operation = importCo.ImportMuvelet == (int)ImportMuveletEnum.DeleteAndInsert && co.Importalt ? (int)ImportItemOperationEnum.Delete : (int)ImportItemOperationEnum.Default }); } } return importItemModelList.OrderBy(x => x.PedagogusNeve).ThenByDescending(x => x.OperationText).ToList(); } private List GetNemImportalhatoItemModelList(List nemImportalhatoItemList) { var nemImportalhatoItemModelList = new List(); foreach (AlkalmazottMunkaugyiAdatokImportItemCo nemImportalhatoItem in nemImportalhatoItemList) { nemImportalhatoItemModelList.Add(new AlkalmazottMunkaugyiAdatokImportNemimportalhatoItemModel { PedagogusNevImportData = nemImportalhatoItem.PedagogusNeveImportData, PedagogusElotagImportData = nemImportalhatoItem.PedagogusNevElotagImportData, PedagogusUtonevImportData = nemImportalhatoItem.PedagogusUtoneveImportData, PedagogusVezeteknevImportData = nemImportalhatoItem.PedagogusVezetekneveImportData, PedagogusAnyjaNeveImportData = nemImportalhatoItem.PedagogusAnyjaNeveImportData, SzuletesiDatumImportData = nemImportalhatoItem.PedagogusSzuletesiDatumaImportData, SzuletesiHelyImportData = nemImportalhatoItem.PedagogusSzuletesiHelyeImportData, OktatasiAzonositoImportData = nemImportalhatoItem.PedagogusOktatasiAzonositoImportData, AdoazonositoJelImportData = nemImportalhatoItem.AdoazonositoJelImportData, BesorolasiFokozatImportData = nemImportalhatoItem.PedagogusFokozatImportData, MunkakorImportData = nemImportalhatoItem.MunkakorImportData, MunkaviszonyImportData = nemImportalhatoItem.FoglalkoztatasiJogviszonyImportData, KotelezoOraszamImportData = nemImportalhatoItem.KotelezoOraszamaImportData, MunkaidoKedvezmenyOraszamImportData = nemImportalhatoItem.MunkaidokedvezmenyOraszamaImportData, MunkaidoKedvezmenyOkaImportData = nemImportalhatoItem.FeladattalTerheltOraszamOkaImportData, AlkalmazasKezdeteImportData = nemImportalhatoItem.AlkalmazasKezdeteImportData, FoglalkoztatasTipusImportData = nemImportalhatoItem.FoglalkoztatasTipusaImportData, VezetoiOraszamOkaImportData = nemImportalhatoItem.VezetoiOraszamOkaImportData, FeladatellatasiHelyImportData = nemImportalhatoItem.FeladatellatasiHelyImportData, IsTartosHelyettesitesImportData = nemImportalhatoItem.TartosanTavollevoImportData, IsBetoltetlenAllashelyImportData = nemImportalhatoItem.BetoltetlenAllashelyImportData, IsKulsoAlkalmazottImportData = nemImportalhatoItem.KulsoAlkalmazottImportData, IsFoallasuImportData = nemImportalhatoItem.FoallasuImportData, IsNyugdijasImportData = nemImportalhatoItem.NyugdijasTovabbfoglalkoztatottImportData, IsSzakertoiVagyVizsgaelnokiTevekenyseguImportData = nemImportalhatoItem.SzakertoiVagyVizsgaelnokiTevekenyseguImportData, IsSzakmaiTovabbkepzesImportData = nemImportalhatoItem.SzakmaiTovabbkepzesImportData, IsSzakvizsgaImportData = nemImportalhatoItem.SzakvizsgaImportData, IsAttanitoImportData = nemImportalhatoItem.AttanitoIntezmenyenBelulImportData, IsSzakertoKutatotanarImportData = nemImportalhatoItem.SzakertoImportData, ErrorList = string.Join(Environment.NewLine, nemImportalhatoItem.ErrorList) }); } return nemImportalhatoItemModelList.OrderBy(x => x.PedagogusNevImportData).ToList(); } #endregion Import } }