< Summary

Information
Class: AspNetCoreGeneratedDocument.Areas_Studio2_Views_OrderControl_Index
Assembly: OzonOrdersWeb
File(s): /home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Areas/Studio2/Views/OrderControl/Index.cshtml
Line coverage
0%
Covered lines: 0
Uncovered lines: 49
Coverable lines: 49
Total lines: 145
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 170
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
ExecuteAsync()0%443102100%
<ExecuteAsync()100%210%
<ExecuteAsync()0%2040%
<ExecuteAsync()100%210%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Areas/Studio2/Views/OrderControl/Index.cshtml

#LineLine coverage
 1@model IReadOnlyList<OzonDomains.Models.OrderControlTask>
 2@{
 03    ViewData["Title"] = "Требует действий";
 04    var showMissingStatus = ViewBag.ShowMissingStatus is bool enabled && enabled;
 05    var missingStatusOrders = ViewBag.MissingSystemStatusOrders as IReadOnlyList<Services.OrderDailySummaryServices.Miss
 06    var onlyOverdue = ViewBag.OnlyOverdue is bool overdueOnly && overdueOnly;
 07    var isAdmin = ViewBag.IsAdmin is bool admin && admin;
 8}
 9<link rel="stylesheet" href="~/css/Studio2/OrderControl/order-control.css" asp-append-version="true" />
 10<link rel="stylesheet" href="~/css/Studio2/shared/quick-links-chip.css" asp-append-version="true" />
 11
 12<div class="container py-3 oc-page">
 13    <section class="oc-hero app-section-hero app-section-hero--import">
 14        <div>
 15            <h1><i class="fas fa-bell me-2 text-primary"></i>Требует действий</h1>
 16            <div class="subtitle">Контрольные задачи по заказам и срокам обработки.</div>
 17            <div class="subtitle-help">Сначала обработайте просроченные задачи, затем — задачи с ближайшим сроком.</div>
 18        </div>
 19        <div class="oc-quick-links app-section-hero__quick-links">
 20            <a asp-controller="Orders" asp-action="Index"><i class="fas fa-table"></i> Заказы</a>
 021            @if (isAdmin)
 22            {
 23                <a asp-controller="OrderControl" asp-action="Index" asp-route-missingStatus="true"><i class="fas fa-circ
 24            }
 25            <a asp-controller="OrderControl" asp-action="Rules"><i class="fas fa-sliders-h"></i> Правила SLA</a>
 26        </div>
 27    </section>
 28
 29    <div class="oc-summary">
 30        <div class="oc-summary-icon"><i class="fas fa-tasks"></i></div>
 031        <div><div class="label">Активных задач</div><div class="value">@ViewBag.TotalItems</div></div>
 032        <div class="oc-summary-hint">На странице @Model.Count из @ViewBag.TotalItems</div>
 33    </div>
 34
 35    <div class="oc-intro"><i class="fas fa-circle-info"></i><span>Возьмите задачу в работу или закройте её с указанием п
 36
 037    @if (onlyOverdue)
 38    {
 39        <div class="oc-intro"><i class="fas fa-clock text-danger"></i><span>Показаны только просроченные задачи.</span> 
 40    }
 41
 042    @if (showMissingStatus)
 43    {
 44        <section class="oc-missing-status-card">
 45            <div class="oc-missing-status-head"><div><strong><i class="fas fa-circle-exclamation me-1"></i>Хвост без сис
 046            @if (missingStatusOrders.Count == 0)
 47            {
 48                <div class="oc-missing-status-empty"><i class="fas fa-check-circle"></i>Таких заказов нет.</div>
 49            }
 50            else
 51            {
 52                <div class="table-responsive"><table class="table table-hover align-middle mb-0 oc-missing-status-table"
 053                @foreach (var order in missingStatusOrders)
 54                {
 055                    <tr><td><div class="oc-order-card"><div class="oc-product-image">@if (!string.IsNullOrWhiteSpace(ord
 056                }
 57                </tbody></table></div>
 58            }
 59        </section>
 60    }
 61
 062    @if (Model.Count == 0)
 63    {
 64        <div class="oc-empty-state"><img src="~/images/status/success.svg" asp-append-version="true" alt=""><strong>Акти
 65    }
 66    else
 67    {
 68        <div class="oc-table-card table-responsive">
 69            <table class="table table-hover align-middle mb-0 oc-queue-table">
 70                <thead><tr><th>Приоритет</th><th>Заказ и товар</th><th>Правило</th><th>Статусы</th><th>Срок</th><th>Зада
 71                <tbody>
 072                @foreach (var task in Model)
 73                {
 074                    var status = task.Status switch
 075                    {
 076                        "Open" => ("Новая", "oc-status-open"),
 077                        "InProgress" => ("В работе", "oc-status-progress"),
 078                        "Overdue" => ("Просрочена", "oc-status-overdue"),
 079                        _ => (task.Status, "oc-status-off")
 080                    };
 081                    var order = task.Order;
 082                    var producer = order?.EtProducer?.Name ?? order?.Manufacturer?.Name;
 083                    var imageUrl = order?.ProductInfo?.ImageUrl;
 084                    var clientColor = order?.ClientStatus?.StatusColor?.ColorCode ?? "#E2E8F0";
 085                    var appColor = order?.AppStatus?.StatusColor?.ColorCode ?? "#E2E8F0";
 86                    <tr class="@(task.Status == "Overdue" ? "oc-row-overdue" : "")">
 087                        <td><span class="oc-priority">@task.Priority</span></td>
 88                        <td class="oc-order-cell">
 89                            <div class="oc-order-card">
 90                                <div class="oc-product-image">
 091                                    @if (!string.IsNullOrWhiteSpace(imageUrl))
 92                                    {
 93                                        <img src="@imageUrl" alt="" loading="lazy" onerror="this.parentElement.classList
 94                                    }
 95                                    else
 96                                    {
 97                                        <i class="fas fa-box" aria-hidden="true"></i>
 98                                    }
 99                                </div>
 100                                <div class="oc-order-info">
 101                                    <div class="oc-order-top-row">
 0102                                        <a class="oc-shipment-link" asp-area="Studio2" asp-controller="Orders" asp-actio
 0103                                        @if (!string.IsNullOrWhiteSpace(order?.OzonClient?.Name))
 104                                        {
 0105                                            <span class="oc-client-chip" title="Клиент Ozon">@order.OzonClient.Name</spa
 106                                        }
 107                                    </div>
 0108                                    <div class="oc-product-name" title="@order?.ProductName">@(order?.ProductName ?? "То
 0109                                    <div class="oc-product-details" title="@string.Join(" · ", new[] { producer, order?.
 0110                                        @if (!string.IsNullOrWhiteSpace(producer)) { <span>@producer</span> }
 0111                                        @if (!string.IsNullOrWhiteSpace(order?.Article)) { <span>@order.Article</span> }
 0112                                        @if (!string.IsNullOrWhiteSpace(order?.Supplier?.Name)) { <span><i class="fas fa
 113                                    </div>
 114                                </div>
 115                            </div>
 116                        </td>
 0117                        <td><div class="oc-rule-name">@task.Rule?.Name</div><div class="oc-rule-code">@(task.Rule?.Code 
 118                        <td class="oc-order-statuses">
 0119                            <span class="oc-order-status" data-color="@clientColor" title="Статус клиента / Ozon">@(orde
 0120                            <span class="oc-order-status" data-color="@appColor" title="Системный статус">@(order?.AppSt
 121                        </td>
 0122                        <td class="oc-due-cell"><strong>@task.DueAtUtc.ToLocalTime().ToString("dd.MM HH:mm")</strong><sm
 0123                        <td><span class="oc-status @status.Item2">@status.Item1</span></td>
 124                        <td class="oc-actions-cell">
 0125                            @if (task.ClaimedByUserId is null)
 126                            {
 0127                                <form asp-action="Claim" asp-route-id="@task.Id" method="post"><button class="btn btn-sm
 128                            }
 0129                            <form class="oc-close-form" asp-action="Close" asp-route-id="@task.Id" method="post">
 130                                <input class="form-control form-control-sm oc-reason" required name="reason" placeholder
 131                                <button class="btn btn-sm btn-outline-success">Закрыть</button>
 132                            </form>
 133                        </td>
 134                    </tr>
 0135                }
 136                </tbody>
 137            </table>
 138        </div>
 139    }
 140
 0141    @if ((int)ViewBag.TotalPages > 1)
 142    {
 0143        <nav class="oc-pagination mt-3" aria-label="Страницы очереди"><div class="pagination-controls">@for (var i = 1; 
 144    }
 145</div>