684 lines
37 KiB
C#
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
|
|
}
|
|
}
|