< Summary

Information
Class: Services.ApiServices.OzonApi.Filters.FinanceAccrualSummaryBuilder
Assembly: Services
File(s): /home/runner/work/Studio2Prod/Studio2Prod/AppRepository/ApiServices/OzonApi/Filters/FinanceAccrualSummaryBuilder.cs
Line coverage
84%
Covered lines: 33
Uncovered lines: 6
Coverable lines: 39
Total lines: 67
Line coverage: 84.6%
Branch coverage
44%
Covered branches: 38
Total branches: 86
Branch coverage: 44.1%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
Build(...)77.77%1818100%
AddToCategory(...)35.29%5236853.84%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/AppRepository/ApiServices/OzonApi/Filters/FinanceAccrualSummaryBuilder.cs

#LineLine coverage
 1namespace Services.ApiServices.OzonApi.Filters;
 2
 3/// <summary>Приводит сырые начисления Seller API к модели исторического окна отправления.</summary>
 4public static class FinanceAccrualSummaryBuilder
 5{
 6    public static FinanceAccrualSummary Build(
 7        FinanceAccrualPostingsResponse response,
 8        FinanceAccrualTypesResponse types)
 9    {
 110        ArgumentNullException.ThrowIfNull(response);
 111        ArgumentNullException.ThrowIfNull(types);
 12
 113        var typeNames = types.AccrualTypes.ToDictionary(
 214            x => x.Id,
 315            x => x.Description ?? x.Name ?? $"Тип {x.Id}");
 116        var operations = new List<FinanceTransactionOperation>();
 117        var totals = new FinanceTransactionTotalsResult();
 118        var sellerPrices = new HashSet<string>(StringComparer.Ordinal);
 19
 420        foreach (var posting in response.PostingAccruals)
 621        foreach (var accrual in posting.Accruals)
 22        {
 223            var amount = accrual.Accrued?.Amount ?? 0d;
 224            var typeName = typeNames.GetValueOrDefault(accrual.TypeId, $"Тип начисления {accrual.TypeId}");
 225            operations.Add(new FinanceTransactionOperation
 226            {
 227                OperationType = accrual.TypeId.ToString(),
 228                OperationTypeName = typeName,
 229                OperationDate = accrual.AccrualDate,
 230                Amount = amount,
 231                Posting = new FinanceTransactionPosting { PostingNumber = posting.PostingNumber },
 232                Items = accrual.Sku > 0 ? new List<FinanceTransactionItem> { new() { Sku = accrual.Sku } } : new()
 233            });
 34
 235            var sellerPrice = accrual.SellerPrice?.Amount ?? 0d;
 236            if (sellerPrice != 0d && sellerPrices.Add($"{posting.PostingNumber}|{accrual.AccrualDate}|{accrual.Sku}|{sel
 137                totals.AccrualsForSale += sellerPrice;
 38
 239            AddToCategory(totals, accrual.TypeId, typeName, amount);
 40        }
 41
 142        return new FinanceAccrualSummary { Operations = operations, Totals = totals };
 43    }
 44
 45    private static void AddToCategory(FinanceTransactionTotalsResult totals, int typeId, string typeName, double amount)
 46    {
 247        var name = typeName.ToLowerInvariant();
 248        if (name.Contains("commission", StringComparison.Ordinal) || name.Contains("комис", StringComparison.Ordinal))
 049            totals.SaleCommission += amount;
 250        else if (typeId is 29 or 32 or 98 || name.Contains("delivery", StringComparison.Ordinal) || name.Contains("logis
 151            totals.ProcessingAndDelivery += amount;
 152        else if (typeId is 6 or 45 or 59 || name.Contains("return", StringComparison.Ordinal) || name.Contains("cancel",
 053            totals.RefundsAndCancellations += amount;
 154        else if (typeId is 10 or 25 || name.Contains("compensation", StringComparison.Ordinal))
 155            totals.CompensationAmount += amount;
 056        else if (typeId is 12 or 15 or 38 or 39 or 41 or 46 or 48 or 54 or 77 or 78 or 84 or 96 || name.Contains("promot
 057            totals.ServicesAmount += amount;
 58        else
 059            totals.OthersAmount += amount;
 060    }
 61}
 62
 63public sealed class FinanceAccrualSummary
 64{
 65    public List<FinanceTransactionOperation> Operations { get; init; } = new();
 66    public FinanceTransactionTotalsResult Totals { get; init; } = new();
 67}