バージョン選択

フォーラム

メニュー

オンライン状況

71 人のユーザが現在オンラインです。 (56 人のユーザが フォーラム を参照しています。)
登録ユーザ: 1
ゲスト: 70
red もっと...

サイト内検索

質問 > フロント機能 > EC CUBE3.0で送料の計算方法をカスタマイズしたい

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
madoka
投稿日時: 2017/1/31 16:09
対応状況: −−−
半人前
登録日: 2016/2/15
居住地:
投稿: 23
EC CUBE3.0で送料の計算方法をカスタマイズしたい
はじめまして、EC CUBE初心者です。

送料計算のカスタマイズについて教えていただきたいのですが、
各商品毎に個別送料を設定し、各都道府県別でも送料を設定しています。
これを、商品価格+個別送料+地域別送料×個数としたいのですが、どうやっても計算がおかしくなってしまい実現できずにいます。

↓このように書いてみたのですが、複数の商品が入ると計算がおかしくなってしまいます。

// 商品ごとの配送料合計
$productDeliveryFeeTotal = 0;
if (!is_null($this->BaseInfo->getOptionProductDeliveryFee())) {
 $productDeliveryFeeTotal = $ProductClass->getDeliveryFee() * $quantity;
}

$Shipping->setShippingDeliveryFee($Shipping->getShippingDeliveryFee() * $quantity + $productDeliveryFeeTotal);


これも試しましたが、計算が合いませんでした。
// 商品ごとの配送料合計
$productDeliveryFeeTotal = 0;
 if (!is_null($this->BaseInfo->getOptionProductDeliveryFee())) {
$productDeliveryFeeTotal = $Shipping->getDeliveryFee()->getFee() * $quantity + $ProductClass->getDeliveryFee() * $quantity;
}
$Shipping->setShippingDeliveryFee($Shipping->getShippingDeliveryFee() + $productDeliveryFeeTotal);

どなたか教えていただけませんでしょうか?
よろしくお願いします。

-----------------------
EC CUBE 3.0.10
PHP 5.6.21
MySQL 5.6.23
468
投稿日時: 2017/2/2 2:34
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 3217
Re: EC CUBE3.0で送料の計算方法をカスタマイズしたい
具体的にどのあたりに処理を記述されていますか?

多分、似たような処理で、ShoppingService.php 639行目付近のfunction setShippingDeliveryFee() {} 辺りでは無いかと思いますが如何でしょうか?

記述いただいたソースを見ていると、$quantityに正しい情報が入っていないのではないかと思いますが如何でしょうか?

商品ごとの配送料を取得する処理のfunction getProductDeliveryFee()の中にも記述されていますが、
配送先ごとの商品の個数を参照しようと思う場合、以下のようなループが必要かと思います。
$shipmentItems = $Shipping->getShipmentItems();
foreach ($shipmentItems as $ShipmentItem) {
    //ここで$ShipmentItemを利用する事で、配送先ごとの商品が取得できる
    $productDeliveryFeeTotal += $ShipmentItem->getProductClass()->getDeliveryFee() * $ShipmentItem->getQuantity();
}


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

madoka
投稿日時: 2017/2/2 9:38
対応状況: −−−
半人前
登録日: 2016/2/15
居住地:
投稿: 23
Re: EC CUBE3.0で送料の計算方法をカスタマイズしたい
お返事、ご指摘ありがとうございます。

変更した箇所は 514行目あたりからの処理で
public function getNewShipmentItem(Order $Order, Product $Product, ProductClass $ProductClass, $quantity)
{
の中にある
$productDeliveryFeeTotal = 0;
if (!is_null($this->BaseInfo->getOptionProductDeliveryFee())) {
$productDeliveryFeeTotal = $ProductClass->getDeliveryFee() * $quantity;
}
$Shipping->setShippingDeliveryFee($Shipping->getShippingDeliveryFee() + $productDeliveryFeeTotal);

の部分を変更して下記のようにしました。

$productDeliveryFeeTotal = 0;
if (!is_null($this->BaseInfo->getOptionProductDeliveryFee())) {
$productDeliveryFeeTotal = $Shipping->getDeliveryFee()->getFee() * $quantity + $ProductClass->getDeliveryFee() * $quantity;
}
$Shipping->setShippingDeliveryFee($Shipping->getShippingDeliveryFee() + $productDeliveryFeeTotal);

すると、1種類の商品が数個入っている場合には意図した計算になります。
2種類以上の商品が入った場合、何故か送料が1回多く加算されてしまう感じです。

ご指摘の箇所も何度か色々変更してみたのですが、注文内容確認画面で数字の変動が見られず送料も1個分しか計算されませんでした...

すぐ下の
/**
* お届け先ごとの送料合計を取得
*
* @param $shippings
* @return int
*/
public function getShippingDeliveryFeeTotal($shippings)
{
$deliveryFeeTotal = 0;
foreach ($shippings as $Shipping) {
$deliveryFeeTotal += $Shipping->getShippingDeliveryFee();
}

return $deliveryFeeTotal;

}

の部分や

/**
* 商品ごとの配送料を取得
*
* @param Shipping $Shipping
* @return int
*/
public function getProductDeliveryFee(Shipping $Shipping)
{
$productDeliveryFeeTotal = 0;
$shipmentItems = $Shipping->getShipmentItems();
foreach ($shipmentItems as $ShipmentItem) {
$productDeliveryFeeTotal += $Shipping->getDeliveryFee()->getFee() * $ShipmentItem->getQuantity();
}
return $productDeliveryFeeTotal;
}

の部分も変動したらわかると思って、下記のように Quantity を消してみたり
foreach ($shipmentItems as $ShipmentItem) {
$productDeliveryFeeTotal += $Shipping->getDeliveryFee()->getFee();

と、変更してみたのですが、やはり注文内容確認画面の数字は変動しませんでした...
468
投稿日時: 2017/2/2 12:55
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 3217
Re: EC CUBE3.0で送料の計算方法をカスタマイズしたい
処理の流れを追ってみました。

>変更した箇所は 514行目あたりからの処理で
>public function getNewShipmentItem(Order $Order, Product $Product, ProductClass $ProductClass, $quantity)
上記の変更を加えられていますが、ここに処理が来た時点で、
$Shipping->getDeliveryFee()->getFee()に配送業者別の配達料金が1度セットされているようです。

それが原因で1回分送料が多いのでは無いでしょうか?

function registerPreOrder() {} の中で、

// お届け先情報を作成
$Order = $this->getNewShipping($Order, $Customer, $deliveries); ← この中でfunction setShippingDeliveryFee() {} を呼んで、その中で$Shipping->setDeliveryFee($deliveryFee);を処理しています。

// 受注明細情報、配送商品情報を作成
$Order = $this->getNewDetails($Order); ← この中でfunction getNewShipmentItem() {}を呼んでいます。

この辺を修正すれば、送料計算が上手くいくように思います。


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

madoka
投稿日時: 2017/2/2 16:24
対応状況: −−−
半人前
登録日: 2016/2/15
居住地:
投稿: 23
Re: EC CUBE3.0で送料の計算方法をカスタマイズしたい
ご教授ありがとうございます。
ご指摘いただいた通り、1度セットされている感じでしたので、
教えていただいた場所を探して function setShippingDeliveryFee にあった1行を修正したら無事計算があいました!
ありがとうございました。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,289名です
総投稿数は109,689件です

投稿数ランキング

1
seasoft
7365
2
468
3217
3
AMUAMU
2712
4
nanasess
2303
5
umebius
2085
6
yuh
1818
7
h_tanaka
1610
8
red
1568
9
mcontact
1240
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
796
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.