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

684 lines
37 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
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.Helpers.SystemSettings;
using Kreta.BusinessLogic.Security;
using Kreta.Core.ConnectionType;
using Kreta.Core.Exceptions;
using Kreta.Enums;
using Kreta.Enums.ManualEnums.ImportExport;
using Kreta.Resources;
using Kreta.Web.Areas.ImportExport.Models.CommonModels;
using Kreta.Web.Areas.ImportExport.Models.OrarendImportExport;
using Kreta.Web.Areas.ImportExport.Models.TantargyfelosztasImportExport;
using Kreta.Web.Areas.ImportExport.Models.TeremImportExport;
using Kreta.Web.Helpers;
using Kreta.Web.Models.EditorTemplates;
using Kreta.Web.Security;
namespace Kreta.Web.Areas.ImportExport.Controllers
{
[MvcRoleClaimsAuthorize(true)]
[MvcRolePackageAuthorize(KretaClaimPackages.Adminisztrator.ClaimValue)]
public class BaseOrarendImportExportController : BaseTantargyfelosztasImportExportController
{
#region Fields
private const string TovabbUrl = @"~/Orarend/AdminTanariOrarend";
#endregion Fields
#region Properties
public static string TeremGridName => "TeremGrid";
public static string TeremGridRowTemplateName => "TeremGridRowTemplate";
public static string GridName => "OrarendGrid";
public static string GridRowTemplateName => "OrarendGridRowTemplate";
public static string JavascriptHelperClassName => "OrarendImportExportHelper";
#endregion Properties
protected OrarendImportExportModel GetImportExportModel()
{
TanevCO tanevCo = new TanevHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetTanevInfo();
var oraErvenyessegMinDate = tanevCo.KezdoNap;
var oraErvenyessegMaxDate = tanevCo.UtolsoTanitasiNap;
if (ClaimData.IsActivTanev)
{
oraErvenyessegMaxDate = tanevCo.UtolsoNap;
}
var today = DateTime.Today;
DateTime oraErvenyessegKezdeteValue;
if (oraErvenyessegMinDate > today)
{
oraErvenyessegKezdeteValue = oraErvenyessegMinDate;
}
else if (oraErvenyessegMaxDate < today)
{
oraErvenyessegKezdeteValue = oraErvenyessegMaxDate;
}
else
{
oraErvenyessegKezdeteValue = today;
}
var model = new OrarendImportExportModel
{
MaxAllowedFileSizeInBytes = UploadFileValidator.Configuration.ImportMaxAllowedFileSizeInBytes,
AllowedFileExtensions = UploadFileValidator.Configuration.ImportAllowedFileExtensions,
AscAllowedFileExtensions = UploadFileValidator.Configuration.AscImportAllowedFileExtensions,
OraErvenyessegKezdeteValue = oraErvenyessegKezdeteValue,
OraErvenyessegMinDate = oraErvenyessegMinDate,
OraErvenyessegMaxDate = oraErvenyessegMaxDate,
OrarendExportKezdete = oraErvenyessegMinDate,
OrarendExportVege = oraErvenyessegMaxDate
};
return model;
}
#region Export
protected string GetExport(OrarendImportFileUploadCo orarendImportFileUploadCo, DateTime? orarendExportKezdete, DateTime? orarendExportVege, bool isIdoszakonKivuliElemekMegjelenitese, bool isEgyediNapOrainakKihagyasa)
{
var errorResult = new List<string>();
if (!orarendExportKezdete.HasValue)
{
errorResult.Add(ErrorResource.OrarendErvenyessegKezdeteMegadasaKotelezo);
}
if (!orarendExportVege.HasValue)
{
errorResult.Add(ErrorResource.OrarendErvenyessegVegeMegadasaKotelezo);
}
if (errorResult.Count > 0)
{
return string.Join("<br />", errorResult);
}
//NOTE: Az OraErvenyessegVege 00:00-t tartalmaz, de aznap napközben még lehet óra, ezért a következő nap 00:00 időpont a jó és azt mentjük a db-be!
orarendExportVege = orarendExportVege.Value.AddDays(1);
MemoryStream memoryStream = new OrarendImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetExport(orarendImportFileUploadCo, orarendExportKezdete.Value, orarendExportVege.Value, isIdoszakonKivuliElemekMegjelenitese, isEgyediNapOrainakKihagyasa);
return GetExportFileString(memoryStream);
}
#endregion Export
#region Import
protected JsonResult UploadFile(OrarendImportExportFileUploadModel orarendImportExportFileUploadModel)
{
var orarendImportFileUploadCo = new OrarendImportFileUploadCo
{
OrarendImportMuvelet = orarendImportExportFileUploadModel.OrarendImportMuvelet,
OrarendImportTipus = orarendImportExportFileUploadModel.OrarendImportTipus,
IsNapirendImport = orarendImportExportFileUploadModel.IsNapirendImport,
IsTtfImport = orarendImportExportFileUploadModel.IsTtfImport,
IsOraszamUpdate = orarendImportExportFileUploadModel.IsOraszamUpdate,
IsOsszefuggoSzakmaiGyakorlat = orarendImportExportFileUploadModel.IsOsszefuggoSzakmaiGyakorlat,
OrarendiOraLezarasDateTime = orarendImportExportFileUploadModel.OraErvenyessegKezdete
};
switch (orarendImportExportFileUploadModel.OrarendImportTipus)
{
case (int)OrarendImportTipusEnum.Import:
case (int)OrarendImportTipusEnum.ErvenyessegiIdovelImport:
UploadFileValidator.ValidateImportFile(orarendImportExportFileUploadModel.ImportFile);
break;
case (int)OrarendImportTipusEnum.AscImport:
UploadFileValidator.ValidateAscImportFile(orarendImportExportFileUploadModel.ImportFile);
break;
}
var errorResult = new List<string>();
if (orarendImportExportFileUploadModel.FeladatellatasiHelyId == null)
{
errorResult.Add(ErrorResource.FeladatellatasiHelyMegadasaKotelezo);
}
if (!orarendImportExportFileUploadModel.IsTtfImport && orarendImportExportFileUploadModel.IsOraszamUpdate)
{
errorResult.Add(ErrorResource.IfNotIsTtfImportIsOraszamUpdate);
}
string korabbiMessage;
string kesobbiMessage;
TanevCO tanevCo = new TanevHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetTanevInfo();
orarendImportFileUploadCo.OraErvenyessegMinDate = tanevCo.KezdoNap;
orarendImportFileUploadCo.OraErvenyessegMaxDate = tanevCo.UtolsoTanitasiNap;
orarendImportFileUploadCo.OraErvenyessegVegzosMaxDate = tanevCo.UtolsoTanitasiNapVegzos;
//NOTE: Aktív tanévben vagyunk, összefüggő szakmai gyakorlat és valamelyik excel import van, akkor le kell ellenőriznünk,
// hogy megfelelőek-e a testreszabásokban lévő összefüggő szakmai gyakorlat kezdő és vég dátumok, illetve ezek lesznek a max és min érvényességi idők.
if (ClaimData.IsActivTanev &&
orarendImportFileUploadCo.IsOsszefuggoSzakmaiGyakorlat &&
(orarendImportFileUploadCo.OrarendImportTipus == (int)OrarendImportTipusEnum.Import || orarendImportFileUploadCo.OrarendImportTipus == (int)OrarendImportTipusEnum.ErvenyessegiIdovelImport))
{
var systemSettingsHelper = new SystemSettingsHelper(ConnectionTypeExtensions.GetSessionConnectionType());
orarendImportFileUploadCo.OraErvenyessegMinDate = systemSettingsHelper.GetSystemSettingValue<DateTime>(RendszerBeallitasTipusEnum.Osszefuggo_gyakorlat_kezd_datum);
orarendImportFileUploadCo.OraErvenyessegMaxDate = systemSettingsHelper.GetSystemSettingValue<DateTime>(RendszerBeallitasTipusEnum.Osszefuggo_gyakorlat_veg_datum);
korabbiMessage = ImportExportOrarendResource.OsszefuggoSzakmaiGyakorlatKezdete;
kesobbiMessage = ImportExportOrarendResource.OsszefuggoSzakmaiGyakorlatVege;
errorResult.AddRange(ValidateOsszefuggoSzakmaiGyakorlatKezdeteVege(orarendImportFileUploadCo.OraErvenyessegMinDate, orarendImportFileUploadCo.OraErvenyessegMaxDate));
}
else
{
korabbiMessage = ImportExportCommonResource.ElsoTanitasiNap;
kesobbiMessage = ImportExportCommonResource.UtolsoTanitasiNap;
}
var fileErrorResultList = new List<string>();
switch (orarendImportFileUploadCo.OrarendImportTipus)
{
case (int)OrarendImportTipusEnum.Import:
orarendImportExportFileUploadModel.OraErvenyessegVege = orarendImportFileUploadCo.OraErvenyessegMaxDate;
errorResult.AddRange(ValidateOraErvenyessegKezdete(orarendImportExportFileUploadModel, orarendImportFileUploadCo.OraErvenyessegMinDate, korabbiMessage, orarendImportFileUploadCo.OraErvenyessegMaxDate, kesobbiMessage));
if (!errorResult.Any())
{
Dictionary<int, string> importHeaderList = !orarendImportExportFileUploadModel.IsNapirendImport ? OrarendImportExportHelper.ImportHeaderList : OrarendImportExportHelper.ImportHeaderListNapirend;
orarendImportFileUploadCo.ImportData = ImportExportHelper.GetImportDataFromExcel(orarendImportExportFileUploadModel.ImportFile.InputStream, importHeaderList, out fileErrorResultList);
if (orarendImportFileUploadCo.ImportData != null)
{
foreach (List<string> importDataRow in orarendImportFileUploadCo.ImportData)
{
importDataRow.Insert(0, orarendImportExportFileUploadModel.OraErvenyessegVege.ToConvertableDateString());
importDataRow.Insert(0, orarendImportExportFileUploadModel.OraErvenyessegKezdete.ToConvertableDateString());
}
}
}
break;
case (int)OrarendImportTipusEnum.ErvenyessegiIdovelImport:
if (!errorResult.Any())
{
Dictionary<int, string> importHeaderList = !orarendImportExportFileUploadModel.IsNapirendImport ? OrarendImportExportHelper.ImportHeaderListOraErvenyessegiIdovel : OrarendImportExportHelper.ImportHeaderListNapirendOraErvenyessegiIdovel;
orarendImportFileUploadCo.ImportData = ImportExportHelper.GetImportDataFromExcel(orarendImportExportFileUploadModel.ImportFile.InputStream, importHeaderList, out fileErrorResultList);
}
break;
case (int)OrarendImportTipusEnum.AscImport:
orarendImportExportFileUploadModel.OraErvenyessegVege = orarendImportFileUploadCo.OraErvenyessegMaxDate;
errorResult.AddRange(ValidateOraErvenyessegKezdete(orarendImportExportFileUploadModel, orarendImportFileUploadCo.OraErvenyessegMinDate, korabbiMessage, orarendImportFileUploadCo.OraErvenyessegMaxDate, kesobbiMessage));
if (!errorResult.Any())
{
try
{
orarendImportFileUploadCo.ImportData = AscImportExportHelper.GetOrarendImportDataFromAsc(orarendImportExportFileUploadModel.ImportFile.InputStream, orarendImportExportFileUploadModel.OraErvenyessegKezdete.ToConvertableDateString(), orarendImportExportFileUploadModel.OraErvenyessegVege.ToConvertableDateString());
}
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!
orarendImportFileUploadCo.FeladatellatasiHelyId = orarendImportExportFileUploadModel.FeladatellatasiHelyId.Value;
new OrarendImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).SetImportCo(orarendImportFileUploadCo, ClaimData.IsActivTanev);
return Json(null);
}
private List<string> ValidateOsszefuggoSzakmaiGyakorlatKezdeteVege(DateTime osszefuggoSzakmaiGyakorlatKezdetDatum, DateTime osszefuggoSzakmaiGyakorlatVegDatum)
{
var errorList = new List<string>();
var helper = new TanevHelper(ConnectionTypeExtensions.GetSessionConnectionType());
TanevCO tanevCo = helper.GetTanevInfo();
DateTime tanevKezdoNapDate = tanevCo.KezdoNap;
DateTime tanevUtolsoNapDate = tanevCo.UtolsoNap;
if (osszefuggoSzakmaiGyakorlatKezdetDatum > osszefuggoSzakmaiGyakorlatVegDatum)
{
errorList.Add($@"{ImportExportOrarendResource.AzOsszefuggoSzakmaiGyakorlatKezdeteNemLehetKesobbiDatumMintAVege} {ImportExportOrarendResource.EztABeallitastANyilvantartasMenuTestreszabasMenupontjabanAzEnaploKorlatozasainakBeallitasanalModosithatja}");
}
else if (tanevKezdoNapDate > osszefuggoSzakmaiGyakorlatKezdetDatum || tanevUtolsoNapDate < osszefuggoSzakmaiGyakorlatVegDatum)
{
errorList.Add($@"{ImportExportOrarendResource.AzOsszefuggoSzakmaiGyakorlatKezdoEsVegDatumanakATanevElsoTanitasiNapjaEsATanevUtolsoNapjaKozeKellEsnie}");
}
return errorList;
}
private static List<string> ValidateOraErvenyessegKezdete(OrarendImportExportFileUploadModel orarendImportExportFileUploadModel, DateTime oraErvenyessegMinDate, string korabbiMessage, DateTime oraErvenyessegMaxDate, string kesobbiMessage)
{
var errorList = new List<string>();
if (orarendImportExportFileUploadModel.OraErvenyessegKezdete == null)
{
errorList.Add(ImportExportOrarendResource.RequiredOrarendErvenyessegenekKezdete);
}
else if (orarendImportExportFileUploadModel.OraErvenyessegKezdete < oraErvenyessegMinDate)
{
errorList.Add(string.Format(ImportExportCommonResource.InvalidKorabbiDatum, ImportExportOrarendResource.ImportHeaderNameOraErvenyessegKezdete, orarendImportExportFileUploadModel.OraErvenyessegKezdete.Value.ToString(Core.Constants.ToStringPattern.HungarianDate), korabbiMessage.ToLowerInvariant(), oraErvenyessegMinDate.ToString(Core.Constants.ToStringPattern.HungarianDate)));
}
else if (orarendImportExportFileUploadModel.OraErvenyessegKezdete > oraErvenyessegMaxDate)
{
errorList.Add(string.Format(ImportExportCommonResource.InvalidKesobbiDatum, ImportExportOrarendResource.ImportHeaderNameOraErvenyessegKezdete, orarendImportExportFileUploadModel.OraErvenyessegKezdete.Value.ToString(Core.Constants.ToStringPattern.HungarianDate), kesobbiMessage.ToLowerInvariant(), oraErvenyessegMaxDate.ToString(Core.Constants.ToStringPattern.HungarianDate)));
}
return errorList;
}
public ActionResult OpenImportPreviewPopup()
{
SessionConnectionType sessionConnectionType = ConnectionTypeExtensions.GetSessionConnectionType();
OrarendImportCo importCo = new OrarendImportExportHelper(sessionConnectionType).ImportCo;
List<TantargyItemCo> tantargyCoList = new TantargyHelper(sessionConnectionType).GetTantargyCoList();
List<OsztalyItemCo> osztalyCoList = new OsztalyHelper(sessionConnectionType).GetOsztalyCoList();
List<CsoportItemCo> csoportCoList = new CsoportHelper(sessionConnectionType).GetCsoportCoList();
List<TantargyfelosztasItemCo> tantargyfelosztasCoList = new TantargyFelosztasHelper(sessionConnectionType).GetTantargyfelosztasCoList();
List<TeremItemCo> teremCoList = new TeremHelper(sessionConnectionType).GetTeremCoList(isImportValidation:true);
List<OrarendItemCo> orarendCoList = new OrarendHelper(sessionConnectionType).GetOrarendCoList().Where(x => x.IsTanoranKivuliFoglalkozas == importCo.IsNapirendImport).ToList();
bool isTtfImport = importCo.IsTtfImport;
var importInfoModel = new OrarendImportInfoModel
{
ImportInfoSummaryList = new ImportInfoSummaryListModel
{
ImportInfoSummaryModelList = new List<ImportInfoSummaryModel>
{
GetTantargyImportInfoSummary(importCo.TantargyImportJsonItemList, tantargyCoList),
GetOsztalyImportInfoSummary(importCo.OsztalyImportJsonItemList, osztalyCoList),
GetCsoportImportInfoSummary(importCo.CsoportImportJsonItemList, csoportCoList),
GetTantargyfelosztasImportInfoSummary(importCo, tantargyfelosztasCoList, isTtfImport),
GetTeremImportInfoSummary(importCo.TeremImportJsonItemList, teremCoList),
GetOrarendImportInfoSummary(importCo, orarendCoList)
}
},
TantargyImportItemList = new TantargyImportItemListModel
{
ImportItemModelList = GetTantargyImportItemModelList(importCo.TantargyImportJsonItemList, tantargyCoList)
},
OsztalyImportItemList = new OsztalyImportItemListModel
{
ImportItemModelList = GetOsztalyImportItemModelList(importCo.OsztalyImportJsonItemList, osztalyCoList)
},
CsoportImportItemList = new CsoportImportItemListModel
{
ImportItemModelList = GetCsoportImportItemModelList(importCo.CsoportImportJsonItemList, csoportCoList)
},
TantargyfelosztasImportItemList = new TantargyfelosztasImportItemListModel
{
ImportItemModelList = GetTantargyfelosztasImportItemModelList(importCo, tantargyfelosztasCoList, isTtfImport)
},
TeremImportItemList = new TeremImportItemListModel
{
ImportItemModelList = GetTeremImportItemModelList(importCo.TeremImportJsonItemList, teremCoList)
},
MainImportItemList = new OrarendImportItemListModel
{
ImportItemModelList = GetOrarendImportItemModelList(importCo, orarendCoList)
},
NemImportalhatoItemList = new OrarendImportNemImportalhatoItemListModel
{
NemImportalhatoItemModelList = GetNemImportalhatoItemModelList(importCo.NemImportalhatoItemList),
OrarendImportTipus = importCo.OrarendImportTipus,
IsNapirendImport = importCo.IsNapirendImport
}
};
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(OrarendImportCo importCo, List<TantargyfelosztasItemCo> tantargyfelosztasCoList, bool isTtfImport)
{
List<TantargyfelosztasImportJsonItemCo> importJsonItemList = importCo.TantargyfelosztasImportJsonItemList;
string insertRowCount = "-";
string deleteRowCount = "-";
string updateRowCount = "-";
string unchangedRowCount = tantargyfelosztasCoList.Count.ToString();
if (isTtfImport)
{
insertRowCount = importJsonItemList?.Count(x => x.Operation == (int)ImportItemOperationEnum.Insert).ToString() ?? "0";
deleteRowCount = importCo.OrarendImportMuvelet == (int)OrarendImportMuveletEnum.DeleteAndInsert ? tantargyfelosztasCoList.Count(x => x.Importalt).ToString() : "0";
if (importCo.OrarendImportMuvelet == (int)OrarendImportMuveletEnum.DeleteAndInsert)
{
unchangedRowCount = tantargyfelosztasCoList.Count(x => !x.Importalt).ToString();
}
updateRowCount = importJsonItemList?.Count(x => x.Operation == (int)ImportItemOperationEnum.Update).ToString() ?? "-";
}
var importInfoSummary = new ImportInfoSummaryModel
{
ImportName = ImportExportOrarendResource.Tantargyfelosztas,
InsertRowCount = insertRowCount,
UpdateRowCount = updateRowCount,
DeleteRowCount = deleteRowCount,
UnchangedRowCount = unchangedRowCount,
InvalidRowCount = "-"
};
return importInfoSummary;
}
private static ImportInfoSummaryModel GetTeremImportInfoSummary(List<TeremImportJsonItemCo> importJsonItemList, List<TeremItemCo> teremCoList)
{
var importInfoSummary = new ImportInfoSummaryModel
{
ImportName = ImportExportOrarendResource.Terem,
InsertRowCount = importJsonItemList?.Count(x => x.Operation == (int)ImportItemOperationEnum.Insert).ToString() ?? "0",
UpdateRowCount = "-",
DeleteRowCount = "-",
UnchangedRowCount = teremCoList.Count.ToString(),
InvalidRowCount = "-"
};
return importInfoSummary;
}
private ImportInfoSummaryModel GetOrarendImportInfoSummary(OrarendImportCo importCo, List<OrarendItemCo> coList)
{
List<OrarendImportJsonItemCo> importJsonItemList = importCo.MainImportJsonItemList;
int updateRowCount = 0;
int deleteRowCount = 0;
int unchangedRowCount = 0;
switch (importCo.OrarendImportMuvelet)
{
case (int)OrarendImportMuveletEnum.UpdateAndInsert:
//NOTE: A korábban elvégzett műveletek miatt a importCo.OrarendiOraLezarasDateTime nem lehet null!
updateRowCount = coList.Count(x => (x.OraErvenyessegVege == null ||
x.OraErvenyessegVege.Value.Date > importCo.OrarendiOraLezarasDateTime.Value) &&
x.OraErvenyessegVege != x.OraErvenyessegKezdete &&
x.OraErvenyessegKezdete < importCo.OrarendiOraLezarasDateTime);
deleteRowCount = coList.Count(x => x.Importalt &&
x.OraErvenyessegVege != x.OraErvenyessegKezdete &&
x.OraErvenyessegKezdete >= importCo.OrarendiOraLezarasDateTime);
unchangedRowCount = coList.Count - (updateRowCount + deleteRowCount);
break;
case (int)OrarendImportMuveletEnum.Insert:
unchangedRowCount = coList.Count;
break;
case (int)OrarendImportMuveletEnum.DeleteAndInsert:
deleteRowCount = coList.Count(x => x.Importalt && x.OraErvenyessegVege != x.OraErvenyessegKezdete);
unchangedRowCount = coList.Count - deleteRowCount;
break;
}
var importInfoSummary = new ImportInfoSummaryModel
{
ImportName = ImportExportOrarendResource.Orarend,
InsertRowCount = importJsonItemList?.Count(x => x.Operation == (int)ImportItemOperationEnum.Insert).ToString() ?? "0",
UpdateRowCount = updateRowCount.ToString(),
DeleteRowCount = deleteRowCount.ToString(),
UnchangedRowCount = unchangedRowCount.ToString(),
InvalidRowCount = importCo.NemImportalhatoItemList.Count.ToString()
};
return importInfoSummary;
}
private List<TantargyfelosztasImportItemModel> GetTantargyfelosztasImportItemModelList(OrarendImportCo importCo, List<TantargyfelosztasItemCo> coList, bool isTtfImport)
{
var importItemModelList = new List<TantargyfelosztasImportItemModel>();
List<TantargyfelosztasImportJsonItemCo> importJsonItemList = importCo.TantargyfelosztasImportJsonItemList;
if (importJsonItemList == null)
{
if (coList.Count == 0)
{
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,
TanarNev = importJsonItem.TanarNev,
TantargyNev = importJsonItem.TantargyNev ?? string.Empty,
Oraszam = importJsonItem.Oraszam,
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 = isTtfImport && importCo.OrarendImportMuvelet == (int)OrarendImportMuveletEnum.DeleteAndInsert && co.Importalt ?
(int)ImportItemOperationEnum.Delete :
(int)ImportItemOperationEnum.Default;
importItemModelList.Add(new TantargyfelosztasImportItemModel
{
Nev = co.Nev ?? string.Empty,
OsztalyCsoportNev = co.OsztalyCsoportNev ?? string.Empty,
TanarNev = co.TanarNev,
TantargyNev = co.TantargyNev ?? string.Empty,
Oraszam = co.Oraszam,
Operation = operation
});
}
}
return importItemModelList.OrderBy(x => x.Nev).ThenByDescending(x => x.OperationText).ToList();
}
private List<TeremImportItemModel> GetTeremImportItemModelList(List<TeremImportJsonItemCo> importJsonItemList, List<TeremItemCo> coList)
{
var importItemModelList = new List<TeremImportItemModel>();
if (importJsonItemList == null)
{
if (coList.Count == 0)
{
return importItemModelList;
}
importJsonItemList = new List<TeremImportJsonItemCo>();
}
//NOTE: Hozzáadjuk azokat a az elemeket, amik az excel-ből jöttek!
foreach (TeremImportJsonItemCo importJsonItem in importJsonItemList)
{
importItemModelList.Add(new TeremImportItemModel
{
Nev = importJsonItem.Nev,
Operation = importJsonItem.Operation
});
}
//NOTE: Hozzáadjuk azokat a az elemeket, amik az adatbázisból jöttek!
foreach (TeremItemCo co in coList)
{
if (!importJsonItemList.Select(x => x.Nev).Contains(co.Nev))
{
importItemModelList.Add(new TeremImportItemModel
{
Nev = co.Nev,
Operation = (int)ImportItemOperationEnum.Default
});
}
}
return importItemModelList.OrderBy(x => x.Nev).ThenByDescending(x => x.OperationText).ToList();
}
private List<OrarendImportItemModel> GetOrarendImportItemModelList(OrarendImportCo importCo, List<OrarendItemCo> coList)
{
var importItemModelList = new List<OrarendImportItemModel>();
List<OrarendImportJsonItemCo> importJsonItemList = importCo.MainImportJsonItemList;
if (importJsonItemList == null)
{
if (coList.Count == 0)
{
return importItemModelList;
}
importJsonItemList = new List<OrarendImportJsonItemCo>();
}
//NOTE: Hozzáadjuk azokat a az elemeket, amik az excel-ből jöttek!
foreach (OrarendImportJsonItemCo importJsonItem in importJsonItemList)
{
importItemModelList.Add(new OrarendImportItemModel
{
HetirendTipusNev = importJsonItem.HetirendTipusNev,
HetNapjaTipusNev = importJsonItem.HetNapjaTipusId.GetDisplayName<HetNapjaTipusEnum>(ClaimData.SelectedTanevID.Value),
OraSorszam = importJsonItem.OraSorszam,
OraKezdete = importJsonItem.OraKezdete,
OraVege = importJsonItem.OraVege,
OsztalyCsoportNev = importJsonItem.OsztalyCsoportNev,
TantargyNev = importJsonItem.TantargyNev,
TanarNev = importJsonItem.TanarNev,
TeremNev = importJsonItem.TeremNev,
OraErvenyessegKezdete = importJsonItem.OraErvenyessegKezdete,
OraErvenyessegVege = importJsonItem.OraErvenyessegVege,
Operation = importJsonItem.Operation
});
}
//NOTE: Hozzáadjuk azokat a az elemeket, amik az adatbázisból jöttek!
foreach (OrarendItemCo co in coList)
{
if (!importJsonItemList.Select(x => x.Id).Contains(co.Id))
{
int operation;
//Ha UpdateAndInsert van, de korábbi az óra érvényesség kezdete a lezárás dátumánál, akkor update-eljük(lezárjuk) az órarendi órákat.
if (importCo.OrarendImportMuvelet == (int)OrarendImportMuveletEnum.UpdateAndInsert &&
//NOTE: A korábban elvégzett műveletek miatt a orarendImportCo.OrarendiOraLezarasDateTime nem lehet null!
(co.OraErvenyessegVege == null || co.OraErvenyessegVege.Value.Date > importCo.OrarendiOraLezarasDateTime.Value) &&
co.OraErvenyessegVege != co.OraErvenyessegKezdete &&
co.OraErvenyessegKezdete < importCo.OrarendiOraLezarasDateTime)
{
operation = (int)ImportItemOperationEnum.Update;
}
//Ha UpdateAndInsert van, de későbbi vagy egyenlő az óra érvényesség kezdete a lezárás dátumánál, akkor töröljük az importált órarendi órákat.
else if (importCo.OrarendImportMuvelet == (int)OrarendImportMuveletEnum.UpdateAndInsert &&
co.Importalt &&
co.OraErvenyessegVege != co.OraErvenyessegKezdete &&
co.OraErvenyessegKezdete >= importCo.OrarendiOraLezarasDateTime)
{
operation = (int)ImportItemOperationEnum.Delete;
}
//Ha DeleteAndInsert van, akkor töröljük az importált órarendi órákat.
else if (importCo.OrarendImportMuvelet == (int)OrarendImportMuveletEnum.DeleteAndInsert &&
co.Importalt &&
co.OraErvenyessegVege != co.OraErvenyessegKezdete)
{
operation = (int)ImportItemOperationEnum.Delete;
}
//Különben "Nem történt változás"-t állítunk be
else
{
operation = (int)ImportItemOperationEnum.Default;
}
importItemModelList.Add(new OrarendImportItemModel
{
HetirendTipusNev = co.HetirendTipusNev,
HetNapjaTipusNev = co.HetNapjaTipusId.GetDisplayName<HetNapjaTipusEnum>(ClaimData.SelectedTanevID.Value),
OraSorszam = co.OraSorszam,
OraKezdete = co.OraKezdete,
OraVege = co.OraVege,
OsztalyCsoportNev = co.OsztalyCsoportNev,
TantargyNev = co.TantargyNev,
TanarNev = co.TanarNev,
TeremNev = co.TeremNev,
OraErvenyessegKezdete = co.OraErvenyessegKezdete,
//NOTE: Az OraErvenyessegVege 00:00-t tartalmaz, de aznap napközben még lehet óra, ezért a következő nap 00:00 időpont a jó és azt mentjük a db-be!
// Ezért megjelenítéskor az eggyel korábbi napot jelenítjük meg!
OraErvenyessegVege = co.OraErvenyessegVege?.AddDays(-1),
Operation = operation
});
}
}
return importItemModelList
.OrderBy(x => x.HetirendTipusNev)
.ThenBy(x => x.HetNapjaTipusNev)
.ThenBy(x => x.OraSorszam)
.ThenBy(x => x.OraKezdete)
.ThenBy(x => x.OraVege)
.ThenByDescending(x => x.OperationText).ToList();
}
private List<OrarendImportNemImportalhatoItemModel> GetNemImportalhatoItemModelList(List<OrarendImportItemCo> nemImportalhatoItemList)
{
var nemImportalhatoItemModelList = new List<OrarendImportNemImportalhatoItemModel>();
foreach (OrarendImportItemCo nemImportalhatoItem in nemImportalhatoItemList)
{
nemImportalhatoItemModelList.Add(new OrarendImportNemImportalhatoItemModel
{
OraErvenyessegKezdeteImportData = nemImportalhatoItem.OraErvenyessegKezdeteImportData,
OraErvenyessegVegeImportData = nemImportalhatoItem.OraErvenyessegVegeImportData,
HetirendImportData = nemImportalhatoItem.HetirendImportData,
NapImportData = nemImportalhatoItem.NapImportData,
OraImportData = nemImportalhatoItem.OraImportData,
FoglalkozasKezdeteImportData = nemImportalhatoItem.FoglalkozasKezdeteImportData,
FoglalkozasVegeImportData = nemImportalhatoItem.FoglalkozasVegeImportData,
OsztalyNevImportData = nemImportalhatoItem.OsztalyNevImportData,
CsoportNevImportData = nemImportalhatoItem.CsoportNevImportData,
TantargyNevImportData = nemImportalhatoItem.TantargyNevImportData,
TanarNevImportData = nemImportalhatoItem.TanarNevImportData,
HelyisegImportData = nemImportalhatoItem.HelyisegImportData,
ErrorList = string.Join(Environment.NewLine, nemImportalhatoItem.ErrorList)
});
}
return nemImportalhatoItemModelList
.OrderBy(x => x.HetirendImportData)
.ThenBy(x => x.NapImportData)
.ThenBy(x => x.OraImportData)
.ThenBy(x => x.FoglalkozasKezdeteImportData)
.ThenBy(x => x.FoglalkozasVegeImportData)
.ToList();
}
public ActionResult Import()
{
if (ModelState.IsValid)
{
var helper = new OrarendImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType());
OrarendImportCo importCo = helper.ImportCo;
helper.Import(new { ImportJson = importCo }, importCo.OrarendImportMuvelet, importCo.IsNapirendImport, importCo.OrarendiOraLezarasDateTime);
return Content(Url.Content(TovabbUrl));
}
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
#endregion Import
}
}