< Summary

Information
Class: AspNetCoreGeneratedDocument.Areas_Studio2_Views_WarehouseStock_Index
Assembly: OzonOrdersWeb
File(s): /home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Areas/Studio2/Views/WarehouseStock/Index.cshtml
Line coverage
0%
Covered lines: 0
Uncovered lines: 19
Coverable lines: 19
Total lines: 90
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 20
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%420200%
<ExecuteAsync()100%210%
<ExecuteAsync()100%210%

File(s)

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

#LineLine coverage
 1@using System.Text.Json
 2@using OzonOrdersWeb.Areas.Studio2.ViewModels.Grid
 3@model OzonOrdersWeb.Areas.Studio2.ViewModels.WarehouseStock.WarehouseStockIndexViewModel
 4@{
 05    ViewData["Title"] = "Остатки 1С (Google Sheet)";
 06    var isAdmin = User.IsInRole("Admin");
 07    var initial = new { article = Model.Article, manufacturer = Model.Manufacturer, warehouse = Model.Warehouse, minQty 
 8}
 9
 10<link rel="stylesheet" href="~/css/Studio2/WarehouseStock/warehouse-stock.css" asp-append-version="true" />
 11
 012@await Html.PartialAsync("_BsxGridShell")
 13
 014<div class="container-fluid py-3 bsx-surface ws-page" data-initial="@JsonSerializer.Serialize(initial)">
 15    <section class="app-section-hero app-section-hero--import d-flex flex-wrap justify-content-between align-items-start
 16        <div>
 17            <h1><i class="fas fa-warehouse me-2 text-primary"></i>Остатки 1С (Google Sheet)</h1>
 18            <div class="subtitle">Снимок остатков, себестоимости и цен из Google Sheet по складам M2, M1, M3, B1, B2.</d
 19            <div class="subtitle-help">
 20                Поиск, фильтры и сортировка работают по всему снимку на сервере. Двойной клик по строке — карточка товар
 21                Ctrl+F — поиск, Esc — сбросить поиск.
 22            </div>
 23            <div class="app-section-hero__quick-links">
 24                <a asp-area="Studio2" asp-controller="BitrixStock" asp-action="Index"><i class="fas fa-boxes-stacked"></
 25                <a asp-area="Studio2" asp-controller="OneCStock" asp-action="Index"><i class="fas fa-database"></i> Оста
 026                @if (isAdmin)
 27                {
 28                    <a href="/Studio2/JobLogs?tab=stocksync"><i class="fas fa-clipboard-list"></i> Логи синхронизации</a
 29                    <a href="https://docs.google.com/spreadsheets/d/1y2jctI7b783supzaJh1EUZq4S3Ggpq2Qm3prk6MlKWI/edit?us
 30                       target="_blank" rel="noopener noreferrer"><i class="fas fa-table"></i> Google Sheet</a>
 31                }
 32            </div>
 33        </div>
 34        <div class="d-flex flex-column align-items-end gap-2">
 35            <div class="bsx-dir-stats" aria-live="polite">
 036                <span class="bsx-dir-stat">Позиций в снимке <b>@Model.TotalCount.ToString("N0")</b></span>
 037                @if (Model.LastSyncedAtUtc is { } syncedAt)
 38                {
 039                    <span class="bsx-dir-stat">Обновлено (МСК) <b>@syncedAt.AddHours(3).ToString("dd.MM.yyyy HH:mm")</b>
 40                }
 41            </div>
 042            @if (isAdmin)
 43            {
 44                <div class="d-flex flex-wrap justify-content-end gap-2">
 45                    <form method="post" asp-area="Studio2" asp-controller="WarehouseStock" asp-action="SyncGoogle">
 046                        @Html.AntiForgeryToken()
 47                        <button type="submit" class="btn btn-sm btn-outline-secondary"><i class="fas fa-sync-alt me-1"><
 48                    </form>
 49                    <form method="post" enctype="multipart/form-data" asp-area="Studio2" asp-controller="WarehouseStock"
 050                        @Html.AntiForgeryToken()
 51                        <input type="file" name="excelFile" id="wsExcelFile" accept=".xlsx" hidden />
 52                        <button type="button" class="btn btn-sm btn-outline-secondary" id="wsExcelBtn"><i class="fas fa-
 53                    </form>
 54                </div>
 55            }
 56        </div>
 57    </section>
 58
 059    @if (TempData["Success"] is string ok)
 60    {
 061        <div class="alert alert-success py-2">@ok</div>
 62    }
 063    @if (TempData["Error"] is string err)
 64    {
 065        <div class="alert alert-danger py-2">@err</div>
 66    }
 67
 068    @await Html.PartialAsync("_BsxDirectoryGrid", new BsxDirectoryGridViewModel("ws", "Остатки по складам", "fa-warehous
 069        "Артикул, производитель, наименование…",
 070        "Быстрые фильтры — «в наличии» на складе; точные условия — в фильтре колонки (число, набор значений со счётчикам
 71
 72    <div class="modal fade" id="wsCardModal" tabindex="-1" aria-labelledby="wsCardTitle" aria-hidden="true">
 73        <div class="modal-dialog modal-lg modal-dialog-scrollable">
 74            <div class="modal-content">
 75                <div class="modal-header">
 76                    <h5 class="modal-title text-truncate" id="wsCardTitle"></h5>
 77                    <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Закрыть"></button>
 78                </div>
 79                <div class="modal-body">
 80                    <dl class="ws-card" id="wsCardBody"></dl>
 81                </div>
 82            </div>
 83        </div>
 84    </div>
 85</div>
 86
 87@section Scripts {
 88<script src="~/js/Studio2/Grid/bsx-directory.js" asp-append-version="true"></script>
 89<script src="~/js/Studio2/WarehouseStock/warehouse-stock.js" asp-append-version="true"></script>
 90}