< Summary

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

File(s)

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

#LineLine coverage
 1@using OzonDomains.Models.AccessControl
 2@model List<DataScopeSet>
 3
 4@{
 05    ViewData["Title"] = "Наборы ограничений данных";
 06    Layout = "_AdminLayout";
 07    ViewData["Breadcrumb"] = new List<(string, string?)> { ("Администрирование", null), ("Наборы ограничений", null) };
 8}
 9
 10@section PageActions {
 11    <a asp-action="Create" class="btn btn-primary">
 12        <i class="ti ti-plus me-1"></i>Новый набор
 13    </a>
 14}
 15
 016@if (!Model.Any())
 17{
 18    <div class="empty">
 19        <div class="empty-icon"><i class="ti ti-filter-off" style="font-size:3rem;color:#ccc"></i></div>
 20        <p class="empty-title">Наборов ещё нет</p>
 21        <p class="empty-subtitle text-muted">Создайте набор ограничений и привяжите его к профилю доступа.</p>
 22        <div class="empty-action">
 23            <a asp-action="Create" class="btn btn-primary"><i class="ti ti-plus me-1"></i>Создать набор</a>
 24        </div>
 25    </div>
 26}
 27else
 28{
 29    <div class="card">
 30        <div class="table-responsive">
 31            <table class="table table-vcenter table-hover card-table">
 32                <thead>
 33                    <tr>
 34                        <th>Название</th>
 35                        <th>Описание</th>
 36                        <th class="text-center" style="width:120px">Ограничений</th>
 37                        <th class="text-center" style="width:120px">Профилей</th>
 38                        <th style="width:130px" class="text-center">Действия</th>
 39                    </tr>
 40                </thead>
 41                <tbody>
 042                @foreach (var set in Model)
 43                {
 44                    <tr>
 45                        <td>
 046                            <div class="fw-semibold">@set.Name</div>
 047                            <div class="text-muted small">Создан: @set.CreatedAt.ToLocalTime().ToString("dd.MM.yyyy")</d
 48                        </td>
 049                        <td class="text-muted">@(set.Description ?? "—")</td>
 50                        <td class="text-center">
 51                            <span class="badge @(set.Items.Any() ? "bg-orange-lt" : "bg-green-lt")">
 052                                @(set.Items.Any() ? set.Items.Count.ToString() : "нет")
 53                            </span>
 54                        </td>
 55                        <td class="text-center">
 056                            <span class="badge bg-blue-lt">@set.AccessProfiles.Count</span>
 57                        </td>
 58                        <td class="text-center">
 59                            <div class="btn-group btn-group-sm">
 060                                <a asp-action="Details" asp-route-id="@set.Id"
 61                                   class="btn btn-outline-primary" title="Управление ограничениями">
 62                                    <i class="ti ti-list-details"></i>
 63                                </a>
 064                                <a asp-action="Edit" asp-route-id="@set.Id"
 65                                   class="btn btn-outline-secondary" title="Изменить">
 66                                    <i class="ti ti-edit"></i>
 67                                </a>
 68                                <button class="btn btn-outline-danger" title="Удалить"
 69                                        data-bs-toggle="modal" data-bs-target="#deleteModal"
 070                                        data-id="@set.Id" data-name="@set.Name">
 71                                    <i class="ti ti-trash"></i>
 72                                </button>
 73                            </div>
 74                        </td>
 75                    </tr>
 076                }
 77                </tbody>
 78            </table>
 79        </div>
 80    </div>
 81}
 82
 83<!-- Delete Modal -->
 84<div class="modal modal-blur fade" id="deleteModal" tabindex="-1">
 85    <div class="modal-dialog modal-sm modal-dialog-centered">
 86        <div class="modal-content">
 87            <div class="modal-body">
 88                <div class="modal-title">Удалить набор?</div>
 89                <div class="text-muted mt-1">
 90                    <strong id="delName"></strong> будет удалён со всеми ограничениями.
 91                    Профили, использующие этот набор, потеряют его.
 92                </div>
 93            </div>
 94            <div class="modal-footer">
 95                <button type="button" class="btn btn-link link-secondary me-auto" data-bs-dismiss="modal">Отмена</button
 96                <form asp-action="Delete" method="post" id="deleteForm">
 97                    <input type="hidden" name="id" id="delId"/>
 98                    <button type="submit" class="btn btn-danger">Удалить</button>
 99                </form>
 100            </div>
 101        </div>
 102    </div>
 103</div>
 104
 105@section Scripts {
 106<script>
 107document.getElementById('deleteModal').addEventListener('show.bs.modal', function(e) {
 108    const btn = e.relatedTarget;
 109    document.getElementById('delId').value = btn.dataset.id;
 110    document.getElementById('delName').textContent = btn.dataset.name;
 111});
 112</script>
 113}

Methods/Properties

ExecuteAsync()