Example #1
0
        /// <summary>
        /// Method to get tax free price
        /// </summary>
        /// <param name="oTeSystem">Tax exempt system</param>
        /// <param name="purchaseItem">Purchse item</param>
        /// <param name="sProductKey">Product key</param>
        /// <param name="originalPrice">Original price</param>
        /// <param name="bFound">Value found</param>
        /// <param name="stockcode">Stock code</param>
        /// <param name="productCode">Product code</param>
        /// <param name="outTaxExemptRate">tax exempt rate</param>
        /// <returns>True or false</returns>
        public bool TeGetTaxFreePrice(ref teSystem oTeSystem, ref tePurchaseItem purchaseItem, string sProductKey, float originalPrice, bool bFound, string stockcode, string productCode, float outTaxExemptRate)
        {
            var returnValue     = false;
            var dOutPrice       = purchaseItem.TaxFreePrice;
            var dOutUnitsPerPkg = purchaseItem.UnitsPerPkg;
            var eOutCategory    = purchaseItem.ProdType;
            var sOutUpcCode     = purchaseItem.UpcCode;

            if (_policyManager.TE_ByRate && _policyManager.TE_Type != "SITE") //sghiny dec15, 2009
            {
                if (TeGetTaxFreePriceByRate(ref sProductKey, originalPrice, ref dOutPrice, ref dOutUnitsPerPkg, ref eOutCategory, ref sOutUpcCode, ref bFound, ref outTaxExemptRate, stockcode, ref productCode))
                {
                    returnValue = true;
                }
            }
            else
            {
                if (TeGetTaxFreePriceByPrice(ref oTeSystem, ref sProductKey, originalPrice, ref dOutPrice, ref dOutUnitsPerPkg, ref eOutCategory, ref sOutUpcCode, ref bFound, stockcode))
                {
                    returnValue = true;
                }
            }
            purchaseItem.TaxFreePrice = dOutPrice;
            purchaseItem.UnitsPerPkg  = dOutUnitsPerPkg;
            purchaseItem.ProdType     = eOutCategory;
            purchaseItem.UpcCode      = sOutUpcCode;
            return(returnValue);
        }
        /// <summary>
        /// Method to get tax purchase item
        /// </summary>
        /// <param name="saleNo">Sale numvber</param>
        /// <param name="lineNo">Line number</param>
        /// <returns>Tax exempt purchase item</returns>
        public tePurchaseItem GetPurchaseItem(int saleNo, int lineNo)
        {
            tePurchaseItem teItem = null;
            var            rs     = GetRecords("select * from PurchaseItem where Sale_No=" + Convert.ToString(saleNo) + " AND Line_No=" + Convert.ToString(lineNo), DataSource.CSCTills);

            if (rs.Rows.Count > 0)
            {
                teItem                 = new tePurchaseItem();
                teItem.TreatyNo        = CommonUtility.GetStringValue(rs.Rows[0]["TreatyNo"]);
                teItem.PsTierID        = CommonUtility.GetShortValue(rs.Rows[0]["TierID"]);
                teItem.PsLevelID       = CommonUtility.GetShortValue(rs.Rows[0]["LevelID"]);
                teItem.PdOriginalPrice = CommonUtility.GetFloatValue(rs.Rows[0]["OriginalPrice"]);
                teItem.TaxFreePrice    = CommonUtility.GetFloatValue(rs.Rows[0]["Amount"]);
                teItem.petaxInclPrice  = -1 * CommonUtility.GetFloatValue(teItem.TaxFreePrice + CommonUtility.GetFloatValue(rs.Rows[0]["TotalTaxSaved"]));
            }
            return(teItem);
        }
        /// <summary>
        /// Method to update quantity in db
        /// </summary>
        /// <param name="purchaseItem">Purchase item</param>
        /// <param name="invoiceId">Invoice Id</param>
        /// <param name="lineNum">Line number</param>
        /// <param name="reducedQuantity">Reduced quantity</param>
        /// <param name="treatyNo">Treaty number</param>
        /// <param name="stock">Stock code</param>
        /// <param name="tePrice">Tax exemot price</param>
        /// <param name="orgPrice">Original price</param>
        public void UpdateQuantityInDb(tePurchaseItem purchaseItem, int invoiceId,
                                       short lineNum, float reducedQuantity, string treatyNo, string stock = "",
                                       float tePrice = 0, float orgPrice = 0)
        {
            string sSql = "";

            if (!string.IsNullOrEmpty(stock))
            {
                sSql = "UPDATE PurchaseItem SET Quantity=" +
                       Convert.ToString(purchaseItem.pdQuantity) + ", Amount="
                       + Convert.ToString(Math.Round(purchaseItem.pdTaxFreePrice * purchaseItem.pdQuantity, 2))
                       + ", TotalTaxSaved=" + Convert.ToString(Math.Round(purchaseItem.petaxInclPrice - purchaseItem.pdTaxFreePrice * purchaseItem.pdQuantity, 2)) + ", CscPurchaseItemKey=\'" + stock + "\' " + ", TaxFreePrice=" + Convert.ToString(tePrice) + ", OriginalPrice="
                       + Convert.ToString(orgPrice) + " WHERE Sale_No=" + Convert.ToString(invoiceId) + " and Line_No=" + Convert.ToString(lineNum);
            }
            else
            {
                sSql = "UPDATE PurchaseItem SET Quantity=" + Convert.ToString(purchaseItem.pdQuantity) + ", Amount=" + Convert.ToString(Math.Round(purchaseItem.pdTaxFreePrice * purchaseItem.pdQuantity, 2)) + ", TotalTaxSaved=" + Convert.ToString(Math.Round(purchaseItem.petaxInclPrice - purchaseItem.pdTaxFreePrice * purchaseItem.pdQuantity, 2)) + " WHERE Sale_No=" + Convert.ToString(invoiceId) + " and Line_No=" + Convert.ToString(lineNum);
            }
            _taxExemptService.UpdatePurchaseItem(sSql);

            sSql = "UPDATE TreatyNo " + "SET GasQuota=GasQuota - " + Convert.ToString(reducedQuantity) + "  WHERE TreatyNo=\'" + treatyNo + "\'";
            _taxExemptService.UpdateTreatyNo(sSql);
        }
