/// <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); }