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