< Summary

Class:SVETA.Api.Controllers.ArrivalsController
Assembly:SVETA.Api
File(s):/opt/dev/sveta_api_build/SVETA.Api/Controllers/ArrivalsController.cs
Covered lines:0
Uncovered lines:76
Coverable lines:76
Total lines:210
Line coverage:0% (0 of 76)
Covered branches:0
Total branches:36
Branch coverage:0% (0 of 36)

Metrics

MethodLine coverage Branch coverage
.ctor(...)0%100%
GetArrivals()0%0%
GetCountArrivals()0%0%
GetArrival()0%0%
ConfirmArrival()0%0%
CreateArrival()0%0%
getResponseParamUrl(...)0%0%

File(s)

/opt/dev/sveta_api_build/SVETA.Api/Controllers/ArrivalsController.cs

#LineLine coverage
 1using System;
 2using WinSolutions.Sveta.Common.Extensions;
 3using System.Collections.Generic;
 4using System.Threading.Tasks;
 5using Microsoft.AspNetCore.Authorization;
 6using Microsoft.AspNetCore.Mvc;
 7using Microsoft.Extensions.Logging;
 8using Newtonsoft.Json;
 9using SVETA.Api.Data.Domain;
 10using SVETA.Api.Data.DTO;
 11using SVETA.Api.Helpers;
 12using SVETA.Api.Helpers.Authorize;
 13using SVETA.Api.Services.Interfaces;
 14using Swashbuckle.AspNetCore.Annotations;
 15using WinSolutions.Sveta.Server.Data.DataModel.Entities;
 16using WinSolutions.Sveta.Server.Data.DataModel.Kinds;
 17using WinSolutions.Sveta.Common;
 18
 19namespace SVETA.Api.Controllers
 20{
 21    /// <summary>
 22    /// Контроллер работы с приходами
 23    /// </summary>
 24    [Authorize]
 25    [Route("api/v1/Arrivals")]
 26    [ApiController]
 27    class ArrivalsController : SvetaController
 28    {
 29        const string _routeUrl = "api/v1/Arrivals";
 30        private readonly IMovementWorker _movementWorker;
 31        private readonly ILogger<ArrivalsController> _logger;
 32        private readonly IAuthenticationService _authUserService;
 33        private readonly IMovementStatusRouter _movementStatusRouter;
 34
 35        public ArrivalsController(IMovementWorker movementWorker,
 36            IAuthenticationService authUserService,
 37            IMovementStatusRouter movementStatusRouter,
 038            ILogger<ArrivalsController> logger) : base(logger)
 039        {
 040            _movementWorker = movementWorker;
 041            _movementStatusRouter = movementStatusRouter;
 042            _authUserService = authUserService;
 043            _logger = logger;
 044        }
 45
 46        /// <summary>
 47        /// Возвращает список приходов
 48        /// </summary>
 49        /// <remarks>author: aabelentsov, oboligatov</remarks>
 50        /// <param name="id">Идентификатор документа (0 для всех)</param>
 51        /// <param name="documentNumber">Номер документа (null для всех)</param>
 52        /// <param name="customerId">Идентификтор заказчика (0 для всех)</param>
 53        /// <param name="receiverId">Идентификтор получателя (0 для всех)</param>
 54        /// <param name="supplierId">Идентификтор поставщика (0 для всех)</param>
 55        /// <param name="fromDate">Дата начала отбора (null для всех)</param>
 56        /// <param name="toDate">Дата окончания отбора (null для всех)</param>
 57        /// <param name="statusId">Статус документа - 0 для всех</param>
 58        /// <param name="stateId">Состояние документа - 0 для всех</param>
 59        /// <param name="page">Любое значение ниже нуля изменится на 1, Страница</param>
 60        /// <param name="limit">Любое значение ниже нуля изменится на 10, Количество для отбора - макс 100</param>
 61        /// <param name="sort">сортировка по умолчанию по id - id|desc,created_on,created_on|desc,state,state|desc,statu
 62        /// <returns></returns>
 63        [HttpGet]
 64        [SwaggerResponse(200, "Успешно", typeof(IEnumerable<MovementDTO>))]
 65        [SwaggerResponse(400, "Ошибка валидации входных параметров", typeof(ErrorDTO))]
 66        [SwaggerResponse(403, "Ошибка прав доступа", typeof(ErrorDTO))]
 67        [SwaggerResponse(500, "Ошибка на стороне сервера", typeof(ErrorDTO))]
 68        public async Task<IActionResult> GetArrivals(long id = 0, long customerId = 0, long receiverId = 0, long supplie
 69            DateTimeOffset fromDate = default, DateTimeOffset toDate = default, int stateId = 0, int statusId = 0, strin
 70            string sort = null, int page = 1, int limit = 10)
 071        {
 072            documentNumber = documentNumber.NormalizeName();
 73            try
 074            {
 075                if (!_authUserService.IsUserPlatform() && !_authUserService.IsUserRetailer())
 076                    throw new ForbidException("Нет прав");
 077                _logger.LogDebug($"Get list Arrival: customer {customerId}, receiver {receiverId}, supplier {supplierId}
 78
 079                page = page < 1 ? 1 : page;
 080                limit = limit < 1 ? 10 : limit;
 81
 082                var requestParam = new MovementParam(id, customerId, receiverId, supplierId, 0,fromDate.GetStartOfDate()
 083                    MovementKind.Arrival, stateId, statusId, documentNumber, page, limit, sort);
 84
 085                var movements = await _movementWorker.GetMovements(requestParam);
 086                var param = getResponseParamUrl(customerId, receiverId, supplierId, fromDate, toDate, stateId, statusId)
 087                var response = new BaseResponseDTO<MovementDTO>(_routeUrl, page, limit, movements.TotalFilteredCount, mo
 088                {
 089                    Data = movements.Result
 090                };
 091                return Ok(response);
 92            }
 093            catch (ArgumentException e)
 094            {
 095                _logger.LogError($"Error { e.Message} param: {customerId},{receiverId},{supplierId},{fromDate},{toDate},
 096                throw;
 97            }
 098        }
 99
 100
 101        /// <summary>
 102        /// Возвращает количество приходов
 103        /// </summary>
 104        /// <remarks>author: aabelentsov</remarks>
 105        /// <param name="customerId">идентификатор заказчика</param>
 106        /// <param name="receiverId">идентификатор получателя</param>
 107        /// <param name="supplierId">идентификатор поставщика</param>
 108        /// <param name="fromDate">дата с которой начинать поиск</param>
 109        /// <param name="toDate">дата окончания поиска</param>
 110        /// <param name="stateId">состояние прихода</param>
 111        /// <param name="statusId">статус прихода</param>
 112        /// <returns></returns>
 113        [HttpGet("Count")]
 114        [SwaggerResponse(200, "Успешно", typeof(CountDTO))]
 115        [SwaggerResponse(400, "Ошибка валидации входных параметров", typeof(ErrorDTO))]
 116        [SwaggerResponse(403, "Ошибка прав доступа", typeof(ErrorDTO))]
 117        [SwaggerResponse(500, "Ошибка на стороне сервера", typeof(ErrorDTO))]
 118        public async Task<IActionResult> GetCountArrivals(long customerId, long receiverId, long supplierId,  int stateI
 0119        {
 0120            _logger.LogDebug($"Get Arrival count");
 0121            if (!_authUserService.IsUserPlatform() && !_authUserService.IsUserRetailer())
 0122                throw new ForbidException("Нет прав");
 123
 0124            var requestParam = new MovementParam(customerId, receiverId, supplierId,0, fromDate.GetStartOfDate(), toDate
 0125                MovementKind.Arrival, stateId, statusId, null);
 0126            return Ok(new CountDTO(await _movementWorker.GetCountMovement(requestParam)));
 0127        }
 128
 129        /// <summary>
 130        /// Возвращает приход по id
 131        /// </summary>
 132        /// <remarks>author: aabelentsov</remarks>
 133        /// <param name="id">Идентификатор документа</param>
 134        /// <returns></returns>
 135        [HttpGet("{id}")]
 136        [SwaggerResponse(200, "Успешно", typeof(MovementDTO))]
 137        [SwaggerResponse(403, "Ошибка прав доступа", typeof(ErrorDTO))]
 138        [SwaggerResponse(404, "Не найден документ", typeof(ErrorDTO))]
 139        [SwaggerResponse(500, "Ошибка на стороне сервера", typeof(ErrorDTO))]
 140        public async Task<IActionResult> GetArrival(long id)
 0141        {
 0142            if (!_authUserService.IsUserPlatform() && !_authUserService.IsUserRetailer())
 0143                throw new ForbidException("Нет прав");
 0144            MovementDTO shipment = await _movementWorker.GetMovement(id, MovementKind.Arrival);
 0145            _logger.LogDebug($"Get Arrival by id {id}");
 0146            return Ok(shipment);
 0147        }
 148        /// <summary>
 149        /// Подтверждение прихода
 150        /// </summary>
 151        /// <remarks>author: aabelentsov</remarks>
 152        /// <param name="id">Идентификатор прихода</param>
 153        /// <returns></returns>
 154        [HttpPut("{id}/Confirm")]
 155        [SwaggerResponse(204, "Успешно", typeof(NoContentResult))]
 156        [SwaggerResponse(400, "Документ невозможно подтвердить", typeof(ErrorDTO))]
 157        [SwaggerResponse(403, "Ошибка прав доступа", typeof(ErrorDTO))]
 158        [SwaggerResponse(404, "Не найден документ", typeof(ErrorDTO))]
 159        [SwaggerResponse(500, "Ошибка на стороне сервера", typeof(ErrorDTO))]
 160        public async Task<IActionResult> ConfirmArrival(long id)
 0161        {
 0162            if (!User.IsInRole(Role.ShopOwner) || !User.IsInRole(Role.ShopMerchandiser))
 0163                throw new ForbidException("Нет прав");
 0164            _logger.LogDebug($"Update ConfirmArrival #{id}");
 0165            await _movementStatusRouter.SetNextStatus(id);
 0166            return NoContent();
 0167        }
 168        /// <summary>
 169        /// Создание прихода на основании отгрузки от поставщика
 170        /// </summary>
 171        /// <remarks>author: aabelentsov</remarks>
 172        /// <param name="id">Идентификатор отгрузки</param>
 173        /// <returns></returns>
 174        [HttpPost("{id}")]
 175        [SwaggerResponse(201, "Успешно", typeof(MovementDTO))]
 176        [SwaggerResponse(400, "Документ невозможно создать", typeof(ErrorDTO))]
 177        [SwaggerResponse(403, "Ошибка прав доступа", typeof(ErrorDTO))]
 178        [SwaggerResponse(404, "Не найден документ", typeof(ErrorDTO))]
 179        [SwaggerResponse(500, "Ошибка на стороне сервера", typeof(ErrorDTO))]
 180        public async Task<IActionResult> CreateArrival(long id)
 0181        {
 0182            if (!User.IsInRole(Role.ShopOwner))
 0183                throw new ForbidException("Нет прав");
 0184            MovementDTO mDto = await _movementWorker.CreateMovementOnBase(id, MovementKind.Arrival);
 0185            _logger.LogDebug($"Create ConfirmArrival  {JsonConvert.SerializeObject(mDto)}");
 0186            return CreatedAtAction("GetArrival", new { id = mDto.Id }, mDto);
 0187        }
 188        string getResponseParamUrl(long customerId, long receiverId, long supplierId, DateTimeOffset fromDate, DateTimeO
 0189        {
 0190            var param = "";
 0191            if (customerId != 0)
 0192                param += $"customerId={customerId}";
 0193            if (receiverId != 0)
 0194                param += $"&receiverId={receiverId}";
 0195            if (supplierId != 0)
 0196                param += $"&supplierId={supplierId}";
 197           // if (fromDate.HasValue)
 0198                param += $"&fromDate={fromDate.ToISOString()}";
 199           // if (toDate.HasValue)
 0200                param += $"&toDate={toDate.ToISOString()}";
 0201            if (stateId != 0)
 0202                param += $"&stateId={stateId}";
 0203            if (statusId != 0)
 0204                param += $"&statusId={statusId}";
 0205            if (param.StartsWith("&"))
 0206                param = param.Trim(new char[] { '&' });
 0207            return param;
 0208        }
 209    }
 210}