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

380 lines
18 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.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<string>();
Dictionary<int, string> importHeaderList = TanulokElerhetosegiAdataikImportExportHelper.ImportHeaderList;
List<List<string>> importData = ImportExportHelper.GetImportDataFromExcel(importFile.InputStream, importHeaderList, out List<string> 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<TanuloItemCo> coList = importCo.TanuloCoList;
var importInfoModel = new TanulokElerhetosegiAdataikImportInfoModel
{
ImportInfoSummaryList = new ImportInfoSummaryListModel
{
ImportInfoSummaryModelList = new List<ImportInfoSummaryModel>
{
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<TelefonItemCo> coList)
{
List<TelefonTanuloImportJsonItemCo> 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<EmailItemCo> coList)
{
List<EmailTanuloImportJsonItemCo> 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<TelefonImportItemModel> GetTelefonImportItemModelList(List<TelefonTanuloImportJsonItemCo> importJsonItemList, List<TanuloItemCo> tanuloItemCoList)
{
var importItemModelList = new List<TelefonImportItemModel>();
if (importJsonItemList == null)
{
if (tanuloItemCoList.Count == 0)
{
return importItemModelList;
}
importJsonItemList = new List<TelefonTanuloImportJsonItemCo>();
}
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<EmailImportItemModel> GetEmailImportItemModelList(List<EmailTanuloImportJsonItemCo> importJsonItemList, List<TanuloItemCo> tanuloItemCoList)
{
var importItemModelList = new List<EmailImportItemModel>();
if (importJsonItemList == null)
{
if (tanuloItemCoList.Count == 0)
{
return importItemModelList;
}
importJsonItemList = new List<EmailTanuloImportJsonItemCo>();
}
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<TanulokElerhetosegiAdataikImportNemImportalhatoItemModel> GetNemImportalhatoItemModelList(List<TanulokElerhetosegiAdataikImportItemCo> nemImportalhatoItemList)
{
var nemImportalhatoItemModelList = new List<TanulokElerhetosegiAdataikImportNemImportalhatoItemModel>();
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
}
}