Example #4
0
        /// <summary>
        /// Add Item to Purchase List
        /// </summary>
        /// <param name="purchaseList">Purchase list</param>
        /// <param name="sale">Sale</param>
        /// <param name="peTreatyNo">Treaty number</param>
        /// <param name="sProductKey">Product key</param>
        /// <param name="dQuantity">Quantity</param>
        /// <param name="dOriginalPrice">Original price</param>
        /// <param name="iRowNumberInSalesMainForm">Row number</param>
        /// <param name="stockcode">Stock code</param>
        /// <param name="taxInclPrice">Tax included price</param>
        /// <param name="isFuelItem">Is fuel item or not</param>
        /// <returns>True or false</returns>
        public bool AddItem(ref tePurchaseList purchaseList, ref Sale sale,
                            ref teTreatyNo peTreatyNo, ref string sProductKey, ref double dQuantity,
                            ref double dOriginalPrice, ref short iRowNumberInSalesMainForm,
                            ref string stockcode, ref double taxInclPrice, ref bool isFuelItem)
        {
            double quota              = 0;
            var    productType        = default(mPrivateGlobals.teProductEnum);
            var    limitMaxType       = default(mPrivateGlobals.teLimitEnum);
            var    limitThresholdType = default(mPrivateGlobals.teLimitEnum);
            double limitMax           = 0;
            double limitThreshold     = 0;
            short  ret;
            string formatString  = "";
            double runningQuotaF = 0;
            short  runningQuotaT = 0;

            var oItem = new tePurchaseItem {
                BIsInit = true
            };

            //initialize item then add to purchase list
            if (!_purchaseItemManager.Init(ref oItem, ref peTreatyNo, ref sProductKey, dOriginalPrice, dQuantity, iRowNumberInSalesMainForm, sale.Sale_Num, sale.TillNumber, ref stockcode, taxInclPrice, isFuelItem, purchaseList.NoRTVP))
            {
                purchaseList.SetLastError(mPrivateGlobals.theSystem.teGetLastError());//"Failed to Add Item: " & oDb.GetLastError()
                return(false);
            }

            oItem.GetProductType(ref productType);

            // Validation
            if (_policyManager.SITE_RTVAL && !purchaseList.NoRTVP) // And Not Me.NoRTVP
            {
                if (productType == mPrivateGlobals.teProductEnum.eCigarette | productType == mPrivateGlobals.teProductEnum.eCigar | productType == mPrivateGlobals.teProductEnum.eLooseTobacco)
                {
                    ret = Convert.ToInt16(Variables.RTVPService.SetItemUPC(oItem.LineItem, sProductKey, (int)productType));
                    WriteToLogFile("Response is " + Convert.ToString(ret) + " from SetItemUPC sent with parameters " + Convert.ToString(oItem.LineItem) + "," + sProductKey + "," + Convert.ToString(productType));
                    formatString = "0.00";
                }
                else
                {
                    SetStockCode(ref oItem, stockcode);
                    ret = Convert.ToInt16(Variables.RTVPService.SetItemUPC(oItem.LineItem, oItem.ItemUPC, (int)productType));
                    WriteToLogFile("Response is " + Convert.ToString(ret) + " from SetItemUPC sent with parameters " + Convert.ToString(oItem.LineItem) + "," + oItem.ItemUPC + "," + Convert.ToString(productType));
                    formatString = "0.000";
                }
                if (ret != 0)
                {
                    purchaseList.RTVPCommand  = "SetItemUPC";
                    purchaseList.RTVPError    = true;
                    purchaseList.RTVPResponse = ret;
                    return(false);
                }
                purchaseList.RTVPError = false;

                ret = Convert.ToInt16(Variables.RTVPService.SetItemTotal(oItem.LineItem,
                                                                         double.Parse((dQuantity * oItem.GetTaxFreePrice()).ToString(formatString))));
                WriteToLogFile("Response is " + Convert.ToString(ret) + " from SetItemTotal sent with parameters " + Convert.ToString(oItem.LineItem) + "," +
                               (dQuantity * oItem.GetTaxFreePrice()).ToString(formatString));
                if (ret != 0)
                {
                    purchaseList.RTVPCommand  = "SetItemTotal";
                    purchaseList.RTVPError    = true;
                    purchaseList.RTVPResponse = ret;
                    return(false);
                }
                purchaseList.RTVPError = false;
            }
            //   end

            var unitsPerPkg = oItem.UnitsPerPkg;
            var quantity    = dQuantity * unitsPerPkg;

            // validation
            if (_policyManager.SITE_RTVAL && !purchaseList.NoRTVP) // And Not Me.NoRTVP
            {
                // based on email from SITE all products need SetItemEquivalence including fuel
                // for fuel we decided to set Equivalence to 1, meaning send the quantity
                double dblEquivalent;
                if (productType == mPrivateGlobals.teProductEnum.eCigarette | productType == mPrivateGlobals.teProductEnum.eCigar | productType == mPrivateGlobals.teProductEnum.eLooseTobacco)
                {
                    dblEquivalent = _teSystemManager.GetCigaretteEquivalentUnits((mPrivateGlobals.teTobaccoEnum)Convert.ToInt16(productType));
                }
                else
                {
                    dblEquivalent = 1;
                }
                oItem.Quantity        = (float)dQuantity;     //
                oItem.ItemEquivalence = (float)dblEquivalent; //
                oItem.UnitsPerPkg     = unitsPerPkg;

                ret = Convert.ToInt16(Variables.RTVPService.SetItemEquivalence(oItem.LineItem, double.Parse((quantity * dblEquivalent).ToString(formatString))));
                WriteToLogFile("Response is " + Convert.ToString(ret) + " from SetItemEquivalence sent with parameters " + Convert.ToString(oItem.LineItem) + "," +
                               (quantity * dblEquivalent).ToString(formatString));
                if (ret != 0)
                {
                    purchaseList.RTVPCommand  = "SetItemEquivalence";
                    purchaseList.RTVPError    = true;
                    purchaseList.RTVPResponse = ret;
                    return(false);
                }
                purchaseList.RTVPError = false;
            }
            else
            {
                _treatyManager.GetQuota(ref peTreatyNo, ref productType, ref quota);
            }

            //   added the If condition; real time validation for SITE doesn't require next code
            if (!_policyManager.SITE_RTVAL)
            {
                GetLimitType(productType, ref limitMaxType, ref limitThresholdType);
                _teSystemManager.TeGetLimit(limitMaxType, ref limitMax);
                _teSystemManager.TeGetLimit(limitThresholdType, ref limitThreshold);

                if (productType == mPrivateGlobals.teProductEnum.eGasoline | productType == mPrivateGlobals.teProductEnum.eDiesel | productType == mPrivateGlobals.teProductEnum.ePropane | productType == mPrivateGlobals.teProductEnum.emarkedGas | productType == mPrivateGlobals.teProductEnum.emarkedDiesel) // hen
                {
                    runningQuotaF = (float)(runningQuotaF + quantity + quota);

                    //   added next two lines, for FNGTR Gasoline Single Transaction Limit is the only validation required
                    if (_policyManager.TAX_EXEMPT_FNGTR)
                    {
                        if (runningQuotaF > limitMax)
                        {
                            purchaseList.IsFuelOverLimit = true;
                        }
                        else
                        {
                            purchaseList.IsTobaccoOverLimit = false;
                        }
                        purchaseList.IsTobaccoOverLimit = false;
                    }
                    else
                    {
                        if (runningQuotaF > limitThreshold)
                        {
                            purchaseList.IsFuelOverLimit = true;
                        }
                        else if (quantity > limitMax)
                        {
                            purchaseList.IsFuelOverLimit = true;
                        }
                        else
                        {
                            purchaseList.IsFuelOverLimit = false;
                        }
                    }
                    if (!_teSystemManager.IsLimitRequired(ref mPrivateGlobals.theSystem, productType))
                    {
                        purchaseList.IsFuelOverLimit = false;
                    }
                }
                else if (productType == mPrivateGlobals.teProductEnum.eCigarette | productType == mPrivateGlobals.teProductEnum.eCigar | productType == mPrivateGlobals.teProductEnum.eLooseTobacco)
                {
                    runningQuotaT = (short)(runningQuotaT + quantity + quota);

                    if (runningQuotaT > limitThreshold)
                    {
                        purchaseList.IsTobaccoOverLimit = true;
                    }
                    else if (runningQuotaT > limitMax)
                    {
                        purchaseList.IsTobaccoOverLimit = true;
                    }
                    else
                    {
                        purchaseList.IsTobaccoOverLimit = false;
                    }



                    if (!_teSystemManager.IsLimitRequired(ref mPrivateGlobals.theSystem, productType))
                    {
                        purchaseList.IsTobaccoOverLimit = false;
                    }
                }
            }
            // real time validation end if '

            purchaseList.AddItemInCollection(oItem); //save the item in purchase list



            purchaseList.PeQuantity   = quantity;
            purchaseList.PsProductKey = sProductKey;
            return(true);
        }
