< Summary

Information
Class: AspNetCoreGeneratedDocument.Areas_Studio2_Views_Shared__FileOrderRow
Assembly: OzonOrdersWeb
File(s): /home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Areas/Studio2/Views/Shared/_FileOrderRow.cshtml
Line coverage
0%
Covered lines: 0
Uncovered lines: 89
Coverable lines: 89
Total lines: 424
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 140
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
GetContrastColor(...)0%210140%
ExecuteAsync()0%160021260%
<ExecuteAsync()100%210%
<ExecuteAsync()100%210%
<ExecuteAsync()100%210%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Areas/Studio2/Views/Shared/_FileOrderRow.cshtml

#LineLine coverage
 1@using OzonDomains.Models
 2@using OzonOrdersWeb.ViewModels.OrderViewModels
 3@model FileOrderRowViewModel
 4
 5@functions {
 6    public string GetContrastColor(string hexColor)
 7    {
 08        if (string.IsNullOrEmpty(hexColor))
 09            return "#000000";
 10
 011        hexColor = hexColor.Trim().ToLower();
 12
 013        if (hexColor == "transparent" || !hexColor.StartsWith("#") || (hexColor.Length != 4 && hexColor.Length != 7))
 014            return "#000000";
 15
 016        hexColor = hexColor.TrimStart('#');
 17
 018        if (hexColor.Length == 3)
 019            hexColor = string.Format("{0}{0}{1}{1}{2}{2}",
 020                hexColor[0], hexColor[1], hexColor[2]);
 21
 22        try
 23        {
 024            int r = Convert.ToInt32(hexColor.Substring(0, 2), 16);
 025            int g = Convert.ToInt32(hexColor.Substring(2, 2), 16);
 026            int b = Convert.ToInt32(hexColor.Substring(4, 2), 16);
 27
 028            double luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255;
 029            return luminance > 0.5 ? "#000000" : "#ffffff";
 30        }
 031        catch
 32        {
 033            return "#000000";
 34        }
 035    }
 36}
 37
 38
 039<tr class="table-excel-order quantity-row file-order-row" id="selectRowForMerge_@Model.Index" data-index="@Model.Index" 
 40    onclick="selectRowForMerge(event, @Model.Index)" style="cursor: pointer;">
 41    <td>
 42        <input type="hidden" name="NotFullOrders[@Model.Index].Order.Key" value="@Model.Order.Key" />
 43        <div class="d-flex align-items-center">
 44            <span class="ml-2">
 45                <div class="d-flex align-items-center" style="gap: 0.25rem;">
 046                    <b class="row-number">@Model.NumberInExcel</b>
 047                    @if (!string.IsNullOrEmpty(Model.DistributionReason))
 48                    {
 49                        <i class="fas fa-info-circle text-info distribution-info-icon"
 50                           data-bs-toggle="tooltip"
 51                           data-bs-placement="right"
 52                           title="@Model.DistributionReason"></i>
 53                    }
 54                </div>
 55                <br>
 056                @if (Model.UniqueOrder)
 57                {
 58                <input class="form-control form-control-sm orderNumberToSupplie-field"
 59                       name="NotFullOrders[@Model.Index].Order.ShipmentNumber"
 60                       value="@Model.Order.ShipmentNumber"
 61                       id="shipmentNumber_@Model.Index"
 062                       data-number-in-excel="@Model.NumberInExcel"
 63                       placeholder="Номер заказа" />
 64                }
 65                else
 66
 67                {
 68                    <button type="button" class="btn btn-sm btn-primary moveToNewButton" onclick="cloneRow(this)" id="ne
 69
 70                }
 71            </span>
 72        </div>
 73    </td>
 74    <td>
 075            @if (!Model.UniqueOrder)
 76            {
 77                <div class="text-muted nowrap client-container" id="clientContainer_@Model.Index" title="@Model.Order.Oz
 78                    <select name="NotFullOrders[@Model.Index].Order.OzonClient.Id" id="clientFilter_@Model.Index" class=
 79                        <option value="">Выберите клиента</option>
 080                        @foreach (var client in Model.OzonClients)
 81                        {
 082                            <option value="@client.Id" selected="@((Model.Order.OzonClient?.Id == client.Id) ? "selected
 083                                @client.Name
 84                            </option>
 85                        }
 86                    </select>
 87                </div>
 88            }
 89            else
 90            {
 91                <select name="NotFullOrders[@Model.Index].Order.OzonClient.Id" id="clientFilter_@Model.Index" class="for
 92                    <option value="">Выберите клиента</option>
 093                    @foreach (var client in Model.OzonClients)
 94                    {
 095                        <option value="@client.Id" selected="@((Model.Order.OzonClient?.Id == client.Id) ? "selected" : 
 096                            @client.Name
 97                        </option>
 98                    }
 99                </select>
 100            }
 101
 102
 0103            @if (Model.Order.DeliveryCity != null && Model.Order.DeliveryCity != "")
 104            {
 105                <div style="white-space: nowrap;" title="@Model.Order.DeliveryCity">
 106                @{
 0107                    string deliveryCity = Model.Order.DeliveryCity;
 0108                    if (deliveryCity.Length > 11)
 109                    {
 0110                        deliveryCity = deliveryCity.Substring(0, 11) + "...";
 111                    }
 0112                    @deliveryCity
 113                    <input type="hidden" name="NotFullOrders[@Model.Index].Order.DeliveryCity" value="@Model.Order.Deliv
 114                }
 115                </div>
 116            }
 0117            @if (!string.IsNullOrEmpty(Model.Order.TrackingNumber))
 118            {
 119                <div class="text-muted" style="white-space: nowrap;" title="@Model.Order.TrackingNumber">
 0120                    <small>@Model.Order.TrackingNumber</small>
 121                </div>
 122            }
 123    </td>
 124
 125    <td>
 126        <div id="td2ProcessingDate" title="@Model.Order.FullFormattedProcessingDate">
 0127            @(Model.Order.ProcessingDate?.ToString("dd.MM.yyyy") ?? "")
 128            <input type="hidden" name="NotFullOrders[@Model.Index].Order.ProcessingDate" value="@Model.Order.ProcessingD
 129        </div>
 130
 131        <div class="text-muted" title="@Model.Order.FullFormattedShippingDate">
 0132            @(Model.Order.ShippingDate?.ToString("dd.MM.yyyy") ?? "")
 133            <input type="hidden" name="NotFullOrders[@Model.Index].Order.ShippingDate" value="@Model.Order.ShippingDate"
 134        </div>
 135    </td>
 136
 137    <td>
 138        <div style="white-space: nowrap; text-align: right;">
 0139            <div title="@Html.DisplayFor(modelItem => Model.Order.FormattedDeliveryDay) @Html.DisplayFor(modelItem => Mo
 140        </div>
 141
 142        <div style="white-space: nowrap; text-align: right;" class="text-muted">
 0143            @Html.DisplayFor(modelItem => Model.Order.FormattedTimeLeftDay)
 144        </div>
 145    </td>
 146
 147    <td>
 148        <div class="nowrap" title="item.Status">
 0149            @if (Model.Order.ClientStatus?.Name != null)
 150            {
 0151                string status = Model.Order.ClientStatus.Name;
 0152                if (status.Length > 14)
 153                {
 0154                    status = status.Substring(0, 14) + "...";
 155                }
 0156                @status
 157                <input type="hidden" name="NotFullOrders[@Model.Index].Order.ClientStatusId" value="@(Model.Order.Client
 158            }
 159            else
 160            {
 161                <br />
 162            }
 163
 164        </div>
 165
 166        <div class="text-muted nowrap status-container" id="statusContainer_@Model.Index" title="@Model.Order.AppStatus?
 167            <select name="NotFullOrders[@Model.Index].Order.AppStatus.Id" id="statusFilter_@Model.Index" class="form-con
 168                <option value="">Выберите статус</option>
 0169                @foreach (var status in Model.AppStatuses)
 170                {
 0171                    var statusColor = status.StatusColor?.ColorCode ?? "transparent";
 0172                    var textColor = statusColor != "transparent" ? GetContrastColor(statusColor) : "#000000";
 0173                    <option value="@status.Id"
 174                            selected="@((Model.SelectedAppStatus?.Id == status.Id) ? "selected" : null)"
 0175                            data-status-color="@statusColor"
 0176                            data-text-color="@textColor"
 177                            style="background-color: @statusColor; color: @textColor;">
 0178                        @status.Name
 179                    </option>
 180                }
 181            </select>
 182        </div>
 183
 184    </td>
 185
 186    <td class="orders-product-col" data-column="productInfo">
 187        <div class="d-flex orders-product-cell">
 188            <div class="orders-product-text-grid" style="min-width:0;flex:1;overflow:hidden;display:grid;grid-template-r
 189                <div class="orders-product-top-row">
 190                    <div id="thArticle" title="@Model.Order.ProductKey" class="product-key-cell d-flex align-items-cente
 191                        @{
 0192                            string? productKey = Model.Order.ProductKey;
 0193                            if (productKey != null && productKey.Length > 17)
 194                            {
 0195                                productKey = productKey.Substring(0, 17) + "...";
 196                            }
 197                        }
 0198                        <span class="custom-product-link">@productKey</span>
 199                        <input type="hidden" name="NotFullOrders[@Model.Index].Order.ProductKey" value="@Model.Order.Pro
 200                    </div>
 201                    <div class="product-manufacturer-cell nowrap text-center">
 0202                        @(Model.Order.Manufacturer?.Name ?? "")
 203                        <input type="hidden" name="NotFullOrders[@Model.Index].Order.Manufacturer.Id" value="@Model.Orde
 204                    </div>
 205                    <div class="article-and-replacement-cell nowrap text-end">
 0206                        @if (Model.Order.Article != null)
 207                        {
 0208                            @Html.DisplayFor(modelItem => Model.Order.Article)
 209                            <input type="hidden" name="NotFullOrders[@Model.Index].Order.Article" value="@Model.Order.Ar
 210                        }
 211                    </div>
 212                </div>
 213                <div id="thProductName" class="text-muted" title="@Html.DisplayFor(modelItem => Model.Order.ProductName)
 0214                    <span>@Html.DisplayFor(modelItem => Model.Order.ProductName)</span>
 215                    <input type="hidden" name="NotFullOrders[@Model.Index].Order.ProductName" value="@Model.Order.Produc
 216                </div>
 217            </div>
 218        </div>
 219    </td>
 220
 221    <td class="checkbox-column" data-column="actionsCol">
 222    </td>
 223
 224    <td>
 0225        @(Model.Order.ShipmentWarehouse?.Name ?? "")
 226        <input type="hidden" name="NotFullOrders[@Model.Index].Order.ShipmentWarehouse.Id" value="@Model.Order.ShipmentW
 227    </td>
 228
 229
 230    <td>
 231        <div>
 0232            @(Model.Order.Supplier?.Name ?? "")
 233            <input type="hidden" name="NotFullOrders[@Model.Index].Order.SupplierId" value="@Model.Order.Supplier?.Id" /
 234        </div>
 235
 236        <div class="text-muted">
 237            <input type="text"
 238                   class="form-control form-control-sm universalOrderNumberToSupplie"
 239                   name="NotFullOrders[@Model.Index].Order.OrderNumberToSupplier"
 240                   value="@Model.Order.OrderNumberToSupplier"
 241                   id="orderNumberToSupplier_@Model.Index"
 242                   placeholder="Номер заказа"
 243                   oninput="handleOrderNumberToSupplierChange(this)" />
 244        </div>
 245    </td>
 246
 247    <td>
 248        <div>
 0249            @if (Model.Order.ProductInfo?.CommercialCategory != null)
 250            {
 0251                string сommercialCategory = Model.Order.ProductInfo!.CommercialCategory;
 0252                if (сommercialCategory.Length > 10)
 253                {
 0254                    сommercialCategory = сommercialCategory.Substring(0, 10) + "...";
 255                }
 0256                @сommercialCategory
 257                <input type="hidden" name="NotFullOrders[@Model.Index].Order.ProductInfo.Id" value="@Model.Order.Product
 258            }
 259
 260        </div>
 261
 262        <div class="text-muted">
 0263            @(Model.Order.ProductInfo?.VolumetricWeight)
 264            <input type="hidden" name="NotFullOrders[@Model.Index].Order.ProductInfo.Id" value="@Model.Order.ProductInfo
 265        </div>
 266    </td>
 267
 268    <td>
 269        <div style="text-align: right;">
 0270            @Html.Raw(string.Format("{0:N0}", Model.Order.ProductInfo?.CurrentPriceWithDiscount ?? 0).Replace(",", " "))
 271            <input type="hidden" name="NotFullOrders[@Model.Index].Order.ProductInfo.Id" value="@Model.Order.ProductInfo
 272        </div>
 273
 274        <div class="text-muted nowrap">
 275            <input type="hidden" name="NotFullOrders[@Model.Index].Order.Quantity"
 276                   id="hiddenQuantity_@Model.Index" value="@Model.Order.Quantity" readonly />
 277
 278            <input name="NotFullOrders[@Model.Index].Order.Quantity"
 279                   value="@Model.Order.Quantity"
 280                   id="quantityFilter_@Model.Index"
 281                   class="form-control form-control-sm quantity-input"
 282                   style="text-align: right;" readonly />
 283        </div>
 284
 285    </td>
 286
 287    <td>
 288        <div style="text-align: right;">
 289            <input name="NotFullOrders[@Model.Index].Order.Price"
 290                   value="@Model.Order.Price"
 291                   id="priceFilter_@Model.Index"
 292                   class="form-control form-control-sm"
 293                   style="text-align: right;" />
 294        </div>
 295
 296
 297        <div class="text-muted" style="text-align: right;">
 0298            @Html.Raw(string.Format("{0:N0}", Model.Order.ShipmentAmount).Replace(",", " "))
 299            <input type="hidden" name="NotFullOrders[@Model.Index].Order.ShipmentAmount" value="@Model.Order.ShipmentAmo
 300        </div>
 301    </td>
 302
 303    <td>
 304        <!-- Показываем только исходную цену в валюте и цену закупки; себестоимость скрыта визуально -->
 305        <div id="originalPriceContainer_origin_@Model.Index" style="text-align: right; white-space: nowrap;">
 306            <div style="white-space: nowrap; margin: 0; font-size: 10px;">
 307                <span id="originalPurchasePrice_origin_@Model.Index">
 0308                    @Html.Raw(Model.Order.OriginalPurchasePrice)
 309                </span>
 310                <span id="currencyCode_origin_@Model.Index" style="margin-left: 4px;">
 0311                    @(Model.Order.Supplier?.CurrencyCode.ToString() ?? "")
 312                </span>
 313            </div>
 314            <p style="display: inline; white-space: nowrap; margin: 0;">
 315                <span id="purchasePrice_origin_@Model.Index">
 0316                    @Html.Raw(string.Format("{0:N0}", Model.Order.PurchasePrice).Replace(",", " "))
 317                </span>
 318            </p>
 319        </div>
 320
 321        <input type="hidden"
 322               id="hiddenOriginalPurchasePrice_origin_@Model.Index"
 323               name="NotFullOrders[@Model.Index].Order.OriginalPurchasePrice"
 324               value="@Model.Order.OriginalPurchasePrice" />
 325        <input type="hidden"
 326               id="hiddenPurchasePrice_origin_@Model.Index"
 327               name="NotFullOrders[@Model.Index].Order.PurchasePrice"
 328               value="@Model.Order.PurchasePrice" />
 329
 330        <!-- Себестоимость только в hidden-поле, без визуального отображения -->
 331        <div id="costPriceContainer_origin_@Model.Index" style="display:none;">
 332            <span id="costPrice_origin_@Model.Index">
 0333                @Html.Raw(string.Format("{0:N0}", Model.Order.CostPrice).Replace(",", " "))
 334            </span>
 335        </div>
 336        <input type="hidden"
 337               id="hiddenCostPrice_origin_@Model.Index"
 338               name="NotFullOrders[@Model.Index].Order.CostPrice"
 339               value="@Model.Order.CostPrice" />
 340    </td>
 341
 342    <td style="text-align: right;">
 343        <span id="minOzonCommission_origin_@Model.Index">
 0344            @Html.Raw(string.Format("{0:N0}", Model.Order.MinOzonCommission).Replace(",", " "))
 345        </span>
 346        <br />
 347        <span id="maxOzonCommission_origin_@Model.Index">
 0348            @Html.Raw(string.Format("{0:N0}", Model.Order.MaxOzonCommission).Replace(",", " "))
 349        </span>
 350        <input type="hidden" id="minOzonCommission_hidden_@Model.Index" name="NotFullOrders[@Model.Index].Order.MinOzonC
 351        <input type="hidden" id="maxOzonCommission_hidden_@Model.Index" name="NotFullOrders[@Model.Index].Order.MaxOzonC
 352    </td>
 353
 354    <td style="text-align: right;">
 0355        @if (Model.Order.MaxProfit < 0)
 356        {
 357            <span id="maxProfit_origin_@Model.Index" style="color:red">
 0358                @Html.Raw(string.Format("{0:N0}", Model.Order.MaxProfit).Replace(",", " "))
 359            </span>
 360        }
 361        else
 362        {
 363            <span id="maxProfit_origin_@Model.Index">
 0364                @Html.Raw(string.Format("{0:N0}", Model.Order.MaxProfit).Replace(",", " "))
 365            </span>
 366        }
 367        <input type="hidden" name="NotFullOrders[@Model.Index].Order.MaxProfit" value="@Model.Order.MaxProfit" />
 368        <br>
 0369        @if (Model.Order.MinProfit < 0)
 370        {
 371            <span id="minProfit_origin_@Model.Index" style="color:red">
 0372                @Html.Raw(string.Format("{0:N0}", Model.Order.MinProfit).Replace(",", " "))
 373            </span>
 374        }
 375        else
 376        {
 377            <span id="minProfit_origin_@Model.Index">
 0378                @Html.Raw(string.Format("{0:N0}", Model.Order.MinProfit).Replace(",", " "))
 379            </span>
 380        }
 381        <input type="hidden" name="NotFullOrders[@Model.Index].Order.MinProfit" value="@Model.Order.MinProfit" />
 382    </td>
 383
 384    <td style="text-align: right;">
 0385        @if (Model.Order.MaxDiscount < 0)
 386        {
 387            <span id="maxDiscount_origin_@Model.Index" style="color:red">
 0388                @Html.Raw(string.Format("{0:N0}", Model.Order.MaxDiscount).Replace(",", " "))
 389            </span>
 390        }
 391        else
 392        {
 393            <span id="maxDiscount_origin_@Model.Index">
 0394                @Html.Raw(string.Format("{0:N0}", Model.Order.MaxDiscount).Replace(",", " "))
 395            </span>
 396        }
 397        <input type="hidden" name="NotFullOrders[@Model.Index].Order.MaxDiscount" value="@Model.Order.MaxDiscount" />
 398        <br>
 0399        @if (Model.Order.MinDiscount < 0)
 400        {
 401            <span id="minDiscount_origin_@Model.Index" style="color:red">
 0402                @Html.Raw(string.Format("{0:N0}", Model.Order.MinDiscount).Replace(",", " "))
 403            </span>
 404        }
 405        else
 406        {
 407            <span id="minDiscount_origin_@Model.Index">
 0408                @Html.Raw(string.Format("{0:N0}", Model.Order.MinDiscount).Replace(",", " "))
 409            </span>
 410        }
 411        <input type="hidden" name="NotFullOrders[@Model.Index].Order.MinDiscount" value="@Model.Order.MinDiscount" />
 412    </td>
 413
 414    <input type="hidden" name="NotFullOrders[@Model.Index].Hidden" value="False" class="hiddenField" />
 0415    @if (Model.UniqueOrder)
 416    {
 417        <input type="hidden" name="NotFullOrders[@Model.Index].IsUniqueOrder" value="true" />
 418        <input type="hidden" name="NotFullOrders[@Model.Index].OrderIds" value="" />
 419    }
 420    else
 421    {
 422        <input type="hidden" name="NotFullOrders[@Model.Index].IsUniqueOrder" value="false" />
 423    }
 424</tr>