is it possible to add custom button to order view when tracking number is added?

i have event observer(<sales_order_shipment_save_before>) that adds tracking number to order when button submit shipment has been pressed by admin like this: observer.php:

public function salesOrderShipmentSaveBefore($observer)

        {
    $trackNumber='111111111';
                        $track = Mage::getModel('sales/order_shipment_track')
                                    ->setNumber($trackNumber) 
                                    ->setCarrierCode('mycompany_mycarrier')
                                    ->setTitle('My Carrier'); 
                        $shipment->addTrack($track);

but how can i add custom button to order view after tracking number is added? i know that if use this event <core_block_abstract_to_html_before> and this function in observer.php file:

public function labelButton($observer)
    {
    $block = $observer->getEvent()->getData( 'block' );

                if(get_class($block) =='Mage_Adminhtml_Block_Sales_Order_View'
                    && $block->getRequest()->getControllerName() == 'sales_order')
                {
                    $block->addButton('label', array(
                        'label'     => 'Label',
                        'class'     => 'go'
                    ));
                }

button is added excatly where i need, but i need this button to be visible only if the tracking number is added to order, is it doable? any help would be good. or is there some way that i could make <core_block_abstract_to_html_before> event to happen only if <sales_order_shipment_save_before> event has already happened?

EDIT

ok finally now i am moveing somwhere!

with your suggestion smiggle i edit my code like this:

public function labelButton($observer)
{
    $block = $observer->getEvent()->getData( 'block' );

    if(get_class($block) =='Mage_Adminhtml_Block_Sales_Order_View'
        && $block->getRequest()->getControllerName() == 'sales_order')
    {
        $carrier = $block->getOrder()->getShippingCarrier();
        $order = $block->getOrder();
        $orderIncrementId=$order->getIncrementId();
        $oOrder = Mage::getModel('sales/order')->loadByIncrementId($orderIncrementId);
        $storeID = $oOrder->getData('store_id');
        $shipping = $oOrder->getShippingDescription();

//var_dump($shipping); die();

        if ($carrier instanceof Mage_Shippping_Model_Carrier_Abstract
            && $carrier->isTrackingAvailable()) {
                $block->addButton('label', array(
                   'label'     => 'Label',
                   'class'     => 'go'
                ));
        }
}

with var_dump function i am getting the right shiping description from "Shipping & Handling Information" field in order view, but still how can i get if there is tracking number set in that field? i did not used isTrackingAvailable function in my carrier which i made my self but my carrier extends Mage_Shipping_Model_Carrier_Abstract and also my carrier creates tracking numbers automatically like i mentioned before with <sales_order_shipment_save_before> event, so the problem is, if in that current order customer has chosed my cretaed carrier then isTrackingAvailable function returns false

没有正确的解决方案

许可以下: CC-BY-SA归因
scroll top