< Summary

Information
Class: OzonOrdersWeb.Areas.Public.AssemblyListOgMetadata
Assembly: OzonOrdersWeb
File(s): /home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Areas/Public/AssemblyListOgMetadata.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 45
Coverable lines: 45
Total lines: 81
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 22
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%
BuildTitle()100%210%
BuildDescription(...)0%110100%
BuildImageAlt(...)0%620%
FormatPeriod(...)0%4260%
TryParseDate(...)0%2040%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Areas/Public/AssemblyListOgMetadata.cs

#LineLine coverage
 1using System.Globalization;
 2using System.Text;
 3
 4namespace OzonOrdersWeb.Areas.Public;
 5
 6public static class AssemblyListOgMetadata
 7{
 08    private static readonly Dictionary<string, string> StatusLabels = new(StringComparer.OrdinalIgnoreCase)
 09    {
 010        ["awaiting_registration"] = "Ожидает регистрации",
 011        ["acceptance_in_progress"] = "Идёт приёмка",
 012        ["awaiting_approve"] = "Ожидает подтверждения",
 013        ["awaiting_packaging"] = "Ожидает упаковки",
 014        ["awaiting_deliver"] = "Ожидает отгрузки",
 015        ["arbitration"] = "Арбитраж",
 016        ["client_arbitration"] = "Клиентский арбитраж",
 017        ["delivering"] = "Доставляется",
 018        ["driver_pickup"] = "У водителя",
 019        ["cancelled"] = "Отменено",
 020        ["not_accepted"] = "Не принято на СЦ",
 021    };
 22
 023    public static string BuildTitle() => "Лист подбора FBS · Interparts";
 24
 25    public static string BuildDescription(string? from, string? to, string? warehouse, string? status)
 26    {
 027        var parts = new List<string>();
 28
 029        var period = FormatPeriod(from, to);
 030        if (!string.IsNullOrEmpty(period))
 031            parts.Add(period);
 32
 033        if (!string.IsNullOrWhiteSpace(warehouse))
 034            parts.Add($"Склад: {warehouse.Trim()}");
 35
 036        if (!string.IsNullOrWhiteSpace(status)
 037            && StatusLabels.TryGetValue(status.Trim(), out var statusLabel))
 38        {
 039            parts.Add($"Статус: {statusLabel}");
 40        }
 41
 042        return parts.Count > 0
 043            ? string.Join(" · ", parts)
 044            : "Актуальный лист подбора FBS-отправлений Ozon";
 45    }
 46
 47    public static string BuildImageAlt(string? warehouse)
 48    {
 049        var sb = new StringBuilder("Interparts — лист подбора FBS");
 050        if (!string.IsNullOrWhiteSpace(warehouse))
 051            sb.Append(", склад ").Append(warehouse.Trim());
 052        return sb.ToString();
 53    }
 54
 55    private static string? FormatPeriod(string? from, string? to)
 56    {
 057        var hasFrom = TryParseDate(from, out var dateFrom);
 058        var hasTo = TryParseDate(to, out var dateTo);
 59
 060        if (hasFrom && hasTo)
 061            return $"Период: {dateFrom:dd.MM.yyyy} – {dateTo:dd.MM.yyyy}";
 62
 063        if (hasFrom)
 064            return $"Период с {dateFrom:dd.MM.yyyy}";
 65
 066        if (hasTo)
 067            return $"Период до {dateTo:dd.MM.yyyy}";
 68
 069        return null;
 70    }
 71
 72    private static bool TryParseDate(string? value, out DateTime date)
 73    {
 074        date = default;
 075        if (string.IsNullOrWhiteSpace(value))
 076            return false;
 77
 078        return DateTime.TryParse(value, CultureInfo.InvariantCulture, DateTimeStyles.None, out date)
 079            || DateTime.TryParse(value, CultureInfo.GetCultureInfo("ru-RU"), DateTimeStyles.None, out date);
 80    }
 81}