kreta/KretaWeb/Areas/ImportExport/Controllers/NebuloImportExportController.cs
2024-03-13 00:33:46 +01:00

335 lines
19 KiB
C#

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<string>();
List<List<string>> importData = ImportExportHelper.GetImportDataFromExcel(importFile.InputStream, NebuloImportExportHelper.ImportHeaderList, out List<string> 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<NebuloCo> coList = importCo.NebuloCoList;
var importInfoModel = new NebuloImportInfoModel
{
ImportInfoSummaryList = new ImportInfoSummaryListModel
{
ImportInfoSummaryModelList = new List<ImportInfoSummaryModel>
{
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<NebuloCo> coList)
{
List<NebuloImportJsonItemCo> 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<NebuloImportItemModel> GetImportItemModelList(NebuloImportCo importCo, List<NebuloCo> coList)
{
var importItemModelList = new List<NebuloImportItemModel>();
List<NebuloImportJsonItemCo> mainImportJsonItemList = importCo.MainImportJsonItemList;
if (mainImportJsonItemList == null)
{
if (!(coList.Count > 0))
{
return importItemModelList;
}
mainImportJsonItemList = new List<NebuloImportJsonItemCo>();
}
//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<NebuloImportNemImportalhatoItemModel> GetNemImportalhatoItemModelList(List<NebuloImportItemCo> nemImportalhatoItemList)
{
var nemImportalhatoItemModelList = new List<NebuloImportNemImportalhatoItemModel>();
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<object>();
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<List<NebuloEUgySaveResponseModel>>(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 += $"</br><strong>{nebulo.OktatasiAzonositoSzama} - {nebulo.Vezeteknev} {nebulo.Keresztnev}<strong>";
}
}
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
}
}