using System.Collections.Generic; using System.Data; using System.Linq; using Kreta.BusinessLogic.HelperClasses; using Kreta.Core; using Kreta.Core.ConnectionType; using Kreta.DataAccess.Interfaces; using Kreta.DataAccessManual; using Kreta.DataAccessManual.Interfaces; using Kreta.DataAccessManual.Util; using Kreta.Enums; using Kreta.Framework; using Kreta.Framework.Entities; using Kreta.Framework.Util; using Kreta.KretaServer.Caching; namespace Kreta.BusinessLogic.Helpers { public class AdatszotarHelper : LogicBase { public AdatszotarHelper(IConnectionType connectionType) : base(connectionType) { } public const int defaultOraPerc = 45; public DataSet GetAdatszotar(GeneratedAdatszotarTipusEnum type) { return Dal.CustomConnection.Run(ConnectionType, h => { IAdatszotarDAL dal = h.AdatszotarDAL(GridParameters); return dal.GetAdatszotar(type, TanevId); }); } public AdatszotarCO GetAdatszotarElem(int ID) { return Dal.CustomConnection.Run(ConnectionType, h => { var adatszotarDs = h.AdatszotarDAL(GridParameters).GetAdatszotarById(ID, IntezmenyId, TanevId); var co = Convert_DS_to_Co(adatszotarDs); if (co.AdatszotarTipusId == (int)GeneratedAdatszotarTipusEnum.SorolasOkaTipus) { var dictionaryItemBaseNyelvDs = h.DictionaryItemBaseNyelvDal(GridParameters).GetDictionaryItemBaseNyelvByDictionaryItemId(ID, IntezmenyId, TanevId); co.ZaradekSzovegCoList = Convert_NyelvDS_to_ZaradekSzovegCoList(dictionaryItemBaseNyelvDs); } return co; }); } public int GetAdatszotarMaxSorszam(GeneratedAdatszotarTipusEnum type) { return Dal.CustomConnection.Run(ConnectionType, h => { IAdatszotarDAL dal = h.AdatszotarDAL(GridParameters); return dal.GetAdatszotarMaxSorszam(type, TanevId, IntezmenyId); }); } public void Insert(AdatszotarCO co) { if (IsValid(co)) { Dal.CustomConnection.Run(ConnectionType, h => { var oDictionaryItemBase = Convert_CO_to_Entity(h, co); var adatszotarDal = h.AdatszotarDAL(GridParameters); adatszotarDal.Insert(oDictionaryItemBase); if (co.AdatszotarTipusId == (int)GeneratedAdatszotarTipusEnum.SorolasOkaTipus) { adatszotarDal.UpdateSorolasOkaTipus(oDictionaryItemBase.ID, co.IsBizonyitvanybanMegjelenik, co.IsNaplobanMegjelenik, co.IsTorzslaponMegjelenik, IntezmenyId, TanevId, FelhasznaloId); var dictionaryNyelvDal = h.DictionaryItemBaseNyelvDal(GridParameters); foreach (var item in co.ZaradekSzovegCoList) { if (!string.IsNullOrWhiteSpace(item.Name.ReplaceMultipleSpacesAndTrim())) { var dictionaryNyelvEntity = dictionaryNyelvDal.Get(); dictionaryNyelvEntity.TanevId = TanevId; dictionaryNyelvEntity.Name = item.Name.ReplaceMultipleSpacesAndTrim(); dictionaryNyelvEntity.NyelvId = item.NyelvId; dictionaryNyelvEntity.DictionaryItemBaseId = oDictionaryItemBase.ID; dictionaryNyelvDal.Insert(dictionaryNyelvEntity); } } } if (co.AdatszotarTipusId == (int)GeneratedAdatszotarTipusEnum.NapTipus) { adatszotarDal.UpdateNapTipus(oDictionaryItemBase.ID, co.IsSorszamozando, co.IsTanorai, co.IsTanorankivuli, co.IsLeNemKotottMunkaido, IntezmenyId, TanevId, FelhasznaloId); } if (co.AdatszotarTipusId == (int)GeneratedAdatszotarTipusEnum.ErtekelesMod) { // TODO ERTEKELES REFAKT2 ERTEKELESMOD: Ha töröljük a T_TANARIATLAGSULY táblát, akkor törölni kell a SaveTanariAtlagSuly függvényt és minden referenciáját! // https://jira.ekreta.hu/browse/KRETA2-12367 var ertekelesModSulyCo = new ErtekelesModSulyCo { ErtekelesModId = oDictionaryItemBase.ID, Suly = ErtekelesModCo.DefaultSuly }; SaveTanariAtlagSuly(ertekelesModSulyCo, h); adatszotarDal.UpdateErtekelesModTipus(IntezmenyId, TanevId, FelhasznaloId, oDictionaryItemBase.ID, co.IsBold, co.Suly); } UpdateRendszerbeallitasok(adatszotarDal, co.AdatszotarTipusId, TanevId); co.AdatszotarTipusId.RemoveFromCache(TanevId); }); } } public void Update(AdatszotarCO co, int? kovTanevId) { if (IsValid(co)) { Dal.CustomConnection.Run(ConnectionType, h => { var adatszotarDal = h.AdatszotarDAL(GridParameters); adatszotarDal.Update(co.ID.Value, co.Megnevezes, co.Megnevezes1, co.Megnevezes2, co.Megnevezes3, co.Megnevezes4, co.Lathato, co.Protected, co.Color, FelhasznaloId, IntezmenyId, TanevId); if (co.AdatszotarTipusId == (int)GeneratedAdatszotarTipusEnum.SorolasOkaTipus) { adatszotarDal.UpdateSorolasOkaTipus(co.ID.Value, co.IsBizonyitvanybanMegjelenik, co.IsNaplobanMegjelenik, co.IsTorzslaponMegjelenik, IntezmenyId, TanevId, FelhasznaloId); var dictionaryNyelvDal = h.DictionaryItemBaseNyelvDal(GridParameters); co.OldZaradekSzovegCoList = Convert_NyelvDS_to_ZaradekSzovegCoList(dictionaryNyelvDal.GetDictionaryItemBaseNyelvByDictionaryItemId(co.ID.Value, IntezmenyId, TanevId)); foreach (var item in co.ZaradekSzovegCoList) { if (!string.IsNullOrWhiteSpace(item.Name.ReplaceMultipleSpacesAndTrim())) { if (co.OldZaradekSzovegCoList.Any(x => x.NyelvId == item.NyelvId)) { var nyelvCo = co.OldZaradekSzovegCoList.First(x => x.NyelvId == item.NyelvId); var dictionaryNyelvEntity = dictionaryNyelvDal.Get(nyelvCo.Id); dictionaryNyelvEntity.TanevId = TanevId; dictionaryNyelvEntity.Name = item.Name.ReplaceMultipleSpacesAndTrim(); dictionaryNyelvDal.FullUpdate(dictionaryNyelvEntity); } else { var dictionaryNyelvEntity = dictionaryNyelvDal.Get(); dictionaryNyelvEntity.TanevId = TanevId; dictionaryNyelvEntity.Name = item.Name.ReplaceMultipleSpacesAndTrim(); dictionaryNyelvEntity.NyelvId = item.NyelvId; dictionaryNyelvEntity.DictionaryItemBaseId = co.ID.Value; dictionaryNyelvDal.Insert(dictionaryNyelvEntity); } } else { foreach (var nyelv in co.OldZaradekSzovegCoList.Where(x => x.NyelvId == item.NyelvId)) { dictionaryNyelvDal.Delete(nyelv.Id); } } } } if (co.AdatszotarTipusId == (int)GeneratedAdatszotarTipusEnum.NapTipus) { adatszotarDal.UpdateNapTipus(co.ID.Value, co.IsSorszamozando, co.IsTanorai, co.IsTanorankivuli, co.IsLeNemKotottMunkaido, IntezmenyId, TanevId, FelhasznaloId); } if (co.AdatszotarTipusId == (int)GeneratedAdatszotarTipusEnum.ErtekelesMod) { // TODO ERTEKELES REFAKT2 ERTEKELESMOD: Ha töröljük a T_TANARIATLAGSULY táblát, akkor törölni kell a SaveTanariAtlagSuly függvényt és minden referenciáját! // https://jira.ekreta.hu/browse/KRETA2-12367 var ertekelesModSulyCo = new ErtekelesModSulyCo { ErtekelesModId = co.ID.Value, Suly = co.Suly }; SaveTanariAtlagSuly(ertekelesModSulyCo, h); adatszotarDal.UpdateErtekelesModTipus(IntezmenyId, TanevId, FelhasznaloId, co.ID.Value, co.IsBold, co.Suly); } var th = new TanevHelper(new DalHandlerConnectionType(ConnectionType, h)); int currentKovTanevId = kovTanevId ?? th.GetKovetkezoTanev().Key; if (currentKovTanevId.IsEntityId() && currentKovTanevId != TanevId) { adatszotarDal.FollowUpDictionaryItemBase(IntezmenyId, TanevId, currentKovTanevId, co.ID.Value); UpdateRendszerbeallitasok(adatszotarDal, co.AdatszotarTipusId, currentKovTanevId); co.AdatszotarTipusId.RemoveFromCache(currentKovTanevId, co.ID); } UpdateRendszerbeallitasok(adatszotarDal, co.AdatszotarTipusId, TanevId); co.AdatszotarTipusId.RemoveFromCache(TanevId, co.ID); }); } } public void UpdateSorszam(int id, int sorszam, int? kovTanevId) { Dal.CustomConnection.Run(ConnectionType, h => { IAdatszotarDAL dal = h.AdatszotarDAL(GridParameters); dal.UpdateSorszam(id, sorszam, FelhasznaloId, IntezmenyId, TanevId); var th = new TanevHelper(new DalHandlerConnectionType(ConnectionType, h)); int currentKovTanevId = kovTanevId ?? th.GetKovetkezoTanev().Key; if (currentKovTanevId.IsEntityId() && currentKovTanevId != TanevId) { dal.FollowUpDictionaryItemBase(IntezmenyId, TanevId, currentKovTanevId, id); } }); var tipusId = id.GetDictionaryTypeId(TanevId); tipusId.RemoveFromCache(TanevId); } public void Delete(int id) { Dal.CustomConnection.Run(ConnectionType, h => { IAdatszotarDAL dal = h.AdatszotarDAL(GridParameters); var tipusId = id.GetDictionaryTypeId(TanevId); /*Csak ideiglenes megoldás, lesz globál vizsgálat a dictionary entitásokra*/ var connections = dal.GetEntitiesConnections(id, ((GeneratedAdatszotarTipusEnum)tipusId).ToString(), TanevId); if (tipusId == (int)GeneratedAdatszotarTipusEnum.ErtekelesMod) { if (connections.Count > 0 && connections.SelectMany(x => x.Value).ToList().Any(x => x.TargetTableName == "T_TANULOERTEKELES_OSSZES" || x.TargetTableName == "T_TANULOERTEKELES")) { // TODO ERTEKELES REFAKT2 ERTEKELESMOD: Ha töröljük a T_TANARIATLAGSULY táblát, akkor törölni kell a Where-t! // https://jira.ekreta.hu/browse/KRETA2-12367 throw new EntityDeleteFailedException(string.Empty, connections.SelectMany(x => x.Value.Where(y => y.TargetTableName != "T_TANARIATLAGSULY_OSSZES" || y.TargetTableName != "T_TANARIATLAGSULY")).ToList()); } } else { if (connections.Count > 0) { throw new EntityDeleteFailedException(string.Empty, connections.SelectMany(x => x.Value).ToList()); } } /*Csak ideiglenes megoldás, lesz globál vizsgálat a dictionary entitásokra*/ dal.Delete(FelhasznaloId, id, tipusId, IntezmenyId, TanevId); UpdateRendszerbeallitasok(dal, tipusId, TanevId); tipusId.RemoveFromCache(TanevId); }); } public bool IsProtected(int id) { return Dal.CustomConnection.Run(ConnectionType, h => { IAdatszotarDAL dal = h.AdatszotarDAL(); return dal.IsProtected(id, TanevId); }); } public bool ModifyItemActivity(List adatszotarIds, bool activ) { return Dal.CustomConnection.Run(ConnectionType, h => { IAdatszotarDAL dal = h.AdatszotarDAL(GridParameters); if (dal.ModifyItemActivity(adatszotarIds, activ, TanevId, out int szotartipusId)) { szotartipusId.RemoveFromCache(TanevId); return true; } return false; }); } public void GenerateNaptariNapok() { Dal.CustomConnection.Run(ConnectionType, h => { IAdatszotarDAL dal = h.AdatszotarDAL(); IOrarendiOraDal orarendDAL = h.OrarendiOra(); dal.GenerateNaptariNapok(IntezmenyId, TanevId); orarendDAL.UpdateOrarend(IntezmenyId, TanevId, null, null, null, null); }); } private bool IsValid(AdatszotarCO co) { bool ret = true; try { if (string.IsNullOrWhiteSpace(co.AdatszotarTipus)) ret = false; else if (string.IsNullOrWhiteSpace(co.Megnevezes)) ret = false; } catch { ret = false; } return ret; } private IDictionaryItemBase Convert_CO_to_Entity(IDalHandler h, AdatszotarCO co) { var oDictionaryItemBase = h.AdatszotarDAL().Get(co.AdatszotarTipus); if (!string.IsNullOrWhiteSpace(co.Megnevezes)) oDictionaryItemBase.Name = co.Megnevezes; if (co.Sorszam.HasValue) oDictionaryItemBase.Order = co.Sorszam.Value; if (co.Lathato.HasValue) oDictionaryItemBase.Visible = co.Lathato.Value; oDictionaryItemBase.Name_1 = co.Megnevezes1; oDictionaryItemBase.Name_2 = co.Megnevezes2; oDictionaryItemBase.Name_3 = co.Megnevezes3; oDictionaryItemBase.Name_4 = co.Megnevezes4; oDictionaryItemBase.Protected = false; // Új adatszótár elem nem lesz védett oDictionaryItemBase.Type = co.AdatszotarTipus; // Új adatszótár elemnek beállítjuk a típust is oDictionaryItemBase.DictionaryTypeId = co.AdatszotarTipusId; oDictionaryItemBase.Color = co.Color; oDictionaryItemBase.TanevId = TanevId; return oDictionaryItemBase; } private AdatszotarCO Convert_DS_to_Co(DataSet ds) { AdatszotarCO co = new AdatszotarCO(); if (ds.Tables[0].Rows.Count == 1) { DataRow row = ds.Tables[0].Rows[0]; co.AdatszotarTipus = row.Field("Type"); co.AdatszotarTipusId = row.Field("TypeId"); co.ID = row.Field("ID"); co.Lathato = row.Field("Lathato") == "T"; co.Megnevezes = row.Field("Megnevezes"); co.Sorszam = row.Field("Sorszam"); co.Megnevezes1 = row.Field("Megnevezes1"); co.Megnevezes2 = row.Field("Megnevezes2"); co.Megnevezes3 = row.Field("Megnevezes3"); co.Megnevezes4 = row.Field("Megnevezes4"); co.Color = row.Field("Color"); if (row.Field("IsBold") == "T") { co.IsBold = true; } co.Suly = row.Field("Suly"); if (row.Field("Protected") == "T") { co.Protected = true; } if (row.Field("IsSorszamozando") == "T") { co.IsSorszamozando = true; } if (row.Field("IsTanorai") == "T") { co.IsTanorai = true; } if (row.Field("IsTanorankivuli") == "T") { co.IsTanorankivuli = true; } if (row.Field("IsLeNemKotottMunkaido") == "T") { co.IsLeNemKotottMunkaido = true; } if (row.Field("IsBizonyitvanybanMegjelenik") == "T") { co.IsBizonyitvanybanMegjelenik = true; } if (row.Field("IsNaplobanMegjelenik") == "T") { co.IsNaplobanMegjelenik = true; } if (row.Field("IsTorzslaponMegjelenik") == "T") { co.IsTorzslaponMegjelenik = true; } } return co; } private List Convert_NyelvDS_to_ZaradekSzovegCoList(DataSet ds) { var coList = new List(); if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) { foreach (DataRow row in ds.Tables[0].Rows) { coList.Add(new AdatszotarZaradekNyelvCo { Id = row.Field("ID"), Name = row.Field("C_NAME"), Name1 = row.Field("C_NAME_1"), Name2 = row.Field("C_NAME_2"), Name3 = row.Field("C_NAME_3"), Name4 = row.Field("C_NAME_4"), NyelvId = row.Field("C_NYELVID"), ShortName = row.Field("C_SHORTNAME"), AdatszotarId = row.Field("C_DICTIONARYITEMBASEID") }); } } return coList; } public Dictionary GetAdatszotarLathatoElemekNyelv(GeneratedAdatszotarTipusEnum type, int nyelvId) { var result = new Dictionary(); DataSet ds = Dal.CustomConnection.Run(ConnectionType, h => { IAdatszotarDAL dal = h.AdatszotarDAL(); return dal.GetAdatszotarLathatoElemekNyelv(type, TanevId, IntezmenyId, nyelvId); }); foreach (DataRow row in ds.Tables[0].Rows) { result.Add( row.Field("ID").ToString(), row.Field("Megnevezes") ); } return result; } public List GetCsoportTipusList() { return Dal.CustomConnection.Run(ConnectionType, h => { IAdatszotarDAL dal = h.AdatszotarDAL(); return GetCsoportTipusEntityList(dal).Select(x => ConvertToCO(x)).ToList(); }); } public void SaveCsoportTipusList(List csoportTipusList, int? kovTanevId) { Dal.CustomConnection.Run(ConnectionType, h => { IAdatszotarDAL dal = h.AdatszotarDAL(); var csoportTipusEntityList = GetCsoportTipusEntityList(dal); foreach (CsoportTipusCO csoportTipus in csoportTipusList) { dal.UpdateCsoportTipus(csoportTipus.Id, csoportTipus.IsTanoraiCelu, csoportTipus.OraPerc.HasValue ? csoportTipus.OraPerc.Value : defaultOraPerc, IntezmenyId, TanevId, FelhasznaloId); var th = new TanevHelper(new DalHandlerConnectionType(ConnectionType, h)); int currentKovTanevId = kovTanevId ?? th.GetKovetkezoTanev().Key; if (currentKovTanevId.IsEntityId() && currentKovTanevId != TanevId) { dal.FollowUpDictionaryItemBase(IntezmenyId, TanevId, currentKovTanevId, csoportTipus.Id); } } }); } private List GetCsoportTipusEntityList(IAdatszotarDAL dal) { return dal.GetCsoportTipusEntityList(IntezmenyId, TanevId); } private CsoportTipusCO ConvertToCO(ICsoportTipus csoportTipus) { return new CsoportTipusCO { Id = csoportTipus.ID, Nev = csoportTipus.Name, IsTanoraiCelu = csoportTipus.IsTanoraiCelu, IsProtected = (csoportTipus.ID == (int)CsoportTipusEnum.iskolai_csoport_tanorai_celu_) || (csoportTipus.ID == (int)CsoportTipusEnum.apaczai_mentorcsoport), OraPerc = csoportTipus.OraPerc }; } private void UpdateRendszerbeallitasok(IAdatszotarDAL dal, int adatszotarTipusId, int tanevId) { if (adatszotarTipusId == (int)GeneratedAdatszotarTipusEnum.ErtekelesMod) { dal.UpdateRendszerbeallitasok(IntezmenyId, tanevId, RendszerBeallitasTipusEnum.Ertekeles_Modok_Beallitasa_Napi_Limithez, GeneratedAdatszotarTipusEnum.ErtekelesMod); SDAServer.Instance.CacheManager.AquireCache().RemoveSystemSetting(RendszerBeallitasTipusEnum.Ertekeles_Modok_Beallitasa_Napi_Limithez, IntezmenyAzonosito, tanevId); } if (adatszotarTipusId == (int)GeneratedAdatszotarTipusEnum.CsoportTipus) { dal.UpdateRendszerbeallitasok(IntezmenyId, tanevId, RendszerBeallitasTipusEnum.Tanorahoz_tartozo_csoportok, GeneratedAdatszotarTipusEnum.CsoportTipus); SDAServer.Instance.CacheManager.AquireCache().RemoveSystemSetting(RendszerBeallitasTipusEnum.Tanorahoz_tartozo_csoportok, IntezmenyAzonosito, tanevId); } if (adatszotarTipusId == (int)GeneratedAdatszotarTipusEnum.MunkakorTipus) { dal.UpdateRendszerbeallitasok(IntezmenyId, tanevId, RendszerBeallitasTipusEnum.Alkalmazottak_lathatjak_a_diakok_adatait, GeneratedAdatszotarTipusEnum.MunkakorTipus); SDAServer.Instance.CacheManager.AquireCache().RemoveSystemSetting(RendszerBeallitasTipusEnum.Alkalmazottak_lathatjak_a_diakok_adatait, IntezmenyAzonosito, tanevId); } } public List GetAdatszotarCoList(GeneratedAdatszotarTipusEnum type) { DataSet dataSet = GetAdatszotar(type); var result = new List(); foreach (DataRow dataRow in dataSet.Tables[0].Rows) { var item = new AdatszotarItemCo(dataRow); result.Add(item); } return result; } public List<(int id, string megnevezes)> GetEditableAdatszotarTipusok() { return Dal.CustomConnection.Run(ConnectionType, (h) => { var dal = h.AdatszotarDAL(); return dal.GetEditableAdatszotarTipusok(TanevId); }); } private void SaveTanariAtlagSuly(ErtekelesModSulyCo ertekelesModSulyCo, IDalHandler dalHandler) { ITanariAtlagSulyDal dal = dalHandler.TanariAtlagSulyDal(); int? id = dal.GetIdByErtekelesModId(TanevId, ertekelesModSulyCo.ErtekelesModId); bool isNew = !id.IsEntityId(); ITanariAtlagSuly entity = isNew ? dal.Get() : dal.Get(id.Value); entity.ErtekelesModId = ertekelesModSulyCo.ErtekelesModId; entity.Suly = ertekelesModSulyCo.Suly; if (isNew) { entity.TanevId = TanevId; dal.Insert(entity); } else { dal.Update(entity); } } } }