public HttpResponseMessage CompletePayment([FromBody] CompletePaymentInputModel model)
        {
            var dateStart = DateTime.Now;

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

            ErrorMessage        errorMessage;
            string              userCode;
            HttpResponseMessage httpResponseMessage;

            if (GetUserCode(out userCode, out httpResponseMessage))
            {
                return(httpResponseMessage);
            }
            if (model == null)
            {
                return(Request.CreateResponse(
                           HttpStatusCode.BadRequest,
                           new ErrorResponse
                {
                    Error = new MessageStyle {
                        Message = Constants.InvalidRequest, MessageType = 0
                    }
                }));
            }

            bool            openCashDrawer;
            bool            isRefund;
            string          changeDue;
            CustomerDisplay lcdMsg;
            var             receipts = _paymentManager.CompletePayment(model.SaleNumber, model.TillNumber,
                                                                       model.TransactionType, userCode, model.IssueStoreCredit, out errorMessage, out openCashDrawer,
                                                                       out changeDue, out isRefund, out lcdMsg);

            var kickbackCommunicationMsg = _paymentManager.KickbackCommunicationError();

            if (!string.IsNullOrEmpty(errorMessage?.MessageStyle?.Message))
            {
                return(Request.CreateResponse(HttpStatusCode.BadRequest, new ErrorResponse
                {
                    Error = errorMessage.MessageStyle
                }));
            }

            var newSale                      = _saleManager.InitializeSale(model.TillNumber, model.RegisterNumber, userCode, out errorMessage);
            var tillLimitExeceeded           = _paymentManager.CheckTillLimit(model.TillNumber);
            var completePaymentResponseModel = new FinishPaymentResponseModel
            {
                NewSale = new NewSale
                {
                    SaleNumber = newSale.Sale_Num,
                    TillNumber = newSale.TillNumber,
                    Customer   = newSale.Customer.Name
                },
                OpenCashDrawer     = openCashDrawer,
                LimitExceedMessage = tillLimitExeceeded,
                ChangeDue          = changeDue,
                CustomerDisplays   = new List <CustomerDisplay> {
                    lcdMsg, newSale.CustomerDisplay
                },
                Receipts            = receipts,
                kickabckServerError = kickbackCommunicationMsg
            };

            KickBackManager.ExchangeRate = 0;
            return(Request.CreateResponse(HttpStatusCode.OK, completePaymentResponseModel));
        }