/// <summary>
        /// Method to get cash draw buttons
        /// </summary>
        /// <returns>Cash draw buttons</returns>
        public CashBonusDrawButton GetCashBonusDrawButtons(string userCode, out ErrorMessage error)
        {
            var dateStart = DateTime.Now;

            _performancelog.Debug($"Start,CashManager,GetCashBonusDrawButtons,{string.Empty},{dateStart:hh.mm.ss.ffffff}");
            var offSet = _policyManager.LoadStoreInfo().OffSet;

            error = new ErrorMessage();
            var user = _loginManager.GetExistingUser(userCode);

            if (!Convert.ToBoolean(_policyManager.GetPol("U_TILLDRAW", user)))
            {
                MessageType temp_VbStyle3 = (int)MessageType.Exclamation + MessageType.OkOnly;
                error.MessageStyle = _resourceManager.CreateMessage(offSet, 38, 56, null, temp_VbStyle3);
                error.StatusCode   = System.Net.HttpStatusCode.Forbidden;
                _performancelog.Debug($"End,CashManager,GetCashBonusDrawButtons,{DateTime.Now.Subtract(dateStart).TotalMilliseconds},{DateTime.Now:hh.mm.ss.ffffff}");
                return(null);
            }

            var cashBonusDrawButton = new CashBonusDrawButton
            {
                Coins = _cashBonusService.GetCashBonusCoins()
            };

            _performancelog.Debug($"End,CashManager,GetCashBonusDrawButtons,{DateTime.Now.Subtract(dateStart).TotalMilliseconds},{DateTime.Now:hh.mm.ss.ffffff}");

            return(cashBonusDrawButton);
        }
