kreta/Kreta.BusinessLogic/HelperClasses/ImportCo/BaseTantargyfelosztasImportCo.cs
2024-03-13 00:33:46 +01:00

423 lines
18 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using Kreta.BusinessLogic.Classes;
using Kreta.BusinessLogic.Validation;
using Kreta.Enums;
using Kreta.Resources;
using Newtonsoft.Json;
namespace Kreta.BusinessLogic.HelperClasses.ImportCo
{
public class BaseTantargyfelosztasImportCo : BaseImportCo
{
[JsonProperty("T_TANTARGY_OSSZES")]
public List<TantargyImportJsonItemCo> TantargyImportJsonItemList { get; set; }
[JsonProperty("T_OSZTALYCSOPORT_OSSZES")]
public List<OsztalyCsoportImportJsonItemCo> OsztalyCsoportImportJsonItemList { get; set; }
[JsonProperty("T_OSZTALY_OSSZES")]
public List<OsztalyImportJsonItemCo> OsztalyImportJsonItemList { get; set; }
[JsonProperty("T_CSOPORT_OSSZES")]
public List<CsoportImportJsonItemCo> CsoportImportJsonItemList { get; set; }
[JsonIgnore]
public int FeladatellatasiHelyId { get; set; }
[JsonIgnore]
public List<AlkalmazottItemCo> TanarCoList { get; set; }
[JsonIgnore]
public List<OsztalyItemCo> OsztalyCoList { get; set; }
[JsonIgnore]
public List<CsoportItemCo> CsoportCoList { get; set; }
[JsonIgnore]
public List<TeremItemCo> TeremCoList { get; set; }
[JsonIgnore]
public FeladatEllatasiHelyCO FeladatellatasiHelyCo { get; set; }
[JsonIgnore]
public int FeladatKategoriaId { get; set; }
public Dictionary<int, List<ValidationResult>> Validate(List<BaseTantargyfelosztasImportItemCo> baseTantargyfelosztasImportItemList)
{
var validationResultDictionary = new Dictionary<int, List<ValidationResult>>();
foreach (BaseTantargyfelosztasImportItemCo importItem in baseTantargyfelosztasImportItemList)
{
var validationResultList = new List<ValidationResult>();
var isDualisElem = false;
//NOTE: Az import item-eket egyesével levalidáljuk!
var blValidator = new BlValidator(importItem);
if (!blValidator.IsValid)
{
validationResultList.AddRange(blValidator.ErrorList);
}
//NOTE: Levalidáljuk, hogy a tanár szerepel-e az adatbázisban, ha nem üres string(illetve, ha több ugyanolyan nevű tanár szerepel, akkor megnézzük születési idő alapján is).
// Azért nem BlValidator-ban, mert így csak egyszer kell lekérni a tanárlistát!
var tanarNevToCompare = importItem.TanarNev?.ToComparableString();
if (!string.IsNullOrWhiteSpace(tanarNevToCompare))
{
if (!importItem.TanarSzuletesiIdo.HasValue && TanarCoList.All(x => x.FelhasznaloNyomtatasiNevComparableString != tanarNevToCompare) ||
importItem.TanarSzuletesiIdo.HasValue && !TanarCoList.Any(x => x.FelhasznaloNyomtatasiNevComparableString == tanarNevToCompare && x.FelhasznaloSzuletesiIdo == importItem.TanarSzuletesiIdo))
{
validationResultList.Add(new ValidationResult(string.Format(ImportExportCommonResource.TanarIsNotInDatabase, importItem.TanarNevImportData)));
}
if (!importItem.TanarSzuletesiIdo.HasValue && TanarCoList.Count(x => x.FelhasznaloNyomtatasiNevComparableString == tanarNevToCompare) > 1)
{
validationResultList.Add(new ValidationResult(string.Format(ImportExportCommonResource.TanarExistsMoreTimesInDatabase, importItem.TanarNevImportData)));
}
else if (TanarCoList.Where(x => x.FelhasznaloNyomtatasiNevComparableString == tanarNevToCompare && (!importItem.TanarSzuletesiIdo.HasValue || x.FelhasznaloSzuletesiIdo == importItem.TanarSzuletesiIdo))?.ToList()?.Count() > 1)
{
validationResultList.Add(new ValidationResult(ErrorResource.AzImportalasFajlAzonosNeveketEsSzuletesiDatumokatTartalmaz));
}
else
{
var tanarCo = TanarCoList.SingleOrDefault(x => x.FelhasznaloNyomtatasiNevComparableString == tanarNevToCompare && (!importItem.TanarSzuletesiIdo.HasValue || x.FelhasznaloSzuletesiIdo == importItem.TanarSzuletesiIdo));
if (tanarCo != null)
{
if (tanarCo.SzerepkorTipusIdString.Equals(SzerepkorTipusEnum.alkalmazott.ToString()))
{
validationResultList.Add(new ValidationResult(ImportExportCommonResource.TantargyfelosztasNemLehetsegesCsakAlkalmazottJogunak));
}
if (tanarCo.SzervezetId.HasValue && !isDualisElem)
{
isDualisElem = true;
}
}
}
}
var csoportNevToCompare = importItem.CsoportNev?.ToComparableString();
if (!string.IsNullOrWhiteSpace(csoportNevToCompare) && baseTantargyfelosztasImportItemList.Any(x => x.OsztalyNev?.ToComparableString() == csoportNevToCompare))
{
validationResultList.Add(new ValidationResult(ImportExportTantargyfelosztasResource.AMegadottCsoportSzerepelOsztalykentADokumentumban));
}
if (!string.IsNullOrWhiteSpace(csoportNevToCompare) && OsztalyCoList.Any(x => x.NevComparableString == csoportNevToCompare))
{
validationResultList.Add(new ValidationResult(ImportExportTantargyfelosztasResource.AMegadottCsoportSzerepelOsztalykentAzAdatbazisban));
}
var osztalyNevToCompare = importItem.OsztalyNev?.ToComparableString();
if (!string.IsNullOrWhiteSpace(osztalyNevToCompare) && baseTantargyfelosztasImportItemList.Any(x => x.CsoportNev?.ToComparableString() == osztalyNevToCompare))
{
validationResultList.Add(new ValidationResult(ImportExportTantargyfelosztasResource.AMegadottOsztalySzerepelCsoportkentADokumentumban));
}
if (!string.IsNullOrWhiteSpace(osztalyNevToCompare) && CsoportCoList.Any(x => x.NevComparableString == osztalyNevToCompare))
{
validationResultList.Add(new ValidationResult(ImportExportTantargyfelosztasResource.AMegadottOsztalySzerepelCsoportkentAzAdatbazisban));
}
if (!isDualisElem && !string.IsNullOrWhiteSpace(csoportNevToCompare))
{
var csoportCo = CsoportCoList.SingleOrDefault(x => x.NevComparableString == csoportNevToCompare);
if (csoportCo != null && csoportCo.SzervezetId.HasValue)
{
isDualisElem = true;
}
}
var tantargyNevToCompare = importItem.TantargyNev?.ToComparableString();
if (!isDualisElem && !string.IsNullOrWhiteSpace(tantargyNevToCompare) && tantargyNevToCompare.Equals(TantargyResource.DualisKepzes.ToComparableString()))
{
isDualisElem = true;
}
if (isDualisElem)
{
validationResultList.Add(new ValidationResult(ImportExportCommonResource.DualisKepzeshezKapcsolodoElemekImportalasaNemLehetseges));
}
if (validationResultList.Count > 0)
{
validationResultDictionary.Add(importItem.LineNumber, validationResultList);
}
}
return validationResultDictionary;
}
}
public class BaseTantargyfelosztasImportItemCo : BaseImportItemCo
{
[MaxLength(255, ErrorMessageResourceName = nameof(CommonResource.MaxLengthValidation), ErrorMessageResourceType = typeof(CommonResource))]
[Display(Name = nameof(ImportExportTantargyfelosztasResource.ImportHeaderNameOsztaly), ResourceType = typeof(ImportExportTantargyfelosztasResource))]
public string OsztalyNevImportData { get; set; }
[MaxLength(255, ErrorMessageResourceName = nameof(CommonResource.MaxLengthValidation), ErrorMessageResourceType = typeof(CommonResource))]
[Display(Name = nameof(ImportExportTantargyfelosztasResource.ImportHeaderNameCsoport), ResourceType = typeof(ImportExportTantargyfelosztasResource))]
public string CsoportNevImportData { get; set; }
[Required(ErrorMessageResourceName = nameof(ErrorResource.Required), ErrorMessageResourceType = typeof(ErrorResource))]
[MaxLength(255, ErrorMessageResourceName = nameof(CommonResource.MaxLengthValidation), ErrorMessageResourceType = typeof(CommonResource))]
[Display(Name = nameof(ImportExportTantargyfelosztasResource.ImportHeaderNameTantargy), ResourceType = typeof(ImportExportTantargyfelosztasResource))]
public string TantargyNevImportData { get; set; }
[Required(ErrorMessageResourceName = nameof(ErrorResource.Required), ErrorMessageResourceType = typeof(ErrorResource))]
[MaxLength(255, ErrorMessageResourceName = nameof(CommonResource.MaxLengthValidation), ErrorMessageResourceType = typeof(CommonResource))]
[Display(Name = nameof(ImportExportTantargyfelosztasResource.ImportHeaderNameTanar), ResourceType = typeof(ImportExportTantargyfelosztasResource))]
public string TanarNevImportData { get; set; }
public string OsztalyNev => GetStringValue(OsztalyNevImportData);
public string CsoportNev => GetStringValue(CsoportNevImportData);
public bool IsCsoport => !string.IsNullOrWhiteSpace(CsoportNev);
public string OsztalyCsoportNev => IsCsoport ? CsoportNev : OsztalyNev;
public string TantargyNev => GetStringValue(TantargyNevImportData);
public DateTime? TanarSzuletesiIdo => GetSzuletesIdoFromNev(TanarNevImportData);
public string TanarSzuletesiIdoString => GetDateTimeString(TanarSzuletesiIdo);
public string TanarNev => GetNev(TanarNevImportData, TanarSzuletesiIdo);
public int? TanarId { get; set; }
public string TantargyfelosztasNev => $"{TantargyNev} - {OsztalyCsoportNev} - {TanarNev}";
public int? CsoportTipusId { get; set; }
public bool IsOsszefuggoSzakmaiGyakorlat => CsoportTipusId == (int)CsoportTipusEnum.OsszefuggoSzakmaiGyakorlatiCsoport;
public int OperationTantargy { get; set; }
public string CompareHashTantargy { get; set; }
public int OperationOsztaly { get; set; }
public string CompareHashOsztaly { get; set; }
public int OperationCsoport { get; set; }
public string CompareHashCsoport { get; set; }
}
public class TantargyImportJsonItemCo : BaseImportJsonItemCo
{
public TantargyImportJsonItemCo(BaseTantargyfelosztasImportItemCo importItemCo, int tanevId, int intezmenyId, int felhasznaloId) : base(tanevId, intezmenyId, felhasznaloId)
{
Nev = importItemCo.TantargyNev;
RovidNev = Nev.Length > 20 ? Nev.Substring(0, 20) : Nev;
NevNyomtatvanyban = Nev;
LineNumber = importItemCo.LineNumber;
Operation = importItemCo.OperationTantargy;
}
public TantargyImportJsonItemCo(OratervImportItemCo importItemCo, int tanevId, int intezmenyId, int felhasznaloId) : base(tanevId, intezmenyId, felhasznaloId)
{
Nev = importItemCo.TantargyNeve;
RovidNev = Nev.Length > 20 ? Nev.Substring(0, 20) : Nev;
NevNyomtatvanyban = Nev;
LineNumber = importItemCo.LineNumber;
Operation = importItemCo.OperationTantargy;
}
#region Import Json Properties
[JsonProperty("C_NEV")]
public string Nev { get; set; }
[JsonProperty("C_ROVIDNEV")]
public string RovidNev { get; set; }
[JsonProperty("C_NEVNYOMTATVANYBAN")]
public string NevNyomtatvanyban { get; set; }
#region Default Required Import Json Properties
[JsonProperty("C_GYAKORLATI")]
public string IsGyakorlati => SDAConvert.ToSDABoolean(false);
[JsonProperty("C_TARGYKATEGORIA")]
public int Tantargykategoria => (int)TargyKategoriaTipusEnum.na;
[JsonProperty("C_ALTANTARGYKENTNYOMTATVANYBAN")]
public string IsAltantargykentNyomtatvanyban => SDAConvert.ToSDABoolean(false);
[JsonProperty("C_TANORANKIVULI")]
public string IsTanoranKivuli => SDAConvert.ToSDABoolean(false);
[JsonProperty("C_FOTARGYE")]
public string IsFotargy => SDAConvert.ToSDABoolean(true);
[JsonProperty("C_FOTARGYID")]
public int? FotargyId => null;
#endregion Default Required Import Json Properties
#endregion Import Json Properties
}
public class OsztalyCsoportImportJsonItemCo : BaseImportJsonItemCo
{
public OsztalyCsoportImportJsonItemCo(BaseTantargyfelosztasImportItemCo importItemCo, int operationOsztalyCsoport, string osztalyCsoportNev, int feladatellatasiHelyId, int feladatKategoriaId, int tanevId, int intezmenyId, int felhasznaloId) : base(tanevId, intezmenyId, felhasznaloId)
{
Nev = osztalyCsoportNev;
FeladatellatasiHelyId = feladatellatasiHelyId;
FeladatKategoriaId = feladatKategoriaId;
LineNumber = importItemCo.LineNumber;
Operation = operationOsztalyCsoport;
}
#region Import Json Properties
[JsonProperty("C_NEV")]
public string Nev { get; set; }
[JsonProperty("C_FELADATELLATASIHELYID")]
public int FeladatellatasiHelyId { get; set; }
#region Default Required Import Json Properties
[JsonProperty("C_ISTECHNIKAI")]
public string IsTechnikaiOsztaly => SDAConvert.ToSDABoolean(false);
[JsonProperty("C_VEGZOSEVFOLYAM")]
public string IsVegzosEvfolyam => SDAConvert.ToSDABoolean(false);
[JsonProperty("C_EVFOLYAMTIPUSA")]
public int EvfolyamTipus => (int)EvfolyamTipusEnum.na;
[JsonProperty("C_KERESZTFELEVES")]
public string IsKeresztfeleves => SDAConvert.ToSDABoolean(false);
[JsonProperty("C_FELADATKATEGORIAID")]
public int FeladatKategoriaId { get; set; }
[JsonProperty("C_MEGJEGYZES")]
public string Megjegyzes => null;
[JsonProperty("C_TERVEZETTLETSZAM")]
public int? TervezettLetszam => null;
[JsonProperty("C_TEREMID")]
public int? TeremId => null;
[JsonProperty("C_KEPZESIFORMA")]
public int KepzesiForma => (int)TanterviJellegEnum.nappali_rendszeru_iskolai_oktatas;
[JsonProperty("C_ISGYOGYPEDAGOGIAILOGOPEDIAI")]
public string IsGyogypedagogiaiLogopediai => SDAConvert.ToSDABoolean(false);
#endregion Default Required Import Json Properties
#endregion Import Json Properties
}
public class OsztalyImportJsonItemCo : BaseImportJsonItemCo
{
public OsztalyImportJsonItemCo(BaseTantargyfelosztasImportItemCo importItemCo, int tanevId, int intezmenyId, int felhasznaloId) : base(tanevId, intezmenyId, felhasznaloId)
{
OsztalyCsoportNev = importItemCo.OsztalyNev;
LineNumber = importItemCo.LineNumber;
Operation = importItemCo.OperationOsztaly;
}
#region Import Json Properties
[JsonProperty("OsztalyCsoportNev")]
public string OsztalyCsoportNev { get; set; }
#region Default Required Import Json Properties
[JsonProperty("C_KETTANNYELVU")]
public string IsKettannyelvu => SDAConvert.ToSDABoolean(false);
[JsonProperty("C_NEMZETISEGI")]
public string IsNemzetisegi => SDAConvert.ToSDABoolean(false);
[JsonProperty("C_NYELVIELOKESZITO")]
public string IsNyelvielokeszito => SDAConvert.ToSDABoolean(false);
[JsonProperty("C_SPORT")]
public string IsSport => SDAConvert.ToSDABoolean(false);
[JsonProperty("C_OSZTALYNAPLOLEIRASA")]
public string OsztalynaploLeirasa => null;
[JsonProperty("C_OSZTALYNAPLOMEGNYITASA")]
public string OsztalynaploMegnyitasaDate => null;
[JsonProperty("C_OSZTALYNAPLOZARASA")]
public string OsztalynaploZarasaDate => null;
[JsonProperty("C_OSZTALYFONOKID")]
public int? OsztalyfonokId => null;
[JsonProperty("C_OFOHELYETTESID")]
public int? OsztalyfonokHelyettesId => null;
[JsonProperty("C_TANTERVID")]
public int? TantervId => null;
#endregion Default Required Import Json Properties
#endregion Import Json Properties
}
public class CsoportImportJsonItemCo : BaseImportJsonItemCo
{
public CsoportImportJsonItemCo(BaseTantargyfelosztasImportItemCo importItemCo, int tanevId, int intezmenyId, int felhasznaloId) : base(tanevId, intezmenyId, felhasznaloId)
{
OsztalyCsoportNev = importItemCo.CsoportNev;
OsztalybontasNev = importItemCo.OsztalyNev;
//NOTE: Az CsoportTipusId.Value nem lehet null, mert ide már csak olyan elem jön be, aminek van csoprt típusa!
Tipus = importItemCo.CsoportTipusId.Value;
LineNumber = importItemCo.LineNumber;
Operation = importItemCo.OperationCsoport;
}
#region Import Json Properties
[JsonProperty("OsztalyCsoportNev")]
public string OsztalyCsoportNev { get; set; }
[JsonProperty("OsztalybontasNev")]
public string OsztalybontasNev { get; set; }
[JsonProperty("C_TIPUSA")]
public int Tipus { get; set; }
#region Default Required Import Json Properties
[JsonProperty("C_CSOPORTNAPLOLEIRAS")]
public string CsoportnaploLeiras => null;
[JsonProperty("C_CSOPORTNAPLOMEGNYITASA")]
public string CsoportnaploMegnyitasaDate => null;
[JsonProperty("C_CSOPORTNAPLOZARASA")]
public string CsoportnaploZarasaDate => null;
[JsonProperty("C_CSOPORTVEZETOID")]
public int? CsoportvezetoId => null;
[JsonProperty("C_OSZTALYBONTASID")]
public int? OsztalybontasId => null;
#endregion Default Required Import Json Properties
#endregion Import Json Properties
}
}