有人可以帮我在Magento覆盖模型。 不知怎的,我没有完成它。
我有以下代码
本地/ WP / Mstock的/ etc / config.xml中
<?xml version="1.0"?>
<config>
<modules>
<WP_Mstock>
<version>0.1</version>
</WP_Mstock>
</modules>
<global>
<models>
<sales>
<rewrite>
<order_invoice>WP_Mstock_Model_Order_Invoice</order_invoice>
</rewrite>
</sales>
</models>
</global>
</config>
本地/ WP / Mstock /型号/ Invoice.php
<?php
class WP_Mstock_Model_Order_Invoice extends Mage_Sales_Model_Order_Invoice
{
public function register()
{
if ($this->getId()) {
Mage::throwException(Mage::helper('sales')->__('Cannot register existing invoice'));
}
foreach ($this->getAllItems() as $item) {
if ($item->getQty()>0) {
$quantity = $item->getQty();
$product_id = $item->getProductId();
$stock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($product_id);
$stock->setQty($stock->getQty()-$quantity);
$stock->save();
$item->register();
}
else {
$item->isDeleted(true);
}
}
$order = $this->getOrder();
$captureCase = $this->getRequestedCaptureCase();
if ($this->canCapture()) {
if ($captureCase) {
if ($captureCase == self::CAPTURE_ONLINE) {
$this->capture();
}
elseif ($captureCase == self::CAPTURE_OFFLINE) {
$this->setCanVoidFlag(false);
$this->pay();
}
}
} elseif(!$order->getPayment()->getMethodInstance()->isGateway() || $captureCase == self::CAPTURE_OFFLINE) {
if (!$order->getPayment()->getIsTransactionPending()) {
$this->setCanVoidFlag(false);
$this->pay();
}
}
$order->setTotalInvoiced($order->getTotalInvoiced() + $this->getGrandTotal());
$order->setBaseTotalInvoiced($order->getBaseTotalInvoiced() + $this->getBaseGrandTotal());
$order->setSubtotalInvoiced($order->getSubtotalInvoiced() + $this->getSubtotal());
$order->setBaseSubtotalInvoiced($order->getBaseSubtotalInvoiced() + $this->getBaseSubtotal());
$order->setTaxInvoiced($order->getTaxInvoiced() + $this->getTaxAmount());
$order->setBaseTaxInvoiced($order->getBaseTaxInvoiced() + $this->getBaseTaxAmount());
$order->setHiddenTaxInvoiced($order->getHiddenTaxInvoiced() + $this->getHiddenTaxAmount());
$order->setBaseHiddenTaxInvoiced($order->getBaseHiddenTaxInvoiced() + $this->getBaseHiddenTaxAmount());
$order->setShippingTaxInvoiced($order->getShippingTaxInvoiced() + $this->getShippingTaxAmount());
$order->setBaseShippingTaxInvoiced($order->getBaseShippingTaxInvoiced() + $this->getBaseShippingTaxAmount());
$order->setShippingInvoiced($order->getShippingInvoiced() + $this->getShippingAmount());
$order->setBaseShippingInvoiced($order->getBaseShippingInvoiced() + $this->getBaseShippingAmount());
$order->setDiscountInvoiced($order->getDiscountInvoiced() + $this->getDiscountAmount());
$order->setBaseDiscountInvoiced($order->getBaseDiscountInvoiced() + $this->getBaseDiscountAmount());
$order->setBaseTotalInvoicedCost($order->getBaseTotalInvoicedCost() + $this->getBaseCost());
$state = $this->getState();
if (is_null($state)) {
$this->setState(self::STATE_OPEN);
}
Mage::dispatchEvent('sales_order_invoice_register', array($this->_eventObject=>$this, 'order' => $order));
return $this;
}
}
我不知道我做错了什么。我认为这是正确的方法。
谢谢。
GR, 莱克斯
答案 0 :(得分:1)
为了重写,请执行以下操作:
调整模块文件以反映 WP_Sales
以下是它的工作方式:
本地/ WP /销售的/ etc / config.xml中
<?xml version="1.0"?>
<config>
<global>
<models>
<sales>
<rewrite>
<order_invoice>WP_Sales_Model_Order_Invoice</order_invoice>
</rewrite>
</sales>
</models>
</global>
</config>
本地/ WP /销售/型号/ Invoice.php
<?php
class WP_Sales_Model_Order_Invoice extends Mage_Sales_Model_Order_Invoice
{
public function register()
{
if ($this->getId()) {
Mage::throwException(Mage::helper('sales')->__('Cannot register existing invoice'));
}
foreach ($this->getAllItems() as $item) {
if ($item->getQty()>0) {
$quantity = $item->getQty();
$product_id = $item->getProductId();
$stock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($product_id);
$stock->setQty($stock->getQty()-$quantity);
$stock->save();
$item->register();
}
else {
$item->isDeleted(true);
}
}
$order = $this->getOrder();
$captureCase = $this->getRequestedCaptureCase();
if ($this->canCapture()) {
if ($captureCase) {
if ($captureCase == self::CAPTURE_ONLINE) {
$this->capture();
}
elseif ($captureCase == self::CAPTURE_OFFLINE) {
$this->setCanVoidFlag(false);
$this->pay();
}
}
} elseif(!$order->getPayment()->getMethodInstance()->isGateway() || $captureCase == self::CAPTURE_OFFLINE) {
if (!$order->getPayment()->getIsTransactionPending()) {
$this->setCanVoidFlag(false);
$this->pay();
}
}
$order->setTotalInvoiced($order->getTotalInvoiced() + $this->getGrandTotal());
$order->setBaseTotalInvoiced($order->getBaseTotalInvoiced() + $this->getBaseGrandTotal());
$order->setSubtotalInvoiced($order->getSubtotalInvoiced() + $this->getSubtotal());
$order->setBaseSubtotalInvoiced($order->getBaseSubtotalInvoiced() + $this->getBaseSubtotal());
$order->setTaxInvoiced($order->getTaxInvoiced() + $this->getTaxAmount());
$order->setBaseTaxInvoiced($order->getBaseTaxInvoiced() + $this->getBaseTaxAmount());
$order->setHiddenTaxInvoiced($order->getHiddenTaxInvoiced() + $this->getHiddenTaxAmount());
$order->setBaseHiddenTaxInvoiced($order->getBaseHiddenTaxInvoiced() + $this->getBaseHiddenTaxAmount());
$order->setShippingTaxInvoiced($order->getShippingTaxInvoiced() + $this->getShippingTaxAmount());
$order->setBaseShippingTaxInvoiced($order->getBaseShippingTaxInvoiced() + $this->getBaseShippingTaxAmount());
$order->setShippingInvoiced($order->getShippingInvoiced() + $this->getShippingAmount());
$order->setBaseShippingInvoiced($order->getBaseShippingInvoiced() + $this->getBaseShippingAmount());
$order->setDiscountInvoiced($order->getDiscountInvoiced() + $this->getDiscountAmount());
$order->setBaseDiscountInvoiced($order->getBaseDiscountInvoiced() + $this->getBaseDiscountAmount());
$order->setBaseTotalInvoicedCost($order->getBaseTotalInvoicedCost() + $this->getBaseCost());
$state = $this->getState();
if (is_null($state)) {
$this->setState(self::STATE_OPEN);
}
Mage::dispatchEvent('sales_order_invoice_register', array($this->_eventObject=>$this, 'order' => $order));
return $this;
}
}