using System; using System.Collections.Generic; using System.Linq; using Kreta.BusinessLogic.Caching; using Kreta.BusinessLogic.HelperClasses; using Kreta.BusinessLogic.Helpers; using Kreta.Core; using Kreta.Core.ConnectionType; using Kreta.Core.Enum; using Kreta.Core.Exceptions; using Kreta.Core.FeatureToggle; using Kreta.Core.Logic; using Kreta.DataAccess.Interfaces; using Kreta.DataAccessManual.Util; using Kreta.Ellenorzo.BL.VN.Felhasznalo.Gondviselo; using Kreta.Ellenorzo.BL.VN.Felhasznalo.Tanulo; using Kreta.Ellenorzo.BL.VN.Intezmeny; using Kreta.Ellenorzo.BL.VN.Intezmeny.Rendszermodul; using Kreta.Ellenorzo.BL.VN.Intezmeny.TestreszabasBeallitasok; using Kreta.Ellenorzo.Dao.VN.Email; using Kreta.Ellenorzo.Dao.VN.Ertekeles; using Kreta.Ellenorzo.Domain.VN.Common; using Kreta.Ellenorzo.Domain.VN.Felhasznalo; using Kreta.Ellenorzo.Domain.VN.Felhasznalo.Tanulo; using Kreta.Ellenorzo.Domain.VN.Intezmeny; using Kreta.Ellenorzo.Domain.VN.UniqueIdentifier; using Kreta.Ellenorzo.Enums; using Kreta.Enums; using Kreta.Job.Tasks.Cache; using Kreta.Resources; using static Kreta.Ellenorzo.Domain.VN.Converter.ResponseModelConverter; namespace Kreta.Ellenorzo.BL.VN.Felhasznalo { internal static class FelhasznaloSubqueries { internal static TanuloGetResponse GetTanuloAdatlap(DefaultConnectionParameters dcp) { var tanuloAdat = TanuloSubqueries.GetTanuloAdat(dcp); var response = new TanuloGetResponse { Uid = new TanuloUid(dcp.TanuloId), IdpUniqueId = tanuloAdat.IdpUniqueId, TanuloAdat = tanuloAdat, TanevId = dcp.TanevId, Intezmeny = new IntezmenyResponse { IntezmenyAdatok = IntezmenySubqueries.GetSajatIntezmenyAdatok(dcp), Rendszermodulok = RendszermodulSubqueries.ListRendszermodul(dcp), TestreszabasBeallitasok = TestreszabasBeallitasokSubqueries.GetTestreszabasBeallitasok(dcp) }, GondviseloLista = ModelToModel(GondviseloSubqueries.ListGondviseloForTanulo(dcp)) }; if (dcp.JogosultsagLista.Contains(FelhasznaloSzerepkor.Gondviselo)) { response.TanuloAdat.Bankszamla.IsReadOnly = !response.GondviseloLista.SingleOrDefault(x => x.Uid.Id == dcp.GondviseloId.Value)?.IsTorvenyesKepviselo ?? true; } dcp.DalHandler.FelhasznaloBelepes().UpdateLastLoginByUserId(dcp.FelhasznaloId, DateTime.Now, dcp.GondviseloId.HasValue); return response; } internal static void SaveBankszamla(DefaultConnectionParameters dcp, BankszamlaRequest request) { if (dcp.JogosultsagLista.Contains(FelhasznaloSzerepkor.Tanulo) || IsGondviseloTorvenyesKepviselo(dcp)) { var validacioError = BankszamlaLogic.KitoltottsegValidacio(request.BankszamlaSzam, request.BankszamlaTulajdonosTipusId, request.BankszamlaTulajdonosNeve); if (!string.IsNullOrWhiteSpace(validacioError)) { throw new BlException(validacioError, BlExceptionType.ModelValidacio); } if (!BankszamlaLogic.IsBankAccountNumberValid(request.BankszamlaSzam)) { throw new BlException(string.Format(TanuloResource.NemMegfeleloBankszamlaszam, request.BankszamlaSzam), BlExceptionType.ModelValidacio); } validacioError = BankszamlaLogic.CDVValidacio(request.BankszamlaSzam); if (!string.IsNullOrWhiteSpace(validacioError)) { throw new BlException(validacioError, BlExceptionType.ModelValidacio); } var bankszamlaCo = new BankszamlaCo { BankszamlaSzam = request.BankszamlaSzam, BankszamlaTulajdonos = request.BankszamlaTulajdonosTipusId, BankszamlaTulajdonosNeve = request.BankszamlaTulajdonosNeve, SzamlavezetoBank = request.SzamlavezetoBank }; new TanuloHelper(new DalHandlerConnectionType(new MobileConnectionType(dcp.FelhasznaloId, dcp.IntezmenyId, dcp.IntezmenyAzonosito, dcp.TanevId), dcp.DalHandler)).SaveTanuloBankszamlaAdatok(dcp.TanuloId, dcp.GondviseloId, bankszamlaCo); } else { throw new BlException(BlExceptionType.NincsJogosultsag); } } internal static void DeleteBankszamla(DefaultConnectionParameters dcp) { if (dcp.JogosultsagLista.Contains(FelhasznaloSzerepkor.Tanulo) || IsGondviseloTorvenyesKepviselo(dcp)) { new TanuloHelper(new DalHandlerConnectionType(new MobileConnectionType(dcp.FelhasznaloId, dcp.IntezmenyId, dcp.IntezmenyAzonosito, dcp.TanevId), dcp.DalHandler)).SaveTanuloBankszamlaAdatok(dcp.TanuloId, dcp.GondviseloId, new BankszamlaCo()); } else { throw new BlException(BlExceptionType.NincsJogosultsag); } } internal static void SaveElerhetoseg(DefaultConnectionParameters dcp, ElerhetosegRequest request) { SaveEmail(dcp, request.EmailCim); SaveTelefonszam(dcp, request.Telefonszam); var tanuloAdatlapCache = KretaServer.KretaServer.Instance.CacheManager.AquireCacheMobile(); var cacheEnabledAndNotNull = FeatureContext.Instance.IsEnabled(Constants.FeatureName.MobileEllenorzoApiCache, dcp.IntezmenyAzonosito) && tanuloAdatlapCache != null; if (cacheEnabledAndNotNull) { tanuloAdatlapCache.RemoveTanuloAdatlap(dcp.TanuloId, dcp.IntezmenyAzonosito); } } internal static void SaveEmail(DefaultConnectionParameters dcp, string emailCim) { if (!string.IsNullOrWhiteSpace(emailCim)) { var dal = dcp.DalHandler.Email(); var isUjEmail = false; IEmail ujEmail; var emailek = dal.GetFelhasznalokEmailCimei(new EmailRequestDao() { FelhasznaloIds = new List() { dcp.TanuloId }, IsPublic = null }); if (dcp.JogosultsagLista.Contains(FelhasznaloSzerepkor.Gondviselo)) { emailek = emailek.Where(e => e.GondviseloId == dcp.GondviseloId).ToList(); } else if (dcp.JogosultsagLista.Contains(FelhasznaloSzerepkor.Tanulo)) { emailek = emailek.Where(e => e.FelhasznaloId == dcp.TanuloId && e.GondviseloId == null).ToList(); } var alapertelmezettEmail = emailek.FirstOrDefault(e => e.IsAlapertelmezett); var duplikaltEmail = emailek.FirstOrDefault(e => e.Email == emailCim && e.Id != alapertelmezettEmail.Id); if (duplikaltEmail != null) { var regiEmail = dal.Get(alapertelmezettEmail.Id); regiEmail.Alapertelmezett = false; dal.FullUpdate(regiEmail); ujEmail = dal.Get(duplikaltEmail.Id); ujEmail.Alapertelmezett = true; ujEmail.IsMobilRogzitett = true; dal.FullUpdate(ujEmail); } else { if (alapertelmezettEmail == null) { ujEmail = dal.Get(); isUjEmail = true; } else { ujEmail = dal.Get(alapertelmezettEmail.Id); } if (ujEmail.EmailCim != emailCim) { ujEmail.Alapertelmezett = true; ujEmail.EmailCim = emailCim; ujEmail.EmailTipusa = (int)EmailTipusEnum.Hivatalos; ujEmail.GondviseloId = dcp.GondviseloId ?? ujEmail.GondviseloId; ujEmail.FelhasznaloId = dcp.TanuloId; ujEmail.IsMobilRogzitett = true; if (isUjEmail) { ujEmail.IntezmenyId = dcp.IntezmenyId; dal.Insert(ujEmail); } else { dal.FullUpdate(ujEmail); } } } } } internal static void SaveTelefonszam(DefaultConnectionParameters dcp, string telefonszam) { if (!string.IsNullOrWhiteSpace(telefonszam)) { var dal = dcp.DalHandler.Telefon(); var isUjTelefon = false; ITelefon ujTelefon; var telefonszamok = dal.ListTelefon(new List() { dcp.TanuloId }, null); if (dcp.JogosultsagLista.Contains(FelhasznaloSzerepkor.Gondviselo)) { telefonszamok = telefonszamok.Where(e => e.GondviseloId == dcp.GondviseloId).ToList(); } else if (dcp.JogosultsagLista.Contains(FelhasznaloSzerepkor.Tanulo)) { telefonszamok = telefonszamok.Where(e => e.FelhasznaloId == dcp.TanuloId && e.GondviseloId == null).ToList(); } var alapertelmezettTelefon = telefonszamok.FirstOrDefault(e => e.IsAlapertelmezett); var duplikaltTelefon = telefonszamok.FirstOrDefault(e => e.Telefonszam == telefonszam && e.Id != alapertelmezettTelefon.Id); if (duplikaltTelefon != null) { var regiTelefon = dal.Get(alapertelmezettTelefon.Id); regiTelefon.Alapertelmezett = false; dal.FullUpdate(regiTelefon); ujTelefon = dal.Get(duplikaltTelefon.Id); ujTelefon.Alapertelmezett = true; ujTelefon.IsMobilRogzitett = true; dal.FullUpdate(ujTelefon); } else { if (alapertelmezettTelefon == null) { ujTelefon = dal.Get(); isUjTelefon = true; } else { ujTelefon = dal.Get(alapertelmezettTelefon.Id); } if (ujTelefon.TelefonSzam != telefonszam) { ujTelefon.Alapertelmezett = true; ujTelefon.TelefonSzam = telefonszam; ujTelefon.TelefonTipusa = (int)TelefonTipusEnum.Mobil; ujTelefon.GondviseloId = dcp.GondviseloId ?? ujTelefon.GondviseloId; ujTelefon.FelhasznaloId = dcp.TanuloId; ujTelefon.IsMobilRogzitett = true; if (isUjTelefon) { ujTelefon.IntezmenyId = dcp.IntezmenyId; dal.Insert(ujTelefon); } else { dal.FullUpdate(ujTelefon); } } } } } internal static bool IsGondviseloTorvenyesKepviselo(DefaultConnectionParameters dcp) => dcp.DalHandler.Gondviselo().Get(dcp.GondviseloId.Value).IsTorvenyesKepviselo; internal static NapiErtesitesOsszefoglaloResponse GetNapiErtesitesOsszefoglalo(DefaultConnectionParameters dcp) { var napiErtesitesOsszefoglalo = dcp.DalHandler.Felhasznalo().GetNapiErtesitesOsszefoglalo(dcp.TanuloId, null).ToDaoList(); return new NapiErtesitesOsszefoglaloResponse { Ertekelesek = napiErtesitesOsszefoglalo.First(e => e.ErtesitesTipusa == "Ertekelesek").ErtesitesekSzama, Mulasztasok = napiErtesitesOsszefoglalo.First(e => e.ErtesitesTipusa == "Mulasztasok").ErtesitesekSzama, Feljegyzesek = napiErtesitesOsszefoglalo.First(e => e.ErtesitesTipusa == "Feljegyzesek").ErtesitesekSzama, Bejelentettszamonkeresek = napiErtesitesOsszefoglalo.First(e => e.ErtesitesTipusa == "BejelentettSzamonkeresek").ErtesitesekSzama, Hazifeladatok = napiErtesitesOsszefoglalo.First(e => e.ErtesitesTipusa == "HaziFeladatok").ErtesitesekSzama, Uzenetek = napiErtesitesOsszefoglalo.First(e => e.ErtesitesTipusa == "Uzenetek").ErtesitesekSzama, Orarendvaltozasok = GetOrarendValtozasok(dcp) }; } private static int GetOrarendValtozasok(DefaultConnectionParameters dcp) { var orarendvaltozasokSzama = 0; var orarendValtozasCache = KretaServer.KretaServer.Instance.CacheManager.AquireCacheMobile(); var cacheEnabledAndNotNull = FeatureContext.Instance.IsEnabled(Constants.FeatureName.MobileEllenorzoApiCache, dcp.IntezmenyAzonosito) && orarendValtozasCache != null; if (cacheEnabledAndNotNull) { var orarendValtozasok = orarendValtozasCache.GetOrarendValtozasok(dcp.IntezmenyAzonosito); if (orarendValtozasok.Any()) { orarendvaltozasokSzama = orarendValtozasok.Where(e => e.IntezmenyAzonosito == dcp.IntezmenyAzonosito && e.UserId == dcp.TanuloId).Count(); } } return orarendvaltozasokSzama; } } }