ECCUBEでは、商品の価格は税抜の本体価格を登録する仕様になっています。
しかし元々税込価格で管理していた場合、端数の処理を考慮しつつ税抜価格を計算して登録しなければなりません。
それならはじめから税込価格を登録したい、というケースで実施したカスタマイズ方法がこちらです。
内容としてはシンプルに、商品の税表示区分はすべて「税込」とし、外税額を求めるメソッドで必ず0を返すようにしてしまうというものです。(確認したECCUBEバージョンは4.2です。)
app/Customize/Service/OrderHelperExtension.php
を作成し、OrderHelper の getTaxDisplayType を上書き宣言します
<?php
namespace Customize\Service;
use Eccube\Entity\Master\TaxDisplayType;
class OrderHelperExtension extends \Eccube\Service\OrderHelper
{
/**
* 税表示区分を取得する.
* 価格を税込みで登録するため、常に"税込"を返す
*
* @param $OrderItemType
*
* @return TaxDisplayType
*/
public function getTaxDisplayType($OrderItemType)
{
return $this->entityManager->find(TaxDisplayType::class, TaxDisplayType::INCLUDED);
}
}
app/Customize/Service/TaxRuleServiceExtension.php
を作成し、TaxRuleService の getTax を上書き宣言します
<?php
namespace Customize\Service;
class TaxRuleServiceExtension extends \Eccube\Service\TaxRuleService
{
public function getTax($price, $product = null, $productClass = null, $pref = null, $country = null)
{
// 価格を税込みで登録するため、外税計算は常に0を返す
return 0;
}
}
app/Customize/Resource/config/services.yaml
でサービスの上書きを設定します。
services:
Customize\Service\OrderHelperExtension:
autowire: true
decorates: Eccube\Service\OrderHelper
Customize\Service\TaxRuleServiceExtension:
autowire: true
decorates: Eccube\Service\TaxRuleService
以上で、商品に登録した価格を税込みとして扱うことができます。
【注意】プラグインや独自カスタマイズで、上記で上書きしたメソッドを使わずに税額・税込価格を計算している場合があります。動作確認を行い、適切な修正を施す必要があります。