using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Mime;
using System.Text;
using System.Web;
using System.Web.Http;
using System.Web.Mvc;
using Kreta.BusinessLogic.HelperClasses;
using Kreta.BusinessLogic.Helpers;
using Kreta.BusinessLogic.Security;
using Kreta.Core;
using Kreta.Enums;
using Kreta.Enums.ManualEnums;
using Kreta.Resources;
using Kreta.Web.Areas.Tanulo.Helper;
using Kreta.Web.Areas.Tanulo.Models;
using Kreta.Web.Areas.TanuloErtekeles.Controllers;
using Kreta.Web.Helpers;
using Kreta.Web.Helpers.Error;
using Kreta.Web.Helpers.Modal;
using Kreta.Web.Models;
using Kreta.Web.Models.EditorTemplates;
using Kreta.Web.Security;

namespace Kreta.Web.Areas.Tanulo.Controllers
{
    [MvcRoleClaimsAuthorize(true)]
    [MvcRolePackageDenyAuthorize(TanevEnum.Mind, KretaClaimPackages.IsOnlyAlkalmozott.ClaimValue)]
    [MvcRolePackageAuthorize(TanevEnum.Mind, KretaClaimPackages.Osztalyfonok.ClaimValue, KretaClaimPackages.SzuperOsztalyfonok.ClaimValue, KretaClaimPackages.Evfolyamfelelos.ClaimValue, KretaClaimPackages.KollegiumModul.ClaimValue)]
    public class KollegiumTanuloController : Controller
    {
        [MvcRolePackageAuthorize(TanevEnum.AktEsKovTanev, KretaClaimPackages.KollegiumModul.ClaimValue)]
        public ActionResult Index()
        {
            var model = new TanuloSearchModel();
            TanuloLogic.SetButtonVisibility(model);

            return View("Index", model);
        }

        [MvcRolePackageAuthorize(TanevEnum.AktEsKovTanev, KretaClaimPackages.KollegiumModul.ClaimValue)]
        [System.Web.Mvc.ActionName("AktivTanulokByOsztaly")]
        public ActionResult Index(int osztalyId)
        {
            var model = new TanuloSearchModel
            {
                FeladatKategoriaId = Constants.MindenErteke.FeladatKategoria,
                Aktiv = true,
                OsztalyCsoportId = osztalyId
            };

            TanuloLogic.SetButtonVisibility(model);

            return View("Index", model);
        }

        public ActionResult GetPartialView(string id, string partialViewName)
        {
            var model = KollegiumTanuloLogic.GetTanuloData(int.Parse(id));
            return PartialView(partialViewName, model);
        }

        public ActionResult GetModPartialView(string id, string partialViewName)
        {
            var model = KollegiumTanuloLogic.GetModTanuloData(int.Parse(id));
            return PartialView(partialViewName, model);
        }

        public ActionResult GetPartialViewWithOsztalycsoport(string id, string osztalyCsoportIdString, string partialViewName)
        {
            int? osztalyCsoportId = null;
            if (int.TryParse(osztalyCsoportIdString, out int resultId))
            { osztalyCsoportId = resultId; }

            var model = KollegiumTanuloLogic.GetTanuloData(int.Parse(id), osztalyCsoportId);
            return PartialView(partialViewName, model);
        }

        public ActionResult GetModPartialViewWithOsztalycsoport(string id, string osztalyCsoportIdString, string partialViewName)
        {
            int? osztalyCsoportId = null;
            if (int.TryParse(osztalyCsoportIdString, out int resultId))
            { osztalyCsoportId = resultId; }

            var model = KollegiumTanuloLogic.GetModTanuloData(int.Parse(id), osztalyCsoportId);
            return PartialView(partialViewName, model);
        }

        public ActionResult GetTanuloErtekelesPartialView(int tanuloId, string partialViewName, string namePrefix)
        {
            var tanuloOktatasiNevelesiFeladatIds = new TanuloHelper(ConnectionTypeExtensions.GetSessionConnectionType())
                .GetTanuloOktatasiNevelesiFeladatIdList(tanuloId, OktNevelesiKategoriaEnum.Kollegium);

            var model = new TanuloErtekelesByTanuloController().PartialViewModel(tanuloId, namePrefix, tanuloOktatasiNevelesiFeladatIds);
            return PartialView(partialViewName, model);
        }

