Beispiel #1
0
        public static OrderSlipEventArgs Create(string orderNumber, SlipType type, string slipImageFile)
        {
            if (string.IsNullOrWhiteSpace(orderNumber))
            {
                throw new ArgumentException("Order number is mandatory");
            }

            OrderSlipEventArgs result = new OrderSlipEventArgs {
                Order         = orderNumber.Trim(),
                SlipType      = type,
                SlipImageFile = slipImageFile.Trim()
            };

            return(result);
        }
Beispiel #2
0
        public Attendant(IPaymentProvider paymentService, ICompositeDispenser dispenser, ISlipService slipService)
        {
            _paymentService = paymentService;
            _dispenser      = dispenser;
            _slipService    = slipService;

            Action _issueOrder = () => {
                // Print slip
                string slipImageFile = string.Empty;
                if (_slipService.Print(Order, SlipType.Standard, out slipImageFile))
                {
                    OnSlipPrinted?.Invoke(this, OrderSlipEventArgs.Create(Order.Number, SlipType.Standard, slipImageFile));
                }
                // else ... what should we do if slip printing failed?

                // Dispense products
                if (Order.Obtaining == GoodsObtainingMethod.Dispensing)
                {
                    Dispense();
                }
            };

            _paymentService.OnTotalAmountCollected += (sender, e) =>
            {
                OnMoneyAcceptanceIsOver?.Invoke(this, e);

                if (e.ChangeToIssue > 0m) // && cash payment only (probably)
                {
                    GiveChange(e.ChangeToIssue);
                }
                else
                {
                    _issueOrder();
                }
            };

            _paymentService.OnSomeMoneyIncome += (sender, e) => OnIncomePayment?.Invoke(this, e);

            _paymentService.OnSomeChangeHasBeenGiven += (sender, e) => OnIssueMoney?.Invoke(this, e);

            _paymentService.OnTotalChangeWasIssued += (sender, e) => { OnTotalChangeIssued?.Invoke(this, e); _issueOrder(); };
        }