制作Note

納品書に郵便番号、決済方法、電話番号を追加|EC-CUBE

制作メモとしてNoteしておきます。

EC-CUBEバーション: 4.1.2

デフォルトの納品書では載っていない購入者の「郵便番号、決済方法、電話番号」を追加する。

納品書は、管理画面の受注管理→受注一覧→購入者をクリックして詳細画面の中、
出荷情報の中に「注文者情報をコピー」の右横に「納品書を出力」ボタンがデフォルトで配置されている。

管理画面では納品書の項目を編集できない。
下記ディレクトリのファイルを編集。

/src/Eccube/Service/OrderPdfService.php

function makePdf()の中を編集する。

このファイルをよく見てみると処理の中で$Orderや$Shippingで情報を取得してPDFに反映していることが分かる。

下記のファイルを参考にしながら引用したい情報の関数を探る。
明示的なネームになっているので何となく分かるだろう笑
試しながら確認した。

/src/Eccube/Entity/Order.php
/src/Eccube/Entity/Shipping.php

457行目あたりに「お買い上げ明細部」とある。

その中に下記を追加。

        //決済方法
        $this->SetFont(self::FONT_GOTHIC, '', 10);
        //テキストの直前で上記を追加することによりフォントファミリーを変更することができる
        $this->lfText(21, 140, '[決済方法]', 10);
        //21と140はPDF画面中の座標で位置を設定している。21がX軸、140がY軸。

        //支払方法
        $this->SetFont(self::FONT_SJIS, '', 10);
        $this->lfText(25, 145, $Order->getPaymentMethod(), 10);

追加したい要素は座標で位置を設定していくのだが、この辺は既存で設定してある要素から大体こんな感じかなと数字を何度か試しながら決定した。

どこでも良いのだが、自分的に分かりやすく郵便番号はその上の407行目あたりの「購入者情報部」の中、412行目あたりに記述。

        $text = substr($Order->getPostalCode(), 0, 3);
        $this->lfText(27, 43, $text, 10);
        $this->lfText(34, 43, '-', 10);
        $text = substr($Order->getPostalCode(), 3, 4);
        $this->lfText(36, 43, $text, 10);

getPostalCode()だけだと7桁連続した郵便番号が出力される。
EC-CUBE4系は郵便番号が7桁連続したかたちで保存されている為だ。

当然、購入者は入力時に7桁まとめて入力している(入力フォームが2つに分かれていない)
そのため、substr関数を使って前半の3桁と後半の4桁を分けて取得してハイフンを真ん中に入れて処理した。

電話番号は購入者(会員登録)は
$Order->getPhoneNumber()

出荷先の電話番号は下記
$Shipping->getPhoneNumber()

出荷先の電話番号を納品書には記載したいので、下記のように記述した。

$this->lfText(27, 55, '電 話 '.$Shipping->getPhoneNumber(), 10);

下記の赤枠が追加した部分となる。

ちなみに会社名の記載があった場合の切り替えとして下記のように記述した。

if (null !== $Shipping->getCompanyName()) {
            //電話番号
            $this->lfText(27, 55, '電 話 '.$Shipping->getPhoneNumber(), 10);
            // 会社名
            $text = $Shipping->getCompanyName();
            $this->lfText(27, 60, $text, 11);
            // 氏名
            $text = $Shipping->getName01().' '.$Shipping->getName02().' 様';
            $this->lfText(27, 65, $text, 11);
        } else {
            // 電話番号
            $this->lfText(27, 55, '電 話 '.$Shipping->getPhoneNumber(), 10);
            // 氏名
            $text = $Shipping->getName01().' '.$Shipping->getName02().' 様';
            $this->lfText(27, 61, $text, 11);
        }

参考になれば幸いだが、あくまで制作Noteということを最後に記しておく。