- Timestamp:
- 2011/02/17 19:40:06 (15 years ago)
- bzr:base-revision:
- svn-v4:1e3b908f-19a9-db11-a64c-001125224ba8:branches/version-2_5-dev:20179
- bzr:committer:
- Kentaro Ohkouchi <[email protected]>
- bzr:file-ids:
data/Smarty/templates/admin/order/edit.tpl 15732@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2FSmarty%2Ftemplates%2Fdefault%2Fadmin%2Forder%2Fedit.tpl
data/Smarty/templates/admin/order/multiple.tpl multiple.tpl-20110116173102-7dtlp9lt15miha2l-1
data/class/SC_FormParam.php 15078@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fclass%2FSC_FormParam.php
data/class/helper/SC_Helper_DB.php 15176@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fclass%2Fhelper%2FSC_Helper_DB.php
data/class/helper/SC_Helper_Purchase.php sc_helper_purchase.p-20101020100530-jyaoa7ch9pdfjqzp-1
data/class/pages/admin/order/LC_Page_Admin_Order_Edit.php 15594@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fclass%2Fpages%2Fadmin%2Forder%2FLC_Page_Admin_Order_Edit.php
data/class/pages/admin/order/LC_Page_Admin_Order_Status.php 15596@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fclass%2Fpages%2Fadmin%2Forder%2FLC_Page_Admin_Order_Status.php- bzr:mapping-version:
- v4
- bzr:merge:
[email protected]- bzr:repository-uuid:
- 1e3b908f-19a9-db11-a64c-001125224ba8
- bzr:revision-id:
- [email protected]
- bzr:revno:
- 2908
- bzr:revprop:branch-nick:
- branches/version-2_5-dev
- bzr:root:
- branches/version-2_5-dev
- bzr:text-revisions:
data/Smarty/templates/admin/order/edit.tpl [email protected]
data/Smarty/templates/admin/order/multiple.tpl [email protected]
data/class/SC_FormParam.php [email protected]
data/class/helper/SC_Helper_Purchase.php [email protected]
data/class/pages/admin/order/LC_Page_Admin_Order_Edit.php [email protected]
data/class/pages/admin/order/LC_Page_Admin_Order_Status.php [email protected]- bzr:timestamp:
- 2011-02-17 19:40:03.388000011 +0900
- bzr:user-agent:
- bzr2.2.1+bzr-svn1.0.4
- svn:original-date:
- 2011-02-17T10:40:03.388000Z
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/version-2_5-dev/data/class/helper/SC_Helper_Purchase.php
r20167 r20180 72 72 73 73 $orderTemp['status'] = $orderStatus; 74 $orderId = $this->registerOrder ($orderTemp, $objCartSession,75 $objCartSession->getKey());74 $orderId = $this->registerOrderComplete($orderTemp, $objCartSession, 75 $objCartSession->getKey()); 76 76 $shippingTemp =& $this->getShippingTemp(); 77 77 if (count($shippingTemp) > 1) { … … 529 529 * $arrParam のうち, dtb_shipping テーブルに存在するカラムのみを登録する. 530 530 * 531 * TODO UPDATE/INSERT にする 532 * 531 533 * @param integer $order_id 受注ID 532 534 * @param array $arrParams 配送情報の連想配列 535 * @param boolean $convert_shipping_date yyyy/mm/dd(EEE) 形式の配送日付を変換する場合 true 533 536 * @return void 534 537 */ 535 function registerShipping($order_id, $arrParams ) {538 function registerShipping($order_id, $arrParams, $convert_shipping_date = true) { 536 539 $objQuery =& SC_Query::getSingletonInstance(); 537 540 $table = 'dtb_shipping'; 541 $where = 'order_id = ?'; 542 $objQuery->delete($table, $where, array($order_id)); 538 543 539 544 foreach ($arrParams as $arrShipping) { … … 542 547 543 548 // 配送日付を timestamp に変換 544 if (!SC_Utils_Ex::isBlank($arrValues['shipping_date'])) { 549 if (!SC_Utils_Ex::isBlank($arrValues['shipping_date']) 550 && $convert_shipping_date) { 545 551 $d = mb_strcut($arrValues["shipping_date"], 0, 10); 546 552 $arrDate = split("/", $d); … … 564 570 * @return void 565 571 */ 566 function registerShipmentItem($orderId, $shippingId, $params) { 567 $objQuery =& SC_Query::getSingletonInstance(); 572 function registerShipmentItem($order_id, $shipping_id, $arrParams) { 573 $objQuery =& SC_Query::getSingletonInstance(); 574 $table = 'dtb_shipment_item'; 575 $where = 'order_id = ? AND shipping_id = ?'; 576 $objQuery->delete($table, $where, array($order_id, $shipping_id)); 577 568 578 $objProduct = new SC_Product(); 569 foreach ($params as $productClassId => $val) { 570 $d = $objProduct->getDetailAndProductsClass($productClassId); 571 $sqlval['order_id'] = $orderId; 572 $sqlval['shipping_id'] = $shippingId; 573 $sqlval['product_class_id'] = $productClassId; 574 $sqlval['product_name'] = $d['name']; 575 $sqlval['product_code'] = $d['product_code']; 576 $sqlval['classcategory_name1'] = $d['classcategory_name1']; 577 $sqlval['classcategory_name2'] = $d['classcategory_name2']; 578 $sqlval['price'] = $d['price02']; 579 $sqlval['quantity'] = $val['quantity']; 580 $objQuery->insert("dtb_shipment_item", $sqlval); 581 } 582 } 583 584 /** 585 * 受注情報を登録する. 579 foreach ($arrParams as $arrValues) { 580 if (SC_Utils_Ex::isBlank($arrValues['product_class_id'])) { 581 continue; 582 } 583 $d = $objProduct->getDetailAndProductsClass($arrValues['product_class_id']); 584 $name = SC_Utils_Ex::isBlank($arrValues['product_name']) 585 ? $d['name'] 586 : $arrValues['product_name']; 587 588 $code = SC_Utils_Ex::isBlank($arrValues['product_code']) 589 ? $d['code'] 590 : $arrValues['product_code']; 591 592 $cname1 = SC_Utils_Ex::isBlank($arrValues['classcategory_name1']) 593 ? $d['classcategory_name1'] 594 : $arrValues['classcategory_name1']; 595 596 $cname2 = SC_Utils_Ex::isBlank($arrValues['classcategory_name2']) 597 ? $d['classcategory_name2'] 598 : $arrValues['classcategory_name2']; 599 600 $price = SC_Utils_Ex::isBlank($arrValues['price']) 601 ? $d['price02'] 602 : $arrValues['price']; 603 604 $arrValues['order_id'] = $order_id; 605 $arrValues['shipping_id'] = $shipping_id; 606 $arrValues['product_name'] = $name; 607 $arrValues['product_code'] = $code; 608 $arrValues['classcategory_name1'] = $cname1; 609 $arrValues['classcategory_name2'] = $cname2; 610 $arrValues['price'] = $price; 611 612 $arrExtractValues = $objQuery->extractOnlyColsOf($table, $arrValues); 613 $objQuery->insert($table, $arrExtractValues); 614 } 615 } 616 617 /** 618 * 受注登録を完了する. 586 619 * 587 620 * 引数の受注情報を受注テーブル及び受注詳細テーブルに登録する. 588 621 * 登録後, 受注一時テーブルに削除フラグを立て, カートの内容を削除する. 589 *590 * TODO ダウンロード商品の場合の扱いを検討591 622 * 592 623 * @param array $orderParams 登録する受注情報の配列 … … 595 626 * @param integer 受注ID 596 627 */ 597 function registerOrder ($orderParams, &$objCartSession, $cartKey) {628 function registerOrderComplete($orderParams, &$objCartSession, $cartKey) { 598 629 $objQuery =& SC_Query::getSingletonInstance(); 599 630 … … 619 650 $orderParams['update_date'] = 'Now()'; 620 651 621 $objQuery->insert("dtb_order", $orderParams); 622 623 // 受注.対応状況の更新 624 SC_Helper_DB_Ex::sfUpdateOrderStatus($orderParams['order_id'], 625 null, $addPoint, $usePoint); 652 $this->registerOrder($orderParams['order_id'], $orderParams); 626 653 627 654 // 詳細情報を取得 628 655 $cartItems = $objCartSession->getCartList($cartKey); 629 656 630 // 既に存在する詳細レコードを消しておく。 631 $objQuery->delete("dtb_order_detail", "order_id = ?", 632 array($orderParams['order_id'])); 633 657 // 詳細情報を生成 634 658 $objProduct = new SC_Product(); 659 $i = 0; 635 660 foreach ($cartItems as $item) { 636 661 $p =& $item['productsClass']; 637 $ detail['order_id'] = $orderParams['order_id'];638 $ detail['product_id'] = $p['product_id'];639 $ detail['product_class_id'] = $p['product_class_id'];640 $ detail['product_name'] = $p['name'];641 $ detail['product_code'] = $p['product_code'];642 $ detail['classcategory_name1'] = $p['classcategory_name1'];643 $ detail['classcategory_name2'] = $p['classcategory_name2'];644 $ detail['point_rate'] = $item['point_rate'];645 $ detail['price'] = $item['price'];646 $ detail['quantity'] = $item['quantity'];662 $arrDetail[$i]['order_id'] = $orderParams['order_id']; 663 $arrDetail[$i]['product_id'] = $p['product_id']; 664 $arrDetail[$i]['product_class_id'] = $p['product_class_id']; 665 $arrDetail[$i]['product_name'] = $p['name']; 666 $arrDetail[$i]['product_code'] = $p['product_code']; 667 $arrDetail[$i]['classcategory_name1'] = $p['classcategory_name1']; 668 $arrDetail[$i]['classcategory_name2'] = $p['classcategory_name2']; 669 $arrDetail[$i]['point_rate'] = $item['point_rate']; 670 $arrDetail[$i]['price'] = $item['price']; 671 $arrDetail[$i]['quantity'] = $item['quantity']; 647 672 648 673 // 在庫の減少処理 … … 651 676 SC_Utils_Ex::sfDispSiteError(SOLD_OUT, "", true); 652 677 } 653 $objQuery->insert("dtb_order_detail", $detail); 654 } 678 $i++; 679 } 680 $this->registerOrderDetail($orderParams['order_id'], $arrDetail); 655 681 656 682 $objQuery->update("dtb_order_temp", array('del_flg' => 1), … … 661 687 SC_SiteSession::unsetUniqId(); 662 688 return $orderParams['order_id']; 689 } 690 691 /** 692 * 受注情報を登録する. 693 * 694 * 既に受注IDが存在する場合は, 受注情報を更新する. 695 * 引数の受注IDが, 空白又は null の場合は, 新しく受注IDを発行して登録する. 696 * 697 * @param integer $order_id 受注ID 698 * @param array $arrParams 受注情報の連想配列 699 * @return integer 受注ID 700 */ 701 function registerOrder($order_id, $arrParams) { 702 $table = 'dtb_order'; 703 $where = 'order_id = ?'; 704 $objQuery = SC_Query::getSingletonInstance(); 705 $arrValues = $objQuery->extractOnlyColsOf($table, $arrParams); 706 707 $exists = $objQuery->count($table, $where, array($order_id)); 708 if ($exists > 0) { 709 710 $this->sfUpdateOrderStatus($order_id, $arrValues['status'], 711 $arrValues['add_point'], 712 $arrValues['use_point'], 713 $arrValues); 714 $this->sfUpdateOrderNameCol($order_id); 715 716 $arrValues['update_date'] = 'now()'; 717 $objQuery->update($table, $arrValues, $where, array($order_id)); 718 } else { 719 if (SC_Utils_Ex::isBlank($order_id)) { 720 $order_id = $objQuery->nextVal('dtb_order_order_id'); 721 } 722 $arrValues['order_id'] = $order_id; 723 $arrValues['customer_id'] = 724 SC_Utils_Ex::isBlank($arrValues['customer_id']) 725 ? 0 : $arrValues['customer_id']; 726 $arrValues['create_date'] = 'now()'; 727 $arrValues['update_date'] = 'now()'; 728 $objQuery->insert($table, $arrValues); 729 730 $this->sfUpdateOrderStatus($order_id, $arrValues['status'], 731 $arrValues['add_point'], 732 $arrValues['use_point'], 733 $arrValues); 734 $this->sfUpdateOrderNameCol($order_id); 735 736 } 737 return $order_id; 738 } 739 740 /** 741 * 受注詳細情報を登録する. 742 * 743 * 既に, 該当の受注が存在する場合は, 受注情報を削除し, 登録する. 744 * 745 * @param integer $order_id 受注ID 746 * @param array $arrParams 受注情報の連想配列 747 * @return void 748 */ 749 function registerOrderDetail($order_id, $arrParams) { 750 $table = 'dtb_order_detail'; 751 $where = 'order_id = ?'; 752 $objQuery = SC_Query::getSingletonInstance(); 753 754 $objQuery->delete($table, $where, array($order_id)); 755 foreach ($arrParams as $arrDetail) { 756 $arrValues = $objQuery->extractOnlyColsOf($table, $arrDetail); 757 $arrValues['order_id'] = $order_id; 758 $objQuery->insert($table, $arrValues); 759 } 663 760 } 664 761 … … 685 782 * 686 783 * @param integer $order_id 受注ID 784 * @param boolean $has_order_status 受注ステータス, 入金日も含める場合 true 687 785 * @return array 受注詳細の配列 688 786 */ 689 function getOrderDetail($order_id ) {787 function getOrderDetail($order_id, $has_order_status = true) { 690 788 $objQuery =& SC_Query::getSingletonInstance(); 691 789 $dbFactory = SC_DB_DBFactory_Ex::getInstance(); … … 701 799 T2.quantity, 702 800 T2.point_rate, 703 T1.status AS status, 704 T1.payment_date AS payment_date, 801 __EOS__; 802 if ($has_order_status) { 803 $col .= 'T1.status AS status, T1.payment_date AS payment_date,'; 804 805 } 806 $col .= <<< __EOS__ 807 705 808 CASE WHEN EXISTS( 706 809 SELECT 1 FROM dtb_products … … 772 875 773 876 foreach ($arrItem as $detailKey => $detailVal) { 774 $arrResults[$ product_class_id][$detailKey] = $detailVal;877 $arrResults[$key][$detailKey] = $detailVal; 775 878 } 776 879 // 商品詳細を関連づける 777 880 if ($has_detail) { 778 $arrResults[$ product_class_id]['productsClass']881 $arrResults[$key]['productsClass'] 779 882 =& $objProduct->getDetailAndProductsClass($product_class_id); 780 883 } … … 797 900 SC_MobileUserAgent::isMobile() ? 2 : 1); 798 901 } 902 903 /** 904 * 受注.対応状況の更新 905 * 906 * ・必ず呼び出し元でトランザクションブロックを開いておくこと。 907 * 908 * @param integer $orderId 注文番号 909 * @param integer|null $newStatus 対応状況 (null=変更無し) 910 * @param integer|null $newAddPoint 加算ポイント (null=変更無し) 911 * @param integer|null $newUsePoint 使用ポイント (null=変更無し) 912 * @param array $sqlval 更新後の値をリファレンスさせるためのパラメータ 913 * @return void 914 */ 915 function sfUpdateOrderStatus($orderId, $newStatus = null, $newAddPoint = null, $newUsePoint = null, &$sqlval) { 916 $objQuery =& SC_Query::getSingletonInstance(); 917 918 $arrOrderOld = $objQuery->getRow('status, add_point, use_point, customer_id', 'dtb_order', 'order_id = ?', array($orderId)); 919 920 // 対応状況が変更無しの場合、DB値を引き継ぐ 921 if (is_null($newStatus)) { 922 $newStatus = $arrOrderOld['status']; 923 } 924 925 // 使用ポイント、DB値を引き継ぐ 926 if (is_null($newUsePoint)) { 927 $newUsePoint = $arrOrderOld['use_point']; 928 } 929 930 // 加算ポイント、DB値を引き継ぐ 931 if (is_null($newAddPoint)) { 932 $newAddPoint = $arrOrderOld['add_point']; 933 } 934 935 if (USE_POINT !== false) { 936 // 顧客.ポイントの加減値 937 $addCustomerPoint = 0; 938 939 // ▼使用ポイント 940 // 変更前の対応状況が利用対象の場合、変更前の使用ポイント分を戻す 941 if (SC_Utils_Ex::sfIsUsePoint($arrOrderOld['status'])) { 942 $addCustomerPoint += $arrOrderOld['use_point']; 943 } 944 945 // 変更後の対応状況が利用対象の場合、変更後の使用ポイント分を引く 946 if (SC_Utils_Ex::sfIsUsePoint($newStatus)) { 947 $addCustomerPoint -= $newUsePoint; 948 } 949 // ▲使用ポイント 950 951 // ▼加算ポイント 952 // 変更前の対応状況が加算対象の場合、変更前の加算ポイント分を戻す 953 if (SC_Utils_Ex::sfIsAddPoint($arrOrderOld['status'])) { 954 $addCustomerPoint -= $arrOrderOld['add_point']; 955 } 956 957 // 変更後の対応状況が加算対象の場合、変更後の加算ポイント分を足す 958 if (SC_Utils_Ex::sfIsAddPoint($newStatus)) { 959 $addCustomerPoint += $newAddPoint; 960 } 961 // ▲加算ポイント 962 963 if ($addCustomerPoint != 0) { 964 // ▼顧客テーブルの更新 965 $sqlval = array(); 966 $where = ''; 967 $arrVal = array(); 968 $arrRawSql = array(); 969 $arrRawSqlVal = array(); 970 971 $sqlval['update_date'] = 'Now()'; 972 $arrRawSql['point'] = 'point + ?'; 973 $arrRawSqlVal[] = $addCustomerPoint; 974 $where .= 'customer_id = ?'; 975 $arrVal[] = $arrOrderOld['customer_id']; 976 977 $objQuery->update('dtb_customer', $sqlval, $where, $arrVal, $arrRawSql, $arrRawSqlVal); 978 // ▲顧客テーブルの更新 979 980 // 顧客.ポイントをマイナスした場合、 981 if ($addCustomerPoint < 0) { 982 $sql = 'SELECT point FROM dtb_customer WHERE customer_id = ?'; 983 $point = $objQuery->getOne($sql, array($arrOrderOld['customer_id'])); 984 // 変更後の顧客.ポイントがマイナスの場合、 985 if ($point < 0) { 986 // ロールバック 987 $objQuery->rollback(); 988 // エラー 989 SC_Utils_Ex::sfDispSiteError(LACK_POINT); 990 } 991 } 992 } 993 } 994 995 // ▼受注テーブルの更新 996 if (empty($sqlval)) { 997 $sqlval = array(); 998 } 999 1000 if (USE_POINT !== false) { 1001 $sqlval['add_point'] = $newAddPoint; 1002 $sqlval['use_point'] = $newUsePoint; 1003 } 1004 // ステータスが発送済みに変更の場合、発送日を更新 1005 if ($arrOrderOld['status'] != ORDER_DELIV && $newStatus == ORDER_DELIV) { 1006 $sqlval['commit_date'] = 'Now()'; 1007 } 1008 // ステータスが入金済みに変更の場合、入金日を更新 1009 elseif ($arrOrderOld['status'] != ORDER_PRE_END && $newStatus == ORDER_PRE_END) { 1010 $sqlval['payment_date'] = 'Now()'; 1011 } 1012 1013 $sqlval['status'] = $newStatus; 1014 $sqlval['update_date'] = 'Now()'; 1015 1016 $cols = $objQuery->listTableFields('dtb_order'); 1017 $dest = array(); 1018 foreach ($sqlval as $key => $val) { 1019 if (in_array($key, $cols)) { 1020 $dest[$key] = $val; 1021 } 1022 } 1023 1024 $objQuery->update('dtb_order', $dest, 'order_id = ?', array($orderId)); 1025 // ▲受注テーブルの更新 1026 } 1027 1028 /** 1029 * 受注の名称列を更新する 1030 * 1031 * @param integer $order_id 更新対象の注文番号 1032 * @param boolean $temp_table 更新対象は「受注_Temp」か 1033 * @static 1034 */ 1035 function sfUpdateOrderNameCol($order_id, $temp_table = false) { 1036 $objQuery =& SC_Query::getSingletonInstance(); 1037 1038 if ($temp_table) { 1039 $tgt_table = 'dtb_order_temp'; 1040 $sql_where = 'order_temp_id = ?'; 1041 } else { 1042 $tgt_table = 'dtb_order'; 1043 $sql_where = 'order_id = ?'; 1044 1045 $objQuery->update('dtb_shipping', array(), 1046 $sql_where, 1047 array($order_id), 1048 array('shipping_time' => 1049 "(SELECT deliv_time FROM dtb_delivtime WHERE time_id = dtb_shipping.time_id AND deliv_id = dtb_shipping.deliv_id)")); 1050 1051 } 1052 1053 $objQuery->update($tgt_table, array(), 1054 $sql_where, 1055 array($order_id), 1056 array('payment_method' => 1057 "(SELECT payment_method FROM dtb_payment WHERE payment_id = " . $tgt_table . ".payment_id)")); 1058 } 799 1059 }
Note: See TracChangeset
for help on using the changeset viewer.
