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}/quote")] [Produces("application/json")] [Authorize] public class QuoteController : ControllerBase { private readonly AyContext ct; private readonly ILogger log; private readonly ApiServerState serverState; /// /// ctor /// /// /// /// public QuoteController(AyContext dbcontext, ILogger logger, ApiServerState apiServerState) { ct = dbcontext; log = logger; serverState = apiServerState; } /* ██████╗ ██╗ ██╗ ██████╗ ████████╗███████╗ ██╔═══██╗██║ ██║██╔═══██╗╚══██╔══╝██╔════╝ ██║ ██║██║ ██║██║ ██║ ██║ █████╗ ██║▄▄ ██║██║ ██║██║ ██║ ██║ ██╔══╝ ╚██████╔╝╚██████╔╝╚██████╔╝ ██║ ███████╗ ╚══▀▀═╝ ╚═════╝ ╚═════╝ ╚═╝ ╚══════╝ */ #region Quote top level routes /// /// Create Quote /// /// Quote - top level only, no descendants /// From route path /// Quote [HttpPost] public async Task PostQuote([FromBody] Quote newObject, ApiVersion apiVersion) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); QuoteBiz biz = QuoteBiz.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")); Quote o = await biz.QuoteCreateAsync(newObject); if (o == null) return BadRequest(new ApiErrorResponse(biz.Errors)); else return CreatedAtAction(nameof(QuoteController.GetQuote), new { id = o.Id, version = apiVersion.ToString() }, new ApiCreatedResponse(o)); } // /// // /// Duplicate Quote // /// (Wiki and Attachments are not duplicated) // /// // /// Source object id // /// From route path // /// Quote // [HttpPost("duplicate/{id}")] // public async Task DuplicateQuote([FromRoute] long id, ApiVersion apiVersion) // { // if (!serverState.IsOpen) // return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); // QuoteBiz biz = QuoteBiz.GetBiz(ct, HttpContext); // if (!Authorized.HasCreateRole(HttpContext.Items, biz.BizType)) // return StatusCode(403, new ApiNotAuthorizedResponse()); // if (!ModelState.IsValid) // return BadRequest(new ApiErrorResponse(ModelState)); // Quote o = await biz.QuoteDuplicateAsync(id); // if (o == null) // return BadRequest(new ApiErrorResponse(biz.Errors)); // else // return CreatedAtAction(nameof(QuoteController.GetQuote), new { id = o.Id, version = apiVersion.ToString() }, new ApiCreatedResponse(o)); // } /// /// Get Quote /// /// /// Quote [HttpGet("{id}")] public async Task GetQuote([FromRoute] long id) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); QuoteBiz biz = QuoteBiz.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.QuoteGetAsync(id, true); if (o == null) return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); return Ok(ApiOkResponse.Response(o)); } /// /// Update Quote /// /// /// Quote - top level only, no Items or other descendants /// Updated work order header [HttpPut] public async Task PutQuote([FromBody] Quote 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")); } QuoteBiz biz = QuoteBiz.GetBiz(ct, HttpContext); if (!Authorized.HasModifyRole(HttpContext.Items, biz.BizType) || biz.UserIsRestrictedType) return StatusCode(403, new ApiNotAuthorizedResponse()); var o = await biz.QuotePutAsync(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 Quote /// /// /// NoContent [HttpDelete("{id}")] public async Task DeleteQuote([FromRoute] long id) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); QuoteBiz biz = QuoteBiz.GetBiz(ct, HttpContext); if (!Authorized.HasDeleteRole(HttpContext.Items, AyaType.Quote) || biz.UserIsRestrictedType) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!await biz.QuoteDeleteAsync(id)) return BadRequest(new ApiErrorResponse(biz.Errors)); return NoContent(); } /// /// Get Quote id from work order serial number /// /// /// Quote [HttpGet("id-from-number/{number}")] public async Task GetQuoteIdFromNumber([FromRoute] long number) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); if (!Authorized.HasReadFullRole(HttpContext.Items, AyaType.Quote)) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); var o = await ct.Quote.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 QuoteTopLevel routes /* ███████╗████████╗ █████╗ ████████╗███████╗███████╗ ██╔════╝╚══██╔══╝██╔══██╗╚══██╔══╝██╔════╝██╔════╝ ███████╗ ██║ ███████║ ██║ █████╗ ███████╗ ╚════██║ ██║ ██╔══██║ ██║ ██╔══╝ ╚════██║ ███████║ ██║ ██║ ██║ ██║ ███████╗███████║ ╚══════╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚══════╝╚══════╝ */ #region QuoteState /// /// Create QuoteState /// /// QuoteState /// /// QuoteState object [HttpPost("states")] public async Task PostQuoteState([FromBody] QuoteState newObject, ApiVersion apiVersion) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); QuoteBiz biz = QuoteBiz.GetBiz(ct, HttpContext); if (!Authorized.HasCreateRole(HttpContext.Items, AyaType.QuoteStatus) || biz.UserIsSubContractorFull || biz.UserIsSubContractorRestricted) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); QuoteState o = await biz.StateCreateAsync(newObject); if (o == null) return BadRequest(new ApiErrorResponse(biz.Errors)); else return CreatedAtAction(nameof(QuoteController.GetQuoteState), new { QuoteStateId = o.Id, version = apiVersion.ToString() }, new ApiCreatedResponse(o)); } /// /// Get QuoteState object /// /// /// A single QuoteState [HttpGet("states/{QuoteStateId}")] public async Task GetQuoteState([FromRoute] long QuoteStateId) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); QuoteBiz biz = QuoteBiz.GetBiz(ct, HttpContext); if (!Authorized.HasReadFullRole(HttpContext.Items, AyaType.QuoteStatus)) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); var o = await biz.StateGetAsync(QuoteStateId); if (o == null) return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); return Ok(ApiOkResponse.Response(o)); } #endregion quotestate /* ██╗████████╗███████╗███╗ ███╗███████╗ ██║╚══██╔══╝██╔════╝████╗ ████║██╔════╝ ██║ ██║ █████╗ ██╔████╔██║███████╗ ██║ ██║ ██╔══╝ ██║╚██╔╝██║╚════██║ ██║ ██║ ███████╗██║ ╚═╝ ██║███████║ ╚═╝ ╚═╝ ╚══════╝╚═╝ ╚═╝╚══════╝ */ #region QuoteItem /// /// Create QuoteItem /// /// QuoteItem - no descendants /// /// QuoteItem object [HttpPost("items")] public async Task PostQuoteItem([FromBody] QuoteItem newObject, ApiVersion apiVersion) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); QuoteBiz biz = QuoteBiz.GetBiz(ct, HttpContext); if (!Authorized.HasCreateRole(HttpContext.Items, AyaType.QuoteItem) || biz.UserIsRestrictedType) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); QuoteItem o = await biz.ItemCreateAsync(newObject); if (o == null) return BadRequest(new ApiErrorResponse(biz.Errors)); else return CreatedAtAction(nameof(QuoteController.GetQuoteItem), new { QuoteItemId = o.Id, version = apiVersion.ToString() }, new ApiCreatedResponse(o)); } /// /// Get QuoteItem object /// /// /// A single QuoteItem [HttpGet("items/{QuoteItemId}")] public async Task GetQuoteItem([FromRoute] long QuoteItemId) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); QuoteBiz biz = QuoteBiz.GetBiz(ct, HttpContext); if (!Authorized.HasReadFullRole(HttpContext.Items, AyaType.QuoteItem) || biz.UserIsRestrictedType) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); var o = await biz.ItemGetAsync(QuoteItemId); if (o == null) return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); return Ok(ApiOkResponse.Response(o)); } /// /// Update QuoteItem /// /// /// QuoteItem - top level only, no descendants /// New concurrency token [HttpPut("items/")] public async Task PutQuoteItem([FromBody] QuoteItem updatedObject) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); QuoteBiz biz = QuoteBiz.GetBiz(ct, HttpContext); if (!Authorized.HasModifyRole(HttpContext.Items, AyaType.QuoteItem) || 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 QuoteItem /// /// /// NoContent [HttpDelete("items/{QuoteItemId}")] public async Task DeleteQuoteItem([FromRoute] long QuoteItemId) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); QuoteBiz biz = QuoteBiz.GetBiz(ct, HttpContext); if (!Authorized.HasDeleteRole(HttpContext.Items, AyaType.QuoteItem) || biz.UserIsRestrictedType) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!await biz.ItemDeleteAsync(QuoteItemId)) return BadRequest(new ApiErrorResponse(biz.Errors)); return NoContent(); } #endregion quoteitem /* ███████╗██╗ ██╗██████╗ ███████╗███╗ ██╗███████╗███████╗███████╗ ██╔════╝╚██╗██╔╝██╔══██╗██╔════╝████╗ ██║██╔════╝██╔════╝██╔════╝ █████╗ ╚███╔╝ ██████╔╝█████╗ ██╔██╗ ██║███████╗█████╗ ███████╗ ██╔══╝ ██╔██╗ ██╔═══╝ ██╔══╝ ██║╚██╗██║╚════██║██╔══╝ ╚════██║ ███████╗██╔╝ ██╗██║ ███████╗██║ ╚████║███████║███████╗███████║ ╚══════╝╚═╝ ╚═╝╚═╝ ╚══════╝╚═╝ ╚═══╝╚══════╝╚══════╝╚══════╝ */ #region QuoteItemExpense /// /// Create QuoteItemExpense /// /// QuoteItemExpense level only no descendants /// /// QuoteItemExpense object (no descendants) [HttpPost("items/expenses")] public async Task PostQuoteItemExpense([FromBody] QuoteItemExpense newObject, ApiVersion apiVersion) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); QuoteBiz biz = QuoteBiz.GetBiz(ct, HttpContext); if (!Authorized.HasCreateRole(HttpContext.Items, AyaType.QuoteItemExpense) || biz.UserIsSubContractorFull || biz.UserIsSubContractorRestricted) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); QuoteItemExpense o = await biz.ExpenseCreateAsync(newObject); if (o == null) return BadRequest(new ApiErrorResponse(biz.Errors)); else return CreatedAtAction(nameof(QuoteController.GetQuoteItemExpense), new { QuoteItemExpenseId = o.Id, version = apiVersion.ToString() }, new ApiCreatedResponse(o)); } /// /// Get QuoteItemExpense object /// /// /// A single QuoteItemExpense [HttpGet("items/expenses/{QuoteItemExpenseId}")] public async Task GetQuoteItemExpense([FromRoute] long QuoteItemExpenseId) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); QuoteBiz biz = QuoteBiz.GetBiz(ct, HttpContext); if (!Authorized.HasReadFullRole(HttpContext.Items, AyaType.QuoteItemExpense) || biz.UserIsSubContractorFull || biz.UserIsSubContractorRestricted) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); var o = await biz.ExpenseGetAsync(QuoteItemExpenseId); if (o == null) return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); return Ok(ApiOkResponse.Response(o)); } /// /// Update QuoteItemExpense /// /// /// QuoteItemExpense - top level only, no descendants /// Updated Expense item [HttpPut("items/expenses")] public async Task PutQuoteItemExpense([FromBody] QuoteItemExpense updatedObject) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); QuoteBiz biz = QuoteBiz.GetBiz(ct, HttpContext); if (!Authorized.HasModifyRole(HttpContext.Items, AyaType.QuoteItemExpense) || 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 QuoteItemExpense /// /// /// NoContent [HttpDelete("items/expenses/{QuoteItemExpenseId}")] public async Task DeleteQuoteItemExpense([FromRoute] long QuoteItemExpenseId) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); QuoteBiz biz = QuoteBiz.GetBiz(ct, HttpContext); if (!Authorized.HasDeleteRole(HttpContext.Items, AyaType.QuoteItemExpense) || biz.UserIsSubContractorFull || biz.UserIsSubContractorRestricted) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!await biz.ExpenseDeleteAsync(QuoteItemExpenseId)) return BadRequest(new ApiErrorResponse(biz.Errors)); return NoContent(); } #endregion QuoteItemExpense /* ██╗ █████╗ ██████╗ ██████╗ ██████╗ ██║ ██╔══██╗██╔══██╗██╔═══██╗██╔══██╗ ██║ ███████║██████╔╝██║ ██║██████╔╝ ██║ ██╔══██║██╔══██╗██║ ██║██╔══██╗ ███████╗██║ ██║██████╔╝╚██████╔╝██║ ██║ ╚══════╝╚═╝ ╚═╝╚═════╝ ╚═════╝ ╚═╝ ╚═╝ */ #region QuoteItemLabor /// /// Create QuoteItemLabor /// /// QuoteItemLabor level only no descendants /// /// QuoteItemLabor object (no descendants) [HttpPost("items/labors")] public async Task PostQuoteItemLabor([FromBody] QuoteItemLabor newObject, ApiVersion apiVersion) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); QuoteBiz biz = QuoteBiz.GetBiz(ct, HttpContext); if (!Authorized.HasCreateRole(HttpContext.Items, AyaType.QuoteItemLabor)) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); QuoteItemLabor o = await biz.LaborCreateAsync(newObject); if (o == null) return BadRequest(new ApiErrorResponse(biz.Errors)); else return CreatedAtAction(nameof(QuoteController.GetQuoteItemLabor), new { QuoteItemLaborId = o.Id, version = apiVersion.ToString() }, new ApiCreatedResponse(o)); } /// /// Get QuoteItemLabor object /// /// /// A single QuoteItemLabor [HttpGet("items/labors/{QuoteItemLaborId}")] public async Task GetQuoteItemLabor([FromRoute] long QuoteItemLaborId) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); QuoteBiz biz = QuoteBiz.GetBiz(ct, HttpContext); if (!Authorized.HasReadFullRole(HttpContext.Items, AyaType.QuoteItemLabor)) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); var o = await biz.LaborGetAsync(QuoteItemLaborId); if (o == null) return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); return Ok(ApiOkResponse.Response(o)); } /// /// Update QuoteItemLabor /// /// /// QuoteItemLabor - top level only, no descendants /// Updated object [HttpPut("items/labors")] public async Task PutQuoteItemLabor([FromBody] QuoteItemLabor updatedObject) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); QuoteBiz biz = QuoteBiz.GetBiz(ct, HttpContext); if (!Authorized.HasModifyRole(HttpContext.Items, AyaType.QuoteItemLabor)) 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 QuoteItemLabor /// /// /// NoContent [HttpDelete("items/labors/{QuoteItemLaborId}")] public async Task DeleteQuoteItemLabor([FromRoute] long QuoteItemLaborId) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); QuoteBiz biz = QuoteBiz.GetBiz(ct, HttpContext); if (!Authorized.HasDeleteRole(HttpContext.Items, AyaType.QuoteItemLabor)) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!await biz.LaborDeleteAsync(QuoteItemLaborId)) return BadRequest(new ApiErrorResponse(biz.Errors)); return NoContent(); } #endregion QuoteItemLabor /* ██╗ ██████╗ █████╗ ███╗ ██╗ ██║ ██╔═══██╗██╔══██╗████╗ ██║ ██║ ██║ ██║███████║██╔██╗ ██║ ██║ ██║ ██║██╔══██║██║╚██╗██║ ███████╗╚██████╔╝██║ ██║██║ ╚████║ ╚══════╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═══╝ */ #region QuoteItemLoan /// /// Create QuoteItemLoan /// /// QuoteItemLoan level only no descendants /// /// QuoteItemLoan object (no descendants) [HttpPost("items/loans")] public async Task PostQuoteItemLoan([FromBody] QuoteItemLoan newObject, ApiVersion apiVersion) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); QuoteBiz biz = QuoteBiz.GetBiz(ct, HttpContext); if (!Authorized.HasCreateRole(HttpContext.Items, AyaType.QuoteItemLoan) || biz.UserIsRestrictedType) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); QuoteItemLoan o = await biz.LoanCreateAsync(newObject); if (o == null) return BadRequest(new ApiErrorResponse(biz.Errors)); else return CreatedAtAction(nameof(QuoteController.GetQuoteItemLoan), new { QuoteItemLoanId = o.Id, version = apiVersion.ToString() }, new ApiCreatedResponse(o)); } /// /// Get QuoteItemLoan object /// /// /// A single QuoteItemLoan [HttpGet("items/loans/{QuoteItemLoanId}")] public async Task GetQuoteItemLoan([FromRoute] long QuoteItemLoanId) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); QuoteBiz biz = QuoteBiz.GetBiz(ct, HttpContext); if (!Authorized.HasReadFullRole(HttpContext.Items, AyaType.QuoteItemLoan) || biz.UserIsSubContractorRestricted) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); var o = await biz.LoanGetAsync(QuoteItemLoanId); if (o == null) return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); return Ok(ApiOkResponse.Response(o)); } /// /// Update QuoteItemLoan /// /// /// QuoteItemLoan - top level only, no descendants /// New concurrency token [HttpPut("items/loans")] public async Task PutQuoteItemLoan([FromBody] QuoteItemLoan updatedObject) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); QuoteBiz biz = QuoteBiz.GetBiz(ct, HttpContext); if (!Authorized.HasModifyRole(HttpContext.Items, AyaType.QuoteItemLoan) || 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 QuoteItemLoan /// /// /// NoContent [HttpDelete("items/loans/{QuoteItemLoanId}")] public async Task DeleteQuoteItemLoan([FromRoute] long QuoteItemLoanId) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); QuoteBiz biz = QuoteBiz.GetBiz(ct, HttpContext); if (!Authorized.HasDeleteRole(HttpContext.Items, AyaType.QuoteItemLoan) || biz.UserIsRestrictedType) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!await biz.LoanDeleteAsync(QuoteItemLoanId)) return BadRequest(new ApiErrorResponse(biz.Errors)); return NoContent(); } #endregion QuoteItemLoan /* ██████╗ ██╗ ██╗████████╗███████╗██╗██████╗ ███████╗ ███████╗███████╗██████╗ ██╗ ██╗██╗ ██████╗███████╗ ██╔═══██╗██║ ██║╚══██╔══╝██╔════╝██║██╔══██╗██╔════╝ ██╔════╝██╔════╝██╔══██╗██║ ██║██║██╔════╝██╔════╝ ██║ ██║██║ ██║ ██║ ███████╗██║██║ ██║█████╗ ███████╗█████╗ ██████╔╝██║ ██║██║██║ █████╗ ██║ ██║██║ ██║ ██║ ╚════██║██║██║ ██║██╔══╝ ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║██║ ██╔══╝ ╚██████╔╝╚██████╔╝ ██║ ███████║██║██████╔╝███████╗ ███████║███████╗██║ ██║ ╚████╔╝ ██║╚██████╗███████╗ ╚═════╝ ╚═════╝ ╚═╝ ╚══════╝╚═╝╚═════╝ ╚══════╝ ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═════╝╚══════╝ */ #region QuoteItemOutsideService /// /// Create QuoteItemOutsideService /// /// QuoteItemOutsideService level only no descendants /// /// QuoteItemOutsideService object (no descendants) [HttpPost("items/outside-services")] public async Task PostQuoteItemOutsideService([FromBody] QuoteItemOutsideService newObject, ApiVersion apiVersion) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); QuoteBiz biz = QuoteBiz.GetBiz(ct, HttpContext); if (!Authorized.HasCreateRole(HttpContext.Items, AyaType.QuoteItemOutsideService) || biz.UserIsRestrictedType) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); QuoteItemOutsideService o = await biz.OutsideServiceCreateAsync(newObject); if (o == null) return BadRequest(new ApiErrorResponse(biz.Errors)); else return CreatedAtAction(nameof(QuoteController.GetQuoteItemOutsideService), new { QuoteItemOutsideServiceId = o.Id, version = apiVersion.ToString() }, new ApiCreatedResponse(o)); } /// /// Get QuoteItemOutsideService object /// /// /// A single QuoteItemOutsideService [HttpGet("items/outside-services/{QuoteItemOutsideServiceId}")] public async Task GetQuoteItemOutsideService([FromRoute] long QuoteItemOutsideServiceId) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); QuoteBiz biz = QuoteBiz.GetBiz(ct, HttpContext); if (!Authorized.HasReadFullRole(HttpContext.Items, AyaType.QuoteItemOutsideService) || biz.UserIsSubContractorFull || biz.UserIsSubContractorRestricted) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); var o = await biz.OutsideServiceGetAsync(QuoteItemOutsideServiceId); if (o == null) return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); return Ok(ApiOkResponse.Response(o)); } /// /// Update QuoteItemOutsideService /// /// /// QuoteItemOutsideService - top level only, no descendants /// New concurrency token [HttpPut("items/outside-services")] public async Task PutQuoteItemOutsideService([FromBody] QuoteItemOutsideService updatedObject) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); QuoteBiz biz = QuoteBiz.GetBiz(ct, HttpContext); if (!Authorized.HasModifyRole(HttpContext.Items, AyaType.QuoteItemOutsideService) || 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 QuoteItemOutsideService /// /// /// NoContent [HttpDelete("items/outside-services/{QuoteItemOutsideServiceId}")] public async Task DeleteQuoteItemOutsideService([FromRoute] long QuoteItemOutsideServiceId) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); QuoteBiz biz = QuoteBiz.GetBiz(ct, HttpContext); if (!Authorized.HasDeleteRole(HttpContext.Items, AyaType.QuoteItemOutsideService) || biz.UserIsRestrictedType) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!await biz.OutsideServiceDeleteAsync(QuoteItemOutsideServiceId)) return BadRequest(new ApiErrorResponse(biz.Errors)); return NoContent(); } #endregion QuoteItemOutsideService /* ██████╗ █████╗ ██████╗ ████████╗███████╗ ██╔══██╗██╔══██╗██╔══██╗╚══██╔══╝██╔════╝ ██████╔╝███████║██████╔╝ ██║ ███████╗ ██╔═══╝ ██╔══██║██╔══██╗ ██║ ╚════██║ ██║ ██║ ██║██║ ██║ ██║ ███████║ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚══════╝ */ #region QuoteItemPart /// /// Create QuoteItemPart /// /// QuoteItemPart level only no descendants /// /// QuoteItemPart object (no descendants) [HttpPost("items/parts")] public async Task PostQuoteItemPart([FromBody] QuoteItemPart newObject, ApiVersion apiVersion) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); QuoteBiz biz = QuoteBiz.GetBiz(ct, HttpContext); if (!Authorized.HasCreateRole(HttpContext.Items, AyaType.QuoteItemPart) || biz.UserIsRestrictedType) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); QuoteItemPart o = await biz.CreatePartAsync(newObject); if (o == null) return BadRequest(new ApiErrorResponse(biz.Errors)); else return CreatedAtAction(nameof(QuoteController.GetQuoteItemPart), new { QuoteItemPartId = o.Id, version = apiVersion.ToString() }, new ApiCreatedResponse(o)); } /// /// Get QuoteItemPart object /// /// /// A single QuoteItemPart [HttpGet("items/parts/{QuoteItemPartId}")] public async Task GetQuoteItemPart([FromRoute] long QuoteItemPartId) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); QuoteBiz biz = QuoteBiz.GetBiz(ct, HttpContext); if (!Authorized.HasReadFullRole(HttpContext.Items, AyaType.QuoteItemPart) || biz.UserIsSubContractorRestricted) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); var o = await biz.PartGetAsync(QuoteItemPartId); if (o == null) return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); return Ok(ApiOkResponse.Response(o)); } /// /// Update QuoteItemPart /// /// /// QuoteItemPart - top level only, no descendants /// New concurrency token [HttpPut("items/parts")] public async Task PutQuoteItemPart([FromBody] QuoteItemPart updatedObject) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); QuoteBiz biz = QuoteBiz.GetBiz(ct, HttpContext); if (!Authorized.HasModifyRole(HttpContext.Items, AyaType.QuoteItemPart) || 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 QuoteItemPart /// /// /// NoContent [HttpDelete("items/parts/{QuoteItemPartId}")] public async Task DeleteQuoteItemPart([FromRoute] long QuoteItemPartId) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); QuoteBiz biz = QuoteBiz.GetBiz(ct, HttpContext); if (!Authorized.HasDeleteRole(HttpContext.Items, AyaType.QuoteItemPart) || biz.UserIsRestrictedType) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!await biz.PartDeleteAsync(QuoteItemPartId)) return BadRequest(new ApiErrorResponse(biz.Errors)); return NoContent(); } #endregion QuoteItemPart /* ███████╗ ██████╗██╗ ██╗███████╗██████╗ ██╗ ██╗██╗ ███████╗██████╗ ██╗ ██╗███████╗███████╗██████╗ ███████╗ ██╔════╝██╔════╝██║ ██║██╔════╝██╔══██╗██║ ██║██║ ██╔════╝██╔══██╗ ██║ ██║██╔════╝██╔════╝██╔══██╗██╔════╝ ███████╗██║ ███████║█████╗ ██║ ██║██║ ██║██║ █████╗ ██║ ██║█████╗██║ ██║███████╗█████╗ ██████╔╝███████╗ ╚════██║██║ ██╔══██║██╔══╝ ██║ ██║██║ ██║██║ ██╔══╝ ██║ ██║╚════╝██║ ██║╚════██║██╔══╝ ██╔══██╗╚════██║ ███████║╚██████╗██║ ██║███████╗██████╔╝╚██████╔╝███████╗███████╗██████╔╝ ╚██████╔╝███████║███████╗██║ ██║███████║ ╚══════╝ ╚═════╝╚═╝ ╚═╝╚══════╝╚═════╝ ╚═════╝ ╚══════╝╚══════╝╚═════╝ ╚═════╝ ╚══════╝╚══════╝╚═╝ ╚═╝╚══════╝ */ #region QuoteItemScheduledUser /// /// Create QuoteItemScheduledUser /// /// QuoteItemScheduledUser level only no descendants /// /// QuoteItemScheduledUser object (no descendants) [HttpPost("items/scheduled-users")] public async Task PostQuoteItemScheduledUser([FromBody] QuoteItemScheduledUser newObject, ApiVersion apiVersion) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); QuoteBiz biz = QuoteBiz.GetBiz(ct, HttpContext); if (!Authorized.HasCreateRole(HttpContext.Items, AyaType.QuoteItemScheduledUser) || biz.UserIsRestrictedType) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); QuoteItemScheduledUser o = await biz.ScheduledUserCreateAsync(newObject); if (o == null) return BadRequest(new ApiErrorResponse(biz.Errors)); else return CreatedAtAction(nameof(QuoteController.GetQuoteItemScheduledUser), new { QuoteItemScheduledUserId = o.Id, version = apiVersion.ToString() }, new ApiCreatedResponse(o)); } /// /// Get QuoteItemScheduledUser object /// /// /// A single QuoteItemScheduledUser [HttpGet("items/scheduled-users/{QuoteItemScheduledUserId}")] public async Task GetQuoteItemScheduledUser([FromRoute] long QuoteItemScheduledUserId) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); QuoteBiz biz = QuoteBiz.GetBiz(ct, HttpContext); if (!Authorized.HasReadFullRole(HttpContext.Items, AyaType.QuoteItemScheduledUser)) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); var o = await biz.ScheduledUserGetAsync(QuoteItemScheduledUserId); if (o == null) return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); return Ok(ApiOkResponse.Response(o)); } /// /// Update QuoteItemScheduledUser /// /// /// QuoteItemScheduledUser - top level only, no descendants /// New concurrency token [HttpPut("items/scheduled-users")] public async Task PutQuoteItemScheduledUser([FromBody] QuoteItemScheduledUser updatedObject) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); QuoteBiz biz = QuoteBiz.GetBiz(ct, HttpContext); if (!Authorized.HasModifyRole(HttpContext.Items, AyaType.QuoteItemScheduledUser) || 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 QuoteItemScheduledUser /// /// /// NoContent [HttpDelete("items/scheduled-users/{QuoteItemScheduledUserId}")] public async Task DeleteQuoteItemScheduledUser([FromRoute] long QuoteItemScheduledUserId) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); QuoteBiz biz = QuoteBiz.GetBiz(ct, HttpContext); if (!Authorized.HasDeleteRole(HttpContext.Items, AyaType.QuoteItemScheduledUser) || biz.UserIsRestrictedType) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!await biz.ScheduledUserDeleteAsync(QuoteItemScheduledUserId)) return BadRequest(new ApiErrorResponse(biz.Errors)); return NoContent(); } #endregion QuoteItemScheduledUser /* ████████╗ █████╗ ███████╗██╗ ██╗ ╚══██╔══╝██╔══██╗██╔════╝██║ ██╔╝ ██║ ███████║███████╗█████╔╝ ██║ ██╔══██║╚════██║██╔═██╗ ██║ ██║ ██║███████║██║ ██╗ ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ #region QuoteItemtask /// /// Create QuoteItemTask /// /// QuoteItemTask level only no descendants /// /// QuoteItemTask object (no descendants) [HttpPost("items/tasks")] public async Task PostQuoteItemTask([FromBody] QuoteItemTask newObject, ApiVersion apiVersion) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); QuoteBiz biz = QuoteBiz.GetBiz(ct, HttpContext); if (!Authorized.HasCreateRole(HttpContext.Items, AyaType.QuoteItemTask) || biz.UserIsRestrictedType) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); QuoteItemTask o = await biz.TaskCreateAsync(newObject); if (o == null) return BadRequest(new ApiErrorResponse(biz.Errors)); else return CreatedAtAction(nameof(QuoteController.GetQuoteItemTask), new { QuoteItemTaskId = o.Id, version = apiVersion.ToString() }, new ApiCreatedResponse(o)); } /// /// Get QuoteItemTask object /// /// /// A single QuoteItemTask [HttpGet("items/tasks/{QuoteItemTaskId}")] public async Task GetQuoteItemTask([FromRoute] long QuoteItemTaskId) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); QuoteBiz biz = QuoteBiz.GetBiz(ct, HttpContext); if (!Authorized.HasReadFullRole(HttpContext.Items, AyaType.QuoteItemTask)) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); var o = await biz.TaskGetAsync(QuoteItemTaskId); if (o == null) return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); return Ok(ApiOkResponse.Response(o)); } /// /// Update QuoteItemTask /// /// /// QuoteItemTask - top level only, no descendants /// New concurrency token [HttpPut("items/tasks")] public async Task PutQuoteItemTask([FromBody] QuoteItemTask updatedObject) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); QuoteBiz biz = QuoteBiz.GetBiz(ct, HttpContext); if (!Authorized.HasModifyRole(HttpContext.Items, AyaType.QuoteItemTask)) 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 QuoteItemTask /// /// /// NoContent [HttpDelete("items/tasks/{QuoteItemTaskId}")] public async Task DeleteQuoteItemTask([FromRoute] long QuoteItemTaskId) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); QuoteBiz biz = QuoteBiz.GetBiz(ct, HttpContext); if (!Authorized.HasDeleteRole(HttpContext.Items, AyaType.QuoteItemTask) || biz.UserIsRestrictedType) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!await biz.TaskDeleteAsync(QuoteItemTaskId)) return BadRequest(new ApiErrorResponse(biz.Errors)); return NoContent(); } #endregion QuoteItemTask /* ████████╗██████╗ █████╗ ██╗ ██╗███████╗██╗ ╚══██╔══╝██╔══██╗██╔══██╗██║ ██║██╔════╝██║ ██║ ██████╔╝███████║██║ ██║█████╗ ██║ ██║ ██╔══██╗██╔══██║╚██╗ ██╔╝██╔══╝ ██║ ██║ ██║ ██║██║ ██║ ╚████╔╝ ███████╗███████╗ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═══╝ ╚══════╝╚══════╝ */ #region QuoteItemTravel /// /// Create QuoteItemTravel /// /// QuoteItemTravel level only no descendants /// /// QuoteItemTravel object (no descendants) [HttpPost("items/travels")] public async Task PostQuoteItemTravel([FromBody] QuoteItemTravel newObject, ApiVersion apiVersion) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); QuoteBiz biz = QuoteBiz.GetBiz(ct, HttpContext); if (!Authorized.HasCreateRole(HttpContext.Items, AyaType.QuoteItemTravel)) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); QuoteItemTravel o = await biz.TravelCreateAsync(newObject); if (o == null) return BadRequest(new ApiErrorResponse(biz.Errors)); else return CreatedAtAction(nameof(QuoteController.GetQuoteItemTravel), new { QuoteItemTravelId = o.Id, version = apiVersion.ToString() }, new ApiCreatedResponse(o)); } /// /// Get QuoteItemTravel object /// /// /// A single QuoteItemTravel [HttpGet("items/travels/{QuoteItemTravelId}")] public async Task GetQuoteItemTravel([FromRoute] long QuoteItemTravelId) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); QuoteBiz biz = QuoteBiz.GetBiz(ct, HttpContext); if (!Authorized.HasReadFullRole(HttpContext.Items, AyaType.QuoteItemTravel)) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); var o = await biz.TravelGetAsync(QuoteItemTravelId); if (o == null) return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); return Ok(ApiOkResponse.Response(o)); } /// /// Update QuoteItemTravel /// /// /// QuoteItemTravel - top level only, no descendants /// New concurrency token [HttpPut("items/travels")] public async Task PutQuoteItemTravel([FromBody] QuoteItemTravel updatedObject) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); QuoteBiz biz = QuoteBiz.GetBiz(ct, HttpContext); if (!Authorized.HasModifyRole(HttpContext.Items, AyaType.QuoteItemTravel)) 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 QuoteItemTravel /// /// /// NoContent [HttpDelete("items/travels/{QuoteItemTravelId}")] public async Task DeleteQuoteItemTravel([FromRoute] long QuoteItemTravelId) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); QuoteBiz biz = QuoteBiz.GetBiz(ct, HttpContext); if (!Authorized.HasDeleteRole(HttpContext.Items, AyaType.QuoteItemTravel)) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!await biz.TravelDeleteAsync(QuoteItemTravelId)) return BadRequest(new ApiErrorResponse(biz.Errors)); return NoContent(); } #endregion QuoteItemTravel /* ██╗ ██╗███╗ ██╗██╗████████╗ ██║ ██║████╗ ██║██║╚══██╔══╝ ██║ ██║██╔██╗ ██║██║ ██║ ██║ ██║██║╚██╗██║██║ ██║ ╚██████╔╝██║ ╚████║██║ ██║ ╚═════╝ ╚═╝ ╚═══╝╚═╝ ╚═╝ */ #region QuoteItemUnit /// /// Create QuoteItemUnit /// /// QuoteItemUnit level only no descendants /// /// QuoteItemUnit object (no descendants) [HttpPost("items/units")] public async Task PostQuoteItemUnit([FromBody] QuoteItemUnit newObject, ApiVersion apiVersion) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); QuoteBiz biz = QuoteBiz.GetBiz(ct, HttpContext); if (!Authorized.HasCreateRole(HttpContext.Items, AyaType.QuoteItemUnit) || biz.UserIsRestrictedType) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); QuoteItemUnit o = await biz.UnitCreateAsync(newObject); if (o == null) return BadRequest(new ApiErrorResponse(biz.Errors)); else return CreatedAtAction(nameof(QuoteController.GetQuoteItemUnit), new { QuoteItemUnitId = o.Id, version = apiVersion.ToString() }, new ApiCreatedResponse(o)); } /// /// Get QuoteItemUnit object /// /// /// A single QuoteItemUnit [HttpGet("items/units/{QuoteItemUnitId}")] public async Task GetQuoteItemUnit([FromRoute] long QuoteItemUnitId) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); QuoteBiz biz = QuoteBiz.GetBiz(ct, HttpContext); if (!Authorized.HasReadFullRole(HttpContext.Items, AyaType.QuoteItemUnit) || biz.UserIsSubContractorRestricted) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); var o = await biz.UnitGetAsync(QuoteItemUnitId); if (o == null) return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); return Ok(ApiOkResponse.Response(o)); } /// /// Update QuoteItemUnit /// /// /// QuoteItemUnit - top level only, no descendants /// New concurrency token [HttpPut("items/units")] public async Task PutQuoteItemUnit([FromBody] QuoteItemUnit updatedObject) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); QuoteBiz biz = QuoteBiz.GetBiz(ct, HttpContext); if (!Authorized.HasModifyRole(HttpContext.Items, AyaType.QuoteItemUnit) || 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 QuoteItemUnit /// /// /// NoContent [HttpDelete("items/units/{QuoteItemUnitId}")] public async Task DeleteQuoteItemUnit([FromRoute] long QuoteItemUnitId) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); QuoteBiz biz = QuoteBiz.GetBiz(ct, HttpContext); if (!Authorized.HasDeleteRole(HttpContext.Items, AyaType.QuoteItemUnit) || biz.UserIsRestrictedType) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!await biz.UnitDeleteAsync(QuoteItemUnitId)) return BadRequest(new ApiErrorResponse(biz.Errors)); return NoContent(); } #endregion QuoteItemUnit //------------ }//eoc }//eons