Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
80.00% |
4 / 5 |
CRAP | |
60.00% |
12 / 20 |
| TaxRuleService | |
0.00% |
0 / 1 |
|
80.00% |
4 / 5 |
12.10 | |
60.00% |
12 / 20 |
| __construct | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
| getTax | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
| getPriceIncTax | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
| calcTax | |
100.00% |
1 / 1 |
1 | |
100.00% |
3 / 3 |
|||
| roundByCalcRule | |
0.00% |
0 / 1 |
8.74 | |
33.33% |
4 / 12 |
|||
| <?php | |
| /* | |
| * This file is part of EC-CUBE | |
| * | |
| * Copyright(c) 2000-2015 LOCKON CO.,LTD. All Rights Reserved. | |
| * | |
| * http://www.lockon.co.jp/ | |
| * | |
| * This program is free software; you can redistribute it and/or | |
| * modify it under the terms of the GNU General Public License | |
| * as published by the Free Software Foundation; either version 2 | |
| * of the License, or (at your option) any later version. | |
| * | |
| * This program is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| * GNU General Public License for more details. | |
| * | |
| * You should have received a copy of the GNU General Public License | |
| * along with this program; if not, write to the Free Software | |
| * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | |
| */ | |
| namespace Eccube\Service; | |
| class TaxRuleService | |
| { | |
| /** | |
| * @var \Eccube\Repository\TaxRuleRepository | |
| */ | |
| private $taxRuleRepository; | |
| /** | |
| * __construct | |
| * | |
| * @param \Eccube\Repository\TaxRuleRepository $taxRuleRepository | |
| */ | |
| public function __construct(\Eccube\Repository\TaxRuleRepository $taxRuleRepository) | |
| { | |
| $this->taxRuleRepository = $taxRuleRepository; | |
| } | |
| /** | |
| * 設定情報に基づいて税金の金額を返す | |
| * | |
| * @param int $price 計算対象の金額 | |
| * @param int|null|\Eccube\Entity\Product $product 商品 | |
| * @param int|null|\Eccube\Entity\ProductClass $productClass 商品規格 | |
| * @param int|null|\Eccube\Entity\Master\Pref $pref 都道府県 | |
| * @param int|null|\Eccube\Entity\Master\Country $country 国 | |
| * @return double 税金付与した金額 | |
| */ | |
| public function getTax($price, $product = null, $productClass = null, $pref = null, $country = null) | |
| { | |
| /* @var $TaxRule \Eccube\Entity\TaxRule */ | |
| $TaxRule = $this->taxRuleRepository->getByRule($product, $productClass, $pref, $country); | |
| return $this->calcTax($price, $TaxRule->getTaxRate(), $TaxRule->getCalcRule()->getId(), $TaxRule->getTaxAdjust()); | |
| } | |
| /** | |
| * calcIncTax | |
| * | |
| * @param int $price 計算対象の金額 | |
| * @param int|null|\Eccube\Entity\Product $product 商品 | |
| * @param int|null|\Eccube\Entity\ProductClass $productClass 商品規格 | |
| * @param int|null|\Eccube\Entity\Master\Pref $pref 都道府県 | |
| * @param int|null|\Eccube\Entity\Master\Country $country 国 | |
| * @return int | |
| */ | |
| public function getPriceIncTax($price, $product = null, $productClass = null, $pref = null, $country = null) | |
| { | |
| return $price + $this->getTax($price, $product, $productClass, $pref, $country); | |
| } | |
| /** | |
| * 税金額を計算する | |
| * | |
| * @param int $price 計算対象の金額 | |
| * @param int $taxRate 税率(%単位) | |
| * @param int $calcRule 端数処理 | |
| * @param int $taxAdjust 調整額 | |
| * @return double 税金額 | |
| */ | |
| public function calcTax($price, $taxRate, $calcRule, $taxAdjust = 0) | |
| { | |
| $tax = $price * $taxRate / 100; | |
| $roundTax = $this->roundByCalcRule($tax, $calcRule); | |
| return $roundTax + $taxAdjust; | |
| } | |
| /** | |
| * 課税規則に応じて端数処理を行う | |
| * | |
| * @param float|integer $value 端数処理を行う数値 | |
| * @param integer $calcRule 課税規則 | |
| * @return double 端数処理後の数値 | |
| */ | |
| public function roundByCalcRule($value, $calcRule) | |
| { | |
| switch ($calcRule) { | |
| // 四捨五入 | |
| case \Eccube\Entity\Master\Taxrule::ROUND: | |
| $ret = round($value); | |
| break; | |
| // 切り捨て | |
| case \Eccube\Entity\Master\Taxrule::FLOOR: | |
| $ret = floor($value); | |
| break; | |
| // 切り上げ | |
| case \Eccube\Entity\Master\Taxrule::CEIL: | |
| $ret = ceil($value); | |
| break; | |
| // デフォルト:切り上げ | |
| default: | |
| $ret = ceil($value); | |
| break; | |
| } | |
| return $ret; | |
| } | |
| } |