401 lines
20 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|