< Summary

Information
Class: OzonOrdersWeb.Areas.Studio2.ViewHelpers.OrderCellFormat
Assembly: OzonOrdersWeb
File(s): /home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Areas/Studio2/ViewHelpers/OrderCellFormat.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 12
Coverable lines: 12
Total lines: 45
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 4
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.cctor()100%210%
Money(...)100%210%
Number(...)0%620%
SignClass(...)0%620%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Areas/Studio2/ViewHelpers/OrderCellFormat.cs

#LineLine coverage
 1using System.Globalization;
 2using Microsoft.AspNetCore.Html;
 3
 4namespace OzonOrdersWeb.Areas.Studio2.ViewHelpers;
 5
 6/// <summary>
 7/// Единое представление чисел в списке заказов: разряды разделяются неразрывным тонким пробелом
 8/// (не переносится и не рвёт выравнивание по правому краю), пустое значение — «—»,
 9/// отрицательное получает семантический класс вместо инлайнового color:red.
 10/// Форматирование только визуальное — значения и типы модели не меняются.
 11/// </summary>
 12public static class OrderCellFormat
 13{
 14    /// <summary>Заполнитель пустого значения.</summary>
 15    public const string Empty = "—";
 16
 17    /// <summary>U+202F — узкий неразрывный пробел, разделитель разрядов.</summary>
 18    private const string GroupSeparator = "\u202F";
 19
 020    private static readonly NumberFormatInfo Nfi = new()
 021    {
 022        NumberGroupSeparator = GroupSeparator,
 023        NumberDecimalSeparator = ",",
 024        NumberNegativePattern = 1 // -n, без пробела после минуса
 025    };
 26
 27    /// <summary>Целое денежное значение (рубли, без копеек).</summary>
 028    public static IHtmlContent Money(decimal? value) => Number(value, 0);
 29
 30    /// <summary>Число с заданным количеством знаков после запятой; null/пусто — «—».</summary>
 31    public static IHtmlContent Number(decimal? value, int decimals = 0)
 32    {
 033        if (value is null)
 34        {
 035            return new HtmlString(Empty);
 36        }
 37
 038        var text = value.Value.ToString("N" + decimals.ToString(CultureInfo.InvariantCulture), Nfi);
 039        return new HtmlString(System.Net.WebUtility.HtmlEncode(text));
 40    }
 41
 42    /// <summary>Класс для семантической подсветки отрицательного/проблемного значения.</summary>
 43    public static string SignClass(decimal? value)
 044        => value < 0 ? "orders-num orders-num--negative" : "orders-num";
 45}