Example #1
0
        public async Task <ResponseStructure> DecreaseProductCount(HttpRequest httpRequest, HttpResponse httpResponse)
        {
            try
            {
                if (!this.STOREISACTIVE)
                {
                    return(ResponseModel.Error("با عرض پوزش ، در حال حاضر امکان سفارش گیری وجود ندارد"));
                }

                StringValues data;

                if (!httpRequest.Headers.TryGetValue("AddToCart", out data))
                {
                    return(ResponseModel.Error("دسترسی غیر مجاز"));
                }

                var dec = Barayand.Common.Services.CryptoJsService.DecryptStringAES(data);

                FullPropertyBasketItem rm = JsonConvert.DeserializeObject <FullPropertyBasketItem>(dec);

                ProductCombineModel findProduct = new ProductCombineModel();

                FullPropertyBasketModel BasketModel = new FullPropertyBasketModel();
                string cookie;
                if (httpRequest.Cookies.TryGetValue("Cart", out cookie))
                {
                    if (cookie != null)
                    {
                        var basketInfo = Barayand.Common.Services.CryptoJsService.DecryptStringAES(cookie);
                        BasketModel = JsonConvert.DeserializeObject <FullPropertyBasketModel>(basketInfo);
                        if (BasketModel.CartItems.Count() > 0)
                        {
                            if (BasketModel.CartItems.Count(x => x.ProductCombineId == rm.ProductCombineId && x.ProductType == rm.ProductType) > 0)
                            {
                                var existsCombine = BasketModel.CartItems.FirstOrDefault(x => x.ProductCombineId == rm.ProductCombineId && x.ProductType == rm.ProductType);


                                existsCombine.Quantity = existsCombine.Quantity - rm.Quantity;
                                if (existsCombine.Quantity < 1)
                                {
                                    BasketModel.CartItems.Remove(existsCombine);
                                }
                            }
                        }
                    }
                }

                string token = Barayand.Common.Services.CryptoJsService.EncryptStringToAES(JsonConvert.SerializeObject(BasketModel));
                httpResponse.Cookies.Delete("Cart");
                httpResponse.Cookies.Append("Cart", token);
                return(ResponseModel.Success("محصول مورد نظر با موفقیت به سبد خرید اضافه گردید"));
            }
            catch (Exception ex)
            {
                _logger.LogError("Error in adding product to basket", ex);
                return(ResponseModel.ServerInternalError(data: ex));
            }
        }
Example #2
0
 public async Task <ActionResult> UpdateProductCombine(OutModels.Models.ProductCombine product)
 {
     try
     {
         ProductCombineModel b = (ProductCombineModel)_mapper.Map <OutModels.Models.ProductCombine, ProductCombineModel>(product);
         return(new JsonResult(await this._combinerepository.Update(b)));
     }
     catch (Exception ex)
     {
         return(new JsonResult(ResponseModel.ServerInternalError(data: ex)));
     }
 }
        private async Task <ProductCombineModel> CalculateDefaultCombine(int pid, decimal discount = 0)
        {
            ProductCombineModel ProductCombine = new ProductCombineModel();

            try
            {
                ProductCombinePriceModel PriceModel = new ProductCombinePriceModel();
                //product not exists in boxs
                var getAllCombines = ((List <ProductCombineModel>)(await _combinerepo.GetAll()).Data).Where(x => x.X_ProductId == pid && x.X_Status && !x.X_IsDeleted);
                if (getAllCombines.Count() > 0)//combines set for current product
                {
                    var defaultCombine = getAllCombines.FirstOrDefault(x => x.X_Default);
                    if (defaultCombine != null)//has default combine
                    {
                        ProductCombine   = defaultCombine;
                        PriceModel.Price = defaultCombine.X_Price;
                        if (discount != 0)
                        {
                            defaultCombine.X_Discount     = discount;
                            defaultCombine.X_DiscountType = 1;
                        }
                        if (defaultCombine.X_Discount > 0)//has discount
                        {
                            PriceModel.HasDiscount = true;
                            if (defaultCombine.X_DiscountType == 1) // please calculate price by percentage
                            {
                                PriceModel.Discount        = defaultCombine.X_Discount;
                                PriceModel.DiscountedPrice = (defaultCombine.X_Price - ((defaultCombine.X_Price * defaultCombine.X_Discount) / 100));
                            }
                            else//calculate percentage by price
                            {
                                PriceModel.Discount        = ((defaultCombine.X_Discount * 100) / defaultCombine.X_Price);
                                PriceModel.DiscountedPrice = defaultCombine.X_Discount;
                            }
                        }
                    }
                }
                ProductCombine.PriceModel = PriceModel;
                return(ProductCombine);
            }
            catch (Exception ex)
            {
                return(ProductCombine);
            }
        }
