Customers not receiving points
I installed the latest version of the module on 1.5.0 and everything seems to work fine except customers never actually get their points. It shows them in the sidebox, but once the order is placed they don't actually get the points. They don't appear as pending or earned.
Re: Customers not receiving points
Quote:
Originally Posted by
vmmeup
I installed the latest version of the module on 1.5.0 and everything seems to work fine except customers never actually get their points. It shows them in the sidebox, but once the order is placed they don't actually get the points. They don't appear as pending or earned.
Please re-check your installation of Reward Points to see if all files has uploaded to the correct directories. Check the additional alterations to modified core files in reward points, it's likely one of those is the cause of the issue..
Re: Rounding problem when converting from points to $ in Total Order
Quote:
Originally Posted by
picandnix
Have you updated the status of their order? The system is most likely not awarding points until it is marked as 'paid'?
The order status goes from
pending [1]
processing[2]
posted[3]
I update to posted when the item has been sent.
I don't have a "paid"
Re: Rounding problem when converting from points to $ in Total Order
Quote:
Originally Posted by
CandleMan
The order status goes from
pending [1]
processing[2]
posted[3]
I update to posted when the item has been sent.
I don't have a "paid"
You can create any status name you like, It doesn't matter when you change the status the points should transfer. Look under admin/Reward Points Configuration/ Reward Point Status Track and choose the advance settings. Set the order status items that will trigger a transfer of the reward points.
Re: Rounding problem when converting from points to $ in Total Order
Hi, I'm posting the solution to the problems addressed with Edit Order plugin.
Eg. If You Edit and order when you hit the update button you get a blank page and an error log reporting a Call to undefined function GetRewardPoints()
If You have installed both You need to add some function in the \admin\includes\functions\extra_functions\reward_points_functions.php
Just before the /* at the end add:
PHP Code:
function GetRewardPoints($products)
{
$reward_points=0;
if(REWARD_POINT_MODE=='0')
{
foreach($products as $product)
if(isset($product['qty']))
$reward_points+=GetProductRewardPoints($product['id'],$product['attributes'])*$product['qty'];
else
if(isset($product['quantity']))
$reward_points+=GetProductRewardPoints($product['id'],$product['attributes'])*$product['quantity'];
else
if(isset($product['quantityField']))
$reward_points+=GetProductRewardPoints($product['id'],$product['attributes'])*$product['quantityField'];
else
$reward_points="RP Error";
}
else
{
global $order;
$GlobalRewardPointRatio=GetGlobalRewardPointRatio();
if(isset($_SESSION['cart']))
$reward_points=zen_round($_SESSION['cart']->show_total()*$GlobalRewardPointRatio-REWARD_POINTS_ROUNDING,0);
if(isset($order) && isset($order->info))
if(REWARD_POINTS_ALLOW_TOTAL=='0' && isset($order->info['subtotal']))
$reward_points=zen_round($order->info['subtotal']*$GlobalRewardPointRatio-REWARD_POINTS_ROUNDING,0);
else
if(isset($order->info['total']))
$reward_points=zen_round($order->info['total']*$GlobalRewardPointRatio-REWARD_POINTS_ROUNDING,0);
}
return $reward_points;
}
function GetProductRewardPoints($products_id,$attributes=null)
{
global $db;
$reward_price=0;
if(zen_get_products_price_is_free($products_id)==false || REWARD_POINTS_ALLOW_ON_FREE=='1') // Allow RP on free items (Admin settable)
{
$sql = "SELECT prp.point_ratio*p.products_price AS reward_points, prp.point_ratio, p.products_price, p.products_priced_by_attribute
FROM ".TABLE_REWARD_MASTER." prp, ".TABLE_PRODUCTS." p, ".TABLE_PRODUCTS_TO_CATEGORIES." p2c
WHERE p.products_id='" . $products_id . "'
AND p2c.products_id='" . $products_id . "'
AND ((prp.scope_id=p.products_id AND prp.scope='".SCOPE_PRODUCT."')
OR (p.products_id=p2c.products_id AND prp.scope_id=p2c.categories_id AND prp.scope='".SCOPE_CATEGORY."')
OR (prp.scope='".SCOPE_GLOBAL."'))
ORDER BY prp.scope DESC LIMIT 1;";
$result=$db->Execute($sql);
if($result)
{
if(zen_has_product_attributes($products_id,'false') && !$attributes)
$reward_price=zen_get_products_base_price($products_id);
else
$reward_price=$result->fields['products_price'];
//echo '['.$reward_price.'=';
//print_r($attributes);
//echo ']';
$special_price=zen_get_products_special_price($products_id);
if(REWARD_POINTS_SPECIAL_ADJUST=='1' && $special_price && !$attributes)
$reward_price=$special_price;
// Calculate attribute pricing
//if($result->fields['products_priced_by_attribute']=='1' && $attributes!=null)
if($attributes!=null)
if(isset($attributes[0]['option_id']))
foreach($attributes as $attribute)
$reward_price+=CalculateRewardPointsOnAttribute($products_id,$attribute['option_id'],$attribute['value_id']);
else
foreach($attributes as $option_id => $value_id)
$reward_price+=CalculateRewardPointsOnAttribute($products_id,$option_id,$value_id);
}
}
//echo '::'.$reward_price.', '.$result->fields['point_ratio'].', '.REWARD_POINTS_ROUNDING.'::';
$reward_points=($reward_price*$result->fields['point_ratio'])-REWARD_POINTS_ROUNDING;
if($reward_points<0)
$reward_points=0;
return zen_round($reward_points,0);
}
function CalculateRewardPointsOnAttribute($products_id,$option_id,$value_id)
{
global $db;
if($attribute=$db->Execute("SELECT products_attributes_id, attributes_discounted, options_values_price, price_prefix FROM ".TABLE_PRODUCTS_ATTRIBUTES." WHERE products_id='".$products_id."' AND options_id='".$option_id."' AND options_values_id='".$value_id."';"))
if(REWARD_POINTS_SPECIAL_ADJUST=='1' && $attribute->fields['attributes_discounted']=='1')
$new_attributes_price=zen_get_discount_calc($products_id,$attribute->fields['products_attributes_id'],$attribute->fields['options_values_price'],1);
else
$new_attributes_price=$attribute->fields['options_values_price'];
return ($attribute->fields['price_prefix']=='-'?-$new_attributes_price:$new_attributes_price);
}
function GetRedeemRatio($customers_id)
{
global $db;
$sql = "SELECT redeem_ratio
FROM ".TABLE_REWARD_MASTER." prp, ".TABLE_CUSTOMERS." as c
LEFT JOIN(".TABLE_GROUP_PRICING." as gp) ON (gp.group_id=c.customers_group_pricing)
WHERE c.customers_id='".(int)$customers_id."'
AND ((prp.scope_id='".$customers_id."' AND prp.scope='".SCOPE_CUSTOMER."')
OR (gp.group_id=c.customers_group_pricing AND prp.scope_id=gp.group_id AND scope='".SCOPE_GROUP."')
OR (prp.scope='".SCOPE_GLOBAL."'))
ORDER BY prp.scope DESC LIMIT 1;";
$result=$db->Execute($sql);
if($result)
return $result->fields['redeem_ratio'];
else
return 0;
}
function GetRewardPointsRedeemMaximum($order_total)
{
$redeem_ratio=GetRedeemRatio($_SESSION['customer_id']);
$order_total_points=zen_round($order_total/$redeem_ratio,0);
if((double)REWARD_POINTS_REDEEM_MAXIMUM>0)
if(strpos(REWARD_POINTS_REDEEM_MAXIMUM,"%")!==false)
return zen_round($order_total_points*((double)REWARD_POINTS_REDEEM_MAXIMUM/100),0);
else
if($order_total_points>REWARD_POINTS_REDEEM_MAXIMUM)
return zen_round(REWARD_POINTS_REDEEM_MAXIMUM,0);
return zen_round($order_total_points,0);
}
function GetCustomersRewardPoints($customers_id)
{
$result=GetCustomerRewardPointsRecord($customers_id);
if($result)
return (int)$result->fields['reward_points'];
else
return 0;
}
function GetCustomersPendingPoints($customers_id)
{
$result=GetCustomerRewardPointsRecord($customers_id);
if($result)
return (int)$result->fields['pending_points'];
else
return 0;
}
function GetCustomersLastOrderID($customers_id)
{
global $db;
$orders_lookup_query="SELECT orders_id FROM ".TABLE_ORDERS." WHERE customers_id = '".(int)$customers_id."' ORDER BY orders_id DESC LIMIT 1";
$orders_lookup = $db->Execute($orders_lookup_query);
if(isset($orders_lookup->fields))
return $orders_lookup->fields['orders_id'];
else
return 0;
}
function ExtractNumber($str)
{
if(preg_match("/^[0-9]*[\.]{1}[0-9-]+$/",$str,$match))
return floatval($match[0]);
else
return floatval($str);
}
function GetOrderTotalsArray($called_by)
{
global $order_total_modules;
$order_total_array = array();
$modules=$order_total_modules->modules;
if(is_array($modules))
{
reset($modules);
while (list(,$value)=each($modules))
{
$class=substr($value, 0, strrpos($value, '.'));
if($class!=$called_by && isset($GLOBALS[$class]))
{
$output_backup=$GLOBALS[$class]->output;
if(sizeof($GLOBALS[$class]->output)==0)
$GLOBALS[$class]->process();
for ($i=0, $n=sizeof($GLOBALS[$class]->output); $i<$n; $i++)
if(zen_not_null($GLOBALS[$class]->output[$i]['title']) && zen_not_null($GLOBALS[$class]->output[$i]['text']))
$order_total_array[]=array('code' => $GLOBALS[$class]->code,'title' => $GLOBALS[$class]->output[$i]['title'],'text' => $GLOBALS[$class]->output[$i]['text'],'value' => $GLOBALS[$class]->output[$i]['value'],'sort_order' => $GLOBALS[$class]->sort_order);
$GLOBALS[$class]->output=$output_backup;
}
}
}
return $order_total_array;
}
function GetRewardPointAdvancedCalculateValue()
{
$value=0;
$module_list=GetRewardPointAdvancedCalculateTable();
foreach($module_list as $module)
if($module['action']=="Subtract")
$value-=GetOrderTotalValue($module['module']);
else
$value+=GetOrderTotalValue($module['module']);
return $value;
}
function GetOrderTotalValue($module)
{
global $order;
$value=0;
if(isset($GLOBALS[$module]) && isset($order->info))
{
//print_r($GLOBALS[$module]->output);
//$output_backup=$GLOBALS[$module]->output;
//$order_info_backup=$order->info;
//if(sizeof($GLOBALS[$module]->output)==0)
//$GLOBALS[$module]->process();
for($loop=0;$loop<sizeof($GLOBALS[$module]->output);$loop++)
if(zen_not_null($GLOBALS[$module]->output[$loop]['value']))
$value+=$GLOBALS[$module]->output[$loop]['value'];
//$GLOBALS[$module]->output=$output_backup;
//$order->info=$order_info_backup;
}
return $value;
}
It should work now :smile:
Re: Rounding problem when converting from points to $ in Total Order
I've a question about how it works with attributes.
I've products with attributes that change the price (i.e. Standard - Big (+10.00$) - etc. ) if I select different attributes the Rewarded points on the product pages don't change, yet if I add the product to cart, different attributes will change the price and the points in the cart will change as a result.
Should the points displayed change "on the fly" when i select different attributes? Or am I wrong?
If so, where should i look to find out why It doesen't work for me (i.e. which file care about the "on the fly" update?)?
Thanks
Re: Rounding problem when converting from points to $ in Total Order
Quote:
Originally Posted by
izar74
I've a question about how it works with attributes.
I've products with attributes that change the price (i.e. Standard - Big (+10.00$) - etc. ) if I select different attributes the Rewarded points on the product pages don't change, yet if I add the product to cart, different attributes will change the price and the points in the cart will change as a result.
Should the points displayed change "on the fly" when i select different attributes? Or am I wrong?
If so, where should i look to find out why It doesen't work for me (i.e. which file care about the "on the fly" update?)?
Thanks
Thanks for the code above. It will benefit a lot of people who has the same problem with edit orders.
Your other problem I have no idea why it's not updating. I know there is a module Dynamic Price Updater that will update your price on the fly but it still will not change the points status when using attributes. if someone is inclined to find the problem they can update the module or share the code which adds the fixes, then it will be included..
Re: Rounding problem when converting from points to $ in Total Order
You are welcome countrycharm, the point is that i don't know if it shoud update automatically or not. In a poste i read tha it should.. but i'm not sure.
As regards Dynamic Price Update It only take care of the price not of the Reward points, installing it or not doesn't chane anything.
Re: Rounding problem when converting from points to $ in Total Order
Quote:
Originally Posted by
izar74
You are welcome countrycharm, the point is that i don't know if it shoud update automatically or not. In a poste i read tha it should.. but i'm not sure.
As regards Dynamic Price Update It only take care of the price not of the Reward points, installing it or not doesn't chane anything.
That's what I said............
Quote:
Originally Posted by
countrycharm
Thanks for the code above. It will benefit a lot of people who has the same problem with edit orders.
Your other problem I have no idea why it's not updating. I know there is a module Dynamic Price Updater that will update your price on the fly but it still will not change the points status when using attributes. if someone is inclined to find the problem they can update the module or share the code which adds the fixes, then it will be included..
Maybe someone else will know or help. I haven't the time at the moment to investigate why.
Re: Rounding problem when converting from points to $ in Total Order
quick question here: how can i NOT display the points on the product info page and only have the points calculate during the checkout?
Thank you in advance.