/// <summary>
        /// Dispenses the specified show message box.
        /// </summary>
        /// <param name="showMessageBox">if set to <c>true</c> [show message box].</param>
        public DispenserWorkerResult Dispense(decimal cd1Value, decimal cd2Value, out string outputString)
        {
            CDC.CashDispenserItem.DispenseResult result1 = null;
            CDC.CashDispenserItem.DispenseResult result2 = null;
            string cd1 = string.Empty;
            string cd2 = string.Empty;
            DispenserWorkerResult result = DispenserWorkerResult.None;

            outputString = string.Empty;
            this.EnsureDecksAreLoaded();

            try
            {
                if (cd1Value > 0)
                {
                    try
                    {
                        CDC.CashDispenserItem item1 = this.UpperDeck;
                        cd1     = item1.CassetteAlias;
                        result1 = item1.Dispense(cd1Value);
                    }
                    catch (Exception ex)
                    {
                        ExceptionManager.Publish(ex);
                    }
                }
                else
                {
                    result1 = new BMC.CashDispenser.Core.CashDispenserItem.DispenseResult()
                    {
                        Result = true
                    };
                }

                if (cd2Value > 0)
                {
                    try
                    {
                        CDC.CashDispenserItem item2 = this.LowerDeck;
                        cd2     = item2.CassetteAlias;
                        result2 = item2.Dispense(cd2Value);
                    }
                    catch (Exception ex)
                    {
                        ExceptionManager.Publish(ex);
                    }
                }
                else
                {
                    result2 = new BMC.CashDispenser.Core.CashDispenserItem.DispenseResult()
                    {
                        Result = true
                    };
                }
            }
            catch (Exception ex)
            {
                ExceptionManager.Publish(ex);
            }
            finally
            {
                string        currencySymbol = ExtensionMethods.GetCurrencySymbol(string.Empty);
                StringBuilder sb             = new StringBuilder();

                if (result1 != null)
                {
                    sb.Append(result1.IssuedValue.ToString() + " " + currencySymbol);
                    sb.Append(" issued, ");
                    sb.Append(result1.RejectedValue.ToString() + " " + currencySymbol);
                    sb.Append(" rejected from " + cd1);
                    sb.Append(" (" + result1.ErrorDescription + ")");

                    // Upper Deck
                    if (result1.Result)
                    {
                        result |= DispenserWorkerResult.UpperDeckOK;
                    }
                    else
                    {
                        result |= DispenserWorkerResult.UpperDeckFail;
                    }
                }

                // Lower Deck
                if (result2 != null)
                {
                    if (sb.Length > 0)
                    {
                        sb.Append(Environment.NewLine);
                    }
                    sb.Append(result2.IssuedValue.ToString() + " " + currencySymbol);
                    sb.Append(" issued, ");
                    sb.Append(result2.RejectedValue.ToString() + " " + currencySymbol);
                    sb.Append(" rejected from " + cd2);
                    sb.Append(" (" + result2.ErrorDescription + ")");

                    if (result2.Result)
                    {
                        result |= DispenserWorkerResult.LowerDeckOK;
                    }
                    else
                    {
                        result |= DispenserWorkerResult.LowerDeckFail;
                    }
                }

                outputString = sb.ToString();
            }

            // Final Condition
            if (((result & DispenserWorkerResult.LowerDeckOK) == DispenserWorkerResult.LowerDeckOK) &&
                ((result & DispenserWorkerResult.UpperDeckOK) == DispenserWorkerResult.UpperDeckOK))
            {
                result = DispenserWorkerResult.Success |
                         DispenserWorkerResult.LowerDeckOK |
                         DispenserWorkerResult.UpperDeckOK;
            }
            else
            {
                result &= ~DispenserWorkerResult.None;
                result |= DispenserWorkerResult.Failed;
            }
            return(result);
        }
        /// <summary>
        /// Dispenses the specified show message box.
        /// </summary>
        /// <param name="showMessageBox">if set to <c>true</c> [show message box].</param>
        public DispenserWorkerResult Dispense(decimal cd1Value, decimal cd2Value, out string outputString)
        {
            CDC.CashDispenserItem.DispenseResult result1 = null;
            CDC.CashDispenserItem.DispenseResult result2 = null;
            string cd1 = string.Empty;
            string cd2 = string.Empty;
            DispenserWorkerResult result = DispenserWorkerResult.None;
            outputString = string.Empty;
            this.EnsureDecksAreLoaded();

            try
            {
                if (cd1Value > 0)
                {
                    try
                    {
                        CDC.CashDispenserItem item1 = this.UpperDeck;
                        cd1 = item1.CassetteAlias;
                        result1 = item1.Dispense(cd1Value);
                    }
                    catch (Exception ex)
                    {
                        ExceptionManager.Publish(ex);
                    }
                }
                else
                {
                    result1 = new BMC.CashDispenser.Core.CashDispenserItem.DispenseResult() { Result = true };
                }

                if (cd2Value > 0)
                {
                    try
                    {
                        CDC.CashDispenserItem item2 = this.LowerDeck;
                        cd2 = item2.CassetteAlias;
                        result2 = item2.Dispense(cd2Value);
                    }
                    catch (Exception ex)
                    {
                        ExceptionManager.Publish(ex);
                    }
                }
                else
                {
                    result2 = new BMC.CashDispenser.Core.CashDispenserItem.DispenseResult(){Result = true};
                }
            }
            catch (Exception ex)
            {
                ExceptionManager.Publish(ex);
            }
            finally
            {
                string currencySymbol = ExtensionMethods.GetCurrencySymbol(string.Empty);
                StringBuilder sb = new StringBuilder();

                if (result1 != null)
                {
                    sb.Append(result1.IssuedValue.ToString() + " " + currencySymbol);
                    sb.Append(" issued, ");
                    sb.Append(result1.RejectedValue.ToString() + " " + currencySymbol);
                    sb.Append(" rejected from " + cd1);
                    sb.Append(" (" + result1.ErrorDescription + ")");

                    // Upper Deck
                    if (result1.Result)
                    {
                        result |= DispenserWorkerResult.UpperDeckOK;
                    }
                    else
                    {
                        result |= DispenserWorkerResult.UpperDeckFail;
                    }
                }

                // Lower Deck
                if (result2 != null)
                {
                    if (sb.Length > 0)
                    {
                        sb.Append(Environment.NewLine);
                    }
                    sb.Append(result2.IssuedValue.ToString() + " " + currencySymbol);
                    sb.Append(" issued, ");
                    sb.Append(result2.RejectedValue.ToString() + " " + currencySymbol);
                    sb.Append(" rejected from " + cd2);
                    sb.Append(" (" + result2.ErrorDescription + ")");

                    if (result2.Result)
                    {
                        result |= DispenserWorkerResult.LowerDeckOK;
                    }
                    else
                    {
                        result |= DispenserWorkerResult.LowerDeckFail;
                    }
                }

                outputString = sb.ToString();
            }

            // Final Condition
            if (((result & DispenserWorkerResult.LowerDeckOK) == DispenserWorkerResult.LowerDeckOK) &&
                ((result & DispenserWorkerResult.UpperDeckOK) == DispenserWorkerResult.UpperDeckOK))
            {
                result = DispenserWorkerResult.Success |
                    DispenserWorkerResult.LowerDeckOK |
                    DispenserWorkerResult.UpperDeckOK;
            }
            else
            {
                result &= ~DispenserWorkerResult.None;
                result |= DispenserWorkerResult.Failed;
            }
            return result;
        }