X-Cart: shopping cart software

X-Cart forums (https://forum.x-cart.com/index.php)
-   Dev Questions (https://forum.x-cart.com/forumdisplay.php?f=20)
-   -   Custom Order Status inc Email To Customer and Stock Correction X-Cart 4.5.x (https://forum.x-cart.com/showthread.php?t=64636)

Raptor 08-21-2012 03:34 AM

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

jcorneli 01-26-2013 03:08 PM

Re: Custom Order Status inc Email To Customer and Stock Correction X-Cart 4.5.x
 
You are the man! This worked great on the first try.

I wanted to post to shout out to Phil as well.

Greets to Phil @ www.xcartmods.co.uk

Raptor 07-22-2013 10:53 PM

Re: Custom Order Status inc Email To Customer and Stock Correction X-Cart 4.5.x
 
Tested working with 4.6.2 :)

Raptor 08-15-2013 01:34 PM

Re: Custom Order Status inc Email To Customer and Stock Correction X-Cart 4.5.x
 
Original post updated for 4.6.2 :)

Raptor 08-15-2013 01:52 PM

Re: Custom Order Status inc Email To Customer and Stock Correction X-Cart 4.5.x
 
Original post updated for 4.6.2 :)

Raptor 08-15-2013 02:06 PM

Re: Custom Order Status inc Email To Customer and Stock Correction X-Cart 4.5.x
 
Original post updated for 4.6.2 :)

Thomasb134 03-24-2014 04:54 PM

Re: Custom Order Status inc Email To Customer and Stock Correction X-Cart 4.5.x
 
I applied the Custom Status mod (including the inventory fix in post 6) and found inventory updates still did not work correctly. I made some changes and it now works fine in my V4.4.5 store. I'll share what I found in case others run into inventory accuracy issues like me.

I performed all the updates noted in this disussion. However, I had to modify some of the new code used in the /include/func/func.order.php as follows:

Find Original Code:
Code:

        $send_notification = false;

        if (
            $status == 'P'


Change to:
Code:

        $send_notification = false;

        // 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'



I also had to add some extra code to accommodate some status changes that were missing in the original mod.
Find Original Code:
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 Original Code:
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'
        ) {


Many thanks to those that did all the hard work!

xtech 04-28-2014 09:46 PM

Re: Custom Order Status inc Email To Customer and Stock Correction X-Cart 4.5.x
 
How to bring this order status in order export pack also?

DrQuietus 06-21-2014 03:46 PM

Re: Custom Order Status inc Email To Customer and Stock Correction X-Cart 4.5.x
 
Any idea why this change would make my admin/orders.php page go blank? It goes blank with changes from post #1 and/or the change from post #5. Version 4.6.1 with the reboot skin.

Thomasb134 06-21-2014 05:17 PM

Re: Custom Order Status inc Email To Customer and Stock Correction X-Cart 4.5.x
 
Check your php error logs. The line number that is causing the php problem will probably be noted in the log.

Raptor 07-10-2014 09:43 AM

Re: Custom Order Status inc Email To Customer and Stock Correction X-Cart 4.5.x
 
I have updated the OP to include Thomasb134's fixes (thanks) including a couple more entries I found and consolidated all my other posts so its all in one thread

Tested perfect on X-Cart 4.6.2 :)

totaltec 07-10-2014 10:38 AM

Re: Custom Order Status inc Email To Customer and Stock Correction X-Cart 4.5.x
 
Working in X-cart 4.6.3,Nice job summing this up Raptor. Thanks

cheap eyeglasses 11-06-2015 02:55 PM

Re: Custom Order Status inc Email To Customer and Stock Correction X-Cart 4.5.x
 
does the codes apply to x-cart gold v4.7.4?

totaltec 11-09-2015 05:06 AM

Re: Custom Order Status inc Email To Customer and Stock Correction X-Cart 4.5.x
 
Yes, it should work in 4.7.4. Not much has changed in this area.

Raptor 08-18-2016 06:27 AM

Re: Custom Order Status inc Email To Customer and Stock Correction X-Cart 4.5.x
 
I can't get it to work at all with 4.7.6

Have disabled Custom Order Status as that is not fit for purpose (Refund & Cancelled orders requires putting stock back and sending custom email).

If anyone has any ideas.......

nfc5382 10-08-2016 03:59 PM

Re: Custom Order Status inc Email To Customer and Stock Correction X-Cart 4.5.x
 
I ended up using the Custom Order Statuses mod with 4.7.6. I use an "out of stock - on order" and "discontinued" order status.

When adding a custom status in 4.7.6 a random status code is picked by x-cart. Since I had my own custom statuses from before the store upgrade I just had to update the random status code to match what I had picked previously.

You can figure out what the random status code is through SQL
Code:

select * from xcart_custom_order_statuses;

or by modifying the custom order status tpl to print it out:

Index: skin/common_files/modules/XOrder_Statuses/status_selector.tpl
Code:

    <td align="left">
-      <textarea name="statuses[{$status.statusid}][descr]" cols="45" rows="4">{$status.descr}</textarea>
+      <b>statusid={$status.statusid},code={$status.code}</b> <textarea name="statuses[{$status.statusid}][descr]" cols="45" rows="4">{$status.descr}</textarea>
    </td>


For me, my new status IDs were 9 and 10 and needed codes 'K' and 'S' to match my previous custom status codes. I updated them in SQL:

Code:

update xcart_custom_order_statuses set code='K' where statusid='9';
update xcart_custom_order_statuses set code='S' where statusid='10';


The Custom Order Status module has built-in options for sending emails so I've been using that for customer email notification.


All times are GMT -8. The time now is 01:16 AM.

Powered by vBulletin Version 3.5.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.