diff --git a/server/AyaNova/Controllers/WorkOrderController.cs b/server/AyaNova/Controllers/WorkOrderController.cs index e0aeb233..a168cccc 100644 --- a/server/AyaNova/Controllers/WorkOrderController.cs +++ b/server/AyaNova/Controllers/WorkOrderController.cs @@ -673,7 +673,7 @@ namespace AyaNova.Api.Controllers return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); - var o = await biz.GetPartAsync(WorkOrderItemPartId); + var o = await biz.PartGetAsync(WorkOrderItemPartId); if (o == null) return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); return Ok(ApiOkResponse.Response(o, !Authorized.HasModifyRole(HttpContext.Items, AyaType.WorkOrderItemPart))); diff --git a/server/AyaNova/biz/WorkOrderBiz.cs b/server/AyaNova/biz/WorkOrderBiz.cs index eedcbce0..f5625a8d 100644 --- a/server/AyaNova/biz/WorkOrderBiz.cs +++ b/server/AyaNova/biz/WorkOrderBiz.cs @@ -1251,7 +1251,7 @@ namespace AyaNova.Biz //////////////////////////////////////////////////////////////////////////////////////////////// // GET // - internal async Task GetPartAsync(long id, bool logTheGetEvent = true) + internal async Task PartGetAsync(long id, bool logTheGetEvent = true) { //Note: there could be rules checking here in future, i.e. can only get own workorder or something //if so, then need to implement AddError and in route handle Null return with Error check just like PUT route does now @@ -2342,7 +2342,70 @@ namespace AyaNova.Biz + #region Utility + public ICoreBizObjectModel GetWorkOrderGraphItem(AyaType ayaType, long id) + { + switch (ayaType) + { + case AyaType.WorkOrder: + return (ICoreBizObjectModel)WorkOrderGetAsync(id, false); + case AyaType.WorkOrderItem: + return (ICoreBizObjectModel)ItemGetAsync(id, false); + case AyaType.WorkOrderItemExpense: + return (ICoreBizObjectModel)ExpenseGetAsync(id, false); + case AyaType.WorkOrderItemLabor: + return (ICoreBizObjectModel)LaborGetAsync(id, false); + case AyaType.WorkOrderItemLoan: + return (ICoreBizObjectModel)LoanGetAsync(id, false); + case AyaType.WorkOrderItemPart: + return (ICoreBizObjectModel)PartGetAsync(id, false); + case AyaType.WorkOrderItemPartRequest: + return (ICoreBizObjectModel)PartRequestGetAsync(id, false); + case AyaType.WorkOrderItemScheduledUser: + return (ICoreBizObjectModel)ScheduledUserGetAsync(id, false); + case AyaType.WorkOrderItemTask: + return (ICoreBizObjectModel)TaskGetAsync(id, false); + case AyaType.WorkOrderItemTravel: + return (ICoreBizObjectModel)TravelGetAsync(id, false); + case AyaType.WorkOrderItemUnit: + return (ICoreBizObjectModel)UnitGetAsync(id, false); + default: + throw new System.ArgumentOutOfRangeException($"WorkOrder::GetWorkOrderGraphItem -> Invalid ayaType{ayaType}"); + } + } + public ICoreBizObjectModel PutWorkOrderGraphItem(AyaType ayaType, ICoreBizObjectModel o) + { + ClearErrors(); + switch (ayaType) + { + case AyaType.WorkOrder: + return (ICoreBizObjectModel)WorkOrderPutAsync((dtWorkOrder)o); + case AyaType.WorkOrderItem: + return (ICoreBizObjectModel)ItemPutAsync((dtWorkOrderItem)o); + case AyaType.WorkOrderItemExpense: + return (ICoreBizObjectModel)ExpensePutAsync((WorkOrderItemExpense)o); + case AyaType.WorkOrderItemLabor: + return (ICoreBizObjectModel)LaborPutAsync((WorkOrderItemLabor)o); + case AyaType.WorkOrderItemLoan: + return (ICoreBizObjectModel)LoanPutAsync((WorkOrderItemLoan)o); + case AyaType.WorkOrderItemPart: + return (ICoreBizObjectModel)PartPutAsync((WorkOrderItemPart)o); + case AyaType.WorkOrderItemPartRequest: + return (ICoreBizObjectModel)PartRequestPutAsync((WorkOrderItemPartRequest)o); + case AyaType.WorkOrderItemScheduledUser: + return (ICoreBizObjectModel)ScheduledUserPutAsync((WorkOrderItemScheduledUser)o); + case AyaType.WorkOrderItemTask: + return (ICoreBizObjectModel)TaskPutAsync((WorkOrderItemTask)o); + case AyaType.WorkOrderItemTravel: + return (ICoreBizObjectModel)TravelPutAsync((WorkOrderItemTravel)o); + case AyaType.WorkOrderItemUnit: + return (ICoreBizObjectModel)UnitPutAsync((WorkOrderItemUnit)o); + default: + throw new System.ArgumentOutOfRangeException($"WorkOrder::PutWorkOrderGraphItem -> Invalid ayaType{ayaType}"); + } + } + #endregion utility @@ -2356,100 +2419,74 @@ namespace AyaNova.Biz { case JobType.BulkCoreBizObjectOperation: await ProcessBulkJobAsync(job); - break; + break; default: throw new System.ArgumentOutOfRangeException($"WorkOrder.HandleJob-> Invalid job type{job.JobType.ToString()}"); } } - private async Task ProcessBulkJobAsync(OpsJob job) { await JobsBiz.UpdateJobStatusAsync(job.GId, JobStatus.Running, ct); await JobsBiz.LogJobAsync(job.GId, $"Bulk job {job.SubType} started...", ct); - List idList = new List(); long ProcessedObjectCount = 0; JObject jobData = JObject.Parse(job.JobInfo); - - - //TAGS? - string ToTag = null; - string Tag = null; - if (jobData.ContainsKey("tag")) - Tag = (string)jobData["tag"]; - - if (jobData.ContainsKey("toTag")) - ToTag = (string)jobData["toTag"]; - if (jobData.ContainsKey("idList")) - { idList = ((JArray)jobData["idList"]).ToObject>(); - // jobData["idList"].Value>(); - } else - { - //we need to fetch a list of them all because ALL items was selected - //If they wanted to filter (say by Active=true) they can do that from a grid list mass op idList = await ct.Widget.Select(m => m.Id).ToListAsync(); - } - - bool SaveIt = false; - //Iterate the list fetching each in turn and sending to the processor to handle foreach (long id in idList) { try { SaveIt = false; - //errors would pile up here if not cleared on each iteration ClearErrors(); + ICoreBizObjectModel o = null; + switch (job.ObjectType) + { + case AyaType.WorkOrder: + o = (ICoreBizObjectModel)WorkOrderGetAsync(id, false); + break; + case AyaType.WorkOrderItem: + case AyaType.WorkOrderItemExpense: + case AyaType.WorkOrderItemLabor: + case AyaType.WorkOrderItemLoan: + case AyaType.WorkOrderItemPart: + case AyaType.WorkOrderItemPartRequest: + case AyaType.WorkOrderItemScheduledUser: + case AyaType.WorkOrderItemTask: + case AyaType.WorkOrderItemTravel: + case AyaType.WorkOrderItemUnit: - //Fetch - var o = (ICoreBizObjectModel)await WorkOrderGetAsync(id, false); - //call out processor for each item in turn + } + + // var o = await GetAsync(id, false); switch (job.SubType) { case JobSubType.TagAddAny: case JobSubType.TagAdd: - if (!o.Tags.Contains(Tag)) - { - o.Tags.Add(Tag); - SaveIt = true; - } - break; case JobSubType.TagRemoveAny: case JobSubType.TagRemove: - SaveIt = o.Tags.Remove(Tag); - break; case JobSubType.TagReplaceAny: case JobSubType.TagReplace: - int index = o.Tags.IndexOf(Tag); - if (index != -1) - { - o.Tags[index] = ToTag; - SaveIt = true; - } + SaveIt = TagBiz.ProcessBulkTagOperation(o.Tags, (string)jobData["tag"], jobData.ContainsKey("toTag") ? (string)jobData["toTag"] : null, job.SubType); break; default: throw new System.ArgumentOutOfRangeException($"ProcessBulkJob -> Invalid job Subtype{job.SubType}"); } - if (SaveIt) { - o = await WorkOrderPutAsync((dtWorkOrder)o); + // o = await PutAsync(o); if (o == null) await JobsBiz.LogJobAsync(job.GId, $"Error processing item {id}: {GetErrorsAsString()}", ct); else ProcessedObjectCount++; } else - { - ProcessedObjectCount++; - } - } catch (Exception ex) { @@ -2462,8 +2499,6 @@ namespace AyaNova.Biz } - - ///////////////////////////////////////////////////////////////////// }//eoc