< Summary

Information
Class: AspNetCoreGeneratedDocument.Areas_Studio2_Views_WarehouseMapping_Index
Assembly: OzonOrdersWeb
File(s): /home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Areas/Studio2/Views/WarehouseMapping/Index.cshtml
Line coverage
0%
Covered lines: 0
Uncovered lines: 28
Coverable lines: 28
Total lines: 104
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%210140%
<ExecuteAsync()0%620%

File(s)

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

#LineLine coverage
 1@using OzonDomains.Models
 2@using OzonOrdersWeb.Areas.Studio2.ViewModels.Grid
 3@model List<WarehouseMapping>
 4@{
 05    ViewData["Title"] = $"Связи складов ({Model.Count})";
 06    Layout = "~/Views/Shared/_Layout.cshtml";
 07    var rows = Model.Select(m => new
 08    {
 09        id = m.Id,
 010        clientName = m.OzonClientId.HasValue ? m.OzonClient?.Name : "Не указан",
 011        supplierName = m.Supplier?.Name,
 012        bitrixWarehouseName = m.BitrixWarehouseName,
 013        returnBitrixWarehouseName = m.ReturnBitrixWarehouseName,
 014        transitBitrixWarehouseName = m.TransitBitrixWarehouseName,
 015        ozonWarehouseName = m.OzonWarehouseName,
 016        ozonWarehouseId = m.OzonWarehouseId,
 017        deliveryType = m.DeliveryType,
 018        priority = m.Priority
 019    });
 20}
 21
 022@await Html.PartialAsync("_BsxGridShell")
 23
 24<div class="container-fluid py-3 bsx-surface">
 25    <div class="app-section-hero app-section-hero--import d-flex flex-wrap justify-content-between align-items-start gap
 26        <div>
 27            <h1><i class="fas fa-link me-2 text-primary"></i>Связи складов</h1>
 28            <div class="subtitle">Соответствие складов 1С (Bitrix) и Ozon по клиентам</div>
 29            <div class="subtitle-help mt-1">
 30                Название склада в Ozon и в 1С обычно разное — по этой связи система понимает, какой физический склад 1С
 31                стоит за складом Ozon у конкретного клиента: для создания документов в 1С и синхронизации остатков с Bit
 32                Если на один склад Ozon заведено несколько связей — используется запись с наименьшим приоритетом.
 33            </div>
 34            <div class="app-section-hero__quick-links">
 35                <a asp-area="Studio2" asp-controller="Warehouse" asp-action="Index"><i class="fas fa-warehouse"></i>Скла
 36                <a asp-area="Studio2" asp-controller="InterpartsWarehouseLogin" asp-action="Index"><i class="fas fa-user
 37                <a asp-area="Studio2" asp-controller="InterpartsSutCurrency" asp-action="Index"><i class="fas fa-exchang
 38                <a asp-area="Studio2" asp-controller="ExcludedBitrixWarehouse" asp-action="Index"><i class="fas fa-ban">
 39            </div>
 40        </div>
 41        <div class="d-flex flex-wrap gap-2 align-items-center">
 42            <div class="bsx-dir-stats">
 043                <span class="bsx-dir-stat">Всего <b>@Model.Count</b></span>
 044                <span class="bsx-dir-stat">Клиентов <b>@Model.Select(m => m.OzonClientId).Distinct().Count()</b></span>
 45            </div>
 46            <a asp-action="Create" class="btn btn-primary btn-sm"><i class="fas fa-plus me-1"></i>Новая связь</a>
 47        </div>
 48    </div>
 49
 050    @if (TempData["SuccessMessage"] is string successMessage)
 51    {
 52        <div class="alert alert-success alert-dismissible fade show" role="alert">
 053            <i class="fas fa-check-circle me-2"></i>@successMessage
 54            <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
 55        </div>
 56    }
 057    @if (TempData["ErrorMessage"] is string errorMessage)
 58    {
 59        <div class="alert alert-danger alert-dismissible fade show" role="alert">
 060            <i class="fas fa-exclamation-circle me-2"></i>@errorMessage
 61            <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
 62        </div>
 63    }
 64
 065    @await Html.PartialAsync("_BsxDirectoryGrid", new BsxDirectoryGridViewModel("warehouseMapping", "Связи складов", "fa
 066        "Фильтры в колонках: клиент, поставщик, склады 1С и Ozon, тип доставки. Двойной клик — страница изменения."))
 67</div>
 68
 69@section Scripts {
 70<script src="~/js/Studio2/Grid/bsx-directory.js" asp-append-version="true"></script>
 71<script>
 72    (function () {
 73        const D = window.BsxDirectory;
 074        const editUrl = id => '@Url.Action("Edit", "WarehouseMapping", new { area = "Studio2" })/' + id;
 75        const text = p => p.value || '—';
 76        const empty = { '': '(не задан)' };
 77
 78        D.grid({
 79            key: 'dirWarehouseMapping',
 80            prefix: 'warehouseMapping',
 081            rows: @Json.Serialize(rows),
 82            rowUrl: r => editUrl(r.id),
 83            columnDefs: [
 84                D.numCol({ field: 'id', headerName: 'ID', width: 80, valueFormatter: p => '#' + p.value }),
 85                D.setCol({ field: 'clientName', headerName: 'Клиент', headerTooltip: 'Клиент Ozon', width: 190, filterPa
 86                D.setCol({ field: 'supplierName', headerName: 'Поставщик', width: 170, filterParams: { labels: empty }, 
 87                D.setCol({ field: 'bitrixWarehouseName', headerName: 'Склад 1С', headerTooltip: 'Склад Bitrix / 1С', wid
 88                D.setCol({ field: 'returnBitrixWarehouseName', headerName: 'Склад возврата', headerTooltip: 'Склад возвр
 89                D.setCol({ field: 'transitBitrixWarehouseName', headerName: 'Транзитный склад', headerTooltip: 'Транзитн
 90                D.setCol({ field: 'ozonWarehouseName', headerName: 'Склад Ozon', flex: 1, minWidth: 200 }),
 91                { field: 'ozonWarehouseId', headerName: 'ID Ozon', headerTooltip: 'Warehouse ID', width: 150, cellClass:
 92                D.setCol({ field: 'deliveryType', headerName: 'Доставка', headerTooltip: 'Тип доставки', width: 150, fil
 93                D.numCol({ field: 'priority', headerName: 'Приоритет', headerTooltip: 'Меньше — важнее', width: 110,
 94                  cellRenderer: p => D.tone(String(p.value), p.value === 0 ? 'accent' : 'muted') }),
 95                D.actionsCol(r => [
 96                    { icon: 'fa-pencil-alt', title: 'Изменить', href: editUrl(r.id) },
 097                    { icon: 'fa-eye', title: 'Детали', kind: 'view', href: '@Url.Action("Details", "WarehouseMapping", n
 098                    { icon: 'fa-trash', title: 'Удалить', kind: 'danger', href: '@Url.Action("Delete", "WarehouseMapping
 99                ], { width: 130 })
 100            ]
 101        });
 102    })();
 103</script>
 104}

Methods/Properties

ExecuteAsync()
<ExecuteAsync()