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(); if (!orarendExportKezdete.HasValue) { errorResult.Add(ErrorResource.OrarendErvenyessegKezdeteMegadasaKotelezo); } if (!orarendExportVege.HasValue) { errorResult.Add(ErrorResource.OrarendErvenyessegVegeMegadasaKotelezo); } if (errorResult.Count > 0) { return string.Join("
", 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(); 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(RendszerBeallitasTipusEnum.Osszefuggo_gyakorlat_kezd_datum); orarendImportFileUploadCo.OraErvenyessegMaxDate = systemSettingsHelper.GetSystemSettingValue(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(); 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 importHeaderList = !orarendImportExportFileUploadModel.IsNapirendImport ? OrarendImportExportHelper.ImportHeaderList : OrarendImportExportHelper.ImportHeaderListNapirend; orarendImportFileUploadCo.ImportData = ImportExportHelper.GetImportDataFromExcel(orarendImportExportFileUploadModel.ImportFile.InputStream, importHeaderList, out fileErrorResultList); if (orarendImportFileUploadCo.ImportData != null) { foreach (List 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 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 ValidateOsszefuggoSzakmaiGyakorlatKezdeteVege(DateTime osszefuggoSzakmaiGyakorlatKezdetDatum, DateTime osszefuggoSzakmaiGyakorlatVegDatum) { var errorList = new List(); 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 ValidateOraErvenyessegKezdete(OrarendImportExportFileUploadModel orarendImportExportFileUploadModel, DateTime oraErvenyessegMinDate, string korabbiMessage, DateTime oraErvenyessegMaxDate, string kesobbiMessage) { var errorList = new List(); 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 tantargyCoList = new TantargyHelper(sessionConnectionType).GetTantargyCoList(); List osztalyCoList = new OsztalyHelper(sessionConnectionType).GetOsztalyCoList(); List csoportCoList = new CsoportHelper(sessionConnectionType).GetCsoportCoList(); List tantargyfelosztasCoList = new TantargyFelosztasHelper(sessionConnectionType).GetTantargyfelosztasCoList(); List teremCoList = new TeremHelper(sessionConnectionType).GetTeremCoList(isImportValidation:true); List 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 { 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 tantargyfelosztasCoList, bool isTtfImport) { List 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 importJsonItemList, List 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 coList) { List 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 GetTantargyfelosztasImportItemModelList(OrarendImportCo importCo, List coList, bool isTtfImport) { var importItemModelList = new List(); List importJsonItemList = importCo.TantargyfelosztasImportJsonItemList; if (importJsonItemList == null) { if (coList.Count == 0) { return importItemModelList; } importJsonItemList = new List(); } //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 GetTeremImportItemModelList(List importJsonItemList, List coList) { var importItemModelList = new List(); if (importJsonItemList == null) { if (coList.Count == 0) { return importItemModelList; } importJsonItemList = new List(); } //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 GetOrarendImportItemModelList(OrarendImportCo importCo, List coList) { var importItemModelList = new List(); List importJsonItemList = importCo.MainImportJsonItemList; if (importJsonItemList == null) { if (coList.Count == 0) { return importItemModelList; } importJsonItemList = new List(); } //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(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(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 GetNemImportalhatoItemModelList(List nemImportalhatoItemList) { var nemImportalhatoItemModelList = new List(); 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 } }