Jump to content

Welcome, Guest!

By registering with us, you'll be able to discuss, share and private message with other members of our community.

MichaelEZ

Change order state fast and simple

Recommended Posts

Simple and fast - Create file order_status.php: 

<?php $allow = array("192.168.0.1", "192.168.0.2", "192.168.0.3"); //allowed IPs

if(!in_array($_SERVER['REMOTE_ADDR'], $allow) && !in_array($_SERVER["HTTP_X_FORWARDED_FOR"], $allow)) {

    header("Location: http://youraddress.com"); //redirect

    exit();
}

require(dirname(__FILE__).'/config/config.inc.php');

if(isset($_GET['data'])){
       
 		$name = $_GET['data']; 
  
        $new_order_state = 34;

 		 $get_orders = array();
         array_push($get_orders,$name);

  
        foreach ($get_orders as $orders) {
            $order = new Order($orders);
            $_state = (int) $order->current_state;
            if ($_state == $new_order_state)
                {Continue;}
            elseif ($_state == 33 )
                { 
                    $history  = new OrderHistory();
                    $history->id_order = (int)$order->id;
                    $history->changeIdOrderState((int) $new_order_state, $order->id);
            
                    if ($history->save()) 
                        {echo '<div class="ok-status"> OK -  '.$orders.'  </div><br />';} 
                    else 
                        {echo '<div class="nok-status"> Error -  '.$orders.' </div><br />';}
             } 
          }

 } else {
      $name = "Empty";
 }

?>
<style>
.ok-status	{  font-weight: 600; font-size: 50px; line-height: 60px; color: green;  }	
.nok-status	{  font-weight: 600; font-size: 50px; line-height: 60px; color: red;  }	
.send-input 	{ height: 65px; width: 300px; font-weight: 600; font-size: 50px; line-height: 60px; }
.send-button 	{ height: 65px; width: 150px; font-weight: 600; font-size: 50px; line-height: 60px; background-color: #0093d4;}
</style>

<?php
echo "<form method='get' name='form' action='order_status.php'>
       <input type='text' placeholder='ID ...' id='focus'  class='send-input' maxlength='6' minlength='6'  name='data'>
       <input type='submit' class='send-button' value='OK'> </form>";

?>

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script>

<script>
$(document).ready(function(){
    $('#focus').focus();
  });
$("body").click(function(){
   $('#focus').focus();
});
</script>

<?

On top u can allow access only to your IP.

So  $new_order_state = 34;  ( here u set up new state with id, u can look it up in backend - orders - statuses ), next u can edit this part:   elseif ($_state == 33 ) ( so for me it means it wont update state to 34 if original state wasnt 33 u can change it by yourself - for example: elseif ($_state != 33 )  means it update every order but with state 33 and so on.. )

Style - customize as u wish

Form part, u can also carefully edit it by yourself, we have orders with id 160000+ so i set up max a min length to 6 characters. (action calls to itself so same as we named our file - order_status.php )

Next we call jquery and few simple lines to autofocus input after realod and by clicking on body.

Save file and upload it to root of yr TB - to access script just type /order_status.php after yr domain.  (we use iframe in prestato display it on dashboard and etc )

image.png.ca48ce2f9e3703e6a8d44774a30b9f17.png      image.thumb.png.21242ebbc261c2625684b188c2a9e7b0.png 

We use barcode scanner to scan id from invoice, then u dont have to type, u just scan, scan, scan,... Thats it 😉  

I do recomment testing it on your demo / test first..

 

  

  • Like 1
  • Thanks 2

Share this post


Link to post
Share on other sites

Thanks a lot for your contribution! 😎 I always love to see, when other merchants are improving things with custom code 👍

We have very similair functions as we also work with barcode scanners. I have not tested your code, but I would strongly recommend you, to add it as ModuleAdminController and not with such an external file. By that you gain already security as it will be only available if the user is logged in.

 

Codewise this looks a bit unsecure on overcomplicate to me.

$name = $_GET['data']; 
  
$new_order_state = 34;

$get_orders = array();
array_push($get_orders,$name);


foreach ($get_orders as $orders) {
}

 

As far as I understand, you scan one code after another. If this is true, you wouldn't need any foreach loop. You could then very simply to this:

$id_order = (int)$_GET['data']; // Note the (int) does improve security
$order = new \Order($id_order)

// Continue with your stuff

 

Maybe this helps you a little bit 😊

  • Like 2
  • Thanks 1

Share this post


Link to post
Share on other sites

Hi, ty and those are just minor tweaks that make our live here easier.

Well before it was used to change lots of them at once hence that code, but thank you, gona update it and add ModuleAdminController as u recommended 😉 

  • Like 1

Share this post


Link to post
Share on other sites
3 hours ago, MichaelEZ said:

add ModuleAdminController as u recommended

that's indeed a very good idea, as it offers much better protection than the IP address check. It also ensures that the employee context is properly initialized -- that's important for logging, error handling, etc.

And since you extract the logic to the admin controller, you can also wrap it all into a small useful module and offer it to the community 🙂

  • Like 2
  • Thanks 1

Share this post


Link to post
Share on other sites

Yes, wrapping it in a module would be awesome. 🙂 Happy to help test the module.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...