using System.Threading.Tasks; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Routing; using Microsoft.AspNetCore.Authorization; using Microsoft.Extensions.Logging; using AyaNova.Models; using AyaNova.Api.ControllerHelpers; using AyaNova.Biz; using Microsoft.EntityFrameworkCore; using System.Linq; namespace AyaNova.Api.Controllers { [ApiController] [ApiVersion("8.0")] [Route("api/v{version:apiVersion}/pm")] [Produces("application/json")] [Authorize] public class PMController : ControllerBase { private readonly AyContext ct; private readonly ILogger log; private readonly ApiServerState serverState; /// /// ctor /// /// /// /// public PMController(AyContext dbcontext, ILogger logger, ApiServerState apiServerState) { ct = dbcontext; log = logger; serverState = apiServerState; } /* ██████╗ ███╗ ███╗ ██╔══██╗████╗ ████║ ██████╔╝██╔████╔██║ ██╔═══╝ ██║╚██╔╝██║ ██║ ██║ ╚═╝ ██║ ╚═╝ ╚═╝ ╚═╝ */ #region PM top level routes /// /// Create PM /// /// PM - top level only, no descendants /// From route path /// PM [HttpPost] public async Task PostPM([FromBody] PM newObject, ApiVersion apiVersion) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); PMBiz biz = PMBiz.GetBiz(ct, HttpContext); if (!Authorized.HasCreateRole(HttpContext.Items, biz.BizType)) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); if (newObject.Items.Count > 0) return BadRequest(new ApiErrorResponse(ApiErrorCode.INVALID_OPERATION, "generalerror", "Work order POST route accepts header only; POST Work order descendants separately")); PM o = await biz.PMCreateAsync(newObject); if (o == null) return BadRequest(new ApiErrorResponse(biz.Errors)); else return CreatedAtAction(nameof(PMController.GetPM), new { id = o.Id, version = apiVersion.ToString() }, new ApiCreatedResponse(o)); } // /// // /// Duplicate PM // /// (Wiki and Attachments are not duplicated) // /// // /// Source object id // /// From route path // /// PM // [HttpPost("duplicate/{id}")] // public async Task DuplicatePM([FromRoute] long id, ApiVersion apiVersion) // { // if (!serverState.IsOpen) // return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); // PMBiz biz = PMBiz.GetBiz(ct, HttpContext); // if (!Authorized.HasCreateRole(HttpContext.Items, biz.BizType)) // return StatusCode(403, new ApiNotAuthorizedResponse()); // if (!ModelState.IsValid) // return BadRequest(new ApiErrorResponse(ModelState)); // PM o = await biz.PMDuplicateAsync(id); // if (o == null) // return BadRequest(new ApiErrorResponse(biz.Errors)); // else // return CreatedAtAction(nameof(PMController.GetPM), new { id = o.Id, version = apiVersion.ToString() }, new ApiCreatedResponse(o)); // } /// /// Get PM /// /// /// PM [HttpGet("{id}")] public async Task GetPM([FromRoute] long id) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); PMBiz biz = PMBiz.GetBiz(ct, HttpContext); if (!Authorized.HasReadFullRole(HttpContext.Items, biz.BizType)) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); var o = await biz.PMGetAsync(id, true); if (o == null) return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); return Ok(ApiOkResponse.Response(o)); } /// /// Update PM /// /// /// PM - top level only, no Items or other descendants /// Updated work order header [HttpPut] public async Task PutPM([FromBody] PM updatedObject) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); if (updatedObject.Items.Count > 0) { return BadRequest(new ApiErrorResponse(ApiErrorCode.INVALID_OPERATION, "generalerror", "Work order PUT route accepts header only; PUT Work order descendants separately")); } PMBiz biz = PMBiz.GetBiz(ct, HttpContext); if (!Authorized.HasModifyRole(HttpContext.Items, biz.BizType) || biz.UserIsRestrictedType) return StatusCode(403, new ApiNotAuthorizedResponse()); var o = await biz.PMPutAsync(updatedObject); if (o == null) { if (biz.Errors.Exists(z => z.Code == ApiErrorCode.CONCURRENCY_CONFLICT)) return StatusCode(409, new ApiErrorResponse(biz.Errors)); else return BadRequest(new ApiErrorResponse(biz.Errors)); } return Ok(ApiOkResponse.Response(o)); } /// /// Delete PM /// /// /// NoContent [HttpDelete("{id}")] public async Task DeletePM([FromRoute] long id) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); PMBiz biz = PMBiz.GetBiz(ct, HttpContext); if (!Authorized.HasDeleteRole(HttpContext.Items, AyaType.PM) || biz.UserIsRestrictedType) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!await biz.PMDeleteAsync(id)) return BadRequest(new ApiErrorResponse(biz.Errors)); return NoContent(); } /// /// Get PM id from work order serial number /// /// /// PM [HttpGet("id-from-number/{number}")] public async Task GetPMIdFromNumber([FromRoute] long number) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); if (!Authorized.HasReadFullRole(HttpContext.Items, AyaType.PM)) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); var o = await ct.PM.AsNoTracking() .Where(z => z.Serial == number) .Select(z => z.Id) .SingleOrDefaultAsync(); if (o == 0) return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); return Ok(ApiOkResponse.Response(o)); } #endregion PMTopLevel routes /* ██╗████████╗███████╗███╗ ███╗███████╗ ██║╚══██╔══╝██╔════╝████╗ ████║██╔════╝ ██║ ██║ █████╗ ██╔████╔██║███████╗ ██║ ██║ ██╔══╝ ██║╚██╔╝██║╚════██║ ██║ ██║ ███████╗██║ ╚═╝ ██║███████║ ╚═╝ ╚═╝ ╚══════╝╚═╝ ╚═╝╚══════╝ */ #region PMItem /// /// Create PMItem /// /// PMItem - no descendants /// /// PMItem object [HttpPost("items")] public async Task PostPMItem([FromBody] PMItem newObject, ApiVersion apiVersion) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); PMBiz biz = PMBiz.GetBiz(ct, HttpContext); if (!Authorized.HasCreateRole(HttpContext.Items, AyaType.PMItem) || biz.UserIsRestrictedType) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); PMItem o = await biz.ItemCreateAsync(newObject); if (o == null) return BadRequest(new ApiErrorResponse(biz.Errors)); else return CreatedAtAction(nameof(PMController.GetPMItem), new { PMItemId = o.Id, version = apiVersion.ToString() }, new ApiCreatedResponse(o)); } /// /// Get PMItem object /// /// /// A single PMItem [HttpGet("items/{PMItemId}")] public async Task GetPMItem([FromRoute] long PMItemId) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); PMBiz biz = PMBiz.GetBiz(ct, HttpContext); if (!Authorized.HasReadFullRole(HttpContext.Items, AyaType.PMItem) || biz.UserIsRestrictedType) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); var o = await biz.ItemGetAsync(PMItemId); if (o == null) return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); return Ok(ApiOkResponse.Response(o)); } /// /// Update PMItem /// /// /// PMItem - top level only, no descendants /// New concurrency token [HttpPut("items/")] public async Task PutPMItem([FromBody] PMItem updatedObject) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); PMBiz biz = PMBiz.GetBiz(ct, HttpContext); if (!Authorized.HasModifyRole(HttpContext.Items, AyaType.PMItem) || biz.UserIsRestrictedType) return StatusCode(403, new ApiNotAuthorizedResponse()); var o = await biz.ItemPutAsync(updatedObject); if (o == null) { if (biz.Errors.Exists(z => z.Code == ApiErrorCode.CONCURRENCY_CONFLICT)) return StatusCode(409, new ApiErrorResponse(biz.Errors)); else return BadRequest(new ApiErrorResponse(biz.Errors)); } return Ok(ApiOkResponse.Response(new { Concurrency = o.Concurrency })); } /// /// Delete PMItem /// /// /// NoContent [HttpDelete("items/{PMItemId}")] public async Task DeletePMItem([FromRoute] long PMItemId) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); PMBiz biz = PMBiz.GetBiz(ct, HttpContext); if (!Authorized.HasDeleteRole(HttpContext.Items, AyaType.PMItem) || biz.UserIsRestrictedType) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!await biz.ItemDeleteAsync(PMItemId)) return BadRequest(new ApiErrorResponse(biz.Errors)); return NoContent(); } #endregion pmitem /* ███████╗██╗ ██╗██████╗ ███████╗███╗ ██╗███████╗███████╗███████╗ ██╔════╝╚██╗██╔╝██╔══██╗██╔════╝████╗ ██║██╔════╝██╔════╝██╔════╝ █████╗ ╚███╔╝ ██████╔╝█████╗ ██╔██╗ ██║███████╗█████╗ ███████╗ ██╔══╝ ██╔██╗ ██╔═══╝ ██╔══╝ ██║╚██╗██║╚════██║██╔══╝ ╚════██║ ███████╗██╔╝ ██╗██║ ███████╗██║ ╚████║███████║███████╗███████║ ╚══════╝╚═╝ ╚═╝╚═╝ ╚══════╝╚═╝ ╚═══╝╚══════╝╚══════╝╚══════╝ */ #region PMItemExpense /// /// Create PMItemExpense /// /// PMItemExpense level only no descendants /// /// PMItemExpense object (no descendants) [HttpPost("items/expenses")] public async Task PostPMItemExpense([FromBody] PMItemExpense newObject, ApiVersion apiVersion) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); PMBiz biz = PMBiz.GetBiz(ct, HttpContext); if (!Authorized.HasCreateRole(HttpContext.Items, AyaType.PMItemExpense) || biz.UserIsSubContractorFull || biz.UserIsSubContractorRestricted) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); PMItemExpense o = await biz.ExpenseCreateAsync(newObject); if (o == null) return BadRequest(new ApiErrorResponse(biz.Errors)); else return CreatedAtAction(nameof(PMController.GetPMItemExpense), new { PMItemExpenseId = o.Id, version = apiVersion.ToString() }, new ApiCreatedResponse(o)); } /// /// Get PMItemExpense object /// /// /// A single PMItemExpense [HttpGet("items/expenses/{PMItemExpenseId}")] public async Task GetPMItemExpense([FromRoute] long PMItemExpenseId) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); PMBiz biz = PMBiz.GetBiz(ct, HttpContext); if (!Authorized.HasReadFullRole(HttpContext.Items, AyaType.PMItemExpense) || biz.UserIsSubContractorFull || biz.UserIsSubContractorRestricted) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); var o = await biz.ExpenseGetAsync(PMItemExpenseId); if (o == null) return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); return Ok(ApiOkResponse.Response(o)); } /// /// Update PMItemExpense /// /// /// PMItemExpense - top level only, no descendants /// Updated Expense item [HttpPut("items/expenses")] public async Task PutPMItemExpense([FromBody] PMItemExpense updatedObject) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); PMBiz biz = PMBiz.GetBiz(ct, HttpContext); if (!Authorized.HasModifyRole(HttpContext.Items, AyaType.PMItemExpense) || biz.UserIsSubContractorFull || biz.UserIsSubContractorRestricted) return StatusCode(403, new ApiNotAuthorizedResponse()); var o = await biz.ExpensePutAsync(updatedObject); if (o == null) { if (biz.Errors.Exists(z => z.Code == ApiErrorCode.CONCURRENCY_CONFLICT)) return StatusCode(409, new ApiErrorResponse(biz.Errors)); else return BadRequest(new ApiErrorResponse(biz.Errors)); } return Ok(ApiOkResponse.Response(o)); } /// /// Delete PMItemExpense /// /// /// NoContent [HttpDelete("items/expenses/{PMItemExpenseId}")] public async Task DeletePMItemExpense([FromRoute] long PMItemExpenseId) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); PMBiz biz = PMBiz.GetBiz(ct, HttpContext); if (!Authorized.HasDeleteRole(HttpContext.Items, AyaType.PMItemExpense) || biz.UserIsSubContractorFull || biz.UserIsSubContractorRestricted) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!await biz.ExpenseDeleteAsync(PMItemExpenseId)) return BadRequest(new ApiErrorResponse(biz.Errors)); return NoContent(); } #endregion PMItemExpense /* ██╗ █████╗ ██████╗ ██████╗ ██████╗ ██║ ██╔══██╗██╔══██╗██╔═══██╗██╔══██╗ ██║ ███████║██████╔╝██║ ██║██████╔╝ ██║ ██╔══██║██╔══██╗██║ ██║██╔══██╗ ███████╗██║ ██║██████╔╝╚██████╔╝██║ ██║ ╚══════╝╚═╝ ╚═╝╚═════╝ ╚═════╝ ╚═╝ ╚═╝ */ #region PMItemLabor /// /// Create PMItemLabor /// /// PMItemLabor level only no descendants /// /// PMItemLabor object (no descendants) [HttpPost("items/labors")] public async Task PostPMItemLabor([FromBody] PMItemLabor newObject, ApiVersion apiVersion) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); PMBiz biz = PMBiz.GetBiz(ct, HttpContext); if (!Authorized.HasCreateRole(HttpContext.Items, AyaType.PMItemLabor)) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); PMItemLabor o = await biz.LaborCreateAsync(newObject); if (o == null) return BadRequest(new ApiErrorResponse(biz.Errors)); else return CreatedAtAction(nameof(PMController.GetPMItemLabor), new { PMItemLaborId = o.Id, version = apiVersion.ToString() }, new ApiCreatedResponse(o)); } /// /// Get PMItemLabor object /// /// /// A single PMItemLabor [HttpGet("items/labors/{PMItemLaborId}")] public async Task GetPMItemLabor([FromRoute] long PMItemLaborId) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); PMBiz biz = PMBiz.GetBiz(ct, HttpContext); if (!Authorized.HasReadFullRole(HttpContext.Items, AyaType.PMItemLabor)) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); var o = await biz.LaborGetAsync(PMItemLaborId); if (o == null) return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); return Ok(ApiOkResponse.Response(o)); } /// /// Update PMItemLabor /// /// /// PMItemLabor - top level only, no descendants /// Updated object [HttpPut("items/labors")] public async Task PutPMItemLabor([FromBody] PMItemLabor updatedObject) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); PMBiz biz = PMBiz.GetBiz(ct, HttpContext); if (!Authorized.HasModifyRole(HttpContext.Items, AyaType.PMItemLabor)) return StatusCode(403, new ApiNotAuthorizedResponse()); var o = await biz.LaborPutAsync(updatedObject); if (o == null) { if (biz.Errors.Exists(z => z.Code == ApiErrorCode.CONCURRENCY_CONFLICT)) return StatusCode(409, new ApiErrorResponse(biz.Errors)); else return BadRequest(new ApiErrorResponse(biz.Errors)); } return Ok(ApiOkResponse.Response(o)); } /// /// Delete PMItemLabor /// /// /// NoContent [HttpDelete("items/labors/{PMItemLaborId}")] public async Task DeletePMItemLabor([FromRoute] long PMItemLaborId) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); PMBiz biz = PMBiz.GetBiz(ct, HttpContext); if (!Authorized.HasDeleteRole(HttpContext.Items, AyaType.PMItemLabor)) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!await biz.LaborDeleteAsync(PMItemLaborId)) return BadRequest(new ApiErrorResponse(biz.Errors)); return NoContent(); } #endregion PMItemLabor /* ██╗ ██████╗ █████╗ ███╗ ██╗ ██║ ██╔═══██╗██╔══██╗████╗ ██║ ██║ ██║ ██║███████║██╔██╗ ██║ ██║ ██║ ██║██╔══██║██║╚██╗██║ ███████╗╚██████╔╝██║ ██║██║ ╚████║ ╚══════╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═══╝ */ #region PMItemLoan /// /// Create PMItemLoan /// /// PMItemLoan level only no descendants /// /// PMItemLoan object (no descendants) [HttpPost("items/loans")] public async Task PostPMItemLoan([FromBody] PMItemLoan newObject, ApiVersion apiVersion) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); PMBiz biz = PMBiz.GetBiz(ct, HttpContext); if (!Authorized.HasCreateRole(HttpContext.Items, AyaType.PMItemLoan) || biz.UserIsRestrictedType) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); PMItemLoan o = await biz.LoanCreateAsync(newObject); if (o == null) return BadRequest(new ApiErrorResponse(biz.Errors)); else return CreatedAtAction(nameof(PMController.GetPMItemLoan), new { PMItemLoanId = o.Id, version = apiVersion.ToString() }, new ApiCreatedResponse(o)); } /// /// Get PMItemLoan object /// /// /// A single PMItemLoan [HttpGet("items/loans/{PMItemLoanId}")] public async Task GetPMItemLoan([FromRoute] long PMItemLoanId) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); PMBiz biz = PMBiz.GetBiz(ct, HttpContext); if (!Authorized.HasReadFullRole(HttpContext.Items, AyaType.PMItemLoan) || biz.UserIsSubContractorRestricted) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); var o = await biz.LoanGetAsync(PMItemLoanId); if (o == null) return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); return Ok(ApiOkResponse.Response(o)); } /// /// Update PMItemLoan /// /// /// PMItemLoan - top level only, no descendants /// New concurrency token [HttpPut("items/loans")] public async Task PutPMItemLoan([FromBody] PMItemLoan updatedObject) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); PMBiz biz = PMBiz.GetBiz(ct, HttpContext); if (!Authorized.HasModifyRole(HttpContext.Items, AyaType.PMItemLoan) || biz.UserIsRestrictedType) return StatusCode(403, new ApiNotAuthorizedResponse()); var o = await biz.LoanPutAsync(updatedObject); if (o == null) { if (biz.Errors.Exists(z => z.Code == ApiErrorCode.CONCURRENCY_CONFLICT)) return StatusCode(409, new ApiErrorResponse(biz.Errors)); else return BadRequest(new ApiErrorResponse(biz.Errors)); } return Ok(ApiOkResponse.Response(o)); } /// /// Delete PMItemLoan /// /// /// NoContent [HttpDelete("items/loans/{PMItemLoanId}")] public async Task DeletePMItemLoan([FromRoute] long PMItemLoanId) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); PMBiz biz = PMBiz.GetBiz(ct, HttpContext); if (!Authorized.HasDeleteRole(HttpContext.Items, AyaType.PMItemLoan) || biz.UserIsRestrictedType) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!await biz.LoanDeleteAsync(PMItemLoanId)) return BadRequest(new ApiErrorResponse(biz.Errors)); return NoContent(); } #endregion PMItemLoan /* ██████╗ ██╗ ██╗████████╗███████╗██╗██████╗ ███████╗ ███████╗███████╗██████╗ ██╗ ██╗██╗ ██████╗███████╗ ██╔═══██╗██║ ██║╚══██╔══╝██╔════╝██║██╔══██╗██╔════╝ ██╔════╝██╔════╝██╔══██╗██║ ██║██║██╔════╝██╔════╝ ██║ ██║██║ ██║ ██║ ███████╗██║██║ ██║█████╗ ███████╗█████╗ ██████╔╝██║ ██║██║██║ █████╗ ██║ ██║██║ ██║ ██║ ╚════██║██║██║ ██║██╔══╝ ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║██║ ██╔══╝ ╚██████╔╝╚██████╔╝ ██║ ███████║██║██████╔╝███████╗ ███████║███████╗██║ ██║ ╚████╔╝ ██║╚██████╗███████╗ ╚═════╝ ╚═════╝ ╚═╝ ╚══════╝╚═╝╚═════╝ ╚══════╝ ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═════╝╚══════╝ */ #region PMItemOutsideService /// /// Create PMItemOutsideService /// /// PMItemOutsideService level only no descendants /// /// PMItemOutsideService object (no descendants) [HttpPost("items/outside-services")] public async Task PostPMItemOutsideService([FromBody] PMItemOutsideService newObject, ApiVersion apiVersion) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); PMBiz biz = PMBiz.GetBiz(ct, HttpContext); if (!Authorized.HasCreateRole(HttpContext.Items, AyaType.PMItemOutsideService) || biz.UserIsRestrictedType) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); PMItemOutsideService o = await biz.OutsideServiceCreateAsync(newObject); if (o == null) return BadRequest(new ApiErrorResponse(biz.Errors)); else return CreatedAtAction(nameof(PMController.GetPMItemOutsideService), new { PMItemOutsideServiceId = o.Id, version = apiVersion.ToString() }, new ApiCreatedResponse(o)); } /// /// Get PMItemOutsideService object /// /// /// A single PMItemOutsideService [HttpGet("items/outside-services/{PMItemOutsideServiceId}")] public async Task GetPMItemOutsideService([FromRoute] long PMItemOutsideServiceId) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); PMBiz biz = PMBiz.GetBiz(ct, HttpContext); if (!Authorized.HasReadFullRole(HttpContext.Items, AyaType.PMItemOutsideService) || biz.UserIsSubContractorFull || biz.UserIsSubContractorRestricted) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); var o = await biz.OutsideServiceGetAsync(PMItemOutsideServiceId); if (o == null) return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); return Ok(ApiOkResponse.Response(o)); } /// /// Update PMItemOutsideService /// /// /// PMItemOutsideService - top level only, no descendants /// New concurrency token [HttpPut("items/outside-services")] public async Task PutPMItemOutsideService([FromBody] PMItemOutsideService updatedObject) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); PMBiz biz = PMBiz.GetBiz(ct, HttpContext); if (!Authorized.HasModifyRole(HttpContext.Items, AyaType.PMItemOutsideService) || biz.UserIsRestrictedType) return StatusCode(403, new ApiNotAuthorizedResponse()); var o = await biz.OutsideServicePutAsync(updatedObject); if (o == null) { if (biz.Errors.Exists(z => z.Code == ApiErrorCode.CONCURRENCY_CONFLICT)) return StatusCode(409, new ApiErrorResponse(biz.Errors)); else return BadRequest(new ApiErrorResponse(biz.Errors)); } return Ok(ApiOkResponse.Response(o)); } /// /// Delete PMItemOutsideService /// /// /// NoContent [HttpDelete("items/outside-services/{PMItemOutsideServiceId}")] public async Task DeletePMItemOutsideService([FromRoute] long PMItemOutsideServiceId) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); PMBiz biz = PMBiz.GetBiz(ct, HttpContext); if (!Authorized.HasDeleteRole(HttpContext.Items, AyaType.PMItemOutsideService) || biz.UserIsRestrictedType) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!await biz.OutsideServiceDeleteAsync(PMItemOutsideServiceId)) return BadRequest(new ApiErrorResponse(biz.Errors)); return NoContent(); } #endregion PMItemOutsideService /* ██████╗ █████╗ ██████╗ ████████╗███████╗ ██╔══██╗██╔══██╗██╔══██╗╚══██╔══╝██╔════╝ ██████╔╝███████║██████╔╝ ██║ ███████╗ ██╔═══╝ ██╔══██║██╔══██╗ ██║ ╚════██║ ██║ ██║ ██║██║ ██║ ██║ ███████║ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚══════╝ */ #region PMItemPart /// /// Create PMItemPart /// /// PMItemPart level only no descendants /// /// PMItemPart object (no descendants) [HttpPost("items/parts")] public async Task PostPMItemPart([FromBody] PMItemPart newObject, ApiVersion apiVersion) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); PMBiz biz = PMBiz.GetBiz(ct, HttpContext); if (!Authorized.HasCreateRole(HttpContext.Items, AyaType.PMItemPart) || biz.UserIsRestrictedType) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); PMItemPart o = await biz.CreatePartAsync(newObject); if (o == null) return BadRequest(new ApiErrorResponse(biz.Errors)); else return CreatedAtAction(nameof(PMController.GetPMItemPart), new { PMItemPartId = o.Id, version = apiVersion.ToString() }, new ApiCreatedResponse(o)); } /// /// Get PMItemPart object /// /// /// A single PMItemPart [HttpGet("items/parts/{PMItemPartId}")] public async Task GetPMItemPart([FromRoute] long PMItemPartId) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); PMBiz biz = PMBiz.GetBiz(ct, HttpContext); if (!Authorized.HasReadFullRole(HttpContext.Items, AyaType.PMItemPart) || biz.UserIsSubContractorRestricted) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); var o = await biz.PartGetAsync(PMItemPartId); if (o == null) return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); return Ok(ApiOkResponse.Response(o)); } /// /// Update PMItemPart /// /// /// PMItemPart - top level only, no descendants /// New concurrency token [HttpPut("items/parts")] public async Task PutPMItemPart([FromBody] PMItemPart updatedObject) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); PMBiz biz = PMBiz.GetBiz(ct, HttpContext); if (!Authorized.HasModifyRole(HttpContext.Items, AyaType.PMItemPart) || biz.UserIsRestrictedType) return StatusCode(403, new ApiNotAuthorizedResponse()); var o = await biz.PartPutAsync(updatedObject); if (o == null) { if (biz.Errors.Exists(z => z.Code == ApiErrorCode.CONCURRENCY_CONFLICT)) return StatusCode(409, new ApiErrorResponse(biz.Errors)); else return BadRequest(new ApiErrorResponse(biz.Errors)); } return Ok(ApiOkResponse.Response(o)); } /// /// Delete PMItemPart /// /// /// NoContent [HttpDelete("items/parts/{PMItemPartId}")] public async Task DeletePMItemPart([FromRoute] long PMItemPartId) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); PMBiz biz = PMBiz.GetBiz(ct, HttpContext); if (!Authorized.HasDeleteRole(HttpContext.Items, AyaType.PMItemPart) || biz.UserIsRestrictedType) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!await biz.PartDeleteAsync(PMItemPartId)) return BadRequest(new ApiErrorResponse(biz.Errors)); return NoContent(); } #endregion PMItemPart /* ███████╗ ██████╗██╗ ██╗███████╗██████╗ ██╗ ██╗██╗ ███████╗██████╗ ██╗ ██╗███████╗███████╗██████╗ ███████╗ ██╔════╝██╔════╝██║ ██║██╔════╝██╔══██╗██║ ██║██║ ██╔════╝██╔══██╗ ██║ ██║██╔════╝██╔════╝██╔══██╗██╔════╝ ███████╗██║ ███████║█████╗ ██║ ██║██║ ██║██║ █████╗ ██║ ██║█████╗██║ ██║███████╗█████╗ ██████╔╝███████╗ ╚════██║██║ ██╔══██║██╔══╝ ██║ ██║██║ ██║██║ ██╔══╝ ██║ ██║╚════╝██║ ██║╚════██║██╔══╝ ██╔══██╗╚════██║ ███████║╚██████╗██║ ██║███████╗██████╔╝╚██████╔╝███████╗███████╗██████╔╝ ╚██████╔╝███████║███████╗██║ ██║███████║ ╚══════╝ ╚═════╝╚═╝ ╚═╝╚══════╝╚═════╝ ╚═════╝ ╚══════╝╚══════╝╚═════╝ ╚═════╝ ╚══════╝╚══════╝╚═╝ ╚═╝╚══════╝ */ #region PMItemScheduledUser /// /// Create PMItemScheduledUser /// /// PMItemScheduledUser level only no descendants /// /// PMItemScheduledUser object (no descendants) [HttpPost("items/scheduled-users")] public async Task PostPMItemScheduledUser([FromBody] PMItemScheduledUser newObject, ApiVersion apiVersion) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); PMBiz biz = PMBiz.GetBiz(ct, HttpContext); if (!Authorized.HasCreateRole(HttpContext.Items, AyaType.PMItemScheduledUser) || biz.UserIsRestrictedType) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); PMItemScheduledUser o = await biz.ScheduledUserCreateAsync(newObject); if (o == null) return BadRequest(new ApiErrorResponse(biz.Errors)); else return CreatedAtAction(nameof(PMController.GetPMItemScheduledUser), new { PMItemScheduledUserId = o.Id, version = apiVersion.ToString() }, new ApiCreatedResponse(o)); } /// /// Get PMItemScheduledUser object /// /// /// A single PMItemScheduledUser [HttpGet("items/scheduled-users/{PMItemScheduledUserId}")] public async Task GetPMItemScheduledUser([FromRoute] long PMItemScheduledUserId) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); PMBiz biz = PMBiz.GetBiz(ct, HttpContext); if (!Authorized.HasReadFullRole(HttpContext.Items, AyaType.PMItemScheduledUser)) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); var o = await biz.ScheduledUserGetAsync(PMItemScheduledUserId); if (o == null) return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); return Ok(ApiOkResponse.Response(o)); } /// /// Update PMItemScheduledUser /// /// /// PMItemScheduledUser - top level only, no descendants /// New concurrency token [HttpPut("items/scheduled-users")] public async Task PutPMItemScheduledUser([FromBody] PMItemScheduledUser updatedObject) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); PMBiz biz = PMBiz.GetBiz(ct, HttpContext); if (!Authorized.HasModifyRole(HttpContext.Items, AyaType.PMItemScheduledUser) || biz.UserIsRestrictedType) return StatusCode(403, new ApiNotAuthorizedResponse()); var o = await biz.ScheduledUserPutAsync(updatedObject); if (o == null) { if (biz.Errors.Exists(z => z.Code == ApiErrorCode.CONCURRENCY_CONFLICT)) return StatusCode(409, new ApiErrorResponse(biz.Errors)); else return BadRequest(new ApiErrorResponse(biz.Errors)); } return Ok(ApiOkResponse.Response(o)); } /// /// Delete PMItemScheduledUser /// /// /// NoContent [HttpDelete("items/scheduled-users/{PMItemScheduledUserId}")] public async Task DeletePMItemScheduledUser([FromRoute] long PMItemScheduledUserId) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); PMBiz biz = PMBiz.GetBiz(ct, HttpContext); if (!Authorized.HasDeleteRole(HttpContext.Items, AyaType.PMItemScheduledUser) || biz.UserIsRestrictedType) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!await biz.ScheduledUserDeleteAsync(PMItemScheduledUserId)) return BadRequest(new ApiErrorResponse(biz.Errors)); return NoContent(); } #endregion PMItemScheduledUser /* ████████╗ █████╗ ███████╗██╗ ██╗ ╚══██╔══╝██╔══██╗██╔════╝██║ ██╔╝ ██║ ███████║███████╗█████╔╝ ██║ ██╔══██║╚════██║██╔═██╗ ██║ ██║ ██║███████║██║ ██╗ ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ #region PMItemtask /// /// Create PMItemTask /// /// PMItemTask level only no descendants /// /// PMItemTask object (no descendants) [HttpPost("items/tasks")] public async Task PostPMItemTask([FromBody] PMItemTask newObject, ApiVersion apiVersion) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); PMBiz biz = PMBiz.GetBiz(ct, HttpContext); if (!Authorized.HasCreateRole(HttpContext.Items, AyaType.PMItemTask) || biz.UserIsRestrictedType) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); PMItemTask o = await biz.TaskCreateAsync(newObject); if (o == null) return BadRequest(new ApiErrorResponse(biz.Errors)); else return CreatedAtAction(nameof(PMController.GetPMItemTask), new { PMItemTaskId = o.Id, version = apiVersion.ToString() }, new ApiCreatedResponse(o)); } /// /// Get PMItemTask object /// /// /// A single PMItemTask [HttpGet("items/tasks/{PMItemTaskId}")] public async Task GetPMItemTask([FromRoute] long PMItemTaskId) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); PMBiz biz = PMBiz.GetBiz(ct, HttpContext); if (!Authorized.HasReadFullRole(HttpContext.Items, AyaType.PMItemTask)) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); var o = await biz.TaskGetAsync(PMItemTaskId); if (o == null) return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); return Ok(ApiOkResponse.Response(o)); } /// /// Update PMItemTask /// /// /// PMItemTask - top level only, no descendants /// New concurrency token [HttpPut("items/tasks")] public async Task PutPMItemTask([FromBody] PMItemTask updatedObject) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); PMBiz biz = PMBiz.GetBiz(ct, HttpContext); if (!Authorized.HasModifyRole(HttpContext.Items, AyaType.PMItemTask)) return StatusCode(403, new ApiNotAuthorizedResponse()); var o = await biz.TaskPutAsync(updatedObject); if (o == null) { if (biz.Errors.Exists(z => z.Code == ApiErrorCode.CONCURRENCY_CONFLICT)) return StatusCode(409, new ApiErrorResponse(biz.Errors)); else return BadRequest(new ApiErrorResponse(biz.Errors)); } return Ok(ApiOkResponse.Response(o)); } /// /// Delete PMItemTask /// /// /// NoContent [HttpDelete("items/tasks/{PMItemTaskId}")] public async Task DeletePMItemTask([FromRoute] long PMItemTaskId) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); PMBiz biz = PMBiz.GetBiz(ct, HttpContext); if (!Authorized.HasDeleteRole(HttpContext.Items, AyaType.PMItemTask) || biz.UserIsRestrictedType) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!await biz.TaskDeleteAsync(PMItemTaskId)) return BadRequest(new ApiErrorResponse(biz.Errors)); return NoContent(); } #endregion PMItemTask /* ████████╗██████╗ █████╗ ██╗ ██╗███████╗██╗ ╚══██╔══╝██╔══██╗██╔══██╗██║ ██║██╔════╝██║ ██║ ██████╔╝███████║██║ ██║█████╗ ██║ ██║ ██╔══██╗██╔══██║╚██╗ ██╔╝██╔══╝ ██║ ██║ ██║ ██║██║ ██║ ╚████╔╝ ███████╗███████╗ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═══╝ ╚══════╝╚══════╝ */ #region PMItemTravel /// /// Create PMItemTravel /// /// PMItemTravel level only no descendants /// /// PMItemTravel object (no descendants) [HttpPost("items/travels")] public async Task PostPMItemTravel([FromBody] PMItemTravel newObject, ApiVersion apiVersion) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); PMBiz biz = PMBiz.GetBiz(ct, HttpContext); if (!Authorized.HasCreateRole(HttpContext.Items, AyaType.PMItemTravel)) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); PMItemTravel o = await biz.TravelCreateAsync(newObject); if (o == null) return BadRequest(new ApiErrorResponse(biz.Errors)); else return CreatedAtAction(nameof(PMController.GetPMItemTravel), new { PMItemTravelId = o.Id, version = apiVersion.ToString() }, new ApiCreatedResponse(o)); } /// /// Get PMItemTravel object /// /// /// A single PMItemTravel [HttpGet("items/travels/{PMItemTravelId}")] public async Task GetPMItemTravel([FromRoute] long PMItemTravelId) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); PMBiz biz = PMBiz.GetBiz(ct, HttpContext); if (!Authorized.HasReadFullRole(HttpContext.Items, AyaType.PMItemTravel)) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); var o = await biz.TravelGetAsync(PMItemTravelId); if (o == null) return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); return Ok(ApiOkResponse.Response(o)); } /// /// Update PMItemTravel /// /// /// PMItemTravel - top level only, no descendants /// New concurrency token [HttpPut("items/travels")] public async Task PutPMItemTravel([FromBody] PMItemTravel updatedObject) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); PMBiz biz = PMBiz.GetBiz(ct, HttpContext); if (!Authorized.HasModifyRole(HttpContext.Items, AyaType.PMItemTravel)) return StatusCode(403, new ApiNotAuthorizedResponse()); var o = await biz.TravelPutAsync(updatedObject); if (o == null) { if (biz.Errors.Exists(z => z.Code == ApiErrorCode.CONCURRENCY_CONFLICT)) return StatusCode(409, new ApiErrorResponse(biz.Errors)); else return BadRequest(new ApiErrorResponse(biz.Errors)); } return Ok(ApiOkResponse.Response(o)); } /// /// Delete PMItemTravel /// /// /// NoContent [HttpDelete("items/travels/{PMItemTravelId}")] public async Task DeletePMItemTravel([FromRoute] long PMItemTravelId) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); PMBiz biz = PMBiz.GetBiz(ct, HttpContext); if (!Authorized.HasDeleteRole(HttpContext.Items, AyaType.PMItemTravel)) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!await biz.TravelDeleteAsync(PMItemTravelId)) return BadRequest(new ApiErrorResponse(biz.Errors)); return NoContent(); } #endregion PMItemTravel /* ██╗ ██╗███╗ ██╗██╗████████╗ ██║ ██║████╗ ██║██║╚══██╔══╝ ██║ ██║██╔██╗ ██║██║ ██║ ██║ ██║██║╚██╗██║██║ ██║ ╚██████╔╝██║ ╚████║██║ ██║ ╚═════╝ ╚═╝ ╚═══╝╚═╝ ╚═╝ */ #region PMItemUnit /// /// Create PMItemUnit /// /// PMItemUnit level only no descendants /// /// PMItemUnit object (no descendants) [HttpPost("items/units")] public async Task PostPMItemUnit([FromBody] PMItemUnit newObject, ApiVersion apiVersion) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); PMBiz biz = PMBiz.GetBiz(ct, HttpContext); if (!Authorized.HasCreateRole(HttpContext.Items, AyaType.PMItemUnit) || biz.UserIsRestrictedType) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); PMItemUnit o = await biz.UnitCreateAsync(newObject); if (o == null) return BadRequest(new ApiErrorResponse(biz.Errors)); else return CreatedAtAction(nameof(PMController.GetPMItemUnit), new { PMItemUnitId = o.Id, version = apiVersion.ToString() }, new ApiCreatedResponse(o)); } /// /// Get PMItemUnit object /// /// /// A single PMItemUnit [HttpGet("items/units/{PMItemUnitId}")] public async Task GetPMItemUnit([FromRoute] long PMItemUnitId) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); PMBiz biz = PMBiz.GetBiz(ct, HttpContext); if (!Authorized.HasReadFullRole(HttpContext.Items, AyaType.PMItemUnit) || biz.UserIsSubContractorRestricted) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); var o = await biz.UnitGetAsync(PMItemUnitId); if (o == null) return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); return Ok(ApiOkResponse.Response(o)); } /// /// Update PMItemUnit /// /// /// PMItemUnit - top level only, no descendants /// New concurrency token [HttpPut("items/units")] public async Task PutPMItemUnit([FromBody] PMItemUnit updatedObject) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); PMBiz biz = PMBiz.GetBiz(ct, HttpContext); if (!Authorized.HasModifyRole(HttpContext.Items, AyaType.PMItemUnit) || biz.UserIsRestrictedType) return StatusCode(403, new ApiNotAuthorizedResponse()); var o = await biz.UnitPutAsync(updatedObject); if (o == null) { if (biz.Errors.Exists(z => z.Code == ApiErrorCode.CONCURRENCY_CONFLICT)) return StatusCode(409, new ApiErrorResponse(biz.Errors)); else return BadRequest(new ApiErrorResponse(biz.Errors)); } return Ok(ApiOkResponse.Response(o)); } /// /// Delete PMItemUnit /// /// /// NoContent [HttpDelete("items/units/{PMItemUnitId}")] public async Task DeletePMItemUnit([FromRoute] long PMItemUnitId) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); PMBiz biz = PMBiz.GetBiz(ct, HttpContext); if (!Authorized.HasDeleteRole(HttpContext.Items, AyaType.PMItemUnit) || biz.UserIsRestrictedType) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!await biz.UnitDeleteAsync(PMItemUnitId)) return BadRequest(new ApiErrorResponse(biz.Errors)); return NoContent(); } #endregion PMItemUnit //------------ }//eoc }//eons