< Summary

Information
Class: OzonOrdersWeb.WebServices.Transactions.Grid.Commit.Steps.QuantitySplitCancellationStep
Assembly: OzonOrdersWeb
File(s): /home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/WebServices/Transactions/Grid/Commit/Steps/QuantitySplitCancellationStep.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 30
Coverable lines: 30
Total lines: 63
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 8
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%7280%

File(s)

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

#LineLine coverage
 1using Microsoft.EntityFrameworkCore;
 2using OzonRepositories.Context;
 3
 4namespace OzonOrdersWeb.WebServices.Transactions.Grid.Commit.Steps;
 5
 6/// <summary>
 7/// Порт <c>OrderToSupplierTransactionController.ApplyQuantitySplitCancellationLogic</c>: количество 0 → «К отмене»;
 8/// у разбитого заказа остаток (/1) переводится в «К отмене».
 9/// </summary>
 10public sealed class QuantitySplitCancellationStep : ITransactionCommitStep
 11{
 12    private readonly ApplicationDbContext _context;
 13    private readonly AppStatusLookup _statuses;
 14
 015    public QuantitySplitCancellationStep(ApplicationDbContext context, AppStatusLookup statuses)
 16    {
 017        _context = context;
 018        _statuses = statuses;
 019    }
 20
 021    public string Key => TransactionCommitStepKeys.QuantitySplitCancellation;
 22
 23    public async Task ExecuteAsync(TransactionCommitContext ctx)
 24    {
 025        if (ctx.UpdatedOrders.Count == 0)
 26        {
 027            return;
 28        }
 29
 030        var toCancellation = await _statuses.GetOrCreateAsync("К отмене");
 031        var now = DateTime.Now;
 32
 033        foreach (var order in ctx.UpdatedOrders.Where(o => (o.Quantity ?? 0) == 0))
 34        {
 035            order.AppStatusId = toCancellation.Id;
 036            order.AppStatus = toCancellation;
 037            order.LastStatusChangeDate = now;
 038            order.IsVerified = true;
 39        }
 40
 041        var firstNumbers = ctx.UpdatedOrders
 042            .Where(o => !string.IsNullOrEmpty(o.ShipmentNumber) && o.ShipmentNumber!.EndsWith("/2"))
 043            .Select(o => o.ShipmentNumber![..^2] + "/1")
 044            .Distinct()
 045            .ToList();
 46
 047        if (firstNumbers.Count > 0)
 48        {
 049            var firstParts = await _context.Orders
 050                .Where(o => o.ShipmentNumber != null && firstNumbers.Contains(o.ShipmentNumber))
 051                .ToListAsync(ctx.CancellationToken);
 052            foreach (var original in firstParts.Where(o => o.Quantity is > 0))
 53            {
 054                original.AppStatusId = toCancellation.Id;
 055                original.AppStatus = toCancellation;
 056                original.LastStatusChangeDate = now;
 057                original.IsVerified = true;
 58            }
 59        }
 60
 061        await _context.SaveChangesAsync(ctx.CancellationToken);
 062    }
 63}