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); }
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(); }; }