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

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;
	}
	

を追加します。


コメントを残す

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