Ejemplo n.º 1
0
 public function index(Application $app, Request $request, $id = null)
 {
     $TargetOrder = null;
     $OriginOrder = null;
     if (is_null($id)) {
         // 空のエンティティを作成.
         $TargetOrder = $this->newOrder();
     } else {
         $TargetOrder = $app['eccube.repository.order']->find($id);
         if (is_null($TargetOrder)) {
             throw new NotFoundHttpException();
         }
     }
     // 編集前の受注情報を保持
     $OriginOrder = clone $TargetOrder;
     $OriginalOrderDetails = new ArrayCollection();
     foreach ($TargetOrder->getOrderDetails() as $OrderDetail) {
         $OriginalOrderDetails->add($OrderDetail);
     }
     $builder = $app['form.factory']->createBuilder('order', $TargetOrder);
     $form = $builder->getForm();
     if ('POST' === $request->getMethod()) {
         $form->handleRequest($request);
         // 入力情報にもとづいて再計算.
         $this->calculate($app, $TargetOrder);
         // 登録ボタン押下
         switch ($request->get('mode')) {
             case 'register':
                 if ($TargetOrder->getTotal() > $app['config']['max_total_fee']) {
                     $form['charge']->addError(new FormError('合計金額の上限を超えております。'));
                 } elseif ($form->isValid()) {
                     $BaseInfo = $app['eccube.repository.base_info']->get();
                     // お支払い方法の更新
                     $TargetOrder->setPaymentMethod($TargetOrder->getPayment()->getMethod());
                     // 配送業者・お届け時間の更新
                     $Shippings = $TargetOrder->getShippings();
                     foreach ($Shippings as $Shipping) {
                         $Shipping->setShippingDeliveryName($Shipping->getDelivery()->getName());
                         if (!is_null($Shipping->getDeliveryTime())) {
                             $Shipping->setShippingDeliveryTime($Shipping->getDeliveryTime()->getDeliveryTime());
                         } else {
                             $Shipping->setShippingDeliveryTime(null);
                         }
                     }
                     // 受注日/発送日/入金日の更新.
                     $this->updateDate($app, $TargetOrder, $OriginOrder);
                     // 受注明細で削除されているものをremove
                     foreach ($OriginalOrderDetails as $OrderDetail) {
                         if (false === $TargetOrder->getOrderDetails()->contains($OrderDetail)) {
                             $app['orm.em']->remove($OrderDetail);
                         }
                     }
                     if ($BaseInfo->getOptionMultipleShipping() == Constant::ENABLED) {
                         foreach ($TargetOrder->getOrderDetails() as $OrderDetail) {
                             /** @var $OrderDetail \Eccube\Entity\OrderDetail */
                             $OrderDetail->setOrder($TargetOrder);
                         }
                         /** @var \Eccube\Entity\Shipping $Shipping */
                         foreach ($Shippings as $Shipping) {
                             $shipmentItems = $Shipping->getShipmentItems();
                             /** @var \Eccube\Entity\ShipmentItem $ShipmentItem */
                             foreach ($shipmentItems as $ShipmentItem) {
                                 $ShipmentItem->setOrder($TargetOrder);
                                 $ShipmentItem->setShipping($Shipping);
                                 $app['orm.em']->persist($ShipmentItem);
                             }
                             $Shipping->setOrder($TargetOrder);
                             $app['orm.em']->persist($Shipping);
                         }
                     } else {
                         $NewShipmentItems = new ArrayCollection();
                         foreach ($TargetOrder->getOrderDetails() as $OrderDetail) {
                             /** @var $OrderDetail \Eccube\Entity\OrderDetail */
                             $OrderDetail->setOrder($TargetOrder);
                             $NewShipmentItem = new ShipmentItem();
                             $NewShipmentItem->setProduct($OrderDetail->getProduct())->setProductClass($OrderDetail->getProductClass())->setProductName($OrderDetail->getProduct()->getName())->setProductCode($OrderDetail->getProductClass()->getCode())->setClassCategoryName1($OrderDetail->getClassCategoryName1())->setClassCategoryName2($OrderDetail->getClassCategoryName2())->setClassName1($OrderDetail->getClassName1())->setClassName2($OrderDetail->getClassName2())->setPrice($OrderDetail->getPrice())->setQuantity($OrderDetail->getQuantity())->setOrder($TargetOrder);
                             $NewShipmentItems[] = $NewShipmentItem;
                         }
                         // 配送商品の更新. delete/insert.
                         $Shippings = $TargetOrder->getShippings();
                         foreach ($Shippings as $Shipping) {
                             $ShipmentItems = $Shipping->getShipmentItems();
                             foreach ($ShipmentItems as $ShipmentItem) {
                                 $app['orm.em']->remove($ShipmentItem);
                             }
                             $ShipmentItems->clear();
                             foreach ($NewShipmentItems as $NewShipmentItem) {
                                 $NewShipmentItem->setShipping($Shipping);
                                 $ShipmentItems->add($NewShipmentItem);
                             }
                         }
                     }
                     $app['orm.em']->persist($TargetOrder);
                     $app['orm.em']->flush();
                     $Customer = $TargetOrder->getCustomer();
                     if ($Customer) {
                         // 会員の場合、購入回数、購入金額などを更新
                         $app['eccube.repository.customer']->updateBuyData($app, $Customer, $TargetOrder->getOrderStatus()->getId());
                     }
                     $app->addSuccess('admin.order.save.complete', 'admin');
                     return $app->redirect($app->url('admin_order_edit', array('id' => $TargetOrder->getId())));
                 }
                 break;
             case 'add_delivery':
                 // お届け先情報の新規追加
                 $form = $builder->getForm();
                 $Shipping = new \Eccube\Entity\Shipping();
                 $Shipping->setDelFlg(Constant::DISABLED);
                 $TargetOrder->addShipping($Shipping);
                 $Shipping->setOrder($TargetOrder);
                 $form->setData($TargetOrder);
                 break;
             default:
                 break;
         }
     }
     // 会員検索フォーム
     $searchCustomerModalForm = $app['form.factory']->createBuilder('admin_search_customer')->getForm();
     // 商品検索フォーム
     $searchProductModalForm = $app['form.factory']->createBuilder('admin_search_product')->getForm();
     // 配送業者のお届け時間
     $times = array();
     $deliveries = $app['eccube.repository.delivery']->findAll();
     foreach ($deliveries as $Delivery) {
         $deliveryTiems = $Delivery->getDeliveryTimes();
         foreach ($deliveryTiems as $DeliveryTime) {
             $times[$Delivery->getId()][$DeliveryTime->getId()] = $DeliveryTime->getDeliveryTime();
         }
     }
     return $app->render('Order/edit.twig', array('form' => $form->createView(), 'searchCustomerModalForm' => $searchCustomerModalForm->createView(), 'searchProductModalForm' => $searchProductModalForm->createView(), 'Order' => $TargetOrder, 'id' => $id, 'shippingDeliveryTimes' => $app['serializer']->serialize($times, 'json')));
 }
