目次
環境
- [EC-CUBE] EC-CUBE3.0.16
手順など
何度やってもうまくいかず苦労した。手強い。
/* $eventから受注データを取り出す */ $order = $event->getArgument('Order'); $deliveryFee = $this->getDeliveryFee($order); $order->setDeliveryFeeTotal($deliveryFee); // eventにセットして完了 $event->setArgument('Order', $order);
ormの反映が必要か、と思いついて書いても動かない。
$this->app['orm.em']->persist($order); $this->app['orm.em']->flush();
やっと気が付いたのは、Totalの文字。そうだ、もともとの送料はshipping
に紐づけられているんだった。
複数配送は禁止しているので、ちょっと乱暴だが、foreachで回して全部に反映することにした。
foreach($shippings as $shipping){ $shipping->setDeliveryFee($deliveryFee); $this->app['orm.em']->persist($shipping); $this->app['orm.em']->flush(); } $this->app['orm.em']->persist($order); $this->app['orm.em']->flush(); $event->setArgument('Order', $order);
ところがエラー
Catchable Fatal Error: Argument 1 passed to Eccube\Entity\Shipping::setDeliveryFee() must be an instance of Eccube\Entity\DeliveryFee, integer given, called in /home/brigie/www/ec/app/Plugin/SomeEc/SomeEvent.php on line 354 and defined
マジすか。DeliveryFeeオブジェクトってのがあるの。それ以外は受け付けないと。
foreach($shippings as $shipping){ $shippingDeliveryFee = $shipping->getDeliveryFee(); $shippingDeliveryFee->setFee($deliveryFee); $this->app['orm.em']->persist($shippingDeliveryFee); $this->app['orm.em']->persist($shipping); $this->app['orm.em']->flush(); } $this->app['orm.em']->persist($order); $this->app['orm.em']->flush(); // eventにセットして完了 $event->setArgument('Order', $order);
合計金額が合わない
ところがまだバグがある。
注文確認画面で送付先を変更すると、料金の合計が合わない。
調べたところ、setDeliveryFee()
(だけ)ではなく、setShippingDeliveryFee()
する必要がある模様。
複雑なのね…。