< Summary

Information
Class: AspNetCoreGeneratedDocument.Areas_Studio2_Views_WarehouseChangeTransaction_CreateWarehouseChangeTransaction
Assembly: OzonOrdersWeb
File(s): /home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Areas/Studio2/Views/WarehouseChangeTransaction/CreateWarehouseChangeTransaction.cshtml
Line coverage
0%
Covered lines: 0
Uncovered lines: 10
Coverable lines: 10
Total lines: 211
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 28
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%4260%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Areas/Studio2/Views/WarehouseChangeTransaction/CreateWarehouseChangeTransaction.cshtml

#LineLine coverage
 1@using OzonOrdersWeb.ViewModels.OrderViewModels
 2
 3@model MultiplayEditOrderViewModel
 4
 5@{
 06    var orders = Model?.Orders ?? new List<OzonDomains.Models.Order>();
 07    ViewData["Title"] = "Изменение склада";
 08    Layout = "~/Views/Shared/_Layout.cshtml";
 9}
 10
 11<partial name="~/Areas/Studio2/Views/Partials/Transaction/_TransactionPageStyles.cshtml"/>
 12<script src="~/js/Studio2/Orders/CreateOrderToSupplierTransactionV2/generateInfoRow.js"></script>
 13
 14<div id="loadingSpinner" class="spinner-overlay" style="display: none; background-color: inherit;">
 15    <div class="spinner-border text-primary" role="status">
 16        <span class="sr-only"></span>
 17    </div>
 18</div>
 19
 20<div id="messageContainer" class="position-fixed top-0 end-0 p-3" style="z-index: 1050;">
 21    <div id="flashMessage" class="toast" role="alert" aria-live="assertive" aria-atomic="true">
 22        <div class="toast-header">
 23            <strong class="me-auto">Сообщение</strong>
 24            <button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
 25        </div>
 26        <div class="toast-body">
 27            <span id="flashMessageText"></span>
 28        </div>
 29    </div>
 30</div>
 31
 32<div class="modal fade" id="cartModal" tabindex="-1" aria-labelledby="cartModalLabel" aria-hidden="true">
 33    <div class="modal-dialog modal-lg modal-dialog-scrollable">
 34        <div class="modal-content rounded-3 shadow">
 35            <div class="modal-header">
 36                <h5 class="modal-title" id="cartModalLabel">Корзина</h5>
 37                <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Закрыть"></button>
 38            </div>
 39            <div class="modal-body" id="cartModalBody">
 40                <!-- Контент корзины будет вставлен сюда -->
 41            </div>
 42            <div class="modal-footer">
 43                <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Закрыть</button>
 44            </div>
 45        </div>
 46    </div>
 47</div>
 48
 049@if (orders.Count > 0)
 50{
 51    <form asp-area="Studio2" asp-controller="WarehouseChangeTransaction" asp-action="CreateWarehouseChangeTransaction"
 52          id="createOrderForm">
 53        <div asp-validation-summary="ModelOnly" class="text-danger"></div>
 54        <input type="hidden" asp-for="RedirectPage"/>
 55        <input type="hidden" asp-for="TrackingKey"/>
 56
 057        @await Html.PartialAsync("_TransactionTable", Model)
 58
 59        <div class="tx-page-footer">
 60            <div class="input-group">
 61                <span class="input-group-btn">
 62                    <input type="submit" value="Сохранить" class="btn btn-primary"
 63                           data-bs-target="#staticBackdrop"/>
 64                </span>
 65            </div>
 66        </div>
 67    </form>
 68}
 69else
 70{
 071    @await Html.PartialAsync("_TransactionErrorPanel")
 72}
 73
 74<div class="modal fade" id="staticBackdrop" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1"
 75     aria-labelledby="staticBackdropLabel" aria-hidden="true">
 76    <div class="modal-dialog">
 77        <div class="modal-content orders-modal orders-modal--primary">
 78            <div class="modal-header">
 79                <h5 class="modal-title" id="staticBackdropLabel">Создание журнала документов</h5>
 80                <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Закрыть"></button>
 81            </div>
 82            <div class="modal-body">
 83                <div class="d-flex justify-content-center">
 84                    <div class="spinner-border text-primary" role="status">
 85                        <span class="sr-only">.</span>
 86                    </div>
 87                </div>
 88            </div>
 89        </div>
 90    </div>
 91</div>
 92
 93<div>
 94    <a asp-action="Index" class="tx-page-back-link">← К списку заказов</a>
 95</div>
 96
 97<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
 98    <div class="modal-dialog" role="document">
 99        <div class="modal-content orders-modal orders-modal--warning">
 100            <div class="modal-header">
 101                <h4 class="modal-title" id="myModalLabel">Поля не заполнены</h4>
 102            </div>
 103            <div class="modal-body">
 104                Одно или несколько полей не заполнены. Пожалуйста, заполните все поля перед отправкой формы.
 105            </div>
 106        </div>
 107    </div>
 108</div>
 109
 110<!-- Модальное окно для отображения увеличенного изображения -->
 111<div class="modal fade" id="imageModal" tabindex="-1" aria-labelledby="imageModalLabel" aria-hidden="true">
 112    <div class="modal-dialog modal-dialog-centered">
 113        <div class="modal-content">
 114            <div class="modal-header">
 115                <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
 116            </div>
 117            <div class="modal-body text-center">
 118                <img id="modalImage" src="" alt="Full Image" class="img-fluid rounded border">
 119            </div>
 120        </div>
 121    </div>
 122</div>
 123
 124<input type="hidden" id="deletedOrders" name="deletedOrders"/>
 125@* Скрипты таблицы нужны только когда она отрисована; на панели ошибки они падали на пустом DOM *@
 0126@if (orders.Count > 0)
 127{
 0128@await Html.PartialAsync("_TransactionScript", Model)
 129
 130<script>
 131    // Блокируем все поля кроме: статуса и склада отгрузки
 132    // Поля поставщика и засыла блокируются
 133    document.addEventListener('DOMContentLoaded', function () {
 134        var table = document.getElementById('shipmentTable');
 135        if (!table) return;
 136
 137        var inputs = table.querySelectorAll('input, select, textarea');
 138
 139        inputs.forEach(function (el) {
 140            // Разрешаем только: status-select, warehouse-select, universalWarehouseSelect и скрытые поля
 141            if (el.classList.contains('status-select') ||
 142                el.classList.contains('warehouse-select') ||
 143                el.id === 'universalWarehouseSelect' ||
 144                el.type === 'hidden') {
 145                return; // Эти поля остаются доступными
 146            }
 147
 148            el.classList.add('locked-field');
 149
 150            // Для input/textarea используем readOnly, чтобы значение отправлялось в модель
 151            var tag = el.tagName.toLowerCase();
 152            if (tag === 'input' || tag === 'textarea') {
 153                el.readOnly = true;
 154            }
 155
 156            // Для select блокируем взаимодействие, но не отключаем элемент,
 157            // чтобы текущее значение продолжало поститься в модель
 158            if (tag === 'select') {
 159                ['mousedown', 'click', 'keydown', 'focus'].forEach(function (evt) {
 160                    el.addEventListener(evt, function (e) {
 161                        e.preventDefault();
 162                        el.blur();
 163                    }, {capture: true});
 164                });
 165            }
 166        });
 167    });
 168</script>
 169
 170<script>
 171    // Убираем визуальную подсветку и валидацию для полей цены закупки
 172    // так как они не обязательны в этой транзакции
 173    document.addEventListener('DOMContentLoaded', function () {
 174        $('.purchase-price-field').each(function () {
 175            $(this).removeClass('highlight-error is-invalid');
 176            // Убираем обработчики подсветки пустых полей
 177            $(this).off('input');
 178        });
 179    });
 180
 181    $('#createOrderForm').on('submit', function (e) {
 182        e.preventDefault();
 183
 184        if (!validateOzonCancelSelections()) {
 185            return;
 186        }
 187
 188        $('#staticBackdrop').modal('show');
 189        var formData = $(this).serialize();
 190
 0191        formData += '&userName=' + '@(User.Identity?.Name ?? "")' + '&comment=' + encodeURIComponent(txGetCommentFieldVa
 192
 193        $.ajax({
 0194            url: '@Url.Action("CreateWarehouseChangeTransaction", "WarehouseChangeTransaction")',
 195            type: 'POST',
 196            data: formData,
 197            success: function (result) {
 198                if (result.redirectTo) {
 199                    window.location.href = result.redirectTo;
 200                } else {
 201                    alert('Произошла ошибка: не удалось получить URL для перенаправления.');
 202                }
 203            },
 204            error: function (xhr, status, error) {
 205                showFriendlyRequestError(xhr, status, error, 'Ошибка при отправке формы');
 206                console.log(window.extractFriendlyErrorMessage(xhr, status, error));
 207            }
 208        });
 209    });
 210</script>
 211}

Methods/Properties

ExecuteAsync()
<ExecuteAsync()