View Single Post
  #1  
Old 08-21-2012, 03:34 AM
  Raptor's Avatar 
Raptor Raptor is offline
 

Senior Member
  
Join Date: Jan 2006
Posts: 127
 

Thumbs up Custom Order Status inc Email To Customer and Stock Correction X-Cart 4.5.x

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
__________________
X-Cart v4.17.12
ReBOOT ReDUX
Reply With Quote