< Summary

Information
Class: OzonDomains.Models.SupplierStatuses.OrderSupplierState
Assembly: OzonDomains
File(s): /home/runner/work/Studio2Prod/Studio2Prod/OzonDomains/Models/SupplierStatuses/OrderSupplierState.cs
Line coverage
86%
Covered lines: 25
Uncovered lines: 4
Coverable lines: 29
Total lines: 105
Line coverage: 86.2%
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_Id()100%11100%
get_OrderId()100%11100%
get_Order()100%210%
get_ProviderKey()100%11100%
get_SupplierId()100%11100%
get_Stage()100%11100%
get_SupplierStatusId()100%11100%
get_SupplierStatus()100%210%
get_ActiveOrderId()100%11100%
get_CartItemId()100%11100%
get_ExternalBasketItemId()100%11100%
get_ExternalOrderNumber()100%11100%
get_ExternalOrderId()100%11100%
get_ExternalLineId()100%11100%
get_QuantityOrdered()100%11100%
get_QuantityConfirmed()100%210%
get_QuantityShipped()100%210%
get_QuantityRejected()100%11100%
get_ExpectedDeliveryAt()100%11100%
get_OrderedAt()100%11100%
get_DeliveryDaysMin()100%11100%
get_DeliveryDaysMax()100%11100%
get_Direction()100%11100%
get_LastStatusChangeAt()100%11100%
get_LastSyncedAt()100%11100%
get_SyncError()100%11100%
get_CreatedBy()100%11100%
get_CreatedAt()100%11100%
get_UpdatedAt()100%11100%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/OzonDomains/Models/SupplierStatuses/OrderSupplierState.cs

#LineLine coverage
 1using System.ComponentModel.DataAnnotations;
 2using System.ComponentModel.DataAnnotations.Schema;
 3
 4namespace OzonDomains.Models.SupplierStatuses;
 5
 6/// <summary>
 7/// Состояние заказа Studio2 у API-поставщика. Одна строка ведёт заказ через обе стадии:
 8/// создаётся при попадании в корзину (Stage = Cart), при оформлении переходит в Stage = Ordered
 9/// и дальше несёт статус заказа от API. Модель Order не расширяется — связь только отсюда.
 10/// </summary>
 11[Table("OrderSupplierStates")]
 12public class OrderSupplierState
 13{
 60914    public long Id { get; set; }
 15
 83216    public int OrderId { get; set; }
 17
 018    public virtual Order? Order { get; set; }
 19
 20    /// <summary>Ключ провайдера: Avd / Armtek / ArmtekBy / MlAuto / MlAutoRu.</summary>
 21    [Required, MaxLength(64)]
 145122    public string ProviderKey { get; set; } = string.Empty;
 23
 24    /// <summary>Системный поставщик на момент создания строки.</summary>
 2125    public int? SupplierId { get; set; }
 26
 27    /// <summary>Cart / Ordered / Closed — см. OrderSupplierStage.</summary>
 28    [Required, MaxLength(20)]
 148729    public string Stage { get; set; } = OrderSupplierStage.Cart;
 30
 31    /// <summary>
 32    /// Текущий статус: корзины (StatusKind = Cart) или заказа (StatusKind = Order),
 33    /// в зависимости от <see cref="Stage"/>.
 34    /// </summary>
 17435    public int? SupplierStatusId { get; set; }
 36
 037    public virtual SupplierStatus? SupplierStatus { get; set; }
 38
 39    /// <summary>
 40    /// Равен <see cref="OrderId"/>, пока строка активна, и NULL после закрытия.
 41    /// Уникальный индекс (ProviderKey, ActiveOrderId) не даёт завести двойное отслеживание
 42    /// одного заказа у одного поставщика, но сохраняет закрытые строки для истории.
 43    /// </summary>
 65044    public int? ActiveOrderId { get; set; }
 45
 46    /// <summary>Id строки локальной корзины: ArmtekCartItems / MlAutoCartItems / MlAutoRuCartItems.</summary>
 147    public long? CartItemId { get; set; }
 48
 49    /// <summary>Id строки удалённой корзины АВД (у неё локальной таблицы нет).</summary>
 50    [MaxLength(50)]
 351    public string? ExternalBasketItemId { get; set; }
 52
 53    /// <summary>Номер заказа у поставщика: Vbeln (Armtek) / OrderNumber (ML-Auto) / номер заказа АВД.</summary>
 54    [MaxLength(50)]
 11755    public string? ExternalOrderNumber { get; set; }
 56
 57    /// <summary>Внутренний идентификатор заказа поставщика (AvdOrder.OrderId).</summary>
 58    [MaxLength(50)]
 259    public string? ExternalOrderId { get; set; }
 60
 61    /// <summary>Идентификатор строки заказа поставщика: AvdOrderItem.Id, Armtek Posnr.</summary>
 62    [MaxLength(50)]
 163    public string? ExternalLineId { get; set; }
 64
 1365    public decimal? QuantityOrdered { get; set; }
 66
 067    public decimal? QuantityConfirmed { get; set; }
 68
 069    public decimal? QuantityShipped { get; set; }
 70
 6571    public decimal? QuantityRejected { get; set; }
 72
 6673    public DateTime? ExpectedDeliveryAt { get; set; }
 74
 75    /// <summary>Момент фактического оформления заказа (первый переход в Stage = Ordered) — не смещается последующими см
 13676    public DateTime? OrderedAt { get; set; }
 77
 78    /// <summary>Срок поставки (дни) на момент проценки/оформления — снимок, опросом статуса не обновляется.</summary>
 779    public int? DeliveryDaysMin { get; set; }
 80
 781    public int? DeliveryDaysMax { get; set; }
 82
 83    /// <summary>Направление/склад отгрузки поставщика на момент проценки, например «ЦЗ Москва (0000116774)».</summary>
 84    [MaxLength(255)]
 985    public string? Direction { get; set; }
 86
 10787    public DateTime? LastStatusChangeAt { get; set; }
 88
 89    /// <summary>Ведёт выборку джобы синхронизации.</summary>
 63590    public DateTime? LastSyncedAt { get; set; }
 91
 92    /// <summary>
 93    /// Последняя ошибка опроса API. Записывается, не затирая уже известный статус:
 94    /// недоступность поставщика не должна выглядеть как смена состояния заказа.
 95    /// </summary>
 96    [MaxLength(1000)]
 9597    public string? SyncError { get; set; }
 98
 99    [MaxLength(450)]
 46100    public string? CreatedBy { get; set; }
 101
 1326102    public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
 103
 813104    public DateTime UpdatedAt { get; set; } = DateTime.UtcNow;
 105}