< Summary

Information
Class: Services.ApiServices._1CApi.Nomenclature.NomenclatureDecision
Assembly: Services
File(s): /home/runner/work/Studio2Prod/Studio2Prod/AppRepository/ApiServices/1CApi/Nomenclature/NomenclatureResolvePolicy.cs
Line coverage
100%
Covered lines: 1
Uncovered lines: 0
Coverable lines: 1
Total lines: 49
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
get_Action()100%11100%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/AppRepository/ApiServices/1CApi/Nomenclature/NomenclatureResolvePolicy.cs

#LineLine coverage
 1namespace Services.ApiServices._1CApi.Nomenclature;
 2
 3public enum NomenclatureAction
 4{
 5    /// <summary>Брать найденную карточку.</summary>
 6    UseCard,
 7
 8    /// <summary>Завести новую карточку.</summary>
 9    Create,
 10
 11    /// <summary>Не брать и не создавать: позиция уходит в черновик с причиной.</summary>
 12    Reject
 13}
 14
 19815public sealed record NomenclatureDecision(NomenclatureAction Action, Guid? RefKey, string Reason, bool FoundByVariant);
 16
 17/// <summary>
 18/// Что делать с результатом поиска. «Только найти» (отгрузка реализатору, утеря) никогда не создаёт карточек.
 19/// «Найти или создать» создаёт только когда карточки нет вообще или все карточки артикула — другого бренда;
 20/// при неоднозначности не создаёт: новая карточка стала бы дублем одной из существующих.
 21/// </summary>
 22public static class NomenclatureResolvePolicy
 23{
 24    public static NomenclatureDecision Decide(NomenclatureMatch match, NomenclatureMode mode)
 25    {
 26        switch (match.Status)
 27        {
 28            case NomenclatureMatchStatus.Found when match.RefKey.HasValue:
 29                return new NomenclatureDecision(NomenclatureAction.UseCard, match.RefKey, match.Reason, false);
 30
 31            case NomenclatureMatchStatus.FoundByVariant when match.RefKey.HasValue:
 32                return new NomenclatureDecision(NomenclatureAction.UseCard, match.RefKey, match.Reason, true);
 33
 34            case NomenclatureMatchStatus.Ambiguous:
 35                return new NomenclatureDecision(NomenclatureAction.Reject, null, match.Reason, false);
 36
 37            case NomenclatureMatchStatus.BrandMismatch:
 38            case NomenclatureMatchStatus.NotFound:
 39                return mode == NomenclatureMode.FindOrCreate
 40                       && match.Parsed.ArticleKey.Length > 0
 41                       && match.Producer.Kind == ProducerResolutionKind.Known
 42                    ? new NomenclatureDecision(NomenclatureAction.Create, null, match.Reason, false)
 43                    : new NomenclatureDecision(NomenclatureAction.Reject, null, match.Reason, false);
 44
 45            default:
 46                return new NomenclatureDecision(NomenclatureAction.Reject, null, match.Reason, false);
 47        }
 48    }
 49}

Methods/Properties

get_Action()