< Summary

Information
Class: AspNetCoreGeneratedDocument.Areas_Studio2_Views_Supplier_Create
Assembly: OzonOrdersWeb
File(s): /home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Areas/Studio2/Views/Supplier/Create.cshtml
Line coverage
0%
Covered lines: 0
Uncovered lines: 14
Coverable lines: 14
Total lines: 220
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 20
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%
<ExecuteAsync()0%620%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Areas/Studio2/Views/Supplier/Create.cshtml

#LineLine coverage
 1@using OzonOrdersWeb.ViewModels.SupplierViewModels
 2
 3@model CreateSupplierViewModel
 4
 5@{
 06    ViewData["Title"] = "Создание поставщика";
 07    Layout = "~/Views/Shared/_Layout.cshtml";
 08    var vm = Model!;
 09    var existingCount = vm.SuppliersList.Count(s => s.Name != "Не указан");
 10}
 11
 12<link rel="stylesheet" href="~/css/Studio2/Supplier/supplier-form.css" asp-append-version="true"/>
 13
 014@await Html.PartialAsync("_BsxGridShell")
 15
 16<div class="container sp-form-page py-3 bsx-surface">
 17    <div class="back-link-row">
 18        <a asp-action="Index" class="text-primary text-decoration-none small">
 19            <i class="fas fa-arrow-left me-1"></i>К списку поставщиков
 20        </a>
 21    </div>
 22
 23    <div class="row g-4">
 24        <div class="col-lg-8">
 25            <div class="card">
 26                <div class="card-header">
 27                    <h2 class="mb-0 fs-4">Новый поставщик</h2>
 28                </div>
 29                <div class="card-body">
 30                    <div class="sp-intro">
 31                        <i class="fas fa-circle-info"></i>
 32                        <div class="sp-intro-text">
 33                            Поставщик — справочная запись, которая подставляется в заказ при загрузке отчётов и влияет
 34                            на расчёт цен: <strong>коэффициент</strong> переводит закупку в рубли,
 35                            <strong>стоимость за кг</strong> добавляется к себестоимости по весу товара.
 36                            <strong>CSV URL</strong> используется для подгрузки остатков, <strong>ИНН</strong> — для
 37                            поиска контрагента в 1С при проводках. Полный список — на странице
 38                            <a asp-action="Index">«Поставщики»</a>.
 39                        </div>
 40                    </div>
 41
 042                    @if (!string.IsNullOrEmpty(vm.SupplierResult))
 43                    {
 44                        <div class="alert alert-warning alert-dismissible fade show mb-4" role="alert">
 045                            <i class="fas fa-exclamation-triangle me-2"></i>@vm.SupplierResult
 46                            <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
 47                        </div>
 48                    }
 49
 50                    <form asp-area="Studio2" asp-action="Create" asp-controller="Supplier" method="post">
 51                        <div asp-validation-summary="ModelOnly" class="alert alert-danger"></div>
 52
 53                        <div class="row g-3">
 54                            <div class="section-title">Основное</div>
 55
 56                            <div class="col-md-12">
 57                                <label asp-for="Supplier.Name" class="form-label">Название поставщика<span class="requir
 58                                <input asp-for="Supplier.Name" class="form-control" placeholder="Как поставщик будет ото
 59                                <div class="field-hint">Должно совпадать с названием в отчётах Ozon/файлах загрузки — по
 60                                <span asp-validation-for="Supplier.Name" class="text-danger small"></span>
 61                            </div>
 62
 63                            <div class="col-md-12">
 64                                <label asp-for="Supplier.INNCode" class="form-label">ИНН контрагента 1С</label>
 65                                <div class="inn-ac-wrap">
 66                                    <input type="text" id="innSearch" class="form-control"
 67                                           placeholder="Введите ИНН или название для поиска в 1С…" autocomplete="off"/>
 68                                    <input type="hidden" asp-for="Supplier.INNCode" id="innHidden"/>
 69                                    <div class="inn-ac-results" id="innResults"></div>
 70                                </div>
 71                                <div class="field-hint">Связь с контрагентом в 1С Fresh — используется при создании доку
 72                                <span asp-validation-for="Supplier.INNCode" class="text-danger small"></span>
 73                            </div>
 74
 75                            <div class="section-title">Цены и валюта</div>
 76
 77                            <div class="col-md-6">
 78                                <label asp-for="Supplier.CostFactor" class="form-label">Коэффициент себестоимости</label
 79                                <input asp-for="Supplier.CostFactor" class="form-control" value="1"/>
 80                                <div class="field-hint">Множитель при переводе закупочной цены в рубли. Обычно 1; увелич
 81                                <span asp-validation-for="Supplier.CostFactor" class="text-danger small"></span>
 82                            </div>
 83
 84                            <div class="col-md-6">
 85                                <label asp-for="Supplier.CurrencyCode" class="form-label">Валюта закупки</label>
 86                                <select asp-for="Supplier.CurrencyCode" class="form-select" asp-items="vm.CurrencyCodes"
 87                                <div class="field-hint">Валюта цены в отчёте поставщика — для пересчёта в рубли по курсу
 88                                <span asp-validation-for="Supplier.CurrencyCode" class="text-danger small"></span>
 89                            </div>
 90
 91                            <div class="col-md-6">
 92                                <label asp-for="Supplier.WeightFactor" class="form-label">Стоимость за кг</label>
 93                                <input asp-for="Supplier.WeightFactor" class="form-control" value="1"/>
 94                                <div class="field-hint">Добавка к себестоимости: вес товара (кг) × эта ставка + закупка.
 95                                <span asp-validation-for="Supplier.WeightFactor" class="text-danger small"></span>
 96                            </div>
 97
 98                            <div class="col-md-6">
 99                                <label asp-for="Supplier.WeightFactorCurrencyCode" class="form-label">Валюта стоимости з
 100                                <select asp-for="Supplier.WeightFactorCurrencyCode" class="form-select" asp-items="vm.Cu
 101                                <div class="field-hint">Валюта ставки «за кг» — пересчитывается в рубли при расчёте себе
 102                                <span asp-validation-for="Supplier.WeightFactorCurrencyCode" class="text-danger small"><
 103                            </div>
 104
 105                            <div class="section-title">Интеграции и сроки</div>
 106
 107                            <div class="col-md-12">
 108                                <label asp-for="Supplier.CsvUrl" class="form-label">URL CSV с остатками</label>
 109                                <input asp-for="Supplier.CsvUrl" class="form-control" placeholder="https://example.com/s
 110                                       pattern="^(https?://).*\.csv$"
 111                                       title="Ссылка должна начинаться с http:// или https:// и заканчиваться на .csv"/>
 112                                <div class="field-hint">Публичная ссылка на CSV-файл остатков поставщика — система перио
 113                                <span asp-validation-for="Supplier.CsvUrl" class="text-danger small"></span>
 114                            </div>
 115
 116                            <div class="col-md-8">
 117                                <label asp-for="Supplier.Site" class="form-label">Сайт поставщика</label>
 118                                <input asp-for="Supplier.Site" class="form-control" type="url" placeholder="https://…"/>
 119                                <div class="field-hint">Справочная ссылка для менеджеров — в расчётах не участвует.</div
 120                                <span asp-validation-for="Supplier.Site" class="text-danger small"></span>
 121                            </div>
 122
 123                            <div class="col-md-4">
 124                                <label asp-for="Supplier.AdditionalTerm" class="form-label">Доп. срок (дней)</label>
 125                                <input asp-for="Supplier.AdditionalTerm" class="form-control" type="number" min="0" plac
 126                                <div class="field-hint">Прибавляется к сроку доставки из отчёта при предзаказе.</div>
 127                                <span asp-validation-for="Supplier.AdditionalTerm" class="text-danger small"></span>
 128                            </div>
 129                            <div class="col-md-4">
 130                                <label asp-for="Supplier.ExpectedDeliveryHours" class="form-label">Норматив поставки (ч.
 131                                <input asp-for="Supplier.ExpectedDeliveryHours" class="form-control" type="number" min="
 132                                <div class="field-hint">Используется правилом SLA «Просрочен приход от поставщика».</div
 133                                <span asp-validation-for="Supplier.ExpectedDeliveryHours" class="text-danger small"></sp
 134                            </div>
 135
 136                            <div class="section-title">Опции</div>
 137
 138                            <div class="col-md-6">
 139                                <div class="option-block">
 140                                    <div class="form-check form-switch">
 141                                        <input asp-for="Supplier.IsVatApplicable" class="form-check-input" role="switch"
 142                                        <label asp-for="Supplier.IsVatApplicable" class="form-check-label fw-semibold"><
 143                                    </div>
 144                                    <div class="field-hint ms-0 mt-1">Отметьте, если закупки у этого поставщика облагают
 145                                </div>
 146                            </div>
 147
 148                            <div class="col-md-6">
 149                                <div class="option-block">
 150                                    <div class="form-check form-switch">
 151                                        <input asp-for="Supplier.IsReSeller" class="form-check-input" role="switch"/>
 152                                        <label asp-for="Supplier.IsReSeller" class="form-check-label fw-semibold"></labe
 153                                    </div>
 154                                    <div class="field-hint ms-0 mt-1">Поставщик выступает реализатором (перепродажа) — с
 155                                </div>
 156                            </div>
 157                        </div>
 158
 159                        <div class="mt-4 d-flex flex-wrap gap-2">
 160                            <button type="submit" class="btn btn-primary">
 161                                <i class="fas fa-plus-circle me-1"></i>Создать поставщика
 162                            </button>
 163                            <a asp-action="Index" class="btn btn-outline-secondary">Отмена</a>
 164                        </div>
 165                    </form>
 166                </div>
 167            </div>
 168        </div>
 169
 170        <div class="col-lg-4">
 171            <div class="card">
 172                <div class="card-header">
 173                    <h2 class="mb-0 fs-5">Уже в справочнике</h2>
 174                </div>
 175                <div class="card-body">
 176                    <p class="text-muted-small mb-3">
 0177                        @existingCount @(existingCount == 1 ? "поставщик" : "поставщиков") в базе. Дубликаты по имени не
 178                    </p>
 179                    <div class="suppliers-side-list">
 0180                        @foreach (var supplier in vm.SuppliersList.Where(s => s.Name != "Не указан").OrderBy(s => s.Name
 181                        {
 182                            <div class="suppliers-side-item d-flex justify-content-between align-items-start gap-2">
 183                                <div class="min-w-0">
 0184                                    <div class="fw-medium text-truncate" title="@(supplier.Name)">@supplier.Name</div>
 0185                                    @if (!string.IsNullOrEmpty(supplier.CsvUrl))
 186                                    {
 187                                        <div class="text-muted-small text-truncate" title="@(supplier.CsvUrl)">
 0188                                            <i class="fas fa-file-csv me-1 opacity-50"></i>@supplier.CsvUrl
 189                                        </div>
 190                                    }
 191                                </div>
 0192                                <a asp-action="Edit" asp-route-id="@supplier.Id" class="btn btn-outline-primary btn-sm f
 193                                    <i class="fas fa-edit"></i>
 194                                </a>
 195                            </div>
 196                        }
 197                    </div>
 198                    <a asp-action="Index" class="btn btn-outline-secondary btn-sm w-100 mt-3">
 199                        <i class="fas fa-list me-1"></i>Весь список
 200                    </a>
 201                </div>
 202            </div>
 203        </div>
 204    </div>
 205</div>
 206
 207@section Scripts {
 0208  @{ await Html.RenderPartialAsync("_ValidationScriptsPartial"); }
 209  <script src="~/js/inn-autocomplete.js" asp-append-version="true"></script>
 210  <script>
 211      document.addEventListener('DOMContentLoaded', function () {
 212          window.innAutocomplete({
 213              searchInputId: 'innSearch',
 214              hiddenInputId: 'innHidden',
 215              resultsId: 'innResults',
 216              endpoint: '/Studio2/Supplier/SearchCounterparties'
 217          });
 218      });
 219  </script>
 220}

Methods/Properties

ExecuteAsync()
<ExecuteAsync()