using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using Kreta.BusinessLogic.Classes; using Kreta.BusinessLogic.HelperClasses; using Kreta.BusinessLogic.Helpers.SystemSettings; using Kreta.Core.ConnectionType; using Kreta.Core.Exceptions; using Kreta.DataAccess.Interfaces; using Kreta.DataAccessManual; using Kreta.DataAccessManual.Interfaces; using Kreta.DataAccessManual.Util; using Kreta.Enums; using Kreta.Resources; namespace Kreta.BusinessLogic.Helpers { public class ZaradekHelper : LogicBase { public ZaradekHelper(IConnectionType connectionType) : base(connectionType) { } public ZaradekCo GetZaradekById(int Id) { return Dal.CustomConnection.Run(ConnectionType, (h) => { var dal = h.ZaradekDal(); var entity = dal.Get(Id); var result = new ZaradekCo(entity); return result; }); } public void DeleteZaradek(int Id, bool isOfo) { Dal.CustomConnection.Run(ConnectionType, (h) => { var dal = h.ZaradekDal(); var entity = dal.Get(Id); var hasError = false; var errorMessage = new StringBuilder(); if (h.OsztalyCsoport().GetIsOsztaly(entity.TanuloCsoport.OsztalyCsoportId)) { hasError = ValidateUtolsoKiVagyAtsorolasiZaradek(errorMessage, entity, dal); } if (isOfo || hasError) { ValidateOfo(h, errorMessage, entity.IsKiVagyAtsorolasiZaradek); if (errorMessage.Length > 0) { throw new BlException(errorMessage.ToString()); } } dal.Delete(entity); }); } public void SaveZaradek(ZaradekCo co, bool isOfo, bool isAdmin, int? tanevId = null) { Dal.CustomConnection.Run(ConnectionType, (h) => { Validate(h, co, isOfo, isAdmin); SaveZaradek(h, co, tanevId); }); } public List GetZaradekok(List nemzetiDokumentumNyelvek, int tanuloCsoportId, int? tanuloId = null) { DataSet ds = Dal.CustomConnection.Run(ConnectionType, (h) => h.ZaradekDal().GetZaradekok(TanevId, IntezmenyId, nemzetiDokumentumNyelvek, tanuloCsoportId, tanuloId)); 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 ZaradekCo { Id = row.Field("Id"), KeltezesDatuma = row.Field("KeltezesDatuma"), KeltezesHelye = row.Field("KeltezesHelye"), TanuloCsoportId = row.Field("TanuloCsoportId"), TanuloId = row.Field("TanuloId"), RogzitoId = row.Field("RogzitoId"), RogzitesDatuma = row.Field("RogzitesDatuma"), ZaradekSzovegek = row.Field("IdegenNyelvSzovegek"), ZaradekSzovegList = new List { new ZaradekNyelvCo() { NyelvId = (int)AnyanyelvEnum.magyar, Szoveg = row.Field("Szoveg") } }, IsKiVagyAtsorolasiZaradek = SDAConvert.ToBooleanFromTF(row["IsKiVagyAtsorolasiZaradek"]), OsztalyNev = row.Field("OsztalyNev"), IsKapcsolodo = SDAConvert.ToBooleanFromTF(row["IsKapcsolodo"]), IsTorolheto = SDAConvert.ToBooleanFromTF(row["IsTorolheto"]), IsOsztaly = SDAConvert.ToBooleanFromTF(row["IsOsztaly"]) }); } } return coList; } public void SaveZaradekTobbesModositas(ZaradekCo co, bool isOfo, bool isAdmin, List tanuloCsoportIdList) { if (tanuloCsoportIdList.Any()) { Dal.CustomConnection.Run(ConnectionType, (h) => { Validate(h, co, isOfo, isAdmin); foreach (var tanuloCsoportId in tanuloCsoportIdList) { co.TanuloCsoportId = tanuloCsoportId; co.Id = null; SaveZaradek(h, co); } }); } } public void OsszesZaradekTorlese(List tanuloCsoportIdList, bool isOsztalyList) { Dal.CustomConnection.Run(ConnectionType, (h) => { var dal = h.ZaradekDal(); dal.DeleteAll(tanuloCsoportIdList, FelhasznaloId, isOsztalyList); }); } public void LegutobbRogzitettZaradekokTorlese(List tanuloCsoportIdList, bool isOsztalyList) { Dal.CustomConnection.Run(ConnectionType, (h) => { var dal = h.ZaradekDal(); dal.DeleteLasts(tanuloCsoportIdList, FelhasznaloId, isOsztalyList); }); } private void SaveZaradek(IDalHandler h, ZaradekCo co, int? tanevId = null) { var dal = h.ZaradekDal(); IZaradek entity; if (co.Id.HasValue) { entity = dal.Get(co.Id.Value); } else { entity = dal.Get(); entity.TanevId = tanevId ?? TanevId; entity.RogzitesDatuma = DateTime.Now; entity.RogzitoId = co.RogzitoId; entity.TanuloCsoportId = co.TanuloCsoportId.Value; } entity.IsBizonyitvanybanMegjelenik = co.IsBizonyitvanybanMegjelenik; entity.IsKiVagyAtsorolasiZaradek = co.IsKiVagyAtsorolasiZaradek; entity.IsOsztalynaplobanMegjelenik = co.IsOsztalynaplobanMegjelenik; entity.IsTorzslaponMegjelenik = co.IsTorzslaponMegjelenik; entity.KeltezesDatuma = co.KeltezesDatuma.Value; entity.KeltezesHelye = co.KeltezesHelye; entity.Szoveg = co.ZaradekSzovegList.Single(x => x.NyelvId == (int)AnyanyelvEnum.magyar).Szoveg; entity.UtolsoModositasDatuma = DateTime.Now; entity.UtolsoModositoId = FelhasznaloId; if (co.Id.HasValue) { dal.FullUpdate(entity); } else { co.Id = dal.Insert(entity); } foreach (var zaradekNyelv in co.ZaradekSzovegList.Where(x => x.NyelvId != (int)AnyanyelvEnum.magyar)) { var zaradekNyelvEntity = entity.ZaradekNyelv.SingleOrDefault(x => x.NyelvId == zaradekNyelv.NyelvId && !x.Torolt); if (zaradekNyelvEntity != null) { if (!string.IsNullOrWhiteSpace(zaradekNyelv.Szoveg)) { zaradekNyelvEntity.Szoveg = zaradekNyelv.Szoveg; dal.UpdateIdegenNyelv(zaradekNyelvEntity); } else { dal.DeleteIdegenNyelv(zaradekNyelvEntity); } } else { var idegenNyelvEntity = dal.GetIdegenNyelv(); idegenNyelvEntity.NyelvId = zaradekNyelv.NyelvId; idegenNyelvEntity.Szoveg = zaradekNyelv.Szoveg; idegenNyelvEntity.ZaradekId = co.Id.Value; dal.InsertIdegenNyelv(idegenNyelvEntity); } } foreach (var entityZaradekNyelv in entity.ZaradekNyelv.Where(e => !co.ZaradekSzovegList.Any(c => c.NyelvId == e.NyelvId) && !e.Torolt)) { dal.DeleteIdegenNyelv(entityZaradekNyelv); } } private void Validate(IDalHandler h, ZaradekCo co, bool isOfo, bool isAdmin) { if (!isOfo && !isAdmin) { throw new BlException(OsztalyCsoportResource.NincsJogosultsagaZaradekFelvetelere); } var errorMessage = new StringBuilder(); if (isOfo) { ValidateOfo(h, errorMessage, co.IsKiVagyAtsorolasiZaradek); } if (string.IsNullOrWhiteSpace(co.KeltezesHelye)) { errorMessage.Append(OsztalyCsoportResource.KeltezesHelyeKotelezo).Append(Environment.NewLine); } if (string.IsNullOrWhiteSpace(co.ZaradekSzovegList.Single(x => x.NyelvId == (int)AnyanyelvEnum.magyar).Szoveg)) { errorMessage.Append(OsztalyCsoportResource.ZaradekSzovegeKotelezo).Append(Environment.NewLine); } if (!co.KeltezesDatuma.HasValue) { errorMessage.Append(OsztalyCsoportResource.KeltezesDatumaKotelezo); } if (!string.IsNullOrWhiteSpace(errorMessage.ToString())) { throw new BlException(errorMessage.ToString()); } } private void ValidateOfo(IDalHandler h, StringBuilder errorMessage, bool isKiVagyAtsorolasiZaradek) { var systemSettingsHelper = new SystemSettingsHelper(new DalHandlerConnectionType(ConnectionType, h)); var isOfoRogzithetEvkoziZaradekot = systemSettingsHelper.GetSystemSettingValue(RendszerBeallitasTipusEnum.Osztalyfonok_megtekintheti_modosithatja_osztalyaba_jaro_tanulok_zaradekat); var isOfoRogzithetKiVagyAtsorolasiZaradekot = systemSettingsHelper.GetSystemSettingValue(RendszerBeallitasTipusEnum.Osztalyfonok_kiegeszitheti_osztalyaba_jaro_tanulok_ki_vagy_atsorolsasi_zaradekat); if (!isOfoRogzithetEvkoziZaradekot) { errorMessage.Append(OsztalyCsoportResource.OfoNemRogzithetZaradekot).Append(Environment.NewLine); } else if (isKiVagyAtsorolasiZaradek && !isOfoRogzithetKiVagyAtsorolasiZaradekot) { errorMessage.Append(OsztalyCsoportResource.OfoNemRogzithetKiVagyAtsorolasiZaradekot).Append(Environment.NewLine); } } private bool ValidateUtolsoKiVagyAtsorolasiZaradek(StringBuilder errorMessage, IZaradek entity, IZaradekDal dal) { if (entity.IsKiVagyAtsorolasiZaradek && entity.TanuloCsoport.KilepesDatum.HasValue) { if (!IsKiVagyAtsorolasiZaradekTorolheto(entity.TanuloCsoport.ID, entity.ID)) { errorMessage.Append(OsztalyCsoportResource.OsztalybolKiirtTanuloknakRendelkezniukKellKiAtsorolasiZaradekkal); return true; } } return false; } public bool IsKiVagyAtsorolasiZaradekTorolheto(int tanuloCsoportId, int zaradekId) { return Dal.CustomConnection.Run(ConnectionType, (h) => { var tanuloCsoportDal = h.TanuloCsoport(); var tanuloCsoport = tanuloCsoportDal.Get(tanuloCsoportId); if (!tanuloCsoport.KilepesDatum.HasValue) { return true; } var zaradekDal = h.ZaradekDal(); return zaradekDal.GetTanuloKiVagyAtsorolasiZaradekai(tanuloCsoportId, zaradekId).Tables[0].AsEnumerable().Any(); }); } } }