using System; using System.Collections.Generic; using System.Data; using System.Linq; using Kreta.Core.ConnectionType; using Kreta.DataAccessManual; using Kreta.DataAccessManual.Interfaces; namespace Kreta.BusinessLogic.Helpers { public static class AuthorizationHelper { public static class OrarendiOra { public static bool TanuloHasAccess(IConnectionType connectionType, int orarendiOraId, DateTime oraDatuma) { return Dal.CustomConnection.Run(connectionType, h => { var orarendiOra = h.OrarendiOra().Get(orarendiOraId); return OsztalyCsoport.TanuloHasAccess(h, connectionType.FelhasznaloId, orarendiOra.OsztalyCsoportId, oraDatuma); }); } } public static class TanitasiOra { public static bool TanuloHasAccess(IConnectionType connectionType, int tanitasiOraId) { return Dal.CustomConnection.Run(connectionType, h => { var tanitasiOra = h.TanitasiOra().Get(tanitasiOraId); return OsztalyCsoport.TanuloHasAccess(h, connectionType.FelhasznaloId, tanitasiOra.OsztalyCsoportId, tanitasiOra.Datum); }); } } public static class NemKotottMunkaido { public static bool TanarHasAccess(IConnectionType connectionType, int nemKotottMunkaidoId) { var nemKotottMunkaido = new NemKotottMunkaidoHelper(connectionType).GetNemKotottMunkaidoById(nemKotottMunkaidoId); return (nemKotottMunkaido.TanarId == connectionType.FelhasznaloId) || (nemKotottMunkaido.TulajId == connectionType.FelhasznaloId); } } public static class OsztalyCsoport { public static bool OsztalyfonokHasAccess(IConnectionType connectionType, int osztalyId) { return Dal.CustomConnection.Run(connectionType, h => { var osztaly = h.Osztaly().Get(osztalyId); return (osztaly.OsztalyFonokId == connectionType.FelhasznaloId) || (osztaly.OfoHelyettesId == connectionType.FelhasznaloId); }); } public static bool CsoportvezetoHasAccess(IConnectionType connectionType, int csoportId) { return Dal.CustomConnection.Run(connectionType, h => { var csoport = h.Csoport().Get(csoportId); return csoport.CsoportVezetoId == connectionType.FelhasznaloId; }); } public static bool TanarHasAccess(IConnectionType connectionType, int osztalyCsoportId, bool lehetTtf) { return Dal.CustomConnection.Run(connectionType, h => { var kapcsolodoOsztalyCsoportok = h.OsztalyCsoport().GetKapcsolodoOsztalyCsoportokByTanarId(connectionType.FelhasznaloId, true, true, lehetTtf, null); return kapcsolodoOsztalyCsoportok.Tables[0].AsEnumerable().Any(x => x.Field("ID") == osztalyCsoportId); }); } public static bool TanarHasAccess(IConnectionType connectionType, int osztalyCsoportId, int tantargyId) { return Dal.CustomConnection.Run(connectionType, h => TanarHasAccess(h, connectionType.FelhasznaloId, osztalyCsoportId, tantargyId, connectionType.TanevId)); } internal static bool TanarHasAccess(IDalHandler dal, int tanarId, int osztalyCsoportId, int tantargyId, int tanevId) { var foglalkozasok = dal.Foglalkozas().GetFoglalkozasok(tanarId, tanevId); return foglalkozasok.Tables[0].AsEnumerable().Any(x => x.Field("OsztalyCsoportID") == osztalyCsoportId && x.Field("TantargyID") == tantargyId); } internal static bool TanuloHasAccess(IDalHandler dal, int tanuloId, int osztalyCsoportId, DateTime datum) { return dal.OsztalyCsoport().IsTanuloOsztalyCsoportTagja(tanuloId, osztalyCsoportId, datum); } } public static class Tanulo { public static bool OsztalyfonokHasAccess(IConnectionType connectionType, int tanuloId) { return Dal.CustomConnection.Run(connectionType, h => OsztalyfonokHasAccess(h, connectionType, tanuloId)); } internal static bool OsztalyfonokHasAccess(IDalHandler h, IConnectionType connectionType, int tanuloId) { var tanuloOsztalyCsoportjai = h.OsztalyCsoport().GetTanuloMindenkoriOsztalyCsoportjai(tanuloId); var osztalyokOsztalyfonokAlapjan = h.OsztalyCsoport().GetOsztalyokOsztalyfonokAlapjan(connectionType.FelhasznaloId, connectionType.IntezmenyId, connectionType.TanevId); foreach (var row in osztalyokOsztalyfonokAlapjan.Tables[0].AsEnumerable()) { if (tanuloOsztalyCsoportjai.Contains(row.Field("ID"))) { return true; } } return false; } public static bool TanarHasAccess(IConnectionType connectionType, int tanuloId, bool lehetTtf) { return Dal.CustomConnection.Run(connectionType, h => TanarHasAccess(h, connectionType, tanuloId, lehetTtf)); } internal static bool TanarHasAccess(IDalHandler h, IConnectionType connectionType, int tanuloId, bool lehetTtf) { var tanuloOsztalyCsoportjai = h.OsztalyCsoport().GetTanuloMindenkoriOsztalyCsoportjai(tanuloId); var kapcsolodoOsztalyCsoportok = h.OsztalyCsoport().GetKapcsolodoOsztalyCsoportokByTanarId(connectionType.FelhasznaloId, true, true, lehetTtf, null); foreach (var row in kapcsolodoOsztalyCsoportok.Tables[0].AsEnumerable()) { if (tanuloOsztalyCsoportjai.Contains(row.Field("ID"))) { return true; } } return false; } public static bool TanarHasAccess(IConnectionType connectionType, List tanuloIdList, int osztalyCsoportId, bool lehetTtf) { return Dal.CustomConnection.Run(connectionType, h => { if (OsztalyCsoport.TanarHasAccess(connectionType, osztalyCsoportId, lehetTtf)) { var osztalyCsoportTanuloi = h.Tanulo().GetOsztalyCsoportMindenkoriTanuloi(osztalyCsoportId); var osztalyCsoportTanuloiIdList = osztalyCsoportTanuloi.Tables[0].AsEnumerable().Select(t => t.Field("ID")); return tanuloIdList.All(tanuloId => osztalyCsoportTanuloiIdList.Contains(tanuloId)); } return false; }); } public static bool TanarHasAccess(IConnectionType connectionType, int tanuloId, int tantargyId) { return Dal.CustomConnection.Run(connectionType, h => { var tanuloOsztalyCsoportjai = h.OsztalyCsoport().GetTanuloMindenkoriOsztalyCsoportjai(tanuloId); var kapcsolodoOsztalyCsoportok = h.OsztalyCsoport().GetKapcsolodoOsztalyCsoportokByTanarId(connectionType.FelhasznaloId, true, true, false, null); foreach (var row in kapcsolodoOsztalyCsoportok.Tables[0].AsEnumerable()) { if (tanuloOsztalyCsoportjai.Contains(row.Field("ID"))) { return true; } } var foglalkozasok = h.Foglalkozas().GetFoglalkozasok(connectionType.FelhasznaloId, connectionType.TanevId); foreach (var row in foglalkozasok.Tables[0].AsEnumerable()) { if (row.Field("TantargyID") == tantargyId && tanuloOsztalyCsoportjai.Contains(row.Field("OsztalyCsoportID"))) { return true; } } return false; }); } } public static class Ertekeles { public static bool TanarHasAccess(IConnectionType connectionType, int ertekelesId) { var tanuloErtekelesCo = new TanuloErtekelesHelper(connectionType).GetTanuloErtekelesCoById(ertekelesId); if (tanuloErtekelesCo != null && !tanuloErtekelesCo.IsMagatartasSzorgalom && tanuloErtekelesCo.ErtekeloId == connectionType.FelhasznaloId) { return true; } return false; } } public static class MagatartasSzorgalom { public static bool TanarHasAccess(IConnectionType connectionType, int magatartasSzorgalomId) { var tanuloErtekelesCo = new TanuloErtekelesHelper(connectionType).GetTanuloErtekelesCoById(magatartasSzorgalomId); if (tanuloErtekelesCo != null && tanuloErtekelesCo.IsMagatartasSzorgalom && tanuloErtekelesCo.ErtekeloId == connectionType.FelhasznaloId) { return true; } return false; } } public static class Mulasztas { public static bool TanarHasAccess(IConnectionType connectionType, int mulasztasId) { var oraTanuloiId = new MulasztasHelper(connectionType).GetOraTanuloId(mulasztasId); return Tanulo.TanarHasAccess(connectionType, oraTanuloiId, false); } } public static class Igazolas { public static bool TanarHasAccess(IConnectionType connectionType, int igazolasId) { var igazolas = new IgazolasHelper(connectionType).GetIgazolasCoById(igazolasId); if (igazolas.RogzitoId == connectionType.FelhasznaloId) { return true; } return Tanulo.TanarHasAccess(connectionType, igazolas.TanuloId, false); } } public static class KozossegiSzolgalat { public static bool TanarHasAccess(IConnectionType connectionType, int kozossegiSzolgalatId) { return Dal.CustomConnection.Run(connectionType, h => { var kozossegiSzolgalat = h.TanuloKozossegiSzolgalat().Get(kozossegiSzolgalatId); if (kozossegiSzolgalat.FeljegyzoId == connectionType.FelhasznaloId) { return true; } return Tanulo.TanarHasAccess(h, connectionType, kozossegiSzolgalat.TanuloId, false); }); } } public static class ErettsegiEredmeny { public static bool OsztalyfonokHasAccess(IConnectionType connectionType, int erettsegiEredmenyId) { return Dal.CustomConnection.Run(connectionType, h => { var erettsegiEredmeny = h.ErettsegiEredmeny().Get(erettsegiEredmenyId); return Tanulo.OsztalyfonokHasAccess(h, connectionType, erettsegiEredmeny.TanuloId); }); } } } }