2011-12-28 50 views
3

我的自定义装运模块失败,因为在后台编辑订单时无法获得销售报价。这是我正在使用的代码:检查订单是否被管理员编辑?

class Mymodule_Model_Mycarrier_Customrate 
    extends Mage_Shipping_Model_Carrier_Abstract 
     implements Mage_Shipping_Model_Carrier_Interface 
{ 
    public function collectRates(Mage_Shipping_Model_Rate_Request $request) 
    { 
     $quote = Mage::getSingleton('checkout/type_onepage')->getQuote(); 

我需要获取当前的报价,因此我有权访问地址信息。我正在提出一个需要街道地址的API请求。

现在,如果在后台编辑订单,这显然会导致错误,因为结帐单例不再相关。相反,我得到的报价是这样的:

$quote = Mage::getSingleton('adminhtml/session_quote')->getQuote(); 

在我collectRates()方法,我需要确定要装入的单。首先,我要问,如果这是做事的正确方法,并且如果我的后台检查就足够了:

$quote = Mage::getSingleton('checkout/type_onepage')->getQuote(); 

// If admin is editing an order, find the quote by admin session. 
if(Mage::getSingleton('admin/session')->isLoggedIn()){ 
    $quote = Mage::getSingleton('adminhtml/session_quote')->getQuote(); 
} 

我不希望这以后可能会出现问题。如果我必须创建一个像这样的解决方法,我也会觉得我可能会使用collectRates()方法。

回答

1

Mage_Shipping_Model_Rate_Request对象已经通过$request->getDestStreet()访问地址,等...

+0

谢谢,我不知道我怎么错过了! 1.6.1中的默认UPS模块(Mage_Usa_Model_Shipping_Carrier_Ups)在XML请求中没有使用目的地街道地址,因此我没有使我感到奇怪,因为我无法以这种方式访问​​街道。干杯。 – 2011-12-30 03:00:31