public function setUp() { parent::setUp(); $faker = $this->getFaker(); $this->Member = $this->app['eccube.repository.member']->find(2); $this->Customer = $this->createCustomer(); $this->Order = $this->createOrder($this->Customer); $this->Product = $this->createProduct(); $ProductClasses = $this->Product->getProductClasses(); $this->ProductClass = $ProductClasses[0]; $quantity = 3; $TaxRule = $this->app['eccube.repository.tax_rule']->getByRule(); // デフォルト課税規則 $OrderDetail = new OrderDetail(); $OrderDetail->setProduct($this->Product)->setProductClass($this->ProductClass)->setProductName($this->Product->getName())->setProductCode($this->ProductClass->getCode())->setPrice($this->ProductClass->getPrice02())->setQuantity($quantity)->setTaxRule($TaxRule->getCalcRule()->getId())->setTaxRate($TaxRule->getTaxRate()); $this->app['orm.em']->persist($OrderDetail); $OrderDetail->setOrder($this->Order); $this->Order->addOrderDetail($OrderDetail); // 1個ずつ別のお届け先に届ける for ($i = 0; $i < $quantity; $i++) { $Shipping = new Shipping(); $Shipping->copyProperties($this->Customer); $Shipping->setName01($faker->lastName)->setName02($faker->firstName)->setKana01('セイ'); $this->Order->addShipping($Shipping); $Shipping->setOrder($this->Order); $this->app['orm.em']->persist($Shipping); $ShipmentItem = new ShipmentItem(); $ShipmentItem->setShipping($Shipping)->setOrder($this->Order)->setProductClass($this->ProductClass)->setProduct($this->Product)->setProductName($this->Product->getName())->setProductCode($this->ProductClass->getCode())->setPrice($this->ProductClass->getPrice02())->setQuantity(1); $this->app['orm.em']->persist($ShipmentItem); } $subTotal = 0; foreach ($this->Order->getOrderDetails() as $OrderDetail) { $subTotal += $OrderDetail->getPriceIncTax() * $OrderDetail->getQuantity(); } $this->Order->setSubTotal($subTotal); $this->Order->setTotal($subTotal); $this->Order->setPaymentTotal($subTotal); $this->app['orm.em']->flush(); }
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'))); }
/** * 配送商品情報を作成 * * @param Order $Order * @param Product $Product * @param ProductClass $ProductClass * @param $quantity * @return \Eccube\Entity\ShipmentItem */ public function getNewShipmentItem(Order $Order, Product $Product, ProductClass $ProductClass, $quantity) { $ShipmentItem = new ShipmentItem(); $shippings = $Order->getShippings(); // 選択された商品がどのお届け先情報と関連するかチェック $Shipping = null; foreach ($shippings as $s) { if ($s->getDelivery()->getProductType()->getId() == $ProductClass->getProductType()->getId()) { // 商品種別が同一のお届け先情報と関連させる $Shipping = $s; break; } } if (is_null($Shipping)) { // お届け先情報と関連していない場合、エラー throw new CartException('shopping.delivery.not.producttype'); } // 商品ごとの配送料合計 $productDeliveryFeeTotal = 0; if (!is_null($this->BaseInfo->getOptionProductDeliveryFee())) { $productDeliveryFeeTotal = $ProductClass->getDeliveryFee() * $quantity; } $Shipping->setShippingDeliveryFee($Shipping->getShippingDeliveryFee() + $productDeliveryFeeTotal); $ShipmentItem->setShipping($Shipping)->setOrder($Order)->setProductClass($ProductClass)->setProduct($Product)->setProductName($Product->getName())->setProductCode($ProductClass->getCode())->setPrice($ProductClass->getPrice02())->setQuantity($quantity); $ClassCategory1 = $ProductClass->getClassCategory1(); if (!is_null($ClassCategory1)) { $ShipmentItem->setClasscategoryName1($ClassCategory1->getName()); $ShipmentItem->setClassName1($ClassCategory1->getClassName()->getName()); } $ClassCategory2 = $ProductClass->getClassCategory2(); if (!is_null($ClassCategory2)) { $ShipmentItem->setClasscategoryName2($ClassCategory2->getName()); $ShipmentItem->setClassName2($ClassCategory2->getClassName()->getName()); } $Shipping->addShipmentItem($ShipmentItem); $this->em->persist($ShipmentItem); return $ShipmentItem; }
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)); }
/** * 複数配送処理 */ public function shippingMultiple(Application $app, Request $request) { $cartService = $app['eccube.service.cart']; // カートチェック if (!$cartService->isLocked()) { // カートが存在しない、カートがロックされていない時はエラー return $app->redirect($app->url('cart')); } // カートチェック if (count($cartService->getCart()->getCartItems()) <= 0) { // カートが存在しない時はエラー return $app->redirect($app->url('cart')); } $Order = $app['eccube.service.shopping']->getOrder($app['config']['order_processing']); if (!$Order) { $app->addError('front.shopping.order.error'); return $app->redirect($app->url('shopping_error')); } // 複数配送時は商品毎でお届け先を設定する為、商品をまとめた数量を設定 $compItemQuantities = array(); foreach ($Order->getShippings() as $Shipping) { foreach ($Shipping->getShipmentItems() as $ShipmentItem) { $itemId = $ShipmentItem->getProductClass()->getId(); $quantity = $ShipmentItem->getQuantity(); if (array_key_exists($itemId, $compItemQuantities)) { $compItemQuantities[$itemId] = $compItemQuantities[$itemId] + $quantity; } else { $compItemQuantities[$itemId] = $quantity; } } } // 商品に紐づく商品情報を取得 $shipmentItems = array(); $productClassIds = array(); foreach ($Order->getShippings() as $Shipping) { foreach ($Shipping->getShipmentItems() as $ShipmentItem) { if (!in_array($ShipmentItem->getProductClass()->getId(), $productClassIds)) { $shipmentItems[] = $ShipmentItem; } $productClassIds[] = $ShipmentItem->getProductClass()->getId(); } } $form = $app->form()->getForm(); $form->add('shipping_multiple', 'collection', array('type' => 'shipping_multiple', 'data' => $shipmentItems, 'allow_add' => true, 'allow_delete' => true)); $form->handleRequest($request); $errors = array(); if ($form->isSubmitted() && $form->isValid()) { $data = $form['shipping_multiple']; // 数量が超えていないか、同一でないとエラー $itemQuantities = array(); foreach ($data as $mulitples) { /** @var \Eccube\Entity\ShipmentItem $multipleItem */ $multipleItem = $mulitples->getData(); foreach ($mulitples as $items) { foreach ($items as $item) { $quantity = $item['quantity']->getData(); $itemId = $multipleItem->getProductClass()->getId(); if (array_key_exists($itemId, $itemQuantities)) { $itemQuantities[$itemId] = $itemQuantities[$itemId] + $quantity; } else { $itemQuantities[$itemId] = $quantity; } } } } foreach ($compItemQuantities as $key => $value) { if (array_key_exists($key, $itemQuantities)) { if ($itemQuantities[$key] != $value) { $errors[] = array('message' => '数量の数が異なっています。'); // 対象がなければエラー return $app->render('Shopping/shipping_multiple.twig', array('form' => $form->createView(), 'shipmentItems' => $shipmentItems, 'compItemQuantities' => $compItemQuantities, 'errors' => $errors)); } } } // お届け先情報をdelete/insert $shippings = $Order->getShippings(); foreach ($shippings as $Shipping) { $Order->removeShipping($Shipping); $app['orm.em']->remove($Shipping); } foreach ($data as $mulitples) { /** @var \Eccube\Entity\ShipmentItem $multipleItem */ $multipleItem = $mulitples->getData(); foreach ($mulitples as $items) { foreach ($items as $item) { // 追加された配送先情報を作成 $Delivery = $multipleItem->getShipping()->getDelivery(); // 選択された情報を取得 $data = $item['customer_address']->getData(); if ($data instanceof CustomerAddress) { // 会員の場合、CustomerAddressオブジェクトを取得 $CustomerAddress = $data; } else { // 非会員の場合、選択されたindexが取得される $customerAddresses = $app['session']->get($this->sessionCustomerAddressKey); $customerAddresses = unserialize($customerAddresses); $CustomerAddress = $customerAddresses[$data]; $pref = $app['eccube.repository.master.pref']->find($CustomerAddress->getPref()->getId()); $CustomerAddress->setPref($pref); } $Shipping = new Shipping(); $Shipping->setFromCustomerAddress($CustomerAddress)->setDelivery($Delivery)->setDelFlg(Constant::DISABLED)->setOrder($Order); $app['orm.em']->persist($Shipping); $ProductClass = $multipleItem->getProductClass(); $Product = $multipleItem->getProduct(); $quantity = $item['quantity']->getData(); $ShipmentItem = new ShipmentItem(); $ShipmentItem->setShipping($Shipping)->setOrder($Order)->setProductClass($ProductClass)->setProduct($Product)->setProductName($Product->getName())->setProductCode($ProductClass->getCode())->setPrice($ProductClass->getPrice02())->setQuantity($quantity); $ClassCategory1 = $ProductClass->getClassCategory1(); if (!is_null($ClassCategory1)) { $ShipmentItem->setClasscategoryName1($ClassCategory1->getName()); $ShipmentItem->setClassName1($ClassCategory1->getClassName()->getName()); } $ClassCategory2 = $ProductClass->getClassCategory2(); if (!is_null($ClassCategory2)) { $ShipmentItem->setClasscategoryName2($ClassCategory2->getName()); $ShipmentItem->setClassName2($ClassCategory2->getClassName()->getName()); } $Shipping->addShipmentItem($ShipmentItem); $app['orm.em']->persist($ShipmentItem); // 配送料金の設定 $app['eccube.service.shopping']->setShippingDeliveryFee($Shipping); } } } // 配送先を更新 $app['orm.em']->flush(); return $app->redirect($app->url('shopping')); } return $app->render('Shopping/shipping_multiple.twig', array('form' => $form->createView(), 'shipmentItems' => $shipmentItems, 'compItemQuantities' => $compItemQuantities, 'errors' => $errors)); }
/** * Order オブジェクトを生成して返す. * * @param \Eccube\Entity\Customer $Customer Customer インスタンス * @param array $ProductClasses 明細行となる ProductClass の配列 * @return \Eccube\Entity\Order */ public function createOrder(Customer $Customer, array $ProductClasses = array()) { $faker = $this->getFaker(); $quantity = $faker->randomNumber(2); $Pref = $this->app['eccube.repository.master.pref']->find(1); $Order = new Order($this->app['eccube.repository.order_status']->find($this->app['config']['order_processing'])); $Order->setCustomer($Customer); $Order->copyProperties($Customer); $Order->setPref($Pref); $this->app['orm.em']->persist($Order); $this->app['orm.em']->flush($Order); $Delivery = $this->app['eccube.repository.delivery']->find(1); $Shipping = new Shipping(); $Shipping->copyProperties($Customer); $Shipping->setPref($Pref)->setDelivery($Delivery); $Order->addShipping($Shipping); $Shipping->setOrder($Order); $this->app['orm.em']->persist($Shipping); $this->app['orm.em']->flush($Shipping); if (empty($ProductClassess)) { $Product = $this->createProduct(); $ProductClasses = $Product->getProductClasses(); } $subTotal = 0; foreach ($ProductClasses as $ProductClass) { $Product = $ProductClass->getProduct(); $OrderDetail = new OrderDetail(); $TaxRule = $this->app['eccube.repository.tax_rule']->getByRule(); // デフォルト課税規則 $OrderDetail->setProduct($Product)->setProductClass($ProductClass)->setProductName($Product->getName())->setProductCode($ProductClass->getCode())->setPrice($ProductClass->getPrice02())->setQuantity($quantity)->setTaxRule($TaxRule->getCalcRule()->getId())->setTaxRate($TaxRule->getTaxRate()); $this->app['orm.em']->persist($OrderDetail); $OrderDetail->setOrder($Order); $this->app['orm.em']->flush($OrderDetail); $Order->addOrderDetail($OrderDetail); $ShipmentItem = new ShipmentItem(); $ShipmentItem->setShipping($Shipping)->setOrder($Order)->setProductClass($ProductClass)->setProduct($Product)->setProductName($Product->getName())->setProductCode($ProductClass->getCode())->setPrice($ProductClass->getPrice02())->setQuantity($quantity); $Shipping->addShipmentItem($ShipmentItem); $this->app['orm.em']->persist($ShipmentItem); $this->app['orm.em']->flush($ShipmentItem); $subTotal += $OrderDetail->getPriceIncTax() * $OrderDetail->getQuantity(); } // TODO 送料, 手数料の加算 $Order->setSubTotal($subTotal); $Order->setTotal($subTotal); $Order->setPaymentTotal($subTotal); $this->app['orm.em']->flush($Order); return $Order; }
/** * Order オブジェクトを生成して返す. * * @param \Eccube\Entity\Customer $Customer Customer インスタンス * @return \Eccube\Entity\Order */ public function createOrder(Customer $Customer) { $faker = $this->getFaker(); $quantity = $faker->randomNumber(2); $Order = new Order(); $Order->setCustomer($Customer)->setCharge(0)->setDeliveryFeeTotal(0)->setDiscount(0)->setOrderStatus($this->app['eccube.repository.order_status']->find($this->app['config']['order_processing']))->setDelFlg(Constant::DISABLED); $Order->copyProperties($Customer); $this->app['orm.em']->persist($Order); $this->app['orm.em']->flush(); $Shipping = new Shipping(); $Shipping->copyProperties($Customer); $Order->addShipping($Shipping); $Shipping->setOrder($Order); $this->app['orm.em']->persist($Shipping); $Product = $this->createProduct(); $ProductClasses = $Product->getProductClasses(); $ProductClass = $ProductClasses[0]; $OrderDetail = new OrderDetail(); $TaxRule = $this->app['eccube.repository.tax_rule']->getByRule(); // デフォルト課税規則 $OrderDetail->setProduct($Product)->setProductClass($ProductClass)->setProductName($Product->getName())->setProductCode($ProductClass->getCode())->setPrice($ProductClass->getPrice02())->setQuantity($quantity)->setTaxRule($TaxRule->getCalcRule()->getId())->setTaxRate($TaxRule->getTaxRate()); $this->app['orm.em']->persist($OrderDetail); $OrderDetail->setOrder($Order); $Order->addOrderDetail($OrderDetail); $ShipmentItem = new ShipmentItem(); $ShipmentItem->setShipping($Shipping)->setOrder($Order)->setProductClass($ProductClass)->setProduct($Product)->setProductName($Product->getName())->setProductCode($ProductClass->getCode())->setPrice($ProductClass->getPrice02())->setQuantity($quantity); $this->app['orm.em']->persist($ShipmentItem); $subTotal = $OrderDetail->getPriceIncTax() * $OrderDetail->getQuantity(); // TODO 送料, 手数料の加算 $Order->setSubTotal($subTotal); $Order->setTotal($subTotal); $Order->setPaymentTotal($subTotal); $this->app['orm.em']->flush(); return $Order; }
/** * Order オブジェクトを生成して返す. * * @param \Eccube\Entity\Customer $Customer Customer インスタンス * @param array $ProductClasses 明細行となる ProductClass の配列 * @param \Eccube\Entity\Delivery $Delivery Delivery インスタンス * @param integer $add_charge Order に加算される手数料 * @param integer $add_discount Order に加算される値引き額 * @return \Eccube\Entity\Order */ public function createOrder(Customer $Customer, array $ProductClasses = array(), Delivery $Delivery = null, $add_charge = 0, $add_discount = 0, $statusType = null) { $faker = $this->getFaker(); $quantity = $faker->randomNumber(2); $Pref = $this->app['eccube.repository.master.pref']->find($faker->numberBetween(1, 47)); $Payments = $this->app['eccube.repository.payment']->findAll(); if (!$statusType) { $statusType = 'order_processing'; } $OrderStatus = $this->app['eccube.repository.order_status']->find($this->app['config'][$statusType]); $Order = new Order($OrderStatus); $Order->setCustomer($Customer); $Order->copyProperties($Customer); $Order->setPref($Pref)->setPayment($Payments[$faker->numberBetween(0, count($Payments) - 1)])->setPaymentMethod($Order->getPayment()->getMethod())->setMessage($faker->text())->setNote($faker->text()); $this->app['orm.em']->persist($Order); $this->app['orm.em']->flush($Order); if (!is_object($Delivery)) { $Delivery = $this->createDelivery(); foreach ($Payments as $Payment) { $PaymentOption = new PaymentOption(); $PaymentOption->setDeliveryId($Delivery->getId())->setPaymentId($Payment->getId())->setDelivery($Delivery)->setPayment($Payment); $Payment->addPaymentOption($PaymentOption); $this->app['orm.em']->persist($PaymentOption); $this->app['orm.em']->flush($PaymentOption); } $this->app['orm.em']->flush($Payment); } $DeliveryFee = $this->app['eccube.repository.delivery_fee']->findOneBy(array('Delivery' => $Delivery, 'Pref' => $Pref)); $fee = 0; if (is_object($DeliveryFee)) { $fee = $DeliveryFee->getFee(); } $Shipping = new Shipping(); $Shipping->copyProperties($Customer); $Shipping->setPref($Pref)->setDelivery($Delivery)->setDeliveryFee($DeliveryFee)->setShippingDeliveryFee($fee)->setShippingDeliveryName($Delivery->getName()); $Order->addShipping($Shipping); $Shipping->setOrder($Order); $this->app['orm.em']->persist($Shipping); $this->app['orm.em']->flush($Shipping); if (empty($ProductClasses)) { $Product = $this->createProduct(); $ProductClasses = $Product->getProductClasses(); } foreach ($ProductClasses as $ProductClass) { $Product = $ProductClass->getProduct(); $OrderDetail = new OrderDetail(); $TaxRule = $this->app['eccube.repository.tax_rule']->getByRule(); // デフォルト課税規則 $OrderDetail->setProduct($Product)->setProductClass($ProductClass)->setProductName($Product->getName())->setProductCode($ProductClass->getCode())->setPrice($ProductClass->getPrice02())->setQuantity($quantity)->setTaxRule($TaxRule->getCalcRule()->getId())->setTaxRate($TaxRule->getTaxRate()); $this->app['orm.em']->persist($OrderDetail); $OrderDetail->setOrder($Order); $this->app['orm.em']->flush($OrderDetail); $Order->addOrderDetail($OrderDetail); $ShipmentItem = new ShipmentItem(); $ShipmentItem->setShipping($Shipping)->setOrder($Order)->setProductClass($ProductClass)->setProduct($Product)->setProductName($Product->getName())->setProductCode($ProductClass->getCode())->setPrice($ProductClass->getPrice02())->setQuantity($quantity); $Shipping->addShipmentItem($ShipmentItem); $this->app['orm.em']->persist($ShipmentItem); $this->app['orm.em']->flush($ShipmentItem); } $subTotal = $Order->calculateSubTotal(); // TODO 送料無料条件は考慮していない. 必要であれば Order から再集計すること. $Order->setDeliveryFeeTotal($Shipping->getShippingDeliveryFee()); $Order->setSubTotal($subTotal); $Order->setCharge($Order->getCharge() + $add_charge); $Order->setDiscount($Order->getDiscount() + $add_discount); $total = $Order->getTotalPrice(); $Order->setTotal($total); $Order->setPaymentTotal($total); $tax = $Order->calculateTotalTax(); $Order->setTax($tax); $this->app['orm.em']->flush($Order); return $Order; }