< Summary

Information
Class: AspNetCoreGeneratedDocument.Areas_Studio2_Views_InterpartsWarehouseLogin_Index
Assembly: OzonOrdersWeb
File(s): /home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Areas/Studio2/Views/InterpartsWarehouseLogin/Index.cshtml
Line coverage
0%
Covered lines: 0
Uncovered lines: 12
Coverable lines: 12
Total lines: 71
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 12
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/InterpartsWarehouseLogin/Index.cshtml

#LineLine coverage
 1@using OzonOrdersWeb.Areas.Studio2.ViewModels.Grid
 2@using OzonOrdersWeb.Areas.Studio2.ViewModels.Warehouse
 3@model InterpartsWarehouseLoginPageViewModel
 4@{
 05    ViewData["Title"] = "Interparts логины по складам";
 06    Layout = "~/Views/Shared/_Layout.cshtml";
 07    var rows = Model.Rows.Select(r => new { id = r.WarehouseId, warehouseName = r.WarehouseName, login = r.Login });
 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-user-cog me-2 text-primary"></i>Interparts логины по складам</h1>
 16            <div class="subtitle">Логин учётной системы Interparts, под которым проводятся документы склада</div>
 17            <div class="app-section-hero__quick-links">
 18                <a asp-area="Studio2" asp-controller="WarehouseMapping" asp-action="Index"><i class="fas fa-link"></i>Bi
 19                <a asp-area="Studio2" asp-controller="InterpartsSutCurrency" asp-action="Index"><i class="fas fa-exchang
 20                <a asp-area="Studio2" asp-controller="Warehouse" asp-action="Index"><i class="fas fa-warehouse"></i>Скла
 21            </div>
 22        </div>
 23        <button type="button" class="btn btn-primary btn-sm" id="ipLoginSave" disabled><i class="fas fa-save me-1"></i>С
 24    </div>
 25
 026    @if (TempData["SuccessMessage"] != null)
 27    {
 028        <div class="alert alert-success">@TempData["SuccessMessage"]</div>
 29    }
 030    @if (TempData["ErrorMessage"] != null)
 31    {
 032        <div class="alert alert-danger">@TempData["ErrorMessage"]</div>
 33    }
 34
 035    @await Html.PartialAsync("_BsxDirectoryGrid", new BsxDirectoryGridViewModel("ipLogin", "Склады", "fa-warehouse", "По
 036        "Клик по логину — правка; изменённые строки сохраняются кнопкой «Сохранить изменения»."))
 37</div>
 38
 39@section Scripts {
 40<script src="~/js/Studio2/Grid/bsx-directory.js" asp-append-version="true"></script>
 41<script>
 42    (function () {
 43        const D = window.BsxDirectory;
 44        const saveBtn = document.getElementById('ipLoginSave');
 45        const grid = D.grid({
 46            key: 'dirIpLogin',
 47            prefix: 'ipLogin',
 048            rows: @Json.Serialize(rows),
 49            gridOptions: { onCellValueChanged: e => { e.data.__dirty = true; e.api.redrawRows({ rowNodes: [e.node] }); s
 50            columnDefs: [
 51                D.numCol({ field: 'id', headerName: 'ID', width: 90 }),
 52                { field: 'warehouseName', headerName: 'Склад', flex: 1, minWidth: 240, sort: 'asc', cellClass: 'fw-semib
 53                D.setCol({ field: 'login', headerName: 'Interparts Login', width: 320, editable: true, cellEditorParams:
 54            ]
 55        });
 56        // Сохраняется весь список (как прежняя форма Save): сервер обновляет логины всех складов.
 57        saveBtn.addEventListener('click', () => {
 58            const fields = {};
 59            let i = 0;
 60            grid.api().forEachNode(n => {
 61                fields[`Rows[${i}].WarehouseId`] = n.data.id;
 62                fields[`Rows[${i}].WarehouseName`] = n.data.warehouseName;
 63                fields[`Rows[${i}].Login`] = n.data.login || '';
 64                i++;
 65            });
 66            saveBtn.disabled = true;
 067            D.submit('@Url.Action("Save", "InterpartsWarehouseLogin", new { area = "Studio2" })', fields);
 68        });
 69    })();
 70</script>
 71}

Methods/Properties

ExecuteAsync()
<ExecuteAsync()