From ad8f2129b3228c7a29c7c0e55b322c4cfeeff027 Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Thu, 24 Mar 2022 22:29:44 +0000 Subject: [PATCH] --- .../AyaNova/Controllers/ImportController.cs | 238 +++++++++--------- server/AyaNova/biz/CustomerBiz.cs | 4 +- .../AyaNova/biz/CustomerServiceRequestBiz.cs | 4 +- server/AyaNova/biz/HeadOfficeBiz.cs | 4 +- server/AyaNova/biz/IImportAbleObject.cs | 4 +- server/AyaNova/biz/LoanUnitBiz.cs | 4 +- server/AyaNova/biz/MemoBiz.cs | 4 +- server/AyaNova/biz/PartAssemblyBiz.cs | 4 +- server/AyaNova/biz/PartBiz.cs | 4 +- server/AyaNova/biz/PartWarehouseBiz.cs | 4 +- server/AyaNova/biz/ProjectBiz.cs | 4 +- server/AyaNova/biz/ReminderBiz.cs | 4 +- server/AyaNova/biz/ReviewBiz.cs | 4 +- server/AyaNova/biz/ServiceRateBiz.cs | 4 +- server/AyaNova/biz/TaskGroupBiz.cs | 4 +- server/AyaNova/biz/TaxCodeBiz.cs | 4 +- server/AyaNova/biz/TravelRateBiz.cs | 4 +- server/AyaNova/biz/UnitBiz.cs | 4 +- server/AyaNova/biz/UnitModelBiz.cs | 4 +- server/AyaNova/biz/UserBiz.cs | 4 +- server/AyaNova/biz/VendorBiz.cs | 4 +- server/AyaNova/models/dto/AyImportData.cs | 19 ++ 22 files changed, 177 insertions(+), 160 deletions(-) create mode 100644 server/AyaNova/models/dto/AyImportData.cs diff --git a/server/AyaNova/Controllers/ImportController.cs b/server/AyaNova/Controllers/ImportController.cs index a6671db2..9ed0084a 100644 --- a/server/AyaNova/Controllers/ImportController.cs +++ b/server/AyaNova/Controllers/ImportController.cs @@ -45,7 +45,7 @@ namespace AyaNova.Api.Controllers /// From route path /// [HttpPost] - public async Task PostImportData([FromBody] AyImportObject importData, ApiVersion apiVersion) + public async Task PostImportData([FromBody] AyImportData importData, ApiVersion apiVersion) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); @@ -54,135 +54,133 @@ namespace AyaNova.Api.Controllers return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); - await Task.CompletedTask; - return Ok(); - // if (o == null) - // return BadRequest(new ApiErrorResponse(biz.Errors)); - // else - // return CreatedAtAction(nameof(CustomerController.GetCustomer), new { id = o.Id, version = apiVersion.ToString() }, new ApiCreatedResponse(o)); - } - - public class AyImportObject - { - public AyaType AType { get; set; } - public JArray Data { get; set; } - public bool DoImport {get;set;} - public bool DoUpdate {get;set;} - } - - - /// - /// Upload and import file - /// Max 100MiB total - /// - /// Results - [Authorize] - [HttpPost("upload")] - [DisableFormValueModelBinding] - [RequestSizeLimit(AyaNova.Util.ServerBootConfig.MAX_IMPORT_FILE_UPLOAD_BYTES)] - public async Task UploadAsync() - { - //Adapted from the example found here: https://docs.microsoft.com/en-us/aspnet/core/mvc/models/file-uploads#uploading-large-files-with-streaming - - if (!serverState.IsOpen) - return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); - - //This route is ONLY available to users with full rights to Global object - if (!Authorized.HasModifyRole(HttpContext.Items, AyaType.Global)) - { - return StatusCode(403, new ApiNotAuthorizedResponse()); - } - - // AyaTypeId attachToObject = null; - ApiUploadProcessor.ApiUploadedFilesResult uploadFormData = null; List ImportResult = new List(); ImportResult.Add("Import results\n"); - try - { - if (!MultipartRequestHelper.IsMultipartContentType(Request.ContentType)) - return BadRequest(new ApiErrorResponse(ApiErrorCode.INVALID_OPERATION, null, $"Expected a multipart request, but got {Request.ContentType}")); + log.LogDebug($"Instantiating biz object handler for {importData.AType}"); + var biz = BizObjectFactory.GetBizObject(importData.AType, ct, UserIdFromContext.Id(HttpContext.Items), UserRolesFromContext.Roles(HttpContext.Items)); - //Save uploads to disk under temporary file names until we decide how to handle them - // uploadFormData = await ApiUploadProcessor.ProcessUploadAsync(HttpContext);xx - - - string UploadAType = string.Empty; - - string errorMessage = string.Empty; - string Notes = string.Empty; - List FileData = new List(); - - //Save uploads to disk under temporary file names until we decide how to handle them - uploadFormData = await ApiUploadProcessor.ProcessUploadAsync(HttpContext); - if (!string.IsNullOrWhiteSpace(uploadFormData.Error)) - { - errorMessage = uploadFormData.Error; - //delete temp files - ApiUploadProcessor.DeleteTempUploadFile(uploadFormData); - //file too large is most likely issue so in that case return this localized properly - if (errorMessage.Contains("413")) - { - var TransId = UserTranslationIdFromContext.Id(HttpContext.Items); - return BadRequest(new ApiErrorResponse( - ApiErrorCode.VALIDATION_LENGTH_EXCEEDED, - null, - String.Format(await TranslationBiz.GetTranslationStaticAsync("AyaFileFileTooLarge", TransId, ct), AyaNova.Util.FileUtil.GetBytesReadable(AyaNova.Util.ServerBootConfig.MAX_IMPORT_FILE_UPLOAD_BYTES)))); - } - else//not too big, something else - return BadRequest(new ApiErrorResponse(ApiErrorCode.VALIDATION_INVALID_VALUE, null, errorMessage)); - } - - if (!uploadFormData.FormFieldData.ContainsKey("FileData"))//only filedata is required - return BadRequest(new ApiErrorResponse(ApiErrorCode.INVALID_OPERATION, null, "Missing required FormFieldData value: FileData")); - - - if (uploadFormData.FormFieldData.ContainsKey("AType")) - UploadAType = uploadFormData.FormFieldData["AType"].ToString(); - else - return BadRequest(new ApiErrorResponse(ApiErrorCode.INVALID_OPERATION, null, "Missing required FormFieldData value: AType")); - - //fileData in JSON stringify format which contains the actual last modified dates etc - //"[{\"name\":\"Client.csv\",\"lastModified\":1582822079618},{\"name\":\"wmi4fu06nrs41.jpg\",\"lastModified\":1586900220990}]" - FileData = Newtonsoft.Json.JsonConvert.DeserializeObject>(uploadFormData.FormFieldData["FileData"].ToString()); - - - - //Instantiate the business object handler - AyaType TheType = System.Enum.Parse(UploadAType, true); - log.LogDebug($"Instantiating biz object handler for {TheType}"); - var biz = BizObjectFactory.GetBizObject(TheType, ct, UserIdFromContext.Id(HttpContext.Items), UserRolesFromContext.Roles(HttpContext.Items)); - - if (!(biz is IImportAbleObject)) - return BadRequest(new ApiErrorResponse(ApiErrorCode.INVALID_OPERATION, null, $"Import not supported for {TheType} objects")); - - //We have our files now can parse and insert into db - if (uploadFormData.UploadedFiles.Count > 0) - { - //deserialize each file and import - foreach (UploadedFileInfo a in uploadFormData.UploadedFiles) - { - JArray ja = JArray.Parse(System.IO.File.ReadAllText(a.InitialUploadedPathName)); - ImportResult.AddRange(await ((IImportAbleObject)biz).ImportData(ja)); - } - } - } - catch (System.IO.InvalidDataException ex) - { - return BadRequest(new ApiErrorResponse(ApiErrorCode.INVALID_OPERATION, null, ex.Message)); - } - finally - { - //delete all the files temporarily uploaded and return bad request - - ApiUploadProcessor.DeleteTempUploadFile(uploadFormData); - } + if (!(biz is IImportAbleObject)) + return BadRequest(new ApiErrorResponse(ApiErrorCode.INVALID_OPERATION, null, $"Import not supported for {importData.AType} objects")); + ImportResult.AddRange(await ((IImportAbleObject)biz).ImportData(importData)); return Ok(ApiOkResponse.Response(ImportResult)); + } + // /// + // /// Upload and import file + // /// Max 100MiB total + // /// + // /// Results + // [Authorize] + // [HttpPost("upload")] + // [DisableFormValueModelBinding] + // [RequestSizeLimit(AyaNova.Util.ServerBootConfig.MAX_IMPORT_FILE_UPLOAD_BYTES)] + // public async Task UploadAsync() + // { + // //Adapted from the example found here: https://docs.microsoft.com/en-us/aspnet/core/mvc/models/file-uploads#uploading-large-files-with-streaming + + // if (!serverState.IsOpen) + // return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); + + // //This route is ONLY available to users with full rights to Global object + // if (!Authorized.HasModifyRole(HttpContext.Items, AyaType.Global)) + // { + // return StatusCode(403, new ApiNotAuthorizedResponse()); + // } + + // // AyaTypeId attachToObject = null; + // ApiUploadProcessor.ApiUploadedFilesResult uploadFormData = null; + // List ImportResult = new List(); + // ImportResult.Add("Import results\n"); + // try + // { + // if (!MultipartRequestHelper.IsMultipartContentType(Request.ContentType)) + // return BadRequest(new ApiErrorResponse(ApiErrorCode.INVALID_OPERATION, null, $"Expected a multipart request, but got {Request.ContentType}")); + + // //Save uploads to disk under temporary file names until we decide how to handle them + // // uploadFormData = await ApiUploadProcessor.ProcessUploadAsync(HttpContext);xx + + + // string UploadAType = string.Empty; + + // string errorMessage = string.Empty; + // string Notes = string.Empty; + // List FileData = new List(); + + // //Save uploads to disk under temporary file names until we decide how to handle them + // uploadFormData = await ApiUploadProcessor.ProcessUploadAsync(HttpContext); + // if (!string.IsNullOrWhiteSpace(uploadFormData.Error)) + // { + // errorMessage = uploadFormData.Error; + // //delete temp files + // ApiUploadProcessor.DeleteTempUploadFile(uploadFormData); + // //file too large is most likely issue so in that case return this localized properly + // if (errorMessage.Contains("413")) + // { + // var TransId = UserTranslationIdFromContext.Id(HttpContext.Items); + // return BadRequest(new ApiErrorResponse( + // ApiErrorCode.VALIDATION_LENGTH_EXCEEDED, + // null, + // String.Format(await TranslationBiz.GetTranslationStaticAsync("AyaFileFileTooLarge", TransId, ct), AyaNova.Util.FileUtil.GetBytesReadable(AyaNova.Util.ServerBootConfig.MAX_IMPORT_FILE_UPLOAD_BYTES)))); + // } + // else//not too big, something else + // return BadRequest(new ApiErrorResponse(ApiErrorCode.VALIDATION_INVALID_VALUE, null, errorMessage)); + // } + + // if (!uploadFormData.FormFieldData.ContainsKey("FileData"))//only filedata is required + // return BadRequest(new ApiErrorResponse(ApiErrorCode.INVALID_OPERATION, null, "Missing required FormFieldData value: FileData")); + + + // if (uploadFormData.FormFieldData.ContainsKey("AType")) + // UploadAType = uploadFormData.FormFieldData["AType"].ToString(); + // else + // return BadRequest(new ApiErrorResponse(ApiErrorCode.INVALID_OPERATION, null, "Missing required FormFieldData value: AType")); + + // //fileData in JSON stringify format which contains the actual last modified dates etc + // //"[{\"name\":\"Client.csv\",\"lastModified\":1582822079618},{\"name\":\"wmi4fu06nrs41.jpg\",\"lastModified\":1586900220990}]" + // FileData = Newtonsoft.Json.JsonConvert.DeserializeObject>(uploadFormData.FormFieldData["FileData"].ToString()); + + + + // //Instantiate the business object handler + // AyaType TheType = System.Enum.Parse(UploadAType, true); + // log.LogDebug($"Instantiating biz object handler for {TheType}"); + // var biz = BizObjectFactory.GetBizObject(TheType, ct, UserIdFromContext.Id(HttpContext.Items), UserRolesFromContext.Roles(HttpContext.Items)); + + // if (!(biz is IImportAbleObject)) + // return BadRequest(new ApiErrorResponse(ApiErrorCode.INVALID_OPERATION, null, $"Import not supported for {TheType} objects")); + + // //We have our files now can parse and insert into db + // if (uploadFormData.UploadedFiles.Count > 0) + // { + // //deserialize each file and import + // foreach (UploadedFileInfo a in uploadFormData.UploadedFiles) + // { + // JArray ja = JArray.Parse(System.IO.File.ReadAllText(a.InitialUploadedPathName)); + // ImportResult.AddRange(await ((IImportAbleObject)biz).ImportData(ja)); + // } + // } + // } + // catch (System.IO.InvalidDataException ex) + // { + // return BadRequest(new ApiErrorResponse(ApiErrorCode.INVALID_OPERATION, null, ex.Message)); + // } + // finally + // { + // //delete all the files temporarily uploaded and return bad request + + // ApiUploadProcessor.DeleteTempUploadFile(uploadFormData); + // } + + // return Ok(ApiOkResponse.Response(ImportResult)); + // } + + + //----------------------------------------- diff --git a/server/AyaNova/biz/CustomerBiz.cs b/server/AyaNova/biz/CustomerBiz.cs index 47cf7d57..247a1f34 100644 --- a/server/AyaNova/biz/CustomerBiz.cs +++ b/server/AyaNova/biz/CustomerBiz.cs @@ -427,13 +427,13 @@ namespace AyaNova.Biz return await GetReportData(dataListSelectedRequest, jobId); } - public async Task> ImportData(JArray ja) + public async Task> ImportData(AyImportData importData) { List ImportResult = new List(); string ImportTag = $"imported-{FileUtil.GetSafeDateFileName()}"; var jsset = JsonSerializer.CreateDefault(new JsonSerializerSettings { ContractResolver = new AyaNova.Util.JsonUtil.ShouldSerializeContractResolver(new string[] { "Concurrency", "Id", "CustomFields" }) }); - foreach (JObject j in ja) + foreach (JObject j in importData.Data) { var w = j.ToObject(jsset); if (j["CustomFields"] != null) diff --git a/server/AyaNova/biz/CustomerServiceRequestBiz.cs b/server/AyaNova/biz/CustomerServiceRequestBiz.cs index 2282b5ec..c290186e 100644 --- a/server/AyaNova/biz/CustomerServiceRequestBiz.cs +++ b/server/AyaNova/biz/CustomerServiceRequestBiz.cs @@ -334,13 +334,13 @@ namespace AyaNova.Biz return await GetReportData(dataListSelectedRequest, jobId); } - public async Task> ImportData(JArray ja) + public async Task> ImportData(AyImportData importData) { List ImportResult = new List(); string ImportTag = $"imported-{FileUtil.GetSafeDateFileName()}"; var jsset = JsonSerializer.CreateDefault(new JsonSerializerSettings { ContractResolver = new AyaNova.Util.JsonUtil.ShouldSerializeContractResolver(new string[] { "Concurrency", "Id", "CustomFields" }) }); - foreach (JObject j in ja) + foreach (JObject j in importData.Data) { var w = j.ToObject(jsset); if (j["CustomFields"] != null) diff --git a/server/AyaNova/biz/HeadOfficeBiz.cs b/server/AyaNova/biz/HeadOfficeBiz.cs index 0ba0d750..2ac974eb 100644 --- a/server/AyaNova/biz/HeadOfficeBiz.cs +++ b/server/AyaNova/biz/HeadOfficeBiz.cs @@ -343,13 +343,13 @@ namespace AyaNova.Biz - public async Task> ImportData(JArray ja) + public async Task> ImportData(AyImportData importData) { List ImportResult = new List(); string ImportTag = $"imported-{FileUtil.GetSafeDateFileName()}"; var jsset = JsonSerializer.CreateDefault(new JsonSerializerSettings { ContractResolver = new AyaNova.Util.JsonUtil.ShouldSerializeContractResolver(new string[] { "Concurrency", "Id", "CustomFields" }) }); - foreach (JObject j in ja) + foreach (JObject j in importData.Data) { var w = j.ToObject(jsset); if (j["CustomFields"] != null) diff --git a/server/AyaNova/biz/IImportAbleObject.cs b/server/AyaNova/biz/IImportAbleObject.cs index aa855d25..d54dcf65 100644 --- a/server/AyaNova/biz/IImportAbleObject.cs +++ b/server/AyaNova/biz/IImportAbleObject.cs @@ -1,6 +1,6 @@ using System.Threading.Tasks; -using Newtonsoft.Json.Linq; using System.Collections.Generic; +using AyaNova.Models; namespace AyaNova.Biz { @@ -9,7 +9,7 @@ namespace AyaNova.Biz /// internal interface IImportAbleObject { - Task> ImportData(JArray ja); + Task> ImportData(AyImportData importData); } } \ No newline at end of file diff --git a/server/AyaNova/biz/LoanUnitBiz.cs b/server/AyaNova/biz/LoanUnitBiz.cs index cffc1e17..fadd1caf 100644 --- a/server/AyaNova/biz/LoanUnitBiz.cs +++ b/server/AyaNova/biz/LoanUnitBiz.cs @@ -351,13 +351,13 @@ namespace AyaNova.Biz - public async Task> ImportData(JArray ja) + public async Task> ImportData(AyImportData importData) { List ImportResult = new List(); string ImportTag = $"imported-{FileUtil.GetSafeDateFileName()}"; var jsset = JsonSerializer.CreateDefault(new JsonSerializerSettings { ContractResolver = new AyaNova.Util.JsonUtil.ShouldSerializeContractResolver(new string[] { "Concurrency", "Id", "CustomFields" }) }); - foreach (JObject j in ja) + foreach (JObject j in importData.Data) { var w = j.ToObject(jsset); if (j["CustomFields"] != null) diff --git a/server/AyaNova/biz/MemoBiz.cs b/server/AyaNova/biz/MemoBiz.cs index 4e40ad40..1e1e23a6 100644 --- a/server/AyaNova/biz/MemoBiz.cs +++ b/server/AyaNova/biz/MemoBiz.cs @@ -336,13 +336,13 @@ namespace AyaNova.Biz return await GetReportData(dataListSelectedRequest, jobId); } - public async Task> ImportData(JArray ja) + public async Task> ImportData(AyImportData importData) { List ImportResult = new List(); string ImportTag = $"imported-{FileUtil.GetSafeDateFileName()}"; var jsset = JsonSerializer.CreateDefault(new JsonSerializerSettings { ContractResolver = new AyaNova.Util.JsonUtil.ShouldSerializeContractResolver(new string[] { "Concurrency", "Id", "CustomFields" }) }); - foreach (JObject j in ja) + foreach (JObject j in importData.Data) { var w = j.ToObject(jsset); if (j["CustomFields"] != null) diff --git a/server/AyaNova/biz/PartAssemblyBiz.cs b/server/AyaNova/biz/PartAssemblyBiz.cs index c1f2c23e..85ea2d6c 100644 --- a/server/AyaNova/biz/PartAssemblyBiz.cs +++ b/server/AyaNova/biz/PartAssemblyBiz.cs @@ -379,13 +379,13 @@ namespace AyaNova.Biz return await GetReportData(dataListSelectedRequest, jobId); } - public async Task> ImportData(JArray ja) + public async Task> ImportData(AyImportData importData) { List ImportResult = new List(); string ImportTag = $"imported-{FileUtil.GetSafeDateFileName()}"; var jsset = JsonSerializer.CreateDefault(new JsonSerializerSettings { ContractResolver = new AyaNova.Util.JsonUtil.ShouldSerializeContractResolver(new string[] { "Concurrency", "Id", "CustomFields" }) }); - foreach (JObject j in ja) + foreach (JObject j in importData.Data) { var w = j.ToObject(jsset); if (j["CustomFields"] != null) diff --git a/server/AyaNova/biz/PartBiz.cs b/server/AyaNova/biz/PartBiz.cs index 39067e2f..4e0c3fbe 100644 --- a/server/AyaNova/biz/PartBiz.cs +++ b/server/AyaNova/biz/PartBiz.cs @@ -554,13 +554,13 @@ namespace AyaNova.Biz return await GetReportData(dataListSelectedRequest, jobId); } - public async Task> ImportData(JArray ja) + public async Task> ImportData(AyImportData importData) { List ImportResult = new List(); string ImportTag = $"imported-{FileUtil.GetSafeDateFileName()}"; var jsset = JsonSerializer.CreateDefault(new JsonSerializerSettings { ContractResolver = new AyaNova.Util.JsonUtil.ShouldSerializeContractResolver(new string[] { "Concurrency", "Id", "CustomFields" }) }); - foreach (JObject j in ja) + foreach (JObject j in importData.Data) { var w = j.ToObject(jsset); if (j["CustomFields"] != null) diff --git a/server/AyaNova/biz/PartWarehouseBiz.cs b/server/AyaNova/biz/PartWarehouseBiz.cs index 61dc0264..b686e0ac 100644 --- a/server/AyaNova/biz/PartWarehouseBiz.cs +++ b/server/AyaNova/biz/PartWarehouseBiz.cs @@ -327,13 +327,13 @@ namespace AyaNova.Biz - public async Task> ImportData(JArray ja) + public async Task> ImportData(AyImportData importData) { List ImportResult = new List(); string ImportTag = $"imported-{FileUtil.GetSafeDateFileName()}"; var jsset = JsonSerializer.CreateDefault(new JsonSerializerSettings { ContractResolver = new AyaNova.Util.JsonUtil.ShouldSerializeContractResolver(new string[] { "Concurrency", "Id", "CustomFields" }) }); - foreach (JObject j in ja) + foreach (JObject j in importData.Data) { var w = j.ToObject(jsset); if (j["CustomFields"] != null) diff --git a/server/AyaNova/biz/ProjectBiz.cs b/server/AyaNova/biz/ProjectBiz.cs index 636fe970..815e8cf4 100644 --- a/server/AyaNova/biz/ProjectBiz.cs +++ b/server/AyaNova/biz/ProjectBiz.cs @@ -327,13 +327,13 @@ namespace AyaNova.Biz return await GetReportData(dataListSelectedRequest, jobId); } - public async Task> ImportData(JArray ja) + public async Task> ImportData(AyImportData importData) { List ImportResult = new List(); string ImportTag = $"imported-{FileUtil.GetSafeDateFileName()}"; var jsset = JsonSerializer.CreateDefault(new JsonSerializerSettings { ContractResolver = new AyaNova.Util.JsonUtil.ShouldSerializeContractResolver(new string[] { "Concurrency", "Id", "CustomFields" }) }); - foreach (JObject j in ja) + foreach (JObject j in importData.Data) { var w = j.ToObject(jsset); if (j["CustomFields"] != null) diff --git a/server/AyaNova/biz/ReminderBiz.cs b/server/AyaNova/biz/ReminderBiz.cs index 144df28b..184536ce 100644 --- a/server/AyaNova/biz/ReminderBiz.cs +++ b/server/AyaNova/biz/ReminderBiz.cs @@ -325,13 +325,13 @@ namespace AyaNova.Biz return await GetReportData(dataListSelectedRequest, jobId); } - public async Task> ImportData(JArray ja) + public async Task> ImportData(AyImportData importData) { List ImportResult = new List(); string ImportTag = $"imported-{FileUtil.GetSafeDateFileName()}"; var jsset = JsonSerializer.CreateDefault(new JsonSerializerSettings { ContractResolver = new AyaNova.Util.JsonUtil.ShouldSerializeContractResolver(new string[] { "Concurrency", "Id", "CustomFields" }) }); - foreach (JObject j in ja) + foreach (JObject j in importData.Data) { var w = j.ToObject(jsset); if (j["CustomFields"] != null) diff --git a/server/AyaNova/biz/ReviewBiz.cs b/server/AyaNova/biz/ReviewBiz.cs index f7b21905..1aead844 100644 --- a/server/AyaNova/biz/ReviewBiz.cs +++ b/server/AyaNova/biz/ReviewBiz.cs @@ -403,13 +403,13 @@ namespace AyaNova.Biz return await GetReportData(dataListSelectedRequest, jobId); } - public async Task> ImportData(JArray ja) + public async Task> ImportData(AyImportData importData) { List ImportResult = new List(); string ImportTag = $"imported-{FileUtil.GetSafeDateFileName()}"; var jsset = JsonSerializer.CreateDefault(new JsonSerializerSettings { ContractResolver = new AyaNova.Util.JsonUtil.ShouldSerializeContractResolver(new string[] { "Concurrency", "Id", "CustomFields" }) }); - foreach (JObject j in ja) + foreach (JObject j in importData.Data) { var w = j.ToObject(jsset); if (j["CustomFields"] != null) diff --git a/server/AyaNova/biz/ServiceRateBiz.cs b/server/AyaNova/biz/ServiceRateBiz.cs index 53d09a4a..294d55fe 100644 --- a/server/AyaNova/biz/ServiceRateBiz.cs +++ b/server/AyaNova/biz/ServiceRateBiz.cs @@ -344,13 +344,13 @@ namespace AyaNova.Biz - public async Task> ImportData(JArray ja) + public async Task> ImportData(AyImportData importData) { List ImportResult = new List(); string ImportTag = $"imported-{FileUtil.GetSafeDateFileName()}"; var jsset = JsonSerializer.CreateDefault(new JsonSerializerSettings { ContractResolver = new AyaNova.Util.JsonUtil.ShouldSerializeContractResolver(new string[] { "Concurrency", "Id", "CustomFields" }) }); - foreach (JObject j in ja) + foreach (JObject j in importData.Data) { var w = j.ToObject(jsset); if (j["CustomFields"] != null) diff --git a/server/AyaNova/biz/TaskGroupBiz.cs b/server/AyaNova/biz/TaskGroupBiz.cs index e250d0c8..2cd9faec 100644 --- a/server/AyaNova/biz/TaskGroupBiz.cs +++ b/server/AyaNova/biz/TaskGroupBiz.cs @@ -325,13 +325,13 @@ namespace AyaNova.Biz return await GetReportData(dataListSelectedRequest, jobId); } - public async Task> ImportData(JArray ja) + public async Task> ImportData(AyImportData importData) { List ImportResult = new List(); string ImportTag = $"imported-{FileUtil.GetSafeDateFileName()}"; var jsset = JsonSerializer.CreateDefault(new JsonSerializerSettings { ContractResolver = new AyaNova.Util.JsonUtil.ShouldSerializeContractResolver(new string[] { "Concurrency", "Id", "CustomFields" }) }); - foreach (JObject j in ja) + foreach (JObject j in importData.Data) { var w = j.ToObject(jsset); // if (j["CustomFields"] != null) diff --git a/server/AyaNova/biz/TaxCodeBiz.cs b/server/AyaNova/biz/TaxCodeBiz.cs index 0dfe79df..87e812b1 100644 --- a/server/AyaNova/biz/TaxCodeBiz.cs +++ b/server/AyaNova/biz/TaxCodeBiz.cs @@ -373,13 +373,13 @@ namespace AyaNova.Biz - public async Task> ImportData(JArray ja) + public async Task> ImportData(AyImportData importData) { List ImportResult = new List(); string ImportTag = $"imported-{FileUtil.GetSafeDateFileName()}"; var jsset = JsonSerializer.CreateDefault(new JsonSerializerSettings { ContractResolver = new AyaNova.Util.JsonUtil.ShouldSerializeContractResolver(new string[] { "Concurrency", "Id", "CustomFields" }) }); - foreach (JObject j in ja) + foreach (JObject j in importData.Data) { var w = j.ToObject(jsset); if (j["CustomFields"] != null) diff --git a/server/AyaNova/biz/TravelRateBiz.cs b/server/AyaNova/biz/TravelRateBiz.cs index e0b0b2bb..0822472c 100644 --- a/server/AyaNova/biz/TravelRateBiz.cs +++ b/server/AyaNova/biz/TravelRateBiz.cs @@ -340,13 +340,13 @@ namespace AyaNova.Biz - public async Task> ImportData(JArray ja) + public async Task> ImportData(AyImportData importData) { List ImportResult = new List(); string ImportTag = $"imported-{FileUtil.GetSafeDateFileName()}"; var jsset = JsonSerializer.CreateDefault(new JsonSerializerSettings { ContractResolver = new AyaNova.Util.JsonUtil.ShouldSerializeContractResolver(new string[] { "Concurrency", "Id", "CustomFields" }) }); - foreach (JObject j in ja) + foreach (JObject j in importData.Data) { var w = j.ToObject(jsset); if (j["CustomFields"] != null) diff --git a/server/AyaNova/biz/UnitBiz.cs b/server/AyaNova/biz/UnitBiz.cs index f60517e3..6cfc9ae8 100644 --- a/server/AyaNova/biz/UnitBiz.cs +++ b/server/AyaNova/biz/UnitBiz.cs @@ -419,13 +419,13 @@ namespace AyaNova.Biz - public async Task> ImportData(JArray ja) + public async Task> ImportData(AyImportData importData) { List ImportResult = new List(); string ImportTag = $"imported-{FileUtil.GetSafeDateFileName()}"; var jsset = JsonSerializer.CreateDefault(new JsonSerializerSettings { ContractResolver = new AyaNova.Util.JsonUtil.ShouldSerializeContractResolver(new string[] { "Concurrency", "Id", "CustomFields" }) }); - foreach (JObject j in ja) + foreach (JObject j in importData.Data) { var w = j.ToObject(jsset); if (j["CustomFields"] != null) diff --git a/server/AyaNova/biz/UnitModelBiz.cs b/server/AyaNova/biz/UnitModelBiz.cs index 298ff182..c77e6061 100644 --- a/server/AyaNova/biz/UnitModelBiz.cs +++ b/server/AyaNova/biz/UnitModelBiz.cs @@ -327,13 +327,13 @@ namespace AyaNova.Biz return await GetReportData(dataListSelectedRequest, jobId); } - public async Task> ImportData(JArray ja) + public async Task> ImportData(AyImportData importData) { List ImportResult = new List(); string ImportTag = $"imported-{FileUtil.GetSafeDateFileName()}"; var jsset = JsonSerializer.CreateDefault(new JsonSerializerSettings { ContractResolver = new AyaNova.Util.JsonUtil.ShouldSerializeContractResolver(new string[] { "Concurrency", "Id", "CustomFields" }) }); - foreach (JObject j in ja) + foreach (JObject j in importData.Data) { var w = j.ToObject(jsset); if (j["CustomFields"] != null) diff --git a/server/AyaNova/biz/UserBiz.cs b/server/AyaNova/biz/UserBiz.cs index 448261a4..3bba1b6b 100644 --- a/server/AyaNova/biz/UserBiz.cs +++ b/server/AyaNova/biz/UserBiz.cs @@ -1089,13 +1089,13 @@ namespace AyaNova.Biz - public async Task> ImportData(JArray ja) + public async Task> ImportData(AyImportData importData) { List ImportResult = new List(); string ImportTag = $"imported-{FileUtil.GetSafeDateFileName()}"; var jsset = JsonSerializer.CreateDefault(new JsonSerializerSettings { ContractResolver = new AyaNova.Util.JsonUtil.ShouldSerializeContractResolver(new string[] { "Concurrency", "Id", "CustomFields" }) }); - foreach (JObject j in ja) + foreach (JObject j in importData.Data) { var w = j.ToObject(jsset); if (j["CustomFields"] != null) diff --git a/server/AyaNova/biz/VendorBiz.cs b/server/AyaNova/biz/VendorBiz.cs index ed3a4888..9fcea72e 100644 --- a/server/AyaNova/biz/VendorBiz.cs +++ b/server/AyaNova/biz/VendorBiz.cs @@ -357,13 +357,13 @@ namespace AyaNova.Biz - public async Task> ImportData(JArray ja) + public async Task> ImportData(AyImportData importData) { List ImportResult = new List(); string ImportTag = $"imported-{FileUtil.GetSafeDateFileName()}"; var jsset = JsonSerializer.CreateDefault(new JsonSerializerSettings { ContractResolver = new AyaNova.Util.JsonUtil.ShouldSerializeContractResolver(new string[] { "Concurrency", "Id", "CustomFields" }) }); - foreach (JObject j in ja) + foreach (JObject j in importData.Data) { var w = j.ToObject(jsset); if (j["CustomFields"] != null) diff --git a/server/AyaNova/models/dto/AyImportData.cs b/server/AyaNova/models/dto/AyImportData.cs new file mode 100644 index 00000000..b1bc1a2f --- /dev/null +++ b/server/AyaNova/models/dto/AyImportData.cs @@ -0,0 +1,19 @@ +using System; +using AyaNova.Biz; +using Newtonsoft.Json.Linq; + +namespace AyaNova.Models +{ + + /// + /// Import data object used by admin->import feature + /// + public class AyImportData + { + public AyaType AType { get; set; } + public JArray Data { get; set; } + public bool DoImport {get;set;} + public bool DoUpdate {get;set;} + } + +}