Перейти к содержимому


Перерасчет суммы заказа

заказ перерасчет

  • Вы не можете ответить в тему
В этой теме нет ответов

#1 Juggler

    Новичок

  • Download User
  • Pip
  • 4 сообщений
Репутация: 6
Начинающий

Отправлено 01 October 2012 - 01:33 PM

При изменении любых параметров заказа, которые влияют на его сумму, её требуется перерасчитать и обновить. Это нужно, к примеру, при изменении
  • количества товара, добавлении или удалении позиций
  • размера скидки
  • способа доставки
Для удобства, операция оформлена в виде единственной функции, которую нужно вызывать после реализации нужных изменений в заказе.


function ordUpdateTotal($orderID){
// set temp order amount with discount and without shipping
$subq = "select SUM(Price*Quantity) from ".ORDERED_CARTS_TABLE." WHERE orderID=".(int)$orderID;
db_query("update ".ORDERS_TABLE." SET order_amount=(".$subq.")*(100-order_discount)/100 WHERE orderID=".(int)$orderID);

// update shipping cost
db_query("update ".ORDERS_TABLE." set shipping_cost=".(float)ordShippingRate($orderID)." where orderID=".(int)$orderID);

// update total amount
$subq = "select SUM(Price*Quantity) from ".ORDERED_CARTS_TABLE." WHERE orderID=".(int)$orderID;
db_query("update ".ORDERS_TABLE." SET order_amount=(".$subq.")*(100-order_discount)/100+shipping_cost WHERE orderID=".(int)$orderID);
}

function ordShippingRate($orderID)
{
$q = db_query("select shipping_type, customerID from ".ORDERS_TABLE." where orderID=".(int)$orderID);
if($row = db_fetch_row($q)){
$shipping=GetShippingIdbyName($row["shipping_type"]);
if(($shippingModule = modGetModuleObj($shipping["module_id"], SHIPPING_RATE_MODULE )) != null){
// Fill in address
$sq = "select c.customerID, c.first_name, c.last_name, ca.countryID, ca.zoneID, ca.state, ca.city, ca.address from ".CUSTOMERS_TABLE." c ".
"join ".CUSTOMER_ADDRESSES_TABLE." ca on ca.addressID=c.addressID and ca.customerID=c.customerID ".
"where c.customerID=".(int)$row["customerID"];
$q = db_query($sq);
if($row = db_fetch_row($q)) $address = $row;
else $address=array();
// Fill in order
$order = ordGetOrder((int)$orderID);
$order["orderContent"]["cart_content"] = ordGetOrderContent( $orderID );
for($i=0; $i<count($order["orderContent"]["cart_content"]); ++$i){
$order["orderContent"]["cart_content"][$i]["id"] = $order["orderContent"]["cart_content"][$i]["itemID"];
$order["orderContent"]["cart_content"][$i]["quantity"] = $order["orderContent"]["cart_content"][$i]["Quantity"];
$order["orderContent"]["cart_content"][$i]["product_img"] = $order["orderContent"]["cart_content"][$i]["product_picture"];

$variants=GetConfigurationByItemId( $order["orderContent"]["cart_content"][$i]["itemID"] );
$order["orderContent"]["cart_content"][$i]["costUC"] = GetPriceProductWithOption( $variants, $order["orderContent"]["cart_content"][$i]["productID"]);
$order["orderContent"]["cart_content"][$i]["cost"] = show_price($order["orderContent"]["cart_content"][$i]["Quantity"]*$order["orderContent"]["cart_content"][$i]["costUC"]);

$strOptions=GetStrOptions($variants);
if ( trim($strOptions) != "" ) $order["orderContent"]["cart_content"][$i]["name"].=" (".$strOptions.")";
}

// calculate rate
$newRate = (float)$shippingModule->calculate_shipping_rate($order, $address) ;
}
else $newRate = 0.0;
}
else $newRate = 0.0;

return $newRate;
}

  • 1