Represents a product
Inheritance: BaseEntity, ILocalizedEntity, ISlugSupported, IAclSupported, IStoreMappingSupported
        public void Can_calculate_rental_periods_for_days()
        {
            var product = new Product
            {
                IsRental = true,
                RentalPricePeriod = RentalPricePeriod.Days
            };

            //rental period length = 1 day
            product.RentalPriceLength = 1;
            //the same date
            product.GetRentalPeriods(new DateTime(2014, 3, 5), new DateTime(2014, 3, 5)).ShouldEqual(1);
            //1 day
            product.GetRentalPeriods(new DateTime(2014, 3, 5), new DateTime(2014, 3, 6)).ShouldEqual(1);
            //2 days
            product.GetRentalPeriods(new DateTime(2014, 3, 5), new DateTime(2014, 3, 7)).ShouldEqual(2);
            //3 days
            product.GetRentalPeriods(new DateTime(2014, 3, 5), new DateTime(2014, 3, 8)).ShouldEqual(3);

            //rental period length = 2 days
            product.RentalPriceLength = 2;
            //the same date
            product.GetRentalPeriods(new DateTime(2014, 3, 5), new DateTime(2014, 3, 5)).ShouldEqual(1);
            //1 day
            product.GetRentalPeriods(new DateTime(2014, 3, 5), new DateTime(2014, 3, 6)).ShouldEqual(1);
            //2 days
            product.GetRentalPeriods(new DateTime(2014, 3, 5), new DateTime(2014, 3, 7)).ShouldEqual(1);
            //3 days
            product.GetRentalPeriods(new DateTime(2014, 3, 5), new DateTime(2014, 3, 8)).ShouldEqual(2);
        }
 /// <summary>
 /// Gets discount amount
 /// </summary>
 /// <param name="product">Product</param>
 /// <param name="customer">The customer</param>
 /// <param name="additionalCharge">Additional charge</param>
 /// <returns>Discount amount</returns>
 public virtual decimal GetDiscountAmount(Product product, 
     Customer customer,
     decimal additionalCharge = decimal.Zero)
 {
     Discount appliedDiscount = null;
     return GetDiscountAmount(product, customer, additionalCharge, out appliedDiscount);
 }
        public void Can_calculate_total_quantity_when_we_do_use_multiple_warehouses_with_reserved()
        {
            var product = new Product
            {
                ManageInventoryMethod = ManageInventoryMethod.ManageStock,
                UseMultipleWarehouses = true,
                StockQuantity = 6,
            };
            product.ProductWarehouseInventory.Add(new ProductWarehouseInventory
            {
                WarehouseId = 1,
                StockQuantity = 7,
                ReservedQuantity = 4,
            });
            product.ProductWarehouseInventory.Add(new ProductWarehouseInventory
            {
                WarehouseId = 2,
                StockQuantity = 8,
                ReservedQuantity = 1,
            });
            product.ProductWarehouseInventory.Add(new ProductWarehouseInventory
            {
                WarehouseId = 3,
                StockQuantity = -2,
            });

            var result = product.GetTotalStockQuantity(true);
            result.ShouldEqual(8);
        }
        public virtual int SendProductInquery(Product product,Vendor vendor,string from,string phone, string email,string msg, int languageId)
        {
            if (product == null)
                throw new ArgumentNullException("product");

            var store = _storeContext.CurrentStore;
            languageId = EnsureLanguageIsActive(languageId, store.Id);

            var messageTemplate = GetActiveMessageTemplate("Product.Inqure", store.Id);
            if (messageTemplate == null)
                return 0;

            //email account
            var emailAccount = GetEmailAccountOfMessageTemplate(messageTemplate, languageId);

            //tokens
            var tokens = new List<Token>();
            _messageTokenProvider.AddStoreTokens(tokens, store, emailAccount);

            tokens.Add(new Token("Product.ProductUrl", store.Url + product.Name.Trim().Replace(" ", "-")));
            tokens.Add(new Token("Product.ProductName", product.Name));
            tokens.Add(new Token("From", from));
            tokens.Add(new Token("Phone", phone));
            tokens.Add(new Token("Email", email));
            tokens.Add(new Token("Msg", msg));

            //event notification
            _eventPublisher.MessageTokensAdded(messageTemplate, tokens);

            var toEmail = vendor.Email;
            var toName = vendor.Name;
            return SendNotification(messageTemplate, emailAccount,
                languageId, tokens,
                toEmail, toName);
        }
        public void Two_transient_entities_should_not_be_equal() {
            
            var p1 = new Product();
            var p2 = new Product();

            Assert.AreNotEqual(p1, p2, "Different transient entities should not be equal");
        }
        public void Entity_should_not_equal_transient_entity() {
            
            var p1 = new Product { Id = 1 };
            var p2 = new Product();

            Assert.AreNotEqual(p1, p2, "Entity and transient entity should not be equal");
        }
        public void Can_save_and_load_product_with_productVariants()
        {
            var product = new Product
                          {
                              Name = "Name 1",
                              Published = true,
                              Deleted = false,
                              CreatedOnUtc = new DateTime(2010, 01, 01),
                              UpdatedOnUtc = new DateTime(2010, 01, 02)
                          };
            product.ProductVariants.Add
                (
                    new ProductVariant
                    {
                        Name = "Product variant name 1",
                        CreatedOnUtc = new DateTime(2010, 01, 03),
                        UpdatedOnUtc = new DateTime(2010, 01, 04)
                    }
                );
            var fromDb = SaveAndLoadEntity(product);
            fromDb.ShouldNotBeNull();
            fromDb.Name.ShouldEqual("Name 1");


            fromDb.ProductVariants.ShouldNotBeNull();
            (fromDb.ProductVariants.Count == 1).ShouldBeTrue();
            fromDb.ProductVariants.First().Name.ShouldEqual("Product variant name 1");
        }
        public void Entities_with_different_id_should_not_be_equal() {
            
            var p1 = new Product { Id = 2 };
            var p2 = new Product { Id = 5 };

            Assert.AreNotEqual(p1, p2, "Entities with different ids should not be equal");
        }
        public void Two_references_to_same_transient_entity_should_be_equal() {
            
            var p1 = new Product();
            var p2 = p1;

            Assert.AreEqual(p1, p2, "Two references to the same transient entity should be equal");
        }
        public static IList<ProductSpecificationModel> PrepareProductSpecificationModel(this Controller controller,
            IWorkContext workContext,
            ISpecificationAttributeService specificationAttributeService,
            ICacheManager cacheManager,
            Product product)
        {
            if (product == null)
                throw new ArgumentNullException("product");

            string cacheKey = string.Format(ModelCacheEventConsumer.PRODUCT_SPECS_MODEL_KEY, product.Id, workContext.WorkingLanguage.Id);
            return cacheManager.Get(cacheKey, () =>
            {
                var model = specificationAttributeService.GetProductSpecificationAttributesByProductId(product.Id, null, true)
                   .Select(psa =>
                   {
                       return new ProductSpecificationModel()
                       {
                           SpecificationAttributeId = psa.SpecificationAttributeOption.SpecificationAttributeId,
                           SpecificationAttributeName = psa.SpecificationAttributeOption.SpecificationAttribute.GetLocalized(x => x.Name),
                           SpecificationAttributeOption = !String.IsNullOrEmpty(psa.CustomValue) ? psa.CustomValue : psa.SpecificationAttributeOption.GetLocalized(x => x.Name),
                       };
                   }).ToList();
                return model;
            });
        }
        public void Entities_with_same_id_but_different_type_should_not_be_equal() {
            int id = 10;
            var p1 = new Product { Id = id };

            var c1 = new Category { Id = id };

            Assert.AreNotEqual(p1, c1, "Entities of different types should not be equal, even if they have the same id");
        }
 public void Can_check_taxExempt_product()
 {
     var product = new Product();
     product.IsTaxExempt = true;
     _taxService.IsTaxExempt(product, null).ShouldEqual(true);
     product.IsTaxExempt = false;
     _taxService.IsTaxExempt(product, null).ShouldEqual(false);
 }
        public void Two_references_with_the_same_id_should_be_equal() {
            
            int id = 10;
            var p1 = new Product { Id = id };
            var p2 = new Product { Id = id };

            Assert.AreEqual(p1, p2, "Entities with the same id should be equal");
        }
        public void Should_be_available_when_enddate_is_greater_than_somedate()
        {
            var product = new Product
            {
                AvailableEndDateTimeUtc = new DateTime(2010, 01, 02)
            };

            product.IsAvailable(new DateTime(2010, 01, 01)).ShouldEqual(true);
        }
        public void Should_be_available_when_enddate_is_not_set()
        {
            var product = new Product
            {
                AvailableEndDateTimeUtc = null
            };

            product.IsAvailable(new DateTime(2010, 01, 03)).ShouldEqual(true);
        }
        public void Should_not_be_available_when_startdate_is_greater_than_somedate()
        {
            var product = new Product
            {
                AvailableStartDateTimeUtc = new DateTime(2010, 01, 02)
            };

            product.IsAvailable(new DateTime(2010, 01, 01)).ShouldEqual(false);
        }
