diff --git a/src/Eccube/Controller/Admin/Order/EditController.php b/src/Eccube/Controller/Admin/Order/EditController.php index 1825f95f263..2ec61aea5fc 100644 --- a/src/Eccube/Controller/Admin/Order/EditController.php +++ b/src/Eccube/Controller/Admin/Order/EditController.php @@ -165,8 +165,6 @@ public function index(Application $app, Request $request, $id = null) $ShipmentItem->setOrder($TargetOrder); } - // TODO 手数料, 値引きの集計は CalculateService で - $TargetOrder->setDeliveryFeeTotal($TargetOrder->calculateDeliveryFeeTotal()); // FIXME $app['orm.em']->persist($TargetOrder); $app['orm.em']->flush(); diff --git a/src/Eccube/Entity/Order.php b/src/Eccube/Entity/Order.php index b34d322c8ff..4bcf9cb59b4 100644 --- a/src/Eccube/Entity/Order.php +++ b/src/Eccube/Entity/Order.php @@ -140,7 +140,43 @@ function($ShipmentItem) { return $ShipmentItem->isDeliveryFee(); }), function($total, $ShipmentItem) { - return $total + $ShipmentItem->getPriceIncTax(); + return $total + $ShipmentItem->getPriceIncTax() * $ShipmentItem->getQuantity(); + }, 0); + } + + /** + * この注文にかかる値引きの合計を返す. + * + * @return integer + */ + public function calculateDiscountTotal() + { + // TODO filter を外出ししたい + return array_reduce( + array_filter($this->getShipmentItems()->toArray(), + function($ShipmentItem) { + return $ShipmentItem->isDiscount(); + }), + function($total, $ShipmentItem) { + return $total + $ShipmentItem->getPriceIncTax() * $ShipmentItem->getQuantity(); + }, 0); + } + + /** + * この注文にかかる手数料の合計を返す. + * + * @return integer + */ + public function calculateChargeTotal() + { + // TODO filter を外出ししたい + return array_reduce( + array_filter($this->getShipmentItems()->toArray(), + function($ShipmentItem) { + return $ShipmentItem->isCharge(); + }), + function($total, $ShipmentItem) { + return $total + $ShipmentItem->getPriceIncTax() * $ShipmentItem->getQuantity(); }, 0); } diff --git a/src/Eccube/Form/Type/Admin/OrderType.php b/src/Eccube/Form/Type/Admin/OrderType.php index 16981bd3932..6cb0bb8f157 100644 --- a/src/Eccube/Form/Type/Admin/OrderType.php +++ b/src/Eccube/Form/Type/Admin/OrderType.php @@ -341,6 +341,14 @@ public function buildForm(FormBuilderInterface $builder, array $options) $Order->setPaymentMethod($Payment->getMethod()); } }); + // TODO 手数料, 値引きの集計は CalculateService で + $builder->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) { + $Order = $event->getData(); + $Order->setDiscount($Order->calculateDiscountTotal()); + $Order->setCharge($Order->calculateChargeTotal()); + $Order->setDeliveryFeeTotal($Order->calculateDeliveryFeeTotal()); + $event->setData($Order); + }); // 会員受注の場合、会員の性別/職業/誕生日をエンティティにコピーする $builder->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) { $Order = $event->getData(); diff --git a/src/Eccube/Form/Type/Admin/ShipmentItemType.php b/src/Eccube/Form/Type/Admin/ShipmentItemType.php index 89ba9235e97..cdc7147cd99 100644 --- a/src/Eccube/Form/Type/Admin/ShipmentItemType.php +++ b/src/Eccube/Form/Type/Admin/ShipmentItemType.php @@ -143,6 +143,26 @@ public function buildForm(FormBuilderInterface $builder, array $options) ))); $app = $this->app; + // XXX price を priceIncTax にセットし直す + // どこか一箇所にまとめたい + $builder->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) use ($app) { + /** @var \Eccube\Entity\ShipmentItem $ShipmentItem */ + $ShipmentItem = $event->getData(); + $TaxDisplayType = $ShipmentItem->getTaxDisplayType(); + switch ($TaxDisplayType->getId()) { + // 税込価格 + case TaxDisplayType::INCLUDED: + $ShipmentItem->setPriceIncTax($ShipmentItem->getPrice()); + break; + // 税別価格の場合は税額を加算する + case TaxDisplayType::EXCLUDED: + // TODO 課税規則を考慮する + $ShipmentItem->setPriceIncTax($ShipmentItem->getPrice() + $ShipmentItem->getPrice() * $ShipmentItem->getTaxRate() / 100); + break; + } + + $event->setData($ShipmentItem); + }); $builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) use ($app) { // モーダルからのPOST時に、金額等をセットする. if ('modal' === $app['request_stack']->getCurrentRequest()->get('modal')) { diff --git a/src/Eccube/Resource/template/admin/Order/edit.twig b/src/Eccube/Resource/template/admin/Order/edit.twig index 43af2e0745e..a60a531a24e 100644 --- a/src/Eccube/Resource/template/admin/Order/edit.twig +++ b/src/Eccube/Resource/template/admin/Order/edit.twig @@ -472,18 +472,15 @@ var setModeAndSubmit = function(mode, keyname, keyid) {