Ejemplo n.º 1
0
 /**
  * Handles order updates and creation.
  *
  * @param Request $request
  * @param Order   $order
  *
  * @return array
  */
 protected function update(Request $request, Order $order = null)
 {
     $formName = $order ? 'marello_order_update' : 'marello_order_order';
     if ($order === null) {
         $order = new Order();
     }
     /*
      * Copy of original order items collection to be used as a reference to find detached order items.
      */
     $originalItems = new ArrayCollection($order->getItems()->toArray());
     $form = $this->createForm($formName, $order);
     $form->handleRequest($request);
     if ($form->isSubmitted() && $form->isValid()) {
         $manager = $this->getDoctrine()->getManager();
         /*
          * Remove detached order items.
          */
         $originalItems->filter(function (OrderItem $originalItem) use($order) {
             return false === $order->getItems()->contains($originalItem);
         })->map(function (OrderItem $orderItem) use($manager) {
             $manager->remove($orderItem);
         });
         $manager->persist($order);
         $manager->flush();
         return $this->get('oro_ui.router')->redirectAfterSave(['route' => 'marello_order_order_update', 'parameters' => ['id' => $order->getId()]], ['route' => 'marello_order_order_view', 'parameters' => ['id' => $order->getId()]], $order);
     }
     return ['entity' => $order, 'form' => $form->createView()];
 }
Ejemplo n.º 2
0
 /**
  * create orders and related entities
  *
  * @param array $order
  * @param int   $orderNo
  *
  * @return Order
  */
 protected function createOrder(array $order, $orderNo)
 {
     $billing = new Address();
     $billing->setNamePrefix($order['title']);
     $billing->setFirstName($order['firstname']);
     $billing->setLastName($order['lastname']);
     $billing->setStreet($order['street_address']);
     $billing->setPostalCode($order['zipcode']);
     $billing->setCity($order['city']);
     $billing->setCountry($this->getRepository('OroAddressBundle:Country')->find($order['country']));
     $billing->setRegion($this->getRepository('OroAddressBundle:Region')->findOneBy(['combinedCode' => $order['country'] . '-' . $order['state']]));
     $billing->setPhone($order['telephone_number']);
     $billing->setEmail($order['email']);
     $shipping = clone $billing;
     $orderEntity = new Order($billing, $shipping);
     $channel = $this->getReference('marello_sales_channel_' . $order['channel']);
     $orderEntity->setSalesChannel($channel);
     if ($order['order_ref'] !== 'NULL') {
         $orderEntity->setOrderReference($order['order_ref']);
     }
     $orderEntity->setSubtotal(0)->setTotalTax(0)->setGrandTotal(0)->setOrderNumber(sprintf('%09d', $orderNo + 1));
     $this->manager->persist($orderEntity);
     return $orderEntity;
 }