kreta/Kreta.WebApi/Ellenorzo/Kreta.Ellenorzo.BL/VN/Felhasznalo/FelhasznaloSubqueries.cs
2024-03-13 00:33:46 +01:00

296 lines
14 KiB
C#

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<TanuloAdatlapCache>();
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<int>()
{
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<int>() { 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<NapiErtesitesOsszefoglaloDao>();
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<OrarendValtozasCache>();
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;
}
}
}