< Summary

Information
Class: AspNetCoreGeneratedDocument.Areas_Studio2_Views_TransactionJobs_Index
Assembly: OzonOrdersWeb
File(s): /home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Areas/Studio2/Views/TransactionJobs/Index.cshtml
Line coverage
0%
Covered lines: 0
Uncovered lines: 23
Coverable lines: 23
Total lines: 119
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 30
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%156120%
<ExecuteAsync()0%4260%

File(s)

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

#LineLine coverage
 1@using OzonOrdersWeb.Areas.Studio2.ViewModels.Grid
 2@model List<OzonDomains.Models.BackgroundJobSchedule>
 3@{
 04    ViewData["Title"] = "Автоматические транзакции";
 05    var schedules = Model ?? [];
 06    var gridRows = schedules.Select(schedule => new
 07    {
 08        id = schedule.Id,
 09        name = schedule.Name ?? string.Empty,
 010        client = schedule.OzonClient?.Name ?? $"ID: {schedule.OzonClientId}",
 011        jobType = schedule.JobType ?? string.Empty,
 012        cronExpression = schedule.CronExpression ?? string.Empty,
 013        isActive = schedule.IsActive,
 014        lastRunAt = schedule.LastRunTime.HasValue ? DateTime.SpecifyKind(schedule.LastRunTime.Value, DateTimeKind.Utc) :
 015        nextRunAt = schedule.NextRunTime.HasValue ? DateTime.SpecifyKind(schedule.NextRunTime.Value, DateTimeKind.Utc) :
 016    }).ToList();
 017    var jsonOptions = new System.Text.Json.JsonSerializerOptions(System.Text.Json.JsonSerializerDefaults.Web);
 18}
 19
 020@await Html.PartialAsync("_BsxGridShell")
 21<link rel="stylesheet" href="~/css/Studio2/TransactionJobs/transaction-jobs-grid.css" asp-append-version="true"/>
 22
 23<div class="container-fluid py-3 tj-page bsx-surface">
 24    <div class="app-section-hero app-section-hero--import d-flex flex-wrap justify-content-between align-items-start gap
 25        <div>
 26            <h1><i class="fas fa-robot me-2 text-primary"></i>Автоматические транзакции Ozon</h1>
 27            <div class="subtitle">Расписания Hangfire для массового создания транзакций по отчётам Ozon</div>
 28            <div class="subtitle-help">
 29                Pipeline «отчёт Ozon → сопоставление заказов → транзакция». Cron работает по московскому времени;
 30                подробности каждого запуска доступны в журнале.
 31            </div>
 32            <div class="app-section-hero__quick-links">
 33                <a asp-area="Studio2" asp-controller="Job" asp-action="Index"><i class="fas fa-cogs"></i>Фоновые задачи<
 34                <a asp-area="Studio2" asp-controller="JobLogs" asp-action="Index" asp-route-tab="transactions"><i class=
 35                <a href="/hangfire" target="_blank" rel="noopener"><i class="fas fa-external-link-alt"></i>Hangfire</a>
 36            </div>
 37        </div>
 38        <div class="d-flex flex-wrap gap-2 align-items-center">
 39            <div class="bsx-dir-stats">
 040                <span class="bsx-dir-stat">Всего <b>@schedules.Count</b></span>
 041                <span class="bsx-dir-stat">Активно <b>@schedules.Count(s => s.IsActive)</b></span>
 042                <span class="bsx-dir-stat">Отключено <b>@schedules.Count(s => !s.IsActive)</b></span>
 43            </div>
 44            <a asp-action="Create" class="btn btn-primary btn-sm"><i class="fas fa-plus me-1"></i>Создать расписание</a>
 45        </div>
 46    </div>
 47
 48    <div class="bsx-dir-note tj-note">
 49        <i class="fas fa-circle-info"></i>
 50        <div><strong>День отбора — вчера (МСК).</strong> Двойной клик по расписанию открывает редактирование; ручной зап
 51    </div>
 52
 053    @await Html.PartialAsync("_BsxDirectoryGrid", new BsxDirectoryGridViewModel(
 054        "txj", "Расписания", "fa-calendar-alt", "Название, клиент, тип, cron, ID…",
 055        "Фильтры, сортировка и набор колонок сохраняются только для вашей учётной записи."))
 56</div>
 57
 58<div class="modal fade" id="confirmTriggerModal" tabindex="-1" aria-hidden="true">
 59    <div class="modal-dialog modal-dialog-centered">
 60        <div class="modal-content">
 61            <div class="modal-header">
 62                <h5 class="modal-title"><i class="fas fa-play-circle me-2"></i>Подтверждение запуска</h5>
 63                <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Закрыть"></button>
 64            </div>
 65            <div class="modal-body">
 66                <div class="alert alert-info mb-3"><i class="fas fa-info-circle me-2"></i><strong>Задание будет запущено
 67                <dl class="row mb-0">
 68                    <dt class="col-sm-4">Расписание ID:</dt><dd class="col-sm-8" id="confirmScheduleId"></dd>
 69                    <dt class="col-sm-4">Ozon Client:</dt><dd class="col-sm-8"><strong id="confirmClientName"></strong><
 70                    <dt class="col-sm-4">Тип задания:</dt><dd class="col-sm-8"><span class="bsx-tone bsx-tone--accent" i
 71                    <dt class="col-sm-4">День отбора:</dt><dd class="col-sm-8"><strong>Вчера</strong> (МСК)</dd>
 72                    <dt class="col-sm-4">Время запуска:</dt><dd class="col-sm-8" id="confirmStartTime"></dd>
 73                </dl>
 74                <div class="alert alert-warning mb-0 mt-3"><i class="fas fa-exclamation-triangle me-2"></i><small>Загруз
 75            </div>
 76            <div class="modal-footer">
 77                <button type="button" class="btn btn-outline-secondary" data-bs-dismiss="modal"><i class="fas fa-times m
 78                <button type="button" class="btn btn-outline-success" id="confirmTriggerBtn"><i class="fas fa-play me-2"
 79            </div>
 80        </div>
 81    </div>
 82</div>
 83
 84<div class="modal fade" id="jobProgressModal" data-bs-backdrop="static" tabindex="-1" aria-hidden="true">
 85    <div class="modal-dialog modal-dialog-centered modal-xl">
 86        <div class="modal-content job-modal">
 87            <div class="modal-header py-2">
 88                <h5 class="modal-title"><i class="fas fa-sync-alt fa-spin me-2"></i>Обработка транзакций</h5>
 89                <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Закрыть" id="jobModalCloseBt
 90            </div>
 91            <div class="modal-body">
 92                <div class="progress-status"><span id="jobProgressText">Запуск задания...</span><span class="bsx-muted">
 93                <div class="progress mb-2"><div class="progress-bar progress-bar-striped progress-bar-animated" id="jobP
 94                <div class="input-group input-group-sm mb-2">
 95                    <span class="input-group-text"><i class="fas fa-search"></i></span>
 96                    <input type="search" class="form-control" id="jobLogSearch" placeholder="Поиск по логам..." />
 97                    <button type="button" class="btn btn-outline-secondary" id="jobClearLog">Очистить</button>
 98                </div>
 99                <div class="log-console" id="jobLogConsole"></div>
 100                <div class="result-summary d-none" id="jobResultSummary"></div>
 101            </div>
 102            <div class="modal-footer py-2"><button type="button" class="btn btn-outline-secondary" data-bs-dismiss="moda
 103        </div>
 104    </div>
 105</div>
 106
 107@section Scripts {
 108    <script>
 109        window.transactionJobsGridConfig = {
 0110            rows: @Html.Raw(System.Text.Json.JsonSerializer.Serialize(gridRows, jsonOptions)),
 0111            editUrl: @Html.Raw(System.Text.Json.JsonSerializer.Serialize(Url.Action("Edit", "TransactionJobs", new { are
 112            deleteUrl: "/api/transaction-jobs/schedules/__ID__",
 113            triggerUrl: "/api/transaction-jobs/trigger/__ID__"
 114        };
 115    </script>
 116    <script src="~/lib/microsoft-signalr/signalr.min.js" asp-append-version="true"></script>
 117    <script src="~/js/Studio2/Grid/bsx-directory.js" asp-append-version="true"></script>
 118    <script src="~/js/Studio2/TransactionJobs/transaction-jobs-grid.js" asp-append-version="true"></script>
 119}

Methods/Properties

ExecuteAsync()
<ExecuteAsync()