/**
  * {@inheritdoc}
  */
 public function handle(MassActionHandlerArgs $args)
 {
     $argsParser = new ArgsParser($args);
     $shoppingList = $this->shoppingListLineItemHandler->getShoppingList($argsParser->getShoppingListId());
     if (!$shoppingList) {
         return $this->generateResponse($args);
     }
     try {
         $addedCnt = $this->shoppingListLineItemHandler->createForShoppingList($shoppingList, $argsParser->getProductIds());
         return $this->generateResponse($args, $addedCnt, $shoppingList->getId());
     } catch (AccessDeniedException $e) {
         return $this->generateResponse($args);
     }
 }
 /** {@inheritdoc} */
 public function process(array $data, Request $request)
 {
     if (empty($data[ProductDataStorage::ENTITY_ITEMS_DATA_KEY]) || !is_array($data[ProductDataStorage::ENTITY_ITEMS_DATA_KEY])) {
         return;
     }
     $data = $data[ProductDataStorage::ENTITY_ITEMS_DATA_KEY];
     $shoppingListId = (int) $request->get(sprintf('%s[%s]', QuickAddType::NAME, QuickAddType::ADDITIONAL_FIELD_NAME), null, true);
     $shoppingList = $this->shoppingListLineItemHandler->getShoppingList($shoppingListId);
     $productSkus = ArrayUtils::arrayColumn($data, 'productSku');
     $productIds = $this->getProductRepository()->getProductsIdsBySku($productSkus);
     $productSkuQuantities = array_combine($productSkus, ArrayUtils::arrayColumn($data, 'productQuantity'));
     $productIdsQuantities = array_combine($productIds, $productSkuQuantities);
     /** @var Session $session */
     $session = $request->getSession();
     $flashBag = $session->getFlashBag();
     try {
         $entitiesCount = $this->shoppingListLineItemHandler->createForShoppingList($shoppingList, array_values($productIds), $productIdsQuantities);
         $flashBag->add('success', $this->messageGenerator->getSuccessMessage($shoppingListId, $entitiesCount));
     } catch (AccessDeniedException $e) {
         $flashBag->add('error', $this->messageGenerator->getFailedMessage());
     }
 }
 /**
  * @param array $productIds
  * @param array $productQuantities
  * @param array $expectedLineItems
  *
  * @dataProvider itemDataProvider
  */
 public function testCreateForShoppingList(array $productIds = [], array $productQuantities = [], array $expectedLineItems = [])
 {
     /** @var \PHPUnit_Framework_MockObject_MockObject|ShoppingList $shoppingList */
     $shoppingList = $this->getMock('OroB2B\\Bundle\\ShoppingListBundle\\Entity\\ShoppingList');
     $shoppingList->expects($this->any())->method('getId')->willReturn(1);
     $accountUser = new AccountUser();
     $shoppingList->expects($this->any())->method('getAccountUser')->willReturn($accountUser);
     $this->securityFacade->expects($this->any())->method('hasLoggedUser')->willReturn(true);
     $this->securityFacade->expects($this->any())->method('isGranted')->willReturn(true);
     $this->manager->expects($this->once())->method('bulkAddLineItems')->with($this->callback(function (array $lineItems) use($expectedLineItems, $accountUser) {
         /** @var LineItem $lineItem */
         foreach ($lineItems as $key => $lineItem) {
             /** @var LineItem $expectedLineItem */
             $expectedLineItem = $expectedLineItems[$key];
             $this->assertEquals($expectedLineItem->getQuantity(), $lineItem->getQuantity());
             $this->assertEquals($accountUser, $lineItem->getAccountUser());
             $this->assertInstanceOf('OroB2B\\Bundle\\ProductBundle\\Entity\\Product', $lineItem->getProduct());
             $this->assertInstanceOf('OroB2B\\Bundle\\ProductBundle\\Entity\\ProductUnit', $lineItem->getUnit());
         }
         return true;
     }), $shoppingList, $this->isType('integer'));
     $this->handler->createForShoppingList($shoppingList, $productIds, $productQuantities);
 }