using Microsoft.AspNetCore.Mvc; using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Email; using Sarand.Net.Standard.Base.Utils; using Saxonite.Net.Core.Web.Admin.Consoles; using Saxonite.Net.Core.Web.Admin.Models; using Saxonite.Net.Core.Web.Admin.Procs; using Saxonite.Net.Standard.Base.App; using Saxonite.Net.Standard.Base.Bus; using Saxonite.Net.Standard.Base.Helpers; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace Saxonite.Net.Core.Web.Admin.Controllers { //======================================================================= // Controller: Organisation - Ajax - Upload //======================================================================= partial class OrganisationController { //------------------------------------------------------------------- // Definitions. //------------------------------------------------------------------- // Organisation Uploader process info. //------------------------------------------------------------------- private class AjaxResponse_OrganisationUploadInfo : AjaxResponse_Data { // Construction. public AjaxResponse_OrganisationUploadInfo(SaxModel_Admin model) : base(model) { } } //------------------------------------------------------------------- [HttpPost] [Route("Organisation/Ajax/UploadInfo")] public IActionResult Ajax_OrganisationUploadInfo(SaxModel_Admin model) { String fn = GetType().Name + ".Ajax_OrganisationUploadInfo"; String messageTitle = Localiser["caption.upload.organisations"]; AjaxResponse_OrganisationUploadInfo responseData = new AjaxResponse_OrganisationUploadInfo(model); // Validate session. if (!ValidUserSession) return GetAjaxResult_InvalidSession(responseData); // Record disposable items as they are created so all can be disposed when needed. using (DisposableCollection disposableItems = new DisposableCollection()) { // Process console. SaxProcessConsole_Admin processConsole = GetProcessConsole_Admin(SessionContext); if (processConsole == null) return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.system"])); try { // Check whether upload is in progress. if (processConsole.IsProcessing(SaxProcessConsole_Admin.ProcessType.OrganisationUpload)) return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.process.in.progress"])); } catch (Exception exc) { SaLogger.Warn(fn + " " + exc.GetType().Name + " initialising organisation uploader."); return Json(responseData.SetPopupMessage(messageTitle, exc.GetType().Name + " initialising organisation uploader.")); } } // Complete response. responseData.Success = true; return Json(responseData); } //------------------------------------------------------------------- // Upload Organisations. //------------------------------------------------------------------- private class AjaxResponse_OrganisationUpload : AjaxResponse_Data { // Construction. public AjaxResponse_OrganisationUpload(SaxModel_Admin model) : base(model) { } } //------------------------------------------------------------------- [HttpPost] [Route("Organisation/Ajax/Upload")] public IActionResult Ajax_UploadOrganisations(Model_OrganisationUpload model) { String fn = GetType().Name + ".Ajax_UploadOrganisations"; String messageTitle = Localiser["caption.upload.organisations"]; AjaxResponse_OrganisationUpload responseData = new AjaxResponse_OrganisationUpload(model); // Validate session. if (!ValidUserSession) return GetAjaxResult_InvalidSession(responseData); // Record disposable items as they are created so all can be disposed when needed. using (DisposableCollection disposableItems = new DisposableCollection()) { // Validate supplied data properties. if (!model.ValidateProperties(responseData)) return Json(responseData); // Process console. SaxProcessConsole_Admin processConsole = GetProcessConsole_Admin(SessionContext); if (processConsole == null) return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.system"])); try { // Check whether upload is in progress. if (processConsole.IsProcessing(SaxProcessConsole_Admin.ProcessType.OrganisationUpload)) return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.process.in.progress"])); // Create the upload process. SaxOrganisationUploader.Config processConfig = new SaxOrganisationUploader.Config(SessionContext, DbUpdateInfo, model.OrganisationDataFile[0]); processConfig.SheetNameOrNumber = model.SheetNameOrNumber; processConfig.HeaderRowPos = (uint)StringUtil.ToInt(model.HeaderRow); processConfig.FirstDataRowPos = (uint)StringUtil.ToInt(model.FirstDataRow); SaxOrganisationUploader process = new SaxOrganisationUploader(processConfig); // Store the process and run. processConsole.SetProcess(process); process.RunAsync(); } catch (Exception exc) { SaLogger.Warn(fn + " " + exc.GetType().Name + " initialising organisation uploader."); return Json(responseData.SetPopupMessage(messageTitle, exc.GetType().Name + " initialising organisation uploader.")); } } // Complete response. responseData.Success = true; return Json(responseData); } //------------------------------------------------------------------- } }