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

461 lines
23 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.Classes;
using Kreta.BusinessLogic.HelperClasses;
using Kreta.BusinessLogic.HelperClasses.ImportCo;
using Kreta.BusinessLogic.Helpers.ImportExport;
using Kreta.BusinessLogic.Security;
using Kreta.Enums;
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.TanuloKifirImportExport;
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, KretaClaimPackages.IsSzirIntezmeny.ClaimValue)]
[MvcRolePackageAuthorize(TanevEnum.KovTanev, KretaClaimPackages.Adminisztrator.ClaimValue)]
public class TanuloKifirImportExportController : BaseImportExportController
{
#region Fields
private const string TovabbUrl = @"~/Tanulo/Tanulo";
#endregion Fields
#region Properties
public static string CimGridName => "CimGrid";
public static string CimGridRowTemplateName => "CimGridRowTemplate";
public static string EmailGridName => "EmailGrid";
public static string EmailGridRowTemplateName => "EmailGridRowTemplate";
public static string TanuloKifirGridName => "TanuloKifirGrid";
public static string TanuloKifirGridRowTemplateName => "TanuloKifirGridRowTemplate";
public static string JavascriptHelperClassName => "TanuloKifirImportExportHelper";
public static string ConrtollerName => "TanuloKifirImportExport";
#endregion Properties
#region Constructors
public TanuloKifirImportExportController(IUploadFileValidator uploadFileValidator)
{
UploadFileValidator = uploadFileValidator ?? throw new ArgumentNullException(nameof(uploadFileValidator));
}
#endregion Constructors
public ActionResult Index()
{
var model = new TanuloKifirImportExportModel
{
MaxAllowedFileSizeInBytes = UploadFileValidator.Configuration.ImportMaxAllowedFileSizeInBytes,
AllowedFileExtensions = UploadFileValidator.Configuration.ImportAllowedFileExtensions
};
return View(model);
}
#region Export
public string NemImportalhatoSorokExport()
{
MemoryStream memoryStream = new TanuloKifirImportExportHelper(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 = TanuloKifirImportExportHelper.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 TanuloKifirImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).SetImportCo(importData, importMuvelet);
return Json(null);
}
public ActionResult OpenImportPreviewPopup()
{
TanuloKifirImportCo importCo = new TanuloKifirImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).ImportCo;
List<TanuloItemCo> coList = importCo.TanuloCoList;
var importInfoModel = new TanuloKifirImportInfoModel
{
ImportInfoSummaryList = new ImportInfoSummaryListModel
{
ImportInfoSummaryModelList = new List<ImportInfoSummaryModel>
{
GetCimImportInfoSummary(importCo, coList.SelectMany(x => x.CimList).ToList()),
GetEmailImportInfoSummary(importCo, coList.SelectMany(x => x.EmailList).ToList()),
GetTanuloKifirImportInfoSummary(importCo, coList)
}
},
CimImportItemList = new CimImportItemListModel
{
ImportItemModelList = GetCimImportItemModelList(importCo.CimKifirImportJsonItemList, coList)
},
EmailImportItemList = new EmailImportItemListModel
{
ImportItemModelList = GetEmailImportItemModelList(importCo.EmailKifirImportJsonItemList, coList)
},
MainImportItemList = new TanuloKifirImportItemListModel
{
ImportItemModelList = GetTanuloKifirImportItemModelList(importCo, coList)
},
NemImportalhatoItemList = new TanuloKifirImportNemImportalhatoItemListModel
{
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 GetCimImportInfoSummary(TanuloKifirImportCo importCo, List<CimItemCo> coList)
{
List<CimKifirImportJsonItemCo> importJsonItemList = importCo.CimKifirImportJsonItemList;
int updateRowCount = importJsonItemList?.Count(x => x.Operation == (int)ImportItemOperationEnum.Update) ?? 0;
int unchangedRowCount = 0;
switch (importCo.ImportMuvelet)
{
case (int)ImportMuveletEnum.Insert:
unchangedRowCount = coList.Count;
break;
case (int)ImportMuveletEnum.InsertAndUpdate:
unchangedRowCount = coList.Count - updateRowCount;
break;
}
var importInfoSummary = new ImportInfoSummaryModel
{
ImportName = ImportExportTanuloKifirResource.Cim,
InsertRowCount = importJsonItemList?.Count(x => x.Operation == (int)ImportItemOperationEnum.Insert).ToString() ?? "0",
UpdateRowCount = updateRowCount.ToString(),
DeleteRowCount = "-",
UnchangedRowCount = unchangedRowCount.ToString(),
InvalidRowCount = importCo.NemImportalhatoItemList.Count.ToString()
};
return importInfoSummary;
}
protected static ImportInfoSummaryModel GetEmailImportInfoSummary(TanuloKifirImportCo importCo, List<EmailItemCo> coList)
{
List<EmailKifirImportJsonItemCo> importJsonItemList = importCo.EmailKifirImportJsonItemList;
int updateRowCount = importJsonItemList?.Count(x => x.Operation == (int)ImportItemOperationEnum.Update) ?? 0;
int unchangedRowCount = 0;
switch (importCo.ImportMuvelet)
{
case (int)ImportMuveletEnum.Insert:
unchangedRowCount = coList.Count;
break;
case (int)ImportMuveletEnum.InsertAndUpdate:
unchangedRowCount = coList.Count - updateRowCount;
break;
}
var importInfoSummary = new ImportInfoSummaryModel
{
ImportName = ImportExportTanuloKifirResource.Email,
InsertRowCount = importJsonItemList?.Count(x => x.Operation == (int)ImportItemOperationEnum.Insert).ToString() ?? "0",
UpdateRowCount = updateRowCount.ToString(),
DeleteRowCount = "-",
UnchangedRowCount = unchangedRowCount.ToString(),
InvalidRowCount = importCo.NemImportalhatoItemList.Count.ToString()
};
return importInfoSummary;
}
private static ImportInfoSummaryModel GetTanuloKifirImportInfoSummary(TanuloKifirImportCo importCo, List<TanuloItemCo> coList)
{
List<FelhasznaloKifirImportJsonItemCo> importJsonItemList = importCo.MainImportJsonItemList;
int updateRowCount = importJsonItemList?.Count(x => x.Operation == (int)ImportItemOperationEnum.Update) ?? 0;
int unchangedRowCount = 0;
switch (importCo.ImportMuvelet)
{
case (int)ImportMuveletEnum.Insert:
unchangedRowCount = coList.Count;
break;
case (int)ImportMuveletEnum.InsertAndUpdate:
unchangedRowCount = coList.Count - updateRowCount;
break;
}
var importInfoSummary = new ImportInfoSummaryModel
{
ImportName = ImportExportTanuloKifirResource.ImportDefaultSheetName,
InsertRowCount = importJsonItemList?.Count(x => x.Operation == (int)ImportItemOperationEnum.Insert).ToString() ?? "0",
UpdateRowCount = updateRowCount.ToString(),
DeleteRowCount = "-",
UnchangedRowCount = unchangedRowCount.ToString(),
InvalidRowCount = importCo.NemImportalhatoItemList.Count.ToString()
};
return importInfoSummary;
}
protected List<CimImportItemModel> GetCimImportItemModelList(List<CimKifirImportJsonItemCo> importJsonItemList, List<TanuloItemCo> tanuloItemCoList)
{
var importItemModelList = new List<CimImportItemModel>();
if (importJsonItemList == null)
{
if (tanuloItemCoList.Count == 0)
{
return importItemModelList;
}
importJsonItemList = new List<CimKifirImportJsonItemCo>();
}
//NOTE: Hozzáadjuk azokat a az elemeket, amik az excel-ből jöttek!
foreach (CimKifirImportJsonItemCo importJsonItem in importJsonItemList)
{
importItemModelList.Add(new CimImportItemModel
{
FelhasznaloElotag = importJsonItem.Elotag ?? string.Empty,
FelhasznaloVezeteknev = importJsonItem.Vezeteknev ?? string.Empty,
FelhasznaloKeresztnev = importJsonItem.Keresztnev ?? string.Empty,
TipusNev = importJsonItem.TipusId.GetDisplayName<CimTipusEnum>(ClaimData.SelectedTanevID.Value) ?? string.Empty,
Iranyitoszam = importJsonItem.Iranyitoszam ?? string.Empty,
Telepules = importJsonItem.Telepules ?? string.Empty,
Kozterulet = importJsonItem.Kozterulet ?? string.Empty,
KozteruletJellegNev = importJsonItem.KozteruletJellegeNev,
Hazszam = importJsonItem.Hazszam ?? string.Empty,
Emelet = importJsonItem.Emelet ?? string.Empty,
Ajto = importJsonItem.Ajto ?? string.Empty,
Operation = importJsonItem.Operation
});
}
//NOTE: Hozzáadjuk azokat a az elemeket, amik az adatbázisból jöttek!
foreach (CimItemCo co in tanuloItemCoList.SelectMany(x => x.CimList))
{
if (!importJsonItemList.Select(x => x.Id).Contains(co.Id))
{
importItemModelList.Add(new CimImportItemModel
{
FelhasznaloElotag = co.FelhasznaloElotag ?? string.Empty,
FelhasznaloVezeteknev = co.FelhasznaloVezeteknev ?? string.Empty,
FelhasznaloKeresztnev = co.FelhasznaloKeresztnev ?? string.Empty,
TipusNev = co.TipusNev ?? string.Empty,
Iranyitoszam = co.Iranyitoszam ?? string.Empty,
Telepules = co.Telepules ?? string.Empty,
Kozterulet = co.Kozterulet ?? string.Empty,
KozteruletJellegNev = co.KozteruletJellegNev ?? string.Empty,
Hazszam = co.Hazszam ?? string.Empty,
Emelet = co.Emelet ?? string.Empty,
Ajto = co.Ajto ?? string.Empty,
Operation = (int)ImportItemOperationEnum.Default
});
}
}
return importItemModelList
.OrderBy(x => x.FelhasznaloVezeteknev)
.ThenBy(x => x.FelhasznaloKeresztnev)
.ThenBy(x => x.TipusNev)
.ThenByDescending(x => x.OperationText).ToList();
}
protected List<EmailImportItemModel> GetEmailImportItemModelList(List<EmailKifirImportJsonItemCo> importJsonItemList, List<TanuloItemCo> tanuloItemCoList)
{
var importItemModelList = new List<EmailImportItemModel>();
if (importJsonItemList == null)
{
if (tanuloItemCoList.Count == 0)
{
return importItemModelList;
}
importJsonItemList = new List<EmailKifirImportJsonItemCo>();
}
//NOTE: Hozzáadjuk azokat a az elemeket, amik az excel-ből jöttek!
foreach (EmailKifirImportJsonItemCo importJsonItem in importJsonItemList)
{
importItemModelList.Add(new EmailImportItemModel
{
FelhasznaloElotag = importJsonItem.Elotag ?? string.Empty,
FelhasznaloVezeteknev = importJsonItem.Vezeteknev,
FelhasznaloKeresztnev = importJsonItem.Keresztnev,
TipusNev = importJsonItem.TipusId?.GetDisplayName<EmailTipusEnum>(ClaimData.SelectedTanevID.Value) ?? string.Empty,
EmailCim = importJsonItem.EmailCim,
Operation = importJsonItem.Operation
});
}
//NOTE: Hozzáadjuk azokat a az elemeket, amik az adatbázisból jöttek!
foreach (EmailItemCo co in tanuloItemCoList.SelectMany(x => x.EmailList))
{
if (!importJsonItemList.Select(x => x.Id).Contains(co.Id))
{
importItemModelList.Add(new EmailImportItemModel
{
FelhasznaloElotag = co.FelhasznaloElotag ?? string.Empty,
FelhasznaloVezeteknev = co.FelhasznaloVezeteknev,
FelhasznaloKeresztnev = co.FelhasznaloKeresztnev,
TipusNev = co.TipusNev ?? string.Empty,
EmailCim = co.EmailCim,
Operation = (int)ImportItemOperationEnum.Default
});
}
}
return importItemModelList
.OrderBy(x => x.FelhasznaloVezeteknev)
.ThenBy(x => x.FelhasznaloKeresztnev)
.ThenBy(x => x.TipusNev)
.ThenByDescending(x => x.OperationText).ToList();
}
protected List<TanuloKifirImportItemModel> GetTanuloKifirImportItemModelList(TanuloKifirImportCo importCo, List<TanuloItemCo> coList)
{
var importItemModelList = new List<TanuloKifirImportItemModel>();
List<FelhasznaloKifirImportJsonItemCo> importJsonItemList = importCo.MainImportJsonItemList;
if (importJsonItemList == null)
{
if (!coList.Any())
{
return importItemModelList;
}
importJsonItemList = new List<FelhasznaloKifirImportJsonItemCo>();
}
//NOTE: Hozzáadjuk azokat a az elemeket, amik az excel-ből jöttek!
foreach (FelhasznaloKifirImportJsonItemCo importJsonItem in importJsonItemList)
{
importItemModelList.Add(new TanuloKifirImportItemModel
{
Elotag = importJsonItem.Elotag ?? string.Empty,
Vezeteknev = importJsonItem.Vezeteknev,
Keresztnev = importJsonItem.Keresztnev,
OktatasiAzonosito = importJsonItem.OktatasiAzonosito,
SzuletesiHely = importJsonItem.SzuletesiHely,
SzuletesiIdo = importJsonItem.SzuletesiIdo,
AnyjaNeve = importJsonItem.AnyjaNeve,
AllampolgarsagNev = importJsonItem.AllampolgarsagId.GetDisplayName<AllampolgarsagEnum>(ClaimData.SelectedTanevID.Value),
Operation = importJsonItem.Operation
});
}
//NOTE: Hozzáadjuk azokat az elemeket, amik az adatbázisból jöttek!
foreach (TanuloItemCo co in coList)
{
if (!importJsonItemList.Select(x => x.Id).Contains(co.Id))
{
var operation = (int)ImportItemOperationEnum.Default;
importItemModelList.Add(new TanuloKifirImportItemModel
{
Elotag = co.FelhasznaloElotag ?? string.Empty,
Vezeteknev = co.FelhasznaloVezeteknev,
Keresztnev = co.FelhasznaloKeresztnev,
OktatasiAzonosito = co.FelhasznaloOktatasiAzonosito,
SzuletesiHely = co.FelhasznaloSzuletesiHely,
SzuletesiIdo = co.FelhasznaloSzuletesiIdo,
AnyjaNeve = co.FelhasznaloAnyjaNeve,
AllampolgarsagNev = co.AllampolgarsagNev ?? string.Empty,
Operation = operation
});
}
}
return importItemModelList.OrderBy(x => x.Vezeteknev).ThenBy(x => x.Keresztnev).ThenByDescending(x => x.OperationText).ToList();
}
private List<TanuloKifirImportNemImportalhatoItemModel> GetNemImportalhatoItemModelList(List<TanuloKifirImportItemCo> nemImportalhatoItemList)
{
var nemImportalhatoItemModelList = new List<TanuloKifirImportNemImportalhatoItemModel>();
foreach (TanuloKifirImportItemCo nemImportalhatoItem in nemImportalhatoItemList)
{
nemImportalhatoItemModelList.Add(new TanuloKifirImportNemImportalhatoItemModel
{
NevImportData = nemImportalhatoItem.NevImportData,
OktatasiAzonositoImportData = nemImportalhatoItem.OktatasiAzonositoImportData,
SzuletesiHelyImportData = nemImportalhatoItem.SzuletesiHelyImportData,
SzuletesiDatumImportData = nemImportalhatoItem.SzuletesiDatumImportData,
AnyjaNeveImportData = nemImportalhatoItem.AnyjaNeveImportData,
AllandoLakcimIranyitoszamImportData = nemImportalhatoItem.AllandoLakcimIranyitoszamImportData,
AllandoLakcimTelepulesImportData = nemImportalhatoItem.AllandoLakcimTelepulesImportData,
AllandoLakcimKozteruletImportData = nemImportalhatoItem.AllandoLakcimKozteruletImportData,
ErtesitesiCimIranyitoszamImportData = nemImportalhatoItem.ErtesitesiCimIranyitoszamImportData,
ErtesitesiCimTelepulesImportData = nemImportalhatoItem.ErtesitesiCimTelepulesImportData,
ErtesitesiCimKozteruletImportData = nemImportalhatoItem.ErtesitesiCimKozteruletImportData,
AllampolgarsagImportData = nemImportalhatoItem.AllampolgarsagImportData,
EmailCimImportData = nemImportalhatoItem.EmailCimImportData,
KilencedikEvfolyamnalAlacsonyabbImportData = nemImportalhatoItem.KilencedikEvfolyamnalAlacsonyabbImportData,
ErtesitesiCimNevImportData = nemImportalhatoItem.ErtesitesiCimNevImportData,
AltalanosIskolaOmKodjaImportData = nemImportalhatoItem.AltalanosIskolaOmKodjaImportData,
AltalanosIskolaNeveImportData = nemImportalhatoItem.AltalanosIskolaNeveImportData,
AltalanosIskolaIranyitoszamImportData = nemImportalhatoItem.AltalanosIskolaIranyitoszamImportData,
AltalanosIskolaCimImportData = nemImportalhatoItem.AltalanosIskolaCimImportData,
AltalanosIskolaTelepulesImportData = nemImportalhatoItem.AltalanosIskolaTelepulesImportData,
AltalanosIskolaTelefonszamImportData = nemImportalhatoItem.AltalanosIskolaTelefonszamImportData,
AltalanosIskolaEmailCimImportData = nemImportalhatoItem.AltalanosIskolaEmailCimImportData,
FelveteltNyertTanulmanyiKeruletNeveImportData = nemImportalhatoItem.FelveteltNyertTanulmanyiKeruletNeveImportData,
FelveteltNyertTanulmanyiKeruletKodszamaImportData = nemImportalhatoItem.FelveteltNyertTanulmanyiKeruletKodszamaImportData,
FelveteltNyertTanulmanyiKeruletSzovegeImportData = nemImportalhatoItem.FelveteltNyertTanulmanyiKeruletSzovegeImportData,
NemNyertFelveteltElutasitasImportData = nemImportalhatoItem.NemNyertFelveteltElutasitasImportData,
NemNyertFelveteltBeteltImportData = nemImportalhatoItem.NemNyertFelveteltBeteltImportData,
NemNyertFelveteltElobbreNertFelveteltImportData = nemImportalhatoItem.NemNyertFelveteltElobbreNertFelveteltImportData,
ErrorList = string.Join(Environment.NewLine, nemImportalhatoItem.ErrorList)
});
}
return nemImportalhatoItemModelList.OrderBy(x => x.NevImportData).ToList();
}
public ActionResult Import()
{
if (ModelState.IsValid)
{
var helper = new TanuloKifirImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType());
TanuloKifirImportCo importCo = helper.ImportCo;
helper.Import(new { ImportJson = importCo });
return Content(Url.Content(TovabbUrl));
}
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
#endregion Import
}
}