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.Client.Eugyintezes.Configuration; using Kreta.Enums; using Kreta.Enums.ManualEnums.ImportExport; using Kreta.Resources; using Kreta.Web.Areas.Beiratkozas.Models; using Kreta.Web.Areas.ImportExport.Models.CommonModels; using Kreta.Web.Areas.ImportExport.Models.NebuloImportExport; using Kreta.Web.Classes; using Kreta.Web.Helpers; using Kreta.Web.Helpers.Error; using Kreta.Web.Models.EditorTemplates; using Kreta.Web.Security; using Newtonsoft.Json; namespace Kreta.Web.Areas.ImportExport.Controllers { [MvcRoleClaimsAuthorize(true)] [MvcRolePackageDenyAuthorize(KretaClaimPackages.IsOnlyAlkalmozott.ClaimValue)] [MvcRolePackageAuthorize(KretaClaimPackages.Adminisztrator.ClaimValue)] public class NebuloImportExportController : BaseImportExportController { #region Fields private readonly IEugyintezesClientConfiguration _eugyintezesClientConfiguration; private const string TovabbUrl = @"~/Beiratkozas/Nebulo"; #endregion Fields #region Properties public static string GridName => "NebuloGrid"; public static string GridRowTemplateName => "NebuloGridRowTemplate"; public static string JavascriptHelperClassName => "NebuloImportExportHelper"; public static string ConrtollerName => "NebuloImportExport"; #endregion Properties #region Constructors public NebuloImportExportController(IUploadFileValidator uploadFileValidator, IEugyintezesClientConfiguration eugyintezesClientConfiguration) { UploadFileValidator = uploadFileValidator ?? throw new ArgumentNullException(nameof(uploadFileValidator)); this._eugyintezesClientConfiguration = eugyintezesClientConfiguration ?? throw new ArgumentNullException(nameof(eugyintezesClientConfiguration)); } #endregion Constructors public ActionResult Index() { var model = new NebuloImportExportModel { MaxAllowedFileSizeInBytes = UploadFileValidator.Configuration.ImportMaxAllowedFileSizeInBytes, AllowedFileExtensions = UploadFileValidator.Configuration.ImportAllowedFileExtensions }; if (ClaimData.IsBeiratkozasVeglegesitve) { return Redirect(Url.Content(CommonExtensions.GetDefaultPage())); } return View(model); } #region Export public string NemImportalhatoSorokExport() { MemoryStream memoryStream = new NebuloImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetNemImportalhatoSorokExport(); return GetExportFileString(memoryStream); } #endregion Export #region Import public JsonResult UploadFile(HttpPostedFileBase importFile, int importMuvelet) { UploadFileValidator.ValidateImportFile(importFile); var errorResult = new List(); List> importData = ImportExportHelper.GetImportDataFromExcel(importFile.InputStream, NebuloImportExportHelper.ImportHeaderList, out List fileErrorResultList); errorResult.AddRange(fileErrorResultList); if (errorResult.Count > 0) { JsonResult errorJson = ThrowCustomError(errorResult); return errorJson; } new NebuloImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).SetImportCo(importData, importMuvelet); return Json(null); } public ActionResult OpenImportPreviewPopup() { NebuloImportCo importCo = new NebuloImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).ImportCo; List coList = importCo.NebuloCoList; var importInfoModel = new NebuloImportInfoModel { ImportInfoSummaryList = new ImportInfoSummaryListModel { ImportInfoSummaryModelList = new List { GetImportInfoSummary(importCo, coList) } }, MainImportItemList = new NebuloImportItemListModel { ImportItemModelList = GetImportItemModelList(importCo, coList) }, NemImportalhatoItemList = new NebuloImportNemImportalhatoItemListModel { NemImportalhatoItemModelList = GetNemImportalhatoItemModelList(importCo.NemImportalhatoItemList), NebuloImportTipus = importCo.NebuloImportTipus } }; 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(NebuloImportCo importCo, List coList) { 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; break; default: unchangedRowCount = coList.Count; break; } int invalidRowCount = importCo.NemImportalhatoItemList.Count; var importInfoSummary = new ImportInfoSummaryModel { ImportName = ImportExportNebuloResource.ImportDefaultSheetName, InsertRowCount = insertRowCount.ToString(), UpdateRowCount = updateRowCount.ToString(), DeleteRowCount = deleteRowCount.ToString(), UnchangedRowCount = unchangedRowCount.ToString(), InvalidRowCount = invalidRowCount.ToString() }; return importInfoSummary; } private List GetImportItemModelList(NebuloImportCo importCo, List coList) { 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 (NebuloImportJsonItemCo importJsonItem in mainImportJsonItemList) { importItemModelList.Add(new NebuloImportItemModel { SzuletesiVezeteknev = importJsonItem.SzuletesiVezeteknev, SzuletesiKeresztnev = importJsonItem.SzuletesiKeresztnev, AnyjaVezeteknev = importJsonItem.AnyjaVezeteknev, AnyjaKeresztnev = importJsonItem.AnyjaKeresztnev, SzuletesiHely = importJsonItem.SzuletesiHely, SzuletesiIdo = importJsonItem.SzuletesiIdo, Operation = importJsonItem.Operation }); } //NOTE: Hozzáadjuk azokat a az elemeket, amik az adatbázisból jöttek! foreach (NebuloCo co in coList) { if (!mainImportJsonItemList.Select(x => x.Id).Contains(co.Id)) { importItemModelList.Add(new NebuloImportItemModel { SzuletesiVezeteknev = co.SzuletesiVezeteknev, SzuletesiKeresztnev = co.SzuletesiKeresztnev, AnyjaVezeteknev = co.AnyjaVezetekneve, AnyjaKeresztnev = co.AnyjaKeresztneve, SzuletesiHely = co.SzuletesiHely, SzuletesiIdo = co.SzuletesiIdo, Operation = importCo.ImportMuvelet == (int)ImportMuveletEnum.DeleteAndInsert && co.Importalt ? (int)ImportItemOperationEnum.Delete : (int)ImportItemOperationEnum.Default }); } } return importItemModelList.OrderBy(x => x.SzuletesiVezeteknev).ThenBy(x => x.SzuletesiKeresztnev).ThenByDescending(x => x.OperationText).ToList(); } private List GetNemImportalhatoItemModelList(List nemImportalhatoItemList) { var nemImportalhatoItemModelList = new List(); foreach (NebuloImportItemCo nemImportalhatoItem in nemImportalhatoItemList) { nemImportalhatoItemModelList.Add(new NebuloImportNemImportalhatoItemModel { FenntartoAzonositoImportData = nemImportalhatoItem.FenntartoAzonositoImportData, FenntartoMegnevezeseImportData = nemImportalhatoItem.FenntartoMegnevezeseImportData, ErvenyesKotelezettsegTipusaImportData = nemImportalhatoItem.ErvenyesKotelezettsegTipusaImportData, OktatasiAzonositoSzamImportData = nemImportalhatoItem.OktatasiAzonositoSzamImportData, ViseltElonevImportData = nemImportalhatoItem.ViseltElonevImportData, ViseltVezeteknevImportData = nemImportalhatoItem.ViseltVezeteknevImportData, ViseltKeresztnevImportData = nemImportalhatoItem.ViseltKeresztnevImportData, ViseltNevNevsorrendImportData = nemImportalhatoItem.ViseltNevNevsorrendImportData, SzuletesiElonevImportData = nemImportalhatoItem.SzuletesiElonevImportData, SzuletesiVezeteknevImportData = nemImportalhatoItem.SzuletesiVezeteknevImportData, SzuletesiKeresztnevImportData = nemImportalhatoItem.SzuletesiKeresztnevImportData, SzuletesiNevNevsorrendImportData = nemImportalhatoItem.SzuletesiNevNevsorrendImportData, AnyjaNeveElonevImportData = nemImportalhatoItem.AnyjaNeveElonevImportData, AnyjaNeveVezeteknevImportData = nemImportalhatoItem.AnyjaNeveVezeteknevImportData, AnyjaNeveKeresztnevImportData = nemImportalhatoItem.AnyjaNeveKeresztnevImportData, AnyjaNeveNevsorrendImportData = nemImportalhatoItem.AnyjaNeveNevsorrendImportData, SzuletesiIdoImportData = nemImportalhatoItem.SzuletesiIdoImportData, SzuletesiTelepulesImportData = nemImportalhatoItem.SzuletesiTelepulesImportData, TartozkodasiCimOrszagImportData = nemImportalhatoItem.TartozkodasiCimOrszagImportData, TartozkodasiCimTelepulesImportData = nemImportalhatoItem.TartozkodasiCimTelepulesImportData, TartozkodasiCimIranyitoszamImportData = nemImportalhatoItem.TartozkodasiCimIranyitoszamImportData, TartozkodasiCimKozteruletNevImportData = nemImportalhatoItem.TartozkodasiCimKozteruletNevImportData, TartozkodasiCimKozteruletJellegImportData = nemImportalhatoItem.TartozkodasiCimKozteruletJellegImportData, TartozkodasiCimHazszamImportData = nemImportalhatoItem.TartozkodasiCimHazszamImportData, TartozkodasiCimPontositasImportData = nemImportalhatoItem.TartozkodasiCimPontositasImportData, AllandoLakcimOrszagImportData = nemImportalhatoItem.AllandoLakcimOrszagImportData, AllandoLakcimTelepulesImportData = nemImportalhatoItem.AllandoLakcimTelepulesImportData, AllandoLakcimIranyitoszamImportData = nemImportalhatoItem.AllandoLakcimIranyitoszamImportData, AllandoLakcimKozteruletNevImportData = nemImportalhatoItem.AllandoLakcimKozteruletNevImportData, AllandoLakcimKozteruletJellegImportData = nemImportalhatoItem.AllandoLakcimKozteruletJellegImportData, AllandoLakcimHazszamImportData = nemImportalhatoItem.AllandoLakcimHazszamImportData, AllandoLakcimPontositasImportData = nemImportalhatoItem.AllandoLakcimPontositasImportData, ErvenyesKotelezettsegKezdeteImportData = nemImportalhatoItem.ErvenyesKotelezettsegKezdeteImportData, ErvenyesKotelezettsegVegeImportData = nemImportalhatoItem.ErvenyesKotelezettsegVegeImportData, HalasztasJogcimeImportData = nemImportalhatoItem.HalasztasJogcimeImportData, HalasztastEngedelyezoSzervTipusaImportData = nemImportalhatoItem.HalasztastEngedelyezoSzervTipusaImportData, HalasztastEngedelyezoSzervMegnevezeseImportData = nemImportalhatoItem.HalasztastEngedelyezoSzervMegnevezeseImportData, HalasztasHatalyaVegdatumaImportData = nemImportalhatoItem.HalasztasHatalyaVegdatumaImportData, KotelezettseghezKapcsolodoAktivVagySzuneteloJogviszonyaImportData = nemImportalhatoItem.KotelezettseghezKapcsolodoAktivVagySzuneteloJogviszonyaImportData, KotelezettseghezKapcsolodoJogviszonyTipusaImportData = nemImportalhatoItem.KotelezettseghezKapcsolodoJogviszonyTipusaImportData, KotelezettseghezKapcsolodoJogviszonyStatuszaImportData = nemImportalhatoItem.KotelezettseghezKapcsolodoJogviszonyStatuszaImportData, KotelezettseghezKapcsolodoJogviszonyIntezmenyOmAzonositojaImportData = nemImportalhatoItem.KotelezettseghezKapcsolodoJogviszonyIntezmenyOmAzonositojaImportData, KotelezettseghezKapcsolodoJogviszonyIntezmenyNeveImportData = nemImportalhatoItem.KotelezettseghezKapcsolodoJogviszonyIntezmenyNeveImportData, KotelezettseghezKapcsolodoJogviszonyUgyviteliHelySorszamaImportData = nemImportalhatoItem.KotelezettseghezKapcsolodoJogviszonyUgyviteliHelySorszamaImportData, KotelezettseghezKapcsolodoJogviszonyUgyviteliHelyAzonositojaImportData = nemImportalhatoItem.KotelezettseghezKapcsolodoJogviszonyUgyviteliHelyAzonositojaImportData, KotelezettseghezKapcsolodoJogviszonyUgyviteliHelyNeveImportData = nemImportalhatoItem.KotelezettseghezKapcsolodoJogviszonyUgyviteliHelyNeveImportData, KotelezettseghezKapcsolodoJogviszonyUgyviteliHelyCimeImportData = nemImportalhatoItem.KotelezettseghezKapcsolodoJogviszonyUgyviteliHelyCimeImportData, KotelezettseghezKapcsolodoJogviszonyKezdeteImportData = nemImportalhatoItem.KotelezettseghezKapcsolodoJogviszonyKezdeteImportData, KotelezettseghezKapcsolodoJogviszonySzunetelesenekKezdeteImportData = nemImportalhatoItem.KotelezettseghezKapcsolodoJogviszonySzunetelesenekKezdeteImportData, KotelezettseghezKapcsolodoJogviszonySzunetelesenekVarhatoVegeImportData = nemImportalhatoItem.KotelezettseghezKapcsolodoJogviszonySzunetelesenekVarhatoVegeImportData, KotelezettseghezKapcsolodoJogviszonySzunetelesJogcimeImportData = nemImportalhatoItem.KotelezettseghezKapcsolodoJogviszonySzunetelesJogcimeImportData, KotelezettsegetAzIlletekesFenntartohozTartozoIntezmenybenTeljesitiImportData = nemImportalhatoItem.KotelezettsegetAzIlletekesFenntartohozTartozoIntezmenybenTeljesitiImportData, AzUtolsoKotelezettsegetTeljesitoJogviszonyVegdatumaImportData = nemImportalhatoItem.AzUtolsoKotelezettsegetTeljesitoJogviszonyVegdatumaImportData, ErrorList = string.Join(Environment.NewLine, nemImportalhatoItem.ErrorList) }); } return nemImportalhatoItemModelList.OrderBy(x => x.SzuletesiVezeteknevImportData).ThenBy(x => x.SzuletesiKeresztnevImportData).ToList(); } public ActionResult Import() { if (ModelState.IsValid) { NebuloImportCo importCo = new NebuloImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).ImportCo; var obj = new List(); foreach (var item in importCo.MainImportItemList) { obj.Add(new { OktatasiAzonosito = item.OktatasiAzonositoSzama, SzuletesiDatum = item.SzuletesiIdo, Statusz = (int)FelvetelStatuszaTipusEnum.NemJelentMeg, IsKorzetes = true }); } var jsonData = JsonConvert.SerializeObject(obj); var eUgyResult = NebuloWebLogic.NebuloInsert(_eugyintezesClientConfiguration, ClaimData.IntezmenyAzonosito, jsonData); var respModel = JsonConvert.DeserializeObject>(eUgyResult.Content); if (respModel.Where(x => x.MuveletStatusz != "Sikeres").ToList().Count > 0) { string errorMsg = string.Empty; foreach (var item in respModel.Where(x => x.MuveletStatusz != "Sikeres").ToList()) { var nebulo = importCo.MainImportItemList.FirstOrDefault(x => x.OktatasiAzonositoSzama == item.OktatasiAzonosito); if (nebulo != null) { errorMsg += $"
{nebulo.OktatasiAzonositoSzama} - {nebulo.Vezeteknev} {nebulo.Keresztnev}"; } } throw new StatusError(HttpStatusCode.BadRequest, string.Format(BeiratkozasResource.ImportNebuloErrorMsg, errorMsg)); } new ImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).Import(new { ImportJson = importCo }, importCo.ImportMuvelet); return Content(Url.Content(TovabbUrl)); } return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } #endregion Import } }