Пример #2
0
        ///// <summary>
        ///// Method to get cash draw types
        ///// </summary>
        ///// <returns>Csh draw button</returns>
        //[Route("UpdateTill")]
        //[HttpGet]
        //[SwaggerResponse(HttpStatusCode.Unauthorized, Type = typeof(ErrorResponse))]
        //[SwaggerResponse(HttpStatusCode.BadRequest, Type = typeof(ErrorResponse))]
        //[SwaggerResponse(HttpStatusCode.Forbidden, Type = typeof(ErrorResponse))]
        //[SwaggerResponse(HttpStatusCode.NotFound, Type = typeof(ErrorResponse))]
        //[SwaggerResponse(HttpStatusCode.OK, Type = typeof(CashDrawButtonsResponseModel))]
        //public HttpResponseMessage UpdateTill()
        //{

        //}

        /*
         * /// <summary>
         * /// Method to complete cash draw
         * /// </summary>
         * /// <param name="cashDraw">Cash draw</param>
         * /// <returns>Receipt</returns>
         * [Route("completeDraw")]
         * [HttpPost]
         * [SwaggerResponse(HttpStatusCode.Unauthorized, Type = typeof(ErrorResponse))]
         * [SwaggerResponse(HttpStatusCode.BadRequest, Type = typeof(ErrorResponse))]
         * [SwaggerResponse(HttpStatusCode.Forbidden, Type = typeof(ErrorResponse))]
         * [SwaggerResponse(HttpStatusCode.NotFound, Type = typeof(ErrorResponse))]
         * [SwaggerResponse(HttpStatusCode.OK, Type = typeof(ReportModel))]
         * public HttpResponseMessage CompleteCashDraw([FromBody] CashDrawButton cashDraw)
         * {
         *     var dateStart = DateTime.Now;
         *     _performancelog.Debug($"Start,CashController,CompleteCashDraw,{string.Empty},{dateStart:hh.mm.ss.ffffff}");
         *     string userCode;
         *     HttpResponseMessage httpResponseMessage;
         *     if (GetUserCode(out userCode, out httpResponseMessage)) return httpResponseMessage;
         *     if (cashDraw == null)
         *     {
         *         return Request.CreateResponse(
         *             HttpStatusCode.BadRequest,
         *             new ErrorResponse
         *             {
         *                 Error = new MessageStyle { Message = Constants.InvalidRequest, MessageType = 0 }
         *             });
         *     }
         *     ErrorMessage error;
         *     int copies;
         *     var fs = _cashManager.CompleteCashDraw(cashDraw, userCode, out copies, out error);
         *     if (!string.IsNullOrEmpty(error.MessageStyle.Message))
         *     {
         *         _performancelog.Debug(
         *             $"End,CashController,CompleteCashDraw,{DateTime.Now.Subtract(dateStart).TotalMilliseconds},{DateTime.Now:hh.mm.ss.ffffff}");
         *
         *         return Request.CreateResponse(HttpStatusCode.BadRequest,
         *             new ErrorResponse
         *             {
         *                 Error = error.MessageStyle,
         *             });
         *     }
         *     try
         *     {
         *         var content = Helper.CreateBytes(fs);
         *         var cashDrawReceipt = new ReportModel
         *         {
         *             ReportName = Constants.CashDrawFile,
         *             ReportContent = content,
         *             Copies = copies
         *         };
         *         _performancelog.Debug(
         *             $"End,CashController,CompleteCashDraw,{DateTime.Now.Subtract(dateStart).TotalMilliseconds},{DateTime.Now:hh.mm.ss.ffffff}");
         *
         *         return Request.CreateResponse(HttpStatusCode.OK, cashDrawReceipt);
         *     }
         *     catch
         *     {
         *         _performancelog.Debug(
         *             $"End,CashController,CompleteCashDraw,{DateTime.Now.Subtract(dateStart).TotalMilliseconds},{DateTime.Now:hh.mm.ss.ffffff}");
         *
         *         return Request.CreateResponse(HttpStatusCode.NotFound, new ErrorResponse
         *         {
         *             Error = new MessageStyle { Message = Resource.Error, MessageType = 0 }
         *         });
         *     }
         * }
         *
         * /// <summary>
         * /// Method to get cash buttons
         * /// </summary>
         * /// <returns>Cash buttons</returns>
         * [Route("getCashButtons")]
         * [HttpGet]
         * [SwaggerResponse(HttpStatusCode.OK, Type = typeof(List<CashButton>))]
         * public HttpResponseMessage GetCashButtons()
         * {
         *     var dateStart = DateTime.Now;
         *     _performancelog.Debug($"Start,CashController,GetCashButtons,{string.Empty},{dateStart:hh.mm.ss.ffffff}");
         *
         *     var cashDrawButtons = _cashManager.GetCashButtons();
         *
         *     _performancelog.Debug(
         *         $"End,CashController,GetCashButtons,{DateTime.Now.Subtract(dateStart).TotalMilliseconds},{DateTime.Now:hh.mm.ss.ffffff}");
         *     return Request.CreateResponse(HttpStatusCode.OK, cashDrawButtons);
         * }
         *
         * /// <summary>
         * /// Method to update cash drop tenders
         * /// </summary>
         * /// <param name="cashTender">Cash tenders</param>
         * /// <returns>Tenders</returns>
         * [Route("updateTenders")]
         * [HttpPost]
         * [SwaggerResponse(HttpStatusCode.BadRequest, Type = typeof(ErrorResponse))]
         * [SwaggerResponse(HttpStatusCode.OK, Type = typeof(UpdateCashDropResponseModel))]
         * public HttpResponseMessage UpdateCashDropTenders([FromBody] CashTenderModel cashTender)
         * {
         *     var dateStart = DateTime.Now;
         *     _performancelog.Debug(
         *         $"Start,CashController,UpdateCashDropTenders,{string.Empty},{dateStart:hh.mm.ss.ffffff}");
         *
         *     if (cashTender == null)
         *     {
         *         return Request.CreateResponse(
         *             HttpStatusCode.BadRequest,
         *             new ErrorResponse
         *             {
         *                 Error = new MessageStyle { Message = Resource.InvalidRequest, MessageType = 0 }
         *             });
         *     }
         *
         *     ErrorMessage error;
         *     var tenders = cashTender.Tenders.Select(tender => new Tender
         *     {
         *         Tender_Code = tender.TenderCode,
         *         Amount_Entered = tender.AmountEntered ?? 0
         *     }).ToList();
         *
         *     string userCode;
         *     HttpResponseMessage httpResponseMessage;
         *     if (GetUserCode(out userCode, out httpResponseMessage)) return httpResponseMessage;
         *
         *     var updatedTenders = _cashManager.UpdateCashDropTendered(tenders, cashTender.DropReason,
         *         cashTender.SaleNumber, cashTender.TillNumber, userCode, out error);
         *     if (!string.IsNullOrEmpty(error.MessageStyle.Message))
         *     {
         *         _performancelog.Debug(
         *             $"End,CashController,UpdateCashDropTenders,{DateTime.Now.Subtract(dateStart).TotalMilliseconds},{DateTime.Now:hh.mm.ss.ffffff}");
         *
         *         return Request.CreateResponse(HttpStatusCode.BadRequest,
         *             new ErrorResponse
         *             {
         *                 Error = error.MessageStyle,
         *             });
         *     }
         *     UpdateCashDropResponseModel response = GetUpdatedTenders(updatedTenders);
         *
         *     _performancelog.Debug(
         *         $"End,CashController,UpdateCashDropTenders,{DateTime.Now.Subtract(dateStart).TotalMilliseconds},{DateTime.Now:hh.mm.ss.ffffff}");
         *     return Request.CreateResponse(HttpStatusCode.OK, response);
         * }
         *
         * /// <summary>
         * /// Method to complete cash drop
         * /// </summary>
         * /// <param name="cashDrop">Cash drop</param>
         * /// <returns>Receipt</returns>
         * [Route("completeDrop")]
         * [HttpPost]
         * [SwaggerResponse(HttpStatusCode.Unauthorized, Type = typeof(ErrorResponse))]
         * [SwaggerResponse(HttpStatusCode.BadRequest, Type = typeof(ErrorResponse))]
         * [SwaggerResponse(HttpStatusCode.Forbidden, Type = typeof(ErrorResponse))]
         * [SwaggerResponse(HttpStatusCode.NotFound, Type = typeof(ErrorResponse))]
         * [SwaggerResponse(HttpStatusCode.OK, Type = typeof(ReportModel))]
         * public HttpResponseMessage CompleteCashDrop([FromBody] CashDropModel cashDrop)
         * {
         *     var dateStart = DateTime.Now;
         *     _performancelog.Debug($"Start,CashController,CompleteCashDrop,{string.Empty},{dateStart:hh.mm.ss.ffffff}");
         *     string userCode;
         *     HttpResponseMessage httpResponseMessage;
         *     if (GetUserCode(out userCode, out httpResponseMessage)) return httpResponseMessage;
         *     if (cashDrop == null)
         *     {
         *         return Request.CreateResponse(
         *             HttpStatusCode.BadRequest,
         *             new ErrorResponse
         *             {
         *                 Error = new MessageStyle { Message = "Request is Invalid", MessageType = 0 }
         *             });
         *     }
         *     ErrorMessage error;
         *     var tenders = cashDrop.Tenders.Select(tender => new Tender
         *     {
         *         Tender_Code = tender.TenderCode,
         *         Amount_Entered = tender.AmountEntered
         *     }).ToList();
         *     int copies;
         *     var fs = _cashManager.CompleteCashDrop(tenders, cashDrop.TillNumber, userCode,
         *         cashDrop.RegisterNumber, cashDrop.DropReason, cashDrop.EnvelopeNumber, out copies, out error);
         *     if (!string.IsNullOrEmpty(error.MessageStyle.Message))
         *     {
         *         _performancelog.Debug(
         *             $"End,CashController,CompleteCashDrop,{DateTime.Now.Subtract(dateStart).TotalMilliseconds},{DateTime.Now:hh.mm.ss.ffffff}");
         *
         *         return Request.CreateResponse(HttpStatusCode.BadRequest,
         *             new ErrorResponse
         *             {
         *                 Error = error.MessageStyle,
         *             });
         *     }
         *     try
         *     {
         *         var content = Helper.CreateBytes(fs);
         *
         *         var cashDrawReceipt = new ReportModel
         *         {
         *             ReportName = Constants.CashDropFile,
         *             ReportContent = content,
         *             Copies = copies
         *         };
         *
         *         _performancelog.Debug(
         *             $"End,CashController,CompleteCashDrop,{DateTime.Now.Subtract(dateStart).TotalMilliseconds},{DateTime.Now:hh.mm.ss.ffffff}");
         *         return Request.CreateResponse(HttpStatusCode.OK, cashDrawReceipt);
         *     }
         *     catch
         *     {
         *         _performancelog.Debug(
         *             $"End,CashController,CompleteCashDrop,{DateTime.Now.Subtract(dateStart).TotalMilliseconds},{DateTime.Now:hh.mm.ss.ffffff}");
         *
         *         return Request.CreateResponse(HttpStatusCode.NotFound, new ErrorResponse
         *         {
         *             Error = new MessageStyle { Message = Resource.Error, MessageType = 0 }
         *         });
         *     }
         * }
         *
         * /// <summary>
         * /// Method to save cash draw open reason
         * /// </summary>
         * /// <param name="cashDrop">Cash drop</param>
         * /// <returns>Success Response</returns>
         * [Route("openCashDrawer")]
         * [HttpPost]
         * [SwaggerResponse(HttpStatusCode.BadRequest, Type = typeof(ErrorResponse))]
         * [SwaggerResponse(HttpStatusCode.OK, Type = typeof(SuccessReponse))]
         * public HttpResponseMessage OpenCashDrawer([FromBody] CashDropModel cashDrop)
         * {
         *     var dateStart = DateTime.Now;
         *     _performancelog.Debug($"Start,CashController,OpenCashDrawer,{string.Empty},{dateStart:hh.mm.ss.ffffff}");
         *     string userCode;
         *     HttpResponseMessage httpResponseMessage;
         *     if (GetUserCode(out userCode, out httpResponseMessage)) return httpResponseMessage;
         *     if (cashDrop == null)
         *     {
         *         return Request.CreateResponse(
         *             HttpStatusCode.BadRequest,
         *             new ErrorResponse
         *             {
         *                 Error = new MessageStyle { Message = Constants.InvalidRequest, MessageType = 0 }
         *             });
         *     }
         *     ErrorMessage error;
         *     _cashManager.OpenCashDrawer(userCode, cashDrop.DropReason, cashDrop.TillNumber, out error);
         *     if (!string.IsNullOrEmpty(error.MessageStyle.Message))
         *     {
         *         return Request.CreateResponse(error.StatusCode,
         *             new ErrorResponse
         *             {
         *                 Error = error.MessageStyle,
         *             });
         *     }
         *     var success = new SuccessReponse
         *     {
         *         Success = true
         *     };
         *     _performancelog.Debug(
         *         $"End,CashController,OpenCashDrawer,{DateTime.Now.Subtract(dateStart).TotalMilliseconds},{DateTime.Now:hh.mm.ss.ffffff}");
         *     return Request.CreateResponse(HttpStatusCode.OK, success);
         * }
         *
         #region Private methods
         */
        /// <summary>
        /// Method to create cash draw model
        /// </summary>
        /// <param name="cashBonusDrawButtons">Cash draw buttons</param>
        /// <returns>Cash draw button response</returns>
        private CashBonusDrawButtonsResponseModel GetCashBonusDrawModel(CashBonusDrawButton cashBonusDrawButtons)
        {
            var response = new CashBonusDrawButtonsResponseModel();

            foreach (var coin in cashBonusDrawButtons.Coins)
            {
                response.Coins.Add(new CashBonusModel
                {
                    CurrencyName = coin.CurrencyName,
                    Value        = coin.Value,
                    ButtonNumber = coin.ButtonNumber
                });
            }



            return(response);
        }
        /// <summary>
        /// method to validate coins
        /// </summary>
        /// <param name="cashDraw"></param>
        /// <param name="isInvalidCash"></param>
        /// <param name="isInvalidQuantity"></param>
        /// <param name="cashDrawButtons"></param>
        private void ValidateCoins(CashBonusDrawButton cashDraw, ref bool isInvalidCash, ref bool
                                   isInvalidQuantity, CashBonusDrawButton cashDrawButtons)
        {
            var dateStart = DateTime.Now;

            _performancelog.Debug($"Start,CashManager,GetCashDrawButtons,{string.Empty},{dateStart:hh.mm.ss.ffffff}");

            foreach (var coin in cashDraw.Coins)
            {
                if (!cashDrawButtons.Coins.Any(c => c.CurrencyName == coin.CurrencyName &&
                                               c.Value == coin.Value))
                {
                    isInvalidCash = true;
                    break;
                }
                if (coin.Quantity < 1 && coin.Quantity > 99)
                {
                    isInvalidQuantity = true;
                    break;
                }
            }
            _performancelog.Debug($"End,CashManager,GetCashDrawButtons,{DateTime.Now.Subtract(dateStart).TotalMilliseconds},{DateTime.Now:hh.mm.ss.ffffff}");
        }
        /// <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);
        }