/// <summary> /// Method to get cash draw buttons /// </summary> /// <returns>Cash draw buttons</returns> public CashDrawButton GetCashDrawButtons(string userCode, out ErrorMessage error) { var dateStart = DateTime.Now; _performancelog.Debug($"Start,CashManager,GetCashDrawButtons,{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,GetCashDrawButtons,{DateTime.Now.Subtract(dateStart).TotalMilliseconds},{DateTime.Now:hh.mm.ss.ffffff}"); return(null); } var cashDrawButton = new CashDrawButton { Coins = _cashService.GetCoins(), Bills = _cashService.GetBills() }; _performancelog.Debug($"End,CashManager,GetCashDrawButtons,{DateTime.Now.Subtract(dateStart).TotalMilliseconds},{DateTime.Now:hh.mm.ss.ffffff}"); return(cashDrawButton); }
/// <summary> /// Get Report of the Dip input values for print /// </summary> /// <param name="tillNumber">Till number</param> /// <param name="shiftNumber">Shift number</param> /// <param name="registerNumber">Register number</param> /// <param name="userCode">User code</param> /// <param name="error">Error message</param> /// <returns>Dip input report</returns> public Report PrintDipReport(int tillNumber, int shiftNumber, int registerNumber, string userCode, out ErrorMessage error) { error = new ErrorMessage(); var user = _loginManager.GetExistingUser(userCode); var report = new Report { ReportName = Utilities.Constants.TankDipFile, Copies = 1 }; var offSet = _policyManager.LoadStoreInfo().OffSet; string timeFormatHm = string.Empty; string timeFormatHms = string.Empty; GetTimeFormats(ref timeFormatHm, ref timeFormatHms); var store = _policyManager.LoadStoreInfo(); var strDate = DateAndTime.Year(DateAndTime.Today) + Strings.Right("00" + Convert.ToString(DateAndTime.Month(DateAndTime.Today)), 2) + Strings.Right("00" + Convert.ToString(DateAndTime.Day(DateAndTime.Today)), 2); var strFileName = Path.GetTempPath() + "\\Dip" + $"{DateTime.Now:yyyy-MM-dd_hh-mm-ss-tt}.txt"; var dipInputs = _dipInputService.GetDipInputsForReport(strDate); if (dipInputs.Count > 0) { short sWidth = 20; short aWidth = 20; short hWidth = 40; var just = Strings.Left(Convert.ToString(_policyManager.REC_JUSTIFY), 1).ToUpper(); var nH = FileSystem.FreeFile(); FileSystem.FileOpen(nH, strFileName, OpenMode.Output, OpenAccess.Write); // - store code printing should be based on policy - Gasking will enter store code as part of store name - so they don't want to see store code in the beginning // If Policy.PRN_CO_NAME Then Print #nH, PadIt(Just, Store.Code & " " & Store.Name, H_Width) if (_policyManager.PRN_CO_NAME) { FileSystem.PrintLine(nH, modStringPad.PadIt(just, (_policyManager.PRN_CO_CODE ? store.Code + " " : "") + store.Name, hWidth)); } if (_policyManager.PRN_CO_ADDR) { FileSystem.PrintLine(nH, modStringPad.PadIt(just, Convert.ToString(store.Address.Street1), hWidth)); if (store.Address.Street2 != "") { FileSystem.PrintLine(nH, modStringPad.PadIt(just, Convert.ToString(store.Address.Street2), hWidth)); } FileSystem.PrintLine(nH, modStringPad.PadIt(just, Strings.Trim(Convert.ToString(store.Address.City)) + ", " + store.Address.ProvState, hWidth) + "\r\n" + modStringPad.PadIt(just, Convert.ToString(store.Address.PostalCode), hWidth)); } if (_policyManager.PRN_CO_PHONE) { foreach (Phone tempLoopVarPhoneRenamed in store.Address.Phones) { var phoneRenamed = tempLoopVarPhoneRenamed; if (phoneRenamed.Number.Trim() != "") { FileSystem.PrintLine(nH, modStringPad.PadC(phoneRenamed.PhoneName + " " + phoneRenamed.Number, hWidth)); } } } FileSystem.PrintLine(nH, modStringPad.PadIt(just, Strings.Trim(Convert.ToString(store.RegName)) + " " + store.RegNum, hWidth)); //& vbCrLf if (store.SecRegName != "") { FileSystem.PrintLine(nH, modStringPad.PadIt(just, Strings.Trim(Convert.ToString(store.SecRegName)) + " " + store.SecRegNum, hWidth)); } FileSystem.PrintLine(nH); FileSystem.PrintLine(nH, _policyManager.PRN_UName ? modStringPad.PadIt(just, _resourceManager.GetResString(offSet, 225) + ": " + user.Name + " (" + Strings.Left(_resourceManager.GetResString(offSet, 132), 1) + Convert.ToString(registerNumber) + "/" + Strings.Left(_resourceManager.GetResString(offSet, 131), 1) + Convert.ToString(tillNumber) + "/" + Strings.Left(_resourceManager.GetResString(offSet, 346), 1) + Convert.ToString(shiftNumber) + ")", hWidth) : modStringPad.PadIt(just, _resourceManager.GetResString(offSet, 225) + ": " + user.Code + " (" + Strings.Left(_resourceManager.GetResString(offSet, 132), 1) + Convert.ToString(registerNumber) + "/" + Strings.Left(_resourceManager.GetResString(offSet, 131), 1) + Convert.ToString(tillNumber) + "/" + Strings.Left(_resourceManager.GetResString(offSet, 346), 1) + Convert.ToString(shiftNumber) + ")", hWidth)); // FileSystem.PrintLine(nH, modStringPad.PadIt(just, DateAndTime.Today.ToString("dd-MMM-yyyy") + _resourceManager.GetResString(offSet, 208) + DateAndTime.TimeOfDay.ToString(timeFormatHm), hWidth) + "\r\n"); //" at " ' FileSystem.PrintLine(nH, modStringPad.PadIt(just, _resourceManager.GetResString(offSet, 3403) + " " + DateTime.Now.ToString("dd-MM-yyyy hh:mm:ss"), hWidth)); //"DIP READING @ " FileSystem.PrintLine(nH, modStringPad.PadL("=", hWidth, "=") + "\r\n"); FileSystem.PrintLine(nH, modStringPad.PadC(_resourceManager.GetResString(offSet, 3401), sWidth) + modStringPad.PadC(_resourceManager.GetResString(offSet, 3402), aWidth)); //"Tank ID","DIP Value" FileSystem.PrintLine(nH, modStringPad.PadL("-", hWidth, "-")); //& vbCrLf foreach (DipInput dipInput in dipInputs) { FileSystem.PrintLine(nH, modStringPad.PadC(dipInput.TankId, sWidth) + modStringPad.PadC(dipInput.DipValue, aWidth)); } // Advance the specified number of lines. short i; for (i = 1; i <= _policyManager.ADV_LINES; i++) { FileSystem.PrintLine(nH); } FileSystem.FileClose(nH); var stream = File.OpenRead(strFileName); report.ReportContent = Helper.CreateBytes(stream); report.Copies = 1; //modPrint.Dump_To_Printer((new Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase()).Info.DirectoryPath + "\\" + File_Name, 1, true, true, false); } else { //MsgBoxStyle temp_VbStyle = (int)MsgBoxStyle.Critical + MsgBoxStyle.OkOnly; //Chaps_Main.DisplayMessage(this, 60, temp_VbStyle, null, 0); error = new ErrorMessage { MessageStyle = _resourceManager.CreateMessage(offSet, 34, 60, null, CriticalOkMessageType), StatusCode = HttpStatusCode.NotFound }; } return(report); }
/// <summary> /// Save Bottle return /// </summary> /// <param name="brPayment">Br payment</param> /// <param name="userCode">User code</param> /// <param name="error">Error message</param> /// <param name="bottleReport">Report</param> /// <param name="openDrawer">Open drawer or not</param> public Sale SaveBottleReturn(BR_Payment brPayment, out ErrorMessage error, out Report bottleReport, out bool openDrawer) { bottleReport = null; openDrawer = false; var dateStart = DateTime.Now; Performancelog.Debug($"Start,BottleManager,SaveBottleReturn,{string.Empty},{DateTime.Now:hh.mm.ss.ffffff}"); error = new ErrorMessage(); var offSet = _policyManager.LoadStoreInfo().OffSet; var userCode = UserCode; var user = _loginManager.GetExistingUser(userCode); var existingSale = _saleService.GetSaleByTillNumber(brPayment.TillNumber); if (existingSale != null && existingSale.Sale_Lines.Count > 0) { error.MessageStyle = new MessageStyle { Message = "Please finish current sale before bottle return.~Bottle Return", MessageType = ExclamationOkMessageType }; error.StatusCode = HttpStatusCode.Conflict; return(null); } if (!_policyManager.GetPol("U_BOTTLERTN", user)) { error.MessageStyle = _resourceManager.CreateMessage(offSet, 38, 57, null, ExclamationOkMessageType); error.StatusCode = HttpStatusCode.Forbidden; return(null); } if (brPayment.Amount != 0) { if (string.IsNullOrEmpty(Convert.ToString(_policyManager.GetPol("BASECURR", null)))) { error.MessageStyle = _resourceManager.CreateMessage(offSet, 18, 61, null, CriticalOkMessageType); error.StatusCode = HttpStatusCode.NotFound; return(null); } if (brPayment.Amount > (decimal)Math.Abs(_policyManager.GetPol("U_BR_LIMIT", user))) { // Exceed the bottle return limit, Please get an authorized user! error.MessageStyle = _resourceManager.CreateMessage(offSet, 18, 62, null, CriticalOkMessageType); error.StatusCode = HttpStatusCode.Forbidden; return(null); } if (_policyManager.OPEN_DRAWER == "Every Sale") { openDrawer = true; } var sale = new Sale { Sale_Totals = { Net = Convert.ToDecimal(brPayment.Amount) } }; var saleTotals = sale.Sale_Totals; _saleManager.SetGross(ref saleTotals, sale.Sale_Totals.Net); sale.Sale_Totals.Gross = saleTotals.Gross; sale.Sale_Totals.TotalLabel = saleTotals.TotalLabel; sale.Sale_Totals.SummaryLabel = saleTotals.SummaryLabel; sale.Register = brPayment.RegisterNumber; sale.Sale_Change = 0; sale.TillNumber = Convert.ToByte(brPayment.TillNumber); sale.Sale_Date = DateTime.Now; sale.Sale_Tender = 0; sale.Sale_Change = 0; sale.Sale_Amount = 0; if (_policyManager.GetPol("Penny_Adj", null) && brPayment.Amount != 0) { sale.Sale_Totals.Penny_Adj = Helper.Calculate_Penny_Adj(Convert.ToDecimal(brPayment.Amount)); } else { sale.Sale_Totals.Penny_Adj = 0; } brPayment.Penny_Adj = sale.Sale_Totals.Penny_Adj; if (existingSale == null) { brPayment.Sale_Num = _saleManager.GetCurrentSaleNo(brPayment.TillNumber, userCode, out error); } var tendBr = new Tenders(); var tender = tendBr.Add(Convert.ToString(_policyManager.GetPol("BASECURR", null)), "Cash", 1, true, true, false, (short)1, Convert.ToString(_policyManager.GetPol("BASECURR", null)), false, 0, 0, 0.01, true, Convert.ToDouble(-brPayment.Amount), (short)1, true, false, "", ""); _tenderManager.Set_Amount_Entered(ref tendBr, ref sale, tender, -brPayment.Amount); sale.Sale_Num = Convert.ToInt32(brPayment.Sale_Num); sale.Sale_Type = "BTL RTN"; var shiftNumber = _tillService.GetTill(brPayment.TillNumber).Shift; bottleReport = _receiptManager.Print_BottleReturn(brPayment, user.Name, DateTime.Today, DateTime.Now, sale.Register, (short)brPayment.TillNumber, shiftNumber); bottleReport.Copies = _policyManager.BottleReturnReceiptCopies; _bottleReturnService.SaveBottleReturnsToDbTrans(brPayment); _saleManager.SaveSale(sale, userCode, ref tendBr, null); CacheManager.DeleteCurrentSaleForTill(sale.TillNumber, sale.Sale_Num); //_saleManager.Clear_Sale(sale.Sale_Num,sale.TillNumber, userCode, "", null, true, false, false, out msg); sale = _saleManager.InitializeSale(brPayment.TillNumber, brPayment.RegisterNumber, userCode, out error); //Update Sale object in Cache CacheManager.AddCurrentSaleForTill(sale.TillNumber, sale.Sale_Num, sale); Performancelog.Debug($"End,BottleManager,SaveBottleReturn,{DateTime.Now.Subtract(dateStart).TotalMilliseconds},{DateTime.Now:hh.mm.ss.ffffff}"); return(sale); } return(null); }
/// <summary> /// Method to update post pay /// </summary> /// <param name="newStatus">New status</param> /// <param name="error">Error message</param> public void UpdatePostPay(bool newStatus, out ErrorMessage error) { var user = _loginManager.GetExistingUser(UserCode); error = new ErrorMessage(); var blEnabled = !newStatus; var offSet = _policyManager.LoadStoreInfo().OffSet; bool stateOn; try { stateOn = TCPAgent.Instance.IsConnected; } catch { stateOn = false; } if (!stateOn) { if (blEnabled) { // MsgBox ("Communication problem, Cannot turn off PostPay!~Turn Off PostPay Error!") error.MessageStyle = _resourceManager.CreateMessage(offSet, 12, 60, null, MessageType.OkOnly); error.StatusCode = HttpStatusCode.NotFound; } else { error.MessageStyle = _resourceManager.CreateMessage(offSet, 12, 61, null, MessageType.OkOnly); error.StatusCode = HttpStatusCode.NotFound; } return; } if (!_policyManager.GetPol("U_AD_PI", user)) { error.MessageStyle = _resourceManager.CreateMessage(offSet, 12, 92, null, MessageType.OkOnly); error.StatusCode = HttpStatusCode.Forbidden; return; // Get a user who is authorized to turn on/off post pay } //cmdPostPay.Enabled = false; var strSend = blEnabled ? "Isd0" : "Isd1"; var response = ""; var timeIn = (float)DateAndTime.Timer; TCPAgent.Instance.Send_TCP(ref strSend, true); while (!(DateAndTime.Timer - timeIn > Variables.gPumps.CommunicationTimeOut)) { var strBuffer = Convert.ToString(TCPAgent.Instance.NewPortReading); WriteToLogFile("TCPAgent.PortReading: " + strBuffer + " from waiting " + strSend); if (!string.IsNullOrEmpty(strBuffer)) { var strRemain = ""; modStringPad.SplitResponse(strBuffer, strSend, ref response, ref strRemain); //strBuffer<>"" if (!string.IsNullOrEmpty(response)) //got what we are waiting { TCPAgent.Instance.PortReading = strRemain; //& ";" & TCPAgent.PortReading WriteToLogFile("modify PortReading from PostPay On/Off: " + strRemain); break; } } if (DateAndTime.Timer < timeIn) { timeIn = (float)DateAndTime.Timer; } Variables.Sleep(100); } if (Strings.Left(response, 6) != strSend + "OK") //response is not Isd0OK / Isd1OK { if (blEnabled) { error.MessageStyle = _resourceManager.CreateMessage(offSet, 12, 60, null, MessageType.OkOnly); error.StatusCode = HttpStatusCode.NotFound; } else { error.MessageStyle = _resourceManager.CreateMessage(offSet, 12, 61, null, MessageType.OkOnly); error.StatusCode = HttpStatusCode.NotFound; } // Return to current user return; } _fuelService.SavePostPayEnabled(newStatus); _fuelService.Save_PostPaySetManually(true); // cmdPostPay.Enabled = true; WriteToLogFile("PostPay was set to " + newStatus + " by the user " + user.Code + " " + user.Name + ". Return to current user " + user.Code + " " + user.Name); // Return to current user }
/// <summary> /// Method to adjust lines /// </summary> /// <param name="payPump">Pay at pump</param> /// <param name="thisLine">Sale line</param> /// <param name="newLine">New line</param> /// <param name="remove">Remove or not</param> /// <returns>True or false</returns> internal bool Adjust_Lines(ref PayAtPump payPump, ref Sale_Line thisLine, bool newLine, bool remove = false) { bool returnValue = false; // Get the pricing for that many products float[,] spr = null; Sale_Line ss = default(Sale_Line); float saleQty = 0; short saleLin = 0; Sale_Line New_Line = default(Sale_Line); short n = 0; short m; short nDel = 0; bool Fd; bool Can_Combine = false; bool Combined = false; short Lines_Needed = 0; short ns; short nL; bool Combine_Policy = false; Combine_Policy = Convert.ToBoolean(_policyManager.COMBINE_LINE); returnValue = true; // If the incoming line is New then include it's quantity in the count. If it isn't // then the quantity will be included in the following loop. saleQty = Convert.ToSingle(newLine ? thisLine.Quantity : 0); if (remove) { saleQty = Convert.ToSingle(-thisLine.Quantity); } saleLin = Convert.ToInt16(newLine ? 1 : 0); // Compute the total quantity of the item in the sale and the number of lines // on which it appears. foreach (Sale_Line tempLoopVarSLine in payPump.Sale_Lines) { var sLine = tempLoopVarSLine; if (thisLine.Stock_Code != sLine.Stock_Code) { continue; } saleQty = saleQty + sLine.Quantity; saleLin++; } ns = (short)(saleQty < 0 ? -1 : 1); // Call 'PQuantity' to build the array of prices and quantities to be used for this // item. spr = PQuantity(thisLine, saleQty); saleQty = Math.Abs((short)saleQty); if (thisLine.Price_Number > 1) { // If Price_Number > 1 then it is NOT regular price. if (newLine) { foreach (Sale_Line tempLoopVarSs in payPump.Sale_Lines) { ss = tempLoopVarSs; if (ss.Stock_Code == thisLine.Stock_Code) { string temp_Policy_Name = "COMBINE_LINE"; Can_Combine = Combine_Policy && _policyManager.GetPol(temp_Policy_Name, thisLine) && (!thisLine.Gift_Certificate) && ss.price == thisLine.price & ss.Quantity > 0 & thisLine.Quantity > 0 & ss.Discount_Rate == thisLine.Discount_Rate && ss.Serial_No == "" && thisLine.Serial_No == "" && ss.Discount_Type == thisLine.Discount_Type; if (!Can_Combine) { continue; } ss.Quantity = ss.Quantity + thisLine.Quantity; ss.Amount = (decimal)(ss.Quantity * ss.price); returnValue = false; break; } } } else { thisLine.Amount = (decimal)(thisLine.Quantity * thisLine.price); } } else { // Price_Code = 1 means that this is based on regular price. if (thisLine.Price_Type == 'R') { if (newLine) { foreach (Sale_Line tempLoopVarSs in payPump.Sale_Lines) { ss = tempLoopVarSs; if (ss.Stock_Code == thisLine.Stock_Code) { var temp_Policy_Name2 = "COMBINE_LINE"; Can_Combine = Combine_Policy && _policyManager.GetPol(temp_Policy_Name2, thisLine) && (!thisLine.Gift_Certificate) && ss.price == thisLine.price & ss.Quantity > 0 & thisLine.Quantity > 0 & ss.Discount_Rate == thisLine.Discount_Rate && ss.Serial_No == "" && thisLine.Serial_No == "" && ss.Discount_Type == thisLine.Discount_Type; if (!Can_Combine) { continue; } ss.Quantity = ss.Quantity + thisLine.Quantity; ss.Amount = (decimal)(ss.Quantity * ss.price); returnValue = false; break; } } } else { thisLine.Amount = (decimal)(thisLine.Quantity * thisLine.price); } } else if (thisLine.Price_Type == 'F') { // "F" - First Unit Pricing if (newLine) { foreach (Sale_Line tempLoopVarSs in payPump.Sale_Lines) { ss = tempLoopVarSs; // Assign the computed prices to each item in the sale. if (ss.Stock_Code == thisLine.Stock_Code) { Line_Price(ref payPump, ref ss, (double)(Convert.ToDecimal(spr[1, 2]))); ss.Amount = (decimal)(ss.Quantity * ss.price); } } foreach (Sale_Line tempLoopVarSs in payPump.Sale_Lines) { ss = tempLoopVarSs; if (ss.Stock_Code == thisLine.Stock_Code) { var temp_Policy_Name3 = "COMBINE_LINE"; Can_Combine = Combine_Policy && _policyManager.GetPol(temp_Policy_Name3, thisLine) && (!thisLine.Gift_Certificate) && (decimal)ss.price == Convert.ToDecimal(spr[1, 2]) && ss.Quantity > 0 & thisLine.Quantity > 0 & ss.Discount_Rate == thisLine.Discount_Rate && ss.Serial_No == "" && thisLine.Serial_No == "" && ss.Discount_Type == thisLine.Discount_Type; Line_Price(ref payPump, ref ss, (double)(Convert.ToDecimal(spr[1, 2]))); if (Can_Combine && !Combined) { Line_Quantity(ref payPump, ref ss, ss.Quantity + thisLine.Quantity, false); Combined = true; } ss.Amount = (decimal)(ss.Quantity * ss.price); } } if (Combined) { returnValue = false; } else { thisLine.price = (double)(Convert.ToDecimal(spr[1, 2])); thisLine.Amount = (decimal)(thisLine.Quantity * thisLine.price); } } else { if (thisLine.Price_Number == 1) { thisLine.price = (double)(Convert.ToDecimal(spr[1, 2])); } thisLine.Amount = (decimal)(thisLine.Quantity * thisLine.price); } } else if (thisLine.Price_Type == 'S') { // "S" - Sale Pricing if (newLine) { Combined = false; foreach (Sale_Line tempLoopVarSs in payPump.Sale_Lines) { ss = tempLoopVarSs; if (ss.Stock_Code == thisLine.Stock_Code) { var temp_Policy_Name4 = "COMBINE_LINE"; Can_Combine = Combine_Policy && _policyManager.GetPol(temp_Policy_Name4, thisLine) && (!thisLine.Gift_Certificate) && (decimal)ss.price == Convert.ToDecimal(spr[1, 2]) && ss.Quantity > 0 & thisLine.Quantity > 0 & ss.Discount_Rate == thisLine.Discount_Rate && ss.Serial_No == "" && thisLine.Serial_No == "" && ss.Discount_Type == thisLine.Discount_Type; Line_Price(ref payPump, ref ss, (double)(Convert.ToDecimal(spr[1, 2]))); if (Can_Combine && !Combined) { Line_Quantity(ref payPump, ref ss, ss.Quantity + thisLine.Quantity, false); Combined = true; } ss.Amount = (decimal)(ss.Quantity * ss.price); } } if (Combined) { returnValue = false; } else { thisLine.price = (double)(Convert.ToDecimal(spr[1, 2])); thisLine.Amount = (decimal)(thisLine.Quantity * thisLine.price); } } else { if (thisLine.Price_Number == 1) { thisLine.price = (double)(Convert.ToDecimal(spr[1, 2])); } thisLine.Amount = (decimal)(thisLine.Quantity * thisLine.price); } } else if (thisLine.Price_Type == 'X' || thisLine.Price_Type == 'I') { // "X" - X for Pricing; "I" - Incremental Pricing // Compute how many lines are needed by counting the number of prices // that the 'PQuantity' routine set. Lines_Needed = (short)0; for (n = 1; n <= (spr.Length - 1); n++) { if (spr[n, 1] != 0) { Lines_Needed++; } else { break; } } nDel = (short)0; // Remove Lines if there are more than we need ... if (Lines_Needed < saleLin) { if (newLine) { // Don't add the incoming line. That reduces the number we need to // delete by 1. nDel = (short)1; } if (nDel < saleLin - Lines_Needed) { foreach (Sale_Line tempLoopVarSs in payPump.Sale_Lines) { ss = tempLoopVarSs; if (ss.Stock_Code == thisLine.Stock_Code) { //Me.Remove_a_Line SS.Line_Num, False nDel++; if (nDel == saleLin - Lines_Needed) { break; } } } } // Add lines if there are not enough. } else if (Lines_Needed > saleLin) { for (n = saleLin; n <= Lines_Needed - 1; n++) { nDel++; New_Line = new Sale_Line { PLU_Code = thisLine.PLU_Code, Discount_Type = thisLine.Discount_Type, Discount_Rate = thisLine.Discount_Rate, Line_Num = (short)(payPump.Sale_Lines.Count + 1) }; var user = _loginManager.GetExistingUser(payPump.UserCode); Add_a_Line(ref payPump, user, New_Line, false); } } // Set the pricing on each line n = (short)0; foreach (Sale_Line tempLoopVarSs in payPump.Sale_Lines) { ss = tempLoopVarSs; if (ss.Stock_Code == thisLine.Stock_Code) { n++; Line_Price(ref payPump, ref ss, (double)(Convert.ToDecimal(spr[n, 2]))); Line_Quantity(ref payPump, ref ss, Convert.ToInt16(spr[n, 1]), false); ss.Amount = Convert.ToDecimal(spr[n, 3]); saleQty = saleQty - System.Math.Abs(Convert.ToInt16(spr[n, 1])); } } // Set the quantity on the new line if (saleQty != 0) { n++; thisLine.Quantity = saleQty; thisLine.price = (double)(Convert.ToDecimal(spr[n, 2])); thisLine.Amount = Convert.ToDecimal(spr[n, 3]); returnValue = true; } else { returnValue = false; } } } return(returnValue); }