eccube2.11 クール便の設定について | φ(..)メモとして残しておこう…

eccube2.11 クール便の設定について

ちょいと、コメントをいただきましたので、処理について書こうと思います。

-------------コメント内容--------------------------------

弊社は生ものなどを扱っていまして、
1)冷凍便
2)冷蔵便
3)常温便
の3パターンでの発送手配を行っています。
そこで、たとえば1人のお客様が
1)・3)をご購入されたとして、送料は
1)700円(クール込210円)
2)490円(クールなし)
合計1190円という具合にしたいのです。


商品個別送料を設定ではなく、お届け先件数に対してクールか否かを判別し、クールであれば常温送料プラスクール代210円追加とできればと思います。

--------------------------------------------------------

これはもう、クール便のフラグをたてるという方法にしたらいいと思います。
DBのどこにそれを追加してもいいと思いますが、とりあえず「通常便」「クール便」の2種類のフラグをもたせれば。

冷凍も冷蔵も、クール料金は一緒の場合が多いので。

まずは、dtb_productsにフラグ用のカラムを作成します。
「cool_flg,int(1),デフォルト=1」みたいな感じでしょうか。

そしたら、/data/class/pages/admin/products/LC_Page_Admin_Products_Product.php
の336行目に以下を追加

$objFormParam->addParam("クールフラグ", "cool_flg", '', "", array());

これで、商品詳細編集ページにDBからデータを読み込んでくることができます。
今度は同じファイルのDBに商品を登録する「function lfRegistProduct(…」の中の

// INSERTする値を作成する。
というコメント以下に「$sqlval['****'] = $arrList['****'];」ってのが並んでいると思うので

$sqlval['cool_flg'] = $arrList['cool_flg'];

ってのを追加します。

これで、DBにフラグ登録ができるようになりました。

あとは、/data/Smarty/templates/admin/products/product.tplに

<tr>
<th>クール便フラグ</th>
<td>
<span class="attention"><!--{$arrErr.cool_flg}--></span>
<input type="text" name="cool_flg" value="<!--{$arrForm.cool_flg|h}-->" size="6" class="box6" maxlength="<!--{$smarty.const.AMOUNT_LEN}-->" style="<!--{if $arrErr.sale_limit != ""}-->background-color: <!--{$smarty.const.ERR_COLOR}-->;<!--{/if}-->"/>
<span class="attention"> (0=通常便、1=クール便)</span>
</td>
</tr>

なんてのを追加してあげて、/data/Smarty/templates/admin/products/confirm.tplに

<tr>
<th>クール便フラグ</th>
<td>
<!--{$arrForm.cool_flg|h}-->
</td>
</tr>


と追加してあげます。
これで、管理画面から商品のクール便フラグを設定することが出来ます。
今回は直接入力ですが、必要に応じてプルダウンメニューで選べるようにしてあげたり。

DBへの登録まわりが終わったら、後は送料計算のロジックにフラグによる送料を加えるだけです。

とりあえず、data/class/SC_Product.phpの663行目に

dtb_products.cool_flg,

を追加。
要は詳細データを取得するSQLにcool_flgも追加するってことです。

後は

function getAllCartList() のforeachの中(ネストされた方のforeach)で

$cool = ( $cartItem["productsClass"]["cool_flg"] > 0 )? "on":"off";

とでもやって、クール便がひとつでも入っていたらフラグを"on"にするとかして
function calculate()内にフラグ"on"ならクール料金を加算する処理を書けばOKかと。


複数配送アリの場合にはロジックが違うので
(「全商品」ではなく「配送先毎の全商品」なのでgetAllCartList()は使えない…?)

商品分の繰り返しの中に、処理を書けばオッケー。
SC_Productクラスを使うのがめんどくさかったら、

$objQuery = new SC_Query();
$cool = ( $objQuery->getOne("SELECT cool_flg FROM dtb_products;") > 0 ) ? "on":"off";

でフラグたてて、人数分の繰り返しの中でクール料金を加算する処理を書けばいいかと。


今度、時間のある時にでも試してみます…。

場合によってはSC_Productクラスの「function lists()」とか「 prdclsSQL()」にもcool_flgの追加が必要になるのかな…?
ま、必要はなさそうだけど。



追記。
「SC_CartSession.php」の処理も書いてみましたので、アップしときます。
2.11.4&XAMPP環境では確認できてますが、細かいところはまだ確認してません。

…またまた追記。
確認の結果、コードを修正しました。

この記事に修正したコードがあります。