Example #4
0
        private async Task <ProductCombineModel> SetDiscountByCombine(ProductCombineModel defaultCombine, decimal discount = 0)
        {
            ProductCombineModel ProductCombine = defaultCombine;

            try
            {
                ProductCombinePriceModel PriceModel = new ProductCombinePriceModel();
                //product not exists in boxs
                PriceModel.Price = defaultCombine.X_Price;
                if (discount != 0)
                {
                    defaultCombine.X_Discount     = discount;
                    defaultCombine.X_DiscountType = 1;
                }
                if (defaultCombine.X_Discount > 0 && !RemoveDiscounts)//has discount
                {
                    PriceModel.HasDiscount = true;
                    if (defaultCombine.X_DiscountType == 1) // please calculate price by percentage
                    {
                        PriceModel.Discount        = defaultCombine.X_Discount;
                        PriceModel.DiscountedPrice = (defaultCombine.X_Price - ((defaultCombine.X_Price * defaultCombine.X_Discount) / 100));
                    }
                    else//calculate percentage by price
                    {
                        var disc = ((defaultCombine.X_Discount * 100) / defaultCombine.X_Price);
                        PriceModel.Discount        = (100 - disc);
                        PriceModel.DiscountedPrice = defaultCombine.X_Discount;
                    }
                }


                ProductCombine.PriceModel = PriceModel;
                return(ProductCombine);
            }
            catch (Exception ex)
            {
                return(ProductCombine);
            }
        }
        public async Task <ProductCombineModel> CalculateProductPrice(int pid, int EndLevelCatId = 0)
        {
            Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en");

            ProductCombineModel ProductCombine = new ProductCombineModel();

            try
            {
                ProductCombinePriceModel  PriceModel      = new ProductCombinePriceModel();
                List <FestivalOfferModel> AllFestivalRepo = ((List <FestivalOfferModel>)(await _festrepo.GetAll()).Data);
                var existsInBox = await _boxProdRepository.CheckProductEixstsInBoxs(pid);

                //product exists in boxs
                if (existsInBox != null)
                {
                    var defaultCombine = ((List <ProductCombineModel>)(await _combinerepo.GetAll()).Data).FirstOrDefault(x => x.X_ColorId == existsInBox.X_ColorId && x.X_WarrantyId == existsInBox.X_WarrantyId);
                    if (defaultCombine == null)
                    {
                        return(await CalculateDefaultCombine(pid));
                    }

                    ProductCombine   = defaultCombine;
                    PriceModel.Price = defaultCombine.X_Price;
                    if (existsInBox.X_SectionId == 34 && (DateTime.Now >= existsInBox.X_StartDate && DateTime.Now <= existsInBox.X_EndDate)) //is special sale and timer started
                    {
                        if (existsInBox.X_DiscountedPrice > 0)                                                                               //has discount
                        {
                            PriceModel.HasDiscount = true;
                            if (!existsInBox.X_DiscountType) // please calculate price by percentage
                            {
                                PriceModel.Discount        = existsInBox.X_DiscountedPrice;
                                PriceModel.DiscountedPrice = (defaultCombine.X_Price - ((defaultCombine.X_Price * existsInBox.X_DiscountedPrice) / 100));
                            }
                            else//calculate percentage by price
                            {
                                PriceModel.Discount        = ((existsInBox.X_DiscountedPrice * 100) / defaultCombine.X_Price);
                                PriceModel.DiscountedPrice = existsInBox.X_DiscountedPrice;
                            }
                        }
                        PriceModel.Timer = existsInBox.X_EndDate.ToString("yyyy-MM-dd HH:mm:ss");
                    }
                    else
                    {
                        return(await CalculateDefaultCombine(pid));
                    }
                    if (existsInBox.X_SectionId != 34)
                    {
                        if (existsInBox.X_DiscountedPrice > 0)//has discount
                        {
                            PriceModel.HasDiscount = true;
                            if (!existsInBox.X_DiscountType) // please calculate price by percentage
                            {
                                PriceModel.Discount        = existsInBox.X_DiscountedPrice;
                                PriceModel.DiscountedPrice = (defaultCombine.X_Price - ((defaultCombine.X_Price * existsInBox.X_DiscountedPrice) / 100));
                            }
                            else//calculate percentage by price
                            {
                                PriceModel.Discount        = ((existsInBox.X_DiscountedPrice * 100) / defaultCombine.X_Price);
                                PriceModel.DiscountedPrice = existsInBox.X_DiscountedPrice;
                            }
                        }
                    }
                }
                else if (AllFestivalRepo.Count(x => x.F_Type == 1 && x.F_Status) > 0)
                {
                    var fest           = AllFestivalRepo.FirstOrDefault(x => x.F_Type == 1);
                    var defaultCombine = await CalculateDefaultCombine(pid);

                    return(await CalculateDefaultCombine(pid, fest.F_Discount));
                }
                else if (EndLevelCatId != 0 && AllFestivalRepo.Count(x => x.F_Type == 2 && x.F_Status && x.F_EndLevelCategoryId == EndLevelCatId) > 0)
                {
                    var fest           = AllFestivalRepo.FirstOrDefault(x => x.F_Type == 2 && x.F_Status && x.F_EndLevelCategoryId == EndLevelCatId);
                    var defaultCombine = await CalculateDefaultCombine(pid);

                    return(await CalculateDefaultCombine(pid, fest.F_Discount));
                }
                else
                {
                    return(await CalculateDefaultCombine(pid));
                }
                ProductCombine.PriceModel = PriceModel;
                return(ProductCombine);
            }
            catch (Exception ex)
            {
                return(ProductCombine);
            }
        }
