/// <summary> /// Adjust Givex Card with the new amount /// </summary> /// <param name="givexCardNumber">givexCardNumber</param> /// <param name="amount">amount</param> /// <param name="userCode">userCode</param> /// <param name="tillNumber">tillNumber</param> /// <param name="saleNumber">saleNumber</param> /// <param name="stockCode">stockCode</param> /// <param name="givexReceipt"></param> /// <param name="errorMessage">errorMessage</param> /// <returns>Sale</returns> public Sale AdjustGivexCard(string givexCardNumber, decimal amount, string userCode, int tillNumber, int saleNumber, string stockCode, out Report givexReceipt, out ErrorMessage errorMessage) { var dateStart = DateTime.Now; Performancelog.Debug($"Start,GivexManager,AdjustGivexCard,{string.Empty},{DateTime.Now:hh.mm.ss.ffffff}"); decimal newBalance = 0; var refNum = ""; var expDate = ""; string result = ""; givexReceipt = null; var newLine = _saleLineManager.CreateNewSaleLine(); var sale = new Sale(); GiveXReceiptType givexReceiptType; if (!IsValidPrice(2, amount, out errorMessage)) { return(null); } if (_givexClientManager.AdjustGiveX(givexCardNumber, amount, saleNumber, ref newBalance, ref refNum, ref expDate, ref result, userCode, out errorMessage, out givexReceiptType)) { givexReceipt = _receiptManager.Print_GiveX_Receipt(givexReceiptType); sale = _saleManager.GetCurrentSale(saleNumber, tillNumber, 0, userCode, out errorMessage); if (string.IsNullOrEmpty(errorMessage.MessageStyle.Message)) { _saleLineManager.SetPluCode(ref sale, ref newLine, stockCode, out errorMessage); if (string.IsNullOrEmpty(errorMessage.MessageStyle.Message)) { newLine.Line_Num = (short)(sale.Sale_Lines.Count + 1); newLine.Regular_Price = Conversion.Val(amount); _saleLineManager.SetPrice(ref newLine, Conversion.Val(amount)); newLine.Gift_Num = givexCardNumber.Trim(); _saleManager.Add_a_Line(ref sale, newLine, userCode, tillNumber, out errorMessage, true); //Update Sale object in Cache CacheManager.AddCurrentSaleForTill(tillNumber, saleNumber, sale); } } } Performancelog.Debug($"End,GivexManager,AdjustGivexCard,{DateTime.Now.Subtract(dateStart).TotalMilliseconds},{DateTime.Now:hh.mm.ss.ffffff}"); return(sale); }
/// <summary> /// Method to delete uncomplete prepay /// </summary> /// <param name="pumpId">Pump Id</param> /// <param name="saleNumber">Sale number</param> /// <param name="tillNumber">Till number</param> /// <param name="error">Error</param> /// <returns>Sale</returns> public Sale DeleteUnCompletePrepay(int pumpId, int saleNumber, int tillNumber, out ErrorMessage error) { var sale = CacheManager.GetCurrentSaleForTill(tillNumber, saleNumber); var offSet = _policyManager.LoadStoreInfo().OffSet; if (sale?.Sale_Lines?.Count > 0) { //Chaps_Main.DisplayMessage(this, (short)60, temp_VbStyle, null, (byte)0); error = new ErrorMessage { MessageStyle = _resourceManager.CreateMessage(offSet, 36, 60, null, CriticalOkMessageType) }; return(null); } sale = _saleService.GetSaleBySaleNoFromDbTill(ref sale, tillNumber, saleNumber); var saleLine = _saleService.GetPrepaySaleLine(saleNumber, tillNumber); if (sale == null || saleLine == null) { //MsgBoxStyle temp_VbStyle2 = (int)MsgBoxStyle.Critical + MsgBoxStyle.OkOnly; //Chaps_Main.DisplayMessage(this, (short)61, temp_VbStyle2, null, (byte)0); error = new ErrorMessage { MessageStyle = _resourceManager.CreateMessage(offSet, 36, 61, null, CriticalOkMessageType) }; return(null); } _saleService.UpdateDiscountTender(ref sale); var sl = new Sale_Line { No_Loading = true, Dept = saleLine.Dept, Sub_Dept = saleLine.Sub_Dept, Stock_Code = saleLine.Stock_Code, Amount = saleLine.Amount }; _saleLineManager.SetSubDetail(ref sl, saleLine.Sub_Detail); _saleLineManager.SetPluCode(ref sale, ref sl, saleLine.PLU_Code, out error); _saleLineManager.SetPrice(ref sl, saleLine.price); _saleLineManager.SetQuantity(ref sl, saleLine.Quantity * -1); sl.Regular_Price = saleLine.Regular_Price; if (sale.Customer.GroupID != "" && _policyManager.FuelLoyalty) { if (sale.Customer.DiscountType == "%") { _saleLineManager.SetAmount(ref sl, (saleLine.Amount - Convert.ToDecimal(saleLine.Amount * Convert.ToDecimal(sale.Customer.DiscountRate)) / 100) * (-1)); } else if (sale.Customer.DiscountType == "$") { _saleLineManager.SetAmount(ref sl, saleLine.Amount - Convert.ToDecimal(saleLine.Quantity * sale.Customer.DiscountRate) * (-1)); } else { _saleLineManager.SetAmount(ref sl, saleLine.Amount * (-1)); } } else { _saleLineManager.SetAmount(ref sl, saleLine.Amount * (-1)); } sl.pumpID = (byte)pumpId; sl.PositionID = saleLine.PositionID; sl.GradeID = saleLine.GradeID; sl.User = UserCode; sl.Description = saleLine.Description; sale.Sale_Type = "Delete Prepay"; _saleManager.Add_a_Line(ref sale, sl, "", tillNumber, out error, true); return(sale); }
/// <summary> /// Unsuspend Sale /// </summary> /// <param name="saleNumber">Sale number</param> /// <param name="tillNumber">Till number</param> /// <param name="userCode">User code</param> /// <param name="errorMessage">Error</param> /// <returns>Sale</returns> public Sale UnsuspendSale(int saleNumber, int tillNumber, string userCode, out ErrorMessage errorMessage) { var dateStart = DateTime.Now; Performancelog.Debug($"Start,SuspendedSaleManager,UnsuspendSale,{string.Empty},{dateStart:hh.mm.ss.ffffff}"); if (!CanUserSuspendSale(userCode, out errorMessage)) { return(new Sale()); } string sqlQuery; var shareSusp = _policyManager.SHARE_SUSP; if (shareSusp) { sqlQuery = "SELECT * FROM SusHead WHERE SusHead.Sale_No = " + Convert.ToString(saleNumber); } else { sqlQuery = "SELECT * FROM SusHead WHERE SusHead.Sale_No = " + Convert.ToString(saleNumber) + " AND SusHead.TILL=" + tillNumber; } var susHead = _suspendedSaleService.GetAllSuspendedSale(sqlQuery); var offSet = _policyManager.LoadStoreInfo().OffSet; if (susHead == null || susHead.Count == 0) { //"Not a Suspended Sale" errorMessage = new ErrorMessage { MessageStyle = _resourceManager.CreateMessage(offSet, 0, 8107, saleNumber), StatusCode = HttpStatusCode.NotFound }; return(null); } _suspendedSaleService.UpdateCardSaleForUnSuspend(shareSusp, tillNumber, saleNumber); var sale = _suspendedSaleService.GetSuspendedSale(tillNumber, saleNumber, shareSusp); sale.Customer = _customerManager.LoadCustomer(sale.Customer.Code); if (string.IsNullOrEmpty(sale.CouponID)) { _saleManager.ReCompute_Coupon(ref sale); } var saleLines = sale.Sale_Lines; if (sale.Sale_Totals.Sale_Taxes != null) { _saleHeadManager.Load_Taxes(ref sale); } sale.Sale_Lines = new Sale_Lines(); _suspendedSaleService.RemovePreviousTransactionFromDbTemp(tillNumber); foreach (Sale_Line saleLine in saleLines) { var sl = saleLine; var quantity = saleLine.Quantity; var price = saleLine.price; var amount = saleLine.Amount; var discountRate = saleLine.Discount_Rate; var discountType = saleLine.Discount_Type; ErrorMessage error; _saleLineManager.SetPluCode(ref sale, ref sl, sl.PLU_Code, out error); if (sl.ProductIsFuel && !sl.IsPropane) { sl.Regular_Price = Convert.ToDouble(sl.price); } if (sl.Gift_Certificate && sl.GiftType == "LocalGift") { sl.Description = _resourceManager.GetResString(offSet, 8124) + sl.Gift_Num; } if (sale.Void_Num != 0) { _saleManager.Add_a_Line(ref sale, sl, userCode, tillNumber, out errorMessage, adjust: false, tableAdjust: false, forRefund: true); } else { _saleManager.Add_a_Line(ref sale, sl, userCode, tillNumber, out errorMessage, false, false); } sl.No_Loading = false; if (sl.ScalableItem) { sl.Regular_Price = sl.price; } _saleLineManager.SetPrice(ref sl, price); _saleLineManager.SetQuantity(ref sl, quantity); _saleLineManager.SetAmount(ref sl, amount); saleLine.Discount_Type = discountType; _saleLineManager.SetDiscountRate(ref sl, discountRate); sl.No_Loading = false; // It has to be set back to false, otherwise if the user changes the qty or price in the POS screen after unsuspend, the amount will not be right if (shareSusp) { // modGlobalFunctions.Load_CardSales(Chaps_Main.dbTill, (short)0, saleNumber, SL.Line_Num); } } _saleManager.Sale_Discount(ref sale, Convert.ToDecimal(sale.Sale_Totals.Invoice_Discount), Convert.ToString(sale.Sale_Totals.Invoice_Discount_Type), false); _suspendedSaleService.DeleteUnsuspend(shareSusp, tillNumber, saleNumber); _suspendedSaleService.DeleteCardSaleFromDbTemp(saleNumber); sale.Sale_Type = "CANCEL"; //Update Sale object in Cache CacheManager.AddCurrentSaleForTill(tillNumber, sale.Sale_Num, sale); Performancelog.Debug($"End,SuspendedSaleManager,UnsuspendSale,{DateTime.Now.Subtract(dateStart).TotalMilliseconds},{DateTime.Now:hh.mm.ss.ffffff}"); Register register = new Register(); _mainManager.SetRegister(ref register, sale.Register); //Added to display invoice# to customer display if (register.Customer_Display) { sale.CustomerDisplay = _mainManager.DisplayMsgLcd(register, _mainManager.FormatLcdString(register, _resourceManager.GetResString(offSet, 414) + "#:", Conversion.Str(saleNumber).Trim()), ""); } return(sale); }
/// <summary> /// Method to add propane sale /// </summary> /// <param name="gradeId">Grade Id</param> /// <param name="pumpId">Pump Id</param> /// <param name="saleNumber">Sale number</param> /// <param name="tillNumber">Till number</param> /// <param name="registerNumber">Register number</param> /// <param name="isAmount">Is amount</param> /// <param name="propaneValue">Propane value</param> /// <param name="error">Error message</param> /// <returns>Sale</returns> public Sale AddPropaneSale(int gradeId, int pumpId, int saleNumber, int tillNumber, byte registerNumber, bool isAmount, decimal propaneValue, out ErrorMessage error) { var sale = _saleManager.GetCurrentSale(saleNumber, tillNumber, registerNumber, UserCode, out error); var offSet = _policyManager.LoadStoreInfo().OffSet; if (!string.IsNullOrEmpty(error?.MessageStyle?.Message)) { return(null); } var grades = CacheManager.GetPropaneGrades(); if (grades == null) { error = new ErrorMessage { MessageStyle = _resourceManager.CreateMessage(offSet, 38, 76, null) }; return(null); } var firstOrdDefault = grades.FirstOrDefault(p => p.Id == gradeId); if (firstOrdDefault == null) { error = new ErrorMessage { MessageStyle = new MessageStyle { Message = "Invalid Request", MessageType = MessageType.Critical } }; return(null); } var pumps = _fuelPumpService.GetPumpsByPropaneGradeId(gradeId); if (pumps == null || !pumps.Any(p => p.Id == pumpId)) { error = new ErrorMessage { MessageStyle = new MessageStyle { Message = "Invalid Request", MessageType = MessageType.Critical } }; return(null); } var stockCode = firstOrdDefault.StockCode; if (sale.DeletePrepay) { // "There's no Pump set for " & Stock_Code(index) & ". Please set it in Fuel Control at first.", vbinformation+vbokonly error = new ErrorMessage { MessageStyle = _resourceManager.CreateMessage(offSet, 0, 1150, null, InformationOkMessageType) }; return(null); } var slProp = new Sale_Line(); _saleLineManager.SetPluCode(ref sale, ref slProp, stockCode, out error); slProp.GradeID = (byte)gradeId; if (slProp.Regular_Price == 0) { // "There's no price for " & Stock_Code(Index) & ". Please set it in BackOffice at first.", vbInformation + vbOKOnly //MsgBoxStyle temp_VbStyle = (int)MsgBoxStyle.Information + MsgBoxStyle.OkOnly; //Chaps_Main.DisplayMessage(this, (short)11, temp_VbStyle, Stock_Code[Index], (byte)0); error = new ErrorMessage { MessageStyle = _resourceManager.CreateMessage(offSet, 48, 11, stockCode, InformationOkMessageType) }; return(null); } slProp.pumpID = (byte)pumpId; slProp.PositionID = (byte)_fuelPumpService.GetPositionId(pumpId, gradeId); SetQuantity(ref slProp, isAmount, propaneValue, out error); if (!string.IsNullOrEmpty(error?.MessageStyle?.Message)) { return(null); } if (_policyManager.USE_CUST) { if (_policyManager.USE_LOYALTY && Strings.UCase(System.Convert.ToString(_policyManager.LOYAL_TYPE)) == "PRICES" && sale.Customer.Loyalty_Code.Length > 0 && sale.Customer.CL_Status == "A" && (!slProp.LOY_EXCLUDE)) { var loyalPricecode = System.Convert.ToInt16(_policyManager.LOYAL_PRICE); if (loyalPricecode > 0) { _saleLineManager.SetPriceNumber(ref slProp, loyalPricecode); } else { _saleLineManager.SetPriceNumber(ref slProp, sale.Customer.Price_Code != 0 ? sale.Customer.Price_Code : (short)1); } } else { _saleLineManager.SetPriceNumber(ref slProp, sale.Customer.Price_Code != 0 ? sale.Customer.Price_Code : (short)1); } } else { //SL_Prop.Price_Number = (short)1; _saleLineManager.SetPriceNumber(ref slProp, (short)1); } _saleManager.Add_a_Line(ref sale, slProp, UserCode, sale.TillNumber, out error, true); CacheManager.AddCurrentSaleForTill(tillNumber, saleNumber, sale); return(sale); }
/// <summary> /// Return Sale /// </summary> /// <param name="user">User</param> /// <param name="saleNumber">Sale number</param> /// <param name="tillNumber">Till number</param> /// <param name="saleTillNumber"></param> /// <param name="correction">Correction sale or not</param> /// <param name="reasonCode">Reason code</param> /// <param name="message">Error</param> /// <param name="reasonType">Reason type</param> /// <param name="saleLineMessages">Sale line messages</param> /// <param name="report"></param> /// <param name="fileName"></param> /// <returns>Sale</returns> public Sale ReturnSale(User user, int saleNumber, int tillNumber, int saleTillNumber, bool correction, string reasonType, string reasonCode, out ErrorMessage message, out List <ErrorMessage> saleLineMessages, out Report report, out string fileName) { Sale sale = new Sale(); DateTime saleDate = DateTime.Now.AddDays(-Convert.ToInt16(_policyManager.GetPol("RES_DAYS", null))); saleLineMessages = new List <ErrorMessage>(); report = null; fileName = string.Empty; if (!IsUserAbleToReturn(user, out message)) { return(sale); } Sale_Line sl; var blnRecReason = false; bool isReturnable; bool isSaleFound; sale = _returnSaleService.GetSaleBySaleNumber(saleNumber, saleTillNumber, saleDate, _policyManager.TE_Type, _policyManager.TE_GETNAME, _policyManager.TAX_EXEMPT_GA, _policyManager.DefaultCust, _policyManager.DEF_CUST_CODE, out isSaleFound, out isReturnable); var offSet = _policyManager.LoadStoreInfo().OffSet; if (!isSaleFound) { message = new ErrorMessage { MessageStyle = _resourceManager.CreateMessage(offSet, 40, 98, null) }; return(sale); } if (!isReturnable) { message = new ErrorMessage { MessageStyle = _resourceManager.CreateMessage(offSet, 40, 95, saleDate) }; return(sale); } var sal = _saleService.GetSaleByTillNumber(tillNumber);// _saleService.GetSalesFromDbTemp(tillNumber); sale.Sale_Num = sal?.Sale_Num ?? _saleManager.GetCurrentSaleNo(tillNumber, user.Code, out message); sale.TillNumber = (byte)tillNumber; _saleHeadManager.SetSalePolicies(ref sale); var saleLines = _returnSaleService.GetSaleLineBySaleNumber(saleNumber, saleTillNumber, saleDate, sale.Customer.DiscountType, _policyManager.TE_Type, _policyManager.TAX_EXEMPT); //_suspendedSaleService.RemovePreviousTransactionFromDbTemp(tillNumber); foreach (var saleLine in saleLines) { saleLine.PRICE_DEC = CommonUtility.GetShortValue(_policyManager.GetPol("PRICE_DEC", saleLine)); saleLine.QUANT_DEC = CommonUtility.GetShortValue(_policyManager.GetPol("QUANT_DEC", saleLine)); if (_policyManager.GetPol("ACCEPT_RET", saleLine) && saleLine.GiftType != "GiveX") { var newSaleLine = saleLine; newSaleLine.Till_Num = sale.TillNumber; var quantity = saleLine.Quantity; var price = saleLine.price; var amount = saleLine.Amount; var discountRate = saleLine.Discount_Rate; var discountType = saleLine.Discount_Type; ErrorMessage error; _saleLineManager.SetPluCode(ref sale, ref newSaleLine, newSaleLine.PLU_Code, out error); if (newSaleLine.ProductIsFuel && !newSaleLine.IsPropane) { newSaleLine.Regular_Price = Convert.ToDouble(newSaleLine.price); } if (newSaleLine.Gift_Certificate && newSaleLine.GiftType == "LocalGift") { newSaleLine.Description = _resourceManager.GetResString(offSet, 8124) + newSaleLine.Gift_Num; } _saleManager.Add_a_Line(ref sale, newSaleLine, user.Code, sale.TillNumber, out message, adjust: false, tableAdjust: false, forRefund: true); newSaleLine.No_Loading = false; if (newSaleLine.ScalableItem) { newSaleLine.Regular_Price = newSaleLine.price; } _saleLineManager.SetPrice(ref newSaleLine, price); _saleLineManager.SetQuantity(ref newSaleLine, quantity); _saleLineManager.SetAmount(ref newSaleLine, amount); saleLine.Discount_Type = discountType; _saleLineManager.SetDiscountRate(ref newSaleLine, discountRate); newSaleLine.No_Loading = false; // It has to be set back to false, otherwise if the user changes the qty or price in the POS screen after unsuspend, the amount will not be right } else { saleLineMessages.Add(new ErrorMessage { MessageStyle = _resourceManager.CreateMessage(offSet, 0, 8109, saleLine.Stock_Code + " " + saleLine.Description, CriticalOkMessageType) }); } } _saleManager.Sale_Discount(ref sale, Convert.ToDecimal(sale.Sale_Totals.Invoice_Discount), Convert.ToString(sale.Sale_Totals.Invoice_Discount_Type), false); sale.ForCorrection = correction; // 06/24/05 Nancy added ForCorrection // CL = "" ' code //SaleMain.Default.lblCustName.Text = sale.Customer.Name; foreach (var tempLoopVarSl in saleLines) { sl = tempLoopVarSl; sl.No_Loading = false; } sale.LoadingTemp = false; foreach (var tempLoopVarSl in saleLines) { sl = tempLoopVarSl; if (!_policyManager.GetPol("RET_REASON", sl)) { continue; } blnRecReason = true; break; } if (blnRecReason) { ReasonType rType; Enum.TryParse(reasonType, true, out rType); var returnReason = (char)rType != '\0' ? _reasonService.GetReturnReason(reasonCode, (char)rType) : new Return_Reason { RType = "R" }; foreach (var tempLoopVarSl in saleLines) { sl = tempLoopVarSl; _saleManager.Line_Reason(ref sale, ref sl, returnReason); } } _saleManager.SaveTemp(ref sale, tillNumber); //Update Sale object in Cache sale.ReverseRunaway = sale.Sale_Type == "RUNAWAY" && sale.Sale_Amount > 0; // sale.ReversePumpTest = sale.Sale_Type == "PUMPTEST" && sale.Sale_Amount > 0; // if (sale.ReverseRunaway) { var newLineMessage = new ErrorMessage { MessageStyle = _resourceManager.CreateMessage(offSet, 11, 25, null) }; saleLineMessages.Add(newLineMessage); Tenders nullTenders = null; fileName = Constants.RunAwayFile; var file = "Runaway"; var rePrint = false; Stream signature; sale.Sale_Type = "RUNAWAY"; report = _receiptManager.Print_Receipt(tillNumber, null, ref sale, ref nullTenders, true, ref file, ref rePrint, out signature, user.Code); _saleManager.Clear_Sale(sale, sale.Sale_Num, sale.TillNumber, user.Code, "RUNAWAY", null, false, true, false, out message); ErrorMessage error; sale = _saleManager.InitializeSale(tillNumber, sale.Register, user.Code, out error); } if (sale.ReversePumpTest) { var newLineMessage = new ErrorMessage { MessageStyle = _resourceManager.CreateMessage(offSet, 11, 27, null) }; saleLineMessages.Add(newLineMessage); Tenders nullTenders = null; fileName = Constants.PumpTestFile; var file = "PumpTest"; var rePrint = false; Stream signature; sale.Sale_Type = "PUMPTEST"; report = _receiptManager.Print_Receipt(tillNumber, null, ref sale, ref nullTenders, true, ref file, ref rePrint, out signature, user.Code); _saleManager.Clear_Sale(sale, sale.Sale_Num, sale.TillNumber, user.Code, "PUMPTEST", null, false, true, false, out message); ErrorMessage error; sale = _saleManager.InitializeSale(tillNumber, sale.Register, user.Code, out error); } CacheManager.AddCurrentSaleForTill(sale.TillNumber, sale.Sale_Num, sale); return(sale); }