/** * 合計金額がマイナスになっていた場合、値引き処理を元に戻す * * @param Order $Order */ private function restoreDiscount(Order $Order) { // クーポンが未入力でクーポン情報が存在すればクーポン情報を削除 $CouponOrder = $this->app['eccube.plugin.coupon.service.coupon']->getCouponOrder($Order->getPreOrderId()); if ($CouponOrder) { $total = $Order->getSubtotal() + $Order->getCharge() + $Order->getDeliveryFeeTotal(); // 合計金額 $totalAmount = $total - $Order->getDiscount(); if ($totalAmount < 0) { // 合計金額がマイナスのため、金額を値引き前に戻す $this->app['orm.em']->remove($CouponOrder); $this->app['orm.em']->flush($CouponOrder); $discount = $Order->getDiscount() - $CouponOrder->getDiscount(); $Order->setDiscount($discount); $total = $total - $discount; $Order->setTotal($total); $Order->setPaymentTotal($total); $this->app['orm.em']->flush($Order); $this->app->addError($this->app->trans('front.plugin.coupon.shopping.use.minus'), 'front.request'); } } }
/** * クーポンコードが未入力または、クーポンコードを登録後に再度別のクーポンコードが設定された場合、 * 既存のクーポンを情報削除 * * @param Order $Order * @param Application $app */ private function removeCouponOrder(Order $Order, Application $app) { // クーポンが未入力でクーポン情報が存在すればクーポン情報を削除 $CouponOrder = $app['eccube.plugin.coupon.service.coupon']->getCouponOrder($Order->getPreOrderId()); if ($CouponOrder) { $app['orm.em']->remove($CouponOrder); $app['orm.em']->flush($CouponOrder); $Order->setDiscount($Order->getDiscount() - $CouponOrder->getDiscount()); $Order->setTotal($Order->getTotal() + $CouponOrder->getDiscount()); $Order->setPaymentTotal($Order->getPaymentTotal() + $CouponOrder->getDiscount()); $app['orm.em']->flush($Order); } }