< Summary

Information
Class: AspNetCoreGeneratedDocument.Areas_Studio2_Views_Manufacturers_Index
Assembly: OzonOrdersWeb
File(s): /home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Areas/Studio2/Views/Manufacturers/Index.cshtml
Line coverage
0%
Covered lines: 0
Uncovered lines: 13
Coverable lines: 13
Total lines: 75
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 10
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%110100%
<ExecuteAsync()0%620%

File(s)

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

#LineLine coverage
 1@using OzonDomains.Models
 2@using OzonOrdersWeb.Areas.Studio2.ViewModels.Grid
 3@model List<Manufacturer>
 4@{
 05    ViewData["Title"] = $"Производители Ozon ({Model.Count} шт.)";
 06    Layout = "~/Views/Shared/_Layout.cshtml";
 07    var rows = Model.Select(m => new { id = m.Id, code = m.Code, name = m.Name, etProduserId = m.EtProduserId });
 8}
 9
 010@await Html.PartialAsync("_BsxGridShell")
 11
 12<div class="container-fluid py-3 bsx-surface">
 13    <div class="app-section-hero app-section-hero--import d-flex flex-wrap justify-content-between align-items-start gap
 14        <div>
 15            <h1><i class="fas fa-tag me-2 text-primary"></i>Производители (Ozon код)</h1>
 16            <div class="subtitle">Справочник кодов производителей для формирования offer_id в Ozon</div>
 17            <div class="subtitle-help">
 18                Краткий <strong>код</strong> (MHL, KNT…) подставляется в артикул/offer_id при выгрузке на Ozon.
 19                <strong>ET ID</strong> связывает запись с каталогом Etalon. Код, название и ET ID правятся прямо в табли
 20                клик по ячейке, затем «Сохранить» в строке.
 21            </div>
 22            <div class="app-section-hero__quick-links">
 23                <a asp-area="Studio2" asp-controller="Producers" asp-action="Index"><i class="fas fa-industry"></i>Произ
 24                <a asp-area="Studio2" asp-controller="Supplier" asp-action="Index"><i class="fas fa-truck-loading"></i>П
 25                <a asp-area="Studio2" asp-controller="BitrixStock" asp-action="Index"><i class="fas fa-boxes"></i>Синхро
 26            </div>
 27        </div>
 28        <div class="d-flex flex-wrap gap-2 align-items-center">
 29            <div class="bsx-dir-stats">
 030                <span class="bsx-dir-stat">Всего <b>@Model.Count</b></span>
 031                <span class="bsx-dir-stat">Без кода <b>@Model.Count(m => string.IsNullOrWhiteSpace(m.Code))</b></span>
 032                <span class="bsx-dir-stat">Без ET ID <b>@Model.Count(m => m.EtProduserId == null)</b></span>
 33            </div>
 34            <a asp-action="Create" class="btn btn-primary btn-sm"><i class="fas fa-plus me-1"></i>Создать</a>
 35        </div>
 36    </div>
 37
 038    @if (TempData["ErrorMessage"] is string errorMessage)
 39    {
 40        <div class="alert alert-danger alert-dismissible fade show" role="alert">
 041            <i class="fas fa-exclamation-triangle me-2"></i>@errorMessage
 42            <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
 43        </div>
 44    }
 45
 046    @await Html.PartialAsync("_BsxDirectoryGrid", new BsxDirectoryGridViewModel("manufacturer", "Производители", "fa-tag
 047        "Двойной клик по ID — страница изменения."))
 48</div>
 49
 50@section Scripts {
 51<script src="~/js/Studio2/Grid/bsx-directory.js" asp-append-version="true"></script>
 52<script>
 53    (function () {
 54        const D = window.BsxDirectory;
 055        const editUrl = id => '@Url.Action("Edit", "Manufacturers", new { area = "Studio2" })/' + id;
 56        D.grid({
 57            key: 'dirManufacturer',
 58            prefix: 'manufacturer',
 059            rows: @Json.Serialize(rows),
 60            rowUrl: r => editUrl(r.id),
 61            onSave: r => D.submit(editUrl(r.id), { Id: r.id, Code: r.code ?? '', Name: r.name ?? '', EtProduserId: r.etP
 62            columnDefs: [
 63                { field: 'code', headerName: 'Код', width: 150, editable: true, cellClass: 'fw-semibold', valueFormatter
 64                { field: 'name', headerName: 'Название', flex: 1, minWidth: 260, sort: 'asc', editable: true },
 65                D.numCol({ field: 'id', headerName: 'ID', width: 90 }),
 66                D.numCol({ field: 'etProduserId', headerName: 'ET ID', headerTooltip: 'ID производителя в базе ET', widt
 67                  cellEditor: 'agNumberCellEditor', valueFormatter: p => p.value ?? '—' }),
 68                D.setCol({ colId: 'hasEt', headerName: 'Связан с ET', width: 130, hide: true, valueGetter: p => p.data.e
 69                  filterParams: { labels: D.YES_NO_LABELS }, cellRenderer: p => D.yesNo(p.value) }),
 70                D.actionsCol(r => [{ icon: 'fa-pencil-alt', title: 'Изменить', href: editUrl(r.id) }], { width: 160 })
 71            ]
 72        });
 73    })();
 74</script>
 75}

Methods/Properties

ExecuteAsync()
<ExecuteAsync()