Example #6
0
        public async Task <ResponseStructure> AddToCart(HttpRequest httpRequest, HttpResponse httpResponse)
        {
            try
            {
                if (!this.STOREISACTIVE)
                {
                    return(ResponseModel.Error("با عرض پوزش ، در حال حاضر امکان سفارش گیری وجود ندارد"));
                }

                StringValues data;

                if (!httpRequest.Headers.TryGetValue("AddToCart", out data))
                {
                    return(ResponseModel.Error("دسترسی غیر مجاز"));
                }

                var dec = Barayand.Common.Services.CryptoJsService.DecryptStringAES(data);

                FullPropertyBasketItem rm = JsonConvert.DeserializeObject <FullPropertyBasketItem>(dec);

                ProductCombineModel findProduct = new ProductCombineModel();
                if (rm.ProductType == 1)
                {
                    findProduct = AllProducts.FirstOrDefault(x => x.X_Id == rm.ProductCombineId);
                    if (findProduct == null)
                    {
                        return(ResponseModel.Error("تنوع محصول مورد نظر یافت نشد"));
                    }

                    if (!findProduct.X_Status || findProduct.X_IsDeleted || findProduct.X_AvailableCount < 1)
                    {
                        return(ResponseModel.Error("متاسفانه محصول مورد نظر در انبار موجود نمیباشد"));
                    }

                    if (rm.ProductType == 1 && (rm.Quantity) > findProduct.X_AvailableCount)
                    {
                        return(ResponseModel.Error("محصول مورد نظر در تعداد درخواستی موجود نمیباشد"));
                    }
                }


                FullPropertyBasketModel BasketModel = new FullPropertyBasketModel();
                string cookie;
                if (httpRequest.Cookies.TryGetValue("Cart", out cookie))
                {
                    if (cookie != null)
                    {
                        var basketInfo = Barayand.Common.Services.CryptoJsService.DecryptStringAES(cookie);
                        BasketModel = JsonConvert.DeserializeObject <FullPropertyBasketModel>(basketInfo);
                        if (BasketModel.CartItems.Count() > 0)
                        {
                            if (BasketModel.CartItems.Count(x => x.ProductCombineId == rm.ProductCombineId && x.ProductType == rm.ProductType) > 0)
                            {
                                var existsCombine = BasketModel.CartItems.FirstOrDefault(x => x.ProductCombineId == rm.ProductCombineId && x.ProductType == rm.ProductType);

                                if ((existsCombine.Quantity + rm.Quantity) > findProduct.X_AvailableCount)
                                {
                                    return(ResponseModel.Error("محصول مورد نظر در تعداد درخواستی موجود نمیباشد"));
                                }

                                existsCombine.Quantity = existsCombine.Quantity + rm.Quantity;
                            }
                            else
                            {
                                BasketModel.CartItems.Add(rm);
                            }
                        }
                    }
                    else
                    {
                        BasketModel.CartItems.Add(rm);
                    }
                }
                else
                {
                    BasketModel.CartItems.Add(rm);
                    BasketModel.OrderDate = DateTime.Now;
                }
                string token = Barayand.Common.Services.CryptoJsService.EncryptStringToAES(JsonConvert.SerializeObject(BasketModel));
                httpResponse.Cookies.Delete("Cart");
                httpResponse.Cookies.Append("Cart", token);
                return(ResponseModel.Success("محصول مورد نظر با موفقیت به سبد خرید اضافه گردید"));
            }
            catch (Exception ex)
            {
                _logger.LogError("Error in adding product to basket", ex);
                return(ResponseModel.ServerInternalError(data: ex));
            }
        }
