JULY 10 2014: UPDATED TO LATEST 4.6.2 and above - All functions tested 100%
Like many others I require several different custom order status and would also like the customer to be emailed on change of status, and also the option to put the product back in stock. A perfect example of this is Refunds.
After doing some research with regards to older versions I was able to get it working perfectly on my own 4.6.2 (Thanks to Jon & imexhouse in
THIS THREAD) and thanks to Thomasb134 in
THIS POST)
For this example I am going to add a 'Refunded' order status. Of course you can change to whatever you require. I have also hardcoded the Order Status name as opposed to using a label.
Open skin/common_files/main/order_status.tpl
FIND (Around Line 15):
Code:
<option value="I"{if $status eq "I"} selected="selected"{/if}>{$lng.lbl_not_finished}</option>
AFTER ADD:
Code:
<option value="R"{if $status eq "R"} selected="selected"{/if}>Refunded</option>
FIND (Around Line 27):
Code:
{if $status eq "I"}
{$lng.lbl_not_finished}
AFTER ADD:
Code:
{elseif $status eq "R"}
Refunded
Open include/func/func.order.php
FIND (Around Line 1666):
Code:
$allowed_order_status = 'IQPBDFCA';
CHANGE TO:
Code:
$allowed_order_status = 'IRQPBDFCA';
FIND (Around Line 1689):
Code:
$send_notification = false;
if (
$status == 'P'
CHANGE TO:
Code:
$send_notification = false;
// Start Custom Refund Function
// Send email notification to user
if ($status == "R" && $order['status'] != "R") {
$userinfo = $order_data['userinfo'];
$mail_smarty->assign('customer',$userinfo);
$to_customer = ($userinfo['language']?$userinfo['language']:$config['default_customer_language']);
$mail_smarty->assign("products", func_translate_products($order_data["products"], $to_customer));
$mail_smarty->assign("order", $order);
func_send_mail($userinfo['email'], "mail/order_refunded_subj.tpl", "mail/html/order_customer_refunded.tpl", $config['Company']['orders_department'], false); }
// End Custom Refund Function
// Custom Order Status Code, Return Cancelled products to stock
if (
$status == "R"
&& $order['status'] != 'R'
&& $order['status'] != 'F'
&& $order['status'] != 'D'
) {
func_update_quantity($order_data['products'],true);
}
elseif (
$status == 'P'
Find this:
Code:
// Decrease quantity in stock when 'declined' or 'failed' order is became 'completed', 'processed' or 'queued'
if (
$status != $order['status']
&& in_array($order['status'], array('D', 'F'))
&& in_array($status, array('C','P','Q','I','B','X'))
change to
Code:
// Decrease quantity in stock when 'declined' or 'failed' or 'refunded' order is became 'completed', 'processed' or 'queued'
if (
$status != $order['status']
&& in_array($order['status'], array('D', 'F', 'R'))
&& in_array($status, array('C','P','Q','I','B','X'))
FIND:
Code:
} elseif (
in_array($status, array('D','F'))
&& !in_array($order['status'], array('D', 'F'))
CHANGE TO:
Code:
} elseif (
in_array($status, array('D','F', 'R'))
&& !in_array($order['status'], array('D', 'F', 'R'))
FIND:
Code:
} elseif (
$status == 'D'
&& $order['status'] != 'D'
&& $order['status'] != 'F'
) {
CHANGE TO:
Code:
} elseif (
$status == 'D'
&& $order['status'] != 'D'
&& $order['status'] != 'F'
&& $order['status'] != 'R'
) {
FIND:
Code:
} elseif (
$status == 'F'
&& $order['status'] != 'F'
&& $order['status'] != 'D'
) {
CHANGE TO:
Code:
} elseif (
$status == 'F'
&& $order['status'] != 'F'
&& $order['status'] != 'D'
&& $order['status'] != 'R'
) {
FIND:
Code:
if (($status != 'D') && ($status != 'F')) return;
CHANGE TO:
Code:
if (($status != 'D') && ($status != 'F') && ($status != 'R')) return;
Open modules/Advanced_Order_Mangement/func.php
FIND (Around Line 391):
Code:
'I' => func_get_langvar_by_name('lbl_not_finished'),
ADD AFTER:
Code:
'R' => func_get_langvar_by_name('Refunded'),
Then you need to create the email templates and upload to:
skin/common_files/mail/html/order_customer_refunded.tpl
skin/common_files/mail/order_refunded.tpl
skin/common_files/mail/
Here are some example templates:
order_customer_refunded.tpl
Code:
{config_load file="$skin_config"}
{include file="mail/html/mail_header.tpl"}
<br />
<br />{include file="mail/salutation.tpl" title=$customer.title firstname=$customer.firstname lastname=$customer.lastname}
<br />
<br />Your order <b>#{$order.orderid}</b> has been refunded.
<br /><br />
{include file="mail/html/signature.tpl"}
order_refunded.tpl
Code:
{config_load file="$skin_config"}
{include file="mail/mail_header.tpl"}
{include file="mail/salutation.tpl" title=$order.title firstname=$order.firstname lastname=$order.lastname}
Your order #{$order.orderid} has been refunded.
{include file="mail/signature.tpl"}
order_refunded_subj.tpl
Code:
{$config.Company.company_name}: Your order #{$order.orderid} has been refunded
I have tested the above working 100% with v4.6.2 - I hope someone finds it as useful as I have
Greets to Phil @
www.xcartmods.co.uk