/** * {@inheritdoc} */ protected function addItem(Product $product, $entity, array $itemData = []) { if (!$entity instanceof RFPRequest) { return; } $requestProductItem = new RequestProductItem(); $requestProduct = new RequestProduct(); $requestProduct->setProduct($product)->addRequestProductItem($requestProductItem); if (array_key_exists(ProductDataStorage::PRODUCT_QUANTITY_KEY, $itemData)) { $requestProductItem->setQuantity($itemData[ProductDataStorage::PRODUCT_QUANTITY_KEY]); } $this->fillEntityData($requestProductItem, $itemData); if (!$requestProductItem->getProductUnit()) { /** @var ProductUnitPrecision $unitPrecision */ $unitPrecision = $product->getUnitPrecisions()->first(); if (!$unitPrecision) { return; } /** @var ProductUnit $unit */ $unit = $unitPrecision->getUnit(); if (!$unit) { return; } $requestProductItem->setProductUnit($unit); } if ($requestProductItem->getProductUnit()) { $entity->addRequestProduct($requestProduct); } }
/** * @depends testProperties */ public function testAddRequestProductItem() { $requestProduct = new RequestProduct(); $requestProductItem = new RequestProductItem(); $this->assertNull($requestProductItem->getRequestProduct()); $requestProduct->addRequestProductItem($requestProductItem); $this->assertEquals($requestProduct, $requestProductItem->getRequestProduct()); }
/** * @param RequestProduct $inputData * @param array $expectedData * * @dataProvider preSetDataProvider */ public function testPreSetData(RequestProduct $inputData = null, array $expectedData = []) { $productSku = $inputData ? $inputData->getProductSku() : ''; $placeholder = $expectedData['configs']['placeholder']; $this->translator->expects($placeholder ? $this->once() : $this->never())->method('trans')->with($placeholder, ['{title}' => $productSku])->will($this->returnValue($placeholder)); $form = $this->factory->create($this->formType); $this->formType->preSetData(new FormEvent($form, $inputData)); $this->assertTrue($form->has('product')); $config = $form->get('product')->getConfig(); $this->assertEquals(ProductSelectType::NAME, $config->getType()->getName()); $options = $form->get('product')->getConfig()->getOptions(); foreach ($expectedData as $key => $value) { $this->assertEquals($value, $options[$key], $key); } }
/** * "Success" form handler * * @param ShoppingList $entity * @return bool */ protected function onSuccess(ShoppingList $entity) { $rfpRequest = new RFPRequest(); $rfpRequest->setFirstName($this->user->getFirstName())->setLastName($this->user->getLastName())->setEmail($this->user->getEmail())->setPhone('')->setRole('')->setBody('')->setCompany($this->user->getOrganization() ? $this->user->getOrganization()->getName() : '')->setAccountUser($this->user)->setAccount($this->user->getAccount())->setStatus($this->requestStatus); foreach ($entity->getLineItems() as $shoppingListLineItem) { $requestProduct = new RequestProduct(); $requestProduct->setProduct($shoppingListLineItem->getProduct()); $requestProductItem = new RequestProductItem(); $requestProductItem->setQuantity($shoppingListLineItem->getQuantity())->setProductUnit($shoppingListLineItem->getUnit()); $requestProduct->addRequestProductItem($requestProductItem); $rfpRequest->addRequestProduct($requestProduct); } try { $this->manager->persist($rfpRequest); $this->manager->flush(); $this->rfpRequest = $rfpRequest; } catch (DBALException $e) { $this->exception = $e; return false; } return true; }
/** * @param Request $request * @param ObjectManager $manager */ protected function processRequestProducts(Request $request, ObjectManager $manager) { $products = $this->getProducts($manager); $currencies = $this->getCurrencies(); for ($i = 0; $i < rand(1, 10); $i++) { $product = $products[rand(0, count($products) - 1)]; $unitPrecisions = $product->getUnitPrecisions(); if (!count($unitPrecisions)) { continue; } $requestProduct = new RequestProduct(); $requestProduct->setProduct($product); $requestProduct->setComment(sprintf('Notes %s', $i)); for ($j = 0; $j < rand(1, 10); $j++) { $productUnit = $unitPrecisions[rand(0, count($unitPrecisions) - 1)]->getUnit(); $currency = $currencies[rand(0, count($currencies) - 1)]; $requestProductItem = new RequestProductItem(); $requestProductItem->setPrice(Price::create(rand(1, 100), $currency))->setQuantity(rand(1, 100))->setProductUnit($productUnit); $requestProduct->addRequestProductItem($requestProductItem); } $request->addRequestProduct($requestProduct); } }
/** * @param QuoteProduct $quoteProduct * @param RFPRequestProduct $requestProduct */ protected function processRequestProductItems(QuoteProduct $quoteProduct, RFPRequestProduct $requestProduct) { foreach ($requestProduct->getRequestProductItems() as $requestProductItem) { $quoteProductRequest = new QuoteProductRequest(); $quoteProductRequest->setPrice($requestProductItem->getPrice())->setQuantity($requestProductItem->getQuantity())->setProductUnit($requestProductItem->getProductUnit()); $quoteProduct->addQuoteProductRequest($quoteProductRequest); } }
/** * @param int $productId * @param string $comment * @param RequestProductItem[] $items * @return RequestProduct */ protected function getRequestProduct($productId = null, $comment = null, array $items = []) { /* @var $product Product */ $product = null; if ($productId) { $product = $this->getEntity('OroB2B\\Bundle\\ProductBundle\\Entity\\Product', $productId); foreach ($this->getProductUnitPrecisions() as $precision) { $product->addUnitPrecision($precision); } } $requestProduct = new RequestProduct(); $requestProduct->setRequest($this->getEntity('OroB2B\\Bundle\\RFPBundle\\Entity\\Request', $productId))->setProduct($product)->setComment($comment); foreach ($items as $item) { $requestProduct->addRequestProductItem($item); } return $requestProduct; }