using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Web; using Kreta.BusinessLogic.Classes; using Kreta.BusinessLogic.Classes.ExcelHelpers; using Kreta.BusinessLogic.HelperClasses; using Kreta.BusinessLogic.Logic; using Kreta.BusinessLogic.Logic.Feljegyzes; using Kreta.BusinessLogic.Utils; using Kreta.Core; using Kreta.Core.ConnectionType; using Kreta.DataAccess.Interfaces; using Kreta.DataAccessManual; using Kreta.DataAccessManual.Interfaces; using Kreta.DataAccessManual.ParameterClasses; using Kreta.DataAccessManual.Util; using Kreta.Enums; using Kreta.Enums.ManualEnums; using Kreta.Framework; using Kreta.KretaServer.Exceptions; using Kreta.Resources; using OfficeOpenXml; namespace Kreta.BusinessLogic.Helpers { public class FeljegyzesHelper : LogicBase { public FeljegyzesHelper(IConnectionType connectionType) : base(connectionType) { } public static int FirstMonth = 1; public static int LastMonth = 12; public DataSet GetBeirasokGrid(int osztalyCsoportId, DateTime startDate, int? szervezetTipusEnumId) { return Dal.CustomConnection.Run(ConnectionType, h => { var dal = h.Feljegyzes(GridParameters); var ds = dal.GetFeljegyzesBeirasokData(IntezmenyId, TanevId, osztalyCsoportId, startDate, FelhasznaloId); FilterFeljegyzesNaploNezetBySzervezetTipusEnumId(h, ref ds, szervezetTipusEnumId); var result = GetNaploNezetGrid(h, ds, false); return result; }); } public DataSet GetElektronikusUzenetekNaploNezetGrid(int osztalyCsoportId, DateTime startDate, int? szervezetTipusEnumId) { return Dal.CustomConnection.Run(ConnectionType, h => { var dal = h.Feljegyzes(GridParameters); var ds = dal.GetFeljegyzesElektronikusUzenetekNaploNezetData(IntezmenyId, TanevId, osztalyCsoportId, startDate, FelhasznaloId); FilterFeljegyzesNaploNezetBySzervezetTipusEnumId(h, ref ds, szervezetTipusEnumId); var result = GetNaploNezetGrid(h, ds, true); return result; }); } private DataSet GetNaploNezetGrid(IDalHandler h, DataSet ds, bool isElektronikusUzenetek) { var beirasokGridDataSet = new DataSet(); var dt = new DataTable(); dt.Columns.Add(new DataColumn("ID", typeof(int))); dt.Columns.Add(new DataColumn("TanuloId", typeof(int))); dt.Columns.Add(new DataColumn("TanuloNev", typeof(string))); dt.Columns.Add(new DataColumn("OsztalyNev", typeof(string))); dt.Columns.Add(new DataColumn("AnyjaNeve", typeof(string))); dt.Columns.Add(new DataColumn("SzuletesiIdo", typeof(DateTime))); dt.Columns.Add(new DataColumn("EsemenyDatuma", typeof(DateTime))); dt.Columns.Add(new DataColumn("Tipus", typeof(string))); dt.Columns.Add(new DataColumn("FeljegyzoNeve", typeof(string))); dt.Columns.Add(new DataColumn("Targy", typeof(string))); dt.Columns.Add(new DataColumn("Tartalom", typeof(string))); dt.Columns.Add(new DataColumn("JanuarI", typeof(string))); dt.Columns.Add(new DataColumn("JanuarII", typeof(string))); dt.Columns.Add(new DataColumn("Februar", typeof(string))); dt.Columns.Add(new DataColumn("Marcius", typeof(string))); dt.Columns.Add(new DataColumn("Aprilis", typeof(string))); dt.Columns.Add(new DataColumn("Majus", typeof(string))); dt.Columns.Add(new DataColumn("Junius", typeof(string))); dt.Columns.Add(new DataColumn("Julius", typeof(string))); dt.Columns.Add(new DataColumn("Augusztus", typeof(string))); dt.Columns.Add(new DataColumn("Szeptember", typeof(string))); dt.Columns.Add(new DataColumn("Oktober", typeof(string))); dt.Columns.Add(new DataColumn("November", typeof(string))); dt.Columns.Add(new DataColumn("December", typeof(string))); foreach (DataColumn column in dt.Columns) { column.AllowDBNull = true; } beirasokGridDataSet.Tables.Add(dt); var tanevRendjeDal = h.TanevRendjeDal(); var felevVege = tanevRendjeDal.GetElsoFelevVege(IntezmenyId, TanevId); var view = new DataView(ds.Tables[0]); var tanuloIdList = view.ToTable(true, "TanuloId").AsEnumerable().Select(p => SDAConvert.ToInt32(p["TanuloId"])).ToList(); foreach (var tanuloId in tanuloIdList) { var dr = beirasokGridDataSet.Tables[0].NewRow(); var rows = ds .Tables[0] .AsEnumerable() .Where(r => SDAConvert.ToInt32(r["TanuloId"]) == tanuloId) .ToList(); if (rows.Count > 0) { var firstRow = rows[0]; dr.SetField("ID", tanuloId); dr.SetField("TanuloId", tanuloId); dr.SetField("TanuloNev", SDAConvert.ToString(firstRow["TanuloNev"])); dr.SetField("OsztalyNev", SDAConvert.ToString(firstRow["OsztalyNev"])); dr.SetField("AnyjaNeve", SDAConvert.ToString(firstRow["AnyjaNeve"])); dr.SetField("SzuletesiIdo", SDAConvert.ToDateTime(firstRow["SzuletesiIdo"])); } var beirasRows = ds .Tables[0] .AsEnumerable() .Where(r => SDAConvert.ToInt32(r["TanuloId"]) == tanuloId && SDAConvert.ToDateTime(r["EsemenyDatuma"]) != null) .OrderBy(r => SDAConvert.ToDateTime(r["EsemenyDatuma"])) .ToList(); for (var i = FirstMonth; i <= LastMonth; i++) { //NOTE: A korábbi vizsgálat miatt nem lehet null a EsemenyDatuma.Value var honapBeirasRows = beirasRows.Where(x => SDAConvert.ToDateTime(x["EsemenyDatuma"]).Value.Month == i).ToList(); var fieldValue = AddBeirasSpanToData(honapBeirasRows, isElektronikusUzenetek); switch (i) { case 1: //NOTE: A korábbi vizsgálat miatt nem lehet null a EsemenyDatuma.Value var januarIBeirasRows = honapBeirasRows.Where(x => SDAConvert.ToDateTime(x["EsemenyDatuma"]).Value <= felevVege).ToList(); dr.SetField("JanuarI", AddBeirasSpanToData(januarIBeirasRows, isElektronikusUzenetek)); //NOTE: A korábbi vizsgálat miatt nem lehet null a EsemenyDatuma.Value var januarIiBeirasRows = honapBeirasRows.Where(x => SDAConvert.ToDateTime(x["EsemenyDatuma"]).Value > felevVege).ToList(); dr.SetField("JanuarII", AddBeirasSpanToData(januarIiBeirasRows, isElektronikusUzenetek)); break; case 2: dr.SetField("Februar", fieldValue); break; case 3: dr.SetField("Marcius", fieldValue); break; case 4: dr.SetField("Aprilis", fieldValue); break; case 5: dr.SetField("Majus", fieldValue); break; case 6: dr.SetField("Junius", fieldValue); break; case 7: dr.SetField("Julius", fieldValue); break; case 8: dr.SetField("Augusztus", fieldValue); break; case 9: dr.SetField("Szeptember", fieldValue); break; case 10: dr.SetField("Oktober", fieldValue); break; case 11: dr.SetField("November", fieldValue); break; case 12: dr.SetField("December", fieldValue); break; } } beirasokGridDataSet.Tables[0].Rows.Add(dr); } AddSzuletesiIdoFormattedColumnToDataSet(beirasokGridDataSet); return beirasokGridDataSet; } public Dictionary> ValidateElektronikusUzenetTanuloListOsztalybaTartozikDatumAlapjan(List tanuloIdList, int osztalyCsoportId, DateTime esemenyDatuma, DateTime? vege, bool? isFaliujsagMegjelenes) { var errorMessageDictionary = new Dictionary>(); var tanuloListDataSet = Dal.CustomConnection.Run(ConnectionType, h => { var dal = h.OsztalyCsoport(); return dal.GetTanuloBesorolasaiKisorolasaiDatumDataByTanuloIdList(tanuloIdList, osztalyCsoportId); }); foreach (var tanuloId in tanuloIdList) { var errorMessageList = new List(); var tanuloDataRows = tanuloListDataSet.Tables[0].AsEnumerable().Where(row => SDAConvert.ToInt32(row["C_TANULOID"].ToString()).Equals(tanuloId)).ToList(); var belepesDatumList = tanuloDataRows.Select(row => SDAConvert.ToDateTime(row["C_BELEPESDATUM"])).OfType().ToList(); var kilepesDatumList = tanuloDataRows.Select(row => SDAConvert.ToDateTime(row["C_KILEPESDATUM"])).OfType().ToList(); var tanuloNeve = tanuloDataRows.Select(row => SDAConvert.ToString(row["C_NYOMTATASINEV"])).First(); var esemenyDatumatMegelozoBesorolasDatum = GetTanuloEsemenyDatumatMegelozoBesorolasDatum(belepesDatumList, esemenyDatuma); if (isFaliujsagMegjelenes.HasValue && isFaliujsagMegjelenes.Value && vege.HasValue) { var vegeValue = vege.Value; if (esemenyDatumatMegelozoBesorolasDatum.HasValue) { var aktualisBesorolasKisorolasDatum = GetBesorolasDatumatKovetoKisorolasDatum(kilepesDatumList, esemenyDatumatMegelozoBesorolasDatum.Value); if (aktualisBesorolasKisorolasDatum.HasValue && aktualisBesorolasKisorolasDatum < vegeValue) { errorMessageList.Add(string.Format( FeljegyzesekResource.KivalasztottIdointervallumban01ATanulo2NemTagjaAzOsztalynakMivelKorabbanKisorolasraKerult2, esemenyDatuma.ToString(Constants.ToStringPattern.HungarianDateWithSuffix), vegeValue.ToString(Constants.ToStringPattern.HungarianDate), tanuloNeve, aktualisBesorolasKisorolasDatum.Value.ToString(Constants.ToStringPattern.HungarianDate))); } } else { var elsoOsztalybasorolasDatum = belepesDatumList.OrderBy(x => x).FirstOrDefault(); if (esemenyDatuma < elsoOsztalybasorolasDatum) { errorMessageList.Add(string.Format( FeljegyzesekResource.KivalasztottIdointervallumban01ATanulo2NemTagjaVegigAzOsztalynakMivelEgyKesobbiIdoponttolKezdveKerultBesorolasra3, esemenyDatuma.ToString(Constants.ToStringPattern.HungarianDateWithSuffix), vegeValue.ToString(Constants.ToStringPattern.HungarianDate), tanuloNeve, elsoOsztalybasorolasDatum.ToString(Constants.ToStringPattern.HungarianDate))); } } } else { if (esemenyDatumatMegelozoBesorolasDatum.HasValue) { var aktualisBesorolasKisorolasDatum = GetBesorolasDatumatKovetoKisorolasDatum(kilepesDatumList, esemenyDatumatMegelozoBesorolasDatum.Value); if (aktualisBesorolasKisorolasDatum.HasValue && aktualisBesorolasKisorolasDatum < esemenyDatuma) { errorMessageList.Add(string.Format( FeljegyzesekResource.KivalasztottIdopontban0ATanulo1MarNemTagjaAzOsztalynakMivelKorabbanKisorolasraKerult2, esemenyDatuma.ToString(Constants.ToStringPattern.HungarianDate), tanuloNeve, aktualisBesorolasKisorolasDatum.Value.ToString(Constants.ToStringPattern.HungarianDate))); } } else { var elsoOsztalybasorolasDatum = belepesDatumList.OrderBy(x => x).FirstOrDefault(); if (esemenyDatuma < elsoOsztalybasorolasDatum) { errorMessageList.Add(string.Format( FeljegyzesekResource.KivalasztottIdopontban0ATanulo1MegNemTagjaAzOsztalynakMivelEgyKesobbiIdoponttolKezdveKerultBesorolasra2, esemenyDatuma.ToString(Constants.ToStringPattern.HungarianDate), tanuloNeve, elsoOsztalybasorolasDatum.ToString(Constants.ToStringPattern.HungarianDate))); } } } if (errorMessageList.Count > 0) { errorMessageDictionary.Add(tanuloId, errorMessageList); } } return errorMessageDictionary; } private DateTime? GetTanuloEsemenyDatumatMegelozoBesorolasDatum(List belepesDatumList, DateTime esemenyDatuma) { var legkozelebbiKorabbiBesorolasDatum = belepesDatumList.OrderByDescending(x => x).Cast().FirstOrDefault(x => x <= esemenyDatuma); return legkozelebbiKorabbiBesorolasDatum; } public DateTime? GetBesorolasDatumatKovetoKisorolasDatum(List kilepesDatumList, DateTime esemenyDatuma) { var legkozelebbiKesobbiKisorolasDatum = kilepesDatumList.OrderByDescending(x => x).Cast().FirstOrDefault(x => x > esemenyDatuma); return legkozelebbiKesobbiKisorolasDatum; } private static void AddSzuletesiIdoFormattedColumnToDataSet(DataSet ds) { var dt = ds.Tables[0]; dt.Columns.Add("SzuletesiIdoFormatted"); var rows = dt.Rows.Cast().ToList(); foreach (var row in rows) { row["SzuletesiIdoFormatted"] = SDAConvert.ToDateTime(row["SzuletesiIdo"]).ToShortDateString(); } } private object AddBeirasSpanToData(List honapBeirasRows, bool isElektronikusUzenetek) { var result = ""; foreach (var row in honapBeirasRows) { string beirasText; var datum = SDAConvert.ToDateTime(row["EsemenyDatuma"]); if (datum.HasValue) { beirasText = datum.Value.Day.ToString("00"); } else { var ex = new KretaException(StringResourcesUtil.GetString(288)); SDAServer.Instance.Logger.ExceptionThrown(ex); throw ex; } var feljegyzesId = SDAConvert.ToInt32(row["ID"]); var datumText = DateTime.Parse(row["EsemenyDatuma"].ToString()).ToShortDateString(); if (string.IsNullOrWhiteSpace(datumText)) { datumText += "-"; } var tipusId = SDAConvert.ToInt32(row["Tipus"]); var tipusText = HttpUtility.HtmlEncode(tipusId.GetDisplayName(TanevId)); if (string.IsNullOrWhiteSpace(tipusText)) { tipusText += "-"; } var feljegyzoNeveText = HttpUtility.HtmlEncode(row["FeljegyzoNeve"].ToString()); if (string.IsNullOrWhiteSpace(feljegyzoNeveText)) { feljegyzoNeveText += "-"; } var targyText = HttpUtility.HtmlEncode(row["Targy"].ToString()); if (string.IsNullOrWhiteSpace(targyText)) { targyText += "-"; } var tartalomText = HttpUtility.HtmlEncode(row["Tartalom"].ToString()); if (string.IsNullOrWhiteSpace(tartalomText)) { tartalomText += "-"; } if (!string.IsNullOrWhiteSpace(result)) { result += " "; } var modosithato = SDAConvert.ToBoolean(row["Modosithato_BOOL"]) && (isElektronikusUzenetek && tipusId == (int)EsemenyTipusEnum.ElektronikusUzenet || !isElektronikusUzenetek && tipusId != (int)EsemenyTipusEnum.ElektronikusUzenet && tipusId != (int)EsemenyTipusEnum.FaliujsagBejegyzes); var clickableText = modosithato ? " clickable" : ""; var szinezesToolTipStyle = GetSzinezesStyle(tipusId, false); var szinezesBeirasStyle = GetSzinezesStyle(tipusId, true); var tanuloId = row["TanuloId"].ToString(); var tanuloNev = HttpUtility.HtmlEncode(row["TanuloNev"].ToString()); result += $"{beirasText}"; } return result; } public DataSet GetBeirasokReszletekForGrid(int tanuloId, int? szervezetTipusEnumId, bool toroltElemek = false) { return Dal.CustomConnection.Run(ConnectionType, h => { var dal = h.Feljegyzes(GridParameters); var ds = dal.GetFeljegyzesBeirasokReszletek(IntezmenyId, TanevId, tanuloId, FelhasznaloId, toroltElemek); foreach (DataRow row in ds.Tables[0].Rows) { var tipusId = SDAConvert.ToInt32(row["Tipus"]); var modosithato = SDAConvert.ToBoolean(row["Modosithato_BOOL"]) && tipusId != (int)EsemenyTipusEnum.ElektronikusUzenet && tipusId != (int)EsemenyTipusEnum.FaliujsagBejegyzes; row.SetField("Modosithato", modosithato ? 'T' : 'F'); row.SetField("Modosithato_BOOL", modosithato); } FilterFeljegyzesBySzervezetTipusEnumId(h, ref ds, szervezetTipusEnumId); return ds; }); } public DataSet GetElektronikusUzenetekNaploNezetReszletekGrid(int tanuloId, int? szervezetTipusEnumId, bool toroltElemek = false) { var result = Dal.CustomConnection.Run(ConnectionType, h => { var dal = h.Feljegyzes(GridParameters); var ds = dal.GetFeljegyzesElektronikusUzenetekNaploNezetReszletek(IntezmenyId, TanevId, tanuloId, FelhasznaloId, toroltElemek); FilterFeljegyzesBySzervezetTipusEnumId(h, ref ds, szervezetTipusEnumId); return ds; }); return result; } public DataSet GetElektronikusUzenetekListaNezetGrid(int osztalyCsoportId, int? szervezetTipusEnumId) { var result = Dal.CustomConnection.Run(ConnectionType, h => { var dal = h.Feljegyzes(GridParameters); var ds = dal.GetFeljegyzesElektronikusUzenetekListaNezetData(IntezmenyId, TanevId, osztalyCsoportId, FelhasznaloId); FilterFeljegyzesBySzervezetTipusEnumId(h, ref ds, szervezetTipusEnumId); return ds; }); return result; } public DataSet GetElektronikusUzenetekModifyPopupGrid(int osztalyCsoportId) { var result = Dal.CustomConnection.Run(ConnectionType, h => { var dal = h.Feljegyzes(GridParameters); var ds = dal.GetFeljegyzesElektronikusUzenetekModifyPopupData(osztalyCsoportId); return ds; }); AddSzuletesiIdoFormattedColumnToDataSet(result); return result; } public DataSet GetFaliujsagBejegyzesekGrid() { var result = Dal.CustomConnection.Run(ConnectionType, h => { var dal = h.Feljegyzes(GridParameters); var ds = dal.GetFeljegyzesFaliujsagBejegyzesekData(FelhasznaloId, (int)EsemenyTipusEnum.FaliujsagBejegyzes); return ds; }); return result; } public DataSet GetFaliujsagBejegyzesekPopupGrid() { var result = Dal.CustomConnection.Run(ConnectionType, h => { var dal = h.Feljegyzes(GridParameters); var ds = dal.GetFeljegyzesFaliujsagBejegyzesekPopupData(); return ds; }); return result; } public FeljegyzesCo GetFeljegyzesById(int id) { var result = Dal.CustomConnection.Run(ConnectionType, h => { var dal = h.Feljegyzes(); var entity = dal.Get(id); var feljegyzesCo = new FeljegyzesCo(entity); return feljegyzesCo; }); return result; } public static string GetSzinezesStyle(int tipus, bool isBackgrouded) { const string fekete = "000000"; const string sotetPiros = "BF0000"; const string vilagosPiros = "FF0000"; const string zold = "70AD47"; const string sotetKek = "247E98"; const string vilagosKek = "30A8CB"; const string narancs = "DB6A00"; const string sargas = "CC9900"; string result; switch (tipus) { case (int)EsemenyTipusEnum.Na: case (int)EsemenyTipusEnum.Tajekoztatas: result = GetBeirasStyle(fekete); break; case (int)EsemenyTipusEnum.AKozossegiSzolgalatTeljesitesevelKapcsolatosAdatok: result = GetBeirasStyle(sotetKek, isBackgrouded); break; case (int)EsemenyTipusEnum.SzakmaiGyakorlatonVeszResztHatarozat: case (int)EsemenyTipusEnum.Hatarozat: case (int)EsemenyTipusEnum.Baleset: case (int)EsemenyTipusEnum.Egeszsegugyi: result = GetBeirasStyle(narancs, isBackgrouded); break; case (int)EsemenyTipusEnum.Kimaradas: case (int)EsemenyTipusEnum.Javitovizsga: case (int)EsemenyTipusEnum.Evismetles: result = GetBeirasStyle(sotetPiros, isBackgrouded); break; case (int)EsemenyTipusEnum.SzakmaiMentessegNemHivatalos: result = GetBeirasStyle(sargas, isBackgrouded); break; case (int)EsemenyTipusEnum.TorzslaponMegjelenoEgyebFeljegyzesVagyHatarozat: case (int)EsemenyTipusEnum.FeleviBizonyitvanybanMegjelenoTantestuletiFeljegyzesHatarozatDicseretFelmentesStb: case (int)EsemenyTipusEnum.EvVegiBizonyitvanybanMegjelenoTantestuletiFeljegyzesHatarozatDicseretFelmentesStb: case (int)EsemenyTipusEnum.INegyedevesBizonyitvanybanMegjelenoTantestuletiFeljegyzesHatarozatDicseretFelmentesStb: case (int)EsemenyTipusEnum.IINegyedevesBizonyitvanybanMegjelenoTantestuletiFeljegyzesHatarozatDicseretFelmentesStb: case (int)EsemenyTipusEnum.IIINegyedevesBizonyitvanybanMegjelenoTantestuletiFeljegyzesHatarozatDicseretFelmentesStb: case (int)EsemenyTipusEnum.IVNegyedevesBizonyitvanybanMegjelenoTantestuletiFeljegyzesHatarozatDicseretFelmentesStb: case (int)EsemenyTipusEnum.FeljegyzesekASzemelyiAdatokValtozasahozTorzslaponMegjelenik: result = GetBeirasStyle(vilagosKek, isBackgrouded); break; case (int)EsemenyTipusEnum.SzaktanariFigyelmeztetes: case (int)EsemenyTipusEnum.SzaktanariIntes: case (int)EsemenyTipusEnum.SzaktanariMegrovas: case (int)EsemenyTipusEnum.OsztalyfonokiFigyelmeztetes: case (int)EsemenyTipusEnum.OsztalyfonokiIntes: case (int)EsemenyTipusEnum.OsztalyfonokiMegrovas: case (int)EsemenyTipusEnum.IgazgatoiFigyelmeztetes: case (int)EsemenyTipusEnum.IgazgatoiIntes: case (int)EsemenyTipusEnum.IgazgatoiMegrovas: case (int)EsemenyTipusEnum.NapkozisNeveloiFigyelmeztetes: case (int)EsemenyTipusEnum.GyakorlatiOktatoiFigyelmeztetes: case (int)EsemenyTipusEnum.NevelotanariFigyelmeztetes: case (int)EsemenyTipusEnum.NevelotanariIntes: case (int)EsemenyTipusEnum.NevelotanariMegrovas: case (int)EsemenyTipusEnum.CsoportneveloiFigyelmeztetes: case (int)EsemenyTipusEnum.CsoportneveloiIntes: case (int)EsemenyTipusEnum.CsoportneveloiMegrovas: case (int)EsemenyTipusEnum.IgazgatohelyettesiFigyelmeztetes: case (int)EsemenyTipusEnum.IgazgatohelyettesiIntes: case (int)EsemenyTipusEnum.IgazgatohelyettesiMegrovas: case (int)EsemenyTipusEnum.NevelotestuletiFigyelmeztetes: case (int)EsemenyTipusEnum.NevelotestuletiIntes: case (int)EsemenyTipusEnum.NevelotestuletiMegrovas: case (int)EsemenyTipusEnum.IgazgatoiSzigoruMegrovas: case (int)EsemenyTipusEnum.FigyelmeztetesKozossegiProgramrolValoTavolmaradasMiatt: case (int)EsemenyTipusEnum.SzaktanariTanulmanyiFigyelmeztetes: case (int)EsemenyTipusEnum.IntezmenyvezetoiFigyelmeztetes: case (int)EsemenyTipusEnum.IntezmenyvezetoiIntes: case (int)EsemenyTipusEnum.TagozatvezetoiFigyelmeztetes: case (int)EsemenyTipusEnum.TagozatvezetoiIntes: case (int)EsemenyTipusEnum.KollegiumvezetoiFigyelmeztetes: case (int)EsemenyTipusEnum.KollegiumvezetoiIntes: case (int)EsemenyTipusEnum.SzakoktatoiFigyelmeztetes: result = GetBeirasStyle(sotetPiros); break; case (int)EsemenyTipusEnum.Fegyelmi: case (int)EsemenyTipusEnum.FigyelmeztetesBukasraAllasrol: case (int)EsemenyTipusEnum.FigyelmeztetesGyengeTanulmanyiTeljesitmenyrol: case (int)EsemenyTipusEnum.MegrovasFegyelmiBuntetes: case (int)EsemenyTipusEnum.SzigoruMegrovasFegyelmiBuntetes: case (int)EsemenyTipusEnum.MeghatarozottKedvezmenyekJuttatasokCsokkenteseMegvonasaFegyelmiBuntetes: case (int)EsemenyTipusEnum.AthelyezesMasikOsztalybaTanulocsoportbaVagyIskolabaFegyelmiBuntetes: case (int)EsemenyTipusEnum.AthelyezesMasikSzobabaTanulocsoportbaFegyelmiBuntetes: case (int)EsemenyTipusEnum.EltiltasAzAdottIskolabanATanevFolytatasatolFegyelmiBuntetes: case (int)EsemenyTipusEnum.KizarasAzIskolabolFegyelmiBuntetes: case (int)EsemenyTipusEnum.KizarasFegyelmiBuntetes: case (int)EsemenyTipusEnum.IntezmenyvezetoiMegrovas: result = GetBeirasStyle(vilagosPiros); break; case (int)EsemenyTipusEnum.Dicseret: case (int)EsemenyTipusEnum.SzaktanariDicseret: case (int)EsemenyTipusEnum.OsztalyfonokiDicseret: case (int)EsemenyTipusEnum.IgazgatoiDicseret: case (int)EsemenyTipusEnum.SzakoktatoiDicseret: case (int)EsemenyTipusEnum.SzaktargyiDicseret: case (int)EsemenyTipusEnum.AltalanosTanulmanyiDicseret: case (int)EsemenyTipusEnum.DiakonkormanyzatVezetoiDicseret: case (int)EsemenyTipusEnum.NevelotanariDicseret: case (int)EsemenyTipusEnum.CsoportneveloiDicseret: case (int)EsemenyTipusEnum.IgazgatohelyettesiDicseret: case (int)EsemenyTipusEnum.IntezmenyvezetoiDicseret: case (int)EsemenyTipusEnum.NevelotestuletiDicseret: case (int)EsemenyTipusEnum.KollegiumvezetoiDicseret: result = GetBeirasStyle(zold); break; case (int)EsemenyTipusEnum.Felszereleshiany: case (int)EsemenyTipusEnum.HaziFeladatHiany: case (int)EsemenyTipusEnum.ElsoFigyelmeztetesKesesekMiatt: result = GetBeirasStyle(narancs); break; case (int)EsemenyTipusEnum.ElektronikusUzenet: case (int)EsemenyTipusEnum.FaliujsagBejegyzes: result = GetBeirasStyle(vilagosKek); break; default: result = GetBeirasStyle(fekete); break; } return result; } private static string GetBeirasStyle(string colorCode, bool isBackgrouded = false) { var style = isBackgrouded ? $"color: #FFFFFF; background-color: #{colorCode}; " : $"color: #{colorCode}; "; return style; } public void DeleteFeljegyzes(int id) { Dal.CustomConnection.Run(ConnectionType, h => { var feljegyzes = h.Feljegyzes().Get(id); if (feljegyzes.Tipus == (int)EsemenyTipusEnum.ElektronikusUzenet || feljegyzes.Tipus == (int)EsemenyTipusEnum.FaliujsagBejegyzes) { DeleteElektronikusUzenetOrFaliujsagBejegyzes(h, id); } else { var tanulo = feljegyzes.Tanulo.Single(); DeleteBeiras(h, id, tanulo.ID); } }); } public void DeleteOsztalyCsoport(List feljegyzesDeleteOsztalyCsoportCOList) { Dal.CustomConnection.Run(ConnectionType, h => { var dal = h.Feljegyzes(); foreach (var deleteItem in feljegyzesDeleteOsztalyCsoportCOList) { var entity = dal.Get(deleteItem.FeljegyzesId); dal.RemoveOsztalyCsoport(entity, deleteItem.OsztalyCsoportId); dal.FullUpdate(entity); if (!entity.OsztalyCsoport.Any()) { dal.DeleteFeljegyzes(deleteItem.FeljegyzesId); } } }); } private void DeleteBeiras(IDalHandler h, int id, int tanuloId) { h.Feljegyzes().DeleteBeiras(id, tanuloId); } public void DeleteBeiras(int id, int tanuloId) { Dal.CustomConnection.Run(ConnectionType, h => { DeleteBeiras(h, id, tanuloId); }); } private void DeleteElektronikusUzenetOrFaliujsagBejegyzes(IDalHandler h, int id) { h.Feljegyzes().DeleteFeljegyzes(id); } public void DeleteElektronikusUzenetOrFaliujsagBejegyzes(int id) { Dal.CustomConnection.Run(ConnectionType, h => { DeleteElektronikusUzenetOrFaliujsagBejegyzes(h, id); }); } public void DeleteElektronikusUzenetForTanulo(int id, int tanuloId) { Dal.CustomConnection.Run(ConnectionType, h => h.Feljegyzes().DeleteElektronikusUzenetForTanulo(id, tanuloId)); } /// INFO @DevKornel: Mobil használja internal List SaveAutomatikusFeljegyzesek(IDalHandler h, MulasztasokCo mulasztasokCo, int tantargyId, ITanitasiOra tanitasiOra) { var createdFeljegyzesList = new List(); var tanuloId = mulasztasokCo.TanuloId.Value; if (mulasztasokCo.HazifeladatHianyId.HasValue) { if (!mulasztasokCo.HazifeladatHiany) { DeleteBeiras(h, mulasztasokCo.HazifeladatHianyId.Value, tanuloId); } } else if (mulasztasokCo.HazifeladatHiany) { createdFeljegyzesList.AddRange(SaveFeljegyzes(GetAutomatikusFeljegyzesCo(h, (int)EsemenyTipusEnum.HaziFeladatHiany, tanuloId, tantargyId, tanitasiOra, OrarendResource.HazifeladatHiany, OrarendResource.HazifeladatHianyEsemenyTartalom), tanitasiOra.IntezmenyId)); } if (mulasztasokCo.FelszerelesHianyId.HasValue) { if (!mulasztasokCo.FelszerelesHiany) { DeleteBeiras(h, mulasztasokCo.FelszerelesHianyId.Value, tanuloId); } } else if (mulasztasokCo.FelszerelesHiany) { createdFeljegyzesList.AddRange(SaveFeljegyzes(GetAutomatikusFeljegyzesCo(h, (int)EsemenyTipusEnum.Felszereleshiany, tanuloId, tantargyId, tanitasiOra, OrarendResource.FelszerelesHiany, OrarendResource.FelszerelesHianyEsemenyTartalom), tanitasiOra.IntezmenyId)); } if (mulasztasokCo.FelmentesId.HasValue) { if (!mulasztasokCo.Felmentes) { DeleteBeiras(h, mulasztasokCo.FelmentesId.Value, tanuloId); } } else if (mulasztasokCo.Felmentes) { createdFeljegyzesList.AddRange(SaveFeljegyzes(GetAutomatikusFeljegyzesCo(h, (int)EsemenyTipusEnum.SzakmaiMentessegNemHivatalos, tanuloId, tantargyId, tanitasiOra, OrarendResource.Felmentes, OrarendResource.FelmentesEsemenyTartalom), tanitasiOra.IntezmenyId)); } if (mulasztasokCo.TanoraiDicseretId.HasValue) { if (!mulasztasokCo.TanoraiDicseret) { DeleteBeiras(h, mulasztasokCo.TanoraiDicseretId.Value, tanuloId); } } else if (mulasztasokCo.TanoraiDicseret) { createdFeljegyzesList.AddRange(SaveFeljegyzes(GetAutomatikusFeljegyzesCo(h, (int)EsemenyTipusEnum.Dicseret, tanuloId, tantargyId, tanitasiOra, OrarendResource.TanoraiDicseret, OrarendResource.TanoraiDicseretEsemenyTartalom), tanitasiOra.IntezmenyId)); } return createdFeljegyzesList; } /// INFO @DevKornel: Mobil használja private FeljegyzesCo GetAutomatikusFeljegyzesCo(IDalHandler h, int esemenytipus, int tanuloId, int tantargyId, ITanitasiOra tanitasiOra, string targy, string tartalom) { var tantargy = h.Tantargy().GetTantargy(tantargyId); var feljegyzesCo = new FeljegyzesCo { Id = null, FeljegyzoId = tanitasiOra.OraTulajdonosId, FeljegyzoNev = null, Kezdete = null, IsFaliujsagMegjelenes = false, IsMindenkinek = false, Megjegyzes = null, OsztalyCsoportIdList = new List(), EsemenyDatuma = tanitasiOra.Datum, TanitasiOraId = tanitasiOra.ID, TantargyId = tantargyId, TanuloIdList = new List { tanuloId }, Targy = targy, Tartalom = string.Format(tartalom, char.ToUpper(tantargy.Nev[0]) + tantargy.Nev.Substring(1)), Tipus = esemenytipus, Vege = null }; return feljegyzesCo; } /// TODO @devKornel: Ha elkészül, hogy osztály/csoport helyett tanulóhoz legyen rögzítve egy faliújság entitás, akkor meg kell vizsgálni a T_TANULOESEMENY.C_ISERTESITESELKULDVE mezőt a db-ben /// INFO @DevKornel: Mobil használja public List SaveFeljegyzes(FeljegyzesCo co, int? intezmenyId = null, bool isBeiras = false) { var createdFeljegyzesList = new List(); if (co.TanuloIdList.Count == 0 && co.OsztalyCsoportIdList.Count == 0) /// TODO devKornel: Szerintem xnor kellene, vagy tanulóhoz vagy oszt/csop-hoz rögzítjük { var exception = new KretaException(FeljegyzesekResource.ERRORHianyzoTanuloEsVagyOsztaly); SDAServer.Instance.Logger.ExceptionThrown(exception); throw exception; } Dal.CustomConnection.Run(ConnectionType, h => { var dal = h.Feljegyzes(); var isNew = !co.Id.IsEntityId(); //NOTE: Az IsEntityId vizsgálat miatt nem lehet az Id null! var entity = isNew ? dal.Get() : dal.Get(co.Id.Value); int? oldTipusId = null; if (co.Id.IsEntityId()) { oldTipusId = entity.Tipus; } entity.FaliujsagMegjelenes = co.IsFaliujsagMegjelenes; entity.Mindenkinek = co.IsMindenkinek; entity.Megjegyzes = co.Megjegyzes; //NOTE: A EsemenyDatuma nem lehet null, ha mégis, akkor ott hibás a működés! entity.EsemenyDatuma = co.EsemenyDatuma.Value; if (co.TanitasiOraId != null) { entity.TanitasiOraId = co.TanitasiOraId.Value; if (co.TantargyId != null) { entity.TantargyId = co.TantargyId.Value; } else if (entity.Tantargy != null) { entity.Tantargy = null; } } else if (entity.TanitasiOra != null) { entity.TanitasiOra = null; } entity.Targy = co.Targy; entity.Tartalom = co.Tartalom.ReplaceMultipleSpacesAndTrim(); if (entity.FaliujsagMegjelenes ?? false) { entity.Tartalom = CommonUtils.CreateLinksInText(entity.Tartalom); } //NOTE: A Tipus nem lehet null, ha mégis, akkor ott hibás a működés! entity.Tipus = co.Tipus.Value; entity.Kezdete = co.Kezdete; entity.Vege = co.Vege; if (entity.IntezmenyId == -1 && intezmenyId.HasValue) { entity.IntezmenyId = intezmenyId.Value; } entity.BeirasTanuloId = co.TanuloIdList?.Count == 1 ? co.TanuloIdList.Single() : -1; entity.BeirasOsztalycsoportId = co.BeirasOsztalyCsoportId ?? -1; var coTanuloIdList = co.TanuloIdList; var coOsztalyCsoportIdList = co.OsztalyCsoportIdList; if (isNew) { entity.FeljegyzoId = co.FeljegyzoId ?? FelhasznaloId; if (isBeiras) { //NOTE: Beírások esetén a rögzítés kori osztály id nem lehet null, ha mégis, akkor ott hibás a működés! entity.RogziteskoriOsztalyId = GetRogziteskoriOsztalyId(co, h); } dal.Insert(entity); foreach (var id in coTanuloIdList) { dal.AddTanulo(entity, id); createdFeljegyzesList.Add(new CreatedTanuloFeljegyzesCo(id, entity)); } foreach (var id in coOsztalyCsoportIdList) { dal.AddOsztalyCsoport(entity, id); } } else { var entityTanuloIdList = entity.Tanulo.Select(x => x.ID).ToList(); var addedTanuloIdList = coTanuloIdList.Except(entityTanuloIdList).ToList(); var removedTanuloIdList = entityTanuloIdList.Except(coTanuloIdList).ToList(); foreach (var id in addedTanuloIdList) { dal.AddTanulo(entity, id); createdFeljegyzesList.Add(new CreatedTanuloFeljegyzesCo(id, entity)); } foreach (var id in removedTanuloIdList) { dal.RemoveTanulo(entity, id); } var entityOsztalyCsoportIdList = entity.OsztalyCsoport.Select(x => x.ID).ToList(); var addedOsztalyCsoportIdList = coOsztalyCsoportIdList.Except(entityOsztalyCsoportIdList).ToList(); var removedOsztalyCsoportIdList = entityOsztalyCsoportIdList.Except(coOsztalyCsoportIdList).ToList(); foreach (var id in addedOsztalyCsoportIdList) { dal.AddOsztalyCsoport(entity, id); } foreach (var id in removedOsztalyCsoportIdList) { dal.RemoveOsztalyCsoport(entity, id); } dal.FullUpdate(entity); } if (Constants.NyelvesitendoEsemenyTipuslist.Contains(co.Tipus.Value)) { UpdateBeirasNyelvLogic(h, entity, co.TartalomNemet, co.TartalomHorvat, co.TartalomRoman, co.TartalomSzerb); } if (oldTipusId.HasValue && Constants.NyelvesitendoEsemenyTipuslist.Contains(oldTipusId.Value) && !Constants.NyelvesitendoEsemenyTipuslist.Contains(co.Tipus.Value)) { dal.DeleteBeirasNyelv(entity.ID); } }); return createdFeljegyzesList; } private static void UpdateBeirasNyelvLogic(IDalHandler h, ITanuloEsemeny entity, string tartalomNemet, string tartalomHorvat, string tartalomRoman, string tartalomSzerb) { if (!string.IsNullOrWhiteSpace(tartalomNemet)) { UpdateBeirasNyelv(h, entity, AnyanyelvEnum.nemet, tartalomNemet); } if (!string.IsNullOrWhiteSpace(tartalomHorvat)) { UpdateBeirasNyelv(h, entity, AnyanyelvEnum.horvat, tartalomHorvat); } if (!string.IsNullOrWhiteSpace(tartalomRoman)) { UpdateBeirasNyelv(h, entity, AnyanyelvEnum.roman, tartalomRoman); } if (!string.IsNullOrWhiteSpace(tartalomSzerb)) { UpdateBeirasNyelv(h, entity, AnyanyelvEnum.szerb, tartalomSzerb); } } private static void UpdateBeirasNyelv(IDalHandler h, ITanuloEsemeny entity, AnyanyelvEnum nyelvEnum, string tartalom) { var nyelvEntity = entity.TanuloEsemenyNyelv.FirstOrDefault(x => x.NyelvId == (int)nyelvEnum && !x.Torolt); if (nyelvEntity != null) { var handler = h.Feljegyzes(); nyelvEntity.Tartalom = tartalom; nyelvEntity.NyelvId = (int)nyelvEnum; handler.UpdateBeirasNyelv(nyelvEntity); } else { InsertBeirasNyelv(h, entity, nyelvEnum, tartalom); } } private static void InsertBeirasNyelv(IDalHandler h, ITanuloEsemeny entity, AnyanyelvEnum nyelvEnum, string tartalom) { var handler = h.Feljegyzes(); var nyelvEntity = handler.GetBeirasNyelv(); nyelvEntity.NyelvId = (int)nyelvEnum; nyelvEntity.Tartalom = tartalom; nyelvEntity.TanuloEsemenyId = entity.ID; nyelvEntity.IntezmenyId = entity.IntezmenyId; nyelvEntity.TanevId = entity.TanevId; handler.InsertBeirasNyelv(nyelvEntity); } public FeljegyzesHelperCo GetFeljegyzesHelperCo() { TanevCO tanevCo; var helper = new TanevHelper(ConnectionType); tanevCo = helper.GetTanevInfo(); var elsoTanitasiNap = tanevCo.OraFelvetelKezdete.Date; var utolsoNap = tanevCo.UtolsoNap.Date; var feljegyzesHelperCo = new FeljegyzesHelperCo { ElsoTanitasiNap = elsoTanitasiNap, MinimumErvenyessegKezdete = elsoTanitasiNap, MaximumErvenyessegVege = utolsoNap }; var today = DateTime.Today; if (today < elsoTanitasiNap) { feljegyzesHelperCo.DefaultEsemenyDatuma = elsoTanitasiNap; } else if (utolsoNap < today) { feljegyzesHelperCo.DefaultEsemenyDatuma = utolsoNap; } else { feljegyzesHelperCo.DefaultEsemenyDatuma = today; } if (utolsoNap < today) { feljegyzesHelperCo.MaximumErvenyessegKezdete = utolsoNap; } else if (today < elsoTanitasiNap) { feljegyzesHelperCo.MaximumErvenyessegKezdete = elsoTanitasiNap; } else { feljegyzesHelperCo.MaximumErvenyessegKezdete = today; } if (utolsoNap < today) { feljegyzesHelperCo.MinimumErvenyessegVege = utolsoNap; } else if (today < elsoTanitasiNap) { feljegyzesHelperCo.MinimumErvenyessegVege = elsoTanitasiNap; } else { feljegyzesHelperCo.MinimumErvenyessegVege = today; } return feljegyzesHelperCo; } public DataSet GetKozossegiSzolgalatokGrid(KozossegiSzolgalatokSearchCo co) { var ds = Dal.CustomConnection.Run(ConnectionType, h => h.TanuloKozossegiSzolgalat(GridParameters).GetKozossegiSzolgalatokData(IntezmenyId, KozossegiSzolgalatokSearchCoToPco(co))); AddSzuletesiIdoFormattedColumnToDataSet(ds); return ds; } public DataSet GetKozossegiSzolgalatokReszletekForGrid(int tanuloId, bool toroltElemek, bool hasTeljesTorlesJog) { var ds = Dal.CustomConnection.Run(ConnectionType, h => h.TanuloKozossegiSzolgalat(GridParameters).GetKozossegiSzolgalatokReszletek(IntezmenyId, TanevId, tanuloId, FelhasznaloId, toroltElemek, new KozossegiSzolgalatokSearchPco())); var dt = ds.Tables[0]; dt.Columns.Add("Torolheto_BOOL"); foreach (DataRow row in dt.Rows) { var modosithato = SDAConvert.ToBoolean(row["Modosithato_BOOL"]); row.SetField("Modosithato", modosithato ? 'T' : 'F'); row.SetField("Modosithato_BOOL", modosithato); row.SetField("Torolheto_BOOL", modosithato || hasTeljesTorlesJog); } return ds; } public DataSet GetKozossegiSzolgalatokReszletekForGrid(int tanuloId, KozossegiSzolgalatokSearchCo kozossegiSzolgalatKereso, int felhasznalo, bool toroltElemek, bool hasTeljesTorlesJog) { var ds = Dal.CustomConnection.Run(ConnectionType, h => h.TanuloKozossegiSzolgalat(GridParameters).GetKozossegiSzolgalatokReszletek(IntezmenyId, TanevId, tanuloId, felhasznalo, toroltElemek, KozossegiSzolgalatokSearchCoToPco(kozossegiSzolgalatKereso))); return ds; } public MemoryStream GetTanulokKozossegiSzolgalatExcelExport(KozossegiSzolgalatokSearchCo seachModel, bool toroltElemek) { return Dal.CustomConnection.Run(ConnectionType, h => { var dal = h.TanuloKozossegiSzolgalat(); var dataSet = dal.GetKozossegiSzolgalatokReszletek(IntezmenyId, TanevId, -1, -1, toroltElemek, KozossegiSzolgalatokSearchCoToPco(seachModel)); var dtCloned = dataSet.Clone(); dtCloned.Tables[0].Columns[1].DataType = typeof(string); dtCloned.Tables[0].Columns[2].DataType = typeof(string); dtCloned.Tables[0].Columns[3].DataType = typeof(string); foreach (DataRow row in dataSet.Tables[0].Rows) { dtCloned.Tables[0].ImportRow(row); } foreach (DataRow row in dtCloned.Tables[0].Rows) { row["IntervallumKezdete"] = DateTime.Parse(row["IntervallumKezdete"].ToString()).ToShortDateString(); row["IntervallumVege"] = DateTime.Parse(row["IntervallumVege"].ToString()).ToShortDateString(); row["RogzitesDatuma"] = DateTime.Parse(row["RogzitesDatuma"].ToString()).ToShortDateString(); } ExportLogic.TryCreateHeaderIfNotExist(dtCloned.Tables[0]); var stream = new MemoryStream(); using (var excel = new ExcelPackage(stream)) { var workSheet = excel.Workbook.Worksheets.Add(FeljegyzesekResource.KozossegiSzolgalat); (string nameFrom, string nameTo, Type type)[] map = new[] { ("TanuloNev", FeljegyzesekResource.TanuloNeve, typeof(string)), ("OsztalyNev", FeljegyzesekResource.OsztalyNev, typeof(string)), ("IntervallumKezdete", FeljegyzesekResource.IntervallumKezdete, typeof(string)), ("IntervallumVege", FeljegyzesekResource.IntervallumVege, typeof(string)), ("TeljesitesiHelye", FeljegyzesekResource.IntezmenyNeve, typeof(string)), ("Oraszam", FeljegyzesekResource.Oraszam, typeof(string)), ("KozossegiSzolgalatTipusa_DNAME", FeljegyzesekResource.Tevekenyseg, typeof(string)), ("Megjegyzes", FeljegyzesekResource.Megjegyzes, typeof(string)), ("RogzitesDatuma", FeljegyzesekResource.RogzitesDatuma, typeof(string)) }; workSheet.Cells[1, 1].LoadFromDataTable(ExportLogic.MapDataTable(dtCloned.Tables[0], map), true); ExportLogic.SetHeaderStyles(workSheet.Cells[1, 1, 1, map.Length]); workSheet.Cells.AutoFitColumns(); excel.Save(); } stream.Position = 0; return stream; }); } public KozossegiSzolgalatCo GetKozossegiSzolgalatById(int id) { var result = Dal.CustomConnection.Run(ConnectionType, h => { var dal = h.TanuloKozossegiSzolgalat(); var entity = dal.Get(id); var kozossegiSzolgalatCo = new KozossegiSzolgalatCo(entity); return kozossegiSzolgalatCo; }); return result; } public void DeleteKozossegiSzolgalat(int id) { Dal.CustomConnection.Run(ConnectionType, h => h.TanuloKozossegiSzolgalat().Delete(id)); } public void SaveKozossegiSzolgalat(KozossegiSzolgalatCo co) { Dal.CustomConnection.Run(ConnectionType, h => { var dal = h.TanuloKozossegiSzolgalat(); var isNew = !co.Id.IsEntityId(); var entity = isNew ? dal.Get() : dal.Get(co.Id.Value); entity.IntervallumKezdete = co.IntervallumKezdete; entity.IntervallumVege = co.IntervallumVege; entity.Megjegyzes = co.Megjegyzes; entity.Oraszam = co.Oraszam; entity.TeljesitesiHelye = co.TeljesitesiHelye; entity.KozossegiSzolgalatTipusa = co.KozossegiSzolgalatTipusa; entity.RogzitesDatum = co.RogzitesDatuma; if (isNew) { entity.TanuloId = co.TanuloId; entity.FeljegyzoId = FelhasznaloId; dal.Insert(entity); } else { dal.FullUpdate(entity); } UpdateKozosossegiSzolgalatNyelvLogic(h, entity, co.MegjegyzesNemet, co.MegjegyzesHorvat, co.MegjegyzesRoman, co.MegjegyzesSzerb, co.TeljesitesiHelyeNemet, co.TeljesitesiHelyeHorvat, co.TeljesitesiHelyeRoman, co.TeljesitesiHelyeSzerb); }); } private static void UpdateKozosossegiSzolgalatNyelvLogic(IDalHandler h, ITanuloKozossegiSzolgalat entity, string megjegyzesNemet, string megjegyzesHorvat, string megjegyzesRoman, string megjegyzesSzerb, string teljesitesHelyeNemet, string teljesitesHelyeHorvat, string teljesitesHelyeRoman, string teljesitesHelyeSzerb) { if (!string.IsNullOrWhiteSpace(megjegyzesNemet) || !string.IsNullOrWhiteSpace(teljesitesHelyeNemet)) { UpdateKozosossegiSzolgalatNyelv(h, entity, AnyanyelvEnum.nemet, megjegyzesNemet, teljesitesHelyeNemet); } if (!string.IsNullOrWhiteSpace(megjegyzesHorvat) || !string.IsNullOrWhiteSpace(teljesitesHelyeHorvat)) { UpdateKozosossegiSzolgalatNyelv(h, entity, AnyanyelvEnum.horvat, megjegyzesHorvat, teljesitesHelyeHorvat); } if (!string.IsNullOrWhiteSpace(megjegyzesRoman) || !string.IsNullOrWhiteSpace(teljesitesHelyeRoman)) { UpdateKozosossegiSzolgalatNyelv(h, entity, AnyanyelvEnum.roman, megjegyzesRoman, teljesitesHelyeRoman); } if (!string.IsNullOrWhiteSpace(megjegyzesSzerb) || !string.IsNullOrWhiteSpace(teljesitesHelyeSzerb)) { UpdateKozosossegiSzolgalatNyelv(h, entity, AnyanyelvEnum.szerb, megjegyzesSzerb, teljesitesHelyeSzerb); } } private static void UpdateKozosossegiSzolgalatNyelv(IDalHandler h, ITanuloKozossegiSzolgalat entity, AnyanyelvEnum nyelvEnum, string megjegyzes, string teljesitesHelye) { var nyelvEntity = entity.TanuloKozossegiSzolgalatNyelv.FirstOrDefault(x => x.NyelvId == (int)nyelvEnum && !x.Torolt); if (nyelvEntity != null) { var handler = h.TanuloKozossegiSzolgalat(); nyelvEntity.Megjegyzes = megjegyzes; nyelvEntity.TeljesitesiHelye = teljesitesHelye; nyelvEntity.NyelvId = (int)nyelvEnum; handler.UpdateKozossegiSzolgalatNyelv(nyelvEntity); } else { InsertKozosossegiSzolgalatNyelv(h, entity, nyelvEnum, megjegyzes, teljesitesHelye); } } private static void InsertKozosossegiSzolgalatNyelv(IDalHandler h, ITanuloKozossegiSzolgalat entity, AnyanyelvEnum nyelvEnum, string megjegyzes, string teljesitesHelye) { var handler = h.TanuloKozossegiSzolgalat(); var nyelvEntity = handler.GetKozossegiSzolgalatNyelv(); nyelvEntity.NyelvId = (int)nyelvEnum; nyelvEntity.Megjegyzes = megjegyzes; nyelvEntity.TeljesitesiHelye = teljesitesHelye; nyelvEntity.TanuloKozossegiSzolgalatId = entity.ID; nyelvEntity.IntezmenyId = entity.IntezmenyId; nyelvEntity.TanevId = entity.TanevId; handler.InsertKozossegiSzolgalatNyelv(nyelvEntity); } public double GetKozossegiSzolgalatOsszesOraszam(int tanuloId) { var result = Dal.CustomConnection.Run(ConnectionType, (h) => { var dal = h.Tanulo(); return dal.GetKozossegiSzolgalatOsszesOraszam(IntezmenyId, tanuloId); }); return result; } private DataSet GetTanuloFeljegyzesei(IDalHandler h, int tanuloId, OktNevelesiKategoriaEnum? feladatKategoria = null) { var dal = h.Feljegyzes(GridParameters); var dataSet = dal.GetTanuloFeljegyzesei(tanuloId, feladatKategoria: feladatKategoria); return dataSet; } public DataSet GetTanuloFelhasznaloFeljegyzesei(int tanuloId) { return Dal.CustomConnection.Run(ConnectionType, h => { var dataTable = GetTanuloFeljegyzesei(h, tanuloId).Tables[0]; new FeljegyzesLogic(new DalHandlerConnectionType(ConnectionType, h)).RemoveHiddenRowsFromFeljegyzesDataSet(dataTable, "Tipus", tanuloId); var dataSet = new DataSet(); dataSet.Tables.Add(dataTable.DefaultView.ToTable()); return dataSet; }); } public List GetTanuloiFeljegyzesekItemList(int tanuloId) { var dataSet = Dal.CustomConnection.Run(ConnectionType, dalHandler => GetTanuloFeljegyzesei(dalHandler, tanuloId)); var result = new List(); if (dataSet?.Tables[0].Rows.Count > 0) { foreach (DataRow dataRow in dataSet.Tables[0].Rows) { var item = new TanuloiFeljegyzesekItemCo(dataRow); result.Add(item); } } return result; } public KozossegiSzolgalatokSearchPco KozossegiSzolgalatokSearchCoToPco(KozossegiSzolgalatokSearchCo co) { var pco = new KozossegiSzolgalatokSearchPco { IntervallumKezdete = co.IntervallumKezdete, IntervallumVege = co.IntervallumVege, TeljesitesiHelye = co.TeljesitesiHelye, Oraszam = co.Oraszam, TanuloNev = co.TanuloNev, OsztalyNev = co.OsztalyNev, KozossegiSzolgalatTipusa = co.KozossegiSzolgalatTipusa, AnyjaNeve = co.AnyjaNeve, OsszesOraszamKezdete = co.OsszesOraszamKezdete, OsszesOraszamVege = co.OsszesOraszamVege, OsztalyCsoportIdList = co.OsztalyCsoportIdList, TanuloIdList = new List() }; if (co.TanuloIdList != null && co.TanuloIdList.Count > 0) pco.TanuloIdList.AddRange(co.TanuloIdList); return pco; } public static List GetExcelData(DataSet ds) { var data = new List(); foreach (DataTable dt in ds.Tables) { var excelItem = new ExcelExportItem(); for (var i = 0; i < dt.Columns.Count; i++) { var headerText = dt.Columns[i].ToString(); uint? headerFormatId = null; if (headerText.IndexOf("$@") >= 0) { var headerTextSplits = System.Text.RegularExpressions.Regex.Split(headerText, "[$][@]"); headerText = headerTextSplits[0]; uint tempHeaderFormatId = 0; uint.TryParse(headerTextSplits[1], out tempHeaderFormatId); headerFormatId = tempHeaderFormatId; } excelItem.AddColumn(i, headerText, headerFormatId); } for (var i = 0; i < dt.Rows.Count; i++) { for (var j = 0; j < dt.Columns.Count; j++) { var dtValue = dt.Rows[i][j]; var valuetype = DocumentFormat.OpenXml.Spreadsheet.CellValues.SharedString; if (dt.Columns[j].ColumnName == FeljegyzesekResource.Oraszam || dt.Columns[j].ColumnName == FeljegyzesekResource.OsszesOraszam) { valuetype = DocumentFormat.OpenXml.Spreadsheet.CellValues.Number; dtValue = double.Parse(string.Format("{0:0.00}", dtValue)); } excelItem.AddCell(i + 2, j, dtValue, null, valuetype); } } if (dt != ds.Tables[0]) { excelItem.AddCell(dt.Rows.Count + 2, 0, "Összesen:"); excelItem.AddCell(dt.Rows.Count + 2, 4, null, formula: $"SUM(E2:E{dt.Rows.Count + 1})", valuetype: DocumentFormat.OpenXml.Spreadsheet.CellValues.Number); } excelItem.SheetCaption = dt.TableName; data.Add(excelItem); } return data; } public string IsTanuloTagjaOsztalyCsoportnakByEsemenyDatum(FeljegyzesCo co) { if (!co.RogziteskoriOsztalyId.HasValue) { throw new ArgumentNullException(); } return Dal.CustomConnection.Run(ConnectionType, (h) => { var osztalyCsoportDal = h.OsztalyCsoport(); var tanuloOsztalyCsoportjaiEsemenyNapjan = osztalyCsoportDal.GetTanuloOsztalyCsoportjaiIdList(co.TanuloIdList[0], co.EsemenyDatuma); if (!tanuloOsztalyCsoportjaiEsemenyNapjan.Contains(co.RogziteskoriOsztalyId.Value)) { var tanuloNeve = h.Tanulo().Get(co.TanuloIdList[0]).NyomtatasiNev; var formazottDatum = co.EsemenyDatuma.Value.ToString(Constants.ToStringPattern.HungarianDateWithSpaces); var osztalyCsoportNeve = osztalyCsoportDal.Get(co.RogziteskoriOsztalyId.Value).Nev; var osztalyVagyCsoport = osztalyCsoportDal.GetIsOsztaly(co.RogziteskoriOsztalyId.Value) ? OsztalyCsoportResource.Osztaly : OsztalyCsoportResource.Csoport; return string.Format(OsztalyCsoportResource.ATanuloDatumonNemTagjaAzOsztalyCsoportnak, tanuloNeve, formazottDatum, osztalyCsoportNeve, osztalyVagyCsoport); } return null; }); } private int GetRogziteskoriOsztalyId(FeljegyzesCo co, IDalHandler h) { var osztalyCsoportHelper = new OsztalyCsoportHelper(new DalHandlerConnectionType(ConnectionType, h)); var csoportHelper = new CsoportHelper(new DalHandlerConnectionType(ConnectionType, h)); if (!co.RogziteskoriOsztalyId.HasValue) { throw new ArgumentNullException(); } if (osztalyCsoportHelper.IsOsztaly(co.RogziteskoriOsztalyId.Value)) { return co.RogziteskoriOsztalyId.Value; } var bontasId = csoportHelper.GetCsoportOsztalyBontasId(co.RogziteskoriOsztalyId.Value); if (bontasId.IsEntityId()) { return bontasId.Value; } var osztalyByCsoportAndDatum = csoportHelper.GetTanuloOsztalyByCsoportAndDatum(co.RogziteskoriOsztalyId.Value, co.EsemenyDatuma.Value); var osztalyList = osztalyByCsoportAndDatum.Tables[0].AsEnumerable().Where(x => x.Field("C_TANULOID") == co.TanuloIdList[0]).Select(x => x.Field("ID")).ToList(); if (osztalyList.Count != 1) { // AMI esetén nem kell kitölteni return -1; } return osztalyList[0]; } private void FilterFeljegyzesBySzervezetTipusEnumId(IDalHandler dalHandler, ref DataSet ds, int? szervezetTipusEnumId) { // NOTE: Ha várunk szervezetet if (szervezetTipusEnumId.IsEntityId()) { var szervezetHelper = new SzervezetHelper(new DalHandlerConnectionType(ConnectionType, dalHandler)); var alkalmazottSzervezetId = szervezetHelper.GetAlkalmazottSzervezetId(FelhasznaloId); var lathatoSzervezetIdList = szervezetHelper.GetLathatoSzervezetIdList(alkalmazottSzervezetId, SzervezetAdatokHalmazaEnum.SzervezetEsAlSzervezetek); ds.Tables[0].Rows.Cast().Where(dataRow => { var szervezetId = SDAConvert.ToNullableInt32(dataRow["FeljegyzoSzervezetId"]); // NOTE: ha a sornak van feljegyző szervezetId-ja if (szervezetId.IsEntityId()) { // NOTE: akkor nem törlendő a sor, ha benne van a látható szervezetek listájában return !lathatoSzervezetIdList.Contains(szervezetId.Value); } // NOTE: egyébként törlendő a sor return true; }).ToList().ForEach(r => r.Delete()); } // NOTE: ha nem várunk szervezetet else { ds.Tables[0].Rows.Cast().Where(dataRow => { var szervezetId = SDAConvert.ToNullableInt32(dataRow["FeljegyzoSzervezetId"]); // NOTE: akkor törlendő, ha a soron van feljegyző szervezetId return szervezetId.IsEntityId(); }).ToList().ForEach(r => r.Delete()); } ds.AcceptChanges(); } private void FilterFeljegyzesNaploNezetBySzervezetTipusEnumId(IDalHandler dalHandler, ref DataSet ds, int? szervezetTipusEnumId) { var szervezetHelper = new SzervezetHelper(new DalHandlerConnectionType(ConnectionType, dalHandler)); var alkalmazottSzervezetId = szervezetHelper.GetAlkalmazottSzervezetId(FelhasznaloId); // NOTE: Napló nézetben minden tanulónak meg kell jelennie attól függetlenül, hogy van-e rá vonatkozó elektronikus üzenet, // ezért nem jó szervezetId-val szűrni, mert az ilyen tanulók NULL-os tanulóesemenéy adatokkal és NULL-os feljegyző // szervezetId-val szerepel a DataSet-ben // Ezért csoportosítjuk a sorokat tanulónként, végig megyünk minden csoporton ds.Tables[0].AsEnumerable().GroupBy(x => x["TanuloId"]).ToList().ForEach(group => { // NOTE: Így vagy eltörlünk egy sort, vagy módosítunk, vagy marad ahogy van. var dataRowList = group.ToList(); dataRowList.Where(dataRow => { // NOTE: Kivesszük a sorból a feljegyző szervezetId-ját és tanulóesemény ID-ját. var szervezetId = SDAConvert.ToNullableInt32(dataRow["FeljegyzoSzervezetId"]); var tanuloEsemenyId = SDAConvert.ToNullableInt32(dataRow["ID"]); // NOTE: Ha a tanuló csoportjában csak egyetlen sor van, if (dataRowList.Count == 1) { // NOTE: és ahhoz tartozik tanulóesemény, if (tanuloEsemenyId.IsEntityId()) { // NOTE: és ha (nem várunk szervezetet és a sornál meg van adva feljegyző szervezetId // vagy várunk szervezetet és a sornál nincs megadva feljegyző szervezetId), akkor törlünk minden // tanulóesemény és szervezet adatot a sorból if ((!szervezetTipusEnumId.IsEntityId() && szervezetId.IsEntityId()) || (szervezetTipusEnumId.IsEntityId() && !szervezetId.IsEntityId())) { ResetFeljegyzesTanuloEsemenySzervezetAdatok(dataRow); } // NOTE: vagy ha várunk szervezetet és a sornál van megadva feljegyző szervezetId else if (szervezetTipusEnumId.IsEntityId() && szervezetId.IsEntityId()) { var lathatoSzervezetIdList = szervezetHelper.GetLathatoSzervezetIdList(alkalmazottSzervezetId, SzervezetAdatokHalmazaEnum.SzervezetEsAlSzervezetek); // NOTE: és a vizsgált sor feljegyzőjének szervezete nincs benne a látható szervezetek listájában, // akkor törlünk minden tanulóesemény és szervezet adatot a sorból if (!lathatoSzervezetIdList.Contains(szervezetId.Value)) { ResetFeljegyzesTanuloEsemenySzervezetAdatok(dataRow); } } } // NOTE: így az egyetlen sor nem törlendő return false; } // NOTE: ha a tanuló csoportjában több sor van else { // NOTE: ha nem várunk szervezetet és a tanuló során nincs feljegyző szervezetId if (!szervezetTipusEnumId.IsEntityId() && !szervezetId.IsEntityId()) { // NOTE: akkor a sor nem törlendő return false; } // NOTE: vagy ha várunk szervezetet és a tanuló során van feljegyző szervezetId és else if (szervezetTipusEnumId.IsEntityId() && szervezetId.IsEntityId()) { var lathatoSzervezetIdList = szervezetHelper.GetLathatoSzervezetIdList(alkalmazottSzervezetId, SzervezetAdatokHalmazaEnum.SzervezetEsAlSzervezetek); // NOTE: és a vizsgált sor feljegyzőjének szervezetId-ja benne van a látható szervezetek listájában if (lathatoSzervezetIdList.Contains(szervezetId.Value)) { // NOTE: akkor nem törlendő a sor return false; } } // NOTE: vagy ha nem várunk szervezetet és a soron van feljegyző szervezetId else if (!szervezetTipusEnumId.IsEntityId() && szervezetId.IsEntityId()) { // NOTE: ha a tanuló csoportjában levő sorok között van olyan, aminél nincs megadva feljegyző szervezetId if (dataRowList.Any(x => !SDAConvert.ToNullableInt32(x["FeljegyzoSzervezetId"]).IsEntityId())) { // NOTE: akkor a vizsgált sor törlendő return true; } else { // NOTE: ha nincs ilyen sor, akkor törlünk minden tanulóesemény és szervezet adatot a sorból ResetFeljegyzesTanuloEsemenySzervezetAdatok(dataRow); return false; } } // NOTE: vagy ha várunk szervezetet és a soron nincs feljegyző szervezetId else if (szervezetTipusEnumId.IsEntityId() && !szervezetId.IsEntityId()) { // NOTE: ha a tanuló csoportjában levő sorok között van olyan, amelyiknél helyes feljegyző szervezetId van beállítva if (dataRowList.Any(x => { // NOTE: a csoportban levő sorrol el kell dönteni, hogy a feljegyző szervezetId-ja megfelelő-e var feljegyzoSzervezetId = SDAConvert.ToNullableInt32(x["FeljegyzoSzervezetId"]); var lathatoSzervezetIdList = szervezetHelper.GetLathatoSzervezetIdList(alkalmazottSzervezetId, SzervezetAdatokHalmazaEnum.SzervezetEsAlSzervezetek); // NOTE: ha az adott sor feljegyző szervezetId-ja megfelelő if (feljegyzoSzervezetId.IsEntityId() && lathatoSzervezetIdList.Contains(feljegyzoSzervezetId.Value)) { // NOTE: akkor van helyes sor return true; } // NOTE: egyébként nincs helyes sor return false; })) { // NOTE: akkor a vizsgált sor törlendő return true; } else { // NOTE: ha nincs ilyen sor, akkor törlünk minden tanulóesemény és szervezet adatot a sorból ResetFeljegyzesTanuloEsemenySzervezetAdatok(dataRow); // NOTE: és a vizsgált sor nem törlendő return false; } } } // NOTE: minden egyéb esetben törlendő a vizsgált sor return true; }).ToList().ForEach(row => row.Delete()); }); ds.AcceptChanges(); } private void ResetFeljegyzesTanuloEsemenySzervezetAdatok(DataRow dataRow) { dataRow["ID"] = DBNull.Value; dataRow["EsemenyDatuma"] = DBNull.Value; dataRow["Targy"] = DBNull.Value; dataRow["Tartalom"] = DBNull.Value; dataRow["Tipus"] = DBNull.Value; dataRow["FeljegyzoNeve"] = DBNull.Value; if (dataRow.Table.Columns.Contains("FeljegyzoNeveElotagNelkul")) { dataRow["FeljegyzoNeveElotagNelkul"] = DBNull.Value; } dataRow["FeljegyzoSzervezetId"] = DBNull.Value; } } }