< Summary

Information
Class: OzonOrdersWeb.WebServices.Transactions.Grid.Contracts.TransactionDocumentParams
Assembly: OzonOrdersWeb
File(s): /home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/WebServices/Transactions/Grid/Contracts/TransactionCommitRequest.cs
Line coverage
10%
Covered lines: 1
Uncovered lines: 9
Coverable lines: 10
Total lines: 114
Line coverage: 10%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
get_ContractLink()100%210%
get_VatRate()100%210%
get_Nds()100%210%
get_NumberVh()100%210%
get_DateVh()100%210%
get_TransactionComment()100%210%
get_OperationDate()100%210%
get_SenderWarehouse()100%210%
get_RecipientWarehouse()100%210%
get_CreateDraftsOnShortage()100%11100%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/WebServices/Transactions/Grid/Contracts/TransactionCommitRequest.cs

#LineLine coverage
 1using OzonOrdersWeb.Areas.Studio2.Models.Transactions;
 2
 3namespace OzonOrdersWeb.WebServices.Transactions.Grid.Contracts;
 4
 5/// <summary>Тело <c>POST /Studio2/TransactionsGrid/{slug}/Commit</c>.</summary>
 6public sealed class TransactionCommitRequest
 7{
 8    /// <summary>Ключ группы SignalR для этапов проведения (генерирует клиент).</summary>
 9    public string? ProgressKey { get; set; }
 10
 11    /// <summary>Ключ сессии учёта времени из Load.</summary>
 12    public string? TrackingKey { get; set; }
 13
 14    public string? Comment { get; set; }
 15
 16    /// <summary>Провести в 1С (для OneCMode = Optional; Required — всегда true).</summary>
 17    public bool ProcessIn1C { get; set; }
 18
 19    /// <summary>ИНН организации 1С (переопределение дефолтной).</summary>
 20    public string? OneCOrganizationInn { get; set; }
 21
 22    /// <summary>Собрать отправление в Ozon после проведения (OrderToSupplier).</summary>
 23    public bool ShipInOzon { get; set; }
 24
 25    /// <summary>Режим «из файла»: только статус, без 1С.</summary>
 26    public bool BulkFromFile { get; set; }
 27
 28    public TransactionDocumentParams Document { get; set; } = new();
 29
 30    public List<TransactionGridRowEdit> Orders { get; set; } = new();
 31
 32    /// <summary>Вычеркнутые пользователем строки — не участвуют в проведении.</summary>
 33    public List<int> RemovedIds { get; set; } = new();
 34
 35    public TransactionSupplierCartsRequest? SupplierCarts { get; set; }
 36
 37    /// <summary>
 38    /// Отпечатки конфликтов «заказ уже заказан у поставщика», которые пользователь увидел в диалоге и явно разрешил
 39    /// (<see cref="OzonOrdersWeb.TransactionServices.SupplierOrderConflict.Id"/>). Пусто — подтверждений нет.
 40    /// </summary>
 41    public List<string> ConfirmedConflictIds { get; set; } = new();
 42
 43    /// <summary>Куда вернуться после проведения (валидируется контроллером).</summary>
 44    public string? ReturnUrl { get; set; }
 45}
 46
 47/// <summary>Параметры документа 1С из панели страницы.</summary>
 48public sealed class TransactionDocumentParams
 49{
 50    /// <summary>GUID договора 1С (приход — договор поставщика, расход — договор клиента).</summary>
 051    public string? ContractLink { get; set; }
 052    public int? VatRate { get; set; }
 053    public bool Nds { get; set; }
 054    public string? NumberVh { get; set; }
 055    public DateTime? DateVh { get; set; }
 056    public string? TransactionComment { get; set; }
 057    public DateTime? OperationDate { get; set; }
 58
 59    /// <summary>Склады на весь документ (WarehouseMode = GlobalPair/SenderOnly).</summary>
 060    public string? SenderWarehouse { get; set; }
 061    public string? RecipientWarehouse { get; set; }
 62
 63    /// <summary>Создавать черновики 1С для позиций с нехваткой остатка вместо пропуска 1С.</summary>
 3064    public bool CreateDraftsOnShortage { get; set; } = true;
 65}
 66
 67public sealed class TransactionSupplierCartsRequest
 68{
 69    /// <summary>none | direct | basket.</summary>
 70    public string Mode { get; set; } = "none";
 71
 72    /// <summary>providerKey → JSON очереди (формат клиентских очередей прежний).</summary>
 73    public Dictionary<string, string> Queues { get; set; } = new(StringComparer.OrdinalIgnoreCase);
 74
 75    /// <summary>Доп. параметры провайдера (ShateM: даты/варианты доставки).</summary>
 76    public Dictionary<string, string> Options { get; set; } = new(StringComparer.OrdinalIgnoreCase);
 77}
 78
 79/// <summary>Результат проведения для клиента.</summary>
 80public sealed class TransactionCommitResult
 81{
 82    public bool Success { get; init; }
 83    public int TransactionId { get; init; }
 84    public int ChangedCount { get; init; }
 85
 86    /// <summary>HTML-карточка результата (та же, что показывалась через TempData на классических страницах).</summary>
 87    public string? SummaryHtml { get; init; }
 88
 89    /// <summary>Сводка проверки заказов у поставщиков (null — у проведения не было заказов поставщикам).</summary>
 90    public SupplierVerificationDto? SupplierVerification { get; init; }
 91
 92    /// <summary>Структурированный результат для таблицы в модалке (null — клиент строит его из Errors/RowErrors/Warning
 93    public TransactionReportDto? Report { get; init; }
 94
 95    public List<string> Warnings { get; init; } = new();
 96    public List<string> Errors { get; init; } = new();
 97
 98    /// <summary>Ошибка по строкам (Id заказа → текст) для подсветки в гриде.</summary>
 99    public Dictionary<int, string> RowErrors { get; init; } = new();
 100
 101    public TransactionErrorCode? ErrorCode { get; init; }
 102    public string? RedirectUrl { get; init; }
 103
 104    /// <summary>Конфликты «уже заказано у поставщика», блокирующие проведение до явного подтверждения пользователя.</su
 105    public List<OzonOrdersWeb.TransactionServices.SupplierOrderConflict> SupplierOrderConflicts { get; init; } = new();
 106
 107    public static TransactionCommitResult Failed(TransactionErrorCode code, string message, Dictionary<int, string>? row
 108    {
 109        Success = false,
 110        ErrorCode = code,
 111        Errors = { message },
 112        RowErrors = rowErrors ?? new Dictionary<int, string>()
 113    };
 114}