protected function createRandomProduct(ObjectManager $manager)
{
$faker = $this->getFakerGenerator();
$sentence = $faker->unique()->sentence(3);
$name = substr($sentence, 0, strlen($sentence) - 1);
$shortDescription = $faker->text(100);
$description = $faker->text(1000);
$sku = $this->getFakerGenerator()->creditCardNumber();
$shop = $this->getReference('shop');
$currency = $this->randomizeSamples('currency', LoadCurrencyData::$samples);
$producer = $this->randomizeSamples('producer', LoadProducerData::$samples);
$availability = $this->randomizeSamples('availability', LoadAvailabilityData::$samples);
$categories = $this->randomizeSamples('category', $s = LoadCategoryData::$samples, rand(2, 4));
$statuses = $this->randomizeSamples('product_status', LoadProductStatusData::$samples, rand(2, 3));
$tax = $this->randomizeSamples('tax', LoadTaxData::$samples);
$unit = $this->randomizeSamples('unit', LoadUnitData::$samples);
$dimension = new Dimension();
$dimension->setDepth(rand(10, 100));
$dimension->setHeight(rand(10, 100));
$dimension->setWidth(rand(10, 100));
$buyPrice = new Price();
$buyPrice->setGrossAmount(rand(50, 80));
$buyPrice->setCurrency($currency->getCode());
$sellPrice = new DiscountablePrice();
$sellPrice->setGrossAmount($price = rand(100, 200));
$sellPrice->setCurrency($currency->getCode());
foreach ($statuses as $status) {
if ($status->translate()->getName() === 'Promotions') {
$sellPrice->setDiscountedGrossAmount($price * (rand(80, 95) / 100));
$sellPrice->setValidFrom(new \DateTime());
$sellPrice->setValidTo((new \DateTime())->modify('+30 days'));
}
}
$product = new Product();
$product->setSKU($sku);
$product->setHierarchy(rand(0, 10));
$product->setEnabled(true);
$product->setAvailability($availability);
$product->setBuyPrice($buyPrice);
$product->setBuyPriceTax($tax);
$product->setSellPrice($sellPrice);
$product->setSellPriceTax($tax);
$product->setCategories($categories);
$product->addShop($shop);
$product->setStatuses($statuses);
$product->translate('en')->setName($name);
$product->translate('en')->setSlug(Sluggable::makeSlug($name));
$product->translate('en')->setShortDescription($shortDescription);
$product->translate('en')->setDescription($description);
$product->mergeNewTranslations();
$product->setProductPhotos($this->getPhotos($product, $manager));
$product->setProducer($producer);
$product->setStock(rand(0, 1000));
$product->setUnit($unit);
$product->setDimension($dimension);
$product->setTrackStock(true);
$product->setPackageSize(1);
$product->setWeight(rand(0, 5));
$manager->persist($product);
}