diff --git a/server/AyaNova/Controllers/WorkOrderController.cs b/server/AyaNova/Controllers/WorkOrderController.cs index f236e0a5..1e33bb2d 100644 --- a/server/AyaNova/Controllers/WorkOrderController.cs +++ b/server/AyaNova/Controllers/WorkOrderController.cs @@ -49,7 +49,7 @@ namespace AyaNova.Api.Controllers /// Automatically filled from route path, no need to specify in body /// [HttpPost] - public async Task PostWorkOrder([FromBody] WorkOrder newObj, ApiVersion apiVersion) + public async Task PostWorkOrder([FromBody] WorkOrder newObject, ApiVersion apiVersion) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); @@ -65,7 +65,7 @@ namespace AyaNova.Api.Controllers return BadRequest(new ApiErrorResponse(ModelState)); //Create and validate - WorkOrder o = await biz.CreateAsync(newObj); + WorkOrder o = await biz.CreateAsync(newObject); if (o == null) return BadRequest(new ApiErrorResponse(biz.Errors)); else @@ -424,6 +424,120 @@ namespace AyaNova.Api.Controllers #region WorkOrderItemLabor + /// + /// Create WorkOrderItemLabor + /// + /// + /// Automatically filled from route path, no need to specify in body + /// + [HttpPost("items/labors")] + public async Task PostWorkOrderItemLabor([FromBody] WorkOrderItemLabor newObject, ApiVersion apiVersion) + { + //NOTE: we don't need the workorder id in the route because the workorder item must contain the workorder id anyway + + + if (!serverState.IsOpen) + return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); + + //Instantiate the business object handler + WorkOrderBiz biz = WorkOrderBiz.GetBiz(ct, HttpContext); + + //If a user has change roles + if (!Authorized.HasCreateRole(HttpContext.Items, biz.BizType)) + return StatusCode(403, new ApiNotAuthorizedResponse()); + + if (!ModelState.IsValid) + return BadRequest(new ApiErrorResponse(ModelState)); + + // //Create and validate + // WorkOrderItemLabor o = await biz.CreateAsync(newObject); + // if (o == null) + // return BadRequest(new ApiErrorResponse(biz.Errors)); + // else + // return CreatedAtAction(nameof(WorkOrderController.GetWorkOrder), new { id = o.Id, version = apiVersion.ToString() }, new ApiCreatedResponse(o)); + return StatusCode(501); + } + + + + + /// + /// Get WorkOrderItemLabor object + /// + /// + /// A single WorkOrderItemLabor + [HttpGet("items/labors/{WorkOrderItemLaborId}")] + public async Task GetWorkOrderItemLabor([FromRoute] long WorkOrderItemLaborId) + { + if (!serverState.IsOpen) + return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); + + //Instantiate the business object handler + WorkOrderBiz biz = WorkOrderBiz.GetBiz(ct, HttpContext); + + //NOTE: This is the first check and often the only check but in some cases with some objects this will also need to check biz object rules + if (!Authorized.HasReadFullRole(HttpContext.Items, biz.BizType)) + return StatusCode(403, new ApiNotAuthorizedResponse()); + + if (!ModelState.IsValid) + return BadRequest(new ApiErrorResponse(ModelState)); + + // var o = await biz.GetAsync(id); + // if (o == null) + // return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); + + // // NOTE: HERE would be the second check of biz rules before returning the object + // // in cases where there is also a business rule to affect retrieval on top of basic rights + + // return Ok(ApiOkResponse.Response(o, !Authorized.HasModifyRole(HttpContext.Items, biz.BizType))); + return StatusCode(501); + } + + + + /// + /// Put (update) WorkOrderItemLabor + /// + /// + /// + /// + [HttpPut("items/labors/{WorkOrderItemLaborId}")] + public async Task PutWorkOrderItemLabor([FromRoute] long id, [FromBody] WorkOrderItemLabor updatedObject) + { + if (!serverState.IsOpen) + return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); + + if (!ModelState.IsValid) + return BadRequest(new ApiErrorResponse(ModelState)); + + //Instantiate the business object handler + WorkOrderBiz biz = WorkOrderBiz.GetBiz(ct, HttpContext); + + var o = await biz.GetAsync(id, false); + if (o == null) + return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); + + if (!Authorized.HasModifyRole(HttpContext.Items, biz.BizType)) + return StatusCode(403, new ApiNotAuthorizedResponse()); + + // try + // { + // if (!await biz.PutAsync(o, updatedObject)) + // return BadRequest(new ApiErrorResponse(biz.Errors)); + // } + // catch (DbUpdateConcurrencyException) + // { + // if (!await biz.ExistsAsync(id)) + // return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); + // else + // return StatusCode(409, new ApiErrorResponse(ApiErrorCode.CONCURRENCY_CONFLICT)); + // } + // return Ok(ApiOkResponse.Response(new { ConcurrencyToken = o.ConcurrencyToken }, true)); + return StatusCode(501); + } + + + /// /// Delete WorkOrderItemLabor @@ -481,6 +595,122 @@ namespace AyaNova.Api.Controllers #region WorkOrderItemPart + + /// + /// Create WorkOrderItemPart + /// + /// + /// Automatically filled from route path, no need to specify in body + /// + [HttpPost("items/parts")] + public async Task PostWorkOrderItemPart([FromBody] WorkOrderItemPart newObject, ApiVersion apiVersion) + { + //NOTE: we don't need the workorder id in the route because the workorder item must contain the workorder id anyway + + + if (!serverState.IsOpen) + return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); + + //Instantiate the business object handler + WorkOrderBiz biz = WorkOrderBiz.GetBiz(ct, HttpContext); + + //If a user has change roles + if (!Authorized.HasCreateRole(HttpContext.Items, biz.BizType)) + return StatusCode(403, new ApiNotAuthorizedResponse()); + + if (!ModelState.IsValid) + return BadRequest(new ApiErrorResponse(ModelState)); + + // //Create and validate + // WorkOrderItemPart o = await biz.CreateAsync(newObject); + // if (o == null) + // return BadRequest(new ApiErrorResponse(biz.Errors)); + // else + // return CreatedAtAction(nameof(WorkOrderController.GetWorkOrder), new { id = o.Id, version = apiVersion.ToString() }, new ApiCreatedResponse(o)); + return StatusCode(501); + } + + + + + /// + /// Get WorkOrderItemPart object + /// + /// + /// A single WorkOrderItemPart + [HttpGet("items/parts/{WorkOrderItemPartId}")] + public async Task GetWorkOrderItemPart([FromRoute] long WorkOrderItemPartId) + { + if (!serverState.IsOpen) + return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); + + //Instantiate the business object handler + WorkOrderBiz biz = WorkOrderBiz.GetBiz(ct, HttpContext); + + //NOTE: This is the first check and often the only check but in some cases with some objects this will also need to check biz object rules + if (!Authorized.HasReadFullRole(HttpContext.Items, biz.BizType)) + return StatusCode(403, new ApiNotAuthorizedResponse()); + + if (!ModelState.IsValid) + return BadRequest(new ApiErrorResponse(ModelState)); + + // var o = await biz.GetAsync(id); + // if (o == null) + // return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); + + // // NOTE: HERE would be the second check of biz rules before returning the object + // // in cases where there is also a business rule to affect retrieval on top of basic rights + + // return Ok(ApiOkResponse.Response(o, !Authorized.HasModifyRole(HttpContext.Items, biz.BizType))); + return StatusCode(501); + } + + + + /// + /// Put (update) WorkOrderItemPart + /// + /// + /// + /// + [HttpPut("items/parts/{WorkOrderItemPartId}")] + public async Task PutWorkOrderItemPart([FromRoute] long id, [FromBody] WorkOrderItemPart updatedObject) + { + if (!serverState.IsOpen) + return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); + + if (!ModelState.IsValid) + return BadRequest(new ApiErrorResponse(ModelState)); + + //Instantiate the business object handler + WorkOrderBiz biz = WorkOrderBiz.GetBiz(ct, HttpContext); + + var o = await biz.GetAsync(id, false); + if (o == null) + return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); + + if (!Authorized.HasModifyRole(HttpContext.Items, biz.BizType)) + return StatusCode(403, new ApiNotAuthorizedResponse()); + + // try + // { + // if (!await biz.PutAsync(o, updatedObject)) + // return BadRequest(new ApiErrorResponse(biz.Errors)); + // } + // catch (DbUpdateConcurrencyException) + // { + // if (!await biz.ExistsAsync(id)) + // return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); + // else + // return StatusCode(409, new ApiErrorResponse(ApiErrorCode.CONCURRENCY_CONFLICT)); + // } + // return Ok(ApiOkResponse.Response(new { ConcurrencyToken = o.ConcurrencyToken }, true)); + return StatusCode(501); + } + + + + /// /// Delete WorkOrderItemPart ///