diff --git a/server/AyaNova/Controllers/WorkOrderController.cs b/server/AyaNova/Controllers/WorkOrderController.cs
index e8beb12d..3f973cde 100644
--- a/server/AyaNova/Controllers/WorkOrderController.cs
+++ b/server/AyaNova/Controllers/WorkOrderController.cs
@@ -500,6 +500,744 @@ namespace AyaNova.Api.Controllers
#endregion WorkOrderItemPart
+
+
+
+ //*******************************new
+ /*
+ part requests
+
+ */
+
+ #region WorkOrderItemPartRequest
+
+ ///
+ /// Create WorkOrderItemPartRequest
+ ///
+ /// WorkOrderItemPartRequest level only no descendents
+ ///
+ /// WorkOrderItemPartRequest object (no descendents)
+ [HttpPost("items/partrequests")]
+ public async Task PostWorkOrderItemPartRequest([FromBody] WorkOrderItemPartRequest newObject, ApiVersion apiVersion)
+ {
+ if (!serverState.IsOpen)
+ return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));
+ WorkOrderBiz biz = WorkOrderBiz.GetBiz(ct, HttpContext);
+ if (!Authorized.HasCreateRole(HttpContext.Items, AyaType.WorkOrderItemPartRequest))
+ return StatusCode(403, new ApiNotAuthorizedResponse());
+ if (!ModelState.IsValid)
+ return BadRequest(new ApiErrorResponse(ModelState));
+ WorkOrderItemPartRequest o = await biz.CreatePartRequestAsync(newObject);
+ if (o == null)
+ return BadRequest(new ApiErrorResponse(biz.Errors));
+ else
+ return CreatedAtAction(nameof(WorkOrderController.GetWorkOrderItemPartRequest), new { WorkOrderItemPartRequestId = o.Id, version = apiVersion.ToString() }, new ApiCreatedResponse(o));
+ }
+
+
+ ///
+ /// Get WorkOrderItemPartRequest object
+ ///
+ ///
+ /// A single WorkOrderItemPartRequest
+ [HttpGet("items/partrequests/{WorkOrderItemPartRequestId}")]
+ public async Task GetWorkOrderItemPartRequest([FromRoute] long WorkOrderItemPartRequestId)
+ {
+ if (!serverState.IsOpen)
+ return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));
+ WorkOrderBiz biz = WorkOrderBiz.GetBiz(ct, HttpContext);
+ if (!Authorized.HasReadFullRole(HttpContext.Items, AyaType.WorkOrderItemPartRequest))
+ return StatusCode(403, new ApiNotAuthorizedResponse());
+ if (!ModelState.IsValid)
+ return BadRequest(new ApiErrorResponse(ModelState));
+ var o = await biz.GetPartRequestAsync(WorkOrderItemPartRequestId);
+ if (o == null)
+ return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND));
+ return Ok(ApiOkResponse.Response(o, !Authorized.HasModifyRole(HttpContext.Items, AyaType.WorkOrderItemPartRequest)));
+ }
+
+ ///
+ /// Put (update) WorkOrderItemPartRequest
+ /// (Descendent objects must be updated via their individual routes seperately)
+ ///
+ /// WorkOrderItemPartRequest - top level only, no descendents
+ /// New concurrency token
+ [HttpPut("items/partrequests")]
+ public async Task PutWorkOrderItemPartRequest([FromBody] WorkOrderItemPartRequest updatedObject)
+ {
+ if (!serverState.IsOpen)
+ return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));
+ if (!ModelState.IsValid)
+ return BadRequest(new ApiErrorResponse(ModelState));
+ WorkOrderBiz biz = WorkOrderBiz.GetBiz(ct, HttpContext);
+ if (!Authorized.HasModifyRole(HttpContext.Items, AyaType.WorkOrderItemPartRequest))
+ return StatusCode(403, new ApiNotAuthorizedResponse());
+ var o = await biz.PartRequestPutAsync(updatedObject);//In future may need to return entire object, for now just concurrency token
+ if (o == null)
+ {
+ if (biz.Errors.Exists(m => m.Code == ApiErrorCode.CONCURRENCY_CONFLICT))
+ return StatusCode(409, new ApiErrorResponse(biz.Errors));
+ else
+ return BadRequest(new ApiErrorResponse(biz.Errors));
+ }
+ return Ok(ApiOkResponse.Response(new { ConcurrencyToken = o.ConcurrencyToken }, true));
+ }
+
+ ///
+ /// Delete WorkOrderItemPartRequest
+ ///
+ ///
+ /// NoContent
+ [HttpDelete("items/partrequests/{WorkOrderItemPartRequestId}")]
+ public async Task DeleteWorkOrderItemPartRequest([FromRoute] long WorkOrderItemPartRequestId)
+ {
+ if (!serverState.IsOpen)
+ return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));
+ if (!ModelState.IsValid)
+ return BadRequest(new ApiErrorResponse(ModelState));
+ WorkOrderBiz biz = WorkOrderBiz.GetBiz(ct, HttpContext);
+ if (!Authorized.HasDeleteRole(HttpContext.Items, AyaType.WorkOrderItemPartRequest))
+ return StatusCode(403, new ApiNotAuthorizedResponse());
+ if (!await biz.PartRequestDeleteAsync(WorkOrderItemPartRequestId))
+ return BadRequest(new ApiErrorResponse(biz.Errors));
+ return NoContent();
+ }
+
+ #endregion WorkOrderItemPartRequest
+
+
+
+
+
+
+ //*******************************new
+ /*
+ scheduled users
+
+ */
+
+ #region WorkOrderItemScheduledUser
+
+ ///
+ /// Create WorkOrderItemScheduledUser
+ ///
+ /// WorkOrderItemScheduledUser level only no descendents
+ ///
+ /// WorkOrderItemScheduledUser object (no descendents)
+ [HttpPost("items/scheduledusers")]
+ public async Task PostWorkOrderItemScheduledUser([FromBody] WorkOrderItemScheduledUser newObject, ApiVersion apiVersion)
+ {
+ if (!serverState.IsOpen)
+ return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));
+ WorkOrderBiz biz = WorkOrderBiz.GetBiz(ct, HttpContext);
+ if (!Authorized.HasCreateRole(HttpContext.Items, AyaType.WorkOrderItemScheduledUser))
+ return StatusCode(403, new ApiNotAuthorizedResponse());
+ if (!ModelState.IsValid)
+ return BadRequest(new ApiErrorResponse(ModelState));
+ WorkOrderItemScheduledUser o = await biz.CreateScheduledUserAsync(newObject);
+ if (o == null)
+ return BadRequest(new ApiErrorResponse(biz.Errors));
+ else
+ return CreatedAtAction(nameof(WorkOrderController.GetWorkOrderItemScheduledUser), new { WorkOrderItemScheduledUserId = o.Id, version = apiVersion.ToString() }, new ApiCreatedResponse(o));
+ }
+
+
+ ///
+ /// Get WorkOrderItemScheduledUser object
+ ///
+ ///
+ /// A single WorkOrderItemScheduledUser
+ [HttpGet("items/scheduledusers/{WorkOrderItemScheduledUserId}")]
+ public async Task GetWorkOrderItemScheduledUser([FromRoute] long WorkOrderItemScheduledUserId)
+ {
+ if (!serverState.IsOpen)
+ return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));
+ WorkOrderBiz biz = WorkOrderBiz.GetBiz(ct, HttpContext);
+ if (!Authorized.HasReadFullRole(HttpContext.Items, AyaType.WorkOrderItemScheduledUser))
+ return StatusCode(403, new ApiNotAuthorizedResponse());
+ if (!ModelState.IsValid)
+ return BadRequest(new ApiErrorResponse(ModelState));
+ var o = await biz.GetScheduledUserAsync(WorkOrderItemScheduledUserId);
+ if (o == null)
+ return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND));
+ return Ok(ApiOkResponse.Response(o, !Authorized.HasModifyRole(HttpContext.Items, AyaType.WorkOrderItemScheduledUser)));
+ }
+
+ ///
+ /// Put (update) WorkOrderItemScheduledUser
+ /// (Descendent objects must be updated via their individual routes seperately)
+ ///
+ /// WorkOrderItemScheduledUser - top level only, no descendents
+ /// New concurrency token
+ [HttpPut("items/scheduledusers")]
+ public async Task PutWorkOrderItemScheduledUser([FromBody] WorkOrderItemScheduledUser updatedObject)
+ {
+ if (!serverState.IsOpen)
+ return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));
+ if (!ModelState.IsValid)
+ return BadRequest(new ApiErrorResponse(ModelState));
+ WorkOrderBiz biz = WorkOrderBiz.GetBiz(ct, HttpContext);
+ if (!Authorized.HasModifyRole(HttpContext.Items, AyaType.WorkOrderItemScheduledUser))
+ return StatusCode(403, new ApiNotAuthorizedResponse());
+ var o = await biz.ScheduledUserPutAsync(updatedObject);//In future may need to return entire object, for now just concurrency token
+ if (o == null)
+ {
+ if (biz.Errors.Exists(m => m.Code == ApiErrorCode.CONCURRENCY_CONFLICT))
+ return StatusCode(409, new ApiErrorResponse(biz.Errors));
+ else
+ return BadRequest(new ApiErrorResponse(biz.Errors));
+ }
+ return Ok(ApiOkResponse.Response(new { ConcurrencyToken = o.ConcurrencyToken }, true));
+ }
+
+ ///
+ /// Delete WorkOrderItemScheduledUser
+ ///
+ ///
+ /// NoContent
+ [HttpDelete("items/scheduledusers/{WorkOrderItemScheduledUserId}")]
+ public async Task DeleteWorkOrderItemScheduledUser([FromRoute] long WorkOrderItemScheduledUserId)
+ {
+ if (!serverState.IsOpen)
+ return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));
+ if (!ModelState.IsValid)
+ return BadRequest(new ApiErrorResponse(ModelState));
+ WorkOrderBiz biz = WorkOrderBiz.GetBiz(ct, HttpContext);
+ if (!Authorized.HasDeleteRole(HttpContext.Items, AyaType.WorkOrderItemScheduledUser))
+ return StatusCode(403, new ApiNotAuthorizedResponse());
+ if (!await biz.ScheduledUserDeleteAsync(WorkOrderItemScheduledUserId))
+ return BadRequest(new ApiErrorResponse(biz.Errors));
+ return NoContent();
+ }
+
+ #endregion WorkOrderItemScheduledUser
+
+
+
+ //*******************************new
+ /*
+ Expenses
+
+ */
+
+ #region WorkOrderItemExpense
+
+ ///
+ /// Create WorkOrderItemExpense
+ ///
+ /// WorkOrderItemExpense level only no descendents
+ ///
+ /// WorkOrderItemExpense object (no descendents)
+ [HttpPost("items/expenses")]
+ public async Task PostWorkOrderItemExpense([FromBody] WorkOrderItemExpense newObject, ApiVersion apiVersion)
+ {
+ if (!serverState.IsOpen)
+ return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));
+ WorkOrderBiz biz = WorkOrderBiz.GetBiz(ct, HttpContext);
+ if (!Authorized.HasCreateRole(HttpContext.Items, AyaType.WorkOrderItemExpense))
+ return StatusCode(403, new ApiNotAuthorizedResponse());
+ if (!ModelState.IsValid)
+ return BadRequest(new ApiErrorResponse(ModelState));
+ WorkOrderItemExpense o = await biz.CreateExpenseAsync(newObject);
+ if (o == null)
+ return BadRequest(new ApiErrorResponse(biz.Errors));
+ else
+ return CreatedAtAction(nameof(WorkOrderController.GetWorkOrderItemExpense), new { WorkOrderItemExpenseId = o.Id, version = apiVersion.ToString() }, new ApiCreatedResponse(o));
+ }
+
+
+ ///
+ /// Get WorkOrderItemExpense object
+ ///
+ ///
+ /// A single WorkOrderItemExpense
+ [HttpGet("items/expenses/{WorkOrderItemExpenseId}")]
+ public async Task GetWorkOrderItemExpense([FromRoute] long WorkOrderItemExpenseId)
+ {
+ if (!serverState.IsOpen)
+ return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));
+ WorkOrderBiz biz = WorkOrderBiz.GetBiz(ct, HttpContext);
+ if (!Authorized.HasReadFullRole(HttpContext.Items, AyaType.WorkOrderItemExpense))
+ return StatusCode(403, new ApiNotAuthorizedResponse());
+ if (!ModelState.IsValid)
+ return BadRequest(new ApiErrorResponse(ModelState));
+ var o = await biz.GetExpenseAsync(WorkOrderItemExpenseId);
+ if (o == null)
+ return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND));
+ return Ok(ApiOkResponse.Response(o, !Authorized.HasModifyRole(HttpContext.Items, AyaType.WorkOrderItemExpense)));
+ }
+
+ ///
+ /// Put (update) WorkOrderItemExpense
+ /// (Descendent objects must be updated via their individual routes seperately)
+ ///
+ /// WorkOrderItemExpense - top level only, no descendents
+ /// New concurrency token
+ [HttpPut("items/expenses")]
+ public async Task PutWorkOrderItemExpense([FromBody] WorkOrderItemExpense updatedObject)
+ {
+ if (!serverState.IsOpen)
+ return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));
+ if (!ModelState.IsValid)
+ return BadRequest(new ApiErrorResponse(ModelState));
+ WorkOrderBiz biz = WorkOrderBiz.GetBiz(ct, HttpContext);
+ if (!Authorized.HasModifyRole(HttpContext.Items, AyaType.WorkOrderItemExpense))
+ return StatusCode(403, new ApiNotAuthorizedResponse());
+ var o = await biz.ExpensePutAsync(updatedObject);//In future may need to return entire object, for now just concurrency token
+ if (o == null)
+ {
+ if (biz.Errors.Exists(m => m.Code == ApiErrorCode.CONCURRENCY_CONFLICT))
+ return StatusCode(409, new ApiErrorResponse(biz.Errors));
+ else
+ return BadRequest(new ApiErrorResponse(biz.Errors));
+ }
+ return Ok(ApiOkResponse.Response(new { ConcurrencyToken = o.ConcurrencyToken }, true));
+ }
+
+ ///
+ /// Delete WorkOrderItemExpense
+ ///
+ ///
+ /// NoContent
+ [HttpDelete("items/expenses/{WorkOrderItemExpenseId}")]
+ public async Task DeleteWorkOrderItemExpense([FromRoute] long WorkOrderItemExpenseId)
+ {
+ if (!serverState.IsOpen)
+ return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));
+ if (!ModelState.IsValid)
+ return BadRequest(new ApiErrorResponse(ModelState));
+ WorkOrderBiz biz = WorkOrderBiz.GetBiz(ct, HttpContext);
+ if (!Authorized.HasDeleteRole(HttpContext.Items, AyaType.WorkOrderItemExpense))
+ return StatusCode(403, new ApiNotAuthorizedResponse());
+ if (!await biz.ExpenseDeleteAsync(WorkOrderItemExpenseId))
+ return BadRequest(new ApiErrorResponse(biz.Errors));
+ return NoContent();
+ }
+
+ #endregion WorkOrderItemExpense
+
+
+
+ //*******************************new
+ /*
+ Travel
+
+ */
+
+ #region WorkOrderItemTravel
+
+ ///
+ /// Create WorkOrderItemTravel
+ ///
+ /// WorkOrderItemTravel level only no descendents
+ ///
+ /// WorkOrderItemTravel object (no descendents)
+ [HttpPost("items/travels")]
+ public async Task PostWorkOrderItemTravel([FromBody] WorkOrderItemTravel newObject, ApiVersion apiVersion)
+ {
+ if (!serverState.IsOpen)
+ return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));
+ WorkOrderBiz biz = WorkOrderBiz.GetBiz(ct, HttpContext);
+ if (!Authorized.HasCreateRole(HttpContext.Items, AyaType.WorkOrderItemTravel))
+ return StatusCode(403, new ApiNotAuthorizedResponse());
+ if (!ModelState.IsValid)
+ return BadRequest(new ApiErrorResponse(ModelState));
+ WorkOrderItemTravel o = await biz.CreateTravelAsync(newObject);
+ if (o == null)
+ return BadRequest(new ApiErrorResponse(biz.Errors));
+ else
+ return CreatedAtAction(nameof(WorkOrderController.GetWorkOrderItemTravel), new { WorkOrderItemTravelId = o.Id, version = apiVersion.ToString() }, new ApiCreatedResponse(o));
+ }
+
+
+ ///
+ /// Get WorkOrderItemTravel object
+ ///
+ ///
+ /// A single WorkOrderItemTravel
+ [HttpGet("items/travels/{WorkOrderItemTravelId}")]
+ public async Task GetWorkOrderItemTravel([FromRoute] long WorkOrderItemTravelId)
+ {
+ if (!serverState.IsOpen)
+ return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));
+ WorkOrderBiz biz = WorkOrderBiz.GetBiz(ct, HttpContext);
+ if (!Authorized.HasReadFullRole(HttpContext.Items, AyaType.WorkOrderItemTravel))
+ return StatusCode(403, new ApiNotAuthorizedResponse());
+ if (!ModelState.IsValid)
+ return BadRequest(new ApiErrorResponse(ModelState));
+ var o = await biz.GetTravelAsync(WorkOrderItemTravelId);
+ if (o == null)
+ return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND));
+ return Ok(ApiOkResponse.Response(o, !Authorized.HasModifyRole(HttpContext.Items, AyaType.WorkOrderItemTravel)));
+ }
+
+ ///
+ /// Put (update) WorkOrderItemTravel
+ /// (Descendent objects must be updated via their individual routes seperately)
+ ///
+ /// WorkOrderItemTravel - top level only, no descendents
+ /// New concurrency token
+ [HttpPut("items/travels")]
+ public async Task PutWorkOrderItemTravel([FromBody] WorkOrderItemTravel updatedObject)
+ {
+ if (!serverState.IsOpen)
+ return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));
+ if (!ModelState.IsValid)
+ return BadRequest(new ApiErrorResponse(ModelState));
+ WorkOrderBiz biz = WorkOrderBiz.GetBiz(ct, HttpContext);
+ if (!Authorized.HasModifyRole(HttpContext.Items, AyaType.WorkOrderItemTravel))
+ return StatusCode(403, new ApiNotAuthorizedResponse());
+ var o = await biz.TravelPutAsync(updatedObject);//In future may need to return entire object, for now just concurrency token
+ if (o == null)
+ {
+ if (biz.Errors.Exists(m => m.Code == ApiErrorCode.CONCURRENCY_CONFLICT))
+ return StatusCode(409, new ApiErrorResponse(biz.Errors));
+ else
+ return BadRequest(new ApiErrorResponse(biz.Errors));
+ }
+ return Ok(ApiOkResponse.Response(new { ConcurrencyToken = o.ConcurrencyToken }, true));
+ }
+
+ ///
+ /// Delete WorkOrderItemTravel
+ ///
+ ///
+ /// NoContent
+ [HttpDelete("items/travels/{WorkOrderItemTravelId}")]
+ public async Task DeleteWorkOrderItemTravel([FromRoute] long WorkOrderItemTravelId)
+ {
+ if (!serverState.IsOpen)
+ return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));
+ if (!ModelState.IsValid)
+ return BadRequest(new ApiErrorResponse(ModelState));
+ WorkOrderBiz biz = WorkOrderBiz.GetBiz(ct, HttpContext);
+ if (!Authorized.HasDeleteRole(HttpContext.Items, AyaType.WorkOrderItemTravel))
+ return StatusCode(403, new ApiNotAuthorizedResponse());
+ if (!await biz.TravelDeleteAsync(WorkOrderItemTravelId))
+ return BadRequest(new ApiErrorResponse(biz.Errors));
+ return NoContent();
+ }
+
+ #endregion WorkOrderItemTravel
+
+
+
+
+
+ //*******************************new
+ /*
+ Tasks
+
+ */
+
+ #region WorkOrderItemtask
+
+ ///
+ /// Create WorkOrderItemTask
+ ///
+ /// WorkOrderItemTask level only no descendents
+ ///
+ /// WorkOrderItemTask object (no descendents)
+ [HttpPost("items/tasks")]
+ public async Task PostWorkOrderItemTask([FromBody] WorkOrderItemTask newObject, ApiVersion apiVersion)
+ {
+ if (!serverState.IsOpen)
+ return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));
+ WorkOrderBiz biz = WorkOrderBiz.GetBiz(ct, HttpContext);
+ if (!Authorized.HasCreateRole(HttpContext.Items, AyaType.WorkOrderItemTask))
+ return StatusCode(403, new ApiNotAuthorizedResponse());
+ if (!ModelState.IsValid)
+ return BadRequest(new ApiErrorResponse(ModelState));
+ WorkOrderItemTask o = await biz.CreateTaskAsync(newObject);
+ if (o == null)
+ return BadRequest(new ApiErrorResponse(biz.Errors));
+ else
+ return CreatedAtAction(nameof(WorkOrderController.GetWorkOrderItemTask), new { WorkOrderItemTaskId = o.Id, version = apiVersion.ToString() }, new ApiCreatedResponse(o));
+ }
+
+
+ ///
+ /// Get WorkOrderItemTask object
+ ///
+ ///
+ /// A single WorkOrderItemTask
+ [HttpGet("items/tasks/{WorkOrderItemTaskId}")]
+ public async Task GetWorkOrderItemTask([FromRoute] long WorkOrderItemTaskId)
+ {
+ if (!serverState.IsOpen)
+ return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));
+ WorkOrderBiz biz = WorkOrderBiz.GetBiz(ct, HttpContext);
+ if (!Authorized.HasReadFullRole(HttpContext.Items, AyaType.WorkOrderItemTask))
+ return StatusCode(403, new ApiNotAuthorizedResponse());
+ if (!ModelState.IsValid)
+ return BadRequest(new ApiErrorResponse(ModelState));
+ var o = await biz.GetTaskAsync(WorkOrderItemTaskId);
+ if (o == null)
+ return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND));
+ return Ok(ApiOkResponse.Response(o, !Authorized.HasModifyRole(HttpContext.Items, AyaType.WorkOrderItemTask)));
+ }
+
+ ///
+ /// Put (update) WorkOrderItemTask
+ /// (Descendent objects must be updated via their individual routes seperately)
+ ///
+ /// WorkOrderItemTask - top level only, no descendents
+ /// New concurrency token
+ [HttpPut("items/tasks")]
+ public async Task PutWorkOrderItemTask([FromBody] WorkOrderItemTask updatedObject)
+ {
+ if (!serverState.IsOpen)
+ return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));
+ if (!ModelState.IsValid)
+ return BadRequest(new ApiErrorResponse(ModelState));
+ WorkOrderBiz biz = WorkOrderBiz.GetBiz(ct, HttpContext);
+ if (!Authorized.HasModifyRole(HttpContext.Items, AyaType.WorkOrderItemTask))
+ return StatusCode(403, new ApiNotAuthorizedResponse());
+ var o = await biz.TaskPutAsync(updatedObject);//In future may need to return entire object, for now just concurrency token
+ if (o == null)
+ {
+ if (biz.Errors.Exists(m => m.Code == ApiErrorCode.CONCURRENCY_CONFLICT))
+ return StatusCode(409, new ApiErrorResponse(biz.Errors));
+ else
+ return BadRequest(new ApiErrorResponse(biz.Errors));
+ }
+ return Ok(ApiOkResponse.Response(new { ConcurrencyToken = o.ConcurrencyToken }, true));
+ }
+
+ ///
+ /// Delete WorkOrderItemTask
+ ///
+ ///
+ /// NoContent
+ [HttpDelete("items/tasks/{WorkOrderItemTaskId}")]
+ public async Task DeleteWorkOrderItemTask([FromRoute] long WorkOrderItemTaskId)
+ {
+ if (!serverState.IsOpen)
+ return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));
+ if (!ModelState.IsValid)
+ return BadRequest(new ApiErrorResponse(ModelState));
+ WorkOrderBiz biz = WorkOrderBiz.GetBiz(ct, HttpContext);
+ if (!Authorized.HasDeleteRole(HttpContext.Items, AyaType.WorkOrderItemTask))
+ return StatusCode(403, new ApiNotAuthorizedResponse());
+ if (!await biz.TaskDeleteAsync(WorkOrderItemTaskId))
+ return BadRequest(new ApiErrorResponse(biz.Errors));
+ return NoContent();
+ }
+
+ #endregion WorkOrderItemTask
+
+
+
+
+
+ //*******************************new
+ /*
+ Loan
+
+ */
+
+ #region WorkOrderItemLoan
+
+ ///
+ /// Create WorkOrderItemLoan
+ ///
+ /// WorkOrderItemLoan level only no descendents
+ ///
+ /// WorkOrderItemLoan object (no descendents)
+ [HttpPost("items/loans")]
+ public async Task PostWorkOrderItemLoan([FromBody] WorkOrderItemLoan newObject, ApiVersion apiVersion)
+ {
+ if (!serverState.IsOpen)
+ return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));
+ WorkOrderBiz biz = WorkOrderBiz.GetBiz(ct, HttpContext);
+ if (!Authorized.HasCreateRole(HttpContext.Items, AyaType.WorkOrderItemLoan))
+ return StatusCode(403, new ApiNotAuthorizedResponse());
+ if (!ModelState.IsValid)
+ return BadRequest(new ApiErrorResponse(ModelState));
+ WorkOrderItemLoan o = await biz.CreateLoanAsync(newObject);
+ if (o == null)
+ return BadRequest(new ApiErrorResponse(biz.Errors));
+ else
+ return CreatedAtAction(nameof(WorkOrderController.GetWorkOrderItemLoan), new { WorkOrderItemLoanId = o.Id, version = apiVersion.ToString() }, new ApiCreatedResponse(o));
+ }
+
+
+ ///
+ /// Get WorkOrderItemLoan object
+ ///
+ ///
+ /// A single WorkOrderItemLoan
+ [HttpGet("items/loans/{WorkOrderItemLoanId}")]
+ public async Task GetWorkOrderItemLoan([FromRoute] long WorkOrderItemLoanId)
+ {
+ if (!serverState.IsOpen)
+ return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));
+ WorkOrderBiz biz = WorkOrderBiz.GetBiz(ct, HttpContext);
+ if (!Authorized.HasReadFullRole(HttpContext.Items, AyaType.WorkOrderItemLoan))
+ return StatusCode(403, new ApiNotAuthorizedResponse());
+ if (!ModelState.IsValid)
+ return BadRequest(new ApiErrorResponse(ModelState));
+ var o = await biz.GetLoanAsync(WorkOrderItemLoanId);
+ if (o == null)
+ return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND));
+ return Ok(ApiOkResponse.Response(o, !Authorized.HasModifyRole(HttpContext.Items, AyaType.WorkOrderItemLoan)));
+ }
+
+ ///
+ /// Put (update) WorkOrderItemLoan
+ /// (Descendent objects must be updated via their individual routes seperately)
+ ///
+ /// WorkOrderItemLoan - top level only, no descendents
+ /// New concurrency token
+ [HttpPut("items/loans")]
+ public async Task PutWorkOrderItemLoan([FromBody] WorkOrderItemLoan updatedObject)
+ {
+ if (!serverState.IsOpen)
+ return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));
+ if (!ModelState.IsValid)
+ return BadRequest(new ApiErrorResponse(ModelState));
+ WorkOrderBiz biz = WorkOrderBiz.GetBiz(ct, HttpContext);
+ if (!Authorized.HasModifyRole(HttpContext.Items, AyaType.WorkOrderItemLoan))
+ return StatusCode(403, new ApiNotAuthorizedResponse());
+ var o = await biz.LoanPutAsync(updatedObject);//In future may need to return entire object, for now just concurrency token
+ if (o == null)
+ {
+ if (biz.Errors.Exists(m => m.Code == ApiErrorCode.CONCURRENCY_CONFLICT))
+ return StatusCode(409, new ApiErrorResponse(biz.Errors));
+ else
+ return BadRequest(new ApiErrorResponse(biz.Errors));
+ }
+ return Ok(ApiOkResponse.Response(new { ConcurrencyToken = o.ConcurrencyToken }, true));
+ }
+
+ ///
+ /// Delete WorkOrderItemLoan
+ ///
+ ///
+ /// NoContent
+ [HttpDelete("items/loans/{WorkOrderItemLoanId}")]
+ public async Task DeleteWorkOrderItemLoan([FromRoute] long WorkOrderItemLoanId)
+ {
+ if (!serverState.IsOpen)
+ return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));
+ if (!ModelState.IsValid)
+ return BadRequest(new ApiErrorResponse(ModelState));
+ WorkOrderBiz biz = WorkOrderBiz.GetBiz(ct, HttpContext);
+ if (!Authorized.HasDeleteRole(HttpContext.Items, AyaType.WorkOrderItemLoan))
+ return StatusCode(403, new ApiNotAuthorizedResponse());
+ if (!await biz.LoanDeleteAsync(WorkOrderItemLoanId))
+ return BadRequest(new ApiErrorResponse(biz.Errors));
+ return NoContent();
+ }
+
+ #endregion WorkOrderItemLoan
+
+
+ //*******************************new
+ /*
+ Units
+
+ */
+
+ #region WorkOrderItemUnit
+
+ ///
+ /// Create WorkOrderItemUnit
+ ///
+ /// WorkOrderItemUnit level only no descendents
+ ///
+ /// WorkOrderItemUnit object (no descendents)
+ [HttpPost("items/units")]
+ public async Task PostWorkOrderItemUnit([FromBody] WorkOrderItemUnit newObject, ApiVersion apiVersion)
+ {
+ if (!serverState.IsOpen)
+ return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));
+ WorkOrderBiz biz = WorkOrderBiz.GetBiz(ct, HttpContext);
+ if (!Authorized.HasCreateRole(HttpContext.Items, AyaType.WorkOrderItemUnit))
+ return StatusCode(403, new ApiNotAuthorizedResponse());
+ if (!ModelState.IsValid)
+ return BadRequest(new ApiErrorResponse(ModelState));
+ WorkOrderItemUnit o = await biz.CreateUnitAsync(newObject);
+ if (o == null)
+ return BadRequest(new ApiErrorResponse(biz.Errors));
+ else
+ return CreatedAtAction(nameof(WorkOrderController.GetWorkOrderItemUnit), new { WorkOrderItemUnitId = o.Id, version = apiVersion.ToString() }, new ApiCreatedResponse(o));
+ }
+
+
+ ///
+ /// Get WorkOrderItemUnit object
+ ///
+ ///
+ /// A single WorkOrderItemUnit
+ [HttpGet("items/units/{WorkOrderItemUnitId}")]
+ public async Task GetWorkOrderItemUnit([FromRoute] long WorkOrderItemUnitId)
+ {
+ if (!serverState.IsOpen)
+ return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));
+ WorkOrderBiz biz = WorkOrderBiz.GetBiz(ct, HttpContext);
+ if (!Authorized.HasReadFullRole(HttpContext.Items, AyaType.WorkOrderItemUnit))
+ return StatusCode(403, new ApiNotAuthorizedResponse());
+ if (!ModelState.IsValid)
+ return BadRequest(new ApiErrorResponse(ModelState));
+ var o = await biz.GetUnitAsync(WorkOrderItemUnitId);
+ if (o == null)
+ return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND));
+ return Ok(ApiOkResponse.Response(o, !Authorized.HasModifyRole(HttpContext.Items, AyaType.WorkOrderItemUnit)));
+ }
+
+ ///
+ /// Put (update) WorkOrderItemUnit
+ /// (Descendent objects must be updated via their individual routes seperately)
+ ///
+ /// WorkOrderItemUnit - top level only, no descendents
+ /// New concurrency token
+ [HttpPut("items/units")]
+ public async Task PutWorkOrderItemUnit([FromBody] WorkOrderItemUnit updatedObject)
+ {
+ if (!serverState.IsOpen)
+ return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));
+ if (!ModelState.IsValid)
+ return BadRequest(new ApiErrorResponse(ModelState));
+ WorkOrderBiz biz = WorkOrderBiz.GetBiz(ct, HttpContext);
+ if (!Authorized.HasModifyRole(HttpContext.Items, AyaType.WorkOrderItemUnit))
+ return StatusCode(403, new ApiNotAuthorizedResponse());
+ var o = await biz.UnitPutAsync(updatedObject);//In future may need to return entire object, for now just concurrency token
+ if (o == null)
+ {
+ if (biz.Errors.Exists(m => m.Code == ApiErrorCode.CONCURRENCY_CONFLICT))
+ return StatusCode(409, new ApiErrorResponse(biz.Errors));
+ else
+ return BadRequest(new ApiErrorResponse(biz.Errors));
+ }
+ return Ok(ApiOkResponse.Response(new { ConcurrencyToken = o.ConcurrencyToken }, true));
+ }
+
+ ///
+ /// Delete WorkOrderItemUnit
+ ///
+ ///
+ /// NoContent
+ [HttpDelete("items/units/{WorkOrderItemUnitId}")]
+ public async Task DeleteWorkOrderItemUnit([FromRoute] long WorkOrderItemUnitId)
+ {
+ if (!serverState.IsOpen)
+ return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));
+ if (!ModelState.IsValid)
+ return BadRequest(new ApiErrorResponse(ModelState));
+ WorkOrderBiz biz = WorkOrderBiz.GetBiz(ct, HttpContext);
+ if (!Authorized.HasDeleteRole(HttpContext.Items, AyaType.WorkOrderItemUnit))
+ return StatusCode(403, new ApiNotAuthorizedResponse());
+ if (!await biz.UnitDeleteAsync(WorkOrderItemUnitId))
+ return BadRequest(new ApiErrorResponse(biz.Errors));
+ return NoContent();
+ }
+
+ #endregion WorkOrderItemUnit
+
+
+
+
//------------