public static ProductGBSModel GetGBSShippingCategory(int pID, string tableName)
        {
            ProductGBSModel             productgbsModel = new ProductGBSModel();
            DataManager                 dbmanager       = new DataManager();
            Dictionary <string, string> paramDic        = new Dictionary <string, string>();

            paramDic.Add("@ProductID", pID.ToString());
            string   select = "Select ProductID, shippingCategoryA, shippingCategoryB from " + tableName + " where ProductID = " + pID + "";
            DataView dView  = dbmanager.GetParameterizedDataView(select, paramDic);

            if (dView == null)
            {
                return(productgbsModel);
            }

            if (dView.Count > 0)
            {
                productgbsModel.ProductID         = int.Parse(dView[0][0].ToString());
                productgbsModel.ShippingCategoryA = dView[0][1].ToString();
                productgbsModel.ShippingCategoryB = dView[0][2].ToString();

                return(productgbsModel);
            }
            else
            {
                productgbsModel.ProductID         = 0;
                productgbsModel.ShippingCategoryB = null;
                productgbsModel.ShippingCategoryA = null;
                return(productgbsModel); //"Row Not Found";
            }
        }
        //protected override void Initialize(System.Web.Routing.RequestContext requestContext)
        //{
        //    //little hack here
        //    //always set culture to 'en-US' (Telerik has a bug related to editing decimal values in other cultures). Like currently it's done for admin area in Global.asax.cs
        //    CommonHelper.SetTelerikCulture();

        //    base.Initialize(requestContext);
        //}

        public string AdminTab(int id, IHtmlHelper helper)
        {
            _TableName = _localizationService.GetLocaleStringResourceByName("Plugins.Shipping.GBS.Product.Table.Name").ResourceValue.ToString();

            ProductGBSModel model = new ProductGBSModel();

            var product = _productService.GetProductById(id);

            // Get the value from Database using Web API
            if (product != null && _TableName != null)
            {
                // Get values from GBS Product TBL in nop
                model = DataManager.GetGBSShippingCategory(id, _TableName);
                model.ShippingCategoryA = model.ShippingCategoryA == null ? "" : model.ShippingCategoryA.Trim();
                model.ShippingCategoryB = model.ShippingCategoryB == null ? "" : model.ShippingCategoryB.Trim();
                var _flag = model.ProductID == 0 ? "True" : "False";

                // Save value to the Nop Attribute for later use, so we don't have to make another call to DB
                var genericAttributeService = EngineContext.Current.Resolve <IGenericAttributeService>();
                genericAttributeService.SaveAttribute(product, "NewItemFlag", _flag);

                //Get value from NOP Arributes, which stored data in nop table   :: For furture reference
                //product.GetAttribute<string>("ShippingClass");
            }

            var contents = "";

            contents = helper.Partial("~/Plugins/Shipping.GBS/Views/ExtendedFields/ProductExtendedFields.cshtml", model).RenderHtmlContent();
            contents = JavaScriptEncoder.Default.Encode(contents);
            return(contents);
        }
        public string UpdateShippingCategory(ProductGBSModel ProductModel)
        {
            var _webapiurl     = _localizationService.GetLocaleStringResourceByName("Plugins.Shipping.GBS.Product.Update.Shipping.Category.WebApi.Url");
            var _parameterName = _localizationService.GetLocaleStringResourceByName("Plugins.Shipping.GBS.Product.Update.Shipping.Category.Parameter.Name");

            var request = new RestRequest(_webapiurl.ResourceValue, Method.PUT)
            {
                RequestFormat = DataFormat.Json
            };                                                                                                    //Product /{ id}

            request.AddParameter(_parameterName.ResourceValue, ProductModel.ProductID, ParameterType.UrlSegment); //id
            request.AddBody(ProductModel);

            var response = _client.Execute <ProductGBSModel>(request);

            //if (response.StatusCode == HttpStatusCode.NotFound)
            //    throw new Exception(response.ErrorMessage);

            return(response.StatusCode.ToString());
        }
        public static string UpdateGBSShippingCategory(ProductGBSModel productgbsModel, string tableName)
        {
            DataManager dbmanager = new DataManager();
            Dictionary <string, string> paramDic = new Dictionary <string, string>();

            paramDic.Add("@ProductID", productgbsModel.ProductID.ToString());
            paramDic.Add("@ShippingCategoryA", productgbsModel.ShippingCategoryA.ToString());
            paramDic.Add("@ShippingCategoryB", productgbsModel.ShippingCategoryB.ToString());
            string   select = "UPDATE " + tableName + " SET ProductID = @ProductID, ShippingCategoryA = @ShippingCategoryA , ShippingCategoryB = @ShippingCategoryB WHERE  ProductID = " + int.Parse(productgbsModel.ProductID.ToString()) + "";
            DataView dView  = dbmanager.GetParameterizedDataView(select, paramDic);

            if (dView != null)
            {
                return("Success");
            }
            else
            {
                return("Fail"); //"NO Row Updated";
            }
        }
        public static string AddGBSShippingCategory(ProductGBSModel productgbsModel, string tableName)
        {
            ProductGBSModel             productModel = new ProductGBSModel();
            DataManager                 dbmanager    = new DataManager();
            Dictionary <string, string> paramDic     = new Dictionary <string, string>();

            paramDic.Add("@ProductID", productgbsModel.ProductID.ToString());
            paramDic.Add("@ShippingCategoryA", productgbsModel.ShippingCategoryA.ToString());
            paramDic.Add("@ShippingCategoryB", productgbsModel.ShippingCategoryB.ToString());
            string   select = "INSERT INTO " + tableName + "(ProductID, shippingCategoryA,shippingCategoryB)  VALUES ( @ProductID , @ShippingCategoryA , @ShippingCategoryB )";
            DataView dView  = dbmanager.GetParameterizedDataView(select, paramDic); //dbmanager.GetDataView(select);

            if (dView != null)
            {
                return("Success");
            }
            else
            {
                return("Fail"); //"No Row Inserted";
            }
        }
        public JsonResult SaveShippingCategories(string ShippingCategoryA, string ShippingCategoryB, string ProductID)
        {
            int             productID        = int.Parse(ProductID);
            ProductGBSModel _nopProductModel = new ProductGBSModel
            {
                ProductID         = productID,
                ShippingCategoryA = ShippingCategoryA,
                ShippingCategoryB = ShippingCategoryB
            };
            string status   = "";
            var    product  = EngineContext.Current.Resolve <IProductService>().GetProductById(_nopProductModel.ProductID);
            var    Tproduct = EngineContext.Current.Resolve <IProductService>().GetProductById(1);

            //Save value for the shipping class
            if (product != null)
            {
                var _flag = product.GetAttribute <string>("NewItemFlag");
                _TableName = Tproduct.GetAttribute <string>("TableName");
                status     = _flag == "True" ? Add(_nopProductModel) : Update(_nopProductModel);
            }
            return(Json(status));
        }
        public override void  OnActionExecuted(ActionExecutedContext filterContext)
        {
            //_TableName = _localizationService.GetLocaleStringResourceByName("Plugins.Shipping.GBS.Product.Table.Name").ResourceValue.ToString();

            ProductGBSModel _nopProductModel = new ProductGBSModel();

            _nopProductModel.ProductID = int.Parse(filterContext.HttpContext.Request.Form["Id"]);

            // Get value from nop form
            _nopProductModel.ShippingCategoryA = filterContext.HttpContext.Request.Form["ShippingCategoryA"];
            _nopProductModel.ShippingCategoryB = filterContext.HttpContext.Request.Form["ShippingCategoryB"];

            var product  = EngineContext.Current.Resolve <IProductService>().GetProductById(_nopProductModel.ProductID);
            var Tproduct = EngineContext.Current.Resolve <IProductService>().GetProductById(1);

            //Save value for the shipping class
            if (product != null)
            {
                var _flag = product.GetAttribute <string>("NewItemFlag");
                _TableName = Tproduct.GetAttribute <string>("TableName");
                var res = _flag == "True" ? Add(_nopProductModel) : Update(_nopProductModel);
            }
        }
 public string Update(ProductGBSModel ProductgbsModel)
 {
     return(DataManager.UpdateGBSShippingCategory(ProductgbsModel, _TableName));
 }
 public string Add(ProductGBSModel ProductgbsModel)
 {
     DataManager.AddGBSShippingCategory(ProductgbsModel, _TableName);
     return("");
 }
        /// <summary>
        ///  Gets available shipping options
        /// </summary>
        /// <param name="getShippingOptionRequest">A request for getting shipping options</param>
        /// <returns>Represents a response of getting shipping rate options</returns>
        public GetShippingOptionResponse GetShippingOptions(GetShippingOptionRequest getShippingOptionRequest)
        {
            _TableName = _localizationService.GetLocaleStringResourceByName("Plugins.Shipping.GBS.Product.Table.Name").ResourceValue.ToString();

            if (getShippingOptionRequest == null)
            {
                throw new ArgumentNullException("getShippingOptionRequest");
            }

            var response = new GetShippingOptionResponse();

            if (getShippingOptionRequest.Items == null || !getShippingOptionRequest.Items.Any())
            {
                response.AddError("No shipment items");
                return(response);
            }

            int?restrictByCountryId = (getShippingOptionRequest.ShippingAddress != null && getShippingOptionRequest.ShippingAddress.Country != null) ? (int?)getShippingOptionRequest.ShippingAddress.Country.Id : null;
            var shippingMethods     = this._shippingService.GetAllShippingMethods(restrictByCountryId);
            IEnumerable <int>            productId     = getShippingOptionRequest.Items.Select(x => x.ShoppingCartItem.ProductId).Distinct();
            ShippingRateConversionModels _lstOfProduct = new ShippingRateConversionModels();

            foreach (var pID in productId)
            {
                ProductGBSModel _prodModel = DataManager.GetGBSShippingCategory(pID, _TableName);
                ShippingRateConversionModels.ProductGBSModel _productGBSModel = new ShippingRateConversionModels.ProductGBSModel();

                _productGBSModel.ProductID         = _prodModel.ProductID.ToString();
                _productGBSModel.ShippingCategoryA = _prodModel.ShippingCategoryA;
                _productGBSModel.ShippingCategoryB = _prodModel.ShippingCategoryB;

                _lstOfProduct.productGBSModels.Add(_productGBSModel);
            }

            // Get ZipCode and Product/s ID/S
            var zipCode = (getShippingOptionRequest.ShippingAddress != null && !String.IsNullOrEmpty(getShippingOptionRequest.ShippingAddress.ZipPostalCode)) ? getShippingOptionRequest.ShippingAddress.ZipPostalCode.Substring(0, 3) : String.Empty;

            // Get Categorized Value from String Resources
            _lstOfProduct.zipCode = zipCode;
            // Call Web Service to get the Shipping rate
            GBSShippingServiceClient myShippingRateSrv = new GBSShippingServiceClient();

            //check for Flat Rate
            string _FixedRate = String.Empty;

            if (_gbsShippingSetting.UseFlatRate)
            {
                _FixedRate = _gbsShippingSetting.FlatRateAmount.ToString();
            }
            else
            {
                _FixedRate = myShippingRateSrv.GetShippingRate(_gbsShippingSetting.GBSShippingWebServiceAddress, _gbsShippingSetting.LoginId, _gbsShippingSetting.Password, _lstOfProduct);
            }


            // Build response with custom shipping option
            try
            {
                //see if we have a parsable string
                decimal parsedRate = decimal.Parse(_FixedRate);
            }
            catch (Exception e)
            {
                _FixedRate = "0.00";
            }
            decimal?maxRate        = decimal.Parse(_FixedRate);
            var     shippingOption = new ShippingOption();
            var     shipOpName     = _localizationService.GetResource("Plugins.Shipping.GBS.Product.ShippingOption.Description.Name");

            shippingOption.Name = shipOpName.ToString();
            shippingOption.Rate = maxRate.HasValue == true ? maxRate.Value : 0;
            var shipOpDesError   = _localizationService.GetResource("Plugins.Shipping.GBS.Product.ShippingOption.Description.Error");
            var shipOpDesSuccess = _localizationService.GetResource("Plugins.Shipping.GBS.Product.ShippingOption.Description.Success");

            shippingOption.Description = shippingOption.Rate == 0 ? shipOpDesError : shipOpDesSuccess;

            response.ShippingOptions.Add(shippingOption);
            return(response);
        }