/// <summary>
        /// Method to make default tax exempt sale line
        /// </summary>
        /// <param name="saleLine">Sale line</param>
        /// <param name="theSystem">Tax exempt system</param>
        /// <returns>True or false</returns>
        public bool MakeTaxExemptLine(ref TaxExemptSaleLine saleLine, ref teSystem theSystem)
        {
            bool bFound = false;


            if (!_teSystemManager.TeGetTaxFreePrice(ref theSystem, ref saleLine, ref bFound))// mPrivateGlobals.theSystem.teGetTaxFreePrice(mvarProductKey, mvarOriginalPrice, mvarTaxFreePrice, mvarUnitsPerPkg, mvarProductType, mvarUpcCode, bFound, mvarStockCode, mvarProductCode, mvarTaxExemptRate))
            {
                saleLine.LastError = theSystem.teGetLastError();
                return(false);
            }

            if (!bFound)
            {
                return(false);
            }

            if ((saleLine.ProductType == mPrivateGlobals.teProductEnum.eCigarette) || (saleLine.ProductType == mPrivateGlobals.teProductEnum.eCigar) || (saleLine.ProductType == mPrivateGlobals.teProductEnum.eLooseTobacco))
            {
                saleLine.EquvQuantity = float.Parse((saleLine.UnitsPerPkg * saleLine.Quantity).ToString("#0.00"));
            } // hen
            else if ((saleLine.ProductType == mPrivateGlobals.teProductEnum.eGasoline) || (saleLine.ProductType == mPrivateGlobals.teProductEnum.eDiesel) || (saleLine.ProductType == mPrivateGlobals.teProductEnum.ePropane) || (saleLine.ProductType == mPrivateGlobals.teProductEnum.emarkedGas) || (saleLine.ProductType == mPrivateGlobals.teProductEnum.emarkedDiesel))
            {
                saleLine.EquvQuantity = float.Parse((saleLine.UnitsPerPkg * saleLine.Quantity).ToString("#0.000"));
            }

            saleLine.ExemptedTax = theSystem.RoundToHighCent((saleLine.OriginalPrice - saleLine.TaxFreePrice) * saleLine.Quantity);

            saleLine.Amount = saleLine.TaxInclPrice - saleLine.ExemptedTax - saleLine.TaxCreditAmount;

            return(true);
        }
        /// <summary>
        /// Method to initiliase purchase item
        /// </summary>
        /// <param name="purchaseItem">Purchase item</param>
        /// <param name="oTreatyNo">Treaty number</param>
        /// <param name="sProductKey">Product key</param>
        /// <param name="dOriginalPrice">Original price</param>
        /// <param name="dQuantity">Orginal quantity</param>
        /// <param name="iRowNumberInSalesMainForm">Row number is sale line</param>
        /// <param name="invoiceId">Invoice Id</param>
        /// <param name="tillId">Till Id</param>
        /// <param name="stockcode">Stock code</param>
        /// <param name="taxInclPrice">Tax included price</param>
        /// <param name="isFuelItem">Is fuel item or not</param>
        /// <param name="noRtvp">RTVP or not</param>
        /// <returns>True or false</returns>
        public bool Init(ref tePurchaseItem purchaseItem, ref teTreatyNo oTreatyNo,
                         ref string sProductKey, double dOriginalPrice, double dQuantity,
                         short iRowNumberInSalesMainForm, int invoiceId, short tillId, ref string stockcode,
                         double taxInclPrice, bool isFuelItem, bool noRtvp)
        {
            purchaseItem.InvoiceID = invoiceId;
            purchaseItem.TillID    = tillId;

            if (!_teSystemManager.TeGetTaxFreePrice(ref mPrivateGlobals.theSystem, ref purchaseItem, sProductKey, (float)dOriginalPrice, false, stockcode, "", 0))
            {
                return(false);
            }

            if (_policyManager.SITE_RTVAL && !noRtvp) //   And Not NoRTVP condition
            {
                if (Variables.RTVPService == null)
                {
                    Variables.RTVPService = new RTVP.POSService.Transaction(); // Writing this to solve the issue of products not getting added in DB in tax exempt sale due to cache loss
                }
                purchaseItem.LineItem = Convert.ToInt16(Variables.RTVPService.AddLineItem());
                WriteToLogFile("Response is " + Convert.ToString(purchaseItem.LineItem) + " from AddLineItem sent with no parameters");
            }
            purchaseItem.Quantity = (float)dQuantity; //

            if (isFuelItem)
            {
                purchaseItem.PsIsFuelItem     = true;
                purchaseItem.PsGradeStockCode = stockcode;
                var psGradeId = purchaseItem.PsGradeIDpsTreatyNo;
                var psTierId  = purchaseItem.PsTierID;
                var psLevelId = purchaseItem.PsLevelID;
                _teSystemManager.TeExtractFuelKey(ref mPrivateGlobals.theSystem, ref sProductKey, ref psGradeId, ref psTierId, ref psLevelId);
                purchaseItem.PsGradeIDpsTreatyNo = psGradeId;
                purchaseItem.PsTierID            = psTierId;
                purchaseItem.PsLevelID           = psLevelId;
            }
            else
            {
                purchaseItem.PsIsFuelItem = false;
            }

            purchaseItem.PsProductKey     = sProductKey;
            purchaseItem.PdQuantity       = (float)dQuantity;
            purchaseItem.PiRowInSalesMain = iRowNumberInSalesMainForm;
            purchaseItem.PetaxInclPrice   = (float)dOriginalPrice;

            purchaseItem.PdOriginalPrice = (float)dOriginalPrice;

            purchaseItem.PiOverrideCode       = -1;
            purchaseItem.PsOverrideFormNumber = (0).ToString();

            purchaseItem.PsOverrideDetails = "Not Set";

            purchaseItem.PetaxInclPrice = (float)taxInclPrice;

            purchaseItem.PsTreatyNo = oTreatyNo;

            purchaseItem.BIsInit = true;
            if (!_policyManager.SITE_RTVAL)
            {
                purchaseItem.PeIsLimitRequired = _teSystemManager.IsLimitRequired(ref mPrivateGlobals.theSystem, purchaseItem.ProdType);
            }
            return(true);
        }