< Summary

Information
Class: OzonOrdersWeb.Areas.Studio2.ViewModels.TransactionTimeTracking.TransactionTimeTrackingReportViewModel
Assembly: OzonOrdersWeb
File(s): /home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Areas/Studio2/ViewModels/TransactionTimeTracking/TransactionTimeTrackingReportViewModel.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 61
Coverable lines: 61
Total lines: 104
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 49
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Areas/Studio2/ViewModels/TransactionTimeTracking/TransactionTimeTrackingReportViewModel.cs

#LineLine coverage
 1using OzonDomains;
 2using OzonDomains.Models;
 3
 4namespace OzonOrdersWeb.Areas.Studio2.ViewModels.TransactionTimeTracking;
 5
 6public class TransactionTimeTrackingReportViewModel
 7{
 08    public DateTime? DateFromUtc { get; set; }
 09    public DateTime? DateToUtc { get; set; }
 010    public string? UserName { get; set; }
 011    public string? TransactionType { get; set; }
 012    public int PageNumber { get; set; }
 013    public int PageSize { get; set; }
 014    public int TotalCount { get; set; }
 015    public int TotalPages => PageSize > 0 ? (int)Math.Ceiling(TotalCount / (double)PageSize) : 0;
 016    public bool HasPreviousPage => PageNumber > 1;
 017    public bool HasNextPage => PageNumber < TotalPages;
 18
 019    public List<string> AvailableTransactionTypes { get; set; } = new();
 020    public List<string> AvailableUsers { get; set; } = new();
 021    public List<TransactionTimeTrackingResult> Results { get; set; } = new();
 22
 023    public TransactionTimeTrackingReportSummaryViewModel? Summary { get; set; }
 24
 025    public TransactionTimeTrackingChartsViewModel? ChartData { get; set; }
 26
 27    public string GetTransactionTypeDisplayName(string? transactionType)
 28    {
 029        if (string.IsNullOrWhiteSpace(transactionType))
 030            return "Не указан";
 31
 032        return Enum.TryParse<OzonDomains.TransactionType>(transactionType, true, out var parsedType)
 033            ? parsedType.GetDisplayName()
 034            : transactionType;
 35    }
 36
 37    public string GetTransactionTypeBadgeClass(string? transactionType)
 38    {
 039        if (string.IsNullOrWhiteSpace(transactionType))
 040            return "bg-secondary";
 41
 042        if (!Enum.TryParse<OzonDomains.TransactionType>(transactionType, true, out var parsedType))
 043            return "bg-secondary";
 44
 045        return parsedType switch
 046        {
 047            OzonDomains.TransactionType.OrderedToSupplier => "bg-success",
 048            OzonDomains.TransactionType.ShippedBySupplier => "bg-info text-dark",
 049            OzonDomains.TransactionType.ShippedToSeller => "bg-warning text-dark",
 050            OzonDomains.TransactionType.OrderedToSeller => "bg-secondary",
 051            OzonDomains.TransactionType.ShippedToClient => "bg-primary",
 052            OzonDomains.TransactionType.Percentage => "bg-dark",
 053            OzonDomains.TransactionType.ReceiptNote => "bg-light text-dark border",
 054            OzonDomains.TransactionType.AcceptedToWarehouse => "bg-info",
 055            OzonDomains.TransactionType.ToCancellation => "bg-secondary",
 056            OzonDomains.TransactionType.Cancelled => "bg-danger",
 057            OzonDomains.TransactionType.CustomerReturn => "bg-warning text-dark",
 058            OzonDomains.TransactionType.WarehouseChange => "bg-primary",
 059            OzonDomains.TransactionType.ReturnToSupplier => "bg-warning text-dark",
 060            OzonDomains.TransactionType.ReturnToWarehouse => "bg-info text-dark",
 061            OzonDomains.TransactionType.WarehouseTransfer => "bg-primary",
 062            OzonDomains.TransactionType.ShippedToCommissioner => "bg-primary",
 063            _ => "bg-secondary"
 064        };
 65    }
 66
 67    public string GetTransactionTypeIconClass(string? transactionType)
 68    {
 069        if (string.IsNullOrWhiteSpace(transactionType))
 070            return "fas fa-circle";
 71
 072        return Enum.TryParse<OzonDomains.TransactionType>(transactionType, true, out var parsedType)
 073            ? parsedType.GetTransactionTypeIcon()
 074            : "fas fa-circle";
 75    }
 76
 77    public string GetOrdersPerMinute(int ordersCount, long durationSeconds)
 78    {
 079        if (ordersCount <= 0 || durationSeconds <= 0)
 080            return "—";
 81
 082        var perMinute = ordersCount / (durationSeconds / 60d);
 083        return perMinute.ToString("0.##");
 84    }
 85
 86    public string FormatOrdersPerMinute(double? value)
 87    {
 088        if (!value.HasValue || double.IsNaN(value.Value) || double.IsInfinity(value.Value))
 089            return "—";
 90
 091        return value.Value.ToString("0.##");
 92    }
 93
 94    public string FormatAvgDuration(double? avgSeconds)
 95    {
 096        if (!avgSeconds.HasValue || double.IsNaN(avgSeconds.Value) || double.IsInfinity(avgSeconds.Value))
 097            return "—";
 98
 099        var rounded = (long)Math.Round(avgSeconds.Value, MidpointRounding.AwayFromZero);
 0100        return TimeSpan.FromSeconds(rounded).ToString(@"hh\:mm\:ss");
 101    }
 102
 0103    public DateTime ToMskTime(DateTime utcDateTime) => MoscowTimeHelper.UtcToMsk(utcDateTime);
 104}