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

401 lines
20 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;
using Kreta.BusinessLogic.Helpers.ImportExport;
using Kreta.BusinessLogic.Security;
using Kreta.Core;
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.FelhasznaloBelepesImportExport;
using Kreta.Web.Areas.Tanulo.Helper;
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.IsSzirIntezmeny.ClaimValue)]
[MvcRolePackageAuthorize(TanevEnum.AktTanev, KretaClaimPackages.Adminisztrator.ClaimValue)]
public class FelhasznaloBelepesImportExportController : BaseImportExportController
{
#region Fields
private const string TovabbUrlAlkalmazott = @"/Alkalmazott/Alkalmazott";
private const string TovabbUrlTanulo = @"/Tanulo/Tanulo";
#endregion Fields
#region Properties
public static string GridName => "FelhasznaloGrid";
public static string GridRowTemplateName => "FelhasznaloGridRowTemplate";
public static string JavascriptHelperClassName => "FelhasznaloImportExportHelper";
public static string ConrtollerName => "FelhasznaloBelepesImportExport";
#endregion Properties
#region Constructors
public FelhasznaloBelepesImportExportController(IUploadFileValidator uploadFileValidator)
{
UploadFileValidator = uploadFileValidator ?? throw new ArgumentNullException(nameof(uploadFileValidator));
}
#endregion Constructors
#region Index
public ActionResult AlkalmazottIndex()
{
var model = new FelhasznaloBelepesImportExportModel
{
MaxAllowedFileSizeInBytes = UploadFileValidator.Configuration.ImportMaxAllowedFileSizeInBytes,
AllowedFileExtensions = UploadFileValidator.Configuration.ImportAllowedFileExtensions,
FelhasznaloBelepesExportImportTipusEnum = FelhasznaloBelepesExportImportTipusEnum.Alkalmazott,
ExportFelhasznaloBelepesExportImportTipusEnum = FelhasznaloBelepesExportImportTipusEnum.Alkalmazott,
NemImportalhatoSorokFileName = ImportExportFelhasznaloBelepesResource.NemImportalhatoSorokFileNameAlkalmazott,
ExportFileName = ImportExportFelhasznaloBelepesResource.ExportFileNameAlkalmazott,
ImportalasText = ImportExportFelhasznaloBelepesResource.ImportalasAlkalmazott,
TovabbText = ImportExportFelhasznaloBelepesResource.TovabbAlkamazott
};
return View("Index", model);
}
public ActionResult TanuloIndex()
{
var model = new FelhasznaloBelepesImportExportModel
{
MaxAllowedFileSizeInBytes = UploadFileValidator.Configuration.ImportMaxAllowedFileSizeInBytes,
AllowedFileExtensions = UploadFileValidator.Configuration.ImportAllowedFileExtensions,
FelhasznaloBelepesExportImportTipusEnum = FelhasznaloBelepesExportImportTipusEnum.Tanulo,
ExportFelhasznaloBelepesExportImportTipusEnum = FelhasznaloBelepesExportImportTipusEnum.Tanulo,
NemImportalhatoSorokFileName = ImportExportFelhasznaloBelepesResource.NemImportalhatoSorokFileNameTanulo,
ExportFileName = ImportExportFelhasznaloBelepesResource.ExportFileNameTanulo,
ImportalasText = ImportExportFelhasznaloBelepesResource.ImportalasTanulo,
TovabbText = ImportExportFelhasznaloBelepesResource.TovabbTanulo
};
return View("Index", model);
}
public ActionResult GondviseloIndex()
{
var model = new FelhasznaloBelepesImportExportModel
{
MaxAllowedFileSizeInBytes = UploadFileValidator.Configuration.ImportMaxAllowedFileSizeInBytes,
AllowedFileExtensions = UploadFileValidator.Configuration.ImportAllowedFileExtensions,
FelhasznaloBelepesExportImportTipusEnum = FelhasznaloBelepesExportImportTipusEnum.Gondviselo,
ExportFelhasznaloBelepesExportImportTipusEnum = FelhasznaloBelepesExportImportTipusEnum.Gondviselo,
NemImportalhatoSorokFileName = ImportExportFelhasznaloBelepesResource.NemImportalhatoSorokFileNameGondviselo,
ExportFileName = ImportExportFelhasznaloBelepesResource.ExportFileNameGondviselo,
ImportalasText = ImportExportFelhasznaloBelepesResource.ImportalasGondviselo,
TovabbText = ImportExportFelhasznaloBelepesResource.TovabbTanulo,
IsEmailKuldes = true,
IsGeneraltFileLetoltes = true
};
return View("Index", model);
}
#endregion Index
#region Sablon
public ActionResult DownloadTemplate(FelhasznaloBelepesExportImportTipusEnum tipusEnum)
{
MemoryStream memoryStream = new FelhasznaloBelepesImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetTemplate(tipusEnum);
string fileDownloadName;
switch (tipusEnum)
{
case FelhasznaloBelepesExportImportTipusEnum.Alkalmazott:
fileDownloadName = ImportExportFelhasznaloBelepesResource.ImportSablonFileNameAlkalmazott;
break;
case FelhasznaloBelepesExportImportTipusEnum.Tanulo:
fileDownloadName = ImportExportFelhasznaloBelepesResource.ImportSablonFileNameTanulo;
break;
case FelhasznaloBelepesExportImportTipusEnum.Gondviselo:
fileDownloadName = ImportExportFelhasznaloBelepesResource.ImportSablonFileNameGondviselo;
break;
default:
throw new Exception();
}
return new FileStreamResult(memoryStream, Core.Constants.ContentTypes.Xlsx) { FileDownloadName = fileDownloadName };
}
#endregion Sablon
#region Export
[HttpPost]
[MvcValidateAjaxAntiForgeryToken]
public string Export(FelhasznaloBelepesExportImportTipusEnum exportFelhasznaloBelepesExportImportTipusEnum)
{
MemoryStream memoryStream = new FelhasznaloBelepesImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetExport(exportFelhasznaloBelepesExportImportTipusEnum);
return GetExportFileString(memoryStream);
}
public string NemImportalhatoSorokExport(FelhasznaloBelepesExportImportTipusEnum felhasznaloBelepesExportImportTipusEnum)
{
MemoryStream memoryStream = new FelhasznaloBelepesImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetNemImportalhatoSorokExport(felhasznaloBelepesExportImportTipusEnum);
return GetExportFileString(memoryStream);
}
#endregion Export
#region Import
public JsonResult UploadFile(HttpPostedFileBase importFile, int importMuvelet, FelhasznaloBelepesExportImportTipusEnum felhasznaloBelepesExportImportTipusEnum, bool isGeneraltFileLetoltes = false, bool isEmailKuldes = false)
{
UploadFileValidator.ValidateImportFile(importFile);
var errorResult = new List<string>();
var helper = new FelhasznaloBelepesImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType());
Dictionary<int, string> importHeaderList = helper.DetailsByEnum(felhasznaloBelepesExportImportTipusEnum).ExcelHeaderList;
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;
}
var anotherYearId = Kreta.Web.Classes.Utils.GetAnotherYearId();
helper.SetImportCo(importData, importMuvelet, felhasznaloBelepesExportImportTipusEnum, isGeneraltFileLetoltes, isEmailKuldes, anotherYearId, ClaimData.IsKovTanev, ClaimData.IsSzakkepzoIntezmeny);
return Json(null);
}
public ActionResult OpenImportPreviewPopup()
{
FelhasznaloBelepesImportCo importCo = new FelhasznaloBelepesImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).ImportCo;
var containerMainGridTabName = GetImportName(importCo.TipusEnum);
var importInfoModel = new FelhasznaloBelepesImportInfoModel
{
ContainerMainGridTabName = containerMainGridTabName,
ImportInfoSummaryList = new ImportInfoSummaryListModel
{
ImportInfoSummaryModelList = new List<ImportInfoSummaryModel>
{
GetImportInfoSummary(importCo)
}
},
MainImportItemList = new FelhasznaloBelepesImportItemListModel
{
ImportItemModelList = GetImportItemModelList(importCo),
TipusEnum = importCo.TipusEnum
},
NemImportalhatoItemList = new FelhasznaloBelepesImportNemImportalhatoItemListModel
{
NemImportalhatoItemModelList = GetNemImportalhatoItemModelList(importCo.NemImportalhatoItemList),
TipusEnum = importCo.TipusEnum
}
};
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(FelhasznaloBelepesImportCo importCo)
{
var coList = importCo.FelhasznaloBelepesCoList.Where(x => x.TipusEnum == importCo.TipusEnum).ToList();
List<FelhasznaloBelepesImportJsonItemCo> 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 - insertRowCount;
break;
default:
unchangedRowCount = coList.Count - insertRowCount;
break;
}
int invalidRowCount = importCo.NemImportalhatoItemList.Count;
var importInfoSummary = new ImportInfoSummaryModel
{
ImportName = GetImportName(importCo.TipusEnum),
InsertRowCount = insertRowCount.ToString(),
UpdateRowCount = updateRowCount.ToString(),
DeleteRowCount = deleteRowCount.ToString(),
UnchangedRowCount = unchangedRowCount.ToString(),
InvalidRowCount = invalidRowCount.ToString()
};
return importInfoSummary;
}
private List<FelhasznaloBelepesImportItemModel> GetImportItemModelList(FelhasznaloBelepesImportCo importCo)
{
List<FelhasznaloBelepesItemCo> coList = importCo.FelhasznaloBelepesCoList.Where(x => x.TipusEnum == importCo.TipusEnum).ToList();
var importItemModelList = new List<FelhasznaloBelepesImportItemModel>();
List<FelhasznaloBelepesImportJsonItemCo> mainImportJsonItemList = importCo.MainImportJsonItemList;
if (mainImportJsonItemList == null)
{
if (!(coList.Count > 0))
{
return importItemModelList;
}
mainImportJsonItemList = new List<FelhasznaloBelepesImportJsonItemCo>();
}
//NOTE: Hozzáadjuk azokat a az elemeket, amik az excel-ből jöttek!
foreach (FelhasznaloBelepesImportJsonItemCo importJsonItem in mainImportJsonItemList)
{
importItemModelList.Add(new FelhasznaloBelepesImportItemModel
{
Elotag = importJsonItem.Elotag ?? string.Empty,
Vezeteknev = importJsonItem.Vezeteknev,
Keresztnev = importJsonItem.Keresztnev,
OktatasiAzonosito = importJsonItem.OktatasiAzonosito,
SzuletesiIdo = importJsonItem.SzuletesiIdo,
GondviseloNev = importJsonItem.GondviseloNev ?? string.Empty,
GondviseloRokonsagiFokNev = importJsonItem.GondviseloRokonsagiFokId.HasValue ? importJsonItem.GondviseloRokonsagiFokId.GetDisplayName<Enums.RokonsagiFokEnum>(ClaimData.SelectedTanevID.Value) : string.Empty,
BejelentkezesiNev = importJsonItem.BejelentkezesiNev ?? string.Empty,
Jelszo = importJsonItem.JelszoPlainText,
Operation = importJsonItem.Operation
});
}
//NOTE: Hozzáadjuk azokat a az elemeket, amik az adatbázisból jöttek!
foreach (FelhasznaloBelepesItemCo co in coList)
{
if (co.Id.IsEntityId() && !mainImportJsonItemList.Select(x => x.Id).Contains(co.Id) ||
!co.Id.IsEntityId() && !mainImportJsonItemList.Any(x =>
x.AlkalmazottId == co.AlkalmazottId &&
x.TanuloId == co.TanuloId &&
x.GondviseloId == co.GondviseloId))
{
importItemModelList.Add(new FelhasznaloBelepesImportItemModel
{
Elotag = co.FelhasznaloElotag ?? string.Empty,
Vezeteknev = co.FelhasznaloVezeteknev,
Keresztnev = co.FelhasznaloKeresztnev,
OktatasiAzonosito = co.FelhasznaloOktatasiAzonosito,
SzuletesiIdo = co.FelhasznaloSzuletesiIdo,
GondviseloNev = co.GondviseloNev ?? string.Empty,
GondviseloRokonsagiFokNev = co.GondviseloRokonsagiFokNev ?? string.Empty,
BejelentkezesiNev = co.BejelentkezesiNev ?? string.Empty,
Jelszo = co.HasJelszo ? new string('*', Core.Constants.General.JelszoMinimumKarakterekSzama) : string.Empty,
Operation = importCo.ImportMuvelet == (int)ImportMuveletEnum.DeleteAndInsert && co.Importalt ? (int)ImportItemOperationEnum.Delete : (int)ImportItemOperationEnum.Default
});
}
}
return importItemModelList.OrderBy(x => x.Vezeteknev).ThenBy(x => x.Keresztnev).ThenByDescending(x => x.OperationText).ToList();
}
private List<FelhasznaloBelepesImportNemImportalhatoItemModel> GetNemImportalhatoItemModelList(List<FelhasznaloBelepesImportItemCo> nemImportalhatoItemList)
{
var nemImportalhatoItemModelList = new List<FelhasznaloBelepesImportNemImportalhatoItemModel>();
foreach (FelhasznaloBelepesImportItemCo nemImportalhatoItem in nemImportalhatoItemList)
{
nemImportalhatoItemModelList.Add(new FelhasznaloBelepesImportNemImportalhatoItemModel
{
NeveImportData = nemImportalhatoItem.NeveImportData,
OktatasiAzonositoImportData = nemImportalhatoItem.OktatasiAzonositoImportData,
SzuletesiDatumaImportData = nemImportalhatoItem.SzuletesiDatumaImportData,
GondviseloNeveImportData = nemImportalhatoItem.GondviseloNeveImportData,
GondviseloRokonsagiFokaImportData = nemImportalhatoItem.GondviseloRokonsagiFokaImportData,
FelhasznaloNeveImportData = nemImportalhatoItem.FelhasznaloNeveImportData,
JelszavaImportData = nemImportalhatoItem.JelszavaImportData,
ErrorList = string.Join(Environment.NewLine, nemImportalhatoItem.ErrorList)
});
}
return nemImportalhatoItemModelList.OrderBy(x => x.NeveImportData).ToList();
}
public ActionResult Import()
{
if (ModelState.IsValid)
{
FelhasznaloBelepesImportCo importCo = new FelhasznaloBelepesImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).ImportCo;
new ImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).Import(new { ImportJson = importCo }, importCo.ImportMuvelet);
string tovabbUrl = importCo.TipusEnum == FelhasznaloBelepesExportImportTipusEnum.Alkalmazott ? TovabbUrlAlkalmazott : TovabbUrlTanulo;
if (importCo.TipusEnum == FelhasznaloBelepesExportImportTipusEnum.Gondviselo &&
(importCo.IsEmailKuldes || importCo.IsGeneraltFileLetoltes))
{
var hozzaferesGeneralasaHelper = new HozzaferesGeneralasaHelper(ConnectionTypeExtensions.GetOrganizationConnectionType());
var belepesiAdatokListCo = new BelepesiAdatokListCO();
var file = string.Empty;
foreach (FelhasznaloBelepesImportJsonItemCo belepesAdatCo in importCo.MainImportJsonItemList)
{
hozzaferesGeneralasaHelper.UjGondviseloBelepesiAdatokPdfGeneralasEsEmailKuldes(belepesAdatCo.TanuloId.Value, belepesAdatCo.GondviseloId.Value, importCo.IsEmailKuldes, belepesiAdatokListCo, belepesAdatCo.BejelentkezesiNev, belepesAdatCo.JelszoPlainText);
}
if (importCo.IsGeneraltFileLetoltes)
{
var nevmodel = new NyomtatvanyNevGeneralasModel { TanevID = ClaimData.AktivTanevID };
var fileName = CommonExtensions.NevGeneralas("BelepesiAdatok", nevmodel);
file = BelepesiAdatokPdfLogic.GetFileLetoltesUrl(hozzaferesGeneralasaHelper.ConvertBelepesiAdatokCoToDataset(belepesiAdatokListCo, false), Core.Constants.FrxNames.HozzatartozoJelszoAdatok, fileName);
}
return Json(new { belepesiAdatokListCo.EmailErrors, file, tovabbUrl });
}
return Json(new { tovabbUrl });
}
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
#endregion Import
private static string GetImportName(FelhasznaloBelepesExportImportTipusEnum tipusEnum)
{
string containerMainGridTabName;
switch (tipusEnum)
{
case FelhasznaloBelepesExportImportTipusEnum.Alkalmazott:
containerMainGridTabName = ImportExportFelhasznaloBelepesResource.AlkalmazottFelhasznaloBelepesiAdatok;
break;
case FelhasznaloBelepesExportImportTipusEnum.Tanulo:
containerMainGridTabName = ImportExportFelhasznaloBelepesResource.TanuloFelhasznaloBelepesiAdatok;
break;
case FelhasznaloBelepesExportImportTipusEnum.Gondviselo:
containerMainGridTabName = ImportExportFelhasznaloBelepesResource.GondviseloFelhasznaloBelepesiAdatok;
break;
default:
throw new Exception();
}
return containerMainGridTabName;
}
}
}