< Summary

Information
Class: OzonOrdersWeb.Authorization.Studio2RolePageMenuCatalog
Assembly: OzonOrdersWeb
File(s): /home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Authorization/Studio2RolePageMenuCatalog.cs
Line coverage
86%
Covered lines: 140
Uncovered lines: 21
Coverable lines: 161
Total lines: 225
Line coverage: 86.9%
Branch coverage
33%
Covered branches: 2
Total branches: 6
Branch coverage: 33.3%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.cctor()100%11100%
get_OrderPageCodes()100%11100%
get_TransactionPageCodes()100%11100%
get_TransactionDropdownPageCodes()100%11100%
get_OrdersAndTransactionPageCodes()100%11100%
get_AllTransactionMvcPaths()100%11100%
get_AllTransactionDropdownMvcPaths()100%11100%
BuildRolePagePresetsMap()0%620%
GetRolePagePresetsJson()100%210%
ToMvcPath(...)50%5466.66%
get_Code()100%11100%
get_ParentSectionCode()100%210%
get_Sort()100%210%
get_Title()100%210%
get_Icon()100%210%
get_Accent()100%210%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Authorization/Studio2RolePageMenuCatalog.cs

#LineLine coverage
 1using System.Text.Json;
 2using System.Text.Json.Serialization;
 3
 4namespace OzonOrdersWeb.Authorization;
 5
 6/// <summary>
 7/// Единый перечень страниц Studio2 для меню «Заказы» и «Провести документ» (пресеты / seed / фильтр по правам).
 8/// </summary>
 9public static class Studio2RolePageMenuCatalog
 10{
 11    public const string PresetKeyOrders = "ordersMenu";
 12    public const string PresetKeyTransactions = "transactionsMenu";
 13    public const string PresetKeyOrdersAndTransactions = "ordersAndTransactions";
 14
 15    // --- Пресеты: одна транзакция (ключи для JSON / data-tx-preset) ---
 16    public const string PresetKeyTxOrderToSupplier = "txOrderToSupplier";
 17    public const string PresetKeyTxOrderedToSeller = "txOrderedToSeller";
 18    public const string PresetKeyTxShippedBySupplier = "txShippedBySupplier";
 19    public const string PresetKeyTxShippedToSeller = "txShippedToSeller";
 20    public const string PresetKeyTxAcceptedToWarehouse = "txAcceptedToWarehouse";
 21    public const string PresetKeyTxShippedToClient = "txShippedToClient";
 22    public const string PresetKeyTxCustomerReturn = "txCustomerReturn";
 23    public const string PresetKeyTxReturnToSupplier = "txReturnToSupplier";
 24    public const string PresetKeyTxReturnToWarehouse = "txReturnToWarehouse";
 25    public const string PresetKeyTxWarehouseChange = "txWarehouseChange";
 26    public const string PresetKeyTxWarehouseTransfer = "txWarehouseTransfer";
 27    public const string PresetKeyTxShippedToCommissioner = "txShippedToCommissioner";
 28    public const string PresetKeyTxToCancellation = "txToCancellation";
 29    public const string PresetKeyTxCancelled = "txCancelled";
 30    public const string PresetKeyTxReturnTransfer = "txReturnTransfer";
 31    public const string PresetKeyTxLostByCommissioner = "txLostByCommissioner";
 32
 33    /// <summary>Страницы под секцией «Заказы (Studio2)» в seed — оформление в дереве.</summary>
 134    public static readonly Studio2MenuPageRow[] OrderRows =
 135    {
 136        new("Studio2.Orders.Index", "Studio2.Section.Orders", 1, "Список заказов", "fas fa-th-list", "text-body"),
 137        new("Studio2.Orders.Returns", "Studio2.Section.Orders", 2, "Журнал возвратов", "fas fa-undo", "text-body"),
 138        new("Studio2.Orders.MultiplayEditV2", "Studio2.Section.Orders", 3, "Множественное редактирование (v2)", "fas fa-
 139        new("Studio2.Orders.Details", "Studio2.Section.Orders", 4, "Карточка заказа", "fas fa-file-alt", "text-body"),
 140        new("Studio2.Orders.CancellationOrders", "Studio2.Section.Orders", 5, "Массовая отмена заказов", "fas fa-ban", "
 141    };
 42
 143    public static readonly Studio2MenuPageRow[] TransactionRows =
 144    {
 145        new("Studio2.OrderToSupplierTransaction.CreateOrderToSupplierTransactionV2", "Studio2.Section.TxMain", 1, "Заказ
 146        new("Studio2.OrderedToSellerTransaction.CreateOrderedToSellerTransaction", "Studio2.Section.TxMain", 2, "Заказан
 147        new("Studio2.ShippedBySupplierTransaction.CreateShippedBySupplierTransaction", "Studio2.Section.TxMain", 3, "Отг
 148        new("Studio2.ShippedToSellerTransaction.CreateShippedToSellerTransaction", "Studio2.Section.TxMain", 4, "Отгруже
 149        new("Studio2.ShippedToCommissionerTransaction.CreateShippedToCommissionerTransaction", "Studio2.Section.TxMain",
 150        new("Studio2.AcceptedToWarehouseTransaction.AcceptedToWarehouseTransaction", "Studio2.Section.TxMain", 6, "Приня
 151        new("Studio2.ShippedToClientTransaction.CreateShippedToClientTransaction", "Studio2.Section.TxMain", 7, "Отгруже
 152        new("Studio2.CustomerReturnTransaction.CreateCustomerReturnTransaction", "Studio2.Section.TxReturns", 1, "Возвра
 153        new("Studio2.ReturnToSupplierTransaction.CreateReturnToSupplierTransaction", "Studio2.Section.TxReturns", 2, "Во
 154        new("Studio2.ReturnToWarehouseTransaction.CreateReturnToWarehouseTransaction", "Studio2.Section.TxReturns", 3, "
 155        new("Studio2.WarehouseChangeTransaction.CreateWarehouseChangeTransaction", "Studio2.Section.TxWarehouse", 1, "Из
 156        new("Studio2.WarehouseTransferTransaction.CreateWarehouseTransferTransaction", "Studio2.Section.TxWarehouse", 2,
 157        new("Studio2.ReturnTransferTransaction.CreateReturnTransferTransaction", "Studio2.Section.TxReturns", 4, "Переме
 158        new("Studio2.LostByCommissionerTransaction.CreateLostByCommissionerTransaction", "Studio2.Section.TxReturns", 5,
 159        new("Studio2.ToCancellationTransaction.CreateToCancellationTransaction", "Studio2.Section.TxCancel", 1, "К отмен
 160        new("Studio2.CancelledTransaction.CreateCancelledTransaction", "Studio2.Section.TxCancel", 2, "Отменен", "fas fa
 161    };
 62
 163    private static readonly (string PresetKey, string Code)[] TransactionSinglePresets =
 164    {
 165        (PresetKeyTxOrderToSupplier, "Studio2.OrderToSupplierTransaction.CreateOrderToSupplierTransactionV2"),
 166        (PresetKeyTxOrderedToSeller, "Studio2.OrderedToSellerTransaction.CreateOrderedToSellerTransaction"),
 167        (PresetKeyTxShippedBySupplier, "Studio2.ShippedBySupplierTransaction.CreateShippedBySupplierTransaction"),
 168        (PresetKeyTxShippedToSeller, "Studio2.ShippedToSellerTransaction.CreateShippedToSellerTransaction"),
 169        (PresetKeyTxShippedToCommissioner, "Studio2.ShippedToCommissionerTransaction.CreateShippedToCommissionerTransact
 170        (PresetKeyTxAcceptedToWarehouse, "Studio2.AcceptedToWarehouseTransaction.AcceptedToWarehouseTransaction"),
 171        (PresetKeyTxShippedToClient, "Studio2.ShippedToClientTransaction.CreateShippedToClientTransaction"),
 172        (PresetKeyTxCustomerReturn, "Studio2.CustomerReturnTransaction.CreateCustomerReturnTransaction"),
 173        (PresetKeyTxReturnToSupplier, "Studio2.ReturnToSupplierTransaction.CreateReturnToSupplierTransaction"),
 174        (PresetKeyTxReturnToWarehouse, "Studio2.ReturnToWarehouseTransaction.CreateReturnToWarehouseTransaction"),
 175        (PresetKeyTxWarehouseChange, "Studio2.WarehouseChangeTransaction.CreateWarehouseChangeTransaction"),
 176        (PresetKeyTxWarehouseTransfer, "Studio2.WarehouseTransferTransaction.CreateWarehouseTransferTransaction"),
 177        (PresetKeyTxToCancellation, "Studio2.ToCancellationTransaction.CreateToCancellationTransaction"),
 178        (PresetKeyTxCancelled, "Studio2.CancelledTransaction.CreateCancelledTransaction"),
 179        (PresetKeyTxReturnTransfer, "Studio2.ReturnTransferTransaction.CreateReturnTransferTransaction"),
 180        (PresetKeyTxLostByCommissioner, "Studio2.LostByCommissionerTransaction.CreateLostByCommissionerTransaction"),
 181    };
 82
 83    /// <summary>Полный набор <c>Studio2.Orders.*</c> для пресета «Заказы» (плюс основные список/карточка/мультир-редакт
 184    public static readonly IReadOnlyList<string> OrderPresetPageCodes = new[]
 185    {
 186        "Studio2.Orders.Index",
 187        "Studio2.Orders.Returns",
 188        "Studio2.Orders.MultiplayEditV2",
 189        "Studio2.Orders.Details",
 190        "Studio2.Orders.AddIdsToSession",
 191        "Studio2.Orders.AddIdToSession",
 192        "Studio2.Orders.AppendFile",
 193        "Studio2.Orders.CancellationOrders",
 194        "Studio2.Orders.CheckLabelsInDropbox",
 195        "Studio2.Orders.CheckOrderUnique",
 196        "Studio2.Orders.ClearLabelsSession",
 197        "Studio2.Orders.ClearSelectedIdsSession",
 198        "Studio2.Orders.ConfirmAccepted",
 199        "Studio2.Orders.ConfirmAcceptedV2",
 1100        "Studio2.Orders.DeleteDuplicateOrders",
 1101        "Studio2.Orders.DeleteOrderPage",
 1102        "Studio2.Orders.DeleteV2",
 1103        "Studio2.Orders.DelSortStateCookie",
 1104        "Studio2.Orders.DelSortStateCookieForV2",
 1105        "Studio2.Orders.DownloadLabels",
 1106        "Studio2.Orders.GenerateLabels",
 1107        "Studio2.Orders.GenerateYandexLabels",
 1108        "Studio2.Orders.GetClientStatusesByClient",
 1109        "Studio2.Orders.GetClientStatusesByClientType",
 1110        "Studio2.Orders.GetCurrencyByCode",
 1111        "Studio2.Orders.GetEtProducerMarketPrefix",
 1112        "Studio2.Orders.GetEtProducersByArticle",
 1113        "Studio2.Orders.GetOzonLabelEligibleOrders",
 1114        "Studio2.Orders.GetOrderProducts",
 1115        "Studio2.Orders.GetProductByArticle",
 1116        "Studio2.Orders.GetSelectedIdsFromSession",
 1117        "Studio2.Orders.GroupFileData",
 1118        "Studio2.Orders.MultiplayDeleteOrders",
 1119        "Studio2.Orders.MultiplayDeleteOrdersV2",
 1120        "Studio2.Orders.MultiplayUpdateOrdersStatusV2",
 1121        "Studio2.Orders.NewValuesProcessing",
 1122        "Studio2.Orders.OrderDetailedInformation",
 1123        "Studio2.Orders.OrderDetailedInformationForBitrix",
 1124        "Studio2.Orders.OrderStocks",
 1125        "Studio2.Orders.OrderSubstitute",
 1126        "Studio2.Orders.PrepaExcelTable",
 1127        "Studio2.Orders.PrintOrdersExcel",
 1128        "Studio2.Orders.PrintOrdersExcelForClient",
 1129        "Studio2.Orders.PrintOrdersExcelV2",
 1130        "Studio2.Orders.PrintOrdersLable",
 1131        "Studio2.Orders.ProcessNotFullOrdersInBackground",
 1132        "Studio2.Orders.Recover",
 1133        "Studio2.Orders.RemoveIdFromSession",
 1134        "Studio2.Orders.RemoveIdsFromSession",
 1135        "Studio2.Orders.SaveSelectedStockListToSession",
 1136        "Studio2.Orders.SearchArticleByEAN",
 1137        "Studio2.Orders.SearchEtProducers",
 1138        "Studio2.Orders.SetFilterLists",
 1139        "Studio2.Orders.SetNotFullOrdersData",
 1140        "Studio2.Orders.SetPageSize",
 1141        "Studio2.Orders.SetPageSizeForV2",
 1142        "Studio2.Orders.SplitOrder",
 1143        "Studio2.Orders.SplitOrderFromSetNotFull",
 1144        "Studio2.Orders.SplitOrders",
 1145        "Studio2.Orders.Update",
 1146        "Studio2.Orders.UpdateOrdersStatus",
 1147        "Studio2.Orders.UpdateOrdersStatusInBackground",
 1148        "Studio2.Orders.UpdateV2",
 1149        "Studio2.Orders.Upload",
 1150        "Studio2.Orders.UploadClientsData",
 1151        "Studio2.Orders.UploadExcelFile",
 1152        "Studio2.Orders.UploadExcelOrders",
 1153        "Studio2.Orders.UploadFile",
 1154        "Studio2.Orders.UploadInBackground",
 1155        "Studio2.Orders.ViewFile",
 1156        "Studio2.Orders.ViewOrders",
 1157    };
 158
 159    /// <summary>Коды «заказов» для пресетов/комбинирования (тот же состав, что <see cref="OrderPresetPageCodes"/>, с ун
 2160    public static IReadOnlyList<string> OrderPageCodes { get; } = OrderPresetPageCodes.Distinct(StringComparer.Ordinal).
 161
 20162    public static IReadOnlyList<string> TransactionPageCodes { get; } = TransactionRows.Select(r => r.Code).ToList();
 163
 164    /// <summary>Коды страниц, которые проверяются в выпадающем «Провести документ» (транзакции + массовая отмена заказо
 2165    public static IReadOnlyList<string> TransactionDropdownPageCodes { get; } = TransactionPageCodes
 1166        .Append("Studio2.Orders.CancellationOrders")
 1167        .ToList();
 168
 1169    public static IReadOnlyList<string> OrdersAndTransactionPageCodes { get; } = OrderPageCodes
 1170        .Concat(TransactionPageCodes)
 1171        .Distinct(StringComparer.Ordinal)
 1172        .ToList();
 173
 1174    public static IReadOnlyList<string> AllTransactionMvcPaths { get; } = TransactionPageCodes
 1175        .Select(ToMvcPath)
 1176        .ToList();
 177
 1178    public static IReadOnlyList<string> AllTransactionDropdownMvcPaths { get; } = TransactionDropdownPageCodes
 1179        .Select(ToMvcPath)
 1180        .ToList();
 181
 182    private static IReadOnlyDictionary<string, IReadOnlyList<string>> BuildRolePagePresetsMap()
 183    {
 0184        var d = new Dictionary<string, IReadOnlyList<string>>(StringComparer.Ordinal)
 0185        {
 0186            [PresetKeyOrders] = OrderPageCodes,
 0187            [PresetKeyTransactions] = TransactionPageCodes,
 0188            [PresetKeyOrdersAndTransactions] = OrdersAndTransactionPageCodes,
 0189        };
 0190        foreach (var (key, code) in TransactionSinglePresets)
 191        {
 0192            d[key] = new[] { code };
 193        }
 0194        return d;
 195    }
 196
 197    /// <summary>JSON-объект: ключ → коды страниц (для пресетов в админке).</summary>
 198    public static string GetRolePagePresetsJson()
 199    {
 0200        return JsonSerializer.Serialize(BuildRolePagePresetsMap(), new JsonSerializerOptions
 0201        {
 0202            PropertyNamingPolicy = null,
 0203            DefaultIgnoreCondition = JsonIgnoreCondition.Never
 0204        });
 205    }
 206
 207    /// <summary>Код <c>Area.Controller.Action</c> в путь <c>/Area/Controller/Action</c>.</summary>
 208    public static string ToMvcPath(string code)
 209    {
 49210        if (string.IsNullOrWhiteSpace(code))
 0211            return string.Empty;
 49212        var parts = code.Split('.', 3, StringSplitOptions.RemoveEmptyEntries);
 49213        if (parts.Length != 3)
 0214            return "/" + string.Join('/', code.Split('.', StringSplitOptions.RemoveEmptyEntries));
 49215        return $"/{parts[0]}/{parts[1]}/{parts[2]}";
 216    }
 217
 218    public readonly record struct Studio2MenuPageRow(
 32219        string Code,
 0220        string ParentSectionCode,
 0221        int Sort,
 0222        string Title,
 0223        string Icon,
 0224        string? Accent);
 225}