Advertisement
K1SR

PriceList klasa

Jun 18th, 2025
334
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.01 KB | None | 0 0
  1. public class PriceList
  2. {
  3.     public Guid Id { get; private set; } // Identitet
  4.     public DateRange ActivePeriod { get; private set; } // Value Object
  5.     public PriceListStatus Status { get; private set; } // Status u životnom ciklusu
  6.  
  7.     // Povezanost sa drugim entitetima/agregatima preko ID-a ili referenci
  8.     public Guid CreatedByEmployeeId { get; private set; }
  9.     public Guid? PublishedByEmployeeId { get; private set; }
  10.     public Guid? ClosedByEmployeeId { get; private set; }
  11.  
  12.     // Kolekcija stavki cenovnika (PriceListItems) - možda lista Value Objekata ili entiteta u zavisnosti od konteksta
  13.     private List<ProductPrice> _productPrices;
  14.     public IReadOnlyCollection<ProductPrice> ProductPrices => _productPrices.AsReadOnly();
  15.  
  16.     private List<Correction> _corrections; // Skup ispravki na cenovnik
  17.     public IReadOnlyCollection<Correction> Corrections => _corrections.AsReadOnly();
  18.  
  19.     public PriceList(Guid id, DateRange activePeriod, Guid createdByEmployeeId)
  20.     {
  21.         Id = id;
  22.         ActivePeriod = activePeriod ?? throw new ArgumentNullException(nameof(activePeriod));
  23.         CreatedByEmployeeId = createdByEmployeeId;
  24.         Status = PriceListStatus.Draft; // Inicijalno stanje
  25.         _productPrices = new List<ProductPrice>();
  26.         _corrections = new List<Correction>();
  27.  
  28.         // Self-validating: Validacija pri konstrukciji
  29.         // Dodatna validacija ako postoji specifično pravilo pri kreiranju
  30.     }
  31.  
  32.     // Behavior-rich metode koje menjaju stanje i uključuju self-validaciju
  33.     public void Publish(Guid publishedByEmployeeId)
  34.     {
  35.         if (Status != PriceListStatus.Draft)
  36.         {
  37.             throw new InvalidOperationException("Only draft price lists can be published.");
  38.         }
  39.         // Dodatna poslovna pravila pre publikovanja
  40.         Status = PriceListStatus.Published;
  41.         PublishedByEmployeeId = publishedByEmployeeId;
  42.     }
  43.  
  44.     public void Close(Guid closedByEmployeeId)
  45.     {
  46.         if (Status == PriceListStatus.Closed || Status == PriceListStatus.Expired)
  47.         {
  48.             throw new InvalidOperationException("Price list is already closed or expired.");
  49.         }
  50.         // Dodatna poslovna pravila pre zatvaranja
  51.         Status = PriceListStatus.Closed;
  52.         ClosedByEmployeeId = closedByEmployeeId;
  53.     }
  54.  
  55.     public void AddCorrection(Correction correction)
  56.     {
  57.         if (Status == PriceListStatus.Closed)
  58.         {
  59.             throw new InvalidOperationException("Cannot add corrections to a closed price list.");
  60.         }
  61.         // Dodatna validacija za samu korekciju
  62.         _corrections.Add(correction);
  63.     }
  64.  
  65.     public ProductPrice GetPriceForProduct(Guid productId)
  66.     {
  67.         // Logika za pronalaženje cene, npr. uzimanje u obzir korekcija
  68.         return _productPrices.FirstOrDefault(pp => pp.ProductId == productId);
  69.     }
  70.  
  71.     // ... druge metode koje podržavaju životni ciklus i ponašanje
  72. }
  73.  
  74. public enum PriceListStatus
  75. {
  76.     Draft,
  77.     Published,
  78.     Closed,
  79.     Expired
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement