< Summary

Information
Class: Services.BitrixStockServices.BitrixStockIndexFilterRules
Assembly: Services
File(s): /home/runner/work/Studio2Prod/Studio2Prod/AppRepository/BitrixStockServices/BitrixStockIndexFilterRules.cs
Line coverage
100%
Covered lines: 71
Uncovered lines: 0
Coverable lines: 71
Total lines: 140
Line coverage: 100%
Branch coverage
99%
Covered branches: 111
Total branches: 112
Branch coverage: 99.1%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
ApplyLikeStocksPage(...)98.93%9494100%
ApplyOzonMemoryFilters(...)100%1818100%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/AppRepository/BitrixStockServices/BitrixStockIndexFilterRules.cs

#LineLine coverage
 1using OzonDomains.Models.BitrixModels;
 2using OzonOrdersWeb.Areas.Studio2.ViewModels.Bitrix;
 3
 4namespace Services.BitrixStockServices;
 5
 6/// <summary>Правила фильтрации как в BitrixStockController.Index (без доп. пресетов задач).</summary>
 7public sealed class BitrixStockIndexFilterContext
 8{
 9    public bool HasLoadOzonWarehousesInQuery { get; init; }
 10    public bool HasOnlyInactiveInQuery { get; init; }
 11    public bool HasOnlyActiveInQuery { get; init; }
 12    public bool HasSelectedStoreTitlesInQuery { get; init; }
 13    public bool StoresFilterApplied { get; init; }
 14    public bool IsBarePageLoad { get; init; }
 15    public IReadOnlyCollection<string>? ActiveStores { get; init; }
 16}
 17
 18public static class BitrixStockIndexFilterRules
 19{
 20    public static void ApplyLikeStocksPage(RemainingStockFilter filter, BitrixStockIndexFilterContext ctx)
 21    {
 4322        var hasAnyBusinessFilter =
 4323            filter.ProductId.HasValue ||
 4324            !string.IsNullOrWhiteSpace(filter.Article) ||
 4325            !string.IsNullOrWhiteSpace(filter.PreviewText) ||
 4326            !string.IsNullOrWhiteSpace(filter.Active) ||
 4327            !string.IsNullOrWhiteSpace(filter.Available) ||
 4328            !string.IsNullOrWhiteSpace(filter.Supplier) ||
 4329            filter.QuantityFrom.HasValue ||
 4330            filter.QuantityTo.HasValue ||
 4331            filter.DateFrom.HasValue ||
 4332            filter.DateTo.HasValue ||
 4333            filter.PriceValueFrom.HasValue ||
 4334            filter.PriceValueTo.HasValue ||
 4335            filter.RegistrationPriceFrom.HasValue ||
 4336            filter.RegistrationPriceTo.HasValue ||
 4337            filter.StoreId.HasValue ||
 4338            !string.IsNullOrWhiteSpace(filter.StoreTitle) ||
 4339            (filter.SelectedStoreTitles?.Any() == true) ||
 4340            filter.AmountFrom.HasValue ||
 4341            filter.AmountTo.HasValue ||
 4342            filter.SelectedClientId.HasValue ||
 4343            !string.IsNullOrWhiteSpace(filter.OzonStoreTitle) ||
 4344            filter.OzonAmountFrom.HasValue ||
 4345            filter.OzonAmountTo.HasValue ||
 4346            filter.PriceIndexValueFrom.HasValue ||
 4347            filter.PriceIndexValueTo.HasValue ||
 4348            filter.MinPriceFrom.HasValue ||
 4349            filter.MinPriceTo.HasValue ||
 4350            filter.LoadOzonWarehouses ||
 4351            filter.LoadOzonPriceIndexes ||
 4352            filter.DiffOzonWarehouses ||
 4353            filter.RedOzonPriceIndexes ||
 4354            filter.OnlyActive ||
 4355            filter.OnlyInactive;
 56
 4357        filter.DisablePagination = hasAnyBusinessFilter;
 4358        if (!filter.DisablePagination && filter.PageSize <= 0)
 59        {
 160            filter.PageSize = 100;
 61        }
 62
 4363        if (filter.OnlyInactive)
 64        {
 365            if (!ctx.HasLoadOzonWarehousesInQuery)
 66            {
 267                filter.LoadOzonWarehouses = true;
 68            }
 69
 370            filter.Active = "N";
 371            filter.OzonAmountFrom = 1;
 72        }
 73
 4374        if (filter.OnlyActive)
 75        {
 376            if (!ctx.HasLoadOzonWarehousesInQuery)
 77            {
 278                filter.LoadOzonWarehouses = true;
 79            }
 80
 381            filter.Active = "Y";
 82        }
 83
 4384        if (!ctx.HasSelectedStoreTitlesInQuery)
 85        {
 4286            if (ctx.StoresFilterApplied)
 87            {
 188                filter.SelectedStoreTitles = new List<string>();
 89            }
 4190            else if (!string.IsNullOrWhiteSpace(filter.StoreTitle))
 91            {
 292                filter.SelectedStoreTitles = new List<string> { filter.StoreTitle };
 93            }
 3994            else if (ctx.IsBarePageLoad && ctx.ActiveStores != null)
 95            {
 196                filter.SelectedStoreTitles = BitrixStockFilterNormalizer.DefaultStoreTitlesFor(ctx.ActiveStores).ToList(
 97            }
 98        }
 99
 43100        if (filter.Page <= 0)
 101        {
 34102            filter.Page = 1;
 103        }
 104
 43105        if (filter.DisablePagination && filter.PageSize <= 0)
 106        {
 33107            filter.PageSize = 10_000;
 108        }
 43109    }
 110
 111    public static void ApplyOzonMemoryFilters(List<RemainingStockBitrix> items, RemainingStockFilter filter)
 112    {
 4113        if (!filter.LoadOzonWarehouses)
 114        {
 1115            return;
 116        }
 117
 3118        if (!string.IsNullOrEmpty(filter.OzonStoreTitle))
 119        {
 4120            items.RemoveAll(x => !x.OzonStores.Any(s =>
 6121                s.Title.Contains(filter.OzonStoreTitle, StringComparison.OrdinalIgnoreCase)));
 122        }
 123
 3124        if (filter.OzonAmountFrom.HasValue)
 125        {
 7126            items.RemoveAll(x => !x.OzonStores.Any(s => s.Amount >= filter.OzonAmountFrom.Value));
 127        }
 128
 3129        if (filter.OzonAmountTo.HasValue)
 130        {
 5131            items.RemoveAll(x => !x.OzonStores.Any(s => s.Amount <= filter.OzonAmountTo.Value));
 132        }
 133
 3134        if (filter.DiffOzonWarehouses)
 135        {
 5136            items.RemoveAll(x => !x.OzonStores.Any(oz =>
 10137                !(x.Stores?.Any(s => s.Amount == oz.Amount) ?? false)));
 138        }
 3139    }
 140}