Example #5
0
 /// <summary>
 /// Method to set stock code
 /// </summary>
 /// <param name="purchaseItem">Purchse item</param>
 /// <param name="stockCode">Stock code</param>
 private void SetStockCode(ref tePurchaseItem purchaseItem, string stockCode)
 {
     purchaseItem.stockcode = stockCode;
     purchaseItem.ItemUPC   = _taxExemptService.GetItemUpc(stockCode);
 }
        /// <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);
        }
        /// <summary>
        /// Method to save purchase item
        /// </summary>
        /// <param name="purchaseItem">Purchase item</param>
        /// <param name="user">User</param>
        /// <param name="till">Till number</param>
        /// <returns>True or false</returns>
        public bool Save(tePurchaseItem purchaseItem, User user, Till till)
        {
            string sSql = "";

            //   don't save data in PurchaseItem for training mode
            if (user.User_Group.Code == Utilities.Constants.Trainer)
            {
                return(true);
            }
            //   end

            purchaseItem.CheckInit();

            //Prepare for the worst

            //Record does not exist, so insert a new one

            string swipeStatus = "";

            swipeStatus = purchaseItem.PsTreatyNo.isSwiped ? "M" : "K";


            if (purchaseItem.PsIsFuelItem)
            {
                //   added SD, ShiftDate, Phone for fuel only for FNGTR
                sSql = "INSERT INTO PurchaseItem (TreatyNo, Sale_No, Line_No,"
                       + "IDCaptureMethod, CscPurchaseItemKey, TierID, LevelID, TaxFreePrice, "
                       + "OverrideCodeFK, OverrideDocNumber, OverrideExplanation, CategoryCodeFK, Till_No, "
                       + "OriginalPrice, Quantity, Amount, TotalTaxSaved, SD, ShiftDate, Phone ) VALUES (\'"
                       + purchaseItem.PsTreatyNo.GetTreatyNo() + "\'," + Convert.ToString(purchaseItem.InvoiceID) + ", "
                       + Convert.ToString(purchaseItem.PiRowInSalesMain) + ", \'" + swipeStatus + "\', \'"
                       + purchaseItem.PsGradeStockCode + "\'," + Convert.ToString(purchaseItem.PsTierID)
                       + ", " + Convert.ToString(purchaseItem.PsLevelID) + ", " + Convert.ToString(purchaseItem.pdTaxFreePrice)
                       + " , \'" + Convert.ToString(purchaseItem.PiOverrideCode) + "\', \'" + purchaseItem.PsOverrideFormNumber + "\', "
                       + " \'" + purchaseItem.PsOverrideDetails + "\', " + Convert.ToInt32(purchaseItem.ProdType) + ", "
                       + Convert.ToString(purchaseItem.TillID) + ", " + Convert.ToString(purchaseItem.PdOriginalPrice) + ", "
                       + Convert.ToString(purchaseItem.pdQuantity) + ", " + Convert.ToString(Math.Round(purchaseItem.pdQuantity * purchaseItem.pdTaxFreePrice, 2))
                       + ", " + Convert.ToString(Math.Round(purchaseItem.petaxInclPrice - purchaseItem.pdQuantity * purchaseItem.pdTaxFreePrice, 2))
                       + ", \'" + DateTime.Now.ToString("yyyy-MM-dd") + "\', \'" + till.ShiftDate.ToString("yyyy-MM-dd")
                       + "\', \'" + purchaseItem.PsTreatyNo.PhoneNumber + "\')";
            }
            else
            {
                sSql = "INSERT INTO PurchaseItem (TreatyNo, Sale_No, Line_No,"
                       + "IDCaptureMethod, CscPurchaseItemKey, TierID, LevelID, TaxFreePrice, "
                       + "OverrideCodeFK, OverrideDocNumber, OverrideExplanation, CategoryCodeFK, Till_No, "
                       + "OriginalPrice, Quantity, Amount, TotalTaxSaved ) VALUES (\'"
                       + purchaseItem.PsTreatyNo.GetTreatyNo() + "\',"
                       + Convert.ToString(purchaseItem.InvoiceID) + ", "
                       + Convert.ToString(purchaseItem.PiRowInSalesMain) + ", \'"
                       + swipeStatus + "\', \'" + purchaseItem.PsProductKey + "\', 0, 0, "
                       + " " + Convert.ToString(purchaseItem.pdTaxFreePrice) + " , \'"
                       + Convert.ToString(purchaseItem.PiOverrideCode) + "\', \'" + purchaseItem.PsOverrideFormNumber
                       + "\', " + " \'" + purchaseItem.PsOverrideDetails + "\', " + Convert.ToInt32(purchaseItem.ProdType)
                       + ", " + Convert.ToString(purchaseItem.TillID) + ", " + Convert.ToString(purchaseItem.PdOriginalPrice)
                       + ", " + Convert.ToString(purchaseItem.pdQuantity) + ", " + Convert.ToString(Math.Round(purchaseItem.pdQuantity * purchaseItem.pdTaxFreePrice, 2))
                       + ", " + Convert.ToString(Math.Round(purchaseItem.petaxInclPrice - purchaseItem.pdQuantity * purchaseItem.pdTaxFreePrice, 2)) + ")";
            }


            _taxExemptService.UpdatePurchaseItem(sSql);
            return(true);
        }