/// <summary>
        /// Method to add cash bonus draw
        /// </summary>
        /// <param name="cashBonusDraw">Cash draw</param>
        public void AddCashBonusDraw(CashBonusDraw cashBonusDraw)
        {
            var _connection = new SqlConnection(GetConnectionString(DataSource.CSCTills));

            if (_connection.State == ConnectionState.Closed)
            {
                _connection.Open();
            }
            var _dataTable = new DataTable();
            var _adapter   = new SqlDataAdapter("select * from CashDraw where TILL=" + cashBonusDraw.TillNumber, _connection);

            _adapter.Fill(_dataTable);
            var fields = _dataTable.NewRow();

            fields["Draw_Date"] = cashBonusDraw.DrawDate;
            fields["User"]      = cashBonusDraw.User;
            fields["Till"]      = cashBonusDraw.TillNumber;
            fields["Reason"]    = cashBonusDraw.Reason;
            fields["CashBonus"] = cashBonusDraw.CashBonus;
            _dataTable.Rows.Add(fields);
            SqlCommandBuilder builder = new SqlCommandBuilder(_adapter);

            _adapter.InsertCommand = builder.GetInsertCommand();
            _adapter.Update(_dataTable);
            _connection.Close();
            _adapter?.Dispose();
        }
        /// <summary>
        /// Method to complete the cash bonus draw
        /// </summary>
        /// <param name="cashDraw"></param>
        /// <param name="userCode"></param>
        /// <param name="copies"></param>
        /// <param name="errorMessage"></param>
        /// <returns></returns>
        public FileStream CompleteCashBonusDraw(CashBonusDrawButton cashBonusDraw, string userCode, out int copies,
                                                out ErrorMessage errorMessage)
        {
            var dateStart = DateTime.Now;

            _performancelog.Debug($"Start,CashManager,GetCashDrawButtons,{string.Empty},{dateStart:hh.mm.ss.ffffff}");
            copies       = _policyManager.CashDrawReceiptCopies;
            errorMessage = new ErrorMessage();
            var message = string.Empty;
            var till    = _tillService.GetTill(cashBonusDraw.TillNumber);

            if (till == null)
            {
                message = "Till does not exists";
            }

            if (cashBonusDraw.Amount <= 0)
            {
                message = "Invalid Cash Bonus Draw Amount";
            }

            if (!string.IsNullOrEmpty(message))
            {
                errorMessage.MessageStyle = new MessageStyle
                {
                    Message = message
                };
                errorMessage.StatusCode = System.Net.HttpStatusCode.BadRequest;
                _performancelog.Debug($"End,CashManager,GetCashDrawButtons,{DateTime.Now.Subtract(dateStart).TotalMilliseconds},{DateTime.Now:hh.mm.ss.ffffff}");

                return(null);
            }
            var isInvalidCash     = false;
            var isInvalidQuantity = false;

            var cashBonusDrawButtons = GetCashBonusDrawButtons(userCode, out errorMessage);

            if (!string.IsNullOrEmpty(errorMessage.MessageStyle.Message))
            {
                _performancelog.Debug($"End,CashManager,GetCashDrawButtons,{DateTime.Now.Subtract(dateStart).TotalMilliseconds},{DateTime.Now:hh.mm.ss.ffffff}");
                return(null);
            }

            ValidateCoins(cashBonusDraw, ref isInvalidCash, ref isInvalidQuantity, cashBonusDrawButtons);
            //ValidateBills(cashDraw, ref isInvalidCash, ref isInvalidQuantity, cashDrawButtons);

            if (isInvalidCash)
            {
                message = "Invalid CashBonus";
            }

            if (isInvalidQuantity)
            {
                message = "Invalid CashBonus Quantity";
            }

            if (!string.IsNullOrEmpty(message))
            {
                errorMessage.MessageStyle = new MessageStyle
                {
                    Message = message
                };
                errorMessage.StatusCode = System.Net.HttpStatusCode.BadRequest;
                _performancelog.Debug($"End,CashManager,GetCashDrawButtons,{DateTime.Now.Subtract(dateStart).TotalMilliseconds},{DateTime.Now:hh.mm.ss.ffffff}");
                return(null);
            }

            //print receipt
            var reasonType = ReasonType.CashDraw;
            var reason     = _reasonService.GetReturnReason(cashBonusDraw.DrawReason, (char)reasonType);

            if (_policyManager.DRAW_REASON && reason == null)
            {
                errorMessage.MessageStyle = new MessageStyle
                {
                    Message = "Invalid Reason"
                };
                errorMessage.StatusCode = System.Net.HttpStatusCode.BadRequest;
                _performancelog.Debug($"End,CashManager,GetCashDrawButtons,{DateTime.Now.Subtract(dateStart).TotalMilliseconds},{DateTime.Now:hh.mm.ss.ffffff}");
                return(null);
            }

            var draw = new CashBonusDraw
            {
                TillNumber = cashBonusDraw.TillNumber,
                DrawDate   = DateTime.Now,
                //TotalValue = (float)cashDraw.Amount,
                User      = userCode.ToUpper(),
                Reason    = cashBonusDraw.DrawReason,
                CashBonus = cashBonusDraw.Amount
            };

            // add values to cash bonus draw
            _cashBonusService.AddCashBonusDraw(draw);

            //update till
            if (till != null)
            {
                till.CashBonus = till.CashBonus + cashBonusDraw.Amount;
                _tillService.UpdateTill(till);
                _performancelog.Debug($"End,CashManager,GetCashDrawButtons,{DateTime.Now.Subtract(dateStart).TotalMilliseconds},{DateTime.Now:hh.mm.ss.ffffff}");
                // return _receiptManager.Print_Draw(till, cashBonusDraw.RegisterNumber, userCode, cashBonusDraw.Coins, reason, cashBonusDraw.Amount);
            }
            return(null);
        }