        #region Popups

        [MvcRolePackageAuthorize(TanevEnum.Mind, KretaClaimPackages.Osztalyfonok.ClaimValue, KretaClaimPackages.SzuperOsztalyfonok.ClaimValue, KretaClaimPackages.Adminisztrator.ClaimValue, KretaClaimPackages.Evfolyamfelelos.ClaimValue)]
        public ActionResult OpenJogviszonySzuneteltetes()
        {
            var pm = new PopUpModel(new JogviszonySzuneteltetesModel(), "Edit_JogviszonySzuneteltetes");
            pm = pm.AddBtn(pm, "JogviszonySzuneteltetesCancel", CommonResource.Megse, "JogviszonySzuneteltetesHelper.Cancel");
            pm = pm.AddBtn(pm, "JogviszonySzuneteltetesSave", CommonResource.Mentes, "JogviszonySzuneteltetesHelper.Save");

            return PartialView(Constants.General.PopupView, pm);
        }

        public ActionResult OpenDetailTanuloPopUp(int tanuloId, int? osztalycsoportId, bool ertekelesTabAktiv = false, bool fromAdd = false)
        {
            var tanuloDetailModel = new TanuloDetailModel { TanuloId = tanuloId, OsztalycsoportId = osztalycsoportId };
            var popUpModel = new PopUpModel(new TanuloSearchModel
            {
                TanuloId = tanuloId,
                TanuloModalHeader = TanuloLogic.GetTanuloModalHeader(tanuloId),
                TabList = KollegiumTanuloLogic.GetDetailTabs(tanuloDetailModel, ertekelesTabAktiv)
            }, "Tanulo_Info");

            popUpModel = popUpModel.AddCancelBtn(popUpModel, fromAdd ? "TanuloHelper.modTanuloCancel" : "TanuloHelper.detailTanuloCancel");

            return PartialView(Constants.General.PopupView, popUpModel);
        }

        [MvcRolePackageAuthorize(TanevEnum.AktEsKovTanev, KretaClaimPackages.KollegiumModul.ClaimValue)]
        public ActionResult OpenNewTanuloPopUp()
        {
            var model = TanuloLogic.CreateNewTanuloPopupModel();
            if (model.TanuloTanugyModel.IsSzakkepzeses)
            {
                TanuloLogic.SetTanuloSzakkepzesesBasicProperties(model);
            }
            model.TanuloTanugyModel.HasAktivOsztalybaSorolas = false;
            model.TanuloTanugyModel.TantervId = new TantervHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetTop1TantervId();

            var pm = new PopUpModel(new TanuloModel
            {
                TabList = KollegiumTanuloLogic.GetNewTabs(model)
            }, "Tanulo_Bevitel");

            pm = pm.AddCancelBtn(pm, "TanuloHelper.newTanuloCancel");
            pm = pm.AddOkBtn(pm, "TanuloHelper.newTanuloSave");

            return PartialView(Constants.General.PopupView, pm);
        }

        public ActionResult OpenModTanuloPopUp(int tanuloId, int? osztalycsoportId)
        {
            var tm = KollegiumTanuloLogic.GetModTanuloData(tanuloId, osztalycsoportId);
            TanuloLogic.SetTanuloSzakkepzesesBasicProperties(tm);

            tm.TanuloAlapAdatModel.NemList = TanuloLogic.GetNemList(true);
            tm.TanuloAlapAdatModel.FelhasznaloiNevGeneralasModja = TanuloLogic.GetFelhasznaloiNevGeneralasModja(tm);
            tm.TanuloModalHeader = TanuloLogic.GetTanuloModalHeader(tanuloId);

            tm.TabList = KollegiumTanuloLogic.GetModTabs(tm, ClaimData.IsOsztalyfonok, osztalycsoportId);

            var pm = new PopUpModel(tm, "Tanulo_Bevitel");
            pm = pm.AddCancelBtn(pm, "TanuloHelper.modTanuloCancel");
            pm = pm.AddOkBtn(pm, "TanuloHelper.modTanuloSave");

            return PartialView(Constants.General.PopupView, pm);
        }

