/** * フォームからの入直内容に基づいて、受注情報の再計算を行う * * @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()); }