< Summary

Information
Class: AspNetCoreGeneratedDocument.Areas_Studio2_Views_ProductAnalysis_Index
Assembly: OzonOrdersWeb
File(s): /home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Areas/Studio2/Views/ProductAnalysis/Index.cshtml
Line coverage
0%
Covered lines: 0
Uncovered lines: 35
Coverable lines: 35
Total lines: 114
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 60
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%930300%
<ExecuteAsync()0%930300%

File(s)

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

#LineLine coverage
 1@{
 02    ViewData["Title"] = "Анализ продуктов";
 03    var ozonErrorDashboardBaseUrl = (ViewBag.OzonErrorDashboardBaseUrl as string ?? string.Empty).TrimEnd('/');
 4
 5    // key — значение ?tab=; id кнопки — <key>-tab (на неё подписаны ленивые модули pa-*.js), id панели — <key>
 06    var tabs = new (string Key, string Icon, string Title, string Hint)[]
 07    {
 08        ("summary", "fa-tachometer-alt", "Обзор", "Главные показатели, динамика, топы и убыточные продукты"),
 09        ("products", "fa-boxes", "Продукты", "Все продукты с фильтрами; двойной клик — детализация"),
 010        ("overall", "fa-globe", "Общая статистика", "Прибыль, средний чек и заказы по месяцам и клиентам"),
 011        ("metrics", "fa-chart-line", "Доп. метрики", "ROI, возвраты, время выполнения, популярные товары"),
 012        ("comparative", "fa-balance-scale", "Сравнительная", "Текущий месяц против предыдущего периода"),
 013        ("seasonality", "fa-calendar-alt", "Сезонность", "Спрос по месяцам, дням недели и часам"),
 014        ("orderStatuses", "fa-tags", "Статусы заказов", "Распределение и динамика статусов"),
 015        ("warehouseRegion", "fa-warehouse", "Склады и регионы", "Итоги по складам отгрузки и городам доставки"),
 016        ("forecast", "fa-chart-area", "Прогноз и тренды", "Прогноз продаж, тренды и рекомендации по закупкам"),
 017        ("defectIndex", "fa-exclamation-triangle", "Индекс ошибок", "Индекс ошибок по кабинетам Ozon"),
 018        ("ozonErrors", "fa-bug", "Ошибки Ozon", "Ссылки на dashboard ошибок по клиентам"),
 019    };
 20}
 21
 22@* Оболочка AG Grid (тема, токены --og-*, BsxGrid); шапка и вкладки — как у BitrixStock/JobLogs. Правила — docs/frontend
 023@await Html.PartialAsync("_BsxGridShell")
 24<link rel="stylesheet" href="~/css/Studio2/ProductAnalysis/pa-analysis.css" asp-append-version="true"/>
 25
 26<div class="container-fluid mt-3 pa-page bsx-surface">
 27    <div class="app-section-hero">
 28        <div class="d-flex flex-wrap justify-content-between align-items-start gap-3">
 29            <div>
 30                <h1><i class="fas fa-chart-bar text-primary me-2"></i>Анализ продуктов</h1>
 31                <div class="subtitle">Продажи, прибыль, возвраты, склады и прогноз по заказам Studio2</div>
 32                <div class="subtitle-help">Выберите период — данные вкладок подгружаются при открытии. Ссылка вида <code
 33                <div class="app-section-hero__quick-links">
 34                    <a href="/Studio2/FidStat"><i class="fas fa-broadcast-tower"></i>Статистика фидов</a>
 35                    <a href="/TransactionTimeTrackingReport" title="Трекинг времени проведения транзакций"><i class="fas
 36                    <a asp-area="Studio2" asp-controller="JobLogs" asp-action="Index"><i class="fas fa-clipboard-list"><
 37                </div>
 38            </div>
 39        </div>
 40    </div>
 41
 42    <ul class="nav pa-tabs" id="paTabs" role="tablist">
 043        @foreach (var t in tabs)
 44        {
 45            <li class="nav-item" role="presentation">
 046                <a class="nav-link @(t.Key == "summary" ? "active" : "")" id="@(t.Key)-tab" data-pa-tab="@t.Key" href="?
 047                    <i class="fas @t.Icon me-1"></i>@t.Title
 48                </a>
 49            </li>
 50        }
 51    </ul>
 52
 53    <div class="pa-period" id="paPeriodBar">
 54        <label for="periodSelect"><i class="fas fa-calendar-alt me-1"></i>Период</label>
 55        <select id="periodSelect" class="form-select form-select-sm">
 56            <option value="all" selected>За все время</option>
 57            <option value="today">Сегодня</option>
 58            <option value="yesterday">Вчера</option>
 59            <option value="week">7 дней</option>
 60            <option value="month">Месяц</option>
 61            <option value="3months">3 месяца</option>
 62            <option value="6months">6 месяцев</option>
 63            <option value="year">Год</option>
 64            <option value="custom">Произвольный</option>
 65        </select>
 66        <span id="customPeriodContainer" class="pa-period-custom" hidden>
 67            <input type="date" id="startDate" class="form-control form-control-sm" title="Дата начала">
 68            <span class="pa-muted">—</span>
 69            <input type="date" id="endDate" class="form-control form-control-sm" title="Дата окончания">
 70        </span>
 71        <span class="pa-period-note" id="periodNotificationText"></span>
 72    </div>
 73
 74    <div id="mainTabContent">
 075        <div class="pa-pane active" id="summary" role="tabpanel">@await Html.PartialAsync("_Summary")</div>
 076        <div class="pa-pane" id="products" role="tabpanel">@await Html.PartialAsync("_Products")</div>
 077        <div class="pa-pane" id="overall" role="tabpanel">@await Html.PartialAsync("_Overall")</div>
 078        <div class="pa-pane" id="metrics" role="tabpanel">@await Html.PartialAsync("_Metrics")</div>
 079        <div class="pa-pane" id="comparative" role="tabpanel">@await Html.PartialAsync("_Comparative")</div>
 080        <div class="pa-pane" id="seasonality" role="tabpanel">@await Html.PartialAsync("_Seasonality")</div>
 081        <div class="pa-pane" id="orderStatuses" role="tabpanel">@await Html.PartialAsync("_Statuses")</div>
 082        <div class="pa-pane" id="warehouseRegion" role="tabpanel">@await Html.PartialAsync("_WarehouseRegion")</div>
 083        <div class="pa-pane" id="forecast" role="tabpanel">@await Html.PartialAsync("_Forecast")</div>
 084        <div class="pa-pane" id="defectIndex" role="tabpanel">@await Html.PartialAsync("_DefectIndex")</div>
 085        <div class="pa-pane" id="ozonErrors" role="tabpanel">@await Html.PartialAsync("_OzonErrors")</div>
 86    </div>
 87</div>
 88
 89@section Scripts {
 90    <!-- AG Charts Community (MIT), локально: wwwroot/lib/ag-charts -->
 91    <script src="~/lib/ag-charts/ag-charts-community.min.js" asp-append-version="true"></script>
 92    <script>
 93        window.paConfig = {
 094            baseUrl: @Html.Raw(System.Text.Json.JsonSerializer.Serialize(Url.Action("Index", "ProductAnalysis", new { ar
 095            gridUrl: @Html.Raw(System.Text.Json.JsonSerializer.Serialize(Url.Action("GetProductGroupsGrid", "ProductAnal
 096            facetsUrl: @Html.Raw(System.Text.Json.JsonSerializer.Serialize(Url.Action("GetProductGroupsFacets", "Product
 097            ozonErrorDashboardBaseUrl: @Html.Raw(System.Text.Json.JsonSerializer.Serialize(ozonErrorDashboardBaseUrl))
 98        };
 99    </script>
 100    <script src="~/js/Studio2/ProductAnalysis/pa-common.js" asp-append-version="true"></script>
 101    <script src="~/js/Studio2/ProductAnalysis/pa-help.js" asp-append-version="true"></script>
 102    <script src="~/js/Studio2/ProductAnalysis/pa-charts.js" asp-append-version="true"></script>
 103    <script src="~/js/Studio2/ProductAnalysis/pa-page.js" asp-append-version="true"></script>
 104    <script src="~/js/Studio2/ProductAnalysis/pa-products.js" asp-append-version="true"></script>
 105    <script src="~/js/Studio2/ProductAnalysis/pa-summary.js" asp-append-version="true"></script>
 106    <script src="~/js/Studio2/ProductAnalysis/pa-overall.js" asp-append-version="true"></script>
 107    <script src="~/js/Studio2/ProductAnalysis/pa-metrics.js" asp-append-version="true"></script>
 108    <script src="~/js/Studio2/ProductAnalysis/pa-comparative.js" asp-append-version="true"></script>
 109    <script src="~/js/Studio2/ProductAnalysis/pa-seasonality.js" asp-append-version="true"></script>
 110    <script src="~/js/Studio2/ProductAnalysis/pa-statuses.js" asp-append-version="true"></script>
 111    <script src="~/js/Studio2/ProductAnalysis/pa-warehouse.js" asp-append-version="true"></script>
 112    <script src="~/js/Studio2/ProductAnalysis/pa-forecast.js" asp-append-version="true"></script>
 113    <script src="~/js/Studio2/ProductAnalysis/pa-defect.js" asp-append-version="true"></script>
 114}

Methods/Properties

ExecuteAsync()
<ExecuteAsync()