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)); } }
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); } }
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); } }
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)); } }
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); } }