Labo

[EC-CUBE 2.12.3] 割引価格をデータベースに格納する

2013年03月23日 / 投稿者名:fukap


またもや、開発コミュニティに挙がっていたネタを拝借。
よく会員価格を設定するというカスタマイズがありますが、
その場合はたいてい商品登録フォームに会員価格欄を設け、その値がDBに格納されるようにするだろうと思います。

 

今回は、販売価格に対して、あらかじめ定義した割引率に基づいて、
割引価格A、割引価格B、割引価格Cを計算し、データベースに格納したいと思います。
ちなみに、割引率はマスターデータ管理を使って、%で定義します。
また、商品規格は使用しないという前提です。
んじゃレッツ、チャレンジ。

 

1.割引率を格納するマスターテーブル mtb_discount を作成。

CREATE TABLE mtb_discount (
    id smallint,
    name text,
    rank smallint NOT NULL DEFAULT 0,
    PRIMARY KEY (id)
);

2.作成した mtb_discount に値を挿入。管理画面>システム設定>マスターデータ管理 が楽チン。

ID:1	値:70
ID:2	値:60
ID:3	値:50

3.商品規格テーブルにカラムを追加。

alter table dtb_products_class add column discount_price1 numeric;
alter table dtb_products_class add column discount_price2 numeric;
alter table dtb_products_class add column discount_price3 numeric;

4.data/class/pages/admin/products/LC_Page_Admin_Products_Product.php の lfInsertDummyProductClassメソッドを以下のように修正

/**
 * 規格を設定していない商品を商品規格テーブルに登録
 *
 * @param array $arrList
 * @return void
 */
function lfInsertDummyProductClass($arrList) {
    $objQuery =& SC_Query_Ex::getSingletonInstance();
    $objDb = new SC_Helper_DB_Ex();

    // 配列の添字を定義
    $checkArray = array('product_class_id', 'product_id', 'product_code', 'stock', 'stock_unlimited', 'price01', 'price02', 'sale_limit', 'deliv_fee', 'point_rate' ,'product_type_id', 'down_filename', 'down_realfilename');
    $sqlval = SC_Utils_Ex::sfArrayIntersectKeys($arrList, $checkArray);
    $sqlval = SC_Utils_Ex::arrayDefineIndexes($sqlval, $checkArray);

    $sqlval['stock_unlimited'] = $sqlval['stock_unlimited'] ? UNLIMITED_FLG_UNLIMITED : UNLIMITED_FLG_LIMITED;
    $sqlval['creator_id'] = strlen($_SESSION['member_id']) >= 1 ? $_SESSION['member_id'] : '0';

    // ここから追加
    $masterData = new SC_DB_MasterData_Ex();
    $arrDiscount = $masterData->getMasterData('mtb_discount');
    $sqlval['discount_price1'] = $sqlval['price02'] * $arrDiscount[1] / 100;
    $sqlval['discount_price2'] = $sqlval['price02'] * $arrDiscount[2] / 100;
    $sqlval['discount_price3'] = $sqlval['price02'] * $arrDiscount[3] / 100;

    if (strlen($sqlval['product_class_id']) == 0) {
        $sqlval['product_class_id'] = $objQuery->nextVal('dtb_products_class_product_class_id');
        $sqlval['create_date'] = 'CURRENT_TIMESTAMP';
        $sqlval['update_date'] = 'CURRENT_TIMESTAMP';
        // INSERTの実行
        $objQuery->insert('dtb_products_class', $sqlval);
    } else {
        $sqlval['update_date'] = 'CURRENT_TIMESTAMP';
        // UPDATEの実行
        $objQuery->update('dtb_products_class', $sqlval, 'product_class_id = ?', array($sqlval['product_class_id']));

    }
}

これで管理画面>商品管理 から商品の新規登録や編集を行えば、dtb_products_class に割引価格が格納されると思います。
商品規格を使用する場合は、他のコードも触らないといけないと思われます。

コメントを残す

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

* Copy This Password *

* Type Or Paste Password Here *

*

コメント欄にコードを挿入したい場合は、[php][/php] を使ってください。