Ejemplo n.º 2
0
 public function index(Application $app, Request $request, $id = null)
 {
     $TargetOrder = null;
     $OriginOrder = null;
     if (is_null($id)) {
         // 空のエンティティを作成.
         $TargetOrder = $this->newOrder();
     } else {
         $TargetOrder = $app['eccube.repository.order']->find($id);
         if (is_null($TargetOrder)) {
             throw new NotFoundHttpException();
         }
     }
     // 編集前の受注情報を保持
     $OriginOrder = clone $TargetOrder;
     $OriginalOrderDetails = new ArrayCollection();
     foreach ($TargetOrder->getOrderDetails() as $OrderDetail) {
         $OriginalOrderDetails->add($OrderDetail);
     }
     $form = $app['form.factory']->createBuilder('order', $TargetOrder)->getForm();
     if ('POST' === $request->getMethod()) {
         $form->handleRequest($request);
         // 入力情報にもとづいて再計算.
         $this->calculate($app, $TargetOrder);
         if ($form->isValid()) {
             if ('register' === $request->get('mode')) {
                 // 受注日/発送日/入金日の更新.
                 $this->updateDate($TargetOrder, $OriginOrder);
                 // 受注明細で削除されているものをremove
                 foreach ($OriginalOrderDetails as $OrderDetail) {
                     if (false === $TargetOrder->getOrderDetails()->contains($OrderDetail)) {
                         $app['orm.em']->remove($OrderDetail);
                     }
                 }
                 $NewShipimentItems = new ArrayCollection();
                 foreach ($TargetOrder->getOrderDetails() as $OrderDetail) {
                     /** @var $OrderDetail \Eccube\Entity\OrderDetail */
                     $OrderDetail->setOrder($TargetOrder);
                     $NewShipmentItem = new ShipmentItem();
                     $NewShipmentItem->setProduct($OrderDetail->getProduct())->setProductClass($OrderDetail->getProductClass())->setProductName($OrderDetail->getProduct()->getName())->setProductCode($OrderDetail->getProductClass()->getCode())->setClassCategoryName1($OrderDetail->getClassCategoryName1())->setClassCategoryName2($OrderDetail->getClassCategoryName2())->setClassName1($OrderDetail->getClassName1())->setClassName2($OrderDetail->getClassName2())->setPrice($OrderDetail->getPrice())->setQuantity($OrderDetail->getQuantity())->setOrder($TargetOrder);
                     $NewShipimentItems[] = $NewShipmentItem;
                 }
                 // 配送商品の更新. delete/insert.
                 $Shippings = $TargetOrder->getShippings();
                 foreach ($Shippings as $Shipping) {
                     $ShipimentItems = $Shipping->getShipmentItems();
                     foreach ($ShipimentItems as $ShipmentItem) {
                         $app['orm.em']->remove($ShipmentItem);
                     }
                     $ShipimentItems->clear();
                     foreach ($NewShipimentItems as $NewShipimentItem) {
                         $NewShipimentItem->setShipping($Shipping);
                         $ShipimentItems->add($NewShipimentItem);
                     }
                 }
                 $app['orm.em']->persist($TargetOrder);
                 $app['orm.em']->flush();
                 $app->addSuccess('admin.order.save.complete', 'admin');
                 return $app->redirect($app->url('admin_order_edit', array('id' => $TargetOrder->getId())));
             }
         }
     }
     // 会員検索フォーム
     $searchCustomerModalForm = $app['form.factory']->createBuilder('admin_search_customer')->getForm();
     // 商品検索フォーム
     $searchProductModalForm = $app['form.factory']->createBuilder('admin_search_product')->getForm();
     return $app->render('Order/edit.twig', array('form' => $form->createView(), 'searchCustomerModalForm' => $searchCustomerModalForm->createView(), 'searchProductModalForm' => $searchProductModalForm->createView(), 'Order' => $TargetOrder, 'id' => $id));
 }