Eccube\Controller\Admin\Order\EditController::calculate PHP Method

calculate() protected method

フォームからの入直内容に基づいて、受注情報の再計算を行う
protected calculate ( $app, Order $Order )
$app
$Order Eccube\Entity\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->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 * $OrderDetail->getQuantity();
            // 小計
            $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 */
            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());
    }