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'))); }
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)); }