Jump to content

automatisch verzenden van tracking nummer door oproep van een class


deech123

Recommended Posts

hi,

 

ik heb een aantal zaken al geprogrammeerd die niet standaard zijn.

zo haal ik 's avonds alle trackingcodes op uit een .csv file, en ga ik deze één voor één gaan updaten in de juiste tabel.

alles werkt, enkel wil ik nu nog weten hoe ik de email MET de trackcode kan verzenden.

 

manueel de trackingcode invullen lukt perfect, de email gaat weg.

maar ik wil dat nu vanuit een PHP pagina oproepen.

 

dit werkt bv al perfect : 

            $order_carrier = new OrderCarrier($id_order_carrier);
            $order_carrier->tracking_number = $shipping_number;
            $order_carrier->update();
 
waar het shipping_number mijn eigen tracking code is van de vervoerder.
 
maar wat moet ik nog meer bijzetten om de email effectief te verzenden?
 
iemand een idee?
 
D.
Link to comment
Share on other sites

  • 1 month later...

Beste MDekker,

 

thx voor dit stukje.

maar wel zie ik dat je het niet zomaar kan gebruiken, je moet dus nml ook nog de variabelen kunnen opvragen en invullen : 

  1. '{followup}' => str_replace('@', $order->shipping_number, $carrier->url),
  2. '{firstname}' => $customer->firstname,
  3. '{lastname}' => $customer->lastname,
  4. '{id_order}' => $order->id,
  5. '{shipping_number}' => $order->shipping_number,
  6. '{order_name}' => $order->getUniqReference()

 

 

dus de vraag is dan, ken jij een class in prestashop waarmee ik aan de hand van het orderid of ordernummer direct die gegevens kan bemachtigen zonder weer 3 of 4 querries te schrijven?

 

thx voor je voorzet alvast !!

Link to comment
Share on other sites

okey....

 

dus met deze  :

$order = new Order($id_order);
$carrier = new Carrier($order->id_carrier);
$customer = new Customer($order->id_customer);

 

haal ik alle nodige gegevens op om die email te kunnen verzenden?

 

ik heb dus enkel het id_order, id_carrier (kan ik eventueel vast zetten want is altijd dezelfde) en dan id_customer nodig.

 

daarna voer ik de lap code uit die jij hierboven schreef om de email te verzenden.... en dat moet volgens jouw lukken?

 

ik ga de proberen...

 

ik hou je op de hoogte.

D.

Link to comment
Share on other sites

Dus dit zou moeten lukken?

 

<?php
$directory =  dirname(__FILE__);
 
$order = new Order(9); // deze variabele haal ik op = Id_order
$carrier = new Carrier(10); // deze variabele haal ik op = Id_order_carrier
$customer = new Customer(1); // deze variabele haal ik op = Id_customer
$orderTrack = '323299950770070483590112'; // dit is bv een track code..
 
/* Update shipping number */
if (Tools::isSubmit('submitShippingNumber') && isset($order)) {
    if ($this->tabAccess['edit'] === '1') {
        $order_carrier = new OrderCarrier(Tools::getValue($carrier));
        if (!Validate::isLoadedObject($carrier)) {
            $this->errors[] = Tools::displayError('The order carrier ID is invalid.');
        } elseif (!Validate::isTrackingNumber(Tools::getValue($orderTrack))) {
            $this->errors[] = Tools::displayError('The tracking number is incorrect.');
        } else {
            // update shipping number
            // Keep these two following lines for backward compatibility, remove on 1.6 version
            $order->shipping_number = Tools::getValue($orderTrack);
            $order->update();
            // Update order_carrier
            $order_carrier->tracking_number = pSQL(Tools::getValue($orderTrack));
            if ($order_carrier->update()) {
                // Send mail to customer
                $customer = new Customer((int)$order->id_customer);
                $carrier = new Carrier((int)$order->id_carrier, $order->id_lang);
                if (!Validate::isLoadedObject($carrier)) {
                    throw new PrestaShopException('Can\'t load Customer object');
                }
                if (!Validate::isLoadedObject($carrier)) {
                    throw new PrestaShopException('Can\'t load Carrier object');
                }
                $templateVars = array(
                    '{followup}' => str_replace('@', $order->shipping_number, $carrier->url),
                    '{firstname}' => $customer->firstname,
                    '{lastname}' => $customer->lastname,
                    '{id_order}' => $order->id,
                    '{shipping_number}' => $order->shipping_number,
                    '{order_name}' => $order->getUniqReference()
                );
                if (@Mail::Send((int)$order->id_lang, 'in_transit', Mail::l('Package in transit', (int)$order->id_lang), $templateVars,
                    $customer->email, $customer->firstname.' '.$customer->lastname, null, null, null, null,
                    _PS_MAIL_DIR_, true, (int)$order->id_shop)) {
                    Hook::exec('actionAdminOrdersTrackingNumberUpdate', array('order' => $order, 'customer' => $customer, 'carrier' => $carrier), null, false, true, false, $order->id_shop);
                    Tools::redirectAdmin(self::$currentIndex.'&id_order='.$order->id.'&vieworder&conf=4&token='.$this->token);
                } else {
                    $this->errors[] = Tools::displayError('An error occurred while sending an email to the customer.');
                }
            } else {
                $this->errors[] = Tools::displayError('The order carrier cannot be updated.');
            }
        }
    } else {
        $this->errors[] = Tools::displayError('You do not have permission to edit this.');
    }
}
 