Example #17
0
        /// <summary>
        /// Create request for tax calculation
        /// </summary>
        /// <param name="product">Product</param>
        /// <param name="taxCategoryId">Tax category identifier</param>
        /// <param name="customer">Customer</param>
        /// <returns>Package for tax calculation</returns>
        protected virtual CalculateTaxRequest CreateCalculateTaxRequest(Product product, 
            int taxCategoryId, Customer customer)
        {
            var calculateTaxRequest = new CalculateTaxRequest();
            calculateTaxRequest.Customer = customer;
            if (taxCategoryId > 0)
            {
                calculateTaxRequest.TaxCategoryId = taxCategoryId;
            }
            else
            {
                if (product != null)
                    calculateTaxRequest.TaxCategoryId = product.TaxCategoryId;
            }

            var basedOn = _taxSettings.TaxBasedOn;

            if (basedOn == TaxBasedOn.BillingAddress)
            {
                if (customer == null || customer.BillingAddress == null)
                {
                    basedOn = TaxBasedOn.DefaultAddress;
                }
            }
            if (basedOn == TaxBasedOn.ShippingAddress)
            {
                if (customer == null || customer.ShippingAddress == null)
                {
                    basedOn = TaxBasedOn.DefaultAddress;
                }
            }

            Address address = null;

            switch (basedOn)
            {
                case TaxBasedOn.BillingAddress:
                    {
                        address = customer.BillingAddress;
                    }
                    break;
                case TaxBasedOn.ShippingAddress:
                    {
                        address = customer.ShippingAddress;
                    }
                    break;
                case TaxBasedOn.DefaultAddress:
                default:
                    {
                        address = _addressService.GetAddressById(_taxSettings.DefaultTaxAddressId);
                    }
                    break;
            }

            calculateTaxRequest.Address = address;
            return calculateTaxRequest;
        }
        public void Should_be_available_when_startdate_is_less_than_somedate()
        {
            var product = new Product
            {
                AvailableStartDateTimeUtc = new DateTime(2010, 01, 02)
            };

            product.IsAvailable(new DateTime(2010, 01, 03)).ShouldEqual(true);
        }
 /// <summary>
 /// Gets the final price
 /// </summary>
 /// <param name="product">Product</param>
 /// <param name="customer">The customer</param>
 /// <param name="additionalCharge">Additional charge</param>
 /// <param name="includeDiscounts">A value indicating whether include discounts or not for final price computation</param>
 /// <param name="quantity">Shopping cart item quantity</param>
 /// <returns>Final price</returns>
 public virtual decimal GetFinalPrice(Product product,
     Customer customer,
     decimal additionalCharge = decimal.Zero,
     bool includeDiscounts = true,
     int quantity = 1)
 {
     decimal discountAmount;
     Discount appliedDiscount;
     return GetFinalPrice(product, customer, additionalCharge, includeDiscounts,
         quantity, out discountAmount, out appliedDiscount);
 }
        public void Equality_works_using_operators() {

            var p1 = new Product { Id = 1 };
            var p2 = new Product { Id = 1 };

            Assert.IsTrue(p1 == p2);

            var p3 = new Product();

            Assert.IsTrue(p1 != p3);
        }
        public void Can_calculate_rental_periods_for_months()
        {
            var product = new Product
            {
                IsRental = true,
                RentalPricePeriod = RentalPricePeriod.Months
            };

            //rental period length = 1 month
            product.RentalPriceLength = 1;
            //the same date
            product.GetRentalPeriods(new DateTime(2014, 3, 5), new DateTime(2014, 3, 5)).ShouldEqual(1);
            //several days but less than a month
            product.GetRentalPeriods(new DateTime(2014, 3, 5), new DateTime(2014, 3, 4)).ShouldEqual(1);
            //1 month
            product.GetRentalPeriods(new DateTime(2014, 3, 5), new DateTime(2014, 4, 5)).ShouldEqual(1);
            //1 month and 1 day
            product.GetRentalPeriods(new DateTime(2014, 3, 5), new DateTime(2014, 4, 6)).ShouldEqual(2);
            //several days but less than two months
            product.GetRentalPeriods(new DateTime(2014, 3, 5), new DateTime(2014, 4, 13)).ShouldEqual(2);
            //2 months
            product.GetRentalPeriods(new DateTime(2014, 3, 5), new DateTime(2014, 5, 5)).ShouldEqual(2);
            //3 months
            product.GetRentalPeriods(new DateTime(2014, 3, 5), new DateTime(2014, 5, 8)).ShouldEqual(3);
            //several more unit tests
            product.GetRentalPeriods(new DateTime(1900, 1, 1), new DateTime(1900, 1, 1)).ShouldEqual(1);
            product.GetRentalPeriods(new DateTime(1900, 1, 1), new DateTime(1900, 1, 2)).ShouldEqual(1);
            product.GetRentalPeriods(new DateTime(1900, 1, 2), new DateTime(1900, 1, 1)).ShouldEqual(1);
            product.GetRentalPeriods(new DateTime(1900, 1, 1), new DateTime(1900, 2, 1)).ShouldEqual(1);
            product.GetRentalPeriods(new DateTime(1900, 2, 1), new DateTime(1900, 1, 1)).ShouldEqual(1);
            product.GetRentalPeriods(new DateTime(1900, 1, 31), new DateTime(1900, 2, 1)).ShouldEqual(1);
            product.GetRentalPeriods(new DateTime(1900, 8, 31), new DateTime(1900, 9, 30)).ShouldEqual(1);
            product.GetRentalPeriods(new DateTime(1900, 8, 31), new DateTime(1900, 10, 1)).ShouldEqual(2);
            product.GetRentalPeriods(new DateTime(1900, 1, 1), new DateTime(1901, 1, 1)).ShouldEqual(12);
            product.GetRentalPeriods(new DateTime(1900, 1, 1), new DateTime(1911, 1, 1)).ShouldEqual(132);
            product.GetRentalPeriods(new DateTime(1900, 8, 31), new DateTime(1901, 8, 30)).ShouldEqual(12);

            //rental period length = 2 months
            product.RentalPriceLength = 2;
            //the same date
            product.GetRentalPeriods(new DateTime(2014, 3, 5), new DateTime(2014, 3, 5)).ShouldEqual(1);
            //several days but less than a month
            product.GetRentalPeriods(new DateTime(2014, 3, 5), new DateTime(2014, 3, 4)).ShouldEqual(1);
            //1 month
            product.GetRentalPeriods(new DateTime(2014, 3, 5), new DateTime(2014, 4, 5)).ShouldEqual(1);
            //several days but less than two months
            product.GetRentalPeriods(new DateTime(2014, 3, 5), new DateTime(2014, 4, 13)).ShouldEqual(1);
            //2 months
            product.GetRentalPeriods(new DateTime(2014, 3, 5), new DateTime(2014, 5, 5)).ShouldEqual(1);
            //3 months
            product.GetRentalPeriods(new DateTime(2014, 3, 5), new DateTime(2014, 5, 8)).ShouldEqual(2);
        }
        public void Can_parse_required_productvariant_ids()
        {
            var product = new Product
            {
                RequiredProductIds = "1, 4,7 ,a,"
            };

            var ids = product.ParseRequiredProductIds();
            ids.Length.ShouldEqual(3);
            ids[0].ShouldEqual(1);
            ids[1].ShouldEqual(4);
            ids[2].ShouldEqual(7);
        }
        public void Can_parse_allowed_quantities()
        {
            var product = new Product()
            {
                AllowedQuantities = "1, 5,4,10,sdf"
            };

            var result = product.ParseAllowedQuatities();
            result.Length.ShouldEqual(4);
            result[0].ShouldEqual(1);
            result[1].ShouldEqual(5);
            result[2].ShouldEqual(4);
            result[3].ShouldEqual(10);
        }
 /// <summary>
 /// Gets selected product attribute mappings
 /// </summary>
 /// <param name="attributesXml">Attributes in XML format</param>
 /// <returns>Selected product attribute mappings</returns>
 public virtual IList<ProductAttributeMapping> ParseProductAttributeMappings(Product product, string attributesXml)
 {
     var result = new List<ProductAttributeMapping>();
     var ids = ParseProductAttributeMappingIds(attributesXml);
     foreach (int id in ids)
     {
         var attribute = product.ProductAttributeMappings.Where(x => x.Id == id).FirstOrDefault();  //_productAttributeService.GetProductAttributeMappingById(id);
         if (attribute != null)
         {
             result.Add(attribute);
         }
     }
     return result;
 }
        public void Can_save_and_load_product()
        {
            var product = new Product
            {
                Name = "Name 1",
                ShortDescription = "ShortDescription 1",
                FullDescription = "FullDescription 1",
                AdminComment = "AdminComment 1",
                VendorId = 1,
                ProductTemplateId = 2,
                ShowOnHomePage = false,
                MetaKeywords = "Meta keywords",
                MetaDescription = "Meta description",
                MetaTitle = "Meta title",
                AllowCustomerReviews = true,
                ApprovedRatingSum = 2,
                NotApprovedRatingSum = 3,
                ApprovedTotalReviews = 4,
                NotApprovedTotalReviews = 5,
                SubjectToAcl = true,
                LimitedToStores = true,
                Published = true,
                Deleted = false,
                CreatedOnUtc = new DateTime(2010, 01, 01),
                UpdatedOnUtc = new DateTime(2010, 01, 02),
            };

            var fromDb = SaveAndLoadEntity(product);
            fromDb.ShouldNotBeNull();
            fromDb.Name.ShouldEqual("Name 1");
            fromDb.ShortDescription.ShouldEqual("ShortDescription 1");
            fromDb.FullDescription.ShouldEqual("FullDescription 1");
            fromDb.AdminComment.ShouldEqual("AdminComment 1");
            fromDb.VendorId.ShouldEqual(1);
            fromDb.ProductTemplateId.ShouldEqual(2);
            fromDb.ShowOnHomePage.ShouldEqual(false);
            fromDb.MetaKeywords.ShouldEqual("Meta keywords");
            fromDb.MetaDescription.ShouldEqual("Meta description");
            fromDb.AllowCustomerReviews.ShouldEqual(true);
            fromDb.ApprovedRatingSum.ShouldEqual(2);
            fromDb.NotApprovedRatingSum.ShouldEqual(3);
            fromDb.ApprovedTotalReviews.ShouldEqual(4);
            fromDb.NotApprovedTotalReviews.ShouldEqual(5);
            fromDb.SubjectToAcl.ShouldEqual(true);
            fromDb.LimitedToStores.ShouldEqual(true);
            fromDb.Published.ShouldEqual(true);
            fromDb.Deleted.ShouldEqual(false);
            fromDb.CreatedOnUtc.ShouldEqual(new DateTime(2010, 01, 01));
            fromDb.UpdatedOnUtc.ShouldEqual(new DateTime(2010, 01, 02));
        }
        public ProductMappingItem RetrieveFromAttributesXml(Product product, string attributesXml)
        {
            if (product.IsGiftCard)
                attributesXml = string.Empty;

            if (product.ProductAttributeCombinations == null || product.ProductAttributeCombinations.Count == 0)
                attributesXml = string.Empty;

            if (product.ProductAttributeMappings != null && product.ProductAttributeMappings.Count > _promoSettings.MaximumAttributesForVariants)
                attributesXml = string.Empty;

            return this._repository.Table.Where(pm => pm.EntityId == product.Id && pm.EntityName == EntityAttributeName.Product &&
                (pm.AttributesXml ?? string.Empty).Equals((attributesXml ?? string.Empty), StringComparison.InvariantCultureIgnoreCase)).FirstOrDefault();
        }
        public void Can_save_and_load_product_with_productCategories()
        {
            var product = new Product
                          {
                              Name = "Name 1",
                              Published = true,
                              Deleted = false,
                              CreatedOnUtc = new DateTime(2010, 01, 01),
                              UpdatedOnUtc = new DateTime(2010, 01, 02)
                          };
            product.ProductCategories.Add
                (
                    new ProductCategory
                    {
                        IsFeaturedProduct = true,
                        DisplayOrder = 1,
                        Category = new Category()
                        {
                            Name = "Books",
                            Description = "Description 1",
                            MetaKeywords = "Meta keywords",
                            MetaDescription = "Meta description",
                            MetaTitle = "Meta title",
                            SeName = "SE name",
                            ParentCategoryId = 2,
                            PictureId = 3,
                            PageSize = 4,
                            PriceRanges = "1-3;",
                            ShowOnHomePage = false,
                            Published = true,
                            Deleted = false,
                            DisplayOrder = 5,
                            CreatedOnUtc = new DateTime(2010, 01, 01),
                            UpdatedOnUtc = new DateTime(2010, 01, 02),
                        }
                    }
                );
            var fromDb = SaveAndLoadEntity(product);
            fromDb.ShouldNotBeNull();
            fromDb.Name.ShouldEqual("Name 1");

            fromDb.ProductCategories.ShouldNotBeNull();
            (fromDb.ProductCategories.Count == 1).ShouldBeTrue();
            fromDb.ProductCategories.First().IsFeaturedProduct.ShouldEqual(true);

            fromDb.ProductCategories.First().Category.ShouldNotBeNull();
            fromDb.ProductCategories.First().Category.Name.ShouldEqual("Books");
        }
        public void Can_get_final_product_price_with_additionalFee()
        {
            var product = new Product
            {
                Id = 1,
                Name = "Product name 1",
                Price = 12.34M,
                CustomerEntersPrice = false,
                Published = true,
            };

            //customer
            Customer customer = null;

            _priceCalcService.GetFinalPrice(product, customer, 5, false, 1).ShouldEqual(17.34M);
        }
        /// <summary>
        /// Gets allowed discounts
        /// </summary>
        /// <param name="product">Product</param>
        /// <param name="customer">Customer</param>
        /// <returns>Discounts</returns>
        protected virtual IList<Discount> GetAllowedDiscounts(Product product, 
            Customer customer)
        {
            var allowedDiscounts = new List<Discount>();
            if (_catalogSettings.IgnoreDiscounts)
                return allowedDiscounts;

            if (product.HasDiscountsApplied)
            {
                //we use this property ("HasDiscountsApplied") for performance optimziation to avoid unnecessary database calls
                foreach (var discount in product.AppliedDiscounts)
                {
                    if (_discountService.IsDiscountValid(discount, customer) &&
                        discount.DiscountType == DiscountType.AssignedToSkus &&
                        !allowedDiscounts.ContainsDiscount(discount))
                        allowedDiscounts.Add(discount);
                }
            }

            //performance optimization
            //load all category discounts just to ensure that we have at least one
            if (_discountService.GetAllDiscounts(DiscountType.AssignedToCategories).Any())
            {
                var productCategories = _categoryService.GetProductCategoriesByProductId(product.ID);
                if (productCategories != null)
                {
                    foreach (var productCategory in productCategories)
                    {
                        var category = productCategory.Category;

                        if (category.HasDiscountsApplied)
                        {
                            //we use this property ("HasDiscountsApplied") for performance optimziation to avoid unnecessary database calls
                            var categoryDiscounts = category.AppliedDiscounts;
                            foreach (var discount in categoryDiscounts)
                            {
                                if (_discountService.IsDiscountValid(discount, customer) &&
                                    discount.DiscountType == DiscountType.AssignedToCategories &&
                                    !allowedDiscounts.ContainsDiscount(discount))
                                    allowedDiscounts.Add(discount);
                            }
                        }
                    }
                }
            }
            return allowedDiscounts;
        }
