Inicio de sesión

Aprende Drupal

Suscríbete para recibir por email el nuevo contenido de Aprende Drupal con E-duca.eu.
Disfrutarás aprendiendo Drupal.

Introduce tu email:

Delivered by FeedBurner

copiar orden

Cómo copiar una orden (pedido) de ubercart desde otra existente, para Drupal 6

 

Usaremos el siguiente código que nos mostrará un formulario donde nos pide la orden origen que copiaremos. Este código podemos tener guardado en una página de Drupal.

El script nos generará una nueva orden con el último número de orden disponible y todos los datos incluidos los productos que tuviera la orden original, el estado lo deja como pendiente pero puede ser variado facilmente, así como particular el código para cada caso.
Muy útil para no tener que crear ordenes desde cero y aprovechar ordenes que ya tenemos creadas para crear la nueva. Por ejemplo en el caso de ordenes que se necesitan crear periódicamente y que serán exactamente iguales que la anterior.
 
El ejemplo nos sirve muy bien para ver como podemos usar php para personalizar el funcionamiento de nuestro sitio Drupal o hacer rápidas tareas de administración.
 
<form method="post">
<input type="text" name="order_id">
<input type="submit">
</form>
<?php
    if(isset($_POST['order_id'])){
        $order_id = $_POST['order_id'];
        $order = uc_order_load($order_id);
        if($order)
        {
            //create new order in db
            $new_order = uc_order_new($order->uid);
            
           //hack in the products for the new order
           $i=0;
           foreach($order->products as $product) {
                $insert = new StdClass();
                uc_order_product_save($new_order->order_id, $insert);
                $order->products[$i]->order_product_id = $insert->order_product_id;
                $order->products[$i]->order_id = $new_order->order_id;
                uc_order_product_save($new_order->order_id, $order->products[$i]);
                $i++;
            }
 
            //hack in the line items for the new order
            $i=0;
            foreach($order->line_items as $line_item) {
                if($i!=0){
                    uc_order_line_item_add($new_order->order_id,$order->line_items[$i]->type,$order->line_items[$i]->title,$order->line_items[$i]->amount,$order->line_items[$i]->weight);
                    $order->line_items[$i]->line_item_id = mysql_insert_id();
                }
                $i++;
            }
            
            $order->order_id = $new_order->order_id;
            $order->order_status = "in_checkout";
            
            //save newly created order
            uc_order_save($order);
            
            //Now charge the card
            //uc_cim_charge($new_order->order_id, $order->order_total);
            
            $order = uc_order_load($new_order->order_id);
            //update the status
            $order->order_status = "pending";
            uc_order_save($order);
            
            echo
 
"<p>Order <strong>".$order->order_id."</strong> created as a duplicate of <strong>$order_id</strong><br/></p>";
            echo "<pre style='font-size:10px;'>";
            var_dump($order);
            echo "</pre>";
            
        } else {
            
            echo "could not load previous order details";
        
        }
    }
?>