        [MvcRolePackageAuthorize(TanevEnum.AktEsKovTanev, KretaClaimPackages.KollegiumModul.ClaimValue)]
        public ActionResult OpenTobbesModTanuloPopUp(List<TanuloTobbesModAdat> tobbesModAdatList)
        {
            var model = new TanuloTobbesModModel { TanuloTobbesTanugyModel = new TanuloTobbesTanugyModel() };

            var helper = new FeladatEllatasiHelyHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType());
            var osztalyJellemzoi = helper.GetOsztalyJellemzoi();
            model.TanuloTobbesTanugyModel.IsSzakkepzeses = osztalyJellemzoi[OsztalyJellemzoEnum.IsSzakkepzeses];

            var osztalyIdList = tobbesModAdatList.Where(x => x.OsztalyId.IsEntityId()).Select(x => x.OsztalyId.Value).Distinct().ToList();
            var tanuloHelper = new TanuloHelper(ConnectionTypeExtensions.GetSessionConnectionType());
            model.TanuloTobbesTanugyModel.IsAllOsztalyAltalanosIskolaFeladatellatasiHely = tanuloHelper.IsAllOsztalyAltalanosIskolaFeladatellatasiHely(osztalyIdList);

            model.TabList = KollegiumTanuloLogic.GetTanuloTobbesModTabs(model);

            foreach (var item in tobbesModAdatList)
            {
                model.TobbesModIdList.Add(new TanuloTobbesModId() { TanuloId = item.TanuloId, OsztalyId = item.OsztalyId });
            }

            model.TanuloNevArray = string.Join(", ", tobbesModAdatList.Select(x => x.TanuloNev));

            var pm = new PopUpModel(model, "TanuloTobbesModify_Bevitel");
            pm = pm.AddCancelBtn(pm, "TanuloHelper.modifyCancel");
            pm = pm.AddOkBtn(pm, "TanuloHelper.confirmCsopModWindow");

            return PartialView(Constants.General.PopupView, pm);
        }

        public ActionResult NewElerhetosegTel(int tanuloId)
        {
            var model = new CimElerhetosegModel()
            {
                FelhasznaloId = tanuloId,
                TanulovalEgyezik = true,
                AlapertelmezettTel = true,
                TelefonKotelezo = true,
                FormSettings = new List<string>() {
                    CimElerhetosegConstant.TelSectionVisible,
                    CimElerhetosegConstant.IsNew,
                    CimElerhetosegConstant.AlapertelmezettTelVisible
                }
            };
            model.AlapertelmezettTel = !(new TanuloHelper(ConnectionTypeExtensions.GetSessionConnectionType()).HasTanuloAlapertelmezettTelefon(tanuloId));
            var pm = new PopUpModel(model, "_Elerhetoseg_Tel_Bevitel");

            pm.Buttons.Add(new ModalButtonModel() { Name = "BtnElerhetosegCancel", Text = Resources.CommonResource.Megse, EventName = "TanuloElerhetosegTelHelper.newElerhetosegTelCancel" });
            pm.Buttons.Add(new ModalButtonModel() { Name = "BtnElerhetosegOk", Text = Resources.CommonResource.Mentes, EventName = "TanuloElerhetosegTelHelper.newElerhetosegTelSave" });

            return PartialView(Constants.General.PopupView, pm);
        }

        public ActionResult ModElerhetosegTel(int id)
        {
            var model = TanuloLogic.GetTanuloElerhetosegTel(id);
            model.TanulovalEgyezik = true;
            model.TelefonKotelezo = true;
            model.FormSettings = new List<string>() {
                CimElerhetosegConstant.TelSectionVisible,
                CimElerhetosegConstant.AlapertelmezettTelVisible
            };
            var pm = new PopUpModel(model, "_Elerhetoseg_Tel_Bevitel");

            pm.Buttons.Add(new ModalButtonModel() { Name = "BtnElerhetosegCancel", Text = Resources.CommonResource.Megse, EventName = "TanuloElerhetosegTelHelper.modElerhetosegTelCancel" });
            pm.Buttons.Add(new ModalButtonModel() { Name = "BtnElerhetosegOk", Text = Resources.CommonResource.Mentes, EventName = "TanuloElerhetosegTelHelper.modElerhetosegTelSave" });

            return PartialView(Constants.General.PopupView, pm);
        }