?>
Link to comment
Share on other sites

Hi ik heb nu deze effen gemaakt in een PHP file, maar die werkt niet :-(

 

enig idee wat ik mis doe?

 

je zal zien dat ik als test de waardes manueel heb ingevuld die echt wel bestaan als order en als carrier etc..

$order = new Order(9);
$id_order_carrier = new Carrier(10);
$customer = new Customer(1);
$tracking_number = '323299950770070483590112';

 

deze lijnen heb ik in commentaar gezet, want ik doe geen submit :-)

/*if (Tools::isSubmit('submitShippingNumber') && isset($order)) {
    if ($this->tabAccess['edit'] === '1') {*/
<?php
echo "TEST";
include(dirname(__FILE__).'/../config/config.inc.php');

$order = new Order(9);
$id_order_carrier = new Carrier(10);
$customer = new Customer(1);
$tracking_number = '323299950770070483590112';

/* Update shipping number */
/*if (Tools::isSubmit('submitShippingNumber') && isset($order)) {
    if ($this->tabAccess['edit'] === '1') {*/
        $order_carrier = new OrderCarrier(Tools::getValue('id_order_carrier'));
        if (!Validate::isLoadedObject($order_carrier)) {
            $this->errors[] = Tools::displayError('The order carrier ID is invalid.');
        } elseif
(!Validate::isTrackingNumber(Tools::getValue('tracking_number'))) {
            $this->errors[] = Tools::displayError('The tracking number is incorrect.');
        } else {
            // update shipping number
            // Keep these two following lines for backward compatibility, remove on 1.6 version
            $order->shipping_number = Tools::getValue('tracking_number');
            $order->update();
            // Update order_carrier
            $order_carrier->tracking_number = pSQL(Tools::getValue('tracking_number'));
            if ($order_carrier->update()) {
                // Send mail to customer
                $customer = new Customer((int)$order->id_customer);
                $carrier = new Carrier((int)$order->id_carrier, $order->id_lang);
                if (!Validate::isLoadedObject($customer)) {
                    throw new PrestaShopException('Can\'t load Customer object');
                }
                if
(!Validate::isLoadedObject($carrier)) {
                    throw new PrestaShopException('Can\'t load Carrier object');
                }
                $templateVars = array(
                    '{followup}' => str_replace('@', $order->shipping_number, $carrier->url),
                    '{firstname}' => $customer->firstname,
                    '{lastname}' => $customer->lastname,
                    '{id_order}' => $order->id,
                    '{shipping_number}' => $order->shipping_number,
                    '{order_name}' => $order->getUniqReference()
                );
                if (@Mail::Send((int)$order->id_lang, 'in_transit', Mail::l('Package in transit', (int)$order->id_lang), $templateVars,
                    $customer->email, $customer->firstname.' '.$customer->lastname, null, null, null, null,
                    _PS_MAIL_DIR_, true, (int)$order->id_shop)) {
                   
Hook::exec('actionAdminOrdersTrackingNumberUpdate', array('order' => $order, 'customer' => $customer, 'carrier' => $carrier), null, false, true, false, $order->id_shop);
                    Tools::redirectAdmin(self::$currentIndex.'&id_order='.$order->id.'&vieworder&conf=4&token='.$this->token);
                } else {
                    $this->errors[] = Tools::displayError('An error occurred while sending an email to the customer.');
                }
            } else {
                $this->errors[] = Tools::displayError('The order carrier cannot be updated.');
            }
        }
   /* } else {
        $this->errors[] = Tools::displayError('You do not have permission to edit this.');
    }
}*/


?>

als ik dit uitvoer krijg ik dit als fout

TEST
Fatal error: Using $this when not in object context in /data/sites/web/testdegrootstebe/www/getftp/trackSend.php on line 15

 

enig idee waar ik de mist inga?

 

thx

Link to comment
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...