/** * 合計金額がマイナスになっていた場合、値引き処理を元に戻す * * @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 */ protected function renderOrderDetailData(Order $Order) { $arrOrder = array(); // テーブルの微調整を行うための購入商品詳細情報をarrayに変換する // ========================================= // 受注詳細情報 // ========================================= $i = 0; /* @var OrderDetail $OrderDetail */ foreach ($Order->getOrderDetails() as $OrderDetail) { // class categoryの生成 $classCategory = ''; if ($OrderDetail->getClassCategoryName1()) { $classCategory .= ' [ ' . $OrderDetail->getClassCategoryName1(); if ($OrderDetail->getClassCategoryName2() == '') { $classCategory .= ' ]'; } else { $classCategory .= ' * ' . $OrderDetail->getClassCategoryName2() . ' ]'; } } // 税 $tax = $this->app['eccube.service.tax_rule']->calcTax($OrderDetail->getPrice(), $OrderDetail->getTaxRate(), $OrderDetail->getTaxRule()); $OrderDetail->setPriceIncTax($OrderDetail->getPrice() + $tax); // product $arrOrder[$i][0] = sprintf('%s / %s / %s', $OrderDetail->getProductName(), $OrderDetail->getProductCode(), $classCategory); // 購入数量 $arrOrder[$i][1] = number_format($OrderDetail->getQuantity()); // 税込金額(単価) $arrOrder[$i][2] = number_format($OrderDetail->getPriceIncTax()) . self::MONETARY_UNIT; // 小計(商品毎) $arrOrder[$i][3] = number_format($OrderDetail->getTotalPrice()) . self::MONETARY_UNIT; ++$i; } // ========================================= // 小計 // ========================================= $arrOrder[$i][0] = ''; $arrOrder[$i][1] = ''; $arrOrder[$i][2] = ''; $arrOrder[$i][3] = ''; ++$i; $arrOrder[$i][0] = ''; $arrOrder[$i][1] = ''; $arrOrder[$i][2] = '商品合計'; $arrOrder[$i][3] = number_format($Order->getSubtotal()) . self::MONETARY_UNIT; ++$i; $arrOrder[$i][0] = ''; $arrOrder[$i][1] = ''; $arrOrder[$i][2] = '送料'; $arrOrder[$i][3] = number_format($Order->getDeliveryFeeTotal()) . self::MONETARY_UNIT; ++$i; $arrOrder[$i][0] = ''; $arrOrder[$i][1] = ''; $arrOrder[$i][2] = '手数料'; $arrOrder[$i][3] = number_format($Order->getCharge()) . self::MONETARY_UNIT; ++$i; $arrOrder[$i][0] = ''; $arrOrder[$i][1] = ''; $arrOrder[$i][2] = '値引き'; $arrOrder[$i][3] = '- ' . number_format($Order->getDiscount()) . self::MONETARY_UNIT; ++$i; $arrOrder[$i][0] = ''; $arrOrder[$i][1] = ''; $arrOrder[$i][2] = '請求金額'; $arrOrder[$i][3] = number_format($Order->getPaymentTotal()) . self::MONETARY_UNIT; // PDFに設定する $this->setFancyTable($this->labelCell, $arrOrder, $this->widthCell); }