Example #30
0
        private void TranslateMetaKeywords(NopProduct nopProduct)
        {
            foreach (var googleLanguage in GoogleLanguage.Languages)
            {
                if (googleLanguage.Id != 1)
                {
                    string translatedText = null;
                    if (googleLanguage.Id == 2)
                    {
                        translatedText =
                            @"保健品 维生素 抗衰老 医药 在线 护理 健康 美容 产品 减肥 处方药 药物 扑热息痛 皮肤 流感 阿司匹林 奶粉 婴儿食品 母婴用品 儿童 男人 女人 老人 小孩 自然 有机";
                    }
                    else
                    {
                        var keywords = nopProduct.MetaKeywords.Replace(" ", "/ ");
                        var language = GoogleLanguage.GetLanguageById(googleLanguage.Id);



                        if (language != null && googleLanguage.Id != 1)
                        {
                            translatedText = NopDictionary.GetTranslate(keywords, googleLanguage.Id);

                            if (string.IsNullOrWhiteSpace(translatedText))
                            {
                                translatedText = Translator.Translate(keywords, "English", GoogleLanguage.GetLanguageById(googleLanguage.Id).Name);

                                translatedText = translatedText.Replace("/", " ");
                            }
                        }
                    }


                    var lan = new LocalizedProperty
                    {
                        EntityId       = nopProduct.Id,
                        LanguageId     = googleLanguage.Id,
                        LocaleKey      = "MetaKeywords",
                        LocaleKeyGroup = "Prodcut",
                        LocaleValue    = translatedText
                    };

                    LocalizedEntityService.InsertLocalizedProperty(lan);
                }
            }
        }
        public void Can_get_final_product_price()
        {
            var product = new Product
            {
                Id = 1,
                Name = "Product name 1",
                Price = 12.34M,
                CustomerEntersPrice = false,
                Published = true,
            };

            //customer
            var customer = new Customer();

            _priceCalcService.GetFinalPrice(product, customer, 0, false, 1).ShouldEqual(12.34M);
            _priceCalcService.GetFinalPrice(product, customer, 0, false, 2).ShouldEqual(12.34M);
        }
