Пример #1
0
        /// <summary>
        /// Method to writeoff a sale
        /// </summary>
        /// <param name="userCode">User code</param>
        /// <param name="saleNumber">Sale number</param>
        /// <param name="tillNumber">TillNumber</param>
        /// <param name="writeOffReason"></param>
        /// <param name="errorMessage">Error message</param>
        /// <param name="registerNumber">Register number</param>
        /// <returns>New sale</returns>
        public Report WriteOff(string userCode, int saleNumber, int tillNumber, string writeOffReason,
                               out ErrorMessage errorMessage, out int registerNumber)
        {
            errorMessage = new ErrorMessage();
            var sale = _saleManager.GetCurrentSale(saleNumber, tillNumber, 0, userCode, out errorMessage);

            registerNumber = 0;
            if (!string.IsNullOrEmpty(errorMessage.MessageStyle.Message))
            {
                return(null);
            }
            var offSet = _policyManager.LoadStoreInfo().OffSet;

            //crash recovery- if there is partial/ full payment donot allow write off
            if (sale.Payment)
            {
                errorMessage.MessageStyle = _resourceManager.CreateMessage(offSet, 12, 86, null, MessageType.OkOnly);
                return(null);
            }
            registerNumber = sale.Register;
            sale.Sale_Type = Convert.ToString(sale.Sale_Type == "MARKDOWN" ? "SALE" : "MARKDOWN");
            if (sale.Sale_Type == "MARKDOWN")
            {
                var reasonType = 'M';
                sale.Return_Reason = _reasonService.GetReturnReason(writeOffReason, reasonType);
                if (sale.Return_Reason == null)
                {
                    errorMessage.MessageStyle = new MessageStyle
                    {
                        Message = "Invalid reason"
                    };
                    errorMessage.StatusCode = HttpStatusCode.NotFound;
                    return(null);
                }
                sale.Customer.Name = _resourceManager.GetResString(offSet, 159);
                sale.Customer.Code = _resourceManager.GetResString(offSet, 1252);

                _saleManager.ApplyTaxes(ref sale, false);   // Added, don't calculate taxes for MARKDOWN sales
                _saleManager.ApplyCharges(ref sale, false); // Added, don't calculate taxes for MARKDOWN sales
                var    user = CacheManager.GetUser(userCode);
                Stream signature;
                var    fileName = string.Empty;
                if (_policyManager.PRINT_REC)
                {
                    return(_paymentManager.ExactChange_Receipt(sale, user, tillNumber, out errorMessage, out signature, ref fileName));
                }
                return(_paymentManager.ExactChange_Receipt(sale, user, tillNumber, out errorMessage, out signature, ref fileName));
            }
            errorMessage.MessageStyle = new MessageStyle
            {
                Message = "Could not write off"
            };
            errorMessage.StatusCode = HttpStatusCode.NoContent;
            return(null);
        }