| | | 1 | | using OzonDomains; |
| | | 2 | | using OzonOrdersWeb.WebServices.Transactions.Grid.Commit; |
| | | 3 | | |
| | | 4 | | namespace OzonOrdersWeb.WebServices.Transactions.Grid.Definitions; |
| | | 5 | | |
| | | 6 | | /// <summary> |
| | | 7 | | /// Дефолтные определения всех транзакций грида. Статусы/флаги повторяют <c>TransactionConfig</c> классических |
| | | 8 | | /// контроллеров и <c>TransactionTransitionRuleService.BuildDefaultRules</c>; имена — человеческие, редактируются в адми |
| | | 9 | | /// </summary> |
| | | 10 | | public static class TransactionDefinitionCatalog |
| | | 11 | | { |
| | | 12 | | public const string GroupPurchase = "Закупка"; |
| | | 13 | | public const string GroupShipping = "Отгрузка"; |
| | | 14 | | public const string GroupReturns = "Возвраты"; |
| | | 15 | | public const string GroupWarehouse = "Склад"; |
| | | 16 | | public const string GroupCancel = "Отмена"; |
| | | 17 | | public const string GroupPrices = "Цены"; |
| | | 18 | | |
| | | 19 | | /// <summary> |
| | | 20 | | /// Общая таблица классических страниц (_TransactionTableBody) даёт одни и те же поля ввода на всех транзакциях: |
| | | 21 | | /// статус, поставщик, номер заказа поставщику, засыл, количество, цена закупки, вес, доп. расходы. |
| | | 22 | | /// </summary> |
| | 1 | 23 | | private static readonly string[] BaseEditable = { "appStatusId", "supplierId", "orderNumberToSupplier", "zasyl", "qu |
| | | 24 | | |
| | 1 | 25 | | public static readonly IReadOnlyList<TransactionDefinition> All = new[] |
| | 1 | 26 | | { |
| | 1 | 27 | | new TransactionDefinition |
| | 1 | 28 | | { |
| | 1 | 29 | | Type = TransactionType.OrderedToSupplier, |
| | 1 | 30 | | Slug = "order-to-supplier", |
| | 1 | 31 | | PageCode = "Studio2.OrderToSupplierTransaction.CreateOrderToSupplierTransactionV2", |
| | 1 | 32 | | LegacyEndpoint = "/Studio2/OrderToSupplierTransaction/CreateOrderToSupplierTransactionV2", |
| | 1 | 33 | | Title = "Заказ поставщику", |
| | 1 | 34 | | ShortName = "Заказ", |
| | 1 | 35 | | Icon = "fas fa-shopping-cart", |
| | 1 | 36 | | Color = "#198754", |
| | 1 | 37 | | Group = GroupPurchase, |
| | 1 | 38 | | DisplayOrder = 1, |
| | 1 | 39 | | Hint = "Первый шаг: заказываем товар у поставщика. Уменьшение количества разбивает заказ, остаток уходит «К |
| | 1 | 40 | | TargetStatusName = "Заказан поставщику", |
| | 1 | 41 | | ExtraStatusNames = new[] { "Заказан реализатору", "Отменен", "К отмене", "Не готов" }, |
| | 1 | 42 | | AllowedSourceStatuses = new[] { "Не указан", "Заказан поставщику", "Заказан реализатору", "К отмене" }, |
| | 1 | 43 | | SupportsQuantitySplit = true, |
| | 1 | 44 | | ClearPurchasePriceOnLoad = true, |
| | 1 | 45 | | RequiresPurchasePrice = true, |
| | 1 | 46 | | OzonCancelPanel = true, |
| | 1 | 47 | | ShipInOzon = true, |
| | 1 | 48 | | SupplierOffers = true, |
| | 1 | 49 | | SupplierCarts = true, |
| | 1 | 50 | | ZeroQuantityPolicy = ZeroQuantityPolicy.ToCancellation, |
| | 1 | 51 | | EditableFields = BaseEditable, |
| | 1 | 52 | | Steps = TransactionCommitStepKeys.OrderToSupplier, |
| | 0 | 53 | | CreateTransaction = (tm, o, u, d, c) => tm.CreateOrderToSupplierTransaction(o, u, d, c) |
| | 1 | 54 | | }, |
| | 1 | 55 | | new TransactionDefinition |
| | 1 | 56 | | { |
| | 1 | 57 | | Type = TransactionType.OrderedToSeller, |
| | 1 | 58 | | Slug = "order-to-seller", |
| | 1 | 59 | | PageCode = "Studio2.OrderedToSellerTransaction.CreateOrderedToSellerTransaction", |
| | 1 | 60 | | LegacyEndpoint = "/Studio2/OrderedToSellerTransaction/CreateOrderedToSellerTransaction", |
| | 1 | 61 | | Title = "Заказ реализатору", |
| | 1 | 62 | | ShortName = "Реализатору", |
| | 1 | 63 | | Icon = "fas fa-handshake", |
| | 1 | 64 | | Color = "#6c757d", |
| | 1 | 65 | | Group = GroupPurchase, |
| | 1 | 66 | | DisplayOrder = 2, |
| | 1 | 67 | | Hint = "Заказ у реализатора (перепродавца), без разбиения количества.", |
| | 1 | 68 | | TargetStatusName = "Заказан реализатору", |
| | 1 | 69 | | ExtraStatusNames = new[] { "Отменен", "К отмене" }, |
| | 1 | 70 | | AllowedSourceStatuses = new[] { "Не указан", "Заказан поставщику", "Заказан реализатору" }, |
| | 1 | 71 | | UseStatusTransitions = false, |
| | 1 | 72 | | ClearPurchasePriceOnLoad = true, |
| | 1 | 73 | | RequiresPurchasePrice = true, |
| | 1 | 74 | | PurchasePriceOptional = true, |
| | 1 | 75 | | AutoFillPurchasePriceFromC0 = true, |
| | 1 | 76 | | OzonCancelPanel = true, |
| | 1 | 77 | | SupplierOffers = true, |
| | 1 | 78 | | EditableFields = BaseEditable, |
| | 1 | 79 | | Steps = TransactionCommitStepKeys.StatusOnlyWithOzonCancel, |
| | 0 | 80 | | CreateTransaction = (tm, o, u, d, c) => tm.CreateOrderedToSellerTransaction(o, u, d, c) |
| | 1 | 81 | | }, |
| | 1 | 82 | | new TransactionDefinition |
| | 1 | 83 | | { |
| | 1 | 84 | | Type = TransactionType.ShippedBySupplier, |
| | 1 | 85 | | Slug = "supplier-receipt", |
| | 1 | 86 | | PageCode = "Studio2.ShippedBySupplierTransaction.CreateShippedBySupplierTransaction", |
| | 1 | 87 | | LegacyEndpoint = "/Studio2/ShippedBySupplierTransaction/CreateShippedBySupplierTransaction", |
| | 1 | 88 | | Title = "Приход от поставщика", |
| | 1 | 89 | | ShortName = "Приход", |
| | 1 | 90 | | Icon = "fas fa-truck-loading", |
| | 1 | 91 | | Color = "#0dcaf0", |
| | 1 | 92 | | Group = GroupPurchase, |
| | 1 | 93 | | DisplayOrder = 3, |
| | 1 | 94 | | Hint = "Поставщик отгрузил товар: приходная накладная в 1С. Все заказы — от одного поставщика и на один скла |
| | 1 | 95 | | TargetStatusName = "Отгружен поставщиком", |
| | 1 | 96 | | AllowedSourceStatuses = new[] { "Заказан поставщику" }, |
| | 1 | 97 | | OneCMode = OneCMode.Optional, |
| | 1 | 98 | | OneCDocument = OneCDocumentKind.Receipt, |
| | 1 | 99 | | WarehouseMode = WarehouseMode.Mapping, |
| | 1 | 100 | | ZeroQuantityPolicy = ZeroQuantityPolicy.LostBySupplier, |
| | 1 | 101 | | ReceiptDocumentFields = true, |
| | 1 | 102 | | CountryAndGtdFields = true, |
| | 1 | 103 | | RequireSingleSupplierAndWarehouse = true, |
| | 1 | 104 | | EditableFields = BaseEditable.Concat(new[] { "country", "gtd" }).ToArray(), |
| | 1 | 105 | | Steps = TransactionCommitStepKeys.WithOneC, |
| | 0 | 106 | | CreateTransaction = (tm, o, u, d, c) => tm.CreateShippedBySupplierTransaction(o, u, d, c) |
| | 1 | 107 | | }, |
| | 1 | 108 | | new TransactionDefinition |
| | 1 | 109 | | { |
| | 1 | 110 | | Type = TransactionType.ShippedToSeller, |
| | 1 | 111 | | Slug = "ship-to-seller", |
| | 1 | 112 | | PageCode = "Studio2.ShippedToSellerTransaction.CreateShippedToSellerTransaction", |
| | 1 | 113 | | LegacyEndpoint = "/Studio2/ShippedToSellerTransaction/CreateShippedToSellerTransaction", |
| | 1 | 114 | | Title = "Отгрузка реализатору", |
| | 1 | 115 | | ShortName = "Реализатору", |
| | 1 | 116 | | Icon = "fas fa-truck", |
| | 1 | 117 | | Color = "#ffc107", |
| | 1 | 118 | | Group = GroupShipping, |
| | 1 | 119 | | DisplayOrder = 1, |
| | 1 | 120 | | Hint = "Перемещение запасов в 1С на склад реализатора. Количество 0 — транзит «Утерян реализатором».", |
| | 1 | 121 | | TargetStatusName = "Отгружен реализатором", |
| | 1 | 122 | | AllowedSourceStatuses = new[] { "Заказан реализатору" }, |
| | 1 | 123 | | OneCMode = OneCMode.Optional, |
| | 1 | 124 | | OneCDocument = OneCDocumentKind.TransferByWarehouses, |
| | 1 | 125 | | WarehouseMode = WarehouseMode.Mapping, |
| | 1 | 126 | | ZeroQuantityPolicy = ZeroQuantityPolicy.LostByCommissioner, |
| | 1 | 127 | | EditableFields = BaseEditable.Concat(new[] { "manufacturer" }).ToArray(), |
| | 1 | 128 | | Steps = TransactionCommitStepKeys.WithOneC, |
| | 0 | 129 | | CreateTransaction = (tm, o, u, d, c) => tm.CreateShippedToSellerTransaction(o, u, d, c) |
| | 1 | 130 | | }, |
| | 1 | 131 | | new TransactionDefinition |
| | 1 | 132 | | { |
| | 1 | 133 | | Type = TransactionType.ShippedToCommissioner, |
| | 1 | 134 | | Slug = "ship-to-commissioner", |
| | 1 | 135 | | PageCode = "Studio2.ShippedToCommissionerTransaction.CreateShippedToCommissionerTransaction", |
| | 1 | 136 | | LegacyEndpoint = "/Studio2/ShippedToCommissionerTransaction/CreateShippedToCommissionerTransaction", |
| | 1 | 137 | | Title = "Отгрузка комиссионеру", |
| | 1 | 138 | | ShortName = "Комиссионеру", |
| | 1 | 139 | | Icon = "fas fa-dolly", |
| | 1 | 140 | | Color = "#0d6efd", |
| | 1 | 141 | | Group = GroupShipping, |
| | 1 | 142 | | DisplayOrder = 2, |
| | 1 | 143 | | Hint = "Перемещение на склад комиссионера по маппингу. Заказы уже «Отгружен реализатором» получают только ст |
| | 1 | 144 | | TargetStatusName = "Отгружен комиссионеру", |
| | 1 | 145 | | StatusOnlyWhenAlreadyIn = new[] { "Отгружен реализатором" }, |
| | 1 | 146 | | OneCMode = OneCMode.Optional, |
| | 1 | 147 | | OneCDocument = OneCDocumentKind.TransferReversed, |
| | 1 | 148 | | WarehouseMode = WarehouseMode.Mapping, |
| | 1 | 149 | | ExpenseDocumentFields = false, |
| | 1 | 150 | | EditableFields = BaseEditable, |
| | 1 | 151 | | Steps = TransactionCommitStepKeys.WithOneC, |
| | 0 | 152 | | CreateTransaction = (tm, o, u, d, c) => tm.CreateShippedToCommissionerTransaction(o, u, d, c) |
| | 1 | 153 | | }, |
| | 1 | 154 | | new TransactionDefinition |
| | 1 | 155 | | { |
| | 1 | 156 | | Type = TransactionType.AcceptedToWarehouse, |
| | 1 | 157 | | Slug = "warehouse-accept", |
| | 1 | 158 | | PageCode = "Studio2.AcceptedToWarehouseTransaction.AcceptedToWarehouseTransaction", |
| | 1 | 159 | | LegacyEndpoint = "/Studio2/AcceptedToWarehouseTransaction/AcceptedToWarehouseTransaction", |
| | 1 | 160 | | Title = "Приёмка на склад", |
| | 1 | 161 | | ShortName = "Приёмка", |
| | 1 | 162 | | Icon = "fas fa-warehouse", |
| | 1 | 163 | | Color = "#0dcaf0", |
| | 1 | 164 | | Group = GroupWarehouse, |
| | 1 | 165 | | DisplayOrder = 1, |
| | 1 | 166 | | Hint = "Физический приём товара на склад. Без документов 1С.", |
| | 1 | 167 | | TargetStatusName = "ПринятНаСкладе", |
| | 1 | 168 | | ExtraStatusNames = new[] { "Отменен" }, |
| | 1 | 169 | | AllowedSourceStatuses = new[] { "Заказан поставщику", "Не указан", "Отгружен поставщиком" }, |
| | 1 | 170 | | UseStatusTransitions = false, |
| | 1 | 171 | | OzonCancelPanel = true, |
| | 1 | 172 | | EditableFields = BaseEditable, |
| | 1 | 173 | | Steps = TransactionCommitStepKeys.StatusOnlyWithOzonCancel, |
| | 0 | 174 | | CreateTransaction = (tm, o, u, d, c) => tm.AcceptedToWarehouseTransaction(o, u, d, c) |
| | 1 | 175 | | }, |
| | 1 | 176 | | new TransactionDefinition |
| | 1 | 177 | | { |
| | 1 | 178 | | Type = TransactionType.ShippedToClient, |
| | 1 | 179 | | Slug = "ship-to-client", |
| | 1 | 180 | | PageCode = "Studio2.ShippedToClientTransaction.CreateShippedToClientTransaction", |
| | 1 | 181 | | LegacyEndpoint = "/Studio2/ShippedToClientTransaction/CreateShippedToClientTransaction", |
| | 1 | 182 | | Title = "Отгрузка покупателю", |
| | 1 | 183 | | ShortName = "Покупателю", |
| | 1 | 184 | | Icon = "fas fa-shipping-fast", |
| | 1 | 185 | | Color = "#198754", |
| | 1 | 186 | | Group = GroupShipping, |
| | 1 | 187 | | DisplayOrder = 3, |
| | 1 | 188 | | Hint = "Финальная отгрузка: расходная накладная в 1С по договору клиента.", |
| | 1 | 189 | | TargetStatusName = "Отгружен клиенту", |
| | 1 | 190 | | AllowedSourceStatuses = new[] { "Заказан реализатору" }, |
| | 1 | 191 | | OneCMode = OneCMode.Optional, |
| | 1 | 192 | | OneCDocument = OneCDocumentKind.Expense, |
| | 1 | 193 | | WarehouseMode = WarehouseMode.Mapping, |
| | 1 | 194 | | ExpenseDocumentFields = true, |
| | 1 | 195 | | SupportsBulkFromFile = true, |
| | 1 | 196 | | EditableFields = BaseEditable, |
| | 1 | 197 | | Steps = TransactionCommitStepKeys.WithOneC, |
| | 0 | 198 | | CreateTransaction = (tm, o, u, d, c) => tm.CreateShippedToClientTransaction(o, u, d, c) |
| | 1 | 199 | | }, |
| | 1 | 200 | | new TransactionDefinition |
| | 1 | 201 | | { |
| | 1 | 202 | | Type = TransactionType.ToCancellation, |
| | 1 | 203 | | Slug = "to-cancellation", |
| | 1 | 204 | | PageCode = "Studio2.ToCancellationTransaction.CreateToCancellationTransaction", |
| | 1 | 205 | | LegacyEndpoint = "/Studio2/ToCancellationTransaction/CreateToCancellationTransaction", |
| | 1 | 206 | | Title = "В отмену", |
| | 1 | 207 | | ShortName = "В отмену", |
| | 1 | 208 | | Icon = "fas fa-hourglass-half", |
| | 1 | 209 | | Color = "#6c757d", |
| | 1 | 210 | | Group = GroupCancel, |
| | 1 | 211 | | DisplayOrder = 1, |
| | 1 | 212 | | Hint = "Промежуточный статус перед окончательной отменой.", |
| | 1 | 213 | | TargetStatusName = "К отмене", |
| | 1 | 214 | | ExtraStatusNames = new[] { "Отменен" }, |
| | 1 | 215 | | AllowedSourceStatuses = new[] { "Заказан поставщику", "Заказан реализатору" }, |
| | 1 | 216 | | OzonCancelPanel = true, |
| | 1 | 217 | | EditableFields = BaseEditable, |
| | 1 | 218 | | Steps = TransactionCommitStepKeys.StatusOnlyWithOzonCancel, |
| | 0 | 219 | | CreateTransaction = (tm, o, u, d, c) => tm.CreateToCancellationTransaction(o, u, d, c) |
| | 1 | 220 | | }, |
| | 1 | 221 | | new TransactionDefinition |
| | 1 | 222 | | { |
| | 1 | 223 | | Type = TransactionType.Cancelled, |
| | 1 | 224 | | Slug = "cancel", |
| | 1 | 225 | | PageCode = "Studio2.CancelledTransaction.CreateCancelledTransaction", |
| | 1 | 226 | | LegacyEndpoint = "/Studio2/CancelledTransaction/CreateCancelledTransaction", |
| | 1 | 227 | | Title = "Отмена заказа", |
| | 1 | 228 | | ShortName = "Отмена", |
| | 1 | 229 | | Icon = "fas fa-times-circle", |
| | 1 | 230 | | Color = "#dc3545", |
| | 1 | 231 | | Group = GroupCancel, |
| | 1 | 232 | | DisplayOrder = 2, |
| | 1 | 233 | | Hint = "Отмена отправления через Ozon API до смены статуса; ошибка API останавливает проведение.", |
| | 1 | 234 | | TargetStatusName = "Отменен", |
| | 1 | 235 | | AllowedSourceStatuses = new[] { "Заказан поставщику", "К отмене" }, |
| | 1 | 236 | | OzonCancelPanel = true, |
| | 1 | 237 | | OzonCancelPreselected = true, |
| | 1 | 238 | | ProcessingGroupOpen = true, |
| | 1 | 239 | | EditableFields = BaseEditable, |
| | 1 | 240 | | Steps = TransactionCommitStepKeys.StatusOnlyWithOzonCancel, |
| | 0 | 241 | | CreateTransaction = (tm, o, u, d, c) => tm.CreateCancelledTransaction(o, u, d, c) |
| | 1 | 242 | | }, |
| | 1 | 243 | | new TransactionDefinition |
| | 1 | 244 | | { |
| | 1 | 245 | | Type = TransactionType.CustomerReturn, |
| | 1 | 246 | | Slug = "customer-return", |
| | 1 | 247 | | PageCode = "Studio2.CustomerReturnTransaction.CreateCustomerReturnTransaction", |
| | 1 | 248 | | LegacyEndpoint = "/Studio2/CustomerReturnTransaction/CreateCustomerReturnTransaction", |
| | 1 | 249 | | Title = "Возврат от покупателя", |
| | 1 | 250 | | ShortName = "Возврат", |
| | 1 | 251 | | Icon = "fas fa-undo", |
| | 1 | 252 | | Color = "#ffc107", |
| | 1 | 253 | | Group = GroupReturns, |
| | 1 | 254 | | DisplayOrder = 1, |
| | 1 | 255 | | Hint = "Перемещение в 1С на склад-получатель (свой у каждого заказа). Режим «из файла» — только статус.", |
| | 1 | 256 | | TargetStatusName = "Возврат покупателя", |
| | 1 | 257 | | AllowedSourceStatuses = new[] { "Отгружен клиенту", "Отгружен комиссионеру", "Отменен", "Отменён" }, |
| | 1 | 258 | | UseStatusTransitions = false, |
| | 1 | 259 | | OneCMode = OneCMode.Optional, |
| | 1 | 260 | | OneCDocument = OneCDocumentKind.Transfer, |
| | 1 | 261 | | WarehouseMode = WarehouseMode.PerOrderRecipient, |
| | 1 | 262 | | SupportsBulkFromFile = true, |
| | 1 | 263 | | OzonCancelPanel = true, |
| | 1 | 264 | | EditableFields = BaseEditable.Concat(new[] { "recipientWarehouse" }).ToArray(), |
| | 1 | 265 | | Steps = TransactionCommitStepKeys.WithOneC, |
| | 0 | 266 | | CreateTransaction = (tm, o, u, d, c) => tm.CreateCustomerReturnTransaction(o, u, d, c) |
| | 1 | 267 | | }, |
| | 1 | 268 | | new TransactionDefinition |
| | 1 | 269 | | { |
| | 1 | 270 | | Type = TransactionType.ReturnToSupplier, |
| | 1 | 271 | | Slug = "return-to-supplier", |
| | 1 | 272 | | PageCode = "Studio2.ReturnToSupplierTransaction.CreateReturnToSupplierTransaction", |
| | 1 | 273 | | LegacyEndpoint = "/Studio2/ReturnToSupplierTransaction/CreateReturnToSupplierTransaction", |
| | 1 | 274 | | Title = "Возврат поставщику", |
| | 1 | 275 | | ShortName = "Поставщику", |
| | 1 | 276 | | Icon = "fas fa-reply-all", |
| | 1 | 277 | | Color = "#ffc107", |
| | 1 | 278 | | Group = GroupReturns, |
| | 1 | 279 | | DisplayOrder = 2, |
| | 1 | 280 | | Hint = "Возврат брака: перемещение в 1С со склада отправителя на склад поставщика, дефицит — черновик.", |
| | 1 | 281 | | TargetStatusName = "Возвращено поставщику", |
| | 1 | 282 | | AllowedSourceStatuses = new[] { "Заказан поставщику", "ПринятНаСкладе", "Возврат поставщику", "Возврат покуп |
| | 1 | 283 | | OneCMode = OneCMode.Required, |
| | 1 | 284 | | OneCDocument = OneCDocumentKind.Transfer, |
| | 1 | 285 | | WarehouseMode = WarehouseMode.PerOrderBoth, |
| | 1 | 286 | | CheckStockBefore1C = true, |
| | 1 | 287 | | OzonCancelPanel = true, |
| | 1 | 288 | | EditableFields = BaseEditable.Concat(new[] { "senderWarehouse", "recipientWarehouse" }).ToArray(), |
| | 1 | 289 | | Steps = TransactionCommitStepKeys.WithOneC, |
| | 0 | 290 | | CreateTransaction = (tm, o, u, d, c) => tm.CreateReturnToSupplierTransaction(o, u, d, c) |
| | 1 | 291 | | }, |
| | 1 | 292 | | new TransactionDefinition |
| | 1 | 293 | | { |
| | 1 | 294 | | Type = TransactionType.ReturnToWarehouse, |
| | 1 | 295 | | Slug = "return-to-warehouse", |
| | 1 | 296 | | PageCode = "Studio2.ReturnToWarehouseTransaction.CreateReturnToWarehouseTransaction", |
| | 1 | 297 | | LegacyEndpoint = "/Studio2/ReturnToWarehouseTransaction/CreateReturnToWarehouseTransaction", |
| | 1 | 298 | | Title = "Возврат на склад", |
| | 1 | 299 | | ShortName = "На склад", |
| | 1 | 300 | | Icon = "fas fa-undo-alt", |
| | 1 | 301 | | Color = "#0dcaf0", |
| | 1 | 302 | | Group = GroupReturns, |
| | 1 | 303 | | DisplayOrder = 3, |
| | 1 | 304 | | Hint = "Возврат неотгруженного товара. Требуется GUID операции 1С в истории заказа.", |
| | 1 | 305 | | TargetStatusName = "Возврат на склад", |
| | 1 | 306 | | AllowedSourceStatuses = new[] { "ПринятНаСкладе", "Отгружен поставщиком", "Отгружен реализатором" }, |
| | 1 | 307 | | OneCMode = OneCMode.Required, |
| | 1 | 308 | | OneCDocument = OneCDocumentKind.TransferReversed, |
| | 1 | 309 | | WarehouseMode = WarehouseMode.Mapping, |
| | 1 | 310 | | RequirePriorOneCGuid = true, |
| | 1 | 311 | | EditableFields = BaseEditable, |
| | 1 | 312 | | Steps = TransactionCommitStepKeys.WithOneC, |
| | 0 | 313 | | CreateTransaction = (tm, o, u, d, c) => tm.CreateReturnToWarehouseTransaction(o, u, d, c) |
| | 1 | 314 | | }, |
| | 1 | 315 | | new TransactionDefinition |
| | 1 | 316 | | { |
| | 1 | 317 | | Type = TransactionType.ReturnTransfer, |
| | 1 | 318 | | Slug = "return-transfer", |
| | 1 | 319 | | PageCode = "Studio2.ReturnTransferTransaction.CreateReturnTransferTransaction", |
| | 1 | 320 | | LegacyEndpoint = "/Studio2/ReturnTransferTransaction/CreateReturnTransferTransaction", |
| | 1 | 321 | | Title = "Перемещение возврата", |
| | 1 | 322 | | ShortName = "Перемещение", |
| | 1 | 323 | | Icon = "fas fa-forward", |
| | 1 | 324 | | Color = "#0d6efd", |
| | 1 | 325 | | Group = GroupReturns, |
| | 1 | 326 | | DisplayOrder = 4, |
| | 1 | 327 | | Hint = "Дальнейшая обработка возврата покупателя.", |
| | 1 | 328 | | TargetStatusName = "Перемещение", |
| | 1 | 329 | | AllowedSourceStatuses = new[] { "Возврат покупателя" }, |
| | 1 | 330 | | UseStatusTransitions = false, |
| | 1 | 331 | | EditableFields = BaseEditable, |
| | 1 | 332 | | Steps = TransactionCommitStepKeys.StatusOnly, |
| | 0 | 333 | | CreateTransaction = (tm, o, u, d, c) => tm.CreateReturnTransferTransaction(o, u, d, c) |
| | 1 | 334 | | }, |
| | 1 | 335 | | new TransactionDefinition |
| | 1 | 336 | | { |
| | 1 | 337 | | Type = TransactionType.LostByCommissioner, |
| | 1 | 338 | | Slug = "lost-by-commissioner", |
| | 1 | 339 | | PageCode = "Studio2.LostByCommissionerTransaction.CreateLostByCommissionerTransaction", |
| | 1 | 340 | | LegacyEndpoint = "/Studio2/LostByCommissionerTransaction/CreateLostByCommissionerTransaction", |
| | 1 | 341 | | Title = "Утеря у комиссионера", |
| | 1 | 342 | | ShortName = "Утеря", |
| | 1 | 343 | | Icon = "fas fa-question-circle", |
| | 1 | 344 | | Color = "#dc3545", |
| | 1 | 345 | | Group = GroupReturns, |
| | 1 | 346 | | DisplayOrder = 5, |
| | 1 | 347 | | Hint = "Перемещение на транзитный склад утерь. Заказы без остатка в WarehouseStock пропускаются.", |
| | 1 | 348 | | TargetStatusName = "Утерян реализатором", |
| | 1 | 349 | | AllowedSourceStatuses = new[] { "Отгружен комиссионеру" }, |
| | 1 | 350 | | OneCMode = OneCMode.Optional, |
| | 1 | 351 | | OneCDocument = OneCDocumentKind.Transfer, |
| | 1 | 352 | | WarehouseMode = WarehouseMode.Mapping, |
| | 1 | 353 | | RequireWsStock = true, |
| | 1 | 354 | | EditableFields = BaseEditable.Concat(new[] { "manufacturer" }).ToArray(), |
| | 1 | 355 | | Steps = TransactionCommitStepKeys.WithOneC, |
| | 0 | 356 | | CreateTransaction = (tm, o, u, d, c) => tm.CreateLostByCommissionerTransaction(o, u, d, c) |
| | 1 | 357 | | }, |
| | 1 | 358 | | new TransactionDefinition |
| | 1 | 359 | | { |
| | 1 | 360 | | Type = TransactionType.WarehouseChange, |
| | 1 | 361 | | Slug = "warehouse-change", |
| | 1 | 362 | | PageCode = "Studio2.WarehouseChangeTransaction.CreateWarehouseChangeTransaction", |
| | 1 | 363 | | LegacyEndpoint = "/Studio2/WarehouseChangeTransaction/CreateWarehouseChangeTransaction", |
| | 1 | 364 | | Title = "Смена склада", |
| | 1 | 365 | | ShortName = "Склад", |
| | 1 | 366 | | Icon = "fas fa-edit", |
| | 1 | 367 | | Color = "#0d6efd", |
| | 1 | 368 | | Group = GroupWarehouse, |
| | 1 | 369 | | DisplayOrder = 2, |
| | 1 | 370 | | Hint = "Меняет склад отгрузки заказа, основной статус не меняется.", |
| | 1 | 371 | | TargetStatusName = null, |
| | 1 | 372 | | DisallowMarketplaceStatuses = Array.Empty<string>(), |
| | 1 | 373 | | OzonCancelPanel = true, |
| | 1 | 374 | | EditableFields = BaseEditable.Concat(new[] { "shipmentWarehouseId" }).ToArray(), |
| | 1 | 375 | | Steps = TransactionCommitStepKeys.StatusOnlyWithOzonCancel, |
| | 0 | 376 | | CreateTransaction = (tm, o, u, d, c) => tm.CreateWarehouseChangeTransaction(o, u, d, c) |
| | 1 | 377 | | }, |
| | 1 | 378 | | new TransactionDefinition |
| | 1 | 379 | | { |
| | 1 | 380 | | Type = TransactionType.WarehouseTransfer, |
| | 1 | 381 | | Slug = "warehouse-transfer", |
| | 1 | 382 | | PageCode = "Studio2.WarehouseTransferTransaction.CreateWarehouseTransferTransaction", |
| | 1 | 383 | | LegacyEndpoint = "/Studio2/WarehouseTransferTransaction/CreateWarehouseTransferTransaction", |
| | 1 | 384 | | Title = "Перемещение между складами", |
| | 1 | 385 | | ShortName = "Перемещение", |
| | 1 | 386 | | Icon = "fas fa-exchange-alt", |
| | 1 | 387 | | Color = "#0d6efd", |
| | 1 | 388 | | Group = GroupWarehouse, |
| | 1 | 389 | | DisplayOrder = 3, |
| | 1 | 390 | | Hint = "Перемещение в 1С: отправитель и получатель на весь документ. Не-администраторам отправитель подставл |
| | 1 | 391 | | TargetStatusName = "Перемещен между складами", |
| | 1 | 392 | | OneCMode = OneCMode.Optional, |
| | 1 | 393 | | OneCDocument = OneCDocumentKind.Transfer, |
| | 1 | 394 | | WarehouseMode = WarehouseMode.GlobalPair, |
| | 1 | 395 | | CheckStockBefore1C = true, |
| | 1 | 396 | | EditableFields = BaseEditable, |
| | 1 | 397 | | Steps = TransactionCommitStepKeys.WithOneC, |
| | 0 | 398 | | CreateTransaction = (tm, o, u, d, c) => tm.CreateWarehouseTransferTransaction(o, u, d, c) |
| | 1 | 399 | | }, |
| | 1 | 400 | | new TransactionDefinition |
| | 1 | 401 | | { |
| | 1 | 402 | | Type = TransactionType.Percentage, |
| | 1 | 403 | | Slug = "percentage", |
| | 1 | 404 | | PageCode = "Studio2.Percentage.Percentage", |
| | 1 | 405 | | LegacyEndpoint = "/Studio2/Percentage/Percentage", |
| | 1 | 406 | | Title = "Проценка", |
| | 1 | 407 | | ShortName = "Проценка", |
| | 1 | 408 | | Icon = "fas fa-percent", |
| | 1 | 409 | | Color = "#6f42c1", |
| | 1 | 410 | | Group = GroupPrices, |
| | 1 | 411 | | DisplayOrder = 1, |
| | 1 | 412 | | Hint = "Правка цен и закупки по отчёту без смены статуса.", |
| | 1 | 413 | | TargetStatusName = null, |
| | 1 | 414 | | UseStatusTransitions = false, |
| | 1 | 415 | | DisallowMarketplaceStatuses = Array.Empty<string>(), |
| | 1 | 416 | | PriceEditingOnly = true, |
| | 1 | 417 | | SupplierOffers = true, |
| | 1 | 418 | | EditableFields = new[] { "supplierId", "orderNumberToSupplier", "zasyl", "quantity", "purchasePrice", "weigh |
| | 1 | 419 | | Steps = TransactionCommitStepKeys.Percentage, |
| | 0 | 420 | | CreateTransaction = (tm, o, u, d, c) => tm.CreatePercentageTransaction(o, u, d, c) |
| | 1 | 421 | | } |
| | 1 | 422 | | }; |
| | | 423 | | |
| | 1 | 424 | | private static readonly IReadOnlyDictionary<string, TransactionDefinition> BySlugMap = |
| | 18 | 425 | | All.ToDictionary(d => d.Slug, StringComparer.OrdinalIgnoreCase); |
| | | 426 | | |
| | 1 | 427 | | private static readonly IReadOnlyDictionary<TransactionType, TransactionDefinition> ByTypeMap = |
| | 18 | 428 | | All.ToDictionary(d => d.Type); |
| | | 429 | | |
| | | 430 | | public static TransactionDefinition? BySlug(string? slug) |
| | 10 | 431 | | => slug != null && BySlugMap.TryGetValue(slug, out var d) ? d : null; |
| | | 432 | | |
| | | 433 | | public static TransactionDefinition? ByType(TransactionType type) |
| | 3 | 434 | | => ByTypeMap.TryGetValue(type, out var d) ? d : null; |
| | | 435 | | |
| | | 436 | | /// <summary>Типы без страницы проведения — служебные значения enum.</summary> |
| | 1 | 437 | | public static readonly IReadOnlySet<TransactionType> ServiceTypes = |
| | 1 | 438 | | new HashSet<TransactionType> { TransactionType.All, TransactionType.ReceiptNote }; |
| | | 439 | | } |