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

437 lines
22 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.ExcelHelpers;
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.Exceptions;
using Kreta.Core.FeatureToggle;
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.TantargyfelosztasImportExport;
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)]
[MvcRolePackageAuthorize(TanevEnum.AktEsKovTanev, KretaClaimPackages.Adminisztrator.ClaimValue)]
public class TantargyfelosztasImportExportController : BaseTantargyfelosztasImportExportController
{
#region Fields
private const string TovabbUrl = @"~/Tantargy/TantargyFelosztas";
#endregion Fields
#region Properties
private IFeatureContext FeatureContext { get; }
public static string EgyszeruImportFileName => "EgyszeruImportFile";
public static string KereszttablasImportFileName => "KereszttablasImportFile";
public static string KereszttablasOsztalyOszlopokkalImportFileName => "KereszttablasOsztalyOszlopokkalImportFile";
public static string FeladatfelosztasImportFileName => "FeladatfelosztasImportFile";
public static string AscImportFileName => "AscImportFile";
public static string JavascriptHelperClassName => "TantargyfelosztasImportExportHelper";
public static string ConrtollerName => "TantargyfelosztasImportExport";
#endregion Properties
#region Constructors
public TantargyfelosztasImportExportController(IUploadFileValidator uploadFileValidator, IFeatureContext featureContext)
{
FeatureContext = featureContext;
UploadFileValidator = uploadFileValidator ?? throw new ArgumentNullException(nameof(uploadFileValidator));
}
#endregion Constructors
public ActionResult Index()
{
var model = new TantargyfelosztasImportExportModel
{
MaxAllowedFileSizeInBytes = UploadFileValidator.Configuration.ImportMaxAllowedFileSizeInBytes,
AllowedFileExtensions = UploadFileValidator.Configuration.ImportAllowedFileExtensions,
AscAllowedFileExtensions = UploadFileValidator.Configuration.AscImportAllowedFileExtensions
};
return View(model);
}
#region Sablon
public ActionResult DownloadTemplate()
{
MemoryStream memoryStream = new TantargyfelosztasImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetTemplate(isSzakkepzo : ClaimData.IsSzakkepzoIntezmeny);
return new FileStreamResult(memoryStream, Core.Constants.ContentTypes.Xlsx) { FileDownloadName = ImportExportTantargyfelosztasResource.ImportSablonFileNameEgyszeru };
}
public ActionResult DownloadTemplateKereszttablas()
{
return GetExcelTemplate(ImportExportTantargyfelosztasResource.ImportSablonFileNameKereszttablas);
}
public ActionResult DownloadTemplateKereszttablasOsztalyOszlopokkal()
{
return GetExcelTemplate(ImportExportTantargyfelosztasResource.ImportSablonFileNameKereszttablasOsztalyOszlopokkal);
}
public ActionResult DownloadTemplateFeladatfelosztas()
{
return GetExcelTemplate(ImportExportTantargyfelosztasResource.ImportSablonFileNameFeladatfelosztas);
}
#endregion Sablon
#region Export
[HttpPost]
[MvcValidateAjaxAntiForgeryToken]
public string ExportEgyszeruTantargyfelosztas()
{
MemoryStream memoryStream = new TantargyfelosztasImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetExport();
return GetExportFileString(memoryStream);
}
[HttpPost]
[MvcValidateAjaxAntiForgeryToken]
public string ExportLepedoTantargyfelosztas()
{
MemoryStream memoryStream = new TTFExportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).ExportLepedoTTF();
return GetExportFileString(memoryStream);
}
[HttpPost]
[MvcValidateAjaxAntiForgeryToken]
public string ExportLepedoOsztalyTantargyfelosztas()
{
MemoryStream memoryStream = new TTFExportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).ExportLepedoOsztalyTTF();
return GetExportFileString(memoryStream);
}
[HttpPost]
[MvcValidateAjaxAntiForgeryToken]
public string ExportFeladatfelosztas()
{
//TODO: MEGCSINÁLNI!!!
throw new NotImplementedException();
//MemoryStream memoryStream = new TTFExportHelper().();
//return GetExportFileString(memoryStream);
}
[HttpPost]
[MvcValidateAjaxAntiForgeryToken]
public string ExportFormazottTantargyfelosztas()
{
bool isMunkaugyiAdatokKlebelsbergOrNszfh =
FeatureContext.IsEnabled(Core.Constants.FeatureName.MunkaugyiAdatokKlebelsberg) ||
FeatureContext.IsEnabled(Core.Constants.FeatureName.MunkaugyiAdatokNSZFH);
MemoryStream memoryStream = new TTFExportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).ExportFormazottTtf(isMunkaugyiAdatokKlebelsbergOrNszfh ? 1 : 0);
if (memoryStream != null)
{
return GetExportFileString(memoryStream);
}
return ImportExportCommonResource.NincsElegendoAdatARendszerbenAzExportalashoz;
}
public string NemImportalhatoSorokExport()
{
MemoryStream memoryStream = new TantargyfelosztasImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetNemImportalhatoSorokExport();
return GetExportFileString(memoryStream);
}
#endregion Export
#region Import
public JsonResult UploadEgyszeruFile(HttpPostedFileBase egyszeruImportFile, int importMuvelet, int? feladatellatasiHelyId)
{
return UploadFile(egyszeruImportFile, importMuvelet, (int)TantargyfelosztasImportTipusEnum.EgyszeruImport, feladatellatasiHelyId);
}
public JsonResult UploadKereszttablasFile(HttpPostedFileBase kereszttablasImportFile, int importMuvelet, int? feladatellatasiHelyId)
{
return UploadFile(kereszttablasImportFile, importMuvelet, (int)TantargyfelosztasImportTipusEnum.KereszttablasImport, feladatellatasiHelyId);
}
public JsonResult UploadKereszttablasOsztalyOszlopokkalFile(HttpPostedFileBase kereszttablasOsztalyOszlopokkalImportFile, int importMuvelet, int? feladatellatasiHelyId)
{
return UploadFile(kereszttablasOsztalyOszlopokkalImportFile, importMuvelet, (int)TantargyfelosztasImportTipusEnum.KereszttablasOsztalyOszlopokkalImport, feladatellatasiHelyId);
}
public JsonResult UploadFeladatfelosztasFile(HttpPostedFileBase feladatfelosztasImportFile, int importMuvelet, int? feladatellatasiHelyId)
{
return UploadFile(feladatfelosztasImportFile, importMuvelet, (int)TantargyfelosztasImportTipusEnum.FeladatfelosztasImport, feladatellatasiHelyId);
}
public JsonResult UploadAscFile(HttpPostedFileBase ascImportFile, int importMuvelet, int? feladatellatasiHelyId)
{
return UploadFile(ascImportFile, importMuvelet, (int)TantargyfelosztasImportTipusEnum.AscImport, feladatellatasiHelyId);
}
private JsonResult UploadFile(HttpPostedFileBase importFile, int importMuvelet, int tantargyfelosztasImportTipus, int? feladatellatasiHelyId)
{
switch (tantargyfelosztasImportTipus)
{
case (int)TantargyfelosztasImportTipusEnum.EgyszeruImport:
case (int)TantargyfelosztasImportTipusEnum.KereszttablasImport:
case (int)TantargyfelosztasImportTipusEnum.KereszttablasOsztalyOszlopokkalImport:
case (int)TantargyfelosztasImportTipusEnum.FeladatfelosztasImport:
UploadFileValidator.ValidateImportFile(importFile);
break;
case (int)TantargyfelosztasImportTipusEnum.AscImport:
UploadFileValidator.ValidateAscImportFile(importFile);
break;
}
var errorResult = new List<string>();
if (feladatellatasiHelyId == null)
{
errorResult.Add(ErrorResource.FeladatellatasiHelyMegadasaKotelezo);
}
var fileErrorResultList = new List<string>();
var importData = new List<List<string>>();
switch (tantargyfelosztasImportTipus)
{
case (int)TantargyfelosztasImportTipusEnum.EgyszeruImport:
importData = ImportExportHelper.GetImportDataFromExcel(importFile.InputStream, TantargyfelosztasImportExportHelper.ImportHeaderListEgyszeru, out fileErrorResultList);
break;
case (int)TantargyfelosztasImportTipusEnum.KereszttablasImport:
importData = TantargyfelosztasImportExportHelper.GetImportDataFromKereszttablasTantargyfelosztasExcel(importFile.InputStream, TantargyfelosztasImportExportHelper.ImportHeaderListKereszttablas, out fileErrorResultList);
break;
case (int)TantargyfelosztasImportTipusEnum.KereszttablasOsztalyOszlopokkalImport:
importData = TantargyfelosztasImportExportHelper.GetImportDataFromKereszttablasTantargyfelosztasOsztalyOszlopokkalExcel(importFile.InputStream, TantargyfelosztasImportExportHelper.ImportHeaderListKereszttablasOsztalyOszlopokkal, out fileErrorResultList);
break;
case (int)TantargyfelosztasImportTipusEnum.FeladatfelosztasImport:
importData = TantargyfelosztasImportExportHelper.GetImportDataFromFeladatfelosztasExcel(importFile.InputStream, TantargyfelosztasImportExportHelper.ImportHeaderListFeladatfelosztasExcel, out fileErrorResultList);
break;
case (int)TantargyfelosztasImportTipusEnum.AscImport:
try
{
importData = AscImportExportHelper.GetTantargyfelosztasImportDataFromAsc(importFile.InputStream);
}
catch (BlException e)
{
errorResult.Add(e.Message.Replace(Core.Constants.General.Sortores, $"{Core.Constants.General.Sortores}- "));
}
break;
}
errorResult.AddRange(fileErrorResultList);
if (errorResult.Count > 0)
{
JsonResult errorJson = ThrowCustomError(errorResult);
return errorJson;
}
//NOTE: feladatellatasiHelyId.Value nem lehet null a korábbi vizsgálatok miatt!
new TantargyfelosztasImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).SetImportCo(importData, importMuvelet, feladatellatasiHelyId.Value, tantargyfelosztasImportTipus);
return Json(null);
}
public ActionResult OpenImportPreviewPopup()
{
TantargyfelosztasImportCo importCo = new TantargyfelosztasImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).ImportCo;
List<TantargyItemCo> tantargyCoList = new TantargyHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetTantargyCoList();
List<OsztalyItemCo> osztalyCoList = new OsztalyHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetOsztalyCoList();
List<CsoportItemCo> csoportCoList = new CsoportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetCsoportCoList();
List<TantargyfelosztasItemCo> tantargyfelosztasCoList = new TantargyFelosztasHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetTantargyfelosztasCoList();
var importInfoModel = new TantargyfelosztasImportInfoModel
{
ImportInfoSummaryList = new ImportInfoSummaryListModel
{
ImportInfoSummaryModelList = new List<ImportInfoSummaryModel>
{
GetTantargyImportInfoSummary(importCo.TantargyImportJsonItemList, tantargyCoList),
GetOsztalyImportInfoSummary(importCo.OsztalyImportJsonItemList, osztalyCoList),
GetCsoportImportInfoSummary(importCo.CsoportImportJsonItemList, csoportCoList),
GetTantargyfelosztasImportInfoSummary(importCo, tantargyfelosztasCoList)
}
},
TantargyImportItemList = new TantargyImportItemListModel
{
ImportItemModelList = GetTantargyImportItemModelList(importCo.TantargyImportJsonItemList, tantargyCoList)
},
OsztalyImportItemList = new OsztalyImportItemListModel
{
ImportItemModelList = GetOsztalyImportItemModelList(importCo.OsztalyImportJsonItemList, osztalyCoList)
},
CsoportImportItemList = new CsoportImportItemListModel
{
ImportItemModelList = GetCsoportImportItemModelList(importCo.CsoportImportJsonItemList, csoportCoList)
},
MainImportItemList = new TantargyfelosztasImportItemListModel
{
ImportItemModelList = GetTantargyfelosztasImportItemModelList(importCo, tantargyfelosztasCoList)
},
NemImportalhatoItemList = new TantargyfelosztasImportNemImportalhatoItemListModel
{
NemImportalhatoItemModelList = GetNemImportalhatoItemModelList(importCo.NemImportalhatoItemList),
TantargyfelosztasImportTipus = importCo.TantargyfelosztasImportTipus
}
};
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 GetTantargyfelosztasImportInfoSummary(TantargyfelosztasImportCo importCo, List<TantargyfelosztasItemCo> coList)
{
List<TantargyfelosztasImportJsonItemCo> 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;
case (int)ImportMuveletEnum.DeleteAndInsert:
unchangedRowCount = coList.Count(x => !x.Importalt);
break;
}
var importInfoSummary = new ImportInfoSummaryModel
{
ImportName = ImportExportTantargyfelosztasResource.ImportDefaultSheetName,
InsertRowCount = importJsonItemList?.Count(x => x.Operation == (int)ImportItemOperationEnum.Insert).ToString() ?? "0",
UpdateRowCount = updateRowCount.ToString(),
DeleteRowCount = importCo.ImportMuvelet == (int)ImportMuveletEnum.DeleteAndInsert ? coList.Count(x => x.Importalt).ToString() : "0",
UnchangedRowCount = unchangedRowCount.ToString(),
InvalidRowCount = importCo.NemImportalhatoItemList.Count.ToString()
};
return importInfoSummary;
}
protected List<TantargyfelosztasImportItemModel> GetTantargyfelosztasImportItemModelList(TantargyfelosztasImportCo importCo, List<TantargyfelosztasItemCo> coList)
{
var importItemModelList = new List<TantargyfelosztasImportItemModel>();
List<TantargyfelosztasImportJsonItemCo> importJsonItemList = importCo.MainImportJsonItemList;
if (importJsonItemList == null)
{
if (!coList.Any())
{
return importItemModelList;
}
importJsonItemList = new List<TantargyfelosztasImportJsonItemCo>();
}
//NOTE: Hozzáadjuk azokat a az elemeket, amik az excel-ből jöttek!
foreach (TantargyfelosztasImportJsonItemCo importJsonItem in importJsonItemList)
{
importItemModelList.Add(new TantargyfelosztasImportItemModel
{
Nev = importJsonItem.Nev ?? string.Empty,
OsztalyCsoportNev = importJsonItem.OsztalyCsoportNev ?? string.Empty,
TantargyNev = importJsonItem.TantargyNev ?? string.Empty,
TanarNev = importJsonItem.TanarNev,
Oraszam = importJsonItem.Oraszam,
Tuloraszam = importJsonItem.Tuloraszam,
IsOsszevontOra = importJsonItem.IsOsszevontOra,
IsNemzetisegiOra = importJsonItem.IsNemzetisegiOra,
MegbizasiOraszam = importJsonItem.MegbizasiOraszam,
Operation = importJsonItem.Operation
});
}
//NOTE: Hozzáadjuk azokat a az elemeket, amik az adatbázisból jöttek!
foreach (TantargyfelosztasItemCo co in coList)
{
if (!importJsonItemList.Select(x => x.Id).Contains(co.Id))
{
var operation = importCo.ImportMuvelet == (int)ImportMuveletEnum.DeleteAndInsert && co.Importalt ? (int)ImportItemOperationEnum.Delete : (int)ImportItemOperationEnum.Default;
importItemModelList.Add(new TantargyfelosztasImportItemModel
{
Nev = co.Nev ?? string.Empty,
OsztalyCsoportNev = co.OsztalyCsoportNev ?? string.Empty,
TantargyNev = co.TantargyNev ?? string.Empty,
TanarNev = co.TanarNev,
Oraszam = co.Oraszam,
Tuloraszam = co.Tuloraszam,
IsOsszevontOra = co.IsOsszevontOra,
IsNemzetisegiOra = co.IsNemzetisegiOra,
MegbizasiOraszam = co.MegbizasiOraszam,
Operation = operation
});
}
}
return importItemModelList.OrderBy(x => x.Nev).ThenByDescending(x => x.OperationText).ToList();
}
private List<TantargyfelosztasImportNemImportalhatoItemModel> GetNemImportalhatoItemModelList(List<TantargyfelosztasImportItemCo> nemImportalhatoItemList)
{
var nemImportalhatoItemModelList = new List<TantargyfelosztasImportNemImportalhatoItemModel>();
foreach (TantargyfelosztasImportItemCo nemImportalhatoItem in nemImportalhatoItemList)
{
nemImportalhatoItemModelList.Add(new TantargyfelosztasImportNemImportalhatoItemModel
{
OsztalyNevImportData = nemImportalhatoItem.OsztalyNevImportData,
CsoportNevImportData = nemImportalhatoItem.CsoportNevImportData,
TantargyNevImportData = nemImportalhatoItem.TantargyNevImportData,
OraszamImportData = nemImportalhatoItem.OraszamImportData,
TanarNevImportData = nemImportalhatoItem.TanarNevImportData,
TuloraImportData = nemImportalhatoItem.TuloraImportData,
TtfOraszamKorrekcioImportData = nemImportalhatoItem.TtfOraszamKorrekcioImportData,
NemzetisegiOraImportData = nemImportalhatoItem.NemzetisegiOraImportData,
MegbizasiOraszamImportData = nemImportalhatoItem.MegbizasiOraszamImportData,
ErrorList = string.Join(Environment.NewLine, nemImportalhatoItem.ErrorList)
});
}
return nemImportalhatoItemModelList.OrderBy(x => x.TanarNevImportData).ToList();
}
public ActionResult Import()
{
if (ModelState.IsValid)
{
var helper = new TantargyfelosztasImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType());
TantargyfelosztasImportCo importCo = helper.ImportCo;
helper.Import(new { ImportJson = importCo }, importCo.ImportMuvelet);
return Content(Url.Content(TovabbUrl));
}
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
#endregion Import
}
}