< Summary

Information
Class: Services.ApiServices.OzonApi.Filters.FinanceAccrualSummary
Assembly: Services
File(s): /home/runner/work/Studio2Prod/Studio2Prod/AppRepository/ApiServices/OzonApi/Filters/FinanceAccrualSummaryBuilder.cs
Line coverage
100%
Covered lines: 2
Uncovered lines: 0
Coverable lines: 2
Total lines: 67
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_Operations()100%11100%
get_Totals()100%11100%

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    {
 10        ArgumentNullException.ThrowIfNull(response);
 11        ArgumentNullException.ThrowIfNull(types);
 12
 13        var typeNames = types.AccrualTypes.ToDictionary(
 14            x => x.Id,
 15            x => x.Description ?? x.Name ?? $"Тип {x.Id}");
 16        var operations = new List<FinanceTransactionOperation>();
 17        var totals = new FinanceTransactionTotalsResult();
 18        var sellerPrices = new HashSet<string>(StringComparer.Ordinal);
 19
 20        foreach (var posting in response.PostingAccruals)
 21        foreach (var accrual in posting.Accruals)
 22        {
 23            var amount = accrual.Accrued?.Amount ?? 0d;
 24            var typeName = typeNames.GetValueOrDefault(accrual.TypeId, $"Тип начисления {accrual.TypeId}");
 25            operations.Add(new FinanceTransactionOperation
 26            {
 27                OperationType = accrual.TypeId.ToString(),
 28                OperationTypeName = typeName,
 29                OperationDate = accrual.AccrualDate,
 30                Amount = amount,
 31                Posting = new FinanceTransactionPosting { PostingNumber = posting.PostingNumber },
 32                Items = accrual.Sku > 0 ? new List<FinanceTransactionItem> { new() { Sku = accrual.Sku } } : new()
 33            });
 34
 35            var sellerPrice = accrual.SellerPrice?.Amount ?? 0d;
 36            if (sellerPrice != 0d && sellerPrices.Add($"{posting.PostingNumber}|{accrual.AccrualDate}|{accrual.Sku}|{sel
 37                totals.AccrualsForSale += sellerPrice;
 38
 39            AddToCategory(totals, accrual.TypeId, typeName, amount);
 40        }
 41
 42        return new FinanceAccrualSummary { Operations = operations, Totals = totals };
 43    }
 44
 45    private static void AddToCategory(FinanceTransactionTotalsResult totals, int typeId, string typeName, double amount)
 46    {
 47        var name = typeName.ToLowerInvariant();
 48        if (name.Contains("commission", StringComparison.Ordinal) || name.Contains("комис", StringComparison.Ordinal))
 49            totals.SaleCommission += amount;
 50        else if (typeId is 29 or 32 or 98 || name.Contains("delivery", StringComparison.Ordinal) || name.Contains("logis
 51            totals.ProcessingAndDelivery += amount;
 52        else if (typeId is 6 or 45 or 59 || name.Contains("return", StringComparison.Ordinal) || name.Contains("cancel",
 53            totals.RefundsAndCancellations += amount;
 54        else if (typeId is 10 or 25 || name.Contains("compensation", StringComparison.Ordinal))
 55            totals.CompensationAmount += amount;
 56        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
 57            totals.ServicesAmount += amount;
 58        else
 59            totals.OthersAmount += amount;
 60    }
 61}
 62
 63public sealed class FinanceAccrualSummary
 64{
 365    public List<FinanceTransactionOperation> Operations { get; init; } = new();
 566    public FinanceTransactionTotalsResult Totals { get; init; } = new();
 67}

Methods/Properties

get_Operations()
get_Totals()