using System; using System.Collections.Generic; using System.Data; using System.Linq; using Kreta.BusinessLogic.Classes; using Kreta.BusinessLogic.Classes.ComboBox; using Kreta.BusinessLogic.HelperClasses; 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.Interfaces; using Kreta.DataAccessManual.Model.TantargyFelosztas; using Kreta.DataAccessManual.Util; using Kreta.Enums.ManualEnums; using Kreta.Resources; namespace Kreta.BusinessLogic.Helpers { public class TantargyFelosztasHelper : LogicBase { public TantargyFelosztasHelper(IConnectionType connectionType) : base(connectionType) { } public DataSet GetTantargyFelosztasData(int? tanarId = null, int? csoportId = null, List tantargyIds = null, int? targyKatId = null, int? foglalkozasTipusId = null, int? feladatKategoriaId = null, int? feladatellatasiHelyId = null, int? evfolyamId = null, double? oraszam = null, bool? isImportalt = null, bool osztalybontasokkal = false, bool kapcsolodoCsoportokkal = false, bool isFromSzervezet = false) { return Dal.CustomConnection.Run(ConnectionType, helper => { var dal = helper.TantargyFelosztas(GridParameters); return dal.GetTantargyFelosztasokKereses(tanarId, csoportId, tantargyIds, targyKatId, foglalkozasTipusId, TanevId, evfolyamId, feladatKategoriaId, feladatellatasiHelyId, oraszam: oraszam, isImportalt: isImportalt, osztalybontasokkal: osztalybontasokkal, kapcsolodoCsoportokkal: kapcsolodoCsoportokkal, isFromSzervezet: isFromSzervezet); }); } public List GetTantargyFelosztasCoList(TantargyFelosztasKeresesCo searchCo) { var coList = GetTantargyfelosztasCoList(searchCo.Tanar, searchCo.OsztalyCsoport, searchCo.IsOsztalybontasokkal, searchCo.IsKapcsolodoCsoportokkal, searchCo.IsFromSzervezet, searchCo.SzervezetId); return FilterTantargyfelosztasItemCoList(coList, searchCo); } public IDictionary GetTantargyFelosztasForDDL(int tanarId) { return Dal.CustomConnection.Run(ConnectionType, helper => { var dal = helper.TantargyFelosztas(); return LogicUtil.CreateDropdownContent(dal.GetFoglalkozasokForDDL(tanarId, TanevId), "ID", "Nev", null); }); } public int CreateOrUpdateFelosztas(TantargyFelosztasCO co, bool isForceInsert = false, bool isFromSzervezet = false) { return Dal.CustomConnection.Run(ConnectionType, helper => { var dal = helper.TantargyFelosztas(); var dm = new TantargyFelosztasDM { Id = co.ID, TanevId = TanevId, TanarId = co.TanarID, OsztalyCsoportId = co.OsztalyCsoportID, }; if (isFromSzervezet) { dm.FoglalkozasTipusa = (int)Enums.FoglalkozasTipusEnum.dualis_foglalkozas; dm.TantargyId = co.TantargyID; dm.Oraszam = 1; dm.TuloraSzam = 0; dm.OsszevontOra = false; dm.NemzetisegiOra = false; dm.MegbizasiOraszam = 0; } else { dm.FoglalkozasTipusa = co.FoglalkozasTipusa; dm.TantargyId = co.TantargyID; dm.Oraszam = co.Oraszam; dm.TuloraSzam = co.TuloraSzam; dm.OsszevontOra = co.OsszevontOra; dm.NemzetisegiOra = co.NemzetisegiOra; dm.MegbizasiOraszam = co.MegbizasiOraszam; }; if (!CheckTtfCorrectTanevId(helper, dm)) { throw new BlException(ErrorResource.HibasTanevBeallitasok); } var (id, removeFromOrarendOra) = dal.CreateOrUpdateFelosztas(dm, IntezmenyId, isForceInsert); if (removeFromOrarendOra) { helper.OrarendiOra().SetFoglalkozasToNull(id, FelhasznaloId); } return id; }); } private bool CheckTtfCorrectTanevId(IDalHandler h, TantargyFelosztasDM ttf) { var osztalyCsoport = h.OsztalyCsoport().Get(ttf.OsztalyCsoportId); var tanar = h.Alkalmazott().Get(ttf.TanarId); var tantargy = h.Tantargy().GetTantargy(ttf.TantargyId); var tanevIds = new List { osztalyCsoport.TanevId, tanar.TanevId, tantargy.TanevId }; return tanevIds.All(t => t == TanevId); } internal DataSet GetTTFToExport(int? tanarId, int? csoportId, int? tantargyId, int? targyKatId, int? foglalkozasTipusId, int? feladatKategoriaId, int? feladatellatasiHelyId, int? evfolyamId, double? oraszam, bool? isImportalt, bool osztalybontasokkal, bool kapcsolodoCsoportokkal, bool isFromSzervezet) { return Dal.CustomConnection.Run(ConnectionType, helper => { var dal = helper.TantargyFelosztas(); return dal.GetTTFToExport(TanevId, tanarId, csoportId, tantargyId, targyKatId, foglalkozasTipusId, feladatKategoriaId, feladatellatasiHelyId, evfolyamId, oraszam, isImportalt, osztalybontasokkal, kapcsolodoCsoportokkal, isFromSzervezet); }); } public TantargyFelosztasCO GetTantargyFelosztas(int felosztasId) { return Dal.CustomConnection.Run(ConnectionType, helper => { var entity = helper.Foglalkozas().Get(felosztasId); bool modosithato = entity.OrarendiOra.Count == 0 && entity.TanitasiOra.Count == 0; return new TantargyFelosztasCO() { ID = felosztasId, FoglalkozasTipusa = entity.FoglalkozasTipusa, Oraszam = entity.Oraszam, OsztalyCsoportID = entity.OsztalyCsoportId, TanarID = entity.TanarId, TantargyID = entity.TantargyId, TanevID = entity.TanevId, Modosithato = modosithato, Nev = !string.IsNullOrWhiteSpace(entity.Nev) ? entity.Nev : string.Empty, OsszevontOra = entity.IsOsszevontOra, NemzetisegiOra = entity.IsNemzetisegi, MegbizasiOraszam = entity.MegbizasiOraszam, TuloraSzam = entity.TuloraSzam }; }); } public TantargyFelosztasKapcsolataiCO GetTantargyFelosztasKapcsolatai(int felosztasId) { return Dal.CustomConnection.Run(ConnectionType, helper => { var dal = helper.TantargyFelosztas(GridParameters); DataTable table = dal.GetTantargyFelosztasKapcsolatai(felosztasId, TanevId).Tables[0]; if (table.Rows.Count > 0) { return new TantargyFelosztasKapcsolataiCO { DiakokSzama = Convert.ToInt32(table.Rows[0]["DiakokSzama"]), TanorakSzama = Convert.ToInt32(table.Rows[0]["TanorakSzama"]), ErtekelesekSzama = Convert.ToInt32(table.Rows[0]["ErtekelesekSzama"]), MulasztasokSzama = Convert.ToInt32(table.Rows[0]["MulasztasokSzama"]) }; } return new TantargyFelosztasKapcsolataiCO(); }); } public DataSet GetFormazottTTFExport(int formatMode) { return Dal.CustomConnection.Run(ConnectionType, helper => { return helper.TantargyFelosztas().GetFormazottTTFExport(IntezmenyId, TanevId, formatMode, IntezmenyAzonosito); }); } public TantargyFelosztasAlapAdatokCO GetTantargyFelosztasAdatok(int felosztasId) { return Dal.CustomConnection.Run(ConnectionType, helper => { var dal = helper.TantargyFelosztas(GridParameters); DataTable table = dal.GetTantargyFelosztasAdatok(felosztasId).Tables[0]; if (table.Rows.Count > 0) { return new TantargyFelosztasAlapAdatokCO { Csoport = table.Rows[0]["OsztalyCsoportNev"].ToString(), FoglalkozasHelye = table.Rows[0]["FeladatellatasiHelyNev"].ToString(), FoglalkozasTipus = table.Rows[0]["FoglalkozasTipusa"].ToString(), HetiOraszam = table.Rows[0]["Oraszam"].ToString(), MunkakorTipus = table.Rows[0]["MunkakorTipus"].ToString(), MunkavallaloNev = table.Rows[0]["MunkavallaloNev"].ToString(), Tantargynev = table.Rows[0]["Tantargy"].ToString(), Tanev = table.Rows[0]["Tanev"].ToString(), TuloraSzam = table.Rows[0]["TuloraSzam"].ToString(), OsszevontOra = table.Rows[0]["OsszevontOra_BNAME"].ToString(), NemzetisegiOra = table.Rows[0]["NemzetisegiOra_BNAME"].ToString(), MegbizasiOraszam = table.Rows[0]["MegbizasiOraszam"].ToString() }; } return new TantargyFelosztasAlapAdatokCO(); }); } public void DeleteTargyFelosztas(int id) { Dal.CustomConnection.Run(ConnectionType, helper => { var dal = helper.TantargyFelosztas(); var foglalkozas = helper.Foglalkozas().Get(id); dal.Delete(foglalkozas); }); } public DataSet GetTantargyFoglalkozasai(int tantargyId) { return Dal.CustomConnection.Run(ConnectionType, helper => { var dal = helper.TantargyFelosztas(GridParameters); return dal.GetTantargyFoglalkozasai(tantargyId, TanevId); }); } public void DeleteAllTargyFelosztas() { Dal.CustomConnection.Run(ConnectionType, helper => { var dal = helper.TantargyFelosztas(GridParameters); dal.DeleteAllTargyFelosztas(TanevId); }); } public DataSet GetFoglalkozasok(int? tanarId, int? osztalyId = null, bool? isOsszefuggoSzakGyak = null, bool filterNincsBeloleOra = false, bool isKapcsolodoCsoportok = false) { return Dal.CustomConnection.Run(ConnectionType, helper => { var dal = helper.TantargyFelosztas(GridParameters); return dal.GetFoglalkozasok(TanevId, tanarId, osztalyId, isOsszefuggoSzakGyak, filterNincsBeloleOra, isKapcsolodoCsoportok); }); } public void TantargyfelosztasVisszamenolegesModositas(TantargyFelosztasVisszamenolegesCO data) { Dal.CustomConnection.Run(ConnectionType, helper => { var dal = helper.TantargyFelosztas(); dal.TantargyfelosztasVisszamenolegesModositas(IntezmenyId, TanevId, FelhasznaloId, TantargyFelosztasVisszamenolegesCO.ConvertCOToPCO(data)); }); } public List GetEgyszerAdhatoErtekelesekTanatargyfelosztasModositasAlapjan(TantargyFelosztasVisszamenolegesCO data) { return Dal.CustomConnection.Run(ConnectionType, helper => { var dal = helper.TantargyFelosztas(); List list = new List(); DataSet ds = dal.GetEgyszerAdhatoErtekelesekTanatargyfelosztasModositasAlapjan(IntezmenyId, TanevId, TantargyFelosztasVisszamenolegesCO.ConvertCOToPCO(data)); if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) { foreach (DataRow item in ds.Tables[0].Rows) { list.Add(SDAConvert.ToInt32(item["EredetiErtekelesId"].ToString())); } } return list; }); } public void UpdateOrarendiOraAfterTantargyfelosztasUpdate(TantargyFelosztasVisszamenolegesCO data) { Dal.CustomConnection.Run(ConnectionType, helper => { var dal = helper.TantargyFelosztas(); dal.UpdateOrarendiOraAfterTantargyfelosztasUpdate(IntezmenyId, TanevId, FelhasznaloId, TantargyFelosztasVisszamenolegesCO.ConvertCOToPCO(data)); }); } public void RemoveOrarendiOraTTFRelation(int ttfId) { Dal.CustomConnection.Run(ConnectionType, helper => { var dal = helper.TantargyFelosztas(); dal.RemoveOrarendiOraTTFRelation(IntezmenyId, TanevId, ttfId); }); } public DataSet TantargyfelosztasbanValtozoOrarendiOrak(TantargyFelosztasVisszamenolegesCO data) { return Dal.CustomConnection.Run(ConnectionType, helper => { var dal = helper.TantargyFelosztas(); return dal.TantargyfelosztasbanValtozoOrarendiOrak(IntezmenyId, TanevId, TantargyFelosztasVisszamenolegesCO.ConvertCOToPCO(data)); }); } public void FizikaiTorlesTantargyfelosztas() { Dal.CustomConnection.Run(ConnectionType, helper => { var dal = helper.TantargyFelosztas(); dal.FizikaiTorlesTantargyfelosztas(IntezmenyId, TanevId, FelhasznaloId); }); } public DataSet GetFoglalkozasById(int TTFId) { return Dal.CustomConnection.Run(ConnectionType, helper => { return helper.TantargyFelosztas().GetFoglalkozasById(TTFId); }); } public DataSet GetFoglalkozasDataById(int TTFId) { return Dal.CustomConnection.Run(ConnectionType, helper => { return helper.TantargyFelosztas().GetFoglalkozasDataById(TTFId); }); } public List GetTanarAltalErtekelhetoCsoportokForDDL(int szuperOsztalyfonok, DateTime date, string osztalyGroupName = null, string csoportGroupName = null) { if (string.IsNullOrWhiteSpace(osztalyGroupName)) { osztalyGroupName = CommonResource.Osztaly; } /*Osztály*/ if (string.IsNullOrWhiteSpace(csoportGroupName)) { csoportGroupName = CommonResource.Csoport; } /*Csoport*/ return Dal.CustomConnection.Run(ConnectionType, helper => { var dal = helper.TantargyFelosztas(); var ds = dal.GetTanarAltalErtekelhetoCsoportok(FelhasznaloId, TanevId, szuperOsztalyfonok, date, osztalyGroupName, csoportGroupName); return LogicUtil.CreateMvcGroupedSelectListItem(ds, "OsztalyCsoportId", "Nev", "GroupName"); }); } public IDictionary GetTanarDolgozatTantargyakForDDL(int szuperOsztalyfonok, DateTime date) { return Dal.CustomConnection.Run(ConnectionType, helper => { var dal = helper.TantargyFelosztas(); return LogicUtil.CreateDropdownContent(dal.GetTanarDolgozatTantargyak(FelhasznaloId, TanevId, szuperOsztalyfonok, date), "TantargyId", "TantargyNev", null); }); } public List GetTantargyfelosztasCoList(int? alkalmazottId = null, int? osztalyCsoportId = null, bool isOsztalybontasokkal = false, bool isKacsolodoCsoportokkal = false, bool isFromSzervezet = false, int? szervezetId = null) { var dataSet = Dal.CustomConnection.Run(ConnectionType, dalHandler => dalHandler.Foglalkozas().GetTantargyfelosztasDataSet(IntezmenyId, TanevId, alkalmazottId, osztalyCsoportId, isOsztalybontasokkal: isOsztalybontasokkal, isKapcsolodoCsoportokkal: isKacsolodoCsoportokkal, isFromSzervezet: isFromSzervezet, szervezetId: szervezetId)); var coList = new List(); var szervezetIds = new List(); var intezmenyiAdminIds = new List(); if (isFromSzervezet) { szervezetIds = !szervezetId.IsEntityId() ? new List() : Dal.CustomConnection.Run(ConnectionType, dalHandler => dalHandler.SzervezetDal().GetLathatoSzervezetek(IntezmenyId, TanevId, szervezetId, (int)SzervezetAdatokHalmazaEnum.SzervezetEsAlSzervezetek)); intezmenyiAdminIds = szervezetId.IsEntityId() ? new List() : Dal.CustomConnection.Run(ConnectionType, dalHandler => dalHandler.Felhasznalo().GetAllIntezmenyiAdmin(TanevId)); } foreach (DataRow dataRow in dataSet.Tables[0].Rows) { var iSzerkesztheto = true; if (isFromSzervezet) { var rowSzervezetId = dataRow.Field("SzervezetId"); var isSzerkesztheto = (szervezetId.IsEntityId() && rowSzervezetId.IsEntityId() && szervezetIds.Contains(rowSzervezetId.Value)) || (!szervezetId.IsEntityId() && intezmenyiAdminIds.Contains(FelhasznaloId) && intezmenyiAdminIds.Contains(dataRow.Field("RogzitoId") ?? FelhasznaloId)); } var item = new TantargyfelosztasItemCo(dataRow, iSzerkesztheto); if (item.IsOsszevontOra) { item.TtfKorrekcioOraszam = item.Oraszam; item.Oraszam = 0; } else { item.TtfKorrekcioOraszam = 0; } coList.Add(item); } return coList; } public bool DuplicatedTantargyfelosztas(int tanarId, int osztalyCsoportId, int tantargyId, int? id) { return Dal.CustomConnection.Run(ConnectionType, helper => { var dal = helper.TantargyFelosztas(GridParameters); return dal.TantargyFelosztasLetezik(tanarId, osztalyCsoportId, tantargyId, id, TanevId).IsEntityId(); }); } public void CreateOrUpdateEgyeniTantargyFelosztasForAMI(FoglalkozasAmiTanuloCo co) { co.TantargyfelosztasCo.ID = CreateOrUpdateFelosztas(co.TantargyfelosztasCo, isForceInsert: true); InsertOrUpdateFoglalkozasAmiTanulo(co); } public void InsertOrUpdateFoglalkozasAmiTanulo(FoglalkozasAmiTanuloCo co) { Dal.CustomConnection.Run(ConnectionType, h => { var dal = h.FoglalkozasAmiTanuloDal(); IFoglalkozasAmiTanulo entity; if (co.AmiFoglalkozasId.IsEntityId()) { entity = dal.Get(co.AmiFoglalkozasId.Value); } else { entity = dal.Get(); } entity.TanevId = TanevId; entity.FoglalkozasId = co.TantargyfelosztasCo.ID.Value; entity.AMIFotargyId = co.AMIFotargyId; entity.AmiTagozatId = co.AmiTagozatId; entity.AMITantargyKotelezosegId = co.AMITantargyKotelezosegId; entity.EvfolyamTipusId = co.EvfolyamTipusId; entity.TanuloId = co.TanuloId; if (co.AmiFoglalkozasId.IsEntityId()) { dal.FullUpdate(entity); } else { dal.Insert(entity); } }); } public void DeleteFoglalkozasAmiTanulo(int foglalkozasAmiTanuloId) { Dal.CustomConnection.Run(ConnectionType, h => h.FoglalkozasAmiTanuloDal().Delete(foglalkozasAmiTanuloId)); } public (bool, string, string) ValidateAmiCsoportTtf(int osztalyCsoportId, int tanarId, int tantargyId, int id) { return Dal.CustomConnection.Run(ConnectionType, helper => { var dal = helper.TantargyFelosztas(); var ds = dal.GetFoglalkozasokByOsztalyCsoport(osztalyCsoportId, TanevId); if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) { foreach (DataRow row in ds.Tables[0].Rows) { if (row.Field("TanarId") == tanarId && row.Field("TantargyId") == tantargyId && row.Field("ID") != id) { return (false, row.Field("TanarNev"), row.Field("TantargyNev")); } } } return (true, string.Empty, string.Empty); }); } public int GetTeremByFoglalkozas(int foglalkozasId) { return Dal.CustomConnection.Run(ConnectionType, helper => { var dal = helper.TantargyFelosztas(); return dal.GetTeremByFoglalkozas(foglalkozasId); }); } private List FilterTantargyfelosztasItemCoList(List coList, TantargyFelosztasKeresesCo searchCo) { if (searchCo == null) { return coList; } IEnumerable result = coList; if (searchCo.FeladatKategoriaId.IsEntityId() && !searchCo.IsFromSzervezet) { result = result.Where(x => x.FeladatKategoriaId == searchCo.FeladatKategoriaId.Value); } if (searchCo.Tanar.IsEntityId()) { result = result.Where(x => x.TanarId == searchCo.Tanar.Value); } if (searchCo.Tantargy.IsEntityId()) { result = result.Where(x => x.TantargyId == searchCo.Tantargy.Value); } if (searchCo.Feladatellatasihely.IsEntityId() && !searchCo.IsFromSzervezet) { result = result.Where(x => x.FeladatEllatasihelyId == searchCo.Feladatellatasihely.Value); } if (searchCo.Oraszam.HasValue) { result = result.Where(x => x.Oraszam == searchCo.Oraszam.Value); } if (searchCo.IsFromSzervezet) { result = result.Where(x => x.TipusId == (int)Enums.FoglalkozasTipusEnum.dualis_foglalkozas); } else { result = result.Where(x => x.TipusId != (int)Enums.FoglalkozasTipusEnum.dualis_foglalkozas || !x.SzervezetId.IsEntityId()); } if (!string.IsNullOrWhiteSpace(searchCo.DualisKepzohelyNeve)) { result = result.Where(x => x.DualisKepzohelyNeve.Contains(searchCo.DualisKepzohelyNeve)); } if (!string.IsNullOrWhiteSpace(searchCo.DualisKepzohelyAdoszama)) { result = result.Where(x => x.DualisKepzohelyAdoszama.Contains(searchCo.DualisKepzohelyAdoszama)); } return result.ToList(); } public bool ValidateTantargyfelosztasVisszamenolegesModositas(TantargyFelosztasVisszamenolegesCO co, out string errorMessage) { errorMessage = null; var ds = Dal.CustomConnection.Run(ConnectionType, h => { var dal = h.TantargyFelosztas(); var pco = TantargyFelosztasVisszamenolegesCO.ConvertCOToPCO(co); return dal.ValidateTantargyfelosztasVisszamenolegesModositas(pco); }); var utkozoDatumok = ds.Tables[0].AsEnumerable().Select(r => r.Field("Datum").ToString(Constants.ToStringPattern.HungarianDate)); if (utkozoDatumok.Any()) { errorMessage = string.Format(TantargyfelosztasResource.TtfVisszamenolegesModositasHiba, string.Join(", ", utkozoDatumok)); } return string.IsNullOrWhiteSpace(errorMessage); } public void HandleTanarValtozasOrarendiOrakon(int foglalkozasId) { Dal.CustomConnection.Run(ConnectionType, h => { h.TantargyFelosztas().HandleTanarValtozasOrarendiOrakon(foglalkozasId); }); } } }