< Summary

Information
Class: OzonOrdersWeb.WebServices.Transactions.Grid.Commit.Steps.ResolveTargetStatusStep
Assembly: OzonOrdersWeb
File(s): /home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/WebServices/Transactions/Grid/Commit/Steps/ResolveTargetStatusStep.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 20
Coverable lines: 20
Total lines: 50
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 16
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%
get_Key()100%210%
ExecuteAsync()0%2040%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/WebServices/Transactions/Grid/Commit/Steps/ResolveTargetStatusStep.cs

#LineLine coverage
 1using OzonDomains.Models;
 2
 3namespace OzonOrdersWeb.WebServices.Transactions.Grid.Commit.Steps;
 4
 5/// <summary>
 6/// Отбор заказов в документ: при переходах из StatusTransition — те, чей статус входит в целевые;
 7/// иначе — в целевом статусе определения или «Отменен»; без целевого статуса — все (смена склада, проценка).
 8/// </summary>
 9public sealed class ResolveTargetStatusStep : ITransactionCommitStep
 10{
 11    private readonly AppStatusLookup _statuses;
 12
 013    public ResolveTargetStatusStep(AppStatusLookup statuses)
 14    {
 015        _statuses = statuses;
 016    }
 17
 018    public string Key => TransactionCommitStepKeys.ResolveTargetStatus;
 19
 20    public async Task ExecuteAsync(TransactionCommitContext ctx)
 21    {
 022        var d = ctx.Definition;
 23        List<Order> selected;
 24
 025        if (ctx.Transitions.Count > 0)
 26        {
 027            var targetIds = ctx.Transitions.Select(t => t.ToStatusId).ToHashSet();
 028            selected = ctx.UpdatedOrders.Where(o => o.AppStatus != null && targetIds.Contains(o.AppStatus.Id)).ToList();
 029            ctx.TargetStatus = ctx.Transitions.Select(t => t.ToStatus).FirstOrDefault(s => s != null);
 30        }
 031        else if (string.IsNullOrEmpty(d.TargetStatusName))
 32        {
 033            selected = ctx.UpdatedOrders.ToList();
 34        }
 35        else
 36        {
 037            var primary = await _statuses.FindAsync(d.TargetStatusName);
 038            var cancelled = await _statuses.FindAsync("Отменен");
 039            ctx.TargetStatus = primary;
 040            selected = ctx.UpdatedOrders.Where(o =>
 041                (primary != null && o.AppStatus != null && o.AppStatus.Id == primary.Id) ||
 042                (cancelled != null && o.AppStatus != null && o.AppStatus.Id == cancelled.Id)).ToList();
 043        }
 44
 45        // Заказы «только статус» участвуют в документе, но не в 1С (см. OneCDocumentStep).
 046        ctx.OrdersToTransaction = selected;
 47        // Пустой документ не является ошибкой: пользователь мог успешно изменить статусы строк,
 48        // которые по правилам данного типа не должны попасть в создаваемую транзакцию.
 049    }
 50}