< Summary

Information
Class: OzonOrdersWeb.Areas.Studio2.Controllers.Transactions.OrderedToSellerTransactionController
Assembly: OzonOrdersWeb
File(s): /home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Areas/Studio2/Controllers/Transactions/OrderedToSellerTransactionController.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 68
Coverable lines: 68
Total lines: 148
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
.ctor(...)100%210%
GetTransactionConfig()100%210%
ApplyWarehouseMappingSuppliersAsync()0%4260%
ApplyQuantitySplitCancellationLogic()0%156120%
CreateOrderedToSellerTransaction(...)100%210%
CreateOrderedToSellerTransaction(...)100%210%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Areas/Studio2/Controllers/Transactions/OrderedToSellerTransactionController.cs

#LineLine coverage
 1using Microsoft.AspNetCore.Mvc;
 2using Microsoft.EntityFrameworkCore;
 3using OzonDomains;
 4using OzonDomains.Models;
 5using OzonOrdersWeb.Areas.Studio2.Controllers.Base;
 6using OzonRepositories.Context;
 7using OzonRepositories.Data.Bitrix;
 8using Services.ApiServices;
 9using Services.ApiServices._1CApi;
 10using Services.ApiServices.OzonApi;
 11using Services.CacheServices.Cache.OzonOrdersCache;
 12using Services.CacheServices.Cache.UserCacheService;
 13using Services.DataServices;
 14using OzonOrdersWeb.WebServices.Currency;
 15using Services.TransactionUtilsServices;
 16using Services.CacheServices.Cache;
 17
 18namespace OzonOrdersWeb.Areas.Studio2.Controllers.Transactions;
 19
 20/// <summary>
 21/// Контроллер транзакции "Заказан реализатору"
 22/// </summary>
 23public class OrderedToSellerTransactionController : BaseTransactionController
 24{
 25    public OrderedToSellerTransactionController(
 26        ApplicationDbContext context,
 27        AppStatusDataServices appStatusServices,
 28        OrdersDataServices orderServices,
 29        TransactionManager transactionManager,
 30        TransactionCache transactionCache,
 31        SupplierDataServices supplierDataServices,
 32        IUserCacheService userCacheService,
 33        ICurrencyRatesViewBagService currencyRatesViewBagService,
 34        CacheUpdater<Order> cacheUpdater,
 35        OrderCache orderCache,
 36        OneCDataManager oneCDataManager,
 37        OneCTransferManager oneCTransferManager,
 38        WarehouseDataServices warehouseDataServices,
 39        WarehouseMappingDataServices warehouseMappingDataServices,
 40        BitrixStockRepository bitrixStockRepository,
 41        ExpenseTypeDataServices expenseTypeDataServices,
 42        OrderExtraExpenseDataServices orderExtraExpenseDataServices,
 43        StatusTransitionDataServices statusTransitionDataServices,
 44        OzonOrderCancellationService? ozonCancellationService = null)
 045        : base(context, appStatusServices, orderServices, transactionManager, transactionCache,
 046               supplierDataServices, userCacheService, currencyRatesViewBagService, cacheUpdater, orderCache,
 047               oneCDataManager, warehouseDataServices, bitrixStockRepository,
 048               oneCTransferManager: oneCTransferManager,
 049               warehouseMappingDataServices: warehouseMappingDataServices,
 050               expenseTypeDataServices: expenseTypeDataServices,
 051               orderExtraExpenseDataServices: orderExtraExpenseDataServices,
 052               statusTransitionDataServices: statusTransitionDataServices,
 053               ozonCancellationService: ozonCancellationService)
 54    {
 055    }
 56
 057    protected override TransactionConfig GetTransactionConfig() => new()
 058    {
 059        TransactionType = TransactionType.OrderedToSeller,
 060        PrimaryStatusName = "Заказан реализатору",
 061        UseStatusTransitions = false,
 062        RequiredSourceStatuses = new List<string> { "Не указан", "Заказан поставщику", "Заказан реализатору" },
 063        ClearPurchasePriceOnLoad = true,
 064        ViewName = "CreateOrderedToSellerTransaction",
 065        IncludeCancelledOrders = true,
 066        IncludeToCancellationStatus = true,
 067        SupportsOzonCancelPanel = true,
 068        LoadBitrixData = false,
 069        OrderFilter = TransactionConfig.StandardOrderFilter,
 070        CreateTransactionMethod = (tm, orders, userName, createAt, comment) =>
 071            tm.CreateOrderedToSellerTransaction(orders, userName, createAt, comment),
 072        ConfigureViewModelAsync = ApplyWarehouseMappingSuppliersAsync,
 073        AfterTransactOrdersAsync = async updatedOrders =>
 074            await ApplyQuantitySplitCancellationLogic(updatedOrders)
 075    };
 76
 77    private async Task ApplyWarehouseMappingSuppliersAsync(
 78        OzonOrdersWeb.ViewModels.OrderViewModels.MultiplayEditOrderViewModel viewModel)
 79    {
 080        if (WarehouseMappingDataServices == null || viewModel.Orders.Count == 0)
 081            return;
 82
 083        var mappings = await WarehouseMappingDataServices.GetWarehouseMappings();
 084        var unspecifiedSupplierId = viewModel.Suppliers
 085            .FirstOrDefault(supplier => string.Equals(supplier.Name, "Не указан", StringComparison.OrdinalIgnoreCase))
 086            ?.Id;
 87
 088        WarehouseMappingSupplierResolver.ApplyToOrders(
 089            viewModel.Orders,
 090            mappings,
 091            unspecifiedSupplierId);
 092    }
 93
 94    private async Task ApplyQuantitySplitCancellationLogic(List<Order> updatedOrders)
 95    {
 096        if (updatedOrders == null || updatedOrders.Count == 0)
 097            return;
 98
 099        var toCancellationStatus = await GetOrCreateAppStatus("К отмене");
 0100        var now = DateTime.Now;
 101
 0102        var secondParts = updatedOrders
 0103            .Where(o => !string.IsNullOrEmpty(o.ShipmentNumber) &&
 0104                        o.ShipmentNumber!.EndsWith("/2"))
 0105            .ToList();
 106
 0107        if (secondParts.Count == 0)
 0108            return;
 109
 0110        var firstShipmentNumbers = secondParts
 0111            .Select(o => o.ShipmentNumber![..^2] + "/1")
 0112            .Distinct()
 0113            .ToList();
 114
 0115        var firstParts = await Context.Orders
 0116            .Where(o => o.ShipmentNumber != null &&
 0117                        firstShipmentNumbers.Contains(o.ShipmentNumber))
 0118            .ToListAsync();
 119
 0120        foreach (var original in firstParts)
 121        {
 0122            if (original.Quantity is > 0)
 123            {
 0124                original.AppStatusId = toCancellationStatus.Id;
 0125                original.AppStatus = toCancellationStatus;
 0126                original.LastStatusChangeDate = now;
 0127                original.IsVerified = true;
 128            }
 129        }
 130
 0131        await Context.SaveChangesAsync();
 0132    }
 133
 134    [HttpGet]
 135    public Task<IActionResult> CreateOrderedToSellerTransaction(string ids, int page)
 0136        => CreateTransactionBase(ids, page);
 137
 138    [HttpPost]
 139    [ValidateAntiForgeryToken]
 140    public Task<IActionResult> CreateOrderedToSellerTransaction(
 141        List<Order> orders,
 142        string userName,
 143        string? comment,
 144        int page,
 145        string? deletedOrders,
 146        Dictionary<int, string?>? orderSupplierMap)
 0147        => CreateTransactionPostBase(orders, userName, comment, page, deletedOrders, orderSupplierMap);
 148}