< Summary

Information
Class: Services.ApiServices._1CApi.Stock.OneCWarehouseStockQuery
Assembly: Services
File(s): /home/runner/work/Studio2Prod/Studio2Prod/AppRepository/ApiServices/1CApi/Stock/OneCWarehouseStockModels.cs
Line coverage
100%
Covered lines: 16
Uncovered lines: 0
Coverable lines: 16
Total lines: 114
Line coverage: 100%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
get_WarehouseKey()100%11100%
get_Mode()100%11100%
get_OlderThanDays()100%11100%
get_ReceiptFrom()100%11100%
get_ReceiptTo()100%11100%
get_ArticleSearch()100%11100%
get_ProducerSearch()100%11100%
get_MinQuantity()100%11100%
get_Sort()100%11100%
get_Desc()100%11100%
get_Page()100%11100%
get_PageSize()100%11100%
get_ForceRefresh()100%11100%
get_DocumentFilter()100%11100%
get_SupplierKey()100%11100%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/AppRepository/ApiServices/1CApi/Stock/OneCWarehouseStockModels.cs

#LineLine coverage
 1namespace Services.ApiServices._1CApi.Stock;
 2
 3/// <summary>Режим фильтра по сроку поступления на склад.</summary>
 4public enum StockAgeFilterMode
 5{
 6    /// <summary>Без ограничения по дате прихода.</summary>
 7    None,
 8
 9    /// <summary>Позиции, по которым не было прихода за последние N дней.</summary>
 10    OlderThanDays,
 11
 12    /// <summary>Позиции, приходившие на склад в заданном диапазоне дат.</summary>
 13    ReceiptBetween
 14}
 15
 16/// <summary>
 17/// Корзина давности — самое свежее окно оборотов, в котором был приход на склад.
 18/// Точной даты регистр не отдаёт (параметр Periodicity в 1С Fresh не поддерживается),
 19/// поэтому для сортировки всего склада используется именно она.
 20/// </summary>
 21public enum StockAgeBucket
 22{
 23    Upto30 = 0,
 24    Upto90 = 1,
 25    Upto180 = 2,
 26    Upto365 = 3,
 27    Upto730 = 4,
 28    Over730 = 5
 29}
 30
 31/// <summary>Источник прихода, по которому ограничивается набор позиций склада.</summary>
 32public enum ReceiptDocumentFilter
 33{
 34    All,
 35    ReceiptInvoice,
 36    StockTransfer
 37}
 38
 39/// <summary>Параметры выборки остатков склада.</summary>
 4940public sealed record OneCWarehouseStockQuery(
 20441    Guid WarehouseKey,
 8942    StockAgeFilterMode Mode = StockAgeFilterMode.None,
 743    int? OlderThanDays = null,
 744    DateTime? ReceiptFrom = null,
 745    DateTime? ReceiptTo = null,
 4546    string? ArticleSearch = null,
 4447    string? ProducerSearch = null,
 4748    decimal MinQuantity = 0m,
 7449    string Sort = "article",
 3750    bool Desc = false,
 8251    int Page = 1,
 12152    int PageSize = 25,
 4253    bool ForceRefresh = false,
 5354    ReceiptDocumentFilter DocumentFilter = ReceiptDocumentFilter.All,
 9255    Guid? SupplierKey = null);
 56
 57/// <summary>
 58/// Позиция склада до обогащения — то, что кэшируется целиком по складу.
 59/// Производитель и нормализованный артикул берутся из локальной карты соответствий, без обращения
 60/// к 1С: их достаточно для поиска и сортировки по всем позициям склада. Артикул в исходном
 61/// написании и наименование в карте не хранятся — они догружаются из 1С только для видимой страницы.
 62/// </summary>
 63public sealed record WarehouseStockPosition(
 64    Guid NomenclatureKey,
 65    decimal Quantity,
 66    string? ArticleNorm,
 67    string? Producer);
 68
 69/// <summary>Снимок остатков склада на момент загрузки.</summary>
 70public sealed record WarehouseStockSnapshot(
 71    Guid WarehouseKey,
 72    IReadOnlyList<WarehouseStockPosition> Positions,
 73    DateTime LoadedAtUtc);
 74
 75/// <summary>Последний приход позиции на конкретный склад.</summary>
 76public sealed record LastReceiptInfo(
 77    DateTime Date,
 78    string? Number,
 79    Guid RefKey,
 80    string Kind,
 81    Guid? SupplierKey = null);
 82
 83/// <summary>Строка таблицы раздела.</summary>
 84public sealed record OneCWarehouseStockRow(
 85    Guid NomenclatureKey,
 86    string? Article,
 87    string? Name,
 88    string? Producer,
 89    decimal Quantity,
 90    DateTime? LastReceiptDate,
 91    int? DaysOnStock,
 92    string? LastReceiptDocNumber,
 93    string? LastReceiptDocKind,
 94    StockAgeBucket? AgeBucket,
 95    string? LastReceiptSupplier = null);
 96
 97/// <summary>Результат выборки: страница строк плюс сводка по всему отфильтрованному набору.</summary>
 98public sealed record OneCWarehouseStockResult(
 99    Guid WarehouseKey,
 100    string WarehouseName,
 101    IReadOnlyList<OneCWarehouseStockRow> Rows,
 102    int TotalCount,
 103    int TotalPositions,
 104    decimal TotalQuantityFiltered,
 105    int Page,
 106    int PageSize,
 107    DateTime SnapshotAtUtc,
 108    bool Failed,
 109    string? Warning)
 110{
 111    /// <summary>1С недоступна или запрос не удался — таблица пустая, причина в Warning.</summary>
 112    public static OneCWarehouseStockResult Failure(Guid warehouseKey, string warehouseName, string error)
 113        => new(warehouseKey, warehouseName, [], 0, 0, 0m, 1, 0, DateTime.UtcNow, true, error);
 114}