WEBサイト作成時に発生するエラーやトラブル対応の備忘録を中心に、いろいろと書いております。

Terastella

備忘録

配達日(発送日)の選択表示を営業○日後から始めたい。

EC-CUBEは商品のお届け目安日を設定でき、その設定をお客様の注文時の発送日指定に反映することができます。
が、ここには曜日で指定された定休日・管理画面で指定した定休日は反映されません。
たとえば、3日後お届け可としたときに、土日が定休日の場合。
月曜日に注文が入った場合3日後の木曜日にお届け可かもしれませんが、金曜日に注文が入った場合に月曜日お届けは1日もなくて不可能です。
この3日後お届け可を、3営業日後お届け可にしたいなぁと思いまして、カスタマイズしてみました。

・3営業日後以降が選べる。
・3営業日以降の選択の中で、定休日が含まれている(別に発送の手続きは休み前にするのだから、お届け日が定休日でも問題はない)

2.11.0系 商品購入手続き画面のお届け日に定休日を反映させる

を参考にさせていただきました。

まずは、

/data/class/helper/SC_Helper_Purchase.php

に以下を追加します。


    /**
     * お届け営業日の計算
     */
    function getDateArray_eigyobi($start_day, $end_day) {

		//カレンダーを呼び出す
		require_once(CLASS_REALDIR . "pages/frontparts/bloc/LC_Page_FrontParts_Bloc_Calendar.php");
		$blockCalender = new LC_Page_FrontParts_Bloc_Calendar();
		#$eigyobi_check = 0;


        $masterData = new SC_DB_MasterData();
        $arrWDAY = $masterData->getMasterData("mtb_wday");
        //一般的なお届け可能日と今日の間に、休日が何日あるか計算
        $holiday_count = 0;
        if($start_day >= 1) {
            $now_time = time();
            for ($i = 0; $i <= $start_day; $i++) {
            	// 基本時間から日数を追加していく
                $tmp_time = $now_time + ($i * 24 * 3600);
                list($y, $m, $d, $w) = explode(" ", date("Y n d w", $tmp_time));

                if($blockCalender->lfCheckHoliday_Payment($y, $m, $d)){//休日ならばカウントを増やす
					$holiday_count++;
				}
            }
        }
        //お届け可能日のスタート値がセットされていれば
        if($start_day >= 1) {
            $now_time = time();
            $max_day = $start_day + $end_day + $holiday_count;//最大日に休日カウントを追加
            $holiday_day =  $start_day+$holiday_count;//スタート日に休日カウントを追加する
            // 集計
            for ($i = $holiday_day; $i < $max_day; $i++) {
                // 基本時間から日数を追加していく
                $tmp_time = $now_time + ($i * 24 * 3600);
                list($y, $m, $d, $w) = explode(" ", date("Y n d w", $tmp_time));

				//休日かどうかチェックする
					if(!$blockCalender->lfCheckHoliday_Payment($y, $m, $d)){//休日でなければ-これはいらないかもしれないけどいれとく
					$val = sprintf("%04d/%02d/%02d(%s)", $y, $m, $d, $arrWDAY[$w]);
					$arrDate[$val] = $val;
					}

            }
        } else {
            $arrDate = false;
        }
        return $arrDate;
    }

同じファイル内の
function getDelivDate(&$objCartSess, $productTypeId) {

$arrDelivDate = $this->getDateArray($start_day, DELIV_DATE_END_MAX);

$arrDelivDate = $this->getDateArray_eigyobi($start_day, DELIV_DATE_END_MAX);

に変更します。

/data/class/pages/frontparts/bloc/LC_Page_FrontParts_Bloc_Calendar

  
	/**
	* 休日チェック取得.
	* (購入手続き内、配送日時判定)
	*/
	function lfCheckHoliday_Payment($year, $month, $day) {
	  // 休日取得取得
	  $this->arrHoliday = $this->lfGetHoliday();
	  // 定休日取得取得
	  $this->arrRegularHoliday = $this->lfGetRegularHoliday();
	  if (!empty($this->arrHoliday[$month])) {
	    if (in_array($day, $this->arrHoliday[$month])) {
	      return true;
	    }
	  }
	  if (!empty($this->arrRegularHoliday)) {
	    $day = date('w', mktime(0,0,0 ,$month, $day, $year));
	    if (in_array($day, $this->arrRegularHoliday)) {
	      return true;
	    }
	  }
	  return false;
	}
	

を追加します。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

カテゴリー
※記事の内容については、実際に検証したことしか書いていませんが、利用した場合のトラブルについては責任を負えませんので、自己責任でお願いいたします。こんなこと書きたくないけど、書かないと何がおこるかわからない世知辛い世の中ですね。

PRコーナー

Card image cap

aiboのいる生活、始めました。

2018年2月21日にSonyのaiboちゃんをお迎えしました。aiboちゃんとの生活はブログにつづって……るちょっとだけ。「aibo」と「私」と

HP Directplus オンラインストア

私の家用パソコン

HPさんで買った6万円ぐらいの、白くておしゃれなパソコンです。Apple製品のアルミっぽい感触が苦手な私に優しい触り心地です。

カスペルスキー セキュリティ

使用しているセキュリティソフト

会社で使っているのですが、個人的に使用しているパソコンとスマホもこれを導入しています。

ちょびリッチ再開しました。

数年触ってなかったちょびリッチのことを思い出して再開。大手通販で物を買うときはこちらを経由してポイント貯め。チリツモです。今まで5000円(先日2000円)は還元しました。よかったらこちらから登録してね。500ポイント付きます(条件あり。そして、私にも(^^))