public function testConstructor2() { $Order = new Order(); $this->expected = 0; $this->actual = $Order->getDiscount(); $this->verify(); $this->actual = $Order->getSubTotal(); $this->verify(); $this->actual = $Order->getTotal(); $this->verify(); $this->actual = $Order->getPaymentTotal(); $this->verify(); $this->actual = $Order->getCharge(); $this->verify(); $this->actual = $Order->getTax(); $this->verify(); $this->actual = $Order->getDeliveryFeeTotal(); $this->verify(); $this->assertNull($Order->getOrderStatus()); $this->assertSame(Constant::DISABLED, $Order->getDelFlg()); }
/** * 会員情報の更新 * * @param Order $Order 受注情報 * @param Customer $user ログインユーザ */ public function setCustomerUpdate(Order $Order, Customer $user) { $orderDetails = $Order->getOrderDetails(); // 顧客情報を更新 $now = new \DateTime(); $firstBuyDate = $user->getFirstBuyDate(); if (empty($firstBuyDate)) { $user->setFirstBuyDate($now); } $user->setLastBuyDate($now); $user->setBuyTimes($user->getBuyTimes() + 1); $user->setBuyTotal($user->getBuyTotal() + $Order->getTotal()); }
/** * フォームからの入直内容に基づいて、受注情報の再計算を行う * * @param $app * @param $Order */ protected function calculate($app, \Eccube\Entity\Order $Order) { $taxtotal = 0; $subtotal = 0; // 受注明細データの税・小計を再計算 /** @var $OrderDetails \Eccube\Entity\OrderDetail[] */ $OrderDetails = $Order->getOrderDetails(); foreach ($OrderDetails as $OrderDetail) { // 新規登録の場合は, 入力されたproduct_id/produc_class_idから明細にセットする. if (!$OrderDetail->getId()) { $TaxRule = $app['eccube.repository.tax_rule']->getByRule($OrderDetail->getProduct(), $OrderDetail->getProductClass()); $OrderDetail->setTaxRule($TaxRule->getCalcRule()->getId()); $OrderDetail->setProductName($OrderDetail->getProduct()->getName()); $OrderDetail->setProductCode($OrderDetail->getProductClass()->getCode()); $OrderDetail->setClassName1($OrderDetail->getProductClass()->hasClassCategory1() ? $OrderDetail->getProductClass()->getClassCategory1()->getClassName()->getName() : null); $OrderDetail->setClassName2($OrderDetail->getProductClass()->hasClassCategory2() ? $OrderDetail->getProductClass()->getClassCategory2()->getClassName()->getName() : null); $OrderDetail->setClassCategoryName1($OrderDetail->getProductClass()->hasClassCategory1() ? $OrderDetail->getProductClass()->getClassCategory1()->getName() : null); $OrderDetail->setClassCategoryName2($OrderDetail->getProductClass()->hasClassCategory2() ? $OrderDetail->getProductClass()->getClassCategory2()->getName() : null); } // 税 $tax = $app['eccube.service.tax_rule']->calcTax($OrderDetail->getPrice(), $OrderDetail->getTaxRate(), $OrderDetail->getTaxRule()); $OrderDetail->setPriceIncTax($OrderDetail->getPrice() + $tax); $taxtotal += $tax; // 小計 $subtotal += $OrderDetail->getTotalPrice(); } $shippings = $Order->getShippings(); /** @var \Eccube\Entity\Shipping $Shipping */ foreach ($shippings as $Shipping) { $shipmentItems = $Shipping->getShipmentItems(); $Shipping->setDelFlg(Constant::DISABLED); /** @var \Eccube\Entity\ShipmentItem $ShipmentItem */ if (!$Shipping->getId()) { foreach ($shipmentItems as $ShipmentItem) { $ShipmentItem->setProductName($ShipmentItem->getProduct()->getName()); $ShipmentItem->setProductCode($ShipmentItem->getProductClass()->getCode()); $ShipmentItem->setClassName1($ShipmentItem->getProductClass()->hasClassCategory1() ? $ShipmentItem->getProductClass()->getClassCategory1()->getClassName()->getName() : null); $ShipmentItem->setClassName2($ShipmentItem->getProductClass()->hasClassCategory2() ? $ShipmentItem->getProductClass()->getClassCategory2()->getClassName()->getName() : null); $ShipmentItem->setClassCategoryName1($ShipmentItem->getProductClass()->hasClassCategory1() ? $ShipmentItem->getProductClass()->getClassCategory1()->getName() : null); $ShipmentItem->setClassCategoryName2($ShipmentItem->getProductClass()->hasClassCategory2() ? $ShipmentItem->getProductClass()->getClassCategory2()->getName() : null); } } } // 受注データの税・小計・合計を再計算 $Order->setTax($taxtotal); $Order->setSubtotal($subtotal); $Order->setTotal($subtotal + $Order->getCharge() + $Order->getDeliveryFeeTotal() - $Order->getDiscount()); // お支払い合計は、totalと同一金額(2系ではtotal - point) $Order->setPaymentTotal($Order->getTotal()); }
/** * 値引き可能かチェック * * @param Order $Order * @param $discount * @return bool */ public function isDiscount(Order $Order, $discount) { if ($Order->getTotal() < $discount) { return false; } return true; }
/** * ご注文内容のご確認画面のHTMLを取得し、関連項目を書き込む * お支払方法の下に下記の項目を追加する.(id=confirm_main ) * ・クーポンコードボタン * 送料のの下に下記の項目を追加する.(class=total_box total_amountの上) * ・値引き表示 * * @param Request $request * @param Response $response * @param Order $Order * @return mixed|string */ private function getHtmlShopping(Request $request, Response $response, Order $Order) { // HTMLを取得し、DOM化 $crawler = new Crawler($response->getContent()); $html = $this->getHtml($crawler); try { // クーポンが未入力でクーポン情報が存在すればクーポン情報を削除 $CouponOrder = $this->app['eccube.plugin.coupon.service.coupon']->getCouponOrder($Order->getPreOrderId()); $parts = $this->app->renderView('Coupon/View/coupon_shopping_item.twig', array('CouponOrder' => $CouponOrder)); // このタグを前後に分割し、間に項目を入れ込む $beforeHtml = $crawler->filter('#confirm_main')->last()->html(); $pos = strrpos($beforeHtml, '<h2 class="heading02">'); if ($pos !== false) { $oldHtml = substr($beforeHtml, 0, $pos); $afterHtml = substr($beforeHtml, $pos); $newHtml = $oldHtml . $parts . $afterHtml; $html = str_replace($beforeHtml, $newHtml, $html); } if (!version_compare('3.0.10', Constant::VERSION, '<=')) { // 値引き項目を表示 if ($CouponOrder) { $total = $Order->getTotal() - $CouponOrder->getDiscount(); $Order->setTotal($total); $Order->setPaymentTotal($total); // 合計、値引きを再計算し、dtb_orderを更新する $this->app['orm.em']->flush($Order); // このタグを前後に分割し、間に項目を入れ込む // 元の合計金額は書き込み済みのため再度書き込みを行う $parts = $this->app->renderView('Coupon/View/discount_shopping_item.twig', array('Order' => $Order)); $form = $crawler->filter('#confirm_side .total_box')->last()->html(); $pos = strrpos($form, '</dl>'); if ($pos !== false) { $oldHtml = substr($form, 0, $pos); $newHtml = $oldHtml . $parts; $html = str_replace($form, $newHtml, $html); } } } } catch (\InvalidArgumentException $e) { // no-op } return $html; }
/** * クーポンコードが未入力または、クーポンコードを登録後に再度別のクーポンコードが設定された場合、 * 既存のクーポンを情報削除 * * @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); } }