< Summary

Information
Class: Services.ApiSupplierSettingsServices.SupplierDeliverySurcharge
Assembly: Services
File(s): /home/runner/work/Studio2Prod/Studio2Prod/AppRepository/ApiSupplierSettings/SupplierDeliverySurcharge.cs
Line coverage
100%
Covered lines: 13
Uncovered lines: 0
Coverable lines: 13
Total lines: 36
Line coverage: 100%
Branch coverage
100%
Covered branches: 6
Total branches: 6
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
Apply(...)100%22100%
Apply(...)100%44100%
ToDays(...)100%11100%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/AppRepository/ApiSupplierSettings/SupplierDeliverySurcharge.cs

#LineLine coverage
 1using System.Globalization;
 2using Services.ApiServices.TradesoftApi.Models.Response;
 3
 4namespace Services.ApiSupplierSettingsServices;
 5
 6/// <summary>Прибавляет к срокам предложения надбавку из настроек API-поставщика.
 7/// Точное значение живёт в часах, а колонки проценки остаются в днях: их округляем вверх,
 8/// иначе надбавка меньше суток просто теряется.</summary>
 9public static class SupplierDeliverySurcharge
 10{
 11    /// <summary>Максимально допустимая надбавка — 30 суток: больше похоже на ошибку ввода, чем на срок доставки.</summa
 12    public const int MaxExtraHours = 720;
 13
 14    public static void Apply(IEnumerable<PreOrderItem> items, int extraHours)
 15    {
 2816        foreach (var item in items) Apply(item, extraHours);
 517    }
 18
 19    public static void Apply(PreOrderItem item, int extraHours)
 20    {
 1621        var extra = Math.Clamp(extraHours, 0, MaxExtraHours);
 1622        item.ExtraDeliveryHours = extra;
 1623        item.DeliveryHoursMin = Math.Max(0, item.DeliveryDaysMin) * 24 + extra;
 1624        item.DeliveryHoursMax = Math.Max(0, item.DeliveryDaysMax) * 24 + extra;
 2025        if (extra == 0) return;
 26
 1227        item.DeliveryDaysMin = ToDays(item.DeliveryHoursMin);
 1228        item.DeliveryDaysMax = ToDays(item.DeliveryHoursMax);
 29        // DeliveryDays — отображаемый «средний» срок, у части поставщиков это "-" или пусто:
 30        // такие значения оставляем как есть, число сдвигаем на ту же надбавку.
 1231        if (int.TryParse(item.DeliveryDays, NumberStyles.Integer, CultureInfo.InvariantCulture, out var days))
 1132            item.DeliveryDays = ToDays(Math.Max(0, days) * 24 + extra).ToString(CultureInfo.InvariantCulture);
 1233    }
 34
 3535    private static int ToDays(int hours) => (int)Math.Ceiling(hours / 24.0);
 36}