Files
continuousimprovement/src/Strata.ContinuousImprovement.Api/Controllers/StrategicGeneralLedgerController.cs
T

103 lines
5.3 KiB
C#

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Strata.ContinuousImprovement.Biz.StrategicOpportunities;
using Strata.ContinuousImprovement.Biz.StrategicOpportunities.Dtos;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
namespace Strata.ContinuousImprovement.Api.Controllers
{
[ApiController]
[ApiVersion("1.0")]
[Route("api/v{api-version:apiVersion}/[controller]")]
public class StrategicGeneralLedgerController : ControllerBase
{
private readonly IStrategicOpportunityService _strategicOpportunityService;
private readonly IStrategicGLOpportunityDetailService _strategicGLOpportunityDetailService;
public StrategicGeneralLedgerController(IStrategicOpportunityService strategicOpportunityService, IStrategicGLOpportunityDetailService strategicGLOpportunityDetailService)
{
_strategicOpportunityService = strategicOpportunityService;
_strategicGLOpportunityDetailService = strategicGLOpportunityDetailService;
}
[HttpGet("{opportunityId}/[action]")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
[ProducesDefaultResponseType]
public async Task<ActionResult<StrategicOpportunityGLEditData>> GetOpportunityGL(long opportunityId, CancellationToken cancellationToken)
{
var result = await _strategicOpportunityService.GetStrategicOpportunityGL(opportunityId, cancellationToken);
return result != null ? Ok(result) : NotFound();
}
[HttpPost]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
public async Task<ActionResult<long>> CreateOpportunityGeneralLedger([FromBody] StrategicOpportunityGLDto opportunity, CancellationToken cancellationToken)
{
var opportunityId = await _strategicOpportunityService.CreateOpportunityGeneralLedgerAsync(opportunity, cancellationToken);
if (opportunityId == 0) return BadRequest();
return Ok(opportunityId);
}
[HttpPut("{opportunityId}")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
[ProducesDefaultResponseType]
public async Task<ActionResult<bool>> UpdateOpportunityGeneralLedger(long opportunityId, [FromBody] StrategicOpportunityGLUpdateDto opportunity, CancellationToken cancellationToken)
{
var strategicOpportunityId = await _strategicOpportunityService.UpdateOpportunityGeneralLedger(opportunityId, opportunity, cancellationToken);
return strategicOpportunityId != 0 ? Ok(true) : NotFound();
}
[HttpDelete("{opportunityId}")]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
[ProducesDefaultResponseType]
public async Task<IActionResult> DeleteOpportunityGeneralLedger(long opportunityId, CancellationToken cancellationToken)
{
if (!await _strategicOpportunityService.ContainsGLAsync(opportunityId, cancellationToken))
return NotFound();
var isDeleted = await _strategicOpportunityService.DeleteGeneralLedgerOpportunityAsync(opportunityId, cancellationToken);
return isDeleted ? NoContent() : BadRequest();
}
[HttpPost("{opportunityId}/detail")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
[ProducesDefaultResponseType]
public async Task<ActionResult<StrategicOpportunityGLDetailData>> GetGLDetail(long opportunityId, [FromBody] string[] dimensions, CancellationToken cancellationToken)
{
var result = await _strategicGLOpportunityDetailService.GetStrategicOpportunityGLDetailData(opportunityId, false, dimensions, cancellationToken);
return result != null ? Ok(result) : NotFound();
}
[HttpPost("{opportunityId}/tracking-detail")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
[ProducesDefaultResponseType]
public async Task<ActionResult<StrategicOpportunityGLDetailData>> GetGLTrackingDetail(long opportunityId, [FromBody] string[] dimensions, CancellationToken cancellationToken)
{
var result = await _strategicGLOpportunityDetailService.GetStrategicOpportunityGLDetailData(opportunityId, true, dimensions, cancellationToken);
return result != null ? Ok(result) : NotFound();
}
[HttpPut("{opportunityId}/details")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[ProducesDefaultResponseType]
public async Task<ActionResult> UpdateGLDetails(long opportunityId, [FromBody] UpdateGLDetailsDto dto, CancellationToken cancellationToken)
{
if (dto == null || dto.Adjustments?.Any() != true || dto.Rows?.Any() != true)
return BadRequest();
await _strategicGLOpportunityDetailService.UpdateStrategicOpportunityGLDetailsData(opportunityId, dto.Adjustments, dto.Rows, cancellationToken);
return Ok();
}
}
}