Example #32
0
        private void InsertImage(string url, string name, Nop.Core.Domain.Catalog.Product product, int orderNo)
        {
            try
            {
                using (var myWebClient = new WebClient())
                {
                    byte[] myDataBuffer = myWebClient.DownloadData(url);
                    var    picture      = _pictureService.InsertPicture(myDataBuffer, "image/jpeg", name);

                    var newProductPic = new ProductPicture();
                    newProductPic.DisplayOrder = orderNo;
                    newProductPic.PictureId    = picture.Id;
                    newProductPic.Product      = product;
                    product.ProductPictures.Add(newProductPic);
                }
            }
            catch (Exception ex)
            {
                _logger.Error("InsertImage", ex);
            }
        }
Example #33
0
        public override void Process()
        {
            using (var db = new DatabaseService("DefaultConnectionString", "NopImport"))
            {
                var products = db.Session.QueryOver <Product>().Where(q => q.IsUpdated && !q.IsSynced).List();
                var count    = 0;
                foreach (var product in products)
                {
                    count++;
                    try
                    {
                        var nopProduct =
                            ProductService.GetProductBySku(string.Format("{0}-{1}", product.ExternalStoreCode,
                                                                         product.ExternalId));
                        if (nopProduct == null)
                        {
                            nopProduct = new NopProduct();
                            nopProduct.UpdateFrom(product);

                            ProductService.InsertProduct(nopProduct);

                            TranslateToAllLanguages(nopProduct, "Name");
                            TranslateToAllLanguages(nopProduct, "ShortDescription");
                            TranslateToAllLanguages(nopProduct, "FullDescription");
                            TranslateToAllLanguages(nopProduct, "MetaDescription");
                            TranslateMetaKeywords(nopProduct);
                            TranslateToAllLanguages(nopProduct, "MetaTitle");

                            var slug = nopProduct.ValidateSeName(StringExtension.GenerateSlug(product.Name),
                                                                 product.Name, true);
                            UrlRecordService.SaveSlug(nopProduct, slug, 0);
                            UrlRecordService.SaveSlug(nopProduct, slug, 1);
                            UrlRecordService.SaveSlug(nopProduct, slug, 2);
                            UrlRecordService.SaveSlug(nopProduct, slug, 3);
                            if (!string.IsNullOrWhiteSpace(product.LocalPicture))
                            {
                                var directory = Path.GetFullPath(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\..\\..\\..\\Presentation\\Nop.Web\\Content\\Images\\Thumbs"));

                                var fullPath = Path.Combine(directory, product.LocalPicture);

                                var newPictureBinary = File.ReadAllBytes(fullPath);
                                var newPicture       = PictureService.InsertPicture(newPictureBinary,
                                                                                    GetMimeTypeFromFilePath(fullPath), PictureService.GetPictureSeName(product.Name));
                                nopProduct.ProductPictures.Add(new ProductPicture
                                {
                                    PictureId    = newPicture.Id,
                                    DisplayOrder = 1,
                                });
                            }

                            nopProduct.ProductManufacturers.Add(new ProductManufacturer
                            {
                                ManufacturerId = int.Parse(product.Manufacturer)
                            });

                            nopProduct.ProductCategories.Add(new ProductCategory
                            {
                                CategoryId = int.Parse(product.Category)
                            });


                            ProductService.UpdateProduct(nopProduct);


                            var tabs = GetTabs(product);

                            foreach (var tab in tabs)
                            {
                                TabService.InsertTab(tab);
                                TranslateToAllLanguages(tab, "Description");
                                TranslateToAllLanguages(tab, "DisplayName");
                            }
                            TabService.AddTabsForProductByIds(nopProduct.Id, tabs.Select(q => q.Id).ToArray());
                        }
                        else
                        {
                            System.Console.WriteLine("product exists");
                        }

                        db.BeginTransaction();
                        product.NopId = nopProduct.Id.ToString(CultureInfo.InvariantCulture);
                        db.Session.Save(product);
                        db.CommitTransaction();
                    }
                    catch (Exception ex)
                    {
                        System.Console.WriteLine("Error when syncing product to NopCommerce, Rolling back");
                        db.RollBackTransaction();
                        throw ex;
                    }

                    ChangeProgress(count * 100 / products.Count);
                }
            }
        }
Example #34
0
        public void Execute()
        {
            try
            {
                var request = (HttpWebRequest)WebRequest.Create("http://www.bilgisayarim.com.tr/xml?ClientCode=23676&UserName=Admin&Password=MS2VR5D5");
                using (var response = request.GetResponse())
                {
                    var document = new XmlDocument();
                    document.Load(response.GetResponseStream());
                    var userNodes = document.SelectNodes("//Urunler/Urun");

                    var vendor = _vendorService.GetAllVendors("Kadıoğlu").FirstOrDefault();
                    if (vendor == null)
                    {
                        vendor = new Core.Domain.Vendors.Vendor()
                        {
                            Active       = true,
                            Name         = "Kadıoğlu",
                            Email        = "*****@*****.**",
                            Deleted      = false,
                            PictureId    = 0,
                            AddressId    = 0,
                            DisplayOrder = 1,
                            PageSize     = 6,
                            AllowCustomersToSelectPageSize = true,
                            PageSizeOptions = "6, 3, 9, 18"
                        };
                        _vendorService.InsertVendor(vendor);
                        _urlRecordService.InsertUrlRecord(new Core.Domain.Seo.UrlRecord()
                        {
                            EntityId   = vendor.Id,
                            EntityName = "Vendor",
                            IsActive   = true,
                            LanguageId = 0,
                            Slug       = vendor.Name.Replace("+", "-").Replace("ö", "o").Replace("ş", "s").Replace("ı", "i").Replace("ğ", "g").Replace("ç", "c").Replace("ü", "u").Replace(".", "").Replace(",", "").Replace("\"", "").Replace(",", "").Replace(" ", "-").Replace("---", "-").Replace("--", "-").ToLower()
                        });
                    }

                    _logger.Information("Product Service " + vendor.Name);

                    foreach (XmlNode userNode in userNodes)
                    {
                        try
                        {
                            string urunID = userNode.SelectNodes("UrunID").Item(0) != null?userNode.SelectNodes("UrunID").Item(0).InnerText : "";

                            var anyProduct = _productService.GtinProduct(urunID);
                            var product    = new Nop.Core.Domain.Catalog.Product();
                            if (anyProduct == null)
                            {
                                _logger.Information("Product urunID " + urunID);
                                product.VendorId = vendor.Id;
                                product.Gtin     = urunID;
                                Category mainCategories = null, parentCategories = null, childCategories = null;

                                _logger.Information("Product Fiyat");
                                if (userNode.SelectNodes("Fiyat").Item(0) != null)
                                {
                                    _logger.Information("Product Fiyat " + userNode.SelectNodes("Fiyat").Item(0).InnerText);
                                }

                                _logger.Information("Product DovizTuru");
                                if (userNode.SelectNodes("DovizTuru").Item(0) != null)
                                {
                                    _logger.Information("Product DovizTuru " + userNode.SelectNodes("DovizTuru").Item(0).InnerText);
                                }
                                decimal prices    = 0;
                                string  dovizTuru = "";
                                try
                                {
                                    prices = userNode.SelectNodes("Fiyat").Item(0) != null?Convert.ToDecimal(userNode.SelectNodes("Fiyat").Item(0).InnerText, new CultureInfo("tr-TR")) : 0;

                                    dovizTuru = userNode.SelectNodes("DovizTuru").Item(0) != null?userNode.SelectNodes("DovizTuru").Item(0).InnerText : "";

                                    if (!string.IsNullOrWhiteSpace(dovizTuru) && dovizTuru != "USD")
                                    {
                                        var getCurrrency = _currencyService.GetAllCurrencies(true);
                                        var getdoviz     = getCurrrency.Where(x => x.Name == dovizTuru).FirstOrDefault();
                                        prices = prices / getdoviz.Rate;
                                        product.ProductCost = prices;
                                        prices = prices + ((prices / 100) * 15);
                                    }
                                    else
                                    {
                                        product.ProductCost = prices;
                                        prices = prices + ((prices / 100) * 15);
                                    }
                                }
                                catch (Exception ex)
                                {
                                    _logger.Error("KadiogluExecute 3 ", ex);
                                }
                                _logger.Information("Product prices " + urunID);

                                string urunAciklama = userNode.SelectNodes("UrunAciklama").Item(0) != null?userNode.SelectNodes("UrunAciklama").Item(0).InnerText : "";

                                string anaKategori = userNode.SelectNodes("AnaKategori").Item(0) != null?userNode.SelectNodes("AnaKategori").Item(0).InnerText : "";

                                if (!string.IsNullOrWhiteSpace(anaKategori))
                                {
                                    mainCategories = CreateCategory(anaKategori, 0);
                                    var productCategory = new ProductCategory();
                                    productCategory.CategoryId   = mainCategories.Id;
                                    productCategory.Product      = product;
                                    productCategory.DisplayOrder = 3;
                                    product.ProductCategories.Add(productCategory);
                                }

                                _logger.Information("Product ProductCategory 1 " + urunID);
                                string araKategori = userNode.SelectNodes("AraKategori").Item(0) != null?userNode.SelectNodes("AraKategori").Item(0).InnerText : "";

                                if (!string.IsNullOrWhiteSpace(araKategori))
                                {
                                    parentCategories = CreateCategory(araKategori, mainCategories != null ? mainCategories.Id : 1);
                                    var productCategory = new ProductCategory();
                                    productCategory.CategoryId   = parentCategories.Id;
                                    productCategory.Product      = product;
                                    productCategory.DisplayOrder = 3;
                                    product.ProductCategories.Add(productCategory);
                                }
                                _logger.Information("Product ProductCategory 2 " + urunID);

                                string altKategori = userNode.SelectNodes("AltKategori").Item(0) != null?userNode.SelectNodes("AltKategori").Item(0).InnerText : "";

                                if (!string.IsNullOrWhiteSpace(altKategori))
                                {
                                    childCategories = CreateCategory(altKategori, parentCategories != null ? parentCategories.Id : 1);
                                    var productCategory = new ProductCategory();
                                    productCategory.CategoryId   = childCategories.Id;
                                    productCategory.Product      = product;
                                    productCategory.DisplayOrder = 3;
                                    product.ProductCategories.Add(productCategory);
                                }
                                _logger.Information("ProductCategory 3" + urunID);

                                product.ProductTypeId          = 5;
                                product.ParentGroupedProductId = 0;
                                product.VisibleIndividually    = true;
                                product.ProductTemplateId      = 1;
                                product.VendorId                = 0;
                                product.ShowOnHomePage          = false;
                                product.AllowCustomerReviews    = true;
                                product.ApprovedRatingSum       = 0;
                                product.NotApprovedRatingSum    = 0;
                                product.ApprovedTotalReviews    = 1;
                                product.NotApprovedTotalReviews = 0;
                                product.SubjectToAcl            = false;
                                product.LimitedToStores         = false;
                                product.Sku                              = "";
                                product.IsGiftCard                       = false;
                                product.GiftCardTypeId                   = 0;
                                product.RequireOtherProducts             = false;
                                product.AutomaticallyAddRequiredProducts = false;
                                product.IsDownload                       = false;
                                product.DownloadId                       = 0;
                                product.UnlimitedDownloads               = false;
                                product.MaxNumberOfDownloads             = 0;
                                product.DownloadActivationTypeId         = 0;
                                product.HasSampleDownload                = false;
                                product.SampleDownloadId                 = 0;
                                product.HasUserAgreement                 = false;
                                product.IsRecurring                      = false;
                                product.RecurringCycleLength             = 0;
                                product.RecurringCyclePeriodId           = 0;
                                product.RecurringTotalCycles             = 0;
                                product.IsRental                         = false;
                                product.RentalPriceLength                = 0;
                                product.RentalPricePeriodId              = 0;
                                product.IsShipEnabled                    = true;
                                product.IsFreeShipping                   = false;
                                product.ShipSeparately                   = false;
                                product.AdditionalShippingCharge         = 0;
                                product.DeliveryDateId                   = 0;
                                product.IsTaxExempt                      = false;
                                product.IsTelecommunicationsOrBroadcastingOrElectronicServices = false;
                                product.ManageInventoryMethodId    = 1;
                                product.ProductAvailabilityRangeId = 0;
                                product.UseMultipleWarehouses      = false;
                                product.WarehouseId   = 0;
                                product.StockQuantity = userNode.SelectNodes("Stok").Item(0) != null?Convert.ToInt32(userNode.SelectNodes("Stok").Item(0).InnerText) : 0;

                                product.DisplayStockAvailability      = true;
                                product.DisplayStockQuantity          = true;
                                product.MinStockQuantity              = 10;
                                product.LowStockActivityId            = 1;
                                product.NotifyAdminForQuantityBelow   = 1;
                                product.BackorderModeId               = 0;
                                product.AllowBackInStockSubscriptions = false;
                                product.OrderMinimumQuantity          = 1;
                                product.OrderMaximumQuantity          = 100;
                                product.AllowAddingOnlyExistingAttributeCombinations = false;
                                product.NotReturnable         = false;
                                product.DisableBuyButton      = false;
                                product.DisableWishlistButton = false;
                                product.AvailableForPreOrder  = false;
                                product.CallForPrice          = false;
                                product.Price                       = prices;
                                product.OldPrice                    = 0;
                                product.ProductCost                 = 0;
                                product.CustomerEntersPrice         = false;
                                product.MinimumCustomerEnteredPrice = 0;
                                product.MaximumCustomerEnteredPrice = 0;
                                product.BasepriceEnabled            = false;
                                product.BasepriceAmount             = 0;
                                product.BasepriceUnitId             = 0;
                                product.BasepriceBaseAmount         = 0;
                                product.BasepriceBaseUnitId         = 0;
                                product.MarkAsNew                   = true;
                                product.MarkAsNewStartDateTimeUtc   = DateTime.Now;
                                product.MarkAsNewEndDateTimeUtc     = new DateTime(2020, 04, 20);
                                product.HasTierPrices               = false;
                                product.HasDiscountsApplied         = false;
                                product.Weight                      = 0;
                                product.Length                      = 0;
                                product.Width                       = 0;
                                product.Height                      = 0;
                                product.DisplayOrder                = 0;
                                product.Published                   = true;
                                product.Deleted                     = false;
                                product.CreatedOnUtc                = DateTime.Now;
                                product.UpdatedOnUtc                = DateTime.Now;
                                product.TaxCategoryId               = 2;

                                string urunAciklama2 = userNode.SelectNodes("UrunAciklama2").Item(0) != null?userNode.SelectNodes("UrunAciklama2").Item(0).InnerText : "";

                                string urunAciklama3 = userNode.SelectNodes("UrunAciklama3").Item(0) != null?userNode.SelectNodes("UrunAciklama3").Item(0).InnerText : "";

                                string urunAciklama4 = userNode.SelectNodes("UrunAciklama4").Item(0) != null?userNode.SelectNodes("UrunAciklama4").Item(0).InnerText : "";

                                product.MetaTitle        = urunAciklama;
                                product.MetaDescription  = urunAciklama ?? urunAciklama.Replace(" ", ",") + urunAciklama2 ?? "," + urunAciklama2.Replace(" ", ",") + urunAciklama3 ?? "," + urunAciklama3.Replace(" ", ",") + urunAciklama4 ?? "," + urunAciklama4.Replace(" ", ",");
                                product.MetaKeywords     = urunAciklama ?? urunAciklama.Replace(" ", ",") + urunAciklama4 ?? "," + urunAciklama4.Replace(" ", ",");
                                product.Name             = urunAciklama;
                                product.ShortDescription = urunAciklama2;
                                product.FullDescription  = urunAciklama + Environment.NewLine + urunAciklama2 + Environment.NewLine + urunAciklama3 + Environment.NewLine + urunAciklama4;

                                //string urunKodu = userNode.SelectNodes("UrunKodu").Count > 0 ? userNode.SelectNodes("UrunKodu").Item(0).InnerText : "";

                                //string ureticiKodu = userNode.SelectNodes("UreticiKodu").Item(0).InnerText;
                                //string gtipCode = userNode.SelectNodes("GtipCode").Item(0).InnerText;
                                //string durum = userNode.SelectNodes("Durum").Item(0).InnerText;

                                string marka = userNode.SelectNodes("Marka").Item(0) != null?userNode.SelectNodes("Marka").Item(0).InnerText : "";

                                if (!string.IsNullOrWhiteSpace(marka))
                                {
                                    var getManufacturer = _manufacturerService.GetAllManufacturers(marka);
                                    if (getManufacturer.TotalCount <= 0)
                                    {
                                        var manufacutrer = new Manufacturer();
                                        manufacutrer.Name = marka;
                                        manufacutrer.ManufacturerTemplateId = 1;
                                        manufacutrer.PageSize = 6;
                                        manufacutrer.AllowCustomersToSelectPageSize = true;
                                        manufacutrer.PageSizeOptions = "6,3,9";
                                        manufacutrer.SubjectToAcl    = false;
                                        manufacutrer.LimitedToStores = false;
                                        manufacutrer.Deleted         = false;
                                        manufacutrer.Published       = true;
                                        manufacutrer.DisplayOrder    = _manufacturerService.GetAllManufacturers().Count + 1;
                                        manufacutrer.CreatedOnUtc    = DateTime.Now;
                                        manufacutrer.UpdatedOnUtc    = DateTime.Now;
                                        _manufacturerService.InsertManufacturer(manufacutrer);

                                        _urlRecordService.InsertUrlRecord(new Core.Domain.Seo.UrlRecord()
                                        {
                                            EntityId   = manufacutrer.Id,
                                            EntityName = "Manufacturer",
                                            IsActive   = true,
                                            LanguageId = 0,
                                            Slug       = manufacutrer.Name.Replace("+", "-").Replace("ö", "o").Replace("ş", "s").Replace("ı", "i").Replace("ğ", "g").Replace("ç", "c").Replace("ü", "u").Replace(".", "").Replace(",", "").Replace("\"", "").Replace(",", "").Replace(" ", "-").Replace("---", "-").Replace("--", "-").ToLower()
                                        });
                                        product.ProductManufacturers.Add(new ProductManufacturer()
                                        {
                                            ManufacturerId = manufacutrer.Id, Product = product, IsFeaturedProduct = false, DisplayOrder = 1
                                        });
                                    }
                                    else
                                    {
                                        product.ProductManufacturers.Add(new ProductManufacturer()
                                        {
                                            ManufacturerId = getManufacturer.FirstOrDefault().Id, Product = product, IsFeaturedProduct = false, DisplayOrder = 1
                                        });
                                    }
                                }
                                _logger.Information("Manufacturer " + urunID);

                                string gorselKucuk = userNode.SelectNodes("GorselKucuk").Item(0) != null?userNode.SelectNodes("GorselKucuk").Item(0).InnerText : "";

                                string gorselBuyuk = userNode.SelectNodes("GorselBuyuk").Item(0) != null?userNode.SelectNodes("GorselBuyuk").Item(0).InnerText : "";

                                string gorselKucuk2 = userNode.SelectNodes("GorselKucuk2").Item(0) != null?userNode.SelectNodes("GorselKucuk2").Item(0).InnerText : "";

                                string gorselBuyuk2 = userNode.SelectNodes("GorselBuyuk2").Item(0) != null?userNode.SelectNodes("GorselBuyuk2").Item(0).InnerText : "";

                                if (!string.IsNullOrWhiteSpace(gorselBuyuk))
                                {
                                    InsertImage(gorselBuyuk, product.Name.Replace(" ", "").Split("\"").FirstOrDefault(), product, 1);
                                }
                                if (!string.IsNullOrWhiteSpace(gorselBuyuk2))
                                {
                                    InsertImage(gorselBuyuk2, product.Name.Replace(" ", "").Split("\"").FirstOrDefault(), product, 2);
                                }
                                if (!string.IsNullOrWhiteSpace(gorselKucuk))
                                {
                                    InsertImage(gorselKucuk, product.Name.Replace(" ", "").Split("\"").FirstOrDefault(), product, 3);
                                }
                                if (!string.IsNullOrWhiteSpace(gorselKucuk2))
                                {
                                    InsertImage(gorselKucuk2, product.Name.Replace(" ", "").Split("\"").FirstOrDefault(), product, 4);
                                }
                                _productService.InsertProduct(product);

                                _urlRecordService.InsertUrlRecord(new Core.Domain.Seo.UrlRecord()
                                {
                                    EntityId   = product.Id,
                                    EntityName = "Product",
                                    IsActive   = true,
                                    LanguageId = 0,
                                    Slug       = product.Name.Replace("+", "-").Replace("ö", "o").Replace("ş", "s").Replace("ı", "i").Replace("ğ", "g").Replace("ç", "c").Replace("ü", "u").Replace(".", "").Replace(",", "").Replace("\"", "").Replace(",", "").Replace(" ", "-").Replace("---", "-").Replace("--", "-").ToLower()
                                });
                                _logger.Information("KadiogluExecute Bilgi " + product.Name);
                            }
                            else
                            {
                                decimal prices = userNode.SelectNodes("Fiyat").Item(0) != null?Convert.ToDecimal(userNode.SelectNodes("Fiyat").Item(0).InnerText, new CultureInfo("tr-TR")) : 0;

                                string dovizTuru = userNode.SelectNodes("DovizTuru").Item(0) != null?userNode.SelectNodes("DovizTuru").Item(0).InnerText : "";

                                if (!string.IsNullOrWhiteSpace(dovizTuru) && dovizTuru != "USD")
                                {
                                    var getCurrrency = _currencyService.GetAllCurrencies(true);
                                    var getdoviz     = getCurrrency.Where(x => x.Name == dovizTuru).FirstOrDefault();
                                    prices = prices / getdoviz.Rate;
                                    anyProduct.ProductCost = prices;
                                    prices = prices + ((prices / 100) * 15);
                                }
                                else
                                {
                                    anyProduct.ProductCost = prices;
                                    prices = prices + ((prices / 100) * 15);
                                }
                                anyProduct.StockQuantity = userNode.SelectNodes("Stok").Item(0) != null?Convert.ToInt32(userNode.SelectNodes("Stok").Item(0).InnerText) : 0;

                                anyProduct.Price    = prices;
                                anyProduct.VendorId = vendor.Id;
                                _productService.UpdateProduct(anyProduct);
                                _logger.Information("KadiogluExecute Bilgi 2 " + anyProduct.Name);
                            }
                        }
                        catch (Exception ex)
                        {
                            _logger.Error("KadiogluExecute 1 ", ex);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                _logger.Error("KadiogluExecute", ex);
            }
        }