        public ActionResult NewElerhetosegEmail(int tanuloId)
        {
            var model = new CimElerhetosegModel()
            {
                FelhasznaloId = tanuloId,
                AlapertelmezettEmail = true,
                TanulovalEgyezik = true,
                EmailcimKotelezo = true,
                EmailTipusKotelezo = true,
                FormSettings = new List<string>() {
                    CimElerhetosegConstant.EmailSectionVisible,
                    CimElerhetosegConstant.IsNew,
                    CimElerhetosegConstant.AlapertelmezettEmailVisible
                }
            };
            model.AlapertelmezettEmail = !(new TanuloHelper(ConnectionTypeExtensions.GetSessionConnectionType()).HasTanuloAlapertelmezettEmail(tanuloId));
            var pm = new PopUpModel(model, "_Elerhetoseg_Email_Bevitel");

            pm.Buttons.Add(new ModalButtonModel() { Name = "BtnElerhetosegCancel", Text = Resources.CommonResource.Megse, EventName = "TanuloElerhetosegEmailHelper.newElerhetosegEmailCancel" });
            pm.Buttons.Add(new ModalButtonModel() { Name = "BtnElerhetosegOk", Text = Resources.CommonResource.Mentes, EventName = "TanuloElerhetosegEmailHelper.newElerhetosegEmailSave" });

            return PartialView(Constants.General.PopupView, pm);
        }

        public ActionResult ModElerhetosegEmail(int id)
        {
            var model = TanuloLogic.GetTanuloElerhetosegEmail(id);
            model.TanulovalEgyezik = true;
            model.EmailcimKotelezo = true;
            model.EmailTipusKotelezo = true;
            model.FormSettings = new List<string>() {
                CimElerhetosegConstant.EmailSectionVisible,
                CimElerhetosegConstant.AlapertelmezettEmailVisible
            };
            var pm = new PopUpModel(model, "_Elerhetoseg_Email_Bevitel");

            pm.Buttons.Add(new ModalButtonModel() { Name = "BtnElerhetosegCancel", Text = Resources.CommonResource.Megse, EventName = "TanuloElerhetosegEmailHelper.modElerhetosegEmailCancel" });
            pm.Buttons.Add(new ModalButtonModel() { Name = "BtnElerhetosegOk", Text = Resources.CommonResource.Mentes, EventName = "TanuloElerhetosegEmailHelper.modElerhetosegEmailSave" });

            return PartialView(Constants.General.PopupView, pm);
        }

        public ActionResult NewElerhetosegCim(int tanuloId)
        {
            var model = new CimElerhetosegModel()
            {
                FelhasznaloId = tanuloId,
                Orszag = (int)OrszagTipusEnum.Magyarorszag,
                CimTipus = (int)CimTipusEnum.allando_lakcim,
                AlapertelmezettCim = true,
                FormSettings = new List<string>() {
                    CimElerhetosegConstant.CimSectionVisible,
                    CimElerhetosegConstant.IsNew,
                    CimElerhetosegConstant.AlapertelmezettCimVisible
                }
            };
            var hasTanuloAlapertelmezettCim = new TanuloHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType()).HasTanuloAlapertelmezettCim(tanuloId);
            model.AlapertelmezettCim = !hasTanuloAlapertelmezettCim;
            if (!hasTanuloAlapertelmezettCim)
            {
                model.FormSettings.Add(CimElerhetosegConstant.AlapertelmezettNemModosithato);
            }
            var pm = new PopUpModel(model, "_Elerhetoseg_Cim_Bevitel");

            pm.Buttons.Add(new ModalButtonModel() { Name = "BtnElerhetosegCancel", Text = Resources.CommonResource.Megse, EventName = "TanuloElerhetosegCimHelper.newElerhetosegCimCancel" });
            pm.Buttons.Add(new ModalButtonModel() { Name = "BtnElerhetosegOk", Text = Resources.CommonResource.Mentes, EventName = "TanuloElerhetosegCimHelper.newElerhetosegCimSave" });

