kreta/KretaWeb/Areas/Adminisztracio/Controllers/KIRTanuloImportController.cs
2024-03-13 00:33:46 +01:00

234 lines
9.8 KiB
C#

using System;
using System.Data;
using System.IO;
using System.Net;
using System.Web;
using System.Web.Mvc;
using Kendo.Mvc.UI;
using Kreta.BusinessLogic.Exceptions;
using Kreta.BusinessLogic.Helpers;
using Kreta.BusinessLogic.Security;
using Kreta.BusinessLogic.Utils;
using Kreta.Core;
using Kreta.Core.Exceptions;
using Kreta.Core.FeatureToggle;
using Kreta.Enums.ManualEnums;
using Kreta.Resources;
using Kreta.Web.Areas.Adminisztracio.Models;
using Kreta.Web.Classes;
using Kreta.Web.Helpers;
using Kreta.Web.Helpers.Error;
using Kreta.Web.Helpers.Grid;
using Kreta.Web.Models.EditorTemplates;
using Kreta.Web.Security;
namespace Kreta.Web.Areas.Adminisztracio.Controllers
{
[MvcRoleClaimsAuthorize(true)]
[MvcRolePackageDenyAuthorize(KretaClaimPackages.IsOnlyAlkalmozott.ClaimValue)]
[MvcRolePackageAuthorize(TanevEnum.AktEsKovTanev, KretaClaimPackages.Adminisztrator.ClaimValue)]
public class KIRTanuloImportController : Controller
{
private IFeatureContext FeatureContext { get; }
private IUploadFileValidator UploadFileValidator { get; }
public KIRTanuloImportController(IFeatureContext featureContext, IUploadFileValidator uploadFileValidator)
{
FeatureContext = featureContext ?? throw new ArgumentNullException(nameof(featureContext));
UploadFileValidator = uploadFileValidator ?? throw new ArgumentNullException(nameof(uploadFileValidator));
}
// GET: Adminisztracio/KIRTanuloImport
public ActionResult Index()
{
var model = new TanuloKIRImportModel
{
KirLoginModel = new KIRLoginModel()
{
OmAzonosito = ClaimData.OrganizationCode,
},
TanevId = ClaimData.SelectedTanevID.Value,
KIRImportEnabled = FeatureContext.IsEnabled(Core.Constants.FeatureName.KIRImport),
MaxAllowedFileSizeInBytes = UploadFileValidator.Configuration.ImportMaxAllowedFileSizeInBytes,
AllowedFileExtensions = UploadFileValidator.Configuration.ImportAllowedFileExtensions,
IsSzakkepzoIntezmeny = ClaimData.IsSzakkepzoIntezmeny,
};
return View(model);
}
public ActionResult OpenKIRTanuloImportPopup(TanuloKIRImportModel model)
{
if (ModelState.IsValid)
{
try
{
var kirHelper = new KirHelper(ConnectionTypeExtensions.GetSessionConnectionType(), model.KirLoginModel.OmAzonosito, model.KirLoginModel.FelhasznaloNev, jelszo: model.KirLoginModel.Jelszo);
var tanarestanuloKirImportModel = new TanuloKIRImportModel
{
TanevId = ClaimData.SelectedTanevID.Value,
KIRImportModel = new KIRImportModel
{
OmAzonosito = model.KirLoginModel.OmAzonosito,
FelhasznaloNev = model.KirLoginModel.FelhasznaloNev,
KirToken = kirHelper.KirToken,
TelephelyList = kirHelper.GetTelephelyList().ToSelectListItemList()
},
KirLoginModel = new KIRLoginModel
{
OmAzonosito = model.KirLoginModel.OmAzonosito,
FelhasznaloNev = model.KirLoginModel.FelhasznaloNev
},
};
var pm = new PopUpModel(tanarestanuloKirImportModel, "KIRTanuloImportModal");
pm.AddCancelBtn(pm, "KretaWindowHelper.destroyAllWindow");
pm.AddBtn(pm, "BtnKIRImport", 3486 /*Importálás*/, "KIRTanuloImportHelper.KIRImport");
return PartialView(Constants.General.PopupView, pm);
}
catch (Exception e)
{
StatusError error = new StatusError(HttpStatusCode.BadRequest, e.Message);
throw error;
}
}
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
public ActionResult KIRImport(TanuloKIRImportModel model)
{
if (ModelState.IsValid)
{
var kirHelper = new KirHelper(ConnectionTypeExtensions.GetSessionConnectionType(), model.KIRImportModel.OmAzonosito, model.KIRImportModel.FelhasznaloNev, kirToken: model.KIRImportModel.KirToken);
var tanuloList = kirHelper.GetTanuloList(model.KIRImportModel.TelephelyKod.Value);
LicenceHelper.LicenceWait(ClaimData.LicenceDatum);
var anotherYearId = Kreta.Web.Classes.Utils.GetAnotherYearId();
new EgysegesImportHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType()).ExecuteKIRTanuloImport(tanuloList, anotherYearId, ClaimData.IsKovTanev);
}
return new HttpStatusCodeResult(HttpStatusCode.OK);
}
public ActionResult OpenTanuloImportPopUp(bool? isJuttatasUpdate)
{
var helper = new EgysegesImportHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType());
var tanulokFelolteseModel = new TanulokFeltolteseModel
{
TanevId = ClaimData.SelectedTanevID.Value,
Errors = helper.TanuloKIRAdatok.Validate(),
IsJuttatasUpdate = isJuttatasUpdate,
IsSzakkepzoIntezmeny = ClaimData.IsSzakkepzoIntezmeny,
};
var model = new PopUpModel(tanulokFelolteseModel, "TanulokFeltolteseModal");
model.AddCancelBtn(model, "KretaWindowHelper.destroyAllWindow");
if (tanulokFelolteseModel.Errors.Count == 0)
{
model.AddOkBtn(model, "KIRTanuloFeltoltesHelper.Save");
}
return PartialView(Constants.General.PopupView, model);
}
public ActionResult UploadKIRTanuloFile(HttpPostedFileBase importTanuloFile)
{
UploadFileValidator.ValidateImportFile(importTanuloFile);
try
{
TantervHelper helper = new TantervHelper(ConnectionTypeExtensions.GetSessionConnectionType());
DataSet tantervDataSet = helper.TantervKereses();
if (!tantervDataSet.Tables[0].Rows.Count.IsNotNullAndPositive())
{
throw new BlException(ImportExportOrarendResource.TantervNotFound);
}
LicenceHelper.LicenceWait(ClaimData.LicenceDatum);
var anotherYearId = Kreta.Web.Classes.Utils.GetAnotherYearId();
new EgysegesImportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).ExecuteKIRTanuloImportFile(importTanuloFile.ContentLength, importTanuloFile.InputStream, importTanuloFile.FileName, anotherYearId, ClaimData.IsKovTanev, ClaimData.IsSzakkepzoIntezmeny);
}
catch (BlException e)
{
throw new StatusError(HttpStatusCode.BadRequest, e.Message);
}
catch (InvalidDataException e)
{
throw new StatusError(HttpStatusCode.BadRequest, e.Message);
}
catch (KretaInvalidFileFormatException e)
{
throw new StatusError(HttpStatusCode.BadRequest, e.Message);
}
catch (Exception e)
{
throw new StatusError(HttpStatusCode.BadRequest, e.Message);
}
return Content(string.Empty);
}
public ActionResult SaveTanulok(bool? isJuttatasUpdate)
{
if (ModelState.IsValid)
{
try
{
var helper = new EgysegesImportHelper(ConnectionTypeExtensions.GetSessionConnectionType());
LicenceHelper.LicenceWait(ClaimData.LicenceDatum);
helper.SaveImportaltTanulok(isJuttatasUpdate ?? false);
return Json(new { tovabbUrl = @"/Tanulo/Tanulo" });
}
catch (BlException)
{
throw;
}
catch (SDA.DataProvider.UniqueKeyViolationException)
{
/*A fájlban szereplő oktatási azonosítóval már szerepel diák az adatbázisban*/
StatusError error = new StatusError(HttpStatusCode.BadRequest, StringResourcesUtils.GetString(4852));
throw error;
}
}
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
public ActionResult GetPreLoadedStudents(DataSourceRequest request)
{
var helper = new EgysegesImportHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType());
helper.GridParameters = Converter.GridParameter(request);
return Json(helper.GetImportaltTanulok().ToDataSourceResult(), JsonRequestBehavior.AllowGet);
}
public ActionResult DownloadTemplate()
{
string filePath = Kreta.Web.Classes.Utils.GetExcelTemplateFilePath(Constants.ImportExport.TanuloImportSablonNev);
if (filePath == null)
{
throw new StatusError(HttpStatusCode.BadRequest, ErrorResource.FajlNemLetezik);
}
return File(filePath, Core.Constants.ContentTypes.Xlsx, Constants.ImportExport.TanuloImportSablonNev);
}
public ActionResult ExportAktualisAdatok()
{
var memoryStream = new EgysegesImportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).ExportTanuloAktualisAdatok();
return new FileStreamResult(memoryStream, Core.Constants.ContentTypes.Xlsx) { FileDownloadName = $"{TanuloResource.TanulokExport}.{Constants.ImportExport.FileFormatXlsx}" };
}
}
}