using System; using System.Collections.Generic; using System.Data; using System.Linq; using Kreta.BusinessLogic.Classes; using Kreta.BusinessLogic.Exceptions; using Kreta.BusinessLogic.HelperClasses; using Kreta.BusinessLogic.Helpers.SystemSettings; using Kreta.BusinessLogic.Utils; using Kreta.Core; using Kreta.Core.ConnectionType; using Kreta.Core.Exceptions; using Kreta.DataAccess.Interfaces; using Kreta.DataAccessManual; using Kreta.DataAccessManual.DataAccessObjects.Csoport; using Kreta.DataAccessManual.Interfaces; using Kreta.DataAccessManual.Util; using Kreta.Enums; using Kreta.Enums.ManualEnums; using Kreta.Framework.Util; using Kreta.Resources; namespace Kreta.BusinessLogic.Helpers { public class CsoportHelper : LogicBase { public CsoportHelper(IConnectionType connectionType) : base(connectionType) { } public IDictionary GetCsoportok(string baseText = null, int? tanarId = null) { if (GridParameters == null) { GridParameters = new GridParameters() { OrderBy = "Evfolyam ASC" }; } var ds = Dal.CustomConnection.Run(ConnectionType, (h) => { var dal = h.Csoport(GridParameters); return dal.GetCsoportokForDDL(tanarId: tanarId); }); return LogicUtil.CreateDropdownContent(ds, "ID", "Nev", baseText, sort: false); } public IDictionary GetNapkozisCsoportok(string baseText = null, int? tanarId = null) { if (GridParameters == null) { GridParameters = new GridParameters() { OrderBy = "Evfolyam ASC" }; } var ds = Dal.CustomConnection.Run(ConnectionType, (h) => { var dal = h.Csoport(GridParameters); return dal.GetNapkozisCsoportokForDDL(tanarId: tanarId); }); return LogicUtil.CreateDropdownContent(ds, "ID", "Nev", baseText, sort: false); } public IDictionary GetSzakmaiGyCsoportok(string baseText = null, int? tanarId = null) { if (GridParameters == null) { GridParameters = new GridParameters() { OrderBy = "Evfolyam ASC" }; } var ds = Dal.CustomConnection.Run(ConnectionType, (h) => { var dal = h.Csoport(GridParameters); return dal.GetSzakmaiGyCsoportokForDDL(tanarId: tanarId); }); return LogicUtil.CreateDropdownContent(ds, "ID", "Nev", baseText, sort: false); } public IDictionary GetTanoranKivuliCsoportok() { if (GridParameters == null) { GridParameters = new GridParameters() { OrderBy = "Evfolyam ASC" }; } var ds = Dal.CustomConnection.Run(ConnectionType, (h) => { var dal = h.Csoport(GridParameters); return dal.GetTanoranKivuliCsoportokForDDL(TanevId, IntezmenyId); }); return LogicUtil.CreateDropdownContent(ds, "Id", "Nev", null); } public CsoportCO GetGroupByID(int csoportId) { return Dal.CustomConnection.Run(ConnectionType, (h) => { var dal = h.Csoport(); var entity = dal.Get(csoportId); var co = ConvertEntityToCo(entity); co.HasTanuloBesorolas = h.OsztalyCsoport().HasTanuloBesorolas(csoportId); if (entity.FeladatEllatasiHelyId.IsEntityId()) { var oktNevFeladatNev = entity.FeladatEllatasiHely.OktatasiNevelesiFeladatTipus.GetDisplayName(TanevId); co.FeladatEllatasiHelyName = $"{entity.FeladatEllatasiHely.MukodesiHely.Nev ?? string.Empty} - {oktNevFeladatNev}"; } return co; }); } public IEnumerable GetNemTanoraiCeluCsoportTipusokForErtekeles() { return Dal.CustomConnection.Run(ConnectionType, (h) => { var nemTanoraiCeluCsoportTipusok = new List(); var isNemTanoraiCeluCsoportokErtekelesEnabled = new SystemSettingsHelper(new DalHandlerConnectionType(ConnectionType, h)).GetSystemSettingValue(RendszerBeallitasTipusEnum.nem_tanorai_celu_csoportok_ertekelesi_lehetosege); if (!isNemTanoraiCeluCsoportokErtekelesEnabled) { nemTanoraiCeluCsoportTipusok = h.Csoport().GetNemTanoraiCeluCsoportTipusList(); } var response = new List(); foreach (var item in nemTanoraiCeluCsoportTipusok) { response.Add(new NemTanoraiCeluCsoportTipusCO { CsoportTipusId = item.CsoportTipusId }); } return response; }); } public void DeleteGroupById(int classId, bool updateTanoraEvesSorszam = true) { Dal.CustomConnection.Run(ConnectionType, (h) => { var dal = h.Csoport(); var entity = dal.Get(classId); var osztalyCsoport = new OsztalyCsoportHelper(new DalHandlerConnectionType(ConnectionType, h)); if (h.OsztalyCsoport().HasTanuloBesorolas(classId)) { throw new CannotBeDeletedException(string.Format(ErrorResource.Az0OsztalyCsoportNemTorolthetoMertKapcsolodikVagyKapcsolodottHozzaTanulo, entity.Nev)); } if (!osztalyCsoport.HasTanitasiOra(classId)) { var orarendiOraDal = h.OrarendiOra(); var orarendiOraList = entity.OrarendiOra.Where(x => !x.Torolt).ToList(); orarendiOraList.ForEach(x => orarendiOraDal.Delete(x.ID)); } if (entity.Foglalkozasok.Any(x => !x.Torolt)) { throw new CannotBeDeletedException(string.Format(ErrorResource.A0CsoporthozTantargyfelosztasElemVanRogzitveKerjukToroljeATTFetEztKovetoenMarTorolhetoACsoportIs, entity.Nev)); } var fogadooraList = entity.Fogadoora_OsztalyCsoport.Where(x => !x.Torolt).ToList(); if (fogadooraList.Any()) { if (fogadooraList.All(x => x.Fogadoora.FogadooraKezdete < DateTime.Today)) { var fogadooraDal = h.Fogadoora(); fogadooraList.ForEach(x => fogadooraDal.DeleteFogadooraOsztalyCsoportByFogadooraIdOsztalyCsoportId(x.FogadooraId, classId)); } } dal.Delete(classId, IntezmenyId, TanevId, updateTanoraEvesSorszam); }); } public void UpdateCo(CsoportCO co, int modifierId) { Dal.CustomConnection.Run(ConnectionType, (h) => { var dal = h.Csoport(GridParameters); var entity = dal.Get(co.Id); if (entity.FeladatEllatasiHelyId != co.FeladatEllatasiHelyId && !new FeladatEllatasiHelyHelper(new DalHandlerConnectionType(ConnectionType, h)).IsAzonosKategoria(entity.FeladatEllatasiHelyId, co.FeladatEllatasiHelyId) && h.OsztalyCsoport().HasTanuloBesorolas(co.Id) && co.FeladatEllatasiHelyId.IsEntityId() && !co.IsFromSzervezet) { throw new BlException(OsztalyCsoportResource.FeladatellatasiHelyNemModosithatoMertVanTanuloBesorolva); } var utkozoTanevrendDatumok = new List(); var tanevrendHelper = new TanevrendHelper(new DalHandlerConnectionType(ConnectionType, h)); int? ocsEvfolyamTipusa = null; if (co.OsztalyBontasId.HasValue) { var ocsDal = h.OsztalyCsoport(GridParameters); var osztaly = ocsDal.Get(co.OsztalyBontasId.Value); ocsEvfolyamTipusa = osztaly.EvfolyamTipusa; entity.KepzesiForma = osztaly.KepzesiForma; var osztalyTanevrendjei = tanevrendHelper.GetOsztalycsoportTanevrendje(null, osztaly.ID, false); var csoportTanevrendjei = tanevrendHelper.GetOsztalycsoportTanevrendje(null, co.Id, false); utkozoTanevrendDatumok = osztalyTanevrendjei.Where(x => csoportTanevrendjei.Exists(y => y.TanevrendId == x.TanevrendId)).Select(x => x.Datum.ToString(Constants.ToStringPattern.HungarianDateWithSuffix)).ToList(); } var mustInsertOrUpdateTanevrendje = false; var oldOsztalyId = -1; if (co.OsztalyBontasId != entity.OsztalyBontasId) { mustInsertOrUpdateTanevrendje = true; oldOsztalyId = entity.OsztalyBontasId; } var needTTFFoglalkozasTipusUpdate = entity.Tipusa != co.CsoportTipus; ConvertToEntity(h, entity, co, true, ocsEvfolyamTipusa); dal.Update(entity); if (mustInsertOrUpdateTanevrendje) { if (co.OsztalyBontasId.IsEntityId()) { if (utkozoTanevrendDatumok.Count > 0) { throw new BlException(string.Format(OsztalyCsoportResource.OsztalybontasEsetenLeteznekMegegyezoTanevrendek, string.Join(",", utkozoTanevrendDatumok))); } tanevrendHelper.InsertTanevRendjeNewBontottCsoport(co.OsztalyBontasId.Value, co.Id); } else { tanevrendHelper.DeleteTanevRendjeNewBontottCsoport(oldOsztalyId, co.Id, modifierId); } } if (needTTFFoglalkozasTipusUpdate && co.CsoportTipus.HasValue) { h.Csoport().UpdateTTFFoglalkozasTipusByCsoportTipus(TanevId, co.Id, co.CsoportTipus.Value, co.OsztalyBontasId.HasValue, modifierId); } }); } public int InsertCo(CsoportCO co) { return Dal.CustomConnection.Run(ConnectionType, (h) => { var dal = h.Csoport(GridParameters); var entity = dal.Get(); ConvertToEntity(h, entity, co, false, null); return dal.Insert(entity); }); } public List GetCsoportKeresesCoList(CsoportSearchCo co, int? felhasznaloSzervezetId = null) { var isFromSzervezet = co?.IsFromSzervezet ?? false; var result = Dal.CustomConnection.Run(ConnectionType, h => { var dataSet = h.Csoport(GridParameters).CsoportKereses(TanevId, IntezmenyId, co.ConvertToPco()); List coList; if (isFromSzervezet) { var szervezetIds = !felhasznaloSzervezetId.IsEntityId() ? new List() : h.SzervezetDal().GetLathatoSzervezetek(IntezmenyId, TanevId, felhasznaloSzervezetId, (int)SzervezetAdatokHalmazaEnum.SzervezetEsAlSzervezetek); var intezmenyiAdminIds = felhasznaloSzervezetId.IsEntityId() ? new List() : h.Felhasznalo().GetAllIntezmenyiAdmin(TanevId); coList = dataSet.Tables[0].AsEnumerable().Select(dataRow => { var szervezetId = dataRow.Field("SzervezetId"); var isSzerkesztheto = (felhasznaloSzervezetId.IsEntityId() && szervezetId.IsEntityId() && szervezetIds.Contains(szervezetId.Value)) || (!felhasznaloSzervezetId.IsEntityId() && intezmenyiAdminIds.Contains(FelhasznaloId) && intezmenyiAdminIds.Contains(dataRow.Field("RogzitoId") ?? FelhasznaloId)); return new CsoportGridItemCo(dataRow, isSzerkesztheto, true); }).ToList(); } else { coList = dataSet.Tables[0].AsEnumerable().Select(x => new CsoportGridItemCo(x, true, false)).ToList(); } return coList; }); return result; } public string CsoportTobbesModify(CsoportTobbesModCO csoportTobbesModCO, bool updateTanoraEvesSorszam = true) { if (!csoportTobbesModCO.CsoportId.HasValue) { throw new BlException(OsztalyCsoportResource.NemLetezoCsoport); } return Dal.CustomConnection.Run(ConnectionType, (h) => { var dal = h.Csoport(GridParameters); var entity = dal.Get(csoportTobbesModCO.CsoportId.Value); if (csoportTobbesModCO.Tipusa.HasValue) { entity.Tipusa = csoportTobbesModCO.Tipusa.Value; } if (csoportTobbesModCO.EvfolyamTipusa.HasValue) { entity.EvfolyamTipusa = csoportTobbesModCO.EvfolyamTipusa.Value; } if (csoportTobbesModCO.FeladatEllatasiHelyId.HasValue) { if (entity.FeladatEllatasiHelyId != csoportTobbesModCO.FeladatEllatasiHelyId.Value && !new FeladatEllatasiHelyHelper(new DalHandlerConnectionType(ConnectionType, h)).IsAzonosKategoria(entity.FeladatEllatasiHelyId, csoportTobbesModCO.FeladatEllatasiHelyId.Value) && h.OsztalyCsoport().HasTanuloBesorolas(csoportTobbesModCO.CsoportId.Value)) { return entity.Nev; } entity.FeladatEllatasiHelyId = csoportTobbesModCO.FeladatEllatasiHelyId.Value; entity.FeladatKategoriaId = new FeladatEllatasiHelyHelper(new DalHandlerConnectionType(ConnectionType, h)).GetFeladatKategoriaId(csoportTobbesModCO.FeladatEllatasiHelyId.Value); } if (csoportTobbesModCO.OsztalyBontas.HasValue) { if (csoportTobbesModCO.OsztalyBontas > 0) { if (csoportTobbesModCO.OsztalyBontasId.HasValue) { var osztaly = h.Osztaly().Get(csoportTobbesModCO.OsztalyBontasId.Value); entity.OsztalyBontas = osztaly; } } else { entity.OsztalyBontasId = -1; if (!csoportTobbesModCO.EvfolyamTipusa.HasValue) { entity.EvfolyamTipusa = (int)EvfolyamTipusEnum.na; } } } if (csoportTobbesModCO.Vegzos.HasValue) { entity.VegzosEvfolyam = csoportTobbesModCO.Vegzos.ToBool(); } if (csoportTobbesModCO.TervezettLetszam.HasValue) { entity.TervezettLetszam = csoportTobbesModCO.TervezettLetszam; } if (csoportTobbesModCO.Keresztfeleves.HasValue) { entity.Keresztfeleves = csoportTobbesModCO.Keresztfeleves.ToBool(); } if (csoportTobbesModCO.IsGyogypedagogiaiLogopediai.HasValue) { entity.IsGyogypedagogiaiLogopediai = csoportTobbesModCO.IsGyogypedagogiaiLogopediai.ToBool(); } if (csoportTobbesModCO.TechnikaiCsoport.HasValue) { entity.IsTechnikai = csoportTobbesModCO.TechnikaiCsoport.ToBool(); } if (csoportTobbesModCO.CsoportNaploMegnyitasa.HasValue) { entity.CsoportnaploMegnyitasa = csoportTobbesModCO.CsoportNaploMegnyitasa.Value; } if (csoportTobbesModCO.CsoportNaploLezarasa.HasValue) { entity.CsoportnaploZarasa = csoportTobbesModCO.CsoportNaploLezarasa.Value; } if (csoportTobbesModCO.MuveszetiAgId.HasValue) { entity.MuveszetiAgId = csoportTobbesModCO.MuveszetiAgId.Value; } if (csoportTobbesModCO.ZenemuveszetiAgTipusId.HasValue) { entity.ZenemuveszetiAgTipusId = csoportTobbesModCO.ZenemuveszetiAgTipusId.Value; } if (csoportTobbesModCO.CsoportVezeto.HasValue) { entity.CsoportVezetoId = csoportTobbesModCO.CsoportVezeto.Value; } if (csoportTobbesModCO.Terem.HasValue) { entity.TeremId = csoportTobbesModCO.Terem.Value; } if (csoportTobbesModCO.SzervezetId.HasValue) { entity.SzervezetId = csoportTobbesModCO.SzervezetId.Value; } dal.Update(entity, updateTanoraEvesSorszam); return null; }); } public bool IsNyariSzakmaiGyakorlatos(int csoportId) { return Dal.CustomConnection.Run(ConnectionType, (h) => { var dal = h.Csoport(); return dal.IsNyariSzakmaiGyakorlatos(TanevId, csoportId); }); } private CsoportCO ConvertEntityToCo(ICsoport entity) { var co = new CsoportCO { Id = entity.ID, CsoportNeve = entity.Nev, CsoportTipus = entity.Tipusa, Megjegyzes = entity.Megjegyzes, VegzosEvfolyamCsoport = entity.VegzosEvfolyam, KeresztfelevesCsoport = entity.Keresztfeleves, IsGyogypedagogiaiLogopediai = entity.IsGyogypedagogiaiLogopediai, TechnikaiCsoport = entity.IsTechnikai, CsoportvezetoId = entity.CsoportVezetoId > 0 ? entity.CsoportVezetoId : (int?)null, EvfolyamTipusa = entity.EvfolyamTipusa > 0 ? entity.EvfolyamTipusa : (int?)null, TeremID = entity.TeremId > 0 ? entity.TeremId : (int?)null, FeladatEllatasiHelyId = entity.FeladatEllatasiHelyId > 0 ? entity.FeladatEllatasiHelyId : 0, TanevNeve = entity.Tanev.Nev, TanulokSzama = entity.Tanulo.Count(x => (!x.Torolt && (x.KilepesDatum == null || x.KilepesDatum > DateTime.Now))), CsoportvezetoNeve = entity.CsoportVezeto == null ? string.Empty : entity.CsoportVezeto.NyomtatasiNev, TeremNev = entity.Terem != null ? entity.Terem.Nev : string.Empty, CsoportNaploLeirasa = entity.CsoportnaploLeiras, Naploszam = entity.Naploszam, CsoportNaploMegnyitasa = entity.CsoportnaploMegnyitasa, CsoportNaploLezarasa = entity.CsoportnaploZarasa, TervezettLetszam = entity.TervezettLetszam, OsztalyBontasId = entity.OsztalyBontasId > 0 ? (int?)entity.OsztalyBontasId : null, OsztalyBontas = entity.OsztalyBontasId > 0, OsztalyBontasNev = entity.OsztalyBontasId > 0 ? entity.OsztalyBontas.Nev : string.Empty, IsAutoEgyeniCsoport = entity.IsAutoEgyeniCsoport, MuveszetiAgId = entity.MuveszetiAgId, ZenemuveszetiAgTipusId = entity.ZenemuveszetiAgTipusId, KepzesiFormaId = entity.KepzesiForma, SzervezetNeve = entity.Szervezet == null ? string.Empty : entity.Szervezet.Nev, SzervezetId = entity.SzervezetId, }; return co; } private void ConvertToEntity(IDalHandler h, ICsoport entity, CsoportCO co, bool isUpdate, int? ocsEvfolyamTipusId) { if (co.IsAutoEgyeniCsoport && isUpdate) { entity.Nev = co.CsoportNeve; List osszevontEvfolyamTipusIds = EnumExtensions.GetEvfolyamTipusDictionaryItems(TanevId, true).Select(x => x.Id).ToList(); bool isOsszevontEvfolyamTipus = osszevontEvfolyamTipusIds.Any(x => x == ocsEvfolyamTipusId); if (ocsEvfolyamTipusId == (int)EvfolyamTipusEnum.na || isOsszevontEvfolyamTipus) { entity.EvfolyamTipusa = co.EvfolyamTipusa ?? (int)EvfolyamTipusEnum.na; } } else { entity.Nev = co.CsoportNeve; entity.Megjegyzes = co.Megjegyzes; entity.VegzosEvfolyam = co.VegzosEvfolyamCsoport; entity.Keresztfeleves = co.KeresztfelevesCsoport; entity.IsGyogypedagogiaiLogopediai = co.IsGyogypedagogiaiLogopediai; entity.IsTechnikai = co.TechnikaiCsoport; entity.OsztalyBontasId = co.OsztalyBontasId ?? -1; entity.TervezettLetszam = co.TervezettLetszam; entity.KepzesiForma = co.KepzesiFormaId; if (co.TeremID.HasValue && co.TeremID.Value > 0) { entity.TeremId = co.TeremID.Value; } else { entity.TeremId = -1; } entity.Tipusa = co.CsoportTipus; if (co.CsoportvezetoId.HasValue && co.CsoportvezetoId.Value > 0) { entity.CsoportVezetoId = co.CsoportvezetoId.Value; } else if (isUpdate) { entity.CsoportVezeto = null; } entity.EvfolyamTipusa = co.EvfolyamTipusa ?? (int)EvfolyamTipusEnum.na; if (co.FeladatEllatasiHelyId > 0) { entity.FeladatEllatasiHelyId = co.FeladatEllatasiHelyId; entity.FeladatKategoriaId = new FeladatEllatasiHelyHelper(new DalHandlerConnectionType(ConnectionType, h)).GetFeladatKategoriaId(co.FeladatEllatasiHelyId); } else if (isUpdate) { entity.FeladatEllatasiHely = null; } entity.CsoportnaploMegnyitasa = co.CsoportNaploMegnyitasa.HasValue ? (DateTime?)co.CsoportNaploMegnyitasa.Value : null; entity.CsoportnaploZarasa = co.CsoportNaploLezarasa.HasValue ? (DateTime?)co.CsoportNaploLezarasa.Value : null; entity.Naploszam = co.Naploszam; entity.CsoportnaploLeiras = co.CsoportNaploLeirasa; entity.MuveszetiAgId = co.MuveszetiAgId; entity.ZenemuveszetiAgTipusId = co.ZenemuveszetiAgTipusId; if (co.SzervezetId.HasValue) { entity.SzervezetId = co.SzervezetId.Value; } entity.TanevId = TanevId; } } public List GetCsoportCoList() { DataSet dataSet = Dal.CustomConnection.Run(ConnectionType, dalHandler => dalHandler.Csoport().GetCsoportDataSet(TanevId)); var result = new List(); foreach (DataRow dataRow in dataSet.Tables[0].Rows) { var item = new CsoportItemCo(dataRow); result.Add(item); } return result; } public List GetCsoportListBySzervezet(int? szervezetTipus = null, int? szervezetId = null) { DataSet dataSet = Dal.CustomConnection.Run(ConnectionType, dalHandler => dalHandler.Csoport().GetCsoportDataSet(TanevId)); var result = new List(); foreach (DataRow dataRow in dataSet.Tables[0].Rows) { var item = new CsoportItemCo(dataRow); if (item.SzervezetId.Equals(szervezetId)) { result.Add(item); } } return result; } public IDictionary GetOsszefuggoSzakGyakosCsoportok() { var result = Dal.CustomConnection.Run(ConnectionType, (h) => h.Csoport().GetOsszefuggoSzakGyakosCsoportok(TanevId)); return LogicUtil.CreateDropdownContent(result, "ID", "Nev", sort: false); } public IDictionary GetEgyeniCsoportData(int tanuloId, int osztalyId, bool isKovTanev) { var amiEgyeniCsoportok = Constants.AMIEgyeniCsoportok; var ds = Dal.CustomConnection.Run(ConnectionType, (h) => { DateTime? kovTanevElsoNapja = null; if (isKovTanev) { kovTanevElsoNapja = new TanevHelper(new DalHandlerConnectionType(ConnectionType, h)).GetTanevKezdete(); } return h.Csoport().GetEgyeniCsoportData(tanuloId, osztalyId, TanevId, amiEgyeniCsoportok, isKovTanev, kovTanevElsoNapja); }); return LogicUtil.CreateDropdownContent(ds, "Id", "Nev", sort: false); } public int? GetCsoportOsztalyBontasId(int csoportId) { return Dal.CustomConnection.Run(ConnectionType, (h) => { var csoportDal = h.Csoport(); var csoport = csoportDal.Get(csoportId); return csoport.OsztalyBontasId.IsEntityId() ? csoport.OsztalyBontasId : (int?)null; }); } public DataSet GetTanuloOsztalyByCsoportAndDatum(int csoportId, DateTime datum) { return Dal.CustomConnection.Run(ConnectionType, (h) => { return h.Csoport().GetOsztalyIdByCsoportIdAndDatum(TanevId, IntezmenyId, csoportId, datum); }); } public (int munkarenddelNemRendelkezo, int munkarenddelRendelkezo) GetCsoportMunkarendSzama(int osztalyCsoportId, bool isAktivTanev) { return Dal.CustomConnection.Run(ConnectionType, (h) => { var dal = h.Csoport(GridParameters); var dataSet = dal.GetCsoportMunkarendSzama(osztalyCsoportId, isAktivTanev); var dataRow = dataSet.Tables[0].Rows[0]; return (munkarenddelNemRendelkezo: (int)dataRow[0], munkarenddelRendelkezo: (int)dataRow[1]); }); } public List GetCsoportTanuloiByMunkarend(int osztalycsoportId, bool hasMunkarend, bool isAktivTanev) { return Dal.CustomConnection.Run(ConnectionType, (h) => { var dal = h.Csoport(GridParameters); var dataSet = dal.GetCsoportTanuloiByMunkarend(osztalycsoportId, hasMunkarend, isAktivTanev); var result = new List(); foreach (DataRow dataRow in dataSet.Tables[0].Rows) { var item = new OsztalyCsoportTanuloMunkarendItemCo(dataRow); result.Add(item); } return result; }); } } }