Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        /// <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);
        }
Ejemplo n.º 3
0
        /// <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
        }
Ejemplo n.º 5
0
        /// <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);
        }