< Summary

Information
Class: AspNetCoreGeneratedDocument.Areas_Studio2_Views_Producers_Index
Assembly: OzonOrdersWeb
File(s): /home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Areas/Studio2/Views/Producers/Index.cshtml
Line coverage
0%
Covered lines: 0
Uncovered lines: 15
Coverable lines: 15
Total lines: 101
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 24
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%506220%
<ExecuteAsync()0%620%

File(s)

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

#LineLine coverage
 1@using OzonOrdersWeb.Areas.Studio2.ViewModels.Grid
 2@{
 03    var total = (int)(ViewBag.TotalCount ?? 0);
 04    var withoutPrefix = (int)(ViewBag.WithoutMarketPrefix ?? 0);
 05    ViewData["Title"] = $"Производители ET ({total} шт.)";
 06    Layout = "~/Views/Shared/_Layout.cshtml";
 7}
 8
 09@await Html.PartialAsync("_BsxGridShell")
 10
 11<div class="container-fluid py-3 bsx-surface">
 12    <div class="app-section-hero app-section-hero--import d-flex flex-wrap justify-content-between align-items-start gap
 13        <div>
 14            <h1><i class="fas fa-industry me-2 text-primary"></i>Производители ET</h1>
 15            <div class="subtitle">Справочник производителей ET, Market Prefix и интеграция с TecDoc</div>
 16            <div class="subtitle-help">
 17                <strong>Код (Market Prefix)</strong> — префикс бренда в offer_id Ozon; для коллизий групп <code>realId</
 18                используется справочник «Производители (Ozon код)». Код и название правятся в таблице — клик по ячейке,
 19                затем «Сохранить» в строке. «Обновить из API» перечитывает запись из каталога ET (условие Id = RealId).
 20            </div>
 21            <div class="app-section-hero__quick-links">
 22                <a asp-area="Studio2" asp-controller="Manufacturers" asp-action="Index"><i class="fas fa-tag"></i>Произв
 23                <a asp-area="Studio2" asp-controller="Supplier" asp-action="Index"><i class="fas fa-truck-loading"></i>П
 24            </div>
 25        </div>
 26        <div class="d-flex flex-wrap gap-2 align-items-center">
 27            <div class="bsx-dir-stats">
 028                <span class="bsx-dir-stat">Всего <b>@total.ToString("N0")</b></span>
 029                <span class="bsx-dir-stat">Без кода <b>@withoutPrefix.ToString("N0")</b></span>
 30            </div>
 31            <form asp-area="Studio2" asp-controller="Producers" asp-action="UpdateByInputFromApi" method="post" class="d
 32                <input type="text" name="producerIdInput" class="form-control form-control-sm" placeholder="ID производи
 33                <button type="submit" class="btn btn-sm btn-outline-primary text-nowrap"><i class="fas fa-sync-alt me-1"
 34            </form>
 35        </div>
 36    </div>
 37
 038    @if (TempData["SuccessMessage"] is string successMsg)
 39    {
 40        <div class="alert alert-success alert-dismissible fade show" role="alert">
 041            <i class="fas fa-check-circle me-2"></i>@successMsg
 42            <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
 43        </div>
 44    }
 045    @if (TempData["ErrorMessage"] is string errorMsg)
 46    {
 47        <div class="alert alert-danger alert-dismissible fade show" role="alert">
 048            <i class="fas fa-exclamation-circle me-2"></i>@errorMsg
 49            <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
 50        </div>
 51    }
 52
 053    @await Html.PartialAsync("_BsxDirectoryGrid", new BsxDirectoryGridViewModel("producer", "Производители", "fa-industr
 054        "Фильтры и сортировка — по всему справочнику на сервере. Двойной клик — страница изменения."))
 55</div>
 56
 57@section Scripts {
 58<script src="~/js/Studio2/Grid/bsx-directory.js" asp-append-version="true"></script>
 59<script>
 60    (function () {
 61        const D = window.BsxDirectory;
 62        const esc = BsxGrid.esc;
 063        const editUrl = id => '@Url.Action("Edit", "Producers", new { area = "Studio2" })/' + id;
 64        const txt = { filter: 'agTextColumnFilter' };
 65        const num = { filter: 'agNumberColumnFilter', type: 'rightAligned' };
 66        const text = p => p.value || '—';
 67
 68        D.serverGrid({
 69            key: 'dirProducer',
 70            prefix: 'producer',
 71            url: '/Studio2/Producers/grid',
 72            facetsUrl: '/Studio2/Producers/grid/facets',
 73            rowUrl: r => editUrl(r.id),
 74            onSave: r => D.submit(editUrl(r.id), {
 75                Id: r.id, RealId: r.realId, Prefix: r.prefix ?? '', Name: r.name ?? '', Address: r.address ?? '', Www: r
 76                Rating: r.rating, ExistName: r.existName ?? '', ExistId: r.existId, Domain: r.domain ?? '',
 77                TecdocSupplierId: r.tecdocSupplierId, MarketPrefix: r.marketPrefix ?? ''
 78            }),
 79            columnDefs: [
 80                Object.assign({ field: 'marketPrefix', headerName: 'Код', headerTooltip: 'Market Prefix', width: 130, ed
 81                Object.assign({ field: 'name', headerName: 'Производитель', width: 240, editable: true }, txt),
 82                Object.assign({ field: 'prefix', headerName: 'Префикс', width: 120 }, txt),
 83                Object.assign({ field: 'address', headerName: 'Адрес', flex: 1, minWidth: 180, tooltipField: 'address', 
 84                Object.assign({ field: 'www', headerName: 'Сайт', width: 190, tooltipField: 'www',
 85                  cellRenderer: p => p.value ? `<a href="${esc(p.value)}" target="_blank" rel="noopener">${esc(p.value)}
 86                Object.assign({ field: 'existName', headerName: 'Настоящее имя', width: 180, valueFormatter: text }, txt
 87                Object.assign({ field: 'domain', headerName: 'Домен', width: 150, valueFormatter: text }, txt),
 88                Object.assign({ field: 'rating', headerName: 'Рейтинг', width: 110 }, num),
 89                Object.assign({ field: 'id', headerName: 'ID', width: 100, sort: null }, num),
 90                Object.assign({ field: 'realId', headerName: 'Real ID', width: 110 }, num),
 91                Object.assign({ field: 'tecdocSupplierId', headerName: 'TecDoc', headerTooltip: 'TecDoc Supplier Id', wi
 92                D.actionsCol(r => [
 93                    { icon: 'fa-pencil-alt', title: 'Изменить', href: editUrl(r.id) },
 94                    { icon: 'fa-sync-alt', title: 'Обновить из API', kind: 'view', post: true,
 095                      href: '@Url.Action("UpdateFromApi", "Producers", new { area = "Studio2" })', fields: { id: r.id } 
 96                ], { width: 160 })
 97            ]
 98        });
 99    })();
 100</script>
 101}

Methods/Properties

ExecuteAsync()
<ExecuteAsync()