< Summary

Information
Class: AspNetCoreGeneratedDocument.Areas_Studio2_Views_EmailRoutingResults_UploadedFiles
Assembly: OzonOrdersWeb
File(s): /home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Areas/Studio2/Views/EmailRoutingResults/UploadedFiles.cshtml
Line coverage
0%
Covered lines: 0
Uncovered lines: 20
Coverable lines: 20
Total lines: 150
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%600240%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Areas/Studio2/Views/EmailRoutingResults/UploadedFiles.cshtml

#LineLine coverage
 1@using OzonOrdersWeb.Areas.Studio2.ViewModels.Grid
 2@model OzonOrdersWeb.Areas.Studio2.ViewModels.EmailRouting.EmailRoutingResultsViewModel
 3
 4@{
 05    ViewData["Title"] = "Загруженные файлы — Email → Dropbox";
 6}
 7
 8<link rel="stylesheet" href="~/css/Studio2/EmailRouting/email-routing-results-index.css" asp-append-version="true"/>
 9
 010@await Html.PartialAsync("_BsxGridShell")
 11
 12<div class="container-fluid err-page 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="bi bi-cloud-upload-fill text-primary me-2"></i>Загруженные файлы</h1>
 16            <div class="subtitle">Вложения, сохранённые из почты в Dropbox</div>
 17            <div class="subtitle-help">Проверьте отправителя, правило импорта и путь сохранения файла перед повторной об
 18            <div class="app-section-hero__quick-links">
 19                <a asp-action="Index"><i class="bi bi-list-check"></i>Результаты импорта</a>
 20                <a asp-area="Studio2" asp-controller="EmailRoutingRules" asp-action="Index"><i class="bi bi-funnel"></i>
 21                <a asp-area="Studio2" asp-controller="FileUploadRecords" asp-action="Index"><i class="bi bi-clock-histor
 22            </div>
 23        </div>
 24        <div class="err-hero-actions">
 25        <a asp-action="Index" class="btn btn-outline-secondary btn-sm">
 26            <i class="bi bi-arrow-left"></i> К результатам
 27        </a>
 028            <div class="bsx-dir-stats"><span class="bsx-dir-stat">Всего <b>@Model.TotalCount.ToString("N0")</b></span></
 29        </div>
 30    </div>
 31
 32    <div class="row g-4">
 33
 34        <div class="col-xl-8">
 035            @await Html.PartialAsync("_BsxDirectoryGrid", new BsxDirectoryGridViewModel("errUploaded", "Загруженные файл
 036                "Фильтры и сортировка — по всем загруженным вложениям на сервере. Двойной клик — подробности."))
 37        </div>
 38
 39        <!-- ═══ Правая колонка: дерево папок Dropbox ═══ -->
 40        <div class="col-xl-4">
 41            <div class="card">
 42                <div class="card-header fw-semibold">
 43                    <i class="bi bi-folder2-open text-warning"></i> Папки Dropbox
 44                </div>
 45                <div class="card-body">
 46                    <!-- Поле пути к базовой папке -->
 47                    <form method="get" asp-action="UploadedFiles" class="mb-3">
 48                        <div class="input-group input-group-sm">
 49                            <span class="input-group-text"><i class="bi bi-folder"></i></span>
 50                            <input type="text" name="dropboxFolder" class="form-control font-monospace"
 51                                   placeholder="/Приложения/Studio2"
 52                                   value="@Model.DropboxBaseFolder"/>
 53                            <button class="btn btn-primary" type="submit">
 54                                <i class="bi bi-arrow-right-circle"></i> Открыть
 55                            </button>
 56                        </div>
 57                        <div class="form-text">Введите путь к корневой папке в Dropbox для просмотра</div>
 58                    </form>
 59
 060                    @if (!string.IsNullOrWhiteSpace(Model.DropboxBaseFolder))
 61                    {
 062                        @if (!Model.DropboxFolders.Any())
 63                        {
 64                            <div class="alert alert-warning small">
 65                                <i class="bi bi-exclamation-triangle"></i>
 66                                Папка не найдена или пуста. Проверьте путь.
 67                            </div>
 68                        }
 69                        else
 70                        {
 71                            <div class="accordion" id="dropboxFolderAccordion">
 072                                @{int folderIdx = 0;}
 073                                @foreach (var folder in Model.DropboxFolders)
 74                                {
 075                                    var collapseId = $"dropboxFolder_{folderIdx}";
 076                                    folderIdx++;
 77                                    <div class="accordion-item">
 78                                        <h2 class="accordion-header">
 79                                            <button class="accordion-button collapsed py-2 small" type="button"
 80                                                    data-bs-toggle="collapse"
 081                                                    data-bs-target="#@collapseId">
 82                                                <i class="bi bi-folder-fill text-warning me-2"></i>
 083                                                <strong>@folder.Key</strong>
 084                                                <span class="badge bg-secondary ms-2">@folder.Value.Count файлов</span>
 85                                            </button>
 86                                        </h2>
 87                                        <div id="@collapseId" class="accordion-collapse collapse">
 88                                            <div class="accordion-body p-2">
 089                                                @if (!folder.Value.Any())
 90                                                {
 91                                                    <div class="text-muted small">Папка пуста</div>
 92                                                }
 93                                                else
 94                                                {
 95                                                    <ul class="list-group list-group-flush">
 096                                                        @foreach (var file in folder.Value)
 97                                                        {
 98                                                            <li class="list-group-item list-group-item-action px-2 py-1 
 99                                                                <span class="text-truncate me-2" title="@file.Key">
 100                                                                    <i class="bi bi-file-earmark text-muted"></i>
 0101                                                                    @file.Key
 102                                                                </span>
 103                                                                <a href="@file.Value" target="_blank"
 104                                                                   class="btn btn-xs btn-outline-primary flex-shrink-0"
 105                                                                   style="font-size:0.7rem;padding:1px 6px"
 106                                                                   title="Скачать">
 107                                                                    <i class="bi bi-download"></i>
 108                                                                </a>
 109                                                            </li>
 110                                                        }
 111                                                    </ul>
 112                                                }
 113                                            </div>
 114                                        </div>
 115                                    </div>
 116                                }
 117                            </div>
 118                        }
 119                    }
 120                    else
 121                    {
 122                        <div class="text-muted small">
 123                            <i class="bi bi-arrow-up-circle"></i>
 124                            Введите путь к папке Dropbox выше, чтобы просмотреть её содержимое.
 125                            <hr/>
 126                            <strong>Примеры правил из базы:</strong>
 127                            <ul class="mt-1 mb-0">
 0128                                @foreach (var rule in Model.AvailableRules.Take(5))
 129                                {
 130                                    <li>
 131                                        <button type="button" class="btn btn-link btn-sm p-0 text-start small"
 132                                                onclick="document.querySelector('[name=dropboxFolder]').value='@rule.Dro
 0133                                            @rule.DropboxFolderTemplate
 134                                        </button>
 0135                                        <span class="text-muted">(правило: @rule.Name)</span>
 136                                    </li>
 137                                }
 138                            </ul>
 139                        </div>
 140                    }
 141                </div>
 142            </div>
 143        </div>
 144    </div>
 145</div>
 146
 147@section Scripts {
 148<script src="~/js/Studio2/Grid/bsx-directory.js" asp-append-version="true"></script>
 149<script src="~/js/Studio2/EmailRouting/email-routing-results-grids.js" asp-append-version="true"></script>
 150}

Methods/Properties

ExecuteAsync()