| | | 1 | | using WinSolutions.Sveta.Common.Extensions; |
| | | 2 | | using AutoMapper; |
| | | 3 | | using Microsoft.AspNetCore.Authorization; |
| | | 4 | | using Microsoft.AspNetCore.Mvc; |
| | | 5 | | using Microsoft.Extensions.Logging; |
| | | 6 | | using SVETA.Api.Data.DTO; |
| | | 7 | | using SVETA.Api.Data.DTO.AddressDTO; |
| | | 8 | | using SVETA.Api.Data.DTO.BankAccount; |
| | | 9 | | using SVETA.Api.Data.DTO.ContragentDTO; |
| | | 10 | | using SVETA.Api.Data.DTO.TaxSystem; |
| | | 11 | | using SVETA.Api.Helpers.Authorize; |
| | | 12 | | using Swashbuckle.AspNetCore.Annotations; |
| | | 13 | | using System; |
| | | 14 | | using System.Collections.Generic; |
| | | 15 | | using System.Threading.Tasks; |
| | | 16 | | using WinSolutions.Sveta.Common; |
| | | 17 | | using WinSolutions.Sveta.Server.Data.DataModel.Entities; |
| | | 18 | | using WinSolutions.Sveta.Server.Data.DataModel.Kinds; |
| | | 19 | | using WinSolutions.Sveta.Server.Services.Interfaces; |
| | | 20 | | using System.Linq; |
| | | 21 | | |
| | | 22 | | namespace SVETA.Api.Controllers |
| | | 23 | | { |
| | | 24 | | [Authorize] |
| | | 25 | | [Route("api/v1/Contragents")] |
| | | 26 | | [ApiController] |
| | | 27 | | public class ContragentController : SvetaController |
| | | 28 | | { |
| | | 29 | | readonly IContragentService _contragentService; |
| | | 30 | | readonly IAddressService _addressService; |
| | | 31 | | readonly ISupplyContractService _contractService; |
| | | 32 | | readonly IDirectoriesService _dirService; |
| | | 33 | | private readonly ITaxSystemService _taxSystemService; |
| | | 34 | | private readonly IEventService _eventService; |
| | | 35 | | readonly ILogger<ContragentController> _logger; |
| | | 36 | | readonly IUserService _userService; |
| | | 37 | | private readonly IAuthenticationService _authUserService; |
| | | 38 | | public ContragentController( |
| | | 39 | | IContragentService contragentService, |
| | | 40 | | IAddressService addressService, |
| | | 41 | | IDirectoriesService dirService, |
| | | 42 | | ITaxSystemService taxSystemService, |
| | | 43 | | IEventService eventService, |
| | | 44 | | IAuthenticationService authUserService, |
| | | 45 | | ISupplyContractService contractService, |
| | | 46 | | IUserService userService, |
| | 0 | 47 | | ILogger<ContragentController> logger) : base(logger) |
| | 0 | 48 | | { |
| | 0 | 49 | | _authUserService = authUserService; |
| | 0 | 50 | | _dirService = dirService; |
| | 0 | 51 | | _contragentService = contragentService; |
| | 0 | 52 | | _addressService = addressService; |
| | 0 | 53 | | _taxSystemService = taxSystemService; |
| | 0 | 54 | | _logger = logger; |
| | 0 | 55 | | _contractService = contractService; |
| | 0 | 56 | | _eventService = eventService; |
| | 0 | 57 | | _userService = userService; |
| | 0 | 58 | | } |
| | | 59 | | |
| | | 60 | | /// <summary> |
| | | 61 | | /// Возвращает список контрагентов с полным набором полей |
| | | 62 | | /// </summary> |
| | | 63 | | /// <remarks>author Obo\IPod\IPod</remarks> |
| | | 64 | | /// <param name="page">Любое значение ниже нуля изменится на 1, пейджинг: номер страницы</param> |
| | | 65 | | /// <param name="limit">Любое значение ниже нуля изменится на 10, пейджинг: размер страницы. ЕСЛИ значение равно |
| | | 66 | | /// <param name="filter">фильтр по значимым полям FullName / ShortName</param> |
| | | 67 | | /// <param name="sort">сортировка по умолчанию по id - id|desc, created_on,created_on|desc, state,state|desc, st |
| | | 68 | | /// <returns>List of contragents</returns> |
| | | 69 | | [HttpGet("")] |
| | | 70 | | [SwaggerResponse(200, "Успешно", typeof(List<ContragentResponseDTO>))] |
| | | 71 | | [SwaggerResponse(500, "Ошибка на стороне сервера", typeof(ErrorDTO))] |
| | | 72 | | [Authorize(Roles = Role.SystemAdmin + "," + Role.SystemOperator + "," + Role.ShopOwner + "," + Role.SupplierOwne |
| | | 73 | | + "," + Role.ShopSeller + "," + Role.SupplierSpec)] |
| | | 74 | | public async Task<IActionResult> GetContragents(int page = 1, int? limit = null, string filter = null, string so |
| | 0 | 75 | | { |
| | 0 | 76 | | filter = filter.NormalizeName(); |
| | 0 | 77 | | if (limit == null) |
| | 0 | 78 | | page = 1; |
| | 0 | 79 | | else if (page < 1 || limit < 1) |
| | 0 | 80 | | { |
| | 0 | 81 | | page = page < 1 ? 1 : page; |
| | 0 | 82 | | limit = limit < 1 ? 10 : limit; |
| | 0 | 83 | | } |
| | 0 | 84 | | var result = await _contragentService.GetContragents(page - 1, limit, filter, sort); |
| | 0 | 85 | | return Ok(ToDtoMapper().Map<List<ContragentResponseDTO>>(result)); |
| | 0 | 86 | | } |
| | | 87 | | /// <summary> |
| | | 88 | | /// Возвращает список контрагентов, отфильтрованных по типу Поставщик |
| | | 89 | | /// </summary> |
| | | 90 | | /// <remarks>author Obo\IPod\IPod</remarks> |
| | | 91 | | /// <param name="page">Любое значение ниже нуля изменится на 1, Страница</param> |
| | | 92 | | /// <param name="limit">Любое значение ниже нуля изменится на 10, Количество для отбора</param> |
| | | 93 | | /// <param name="filter">фильтр по значимым полям FullName / ShortName</param> |
| | | 94 | | /// <param name="sort">сортировка по умолчанию по id - id|desc, created_on,created_on|desc, state,state|desc, st |
| | | 95 | | /// <returns>Список контрагентов</returns> |
| | | 96 | | [HttpGet("Distributors")] |
| | | 97 | | [SwaggerResponse(200, "Успешно", typeof(List<ContragentShortDTO>))] |
| | | 98 | | [SwaggerResponse(500, "Ошибка на стороне сервера", typeof(ErrorDTO))] |
| | | 99 | | [Authorize(Roles = Role.SystemAdmin + "," + Role.SystemOperator + "," + Role.ShopOwner + "," + Role.SupplierOwne |
| | | 100 | | + "," + Role.ShopSeller + "," + Role.SupplierSpec)] |
| | | 101 | | public async Task<IActionResult> GetDistributorContragents(int page = 1, int limit = 10, string filter = null, s |
| | 0 | 102 | | { |
| | 0 | 103 | | filter = filter.NormalizeName(); |
| | 0 | 104 | | if (_authUserService.IsUserRetailer() || _authUserService.IsUserManufacturer()) |
| | 0 | 105 | | return ForbidResult("Нет прав на выполнение этого действия"); |
| | 0 | 106 | | page = page < 1 ? 1 : page; |
| | 0 | 107 | | limit = limit < 1 ? 10 : limit; |
| | 0 | 108 | | var contragents = await _contragentService.GetContragentsByKind(page - 1, limit, ContragentKind.Wholesaler, |
| | | 109 | | |
| | 0 | 110 | | return Ok(ToShortDtoMapper().Map<List<ContragentShortDTO>>(contragents)); |
| | 0 | 111 | | } |
| | | 112 | | |
| | | 113 | | /// <summary> |
| | | 114 | | /// Выводит список уникальных КА поставщиков, которые встречаются в заявках/отгрузках для текущего КА. |
| | | 115 | | /// </summary> |
| | | 116 | | /// <param name="movementType">тип документов, для которых используется фильтр. Если заявки, то передаем orders, |
| | | 117 | | /// <remarks>author i.rebenok</remarks> |
| | | 118 | | [HttpGet("ListByMovementSupplier")] |
| | | 119 | | [SwaggerResponse(200, "Успешно удалено", typeof(IdNameDTO))] |
| | | 120 | | [SwaggerResponse(404, "Нет записей", typeof(ErrorDTO))] |
| | | 121 | | [SwaggerResponse(403, "Не разрешено для этого пользователя", typeof(ErrorDTO))] |
| | | 122 | | [SwaggerResponse(500, "Ошибка на стороне сервера", typeof(ErrorDTO))] |
| | | 123 | | [Authorize] |
| | | 124 | | public async Task<IActionResult> GetFilterListByMovementSupplier(string movementType = "orders") |
| | | 125 | | { |
| | | 126 | | var contragentId = _authUserService.IsUserPlatform() ? 0 : _authUserService.ContragentId; |
| | | 127 | | var result = await _contragentService.GetFilteredListByMovementSupplier(contragentId, movementType == "order |
| | | 128 | | return Ok(result.Select(x => new IdNameDTO(x.Id, x.ShortName))); |
| | | 129 | | } |
| | | 130 | | |
| | | 131 | | /// <summary> |
| | | 132 | | /// Выводит список уникальных КА покупателей, которые встречаются в заявках/отгрузках для текущего КА. |
| | | 133 | | /// </summary> |
| | | 134 | | /// <param name="movementType">тип документов, для которых используется фильтр. Если заявки, то передаем orders, |
| | | 135 | | /// <remarks>author i.rebenok</remarks> |
| | | 136 | | [HttpGet("ListByMovementCustomer")] |
| | | 137 | | [SwaggerResponse(200, "Успешно удалено", typeof(IdNameDTO))] |
| | | 138 | | [SwaggerResponse(404, "Нет записей", typeof(ErrorDTO))] |
| | | 139 | | [SwaggerResponse(403, "Не разрешено для этого пользователя", typeof(ErrorDTO))] |
| | | 140 | | [SwaggerResponse(500, "Ошибка на стороне сервера", typeof(ErrorDTO))] |
| | | 141 | | [Authorize] |
| | | 142 | | public async Task<IActionResult> GetFilterListByMovementCustomer(string movementType = "orders") |
| | | 143 | | { |
| | | 144 | | var contragentId = _authUserService.IsUserPlatform() ? 0 : _authUserService.ContragentId; |
| | | 145 | | var result = await _contragentService.GetFilteredListByMovementCustomer(contragentId, movementType == "order |
| | | 146 | | return Ok(result.Select(x => new IdNameDTO(x.Id, x.ShortName))); |
| | | 147 | | } |
| | | 148 | | |
| | | 149 | | /// <summary> |
| | | 150 | | /// Возвращает список контрагентов, отфильтрованных по типу Розница |
| | | 151 | | /// </summary> |
| | | 152 | | /// <remarks>author Obo\IPod\IPod</remarks> |
| | | 153 | | /// <param name="page">Любое значение ниже нуля изменится на 1, Страница</param> |
| | | 154 | | /// <param name="limit">Любое значение ниже нуля изменится на 10, Количество для отбора</param> |
| | | 155 | | /// <param name="filter">фильтр по значимым полям FullName / ShortName</param> |
| | | 156 | | /// <param name="sort">сортировка по умолчанию по id - id|desc, created_on,created_on|desc, state,state|desc, st |
| | | 157 | | /// <returns>Список розничных контрагентов </returns> |
| | | 158 | | [HttpGet("Retails")] |
| | | 159 | | [SwaggerResponse(200, "Успешно", typeof(IEnumerable<ClusterDTO_GET>))] |
| | | 160 | | [SwaggerResponse(500, "Ошибка на стороне сервера", typeof(ErrorDTO))] |
| | | 161 | | [Authorize(Roles = Role.SystemAdmin + "," + Role.SystemOperator + "," + Role.ShopOwner + "," + Role.SupplierOwne |
| | | 162 | | + "," + Role.ShopSeller + "," + Role.SupplierSpec)] |
| | | 163 | | public async Task<IActionResult> GetRetailContragents(int page = 1, int limit = 10, string filter = null, string |
| | 0 | 164 | | { |
| | 0 | 165 | | filter = filter.NormalizeName(); |
| | 0 | 166 | | page = page < 1 ? 1 : page; |
| | 0 | 167 | | limit = limit < 1 ? 10 : limit; |
| | 0 | 168 | | var contragents = await _contragentService.GetContragentsByKind(page - 1, limit, ContragentKind.Retailer, fi |
| | 0 | 169 | | return Ok(ToShortDtoMapper().Map<List<ContragentShortDTO>>(contragents)); |
| | 0 | 170 | | } |
| | | 171 | | |
| | | 172 | | /// <summary> |
| | | 173 | | /// Возвращает список контрагентов, отфильтрованных по типу Производитель |
| | | 174 | | /// </summary> |
| | | 175 | | /// <remarks>author Obo\IPod\IPod</remarks> |
| | | 176 | | /// <param name="page">Любое значение ниже нуля изменится на 1, Страница</param> |
| | | 177 | | /// <param name="limit">Любое значение ниже нуля изменится на 10, Количество для отбора</param> |
| | | 178 | | /// <param name="filter">фильтр по значимым полям FullName / ShortName</param> |
| | | 179 | | /// <param name="sort">сортировка по умолчанию по id - id|desc, created_on,created_on|desc, state,state|desc, st |
| | | 180 | | /// <returns>Список контрагентов</returns> |
| | | 181 | | [HttpGet("Manufacturers")] |
| | | 182 | | [SwaggerResponse(200, "Успешно", typeof(List<ContragentShortDTO>))] |
| | | 183 | | [SwaggerResponse(500, "Ошибка на стороне сервера", typeof(ErrorDTO))] |
| | | 184 | | [Authorize(Roles = Role.SystemAdmin + "," + Role.SystemOperator + "," + Role.ShopOwner + "," + Role.SupplierOwne |
| | | 185 | | + "," + Role.ShopSeller + "," + Role.SupplierSpec)] |
| | | 186 | | public async Task<IActionResult> GetManufacturerContragents(int page = 1, int limit = 10, string filter = null, |
| | 0 | 187 | | { |
| | 0 | 188 | | filter = filter.NormalizeName(); |
| | 0 | 189 | | if (_authUserService.IsUserRetailer() || _authUserService.IsUserWholesaler()) |
| | 0 | 190 | | return ForbidResult("Нет прав на выполнение этого действия"); |
| | 0 | 191 | | page = page < 1 ? 1 : page; |
| | 0 | 192 | | limit = limit < 1 ? 10 : limit; |
| | 0 | 193 | | var contragents = await _contragentService.GetContragentsByKind(page - 1, limit, ContragentKind.Manufacturer |
| | 0 | 194 | | return Ok(ToShortDtoMapper().Map<List<ContragentShortDTO>>(contragents)); |
| | 0 | 195 | | } |
| | | 196 | | |
| | | 197 | | /// <summary> |
| | | 198 | | /// Возвращает список контрагентов-партнеров (партнерство определяется наличие контракта) |
| | | 199 | | /// </summary> |
| | | 200 | | /// <remarks>author i.rebenok</remarks> |
| | | 201 | | /// <param name="id">id контрагента</param> |
| | | 202 | | /// <param name="activeOnly">true - искать только по активным контрактам, false - по всем. По умолчанию true</pa |
| | | 203 | | /// <param name="filter">Поиск по короткому имени контрагента. Необязательное поле</param> |
| | | 204 | | /// <returns>Список контрагентов</returns> |
| | | 205 | | [HttpGet("{id}/Partners")] |
| | | 206 | | [SwaggerResponse(200, "Успешно", typeof(List<ContragentPartners>))] |
| | | 207 | | [SwaggerResponse(500, "Ошибка на стороне сервера", typeof(ErrorDTO))] |
| | | 208 | | [Authorize(Roles = Role.SystemAdmin + "," + Role.SystemOperator + "," + Role.ShopOwner + "," + Role.SupplierOwne |
| | | 209 | | + "," + Role.ShopSeller + "," + Role.SupplierSpec)] |
| | | 210 | | public async Task<IActionResult> GetPartners([SwaggerParameter(Required = true)] long id, bool activeOnly = true |
| | | 211 | | { |
| | | 212 | | filter = filter.NormalizeName(); |
| | | 213 | | if (!_authUserService.IsUserPlatform() && _authUserService.ContragentId != id) |
| | | 214 | | return ForbidResult("Нет прав на выполнение этого действия"); |
| | | 215 | | var contracts = await _contractService.GetSupplyContractsByContragent(id, activeOnly, filter); |
| | | 216 | | |
| | | 217 | | List<ContragentPartners> partners = new List<ContragentPartners>() { }; |
| | | 218 | | //находим все котнракты где учатсвует переданный контрагент. и выводим его партнеров |
| | | 219 | | foreach (var item in contracts) |
| | | 220 | | { |
| | 0 | 221 | | if (item.Seller.Id != id && !partners.Exists(x=> x.ContragentId == item.Seller.Id)) partners.Add(new Con |
| | 0 | 222 | | if (item.Buyer.Id != id && !partners.Exists(x => x.ContragentId == item.Buyer.Id)) partners.Add(new Cont |
| | | 223 | | } |
| | | 224 | | return Ok(partners); |
| | | 225 | | } |
| | | 226 | | |
| | | 227 | | /// <summary> |
| | | 228 | | /// Возвращет контрагента по ID с полным набором полей |
| | | 229 | | /// </summary> |
| | | 230 | | /// <remarks>author Obo\IPod\IPod</remarks> |
| | | 231 | | /// <param name="contragentId">id записи контрагента</param> |
| | | 232 | | /// <returns></returns> |
| | | 233 | | [HttpGet("{contragentId}")] |
| | | 234 | | [SwaggerResponse(200, "Успешно", typeof(ContragentResponseDTO))] |
| | | 235 | | [SwaggerResponse(404, "Контрагент с таким id не найден", typeof(ErrorDTO))] |
| | | 236 | | [SwaggerResponse(500, "Ошибка на стороне сервера", typeof(ErrorDTO))] |
| | | 237 | | [Authorize(Roles = Role.SystemAdmin + "," + Role.SystemOperator + "," + Role.ShopOwner + "," + Role.SupplierOwne |
| | | 238 | | + "," + Role.ShopSeller + "," + Role.SupplierSpec)] |
| | | 239 | | public async Task<IActionResult> GetContragent(long contragentId) |
| | 0 | 240 | | { |
| | 0 | 241 | | if (!_authUserService.IsUserPlatform() && _authUserService.ContragentId != contragentId) |
| | 0 | 242 | | return ForbidResult("Нет прав на выполнение этого действия"); |
| | 0 | 243 | | Contragent contragent = await _contragentService.GetContragent(contragentId); |
| | 0 | 244 | | if (contragent == null) |
| | 0 | 245 | | { |
| | 0 | 246 | | return NotFoundResult($"Контрагент с id={contragentId} не найден"); |
| | | 247 | | } |
| | 0 | 248 | | return Ok(ToDtoMapper().Map<ContragentResponseDTO>(contragent)); |
| | 0 | 249 | | } |
| | | 250 | | /// <summary> |
| | | 251 | | /// Возвращает контрагента по ID с сокращенным набором полей |
| | | 252 | | /// </summary> |
| | | 253 | | /// <remarks>author Obo\IPod\IPod</remarks> |
| | | 254 | | /// <param name="contragentId">id записи контрагента</param> |
| | | 255 | | /// <returns></returns> |
| | | 256 | | [HttpGet("Shorts/{contragentId}")] |
| | | 257 | | [SwaggerResponse(200, "Успешно", typeof(ContragentShortDTO))] |
| | | 258 | | [SwaggerResponse(404, "Контрагент с таким id не найден", typeof(ErrorDTO))] |
| | | 259 | | [SwaggerResponse(500, "Ошибка на стороне сервера", typeof(ErrorDTO))] |
| | | 260 | | [Authorize(Roles = Role.SystemAdmin + "," + Role.SystemOperator + "," + Role.ShopOwner + "," + Role.SupplierOwne |
| | | 261 | | + "," + Role.ShopSeller + "," + Role.SupplierSpec)] |
| | | 262 | | public async Task<IActionResult> GetShortContragent(long contragentId) |
| | 0 | 263 | | { |
| | 0 | 264 | | if (!_authUserService.IsUserPlatform() && _authUserService.ContragentId != contragentId && !_authUserService |
| | 0 | 265 | | return ForbidResult("Нет прав на выполнение этого действия"); |
| | 0 | 266 | | _logger.LogDebug("Get contragent with short DTO"); |
| | 0 | 267 | | Contragent contragent = await _contragentService.GetContragent(contragentId); |
| | 0 | 268 | | if (contragent != null) |
| | 0 | 269 | | { |
| | 0 | 270 | | IMapper mapper = ToShortDtoMapper(); |
| | 0 | 271 | | return Ok(mapper.Map<Contragent, ContragentShortDTO>(contragent)); |
| | | 272 | | } |
| | 0 | 273 | | return NotFoundResult($"Контрагент с id={contragentId} не найден"); |
| | 0 | 274 | | } |
| | | 275 | | |
| | | 276 | | /// <summary> |
| | | 277 | | /// Возвращает список контрагентов с сокращенным набором полей с пагинацией и фильтрами |
| | | 278 | | /// </summary> |
| | | 279 | | /// <remarks>author Obo\IPod</remarks> |
| | | 280 | | /// <param name="page">Любое значение ниже нуля изменится на 1, </param> |
| | | 281 | | /// <param name="limit">Любое значение ниже нуля изменится на 10, </param> |
| | | 282 | | /// <param name="filter">фильтр по значимым полям FullName / ShortName</param> |
| | | 283 | | /// <param name="sort">сортировка по умолчанию по id - id|desc, created_on,created_on|desc, state,state|desc, st |
| | | 284 | | /// <returns>List of ContragentShortDTO</returns> |
| | | 285 | | [HttpGet("Shorts")] |
| | | 286 | | [SwaggerResponse(200, "Успешно", typeof(List<ContragentShortDTO>))] |
| | | 287 | | [SwaggerResponse(500, "Ошибка на стороне сервера", typeof(ErrorDTO))] |
| | | 288 | | [Authorize(Roles = Role.SystemAdmin + "," + Role.SystemOperator + "," + Role.ShopOwner + "," + Role.SupplierOwne |
| | | 289 | | + "," + Role.ShopSeller + "," + Role.SupplierSpec)] |
| | | 290 | | public async Task<IActionResult> GetShortContragents(int page = 1, int limit = 10, string filter = null, string |
| | 0 | 291 | | { |
| | 0 | 292 | | filter = filter.NormalizeName(); |
| | 0 | 293 | | page = page < 1 ? 1 : page; |
| | 0 | 294 | | limit = limit < 1 ? 10 : limit; |
| | 0 | 295 | | _logger.LogDebug("Get contragents list with short DTO"); |
| | 0 | 296 | | List<Contragent> contragents = null; |
| | 0 | 297 | | if (_authUserService.IsUserPlatform()) |
| | 0 | 298 | | contragents = await _contragentService.GetContragents(page - 1, limit, filter, sort); |
| | | 299 | | else |
| | 0 | 300 | | contragents = await _contragentService.GetShortContragents(page - 1, limit, filter, sort, User.IsInRole( |
| | 0 | 301 | | return Ok(ToShortDtoMapper().Map<List<ContragentShortDTO>>(contragents)); |
| | 0 | 302 | | } |
| | | 303 | | |
| | | 304 | | private static IMapper ToShortDtoMapper() |
| | 0 | 305 | | { |
| | 0 | 306 | | var config = new MapperConfiguration(cfg => |
| | 0 | 307 | | { |
| | 0 | 308 | | cfg.CreateMap<Contragent, ContragentShortDTO>() |
| | 0 | 309 | | .ForMember(d => d.KindId, e => e.MapFrom(s => (int)s.ContragentsKind.Id)); |
| | 0 | 310 | | }); |
| | 0 | 311 | | IMapper mapper = config.CreateMapper(); |
| | 0 | 312 | | return mapper; |
| | 0 | 313 | | } |
| | | 314 | | |
| | | 315 | | private static IMapper ToDtoMapper() |
| | 0 | 316 | | { |
| | 0 | 317 | | var config = new MapperConfiguration(cfg => |
| | 0 | 318 | | { |
| | 0 | 319 | | cfg.CreateMap<Contragent, ContragentResponseDTO>() |
| | 0 | 320 | | .ForMember(d => d.KindId, e => e.MapFrom(s => (int)s.ContragentsKind.Id)); |
| | 0 | 321 | | cfg.CreateMap<Address, AddressRequestDTO>(); |
| | 0 | 322 | | cfg.CreateMap<TaxSystem, TaxSystemResponseShortDTO>(); |
| | 0 | 323 | | cfg.CreateMap<BankAccount, BankAccountResponseDTO>(); |
| | 0 | 324 | | }); |
| | 0 | 325 | | IMapper mapper = config.CreateMapper(); |
| | 0 | 326 | | return mapper; |
| | 0 | 327 | | } |
| | | 328 | | |
| | | 329 | | } |
| | | 330 | | } |