From 95743ade971081eb606d9468286964c8a125f78e Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Fri, 8 May 2020 15:01:33 +0000 Subject: [PATCH] --- .../Controllers/WorkOrderController.cs | 8 ++-- server/AyaNova/biz/WorkOrderBiz.cs | 16 ++++--- server/AyaNova/models/WorkOrderItem.cs | 48 +++++++++++-------- 3 files changed, 41 insertions(+), 31 deletions(-) diff --git a/server/AyaNova/Controllers/WorkOrderController.cs b/server/AyaNova/Controllers/WorkOrderController.cs index 124cf59b..abca5c1a 100644 --- a/server/AyaNova/Controllers/WorkOrderController.cs +++ b/server/AyaNova/Controllers/WorkOrderController.cs @@ -105,7 +105,7 @@ namespace AyaNova.Api.Controllers return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); - var o = await biz.GetAsync(id); + var o = await biz.GetEntireWorkOrderAsync(id); if (o == null) return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); return Ok(ApiOkResponse.Response(o, !Authorized.HasModifyRole(HttpContext.Items, biz.BizType))); } @@ -177,11 +177,11 @@ namespace AyaNova.Api.Controllers /// /// Create WorkOrderItem /// - /// WorkOrderItem level only no descendents + /// WorkOrderItem - no descendents /// - /// WorkOrderItem object (no descendents) + /// WorkOrderItem object [HttpPost("items")] - public async Task PostWorkOrderItem([FromBody] WorkOrderItem newObject, ApiVersion apiVersion) + public async Task PostWorkOrderItem([FromBody] dtWorkOrderItem newObject, ApiVersion apiVersion) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); diff --git a/server/AyaNova/biz/WorkOrderBiz.cs b/server/AyaNova/biz/WorkOrderBiz.cs index bf1b8cfe..c3ff7078 100644 --- a/server/AyaNova/biz/WorkOrderBiz.cs +++ b/server/AyaNova/biz/WorkOrderBiz.cs @@ -70,7 +70,7 @@ namespace AyaNova.Biz // internal async Task DuplicateAsync(long id) { - WorkOrder dbObject = await GetAsync(id, false); + WorkOrder dbObject = await GetEntireWorkOrderAsync(id, false); if (dbObject == null) { AddError(ApiErrorCode.NOT_FOUND, "id"); @@ -94,7 +94,7 @@ namespace AyaNova.Biz //////////////////////////////////////////////////////////////////////////////////////////////// // GET // - internal async Task GetAsync(long id, bool logTheGetEvent = true) + internal async Task GetEntireWorkOrderAsync(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 @@ -121,7 +121,7 @@ namespace AyaNova.Biz internal async Task PutAsync(long id, dtWorkOrder dtPutObject) { - WorkOrder dbObject = await GetAsync(id, false); + WorkOrder dbObject = await ct.WorkOrder.SingleOrDefaultAsync(m => m.Id == id); if (dbObject == null) { AddError(ApiErrorCode.NOT_FOUND, "id"); @@ -195,8 +195,10 @@ namespace AyaNova.Biz // internal async Task DeleteAsync(long workorderId) { - - WorkOrder dbObject = await GetAsync(workorderId); + //NOPE: will need to traverse the workorder object and delete bit by bit + //Unless implement cascade delete, hmmm....is there a downside to that, this is the only route to delete it so + //if they are allowed and it validates to delete then why not? (would be much faster letting db handle it and not traversing) + WorkOrder dbObject = await GetEntireWorkOrderAsync(workorderId); ValidateCanDelete(dbObject); if (HasErrors) @@ -277,8 +279,10 @@ namespace AyaNova.Biz //////////////////////////////////////////////////////////////////////////////////////////////// //CREATE // - internal async Task CreateItemAsync(WorkOrderItem newObject) + internal async Task CreateItemAsync(dtWorkOrderItem dtNewObject) { + WorkOrderItem newObject = new WorkOrderItem(); + CopyObject.Copy(dtNewObject, newObject); await ItemValidateAsync(newObject, null); if (HasErrors) return null; diff --git a/server/AyaNova/models/WorkOrderItem.cs b/server/AyaNova/models/WorkOrderItem.cs index 48957546..7deb287b 100644 --- a/server/AyaNova/models/WorkOrderItem.cs +++ b/server/AyaNova/models/WorkOrderItem.cs @@ -5,14 +5,14 @@ using Newtonsoft.Json; namespace AyaNova.Models { - //NOTE: Any non required field (nullable in DB) sb nullable here, i.e. decimal? not decimal, - //otherwise the server will call it an invalid record if the field isn't sent from client - - public class WorkOrderItem + public class dtWorkOrderItem { + public dtWorkOrderItem() + { + Tags = new List(); + } public long Id { get; set; } public uint ConcurrencyToken { get; set; } - public string Notes { get; set; } public string Wiki { get; set; } public string CustomFields { get; set; } @@ -20,28 +20,34 @@ namespace AyaNova.Models //Principle [Required] - public long WorkorderId { get; set; }//fk + public long WorkorderId { get; set; } + }//eoc - [JsonIgnore]//Avoid circular reference when serializing + public class WorkOrderItem + { + public WorkOrderItem() + { + Tags = new List(); + //dependents + WorkorderItemLabors = new List(); + WorkorderItemParts = new List(); + } + public long Id { get; set; } + public uint ConcurrencyToken { get; set; } + public string Notes { get; set; } + public string Wiki { get; set; } + public string CustomFields { get; set; } + public List Tags { get; set; } + + //Principle + [Required] + public long WorkorderId { get; set; } + [JsonIgnore] public WorkOrder WorkOrder { get; set; } //dependents public List WorkorderItemLabors { get; set; } public List WorkorderItemParts { get; set; } - - public WorkOrderItem() - { - Tags = new List(); - WorkorderItemLabors = new List(); - WorkorderItemParts = new List(); - } - - //Not persisted business properties - //NOTE: this could be a common class applied to everything for common biz rule stuff - // //i.e. specific rights in situations based on rules, like candelete, canedit etc - // [NotMapped] - // public bool OP { get; set; }//patch operation value - }//eoc }//eons