Example #7
0
        private async Task <ProductCombineModel> CalculateDefaultCombine(int pid, decimal discount = 0)
        {
            Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-GB");
            ProductCombineModel ProductCombine = new ProductCombineModel();

            try
            {
                ProductCombinePriceModel PriceModel = new ProductCombinePriceModel();
                //product not exists in boxs
                var getAllCombines = _context.ProductCombine.Where(x => x.X_ProductId == pid && x.X_Status && !x.X_IsDeleted);
                if (getAllCombines.Count() > 0)//combines set for current product
                {
                    var defaultCombine = getAllCombines.FirstOrDefault(x => x.X_Default);

                    if (defaultCombine == null)
                    {
                        defaultCombine = getAllCombines.FirstOrDefault(x => x.X_Price > 0 && x.X_AvailableCount > 0);
                    }
                    if (defaultCombine != null)//has default combine
                    {
                        PriceModel.Avl = defaultCombine.X_AvailableCount;
                        if (defaultCombine.X_AvailableCount < 1)
                        {
                            var hasavl = getAllCombines.FirstOrDefault(x => x.X_AvailableCount > 0);
                            if (hasavl != null)
                            {
                                defaultCombine = hasavl;
                            }
                        }
                        ProductCombine   = defaultCombine;
                        PriceModel.Price = defaultCombine.X_Price;
                        PriceModel.Avl   = defaultCombine.X_AvailableCount;
                        if (discount != 0)
                        {
                            defaultCombine.X_Discount     = discount;
                            defaultCombine.X_DiscountType = 1;
                        }
                        if (defaultCombine.X_Discount > 0 && !RemoveDiscounts)//has discount
                        {
                            PriceModel.HasDiscount = true;
                            if (defaultCombine.X_DiscountType == 1) // please calculate price by percentage
                            {
                                PriceModel.Discount        = defaultCombine.X_Discount;
                                PriceModel.DiscountedPrice = (defaultCombine.X_Price - ((defaultCombine.X_Price * defaultCombine.X_Discount) / 100));
                            }
                            else//calculate percentage by price
                            {
                                var disc = ((defaultCombine.X_Discount * 100) / defaultCombine.X_Price);
                                PriceModel.Discount        = (100 - disc);
                                PriceModel.DiscountedPrice = defaultCombine.X_Discount;
                            }
                        }
                    }
                }
                ProductCombine.PriceModel = PriceModel;
                return(ProductCombine);
            }
            catch (Exception ex)
            {
                return(ProductCombine);
            }
        }