            return PartialView(Constants.General.PopupView, pm);
        }

        public ActionResult ModElerhetosegCim(int id)
        {
            var model = TanuloLogic.GetTanuloElerhetosegCim(id);
            model.FormSettings = new List<string>(){
                CimElerhetosegConstant.CimSectionVisible,
                CimElerhetosegConstant.AlapertelmezettCimVisible };
            model.IsAlapertelmezettModosithato = !model.AlapertelmezettCim;
            var pm = new PopUpModel(model, "_Elerhetoseg_Cim_Bevitel");

            pm.Buttons.Add(new ModalButtonModel() { Name = "BtnElerhetosegCancel", Text = Resources.CommonResource.Megse, EventName = "TanuloElerhetosegCimHelper.modElerhetosegCimCancel" });
            pm.Buttons.Add(new ModalButtonModel() { Name = "BtnElerhetosegOk", Text = Resources.CommonResource.Mentes, EventName = "TanuloElerhetosegCimHelper.modElerhetosegCimSave" });

            return PartialView(Constants.General.PopupView, pm);
        }

        [MvcRolePackageAuthorize(TanevEnum.Mind, KretaClaimPackages.KollegiumModul.ClaimValue, KretaClaimPackages.Osztalyfonok.ClaimValue, KretaClaimPackages.SzuperOsztalyfonok.ClaimValue, KretaClaimPackages.Evfolyamfelelos.ClaimValue, KretaClaimPackages.Adminisztrator.ClaimValue, KretaClaimPackages.CsoportVezeto.ClaimValue, KretaClaimPackages.Tanar.ClaimValue)]
        public ActionResult Info_GondviselokCimGrid(int id)
        {
            return PartialView("Info_GondviselokCimGrid", id);
        }

        public ActionResult NewGondviselo(int tanuloId)
        {
            var model = new TanuloModGondviseloModel()
            {
                TanulovalEgyezik = true,
                GondviseloAutoEmail = !ClaimData.IsSzirIntezmeny,
                FileLetoltesSzukseges = !ClaimData.IsSzirIntezmeny,
                RokonsagiFok = (int)RokonsagiFokEnum.na,
                FelhasznaloId = tanuloId,
                EmailcimKotelezo = false,
                EmailTipusKotelezo = false,
                TelefonKotelezo = false,
                IsGondviseloElerhetoseg = false,
                FormSettings = new List<string>() {
                    CimElerhetosegConstant.EmailSectionVisible,
                    CimElerhetosegConstant.TelSectionVisible,
                    CimElerhetosegConstant.TanuloElerhetosegEmailVisible,
                    CimElerhetosegConstant.TanuloElerhetosegTelVisible
                },
                IsSzirIntezmeny = ClaimData.IsSzirIntezmeny
            };

            var pm = new PopUpModel(model, "_Gondviselo_Bevitel");
            pm.Buttons.Add(new ModalButtonModel() { Name = "BtnGondviseloCancel", Text = Resources.CommonResource.Megse, EventName = "TanuloGondviseloHelper.newGondviseloCancel" });
            pm.Buttons.Add(new ModalButtonModel() { Name = "BtnGondviseloOk", Text = Resources.CommonResource.Mentes, EventName = "TanuloGondviseloHelper.newGondviseloSave" });

            return PartialView(Constants.General.PopupView, pm);
        }

        public ActionResult ModGondviselo(int id)
        {
            var model = TanuloLogic.GetTanuloGondviselo(id);
            model.TanulovalEgyezik = true;
            model.EmailcimKotelezo = false;
            model.EmailTipusKotelezo = false;
            model.TelefonKotelezo = false;
            model.IsGondviseloElerhetoseg = false;
            model.FormSettings = new List<string>() {
                CimElerhetosegConstant.EmailSectionVisible,
                CimElerhetosegConstant.TelSectionVisible,
                CimElerhetosegConstant.TanuloElerhetosegEmailVisible,
                CimElerhetosegConstant.TanuloElerhetosegTelVisible
            };
            model.IsSzirIntezmeny = ClaimData.IsSzirIntezmeny;
            var pm = new PopUpModel(model, "_Gondviselo_Bevitel");

            pm.Buttons.Add(new ModalButtonModel() { Name = "BtnGondviseloCancel", Text = Resources.CommonResource.Megse, EventName = "TanuloGondviseloHelper.modGondviseloCancel" });
            pm.Buttons.Add(new ModalButtonModel() { Name = "BtnGondviseloOk", Text = Resources.CommonResource.Mentes, EventName = "TanuloGondviseloHelper.modGondviseloSave" });

            return PartialView(Constants.General.PopupView, pm);
        }

        public ActionResult NewGondviseloCim(int tanuloId)
        {
            var model = new CimElerhetosegModel()
            {
                FelhasznaloId = tanuloId,
                CimTipus = (int)CimTipusEnum.allando_lakcim,
                AlapertelmezettCim = true,
                IsGondviseloElerhetoseg = true,
                TanulovalEgyezik = false,
                FormSettings = new List<string>() {
                    CimElerhetosegConstant.CimSectionVisible,
                    CimElerhetosegConstant.IsNew,
                    CimElerhetosegConstant.AlapertelmezettCimVisible
                }
            };
            var pm = new PopUpModel(model, "_Elerhetoseg_Cim_BevitelGondv");

            var tanuloHelper = new TanuloHelper(ConnectionTypeExtensions.GetSessionConnectionType());
            if (!tanuloHelper.CheckLetezikGondviseloAllandoLakcim(tanuloId))
            {
                model.CimTipus = (int)CimTipusEnum.allando_lakcim;
            }

            model.GondviselokAlapertelmezettCimmel = tanuloHelper.GondviselokAlapertelmezettCimmel(tanuloId);

            pm.Buttons.Add(new ModalButtonModel() { Name = "BtnElerhetosegCancel", Text = Resources.CommonResource.Megse, EventName = "GondviseloElerhetosegCimHelper.newGondviseloCimCancel" });
            pm.Buttons.Add(new ModalButtonModel() { Name = "BtnElerhetosegOk", Text = Resources.CommonResource.Mentes, EventName = "GondviseloElerhetosegCimHelper.newGondviseloCimSave" });

            return PartialView(Constants.General.PopupView, pm);
        }

        public ActionResult ModGondviseloCim(int id)
        {
            var model = TanuloLogic.GetGondviseloElerhetosegCim(id);
            model.IsGondviseloElerhetoseg = true;
            model.FormSettings = new List<string>() {
                CimElerhetosegConstant.CimSectionVisible,
                CimElerhetosegConstant.AlapertelmezettCimVisible
            };
            var pm = new PopUpModel(model, "_Elerhetoseg_Cim_BevitelGondv");

            pm.Buttons.Add(new ModalButtonModel() { Name = "BtnElerhetosegCancel", Text = Resources.CommonResource.Megse, EventName = "GondviseloElerhetosegCimHelper.modGondviseloCimCancel" });
            pm.Buttons.Add(new ModalButtonModel() { Name = "BtnElerhetosegOk", Text = Resources.CommonResource.Mentes, EventName = "GondviseloElerhetosegCimHelper.modGondviseloCimSave" });

            return PartialView(Constants.General.PopupView, pm);
        }

        public ActionResult UjFelmentes(int tanuloId)
        {
            var model = new TanuloFelmentesModel();
            var pm = new PopUpModel(model, "_Felmentes_Bevitel");

            pm.Buttons.Add(new ModalButtonModel() { Name = "BtnFelmentesCancel", Text = Resources.CommonResource.Megse, EventName = "TanuloFelmentesHelper.newFelmentesCancel" });
            pm.Buttons.Add(new ModalButtonModel() { Name = "BtnFelmentesOk", Text = Resources.CommonResource.Mentes, EventName = "TanuloFelmentesHelper.newFelmentesSave" });

            return PartialView(Constants.General.PopupView, pm);
        }

        public ActionResult ModFelmentes(int id)
        {
            var model = TanuloLogic.GetFelmentes(id);
            var pm = new PopUpModel(model, "_Felmentes_Bevitel");

            pm.Buttons.Add(new ModalButtonModel() { Name = "BtnFelmentesCancel", Text = Resources.CommonResource.Megse, EventName = "TanuloFelmentesHelper.modFelmentesCancel" });
            pm.Buttons.Add(new ModalButtonModel() { Name = "BtnFelmentesOk", Text = Resources.CommonResource.Mentes, EventName = "TanuloFelmentesHelper.modFelmentesSave" });

            return PartialView(Constants.General.PopupView, pm);
        }

        #endregion Popups

        #region Export

        [MvcRolePackageAuthorize(TanevEnum.AktEsKovTanev, KretaClaimPackages.KollegiumModul.ClaimValue)]
        public ActionResult TanuloExportBesorolashoz([FromUri] TanuloSearchModel data)
        {
            return TanuloLogic.TanuloExportBesorolashoz(data, OktNevelesiKategoriaEnum.Kollegium);
        }

        [MvcRolePackageAuthorize(TanevEnum.AktEsKovTanev, KretaClaimPackages.KollegiumModul.ClaimValue)]
        public ActionResult TanulokLakcimmelExport([FromUri] TanuloSearchModel data)
        {
            return TanuloLogic.TanulokLakcimmelExport(data, OktNevelesiKategoriaEnum.Kollegium);
        }

        [MvcRolePackageAuthorize(TanevEnum.AktEsKovTanev, KretaClaimPackages.KollegiumModul.ClaimValue)]
        public ActionResult TanulokTanugyiAdatiExport([FromUri] TanuloSearchModel model)
        {
            return TanuloLogic.ExportTanulokTanugyiAdatai(model);
        }

        [MvcRolePackageAuthorize(TanevEnum.AktEsKovTanev, KretaClaimPackages.KollegiumModul.ClaimValue)]
        public ActionResult ExportTanulokTantargyaiEsPedagogusai([FromUri] TanuloSearchModel data)
        {
            return TanuloLogic.ExportTanulokTantargyaiEsPedagogusai(data, OktNevelesiKategoriaEnum.Kollegium);
        }

        [MvcRolePackageAuthorize(TanevEnum.AktEsKovTanev, KretaClaimPackages.KollegiumModul.ClaimValue)]
        public ActionResult GondviselokElerhetosegeiExport([FromUri] TanuloSearchModel data)
        {
            return TanuloLogic.ExportGondviselokElerhetosegei(data, OktNevelesiKategoriaEnum.Kollegium);
        }

        [MvcRolePackageAuthorize(TanevEnum.AktEsKovTanev, KretaClaimPackages.KollegiumModul.ClaimValue)]
        public ActionResult TanuloKirStatExport([FromUri] TanuloSearchModel data)
        {
            data.ForOktober = true;
            return TanuloLogic.TanuloKirStatExport(data);
        }

        [MvcRolePackageAuthorize(TanevEnum.AktEsKovTanev, KretaClaimPackages.KollegiumModul.ClaimValue)]
        public ActionResult TanuloKirStatTeljesExport([FromUri] TanuloSearchModel data)
        {
            return TanuloLogic.TanuloKirStatExport(data);
        }

        #endregion Export

        #region Belépési azonosító generálás

        [MvcRolePackageDenyAuthorize(KretaClaimPackages.IsSzirIntezmeny.ClaimValue)]
        [MvcRolePackageAuthorize(KretaClaimPackages.KollegiumModul.ClaimValue)]
        public ActionResult AzonositoGeneralasPopup(bool isTanulo, bool isPasswordReset, List<int> tanuloIdList = null, bool generaltFileLetoltes = true, bool emailKuldes = true)
        {
            var hozzaferesModel = new HozzaferesGeneralasaModel
            {
                TanuloIdList = tanuloIdList,
                IsTanulo = isTanulo,
                GeneraltFileLetoltes = generaltFileLetoltes,
                EmailKuldes = emailKuldes,
                IsPasswordReset = isPasswordReset
            };

            if (isPasswordReset)
            {
                hozzaferesModel.ConfirmText = isTanulo ?
                    TanuloResource.JelszoAlaphelyzetbeAllitasaTanuloConfirm :
                    TanuloResource.JelszoAlaphelyzetbeAllitasaGondviseloConfirm;
                if (isTanulo)
                {
                    hozzaferesModel.TanulokEmailElerhetosegNelkul = TanuloLogic.GetTanulokEmailNelkulSzam(tanuloIdList);
                }
            }
            else
            {
                if (tanuloIdList != null)
                {
                    hozzaferesModel.ConfirmText = isTanulo ?
                        TanuloResource.BelepesiAzonositoGeneralasaKijeloltTanulokConfirm :
                        TanuloResource.BelepesiAzonositoGeneralasaKijeloltTanulokGondviseloinekConfirm;
                }
                else
                {
                    hozzaferesModel.ConfirmText = isTanulo ?
                        TanuloResource.BelepesiAzonositoGeneralasTanuloConfirm :
                        TanuloResource.BelepesiAzonositoGeneralasGondviseloConfirm;
                }
            }
            var model = new PopUpModel(hozzaferesModel, "HozzaferesGeneralasModal");
            model.AddBtn(model, "hozzaferes_generalas_Nem", "Nem", "KretaWindowHelper.destroyAllWindow");
            model.AddBtn(model, "hozzaferes_generalas_Igen", "Igen", "TanuloHelper.hozzaferesGeneralas");
            return PartialView(Constants.General.PopupView, model);
        }

        [MvcRolePackageDenyAuthorize(KretaClaimPackages.IsSzirIntezmeny.ClaimValue)]
        [MvcRolePackageAuthorize(KretaClaimPackages.KollegiumModul.ClaimValue)]
        public JsonResult AzonositoGeneralas(bool isTanulo, bool fileLetoltesSzukseges, bool isPasswordReset, List<int> tanuloIdList = null)
        {
            var popupModel = TanuloLogic.AzonositoGeneralas(isTanulo, fileLetoltesSzukseges, isPasswordReset, tanuloIdList);
            return Json(popupModel);
        }

        public ActionResult SetGondviseloToBovitettPopup(List<int> tanuloIdList, bool isKijeloltTanulokGondviseloi)
        {
            if (isKijeloltTanulokGondviseloi && !TanuloLogic.ExistsGondviselo(tanuloIdList))
            {
                throw new StatusError(HttpStatusCode.BadRequest, ErrorResource.AKijeloltTanuloknakNincsGondiselojuk);
            }

            var hozzaferesModel = new GondviseloToBovitettModel
            {
                TanuloIdList = tanuloIdList,
                ConfirmText = isKijeloltTanulokGondviseloi ? TanuloResource.AKijeloltTanulokOsszesGondviselojenekBelepeseBovitettLeszBiztosanFolytatja : TanuloResource.AKivalasztottGondviselonekBovitettJogosultsagLeszGeneralvaBiztosanFolytatja,
                EmailKuldes = true,
                GeneraltFileLetoltes = true
            };

            var model = new PopUpModel(hozzaferesModel, "GondviseloToBovitettModal");
            model.AddBtn(model, "hozzaferes_generalas_Nem", CommonResource.Nem, "TanuloGondviseloHelper.setGondviseloToBovitettCancel");
            model.AddBtn(model, "hozzaferes_generalas_Igen", CommonResource.Igen, isKijeloltTanulokGondviseloi ? "TanuloHelper.setGondviseloToBovitett" : "TanuloGondviseloHelper.setGondviseloToBovitett");
            return PartialView(Constants.General.PopupView, model);
        }

        [MvcRolePackageDenyAuthorize(TanevEnum.Mind, KretaClaimPackages.IsSzirIntezmeny.ClaimValue)]
        public JsonResult SetKijeloltTanulokGondviseloiToBovitett(bool emailKuldesSzukseges, bool fileLetoltesSzukseges, List<int> tanuloIdList)
        {
            var popupModel = TanuloLogic.SetKijeloltTanulokGondviseloiToBovitett(emailKuldesSzukseges, fileLetoltesSzukseges, tanuloIdList);
            return Json(popupModel);
        }

        [MvcRolePackageDenyAuthorize(TanevEnum.Mind, KretaClaimPackages.IsSzirIntezmeny.ClaimValue)]
        public JsonResult SetGondviseloToBovitett(bool emailKuldesSzukseges, bool fileLetoltesSzukseges, List<int> gondviseloIdList)
        {
            var popupModel = TanuloLogic.SetGondviseloToBovitett(emailKuldesSzukseges, fileLetoltesSzukseges, gondviseloIdList);
            return Json(popupModel);
        }

        public ActionResult DownloadEmailNelkuliTanulokJelszoResetEsetenXlsx(List<int> tanuloIds)
        {
            try
            {
                var nevmodel = new NyomtatvanyNevGeneralasModel { TanevID = ClaimData.AktivTanevID };
                var fileName = CommonExtensions.NevGeneralas(TanuloResource.TanulokEmailElerhetosegNelkulFileName, nevmodel);

                var fileContent = new TanuloHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetTanulokEmailNelkulJelszoResethezXlsx(tanuloIds);

                return new FileContentResult(fileContent, MediaTypeNames.Application.Octet)
                {
                    FileDownloadName = HttpUtility.UrlEncode($"{fileName}.xlsx", Encoding.UTF8),
                };
            }
            catch (Exception ex)
            {
                throw new StatusError(HttpStatusCode.BadRequest, ErrorResource.SikertelenAllomanyLetoltes, ex);
            }
        }

        #endregion Belépési azonosító generálás
    }
}