Exemple #1
0
        // Sample business method that uses Policy
        public void ApplyRebate(IRebatePolicy rebatePolicy)
        {
            CheckIfDraft();

            _rebatePolicy = rebatePolicy;
            Recalculate();
        }
Exemple #2
0
 public OrderLine(Product product, int quantity, IRebatePolicy rebatePolicy, Order order)
 {
     Product  = product;
     Quantity = quantity;
     Order    = order;
     Recalculate(rebatePolicy);
 }
Exemple #3
0
        public void Recalculate(IRebatePolicy rebatePolicy)
        {
            RegularCost = Product.Price.MultiplyBy(Quantity);
            Money rebate = rebatePolicy.CalculateRebate(Product, Quantity,
                                                        RegularCost);

            EffectiveCost = RegularCost - rebate;
        }
        public void SetRebatePolicy(IRebatePolicy rebatePolicy)
        {
            if (_rebatePolicy != null)
            {
                throw new IllegalStateException("Rebate policy has been already set");
            }

            _rebatePolicy = rebatePolicy;
        }
Exemple #5
0
        // Sample technique of injecting Policy into the Aggregate.
        // Can be called only once by Factory/Repository.
        internal void SetRebatePolicy(IRebatePolicy rebatePolicy)
        {
            if (_rebatePolicy != null)
            {
                throw new IllegalStateException("Policy is already set! Probably You have logical error in code");
            }

            _rebatePolicy = rebatePolicy;
        }
Exemple #6
0
        public VipRebate(IRebatePolicy decorated, Money minimalThreshold, Money rebateValue)
            : base(decorated)
        {
            if (rebateValue > minimalThreshold)
            {
                throw new ArgumentException("Rabate can't be graterThan minimal threshold");
            }

            _minimalThreshold = minimalThreshold;
            _rebateValue      = rebateValue;
        }
Exemple #7
0
        public void Handle()
        {
            Order order = _orderRepository.Get(14);


            RebatePolicyFactory rebatePolicyFactory = new RebatePolicyFactory(_orderRepository, order.Customer);
            IRebatePolicy       rebatePolicy        = rebatePolicyFactory.CreateRebatePolicy();

            order.SetRebatePolicy(rebatePolicy);
            order.AddProduct(new Product());
        }
        private void Recalculate(IRebatePolicy rebatePolicy)
        {
            TotalRegularPrice = Product.Price * Quantity;

            if (HasAnyRebates(rebatePolicy))
            {
                TotalEffectivePrice = rebatePolicy.CalculateRebate(Product.Price, Quantity);
            }
            else
            {
                TotalEffectivePrice = TotalRegularPrice;
            }
        }
        public void Handle()
        {
            int      customerId = 12;
            Customer customer   = _customerRepository.GetCustomer(customerId);

            RebatePolicyFactory rebatePolicyFactory = new RebatePolicyFactory(_orderRepository, customer);
            IRebatePolicy       rebatePolicy        = rebatePolicyFactory.CreateRebatePolicy();

            OrderFactory orderFactory = new OrderFactory(customer, rebatePolicy);

            Order order = orderFactory.CreateOrder();

            //TODO: Save order into the store
        }
        public Order CrateOrder(Client client)
        {
            CheckIfClientCanPerformPurchase(client);

            Order order = new Order(client.Id, Money.Zero, OrderStatus.Draft);

            Injector.InjectDependencies(order);

            IRebatePolicy rebatePolicy = RebatePolicyFactory.CreateRebatePolicy();

            order.SetRebatePolicy(rebatePolicy);

            AddGratis(order, client);

            return(order);
        }
 protected RebateDecorator(IRebatePolicy decorated)
 {
     Decorated = decorated;
 }
Exemple #12
0
 public void IncreaseQuantity(int quantity, IRebatePolicy rebatePolicy)
 {
     Quantity += quantity;
     Recalculate(rebatePolicy);
 }
 private bool HasAnyRebates(IRebatePolicy rebatePolicy)
 {
     return(rebatePolicy != null);
 }
 public void IncreaseQuantity(IRebatePolicy rebatePolicy)
 {
     Quantity++;
     Recalculate(rebatePolicy);
 }
 public OrderLine(Product product, IRebatePolicy rebatePolicy)
 {
     Product = product;
     Recalculate(rebatePolicy);
 }
Exemple #16
0
 public OrderFactory(Customer customer, IRebatePolicy rebatePolicy)
 {
     _rebatePolicy = rebatePolicy;
     _customer     = customer;
 }