/**
  * Create line item form
  *
  * @Route(
  *      "/create/{shoppingListId}",
  *      name="orob2b_shopping_list_line_item_create_widget",
  *      requirements={"shoppingListId"="\d+"}
  * )
  * @Template("OroB2BShoppingListBundle:LineItem:widget/update.html.twig")
  * @Acl(
  *      id="orob2b_shopping_list_line_item_create",
  *      type="entity",
  *      class="OroB2BShoppingListBundle:LineItem",
  *      permission="CREATE"
  * )
  * @ParamConverter("shoppingList", class="OroB2BShoppingListBundle:ShoppingList", options={"id" = "shoppingListId"})
  *
  * @param ShoppingList $shoppingList
  *
  * @return array|RedirectResponse
  */
 public function createAction(ShoppingList $shoppingList)
 {
     $lineItem = new LineItem();
     $lineItem->setShoppingList($shoppingList);
     $request = $this->getRequest();
     $form = $this->createForm(LineItemType::NAME, $lineItem);
     $handler = new LineItemHandler($form, $request, $this->getDoctrine());
     $result = $this->get('oro_form.model.update_handler')->handleUpdate($lineItem, $form, null, null, null, $handler);
     if ($request->get('_wid')) {
         $result = $handler->updateSavedId($result);
     }
     return $result;
 }
 /**
  * @param ObjectManager $manager
  * @param ShoppingList $shoppingList
  * @param ProductUnit $unit
  * @param Product $product
  * @param string $referenceName
  */
 protected function createLineItem(ObjectManager $manager, ShoppingList $shoppingList, ProductUnit $unit, Product $product, $referenceName)
 {
     $item = new LineItem();
     $item->setNotes('Test Notes');
     $item->setAccountUser($shoppingList->getAccountUser());
     $item->setOrganization($shoppingList->getOrganization());
     $item->setShoppingList($shoppingList);
     $item->setUnit($unit);
     $item->setProduct($product);
     $item->setQuantity(23.15);
     $manager->persist($item);
     $this->addReference($referenceName, $item);
 }
 /**
  * @param LineItem          $lineItem
  * @param ShoppingList|null $shoppingList
  * @param bool|true         $flush
  */
 public function addLineItem(LineItem $lineItem, ShoppingList $shoppingList, $flush = true)
 {
     $em = $this->managerRegistry->getManagerForClass('OroB2BShoppingListBundle:LineItem');
     $lineItem->setShoppingList($shoppingList);
     /** @var LineItemRepository $repository */
     $repository = $em->getRepository('OroB2BShoppingListBundle:LineItem');
     $duplicate = $repository->findDuplicate($lineItem);
     if ($duplicate instanceof LineItem && $shoppingList->getId()) {
         $duplicate->setQuantity($duplicate->getQuantity() + $lineItem->getQuantity());
     } else {
         $shoppingList->addLineItem($lineItem);
         $em->persist($lineItem);
     }
     if ($flush) {
         $em->flush();
     }
 }
Ejemplo n.º 4
0
 /**
  * @return array
  */
 public function submitDataProvider()
 {
     $shoppingList = new ShoppingList();
     /** @var Product $expectedProduct */
     $expectedProduct = $this->getProductEntityWithPrecision(1, 'kg', 3);
     $defaultLineItem = new LineItem();
     $defaultLineItem->setShoppingList($shoppingList);
     $expectedLineItem = clone $defaultLineItem;
     $expectedLineItem->setProduct($expectedProduct)->setQuantity('10')->setUnit($expectedProduct->getUnitPrecision('kg')->getUnit())->setNotes('my note');
     $existingLineItem = $this->getEntity('OroB2B\\Bundle\\ShoppingListBundle\\Entity\\LineItem', 2);
     $existingLineItem->setShoppingList($shoppingList)->setProduct($expectedProduct)->setQuantity(5)->setUnit($expectedProduct->getUnitPrecision('kg')->getUnit())->setNotes('my note2');
     $expectedLineItem2 = clone $existingLineItem;
     $expectedLineItem2->setQuantity(15.112)->setUnit($expectedProduct->getUnitPrecision('kg')->getUnit())->setNotes('note1');
     $expectedLineItem3 = clone $existingLineItem;
     $expectedLineItem3->setQuantity(15.112)->setUnit($expectedProduct->getUnitPrecision('kg')->getUnit())->setNotes(null);
     return ['new line item' => ['defaultData' => $defaultLineItem, 'submittedData' => ['product' => 1, 'quantity' => 10, 'unit' => 'kg', 'notes' => 'my note'], 'expectedData' => $expectedLineItem, 'isExisting' => false], 'existing line item' => ['defaultData' => $existingLineItem, 'submittedData' => ['product' => 2, 'quantity' => 15.1119, 'unit' => 'kg', 'notes' => 'note1'], 'expectedData' => $expectedLineItem2, 'isExisting' => true], 'missing product' => ['defaultData' => $existingLineItem, 'submittedData' => ['unit' => 'kg', 'quantity' => 15.1119], 'expectedData' => $expectedLineItem3, 'isExisting' => true]];
 }
 /**
  * @return array
  */
 public function submitDataProvider()
 {
     $product = $this->getProductEntityWithPrecision(1, 'kg', 3);
     $expectedShoppingList = $this->getShoppingList(1, 'Shopping List 1');
     $defaultLineItem = new LineItem();
     $defaultLineItem->setProduct($product);
     $defaultLineItem->setShoppingList($expectedShoppingList);
     $expectedLineItem = clone $defaultLineItem;
     $expectedLineItem->setQuantity(15.112)->setUnit($product->getUnitPrecision('kg')->getUnit());
     return ['New line item with existing shopping list' => ['defaultData' => $defaultLineItem, 'submittedData' => ['quantity' => 15.1119, 'unit' => 'kg'], 'expectedData' => $expectedLineItem]];
 }