< Summary

Information
Line coverage
0%
Covered lines: 0
Uncovered lines: 84
Coverable lines: 84
Total lines: 180
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 62
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%210%
GetBitrixData()0%812280%
GetBitrixDataForTransaction()0%1190340%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Areas/Studio2/Controllers/BitrixController.cs

#LineLine coverage
 1using Microsoft.AspNetCore.Authorization;
 2using Microsoft.AspNetCore.Mvc;
 3using OzonDomains.Models.BitrixModels;
 4using OzonOrdersWeb.Areas.Studio2.ViewModels.Bitrix;
 5using OzonRepositories.Data.Bitrix;
 6using OzonRepositories.Services;
 7using Services.DataServices;
 8
 9[Area("Studio2")]
 10[Authorize(Roles = "User,Admin")]
 11public class BitrixController : Controller
 12{
 13    private readonly IBitrixRepository _repository;
 14    private readonly ExcludedBitrixWarehouseDataServices _warehouseDataServices;
 15    private readonly IBitrixConnectionService _connectionService;
 16
 017    public BitrixController(IBitrixRepository repository,
 018        ExcludedBitrixWarehouseDataServices warehouseDataServices,
 019        IBitrixConnectionService connectionService)
 20    {
 021        _repository = repository;
 022        _warehouseDataServices = warehouseDataServices;
 023        _connectionService = connectionService;
 024    }
 25
 26    public async Task<IActionResult> GetBitrixData(string article)
 27    {
 28        // Проверяем доступность соединения с Bitrix (с кэшированием)
 029        if (!await _connectionService.IsConnectionAvailableAsync())
 30        {
 31            // Возвращаем пустой список вместо падения страницы
 032            return Ok(new List<BitrixModel>());
 33        }
 34
 35        try
 36        {
 037            List<BitrixModel> resultModels = new List<BitrixModel>();
 038            var articleInfo = _repository.GetBIblockElementPropertiesByArticle(article);
 039            if (articleInfo == null || !articleInfo.Any())
 40            {
 041                return Ok(new List<BitrixModel>());
 42            }
 43
 044            foreach (var item in articleInfo)
 45            {
 46                try
 47                {
 048                    BitrixModel model = new BitrixModel();
 049                    var productInfo = await _repository.GetBCatalogPriceByIblockElementId(item.IblockElementId);
 050                    if (productInfo == null)
 051                        continue;
 52
 053                    var group = await _repository.GetBCatalogGroupById(productInfo.CatalogGroupId);
 054                    if (group == null)
 055                        continue;
 56
 057                    model.Price = productInfo.Price;
 058                    model.Currency = productInfo.Currency;
 059                    model.Group = group.DisplayNameRu;
 60
 061                    var storesLinks = await _repository.GetBCatalogStoreProductsByProductId(productInfo.ProductId);
 062                    if (storesLinks == null || !storesLinks.Any())
 063                        continue;
 64
 065                    foreach (var store in storesLinks)
 66                    {
 67                        try
 68                        {
 069                            var stor = await _repository.GetBCatalogStoreById(store.StoreId);
 070                            if (stor == null || string.IsNullOrEmpty(stor.Title))
 071                                continue;
 072                            model.Stores.Add(stor.Title, store.Amount);
 073                        }
 074                        catch
 75                        {
 76                            // Пропускаем склад при ошибке, продолжаем обработку
 077                            continue;
 78                        }
 079                    }
 80
 081                    resultModels.Add(model);
 082                }
 083                catch
 84                {
 85                    // Пропускаем элемент при ошибке, продолжаем обработку
 086                    continue;
 87                }
 88            }
 89
 090            return Ok(resultModels);
 91        }
 092        catch (Exception)
 93        {
 94            // При ошибке возвращаем пустой список вместо падения страницы
 095            return Ok(new List<BitrixModel>());
 96        }
 097    }
 98
 99    public async Task<IActionResult> GetBitrixDataForTransaction(string article)
 100    {
 101        // Проверяем доступность соединения с Bitrix (с кэшированием)
 0102        if (!await _connectionService.IsConnectionAvailableAsync())
 103        {
 104            // Возвращаем пустой список вместо падения страницы
 0105            return Ok(new List<BitrixModel>());
 106        }
 107
 108        try
 109        {
 0110            List<BitrixModel> resultModels = new List<BitrixModel>();
 0111            var articleInfo = _repository.GetBIblockElementPropertiesByArticle(article);
 0112            if (articleInfo == null || !articleInfo.Any())
 113            {
 0114                return Ok(new List<BitrixModel>());
 115            }
 116
 0117            foreach (var item in articleInfo)
 118            {
 119                try
 120                {
 0121                    BitrixModel model = new BitrixModel();
 0122                    var productInfo = await _repository.GetBCatalogPriceByIblockElementId(item.IblockElementId);
 0123                    if (productInfo == null)
 0124                        continue;
 125
 0126                    var group = await _repository.GetBCatalogGroupById(productInfo.CatalogGroupId);
 0127                    if (group == null)
 0128                        continue;
 129
 0130                    model.Price = productInfo.Price;
 0131                    model.Currency = productInfo.Currency;
 0132                    model.Group = group.DisplayNameRu;
 133
 0134                    var storesLinks = await _repository.GetBCatalogStoreProductsByProductId(productInfo.ProductId);
 0135                    if (storesLinks == null || !storesLinks.Any())
 0136                        continue;
 137
 0138                    foreach (var store in storesLinks)
 139                    {
 140                        try
 141                        {
 0142                            var stor = await _repository.GetBCatalogStoreById(store.StoreId);
 0143                            if (stor == null || string.IsNullOrEmpty(stor.Title))
 0144                                continue;
 145
 0146                            if (!await _warehouseDataServices.ExistsByNameAsync(stor.Title))
 147                            {
 0148                                model.Stores.Add(stor.Title, store.Amount);
 149                            }
 0150                        }
 0151                        catch
 152                        {
 153                            // Пропускаем склад при ошибке, продолжаем обработку
 0154                            continue;
 155                        }
 0156                    }
 157
 0158                    if (model.Group == "Учетная цена")
 159                    {
 0160                        resultModels.Add(model);
 161                    }
 162
 0163                    resultModels.Add(model);
 0164                }
 0165                catch
 166                {
 167                    // Пропускаем элемент при ошибке, продолжаем обработку
 0168                    continue;
 169                }
 170            }
 171
 0172            return Ok(resultModels);
 173        }
 0174        catch (Exception)
 175        {
 176            // При ошибке возвращаем пустой список вместо падения страницы
 0177            return Ok(new List<BitrixModel>());
 178        }
 0179    }
 180}