0

hello based on this thread: add tracking number automatically

i have managed to add tracking numbers to orders when button 'ship' is pressed

but the question is can i make somehow check before adding tracking number? cause i want to add tracking number only to specific shipping method (carrier)

how can i do that?

i have tried to add if statement before adding tracking number like this:

public function salesOrderShipmentSaveBefore($observer)
{
$rate = Mage::getSingleton('checkout/session')->getQuote()->getShippingAddress()->getShippingRatesCollection();
        $method = $rate->getCarrier();
        if ($method == 'mycompany_mycarrier'){
            $trackNumber='123456789';
            $shipment = $observer->getEvent()->getShipment();
            $track = Mage::getModel('sales/order_shipment_track')
                        ->setNumber($trackNumber) 
                        ->setCarrierCode('mycompany_mycarrier')
                        ->setTitle('My Carrier'); 
            $shipment->addTrack($track);
        }

but when i press ship button error says that i am calling undefined method - Mage_Sales_Model_Resource_Quote_Address_Rate_Collection::getCarrier()

maybe there is other way how can i check that it is my carrier and then add tracking number; cause this code adds tracking number but to all orders, all i want is that it add tracking number to my own created shipping method

any help would be great

Community
  • 1
  • 1
user3371961
  • 33
  • 1
  • 8
  • why you are trying to get carrier name from quote object?..order is already placed right??...then access the order object. Hope you can get the chosen shipping method. – Kingshuk Deb Apr 29 '14 at 10:03
  • yes, order is already placed – user3371961 Apr 29 '14 at 14:14
  • i just dont know how to get current order shipping method, so i could add tracking number to my own created shipping carrier only – user3371961 Apr 29 '14 at 14:15
  • i maybe mistaken but order object support only these events: sales_order_load_after sales_order_save_before sales_order_save_after sales_order_delete_before sales_order_delete_after; so as far as i understand then event that i am using: sales_order_shipment_save_before isnt a member of order object supported events; in that case i am lost completaly, how can add tracking number only for those orders which uses my created shipping method when button ship at current order view is pressed by store admin – user3371961 Apr 29 '14 at 14:38
  • Mage::getSingleton('checkout/session')->getQuote()->getShippingAddress()->getShippingRatesCollection(); this code work on the frontend. Its creating object of checkout session which works on frontend. Try getting order object for backend. – Kingshuk Deb Apr 30 '14 at 11:37

3 Answers3

0

Does the method even exist? It tells you that you are missing a piece of code.

Nick Prozee
  • 2,823
  • 4
  • 22
  • 49
  • yes, my shipping method works just fine, and i have set to my carrier file that the carrier code is 'mycompany_mycarrier' – user3371961 Apr 29 '14 at 09:24
  • i can choose my custom method at checkout - all that works just fine, i wonder maybe there is another way how to get information about order - which shipping method is chosed by user – user3371961 Apr 29 '14 at 09:26
0

// After Order Place event

$iOrderId = Mage::getSingleton('checkout/session')->getLastRealOrderId();
$oOrder = Mage::getModel('sales/order')->loadByIncrementId($iOrderId);
$oOrder->getShippingDescription();
Kingshuk Deb
  • 1,700
  • 2
  • 26
  • 40
  • ok now my code look like this: public function salesOrderShipmentSaveBefore($observer) { $iOrderId = Mage::getSingleton('checkout/session')->getLastRealOrderId(); $oOrder = Mage::getModel('sales/order')->loadByIncrementId($iOrderId); $oOrder->getShippingDescription(); if ($oOrder == 'My Carrier- My Method'){ $trackNumber='123456789'; $shipment = $observer->getEvent()->getShipment(); $track = Mage::getModel('sales/orde /..the same code../ $shipment->addTrack($track); } } – user3371961 Apr 29 '14 at 10:35
  • now i dont have any error but tracking number is not added, i wonder is if ($oOrder == 'My Carrier- My Method') right? it is the same that i have uner Shipping & Handling Information or should i writte something else? what exactly contains Shipping Description? – user3371961 Apr 29 '14 at 10:36
  • is that observer running just after placing an order? – Kingshuk Deb Apr 29 '14 at 10:45
  • here is my observer config file code: singleton MyCompany_MyCarrier_Model_Observer salesOrderShipmentSaveBefore – user3371961 Apr 29 '14 at 11:35
  • i think my answear to your question is yes – user3371961 Apr 29 '14 at 11:37
  • its NO..its not running after order place.. like that – Kingshuk Deb Apr 29 '14 at 15:03
  • shipment can be saved only after order is placed, the event is when admin push ship button to the order; then order is already placed, othervise you cannot push ship button to the order – user3371961 Apr 30 '14 at 07:12
  • maybe i wasnt clear - i need to add tracking number when button 'ship' is pressed and that is event – user3371961 Apr 30 '14 at 07:41
  • Then you will not get proper value using this code. This code can work just after order place. When you ship your order then maybe another order already get placed because you cant ship an order right after the order place. right?? – Kingshuk Deb Apr 30 '14 at 11:35
  • This can help you..http://inchoo.net/ecommerce/magento/magento-orders/automatically-invoice-ship-complete-order-in-magento/ ..you can get idea from this – Kingshuk Deb Apr 30 '14 at 11:40
0

solved my problem, the Observer.php:

public function salesOrderShipmentSaveBefore($observer)
    {
            $trackNumber='987654321';
            $shipment = $observer->getEvent()->getShipment();
            $order = $shipment->getOrder();
            $orderIncrementId=$order->getIncrementId();

            $oOrder = Mage::getModel('sales/order')->loadByIncrementId($orderIncrementId);
            $shipping = $oOrder->getShippingDescription();

            if($shipping =='My Carrier - My Method')
            {
                $track = Mage::getModel('sales/order_shipment_track')
                            ->setNumber($trackNumber) 
                            ->setCarrierCode('mycompnay_mycarrier')
                            ->setTitle('My Carrier'); 
                $shipment->addTrack($track);
            }
    }

now everything works just like i wanted, the tracking number is added to my shipping carrier only. Thank you Kingshuk Deb, you were right since the begining, i just didnt understood that.

user3371961
  • 33
  • 1
  • 8