如何在发送到fedex magento之前更改重量?

时间:2015-07-02 13:33:26

标签: magento events magento-1.9 observers fedex

在magento结帐页面中,在提供结算信息和发货信息之后,我知道这些详细信息正在发送到fedex然后运输费率填写在chekout页面中,然后将这些详细信息发送到fedex,我想改变其重量产品,我想为每种产品增加额外的重量,

  

假设用户添加重量为2磅的产品,我想发送   这些重量为2 * 5 = 10磅,我怎么能在magento中做到这一点?请   帮助

2 个答案:

答案 0 :(得分:0)

不确定理解你想要什么,但我会尝试一下。

我认为您可以在本地池和本地方法中覆盖Mage_Checkout_OnepageController :: savePaymentAction方法,发送您自己的新事件' save_payment_action_before'并将您的对象作为参数传递。

在您的fedex模块中,创建一个观察者,获取您的对象并在发送给fedex之前更改订单权重。

要创建自定义活动,请检查this post

答案 1 :(得分:-1)

最后我发现它发生在sales / quote / item.php文件中,有一个名为setProduct的函数,这里我们需要在设置数据时添加附加信息。

public function setProduct($product)
    {

        $batchQty = Mage::getModel('catalog/product')->load($product->getId())->getBatchQty();
        $roleId     = Mage::getSingleton('customer/session')->getCustomerGroupId();
        $userrole   = Mage::getSingleton('customer/group')->load($roleId)->getData('customer_group_code');
        $userrole   = strtolower($userrole);
        if ($this->getQuote()) {
            $product->setStoreId($this->getQuote()->getStoreId());
            $product->setCustomerGroupId($this->getQuote()->getCustomerGroupId());
        }
        if($userrole=="retailer" && $batchQty>0 ){
            $this->setData('product', $product)
            ->setProductId($product->getId())
            ->setProductType($product->getTypeId())
            ->setSku($this->getProduct()->getSku())
            ->setName($product->getName())
            ->setWeight($this->getProduct()->getWeight()*$batchQty)
            ->setTaxClassId($product->getTaxClassId())
            ->setBaseCost($product->getCost())
            ->setIsRecurring($product->getIsRecurring());
        } else {
            $this->setData('product', $product)
            ->setProductId($product->getId())
            ->setProductType($product->getTypeId())
            ->setSku($this->getProduct()->getSku())
            ->setName($product->getName())
            ->setWeight($this->getProduct()->getWeight())
            ->setTaxClassId($product->getTaxClassId())
            ->setBaseCost($product->getCost())
            ->setIsRecurring($product->getIsRecurring());
        }

        if ($product->getStockItem()) {
            $this->setIsQtyDecimal($product->getStockItem()->getIsQtyDecimal());
        }

        Mage::dispatchEvent('sales_quote_item_set_product', array(
            'product' => $product,
            'quote_item' => $this
        ));
        return $this;
    }