Advertisement
Guest User

Untitled

a guest
Nov 20th, 2019
166
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.82 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4.  
  5. namespace iTero.Orders.Domain.Entities
  6. {
  7.     public class Order
  8.     {
  9.         public long Id { get; }
  10.  
  11.         public DateTime DateCreated { get; }
  12.         public Patient Patient { get; }
  13.         public Partner Partner { get; }
  14.         public Rx Rx { get; }
  15.         public IReadOnlyList<OrderDetail> OrderDetails => _orderDetails;
  16.         private List<OrderDetail> _orderDetails { get; }
  17.         public Contact Doctor { get; }
  18.  
  19.         public Partner ShipToPartner
  20.         {
  21.             get => _shipToPartner;
  22.             private set
  23.             {
  24.                 _isShipToPartnerSet = true;
  25.                 _shipToPartner = value;
  26.             }
  27.         }
  28.  
  29.         private bool _isShipToPartnerSet;
  30.         private Partner _shipToPartner;
  31.  
  32.         public Order(long id, DateTime dateCreated,
  33.             Patient patient, Partner partner, Rx rx, Contact doctor, List<OrderDetail> orderDetails)
  34.         {
  35.             Id = id;
  36.  
  37.             DateCreated = dateCreated;
  38.             Patient = patient;
  39.             Partner = partner;
  40.             Rx = rx;
  41.             Doctor = doctor;
  42.             _orderDetails = orderDetails;
  43.         }
  44.  
  45.         public Order SetShipToPartner(Partner partner)
  46.         {
  47.             ShipToPartner = partner;
  48.             return this;
  49.         }
  50.  
  51.         public Order AddIfNeededIdeOrderDetail(bool isDirectToLab)
  52.         {
  53.             var iRecordOrderDetail = _orderDetails.SingleOrDefault(od => od.CaseType == CaseType.iRecord);
  54.             var ideOrderDetail = _orderDetails.SingleOrDefault(od =>
  55.                 od.GetType() == typeof(DigitalProductOrderDetail) &&
  56.                 ((DigitalProductOrderDetail) od).ITeroDigitalProductType == iTeroDigitalProductType.iDE_Order);
  57.  
  58.             if (!_isShipToPartnerSet)
  59.             {
  60.                 throw new Exception("At first set shipToPartner"); //todo need some typed exception
  61.             }
  62.  
  63.             if (ideOrderDetail != default)
  64.             {
  65.                 throw new Exception("Ide order detail already exists "); //todo need some typed exception
  66.             }
  67.  
  68.             if (iRecordOrderDetail != default && ShipToPartner != default || isDirectToLab)
  69.             {
  70.                 _orderDetails.Add(
  71.                     new DigitalProductOrderDetail(default, iTeroDigitalProductType.iDE_Order,
  72.                         DateTime.UtcNow, 1,new List<WorkOrder>()));
  73.             }
  74.             return this;
  75.         }
  76.     }
  77.  
  78.     public class RegisteredOrder : Order
  79.     {
  80.         public RegisteredOrder
  81.         (long id, DateTime dateCreated, Patient patient,
  82.             Partner partner, Rx rx, Contact doctor, List<OrderDetail> orderDetails)
  83.             : base(id, dateCreated, patient, partner, rx, doctor, orderDetails)
  84.         {
  85.         }
  86.     }
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement