Ignore:
Timestamp:
2009/06/12 21:47:32 (13 years ago)
Author:
Seasoft
Message:

・受注.対応状況を発送済みにするタイミングでポイントを加算、発送済みから外れるタイミングで減算するように改訂。
・受注管理で使用ポイントや加算ポイントが変動した場合、顧客テーブルに反映するように改訂。
・ポイント加算するかの判定を拡張することで、発送済み以外のタイミングにも対応させる試み。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/comu-ver2/data/class/helper/SC_Helper_DB.php

    r18095 r18100  
    18161816        return SC_Utils_Ex::sfGetAddPoint($totalpoint, $use_point, $CONF['point_rate']); 
    18171817    } 
     1818 
     1819    /** 
     1820     * 受注.対応状況の更新 
     1821     * 
     1822     * ・必ず呼び出し元でトランザクションブロックを開いておくこと。 
     1823     * 
     1824     * @param integer $orderId 注文番号 
     1825     * @param integer|null $newStatus 対応状況 (null=変更無し) 
     1826     * @param integer|null $newAddPoint 加算ポイント (null=変更無し) 
     1827     * @param integer|null $newUsePoint ポイント (null=変更無し) 
     1828     * @return void 
     1829     */ 
     1830    function sfUpdateOrderStatus($orderId, $newStatus = null, $newAddPoint = null, $newUsePoint = null) { 
     1831        $objQuery = new SC_Query(); 
     1832         
     1833        $arrOrderOld = $objQuery->getRow('dtb_order', 'status, add_point, use_point, customer_id', 'order_id = ?', array($orderId)); 
     1834         
     1835        // 対応状況 
     1836        if (is_null($newStatus)) { 
     1837            $newStatus = $arrOrderOld['status']; 
     1838        } 
     1839         
     1840        if (USE_POINT !== false) { 
     1841            $addPoint = 0; 
     1842             
     1843            // 使用ポイント 
     1844            if (!is_null($newUsePoint)) { 
     1845                $addPoint += $arrOrderOld['use_point']; // 変更前のポイントを戻す 
     1846                $addPoint -= $newUsePoint;              // 変更後のポイントを引く 
     1847            } 
     1848             
     1849            // ▼加算ポイント 
     1850            // 変更前の状態が加算対象の場合、 
     1851            if (SC_Utils_Ex::sfIsAddPoint($arrOrderOld['status'])) { 
     1852                $addPoint -= $arrOrderOld['add_point']; 
     1853            } 
     1854             
     1855            // 変更後の状態が加算対象の場合、 
     1856            if (SC_Utils_Ex::sfIsAddPoint($newStatus)) { 
     1857                $addPoint += is_null($newAddPoint) ? $arrOrderOld['add_point'] : $newAddPoint; 
     1858            } 
     1859            // ▲加算ポイント 
     1860             
     1861            if ($addPoint != 0) { 
     1862                // ▼顧客テーブルの更新 
     1863                $sqlval = array(); 
     1864                $where = ''; 
     1865                $arrVal = array(); 
     1866                $arrRawSql = array(); 
     1867                 
     1868                $sqlval['update_date'] = 'Now()'; 
     1869                $arrRawSql['point'] = 'point + ?'; 
     1870                $arrVal[] = $addPoint; 
     1871                $where .= 'customer_id = ?'; 
     1872                $arrVal[] = $arrOrderOld['customer_id']; 
     1873                 
     1874                $objQuery->update('dtb_customer', $sqlval, $where, $arrVal, $arrRawSql); 
     1875                // ▲顧客テーブルの更新 
     1876                 
     1877                // ポイントをマイナスした場合、 
     1878                if ($addPoint < 0) { 
     1879                    $sql = 'SELECT point FROM dtb_customer WHERE customer_id = ?'; 
     1880                    $point = $objQuery->getone($sql, array($arrOrderOld['customer_id'])); 
     1881                    // 変更後のポイントがマイナスの場合、 
     1882                    if ($point < 0) { 
     1883                        // ロールバック 
     1884                        $objQuery->rollback(); 
     1885                        // エラー 
     1886                        SC_Utils_Ex::sfDispSiteError(LACK_POINT); 
     1887                    } 
     1888                } 
     1889            } 
     1890        } 
     1891         
     1892        // ▼受注テーブルの更新 
     1893        $sqlval = array(); 
     1894        if (USE_POINT !== false) { 
     1895            if (!is_null($newAddPoint)) { 
     1896                $sqlval['add_point'] = $newAddPoint; 
     1897            } 
     1898            if (!is_null($newUsePoint)) { 
     1899                $sqlval['use_point'] = $newUsePoint; 
     1900            } 
     1901        } 
     1902        // ステータスが発送済みに変更の場合、発送日を更新 
     1903        if ($arrOrderOld['status'] != ORDER_DELIV && $newStatus == ORDER_DELIV) { 
     1904            $sqlval['commit_date'] = 'Now()'; 
     1905        } 
     1906        $sqlval['status'] = $newStatus; 
     1907        $sqlval['update_date'] = 'Now()'; 
     1908         
     1909        $objQuery->update('dtb_order', $sqlval, 'order_id = ?', array($orderId)); 
     1910        // ▲受注テーブルの更新 
     1911    } 
    18181912} 
    18191913?> 
Note: See TracChangeset for help on using the changeset viewer.