Magento - 自定义扩展程序在管理订单视图页面

时间:2015-05-07 17:33:11

标签: php magento

你好亲爱的社区。

我正在使用Magento 1.9.0.1,我目前正在开发一个自定义扩展程序,我被困在管理员订单视图页面。

让我用图像描述我的问题,这样你就可以更容易了。

以下是创建订单之前页面的屏幕截图(在前端):

enter image description here

以下是管理面板中页面的屏幕截图,您可以在其中查看创建的订单详细信息(在管理面板中):

enter image description here

我的整个问题是扩展程序未在管理订单视图页面中显示SMS Notification金额。正如您在订单视图页面中所看到的,0.50的金额已包含在总计中,但未显示在SMS Notification的行中。

现在我要发布扩展程序的所有文件,我认为可能对解决问题有任何作用。

我在:/store/app/code/community/VivasIndustries/SmsNotification/etc/config.xml:

<?xml version="1.0"?>
<config>
  <modules>
    <VivasIndustries_SmsNotification>
      <version>1.0.0</version>
    </VivasIndustries_SmsNotification>
  </modules>
  <global>
    <models>
        <smsnotification>
            <class>VivasIndustries_SmsNotification_Model</class>
            <resourceModel>vivasindustries_smsnotification_resource</resourceModel>
        </smsnotification>
        <vivasindustries_smsnotification_resource>
        <class>VivasIndustries_SmsNotification_Model_Resource</class>
        <entities>
            <smsnotification>
            <table>VivasIndustries_SmsNotification</table>
            </smsnotification>
            <smsnotificationhistory>
            <table>VivasIndustries_SmsHistory</table>
            </smsnotificationhistory>
        </entities>
        </vivasindustries_smsnotification_resource>
    </models>
    <resources>
        <smsnotification_setup>
            <setup>
                <module>VivasIndustries_SmsNotification</module>
            </setup>
            <connection>
                 <use>core_setup</use>
             </connection>
        </smsnotification_setup>
        <smsnotification_read>
            <connection>
                <use>core_read</use>
            </connection>
        </smsnotification_read>
        <smsnotification_write>
            <connection>
                <use>core_write</use>
            </connection>
        </smsnotification_write>
    </resources>    
    <events>
    <checkout_type_onepage_save_order_after> <!-- identifier of the event we want to catch -->
        <observers>
          <checkout_type_onepage_save_order_after_smsprice_handler> <!-- identifier of the event handler -->
            <type>model</type> <!-- class method call type; valid are model, object and singleton -->
            <class>smsnotification/newordertotalobserver</class> <!-- observers class alias -->
            <method>saveSmspriceTotal</method>  <!-- observer's method to be called -->
            <args></args> <!-- additional arguments passed to observer -->
          </checkout_type_onepage_save_order_after_smsprice_handler>
        </observers>
      </checkout_type_onepage_save_order_after>  
    <checkout_type_multishipping_create_orders_single> <!-- identifier of the event we want to catch -->
        <observers>     
          <checkout_type_multishipping_create_orders_single_smsprice_handler> <!-- identifier of the event handler -->
            <type>model</type> <!-- class method call type; valid are model, object and singleton -->
            <class>smsnotification/newordertotalobserver</class> <!-- observers class alias -->
            <method>saveSmspriceTotalForMultishipping</method>  <!-- observer's method to be called -->
            <args></args> <!-- additional arguments passed to observer -->
          </checkout_type_multishipping_create_orders_single_smsprice_handler>      
        </observers>
      </checkout_type_multishipping_create_orders_single>     
        <sales_order_save_after>
            <observers>
                <vivasindustries_smsnotification>
                    <class>smsnotification/observer</class>
                    <method>orderSaved</method>
                </vivasindustries_smsnotification>
            </observers>
        </sales_order_save_after>
    </events>
     <sales>
        <quote>
            <totals>                
                <smsprice_total>
                    <class>smsnotification/quote_address_total_smsprice</class>
                    <after>subtotal,freeshipping,tax_subtotal,shipping</after>
                    <before>grand_total</before>
                </smsprice_total> 
            </totals>
        </quote>
            <order_invoice>
                <totals>                
                <smsprice_total>
                    <class>smsnotification/order_invoice_total_smsprice</class>
                    <after>subtotal,freeshipping,tax_subtotal,shipping</after>
                    <before>grand_total</before>
                </smsprice_total> 
                </totals>
            </order_invoice>
            <order_creditmemo>
                <totals>                
                <smsprice_total>
                    <class>percentpayment/order_creditmemo_total_smsprice</class>
                    <after>subtotal,freeshipping,tax_subtotal,shipping</after>
                    <before>grand_total</before>
                </smsprice_total> 
                </totals>
            </order_creditmemo>
    </sales>    
    <helpers>
        <smsnotification>
            <class>VivasIndustries_SmsNotification_Helper</class>
        </smsnotification>
    </helpers>
    <blocks>
        <smsnotification>
             <class>VivasIndustries_SmsNotification_Block</class>
        </smsnotification>
    </blocks>
  </global>
  <adminhtml>
    <acl>
        <resources>
            <all>
                <title>Allow Everything</title>
            </all>
            <admin>
                <children>
                    <system>
                        <children>
                            <config>
                                <children>
                                    <vivas>
                                        <title>Vivas - All</title>
                                    </vivas>
                                </children>
                            </config>
                        </children>
                    </system>
                </children>
            </admin>
        </resources>
    </acl>
    <layout>
        <updates>
            <smsnotification>
                <file>smsnotification.xml</file>
            </smsnotification>
        </updates>
    </layout>   
    </adminhtml>
    <admin>
        <routers>
            <adminhtml>
                <args>
                    <modules>
                        <VivasIndustries_SmsNotification before="Mage_Adminhtml">VivasIndustries_SmsNotification_Adminhtml</VivasIndustries_SmsNotification>
                    </modules>
                </args>
            </adminhtml>
        </routers>
    </admin>
    <default>
    <vivas>
        <smspricegroup>                
            <smsprice_name>SMS Notification</smsprice_name>
            <smsprice_fee>0.5</smsprice_fee>            
        </smspricegroup>      
    </vivas>
    </default>
</config>  

我在:/store/app/code/community/VivasIndustries/SmsNotification/Helper/Data.php:

<?php
class VivasIndustries_SmsNotification_Helper_Data extends Mage_Core_Helper_Abstract 
{
    public function formatFee($amount){
         $SmspriceLabel = Mage::getStoreConfig('vivas/smspricegroup/smsprice_name');
         return Mage::helper('smsnotification')->__($SmspriceLabel);
    }
}

我在:/store/app/code/community/VivasIndustries/SmsNotification/Helper/Adminhtml/Data.php:

<?php

class VivasIndustries_SmsNotification_Helper_Adminhtml_Data extends Mage_Adminhtml_Helper_Data 
{
}

我在:/store/app/code/community/VivasIndustries/SmsNotification/Model/Newordertotalobserver.php

<?php
class VivasIndustries_SmsNotification_Model_Newordertotalobserver
{
     public function saveSmspriceTotal(Varien_Event_Observer $observer)
    {
         $order = $observer -> getEvent() -> getOrder();
         $quote = $observer -> getEvent() -> getQuote();
         $shippingAddress = $quote -> getShippingAddress();
         if($shippingAddress && $shippingAddress -> getData('smsprice_total')){
             $order -> setData('smsprice_total', $shippingAddress -> getData('smsprice_total'));
             }
        else{
             $billingAddress = $quote -> getBillingAddress();
             $order -> setData('smsprice_total', $billingAddress -> getData('smsprice_total'));
             }
         $order -> save();
     }

     public function saveSmspriceTotalForMultishipping(Varien_Event_Observer $observer)
    {
         $order = $observer -> getEvent() -> getOrder();
         $address = $observer -> getEvent() -> getAddress();
         $order -> setData('smsprice_total', $shippingAddress -> getData('smsprice_total'));
         $order -> save();
     }
}

我在:/store/app/code/community/VivasIndustries/SmsNotification/Model/Quote/Address/Total/Smsprice.php:

<?php
class VivasIndustries_SmsNotification_Model_Quote_Address_Total_Smsprice extends Mage_Sales_Model_Quote_Address_Total_Abstract
{

     public function __construct()
    {
         $this -> setCode('smsprice_total');
         }   

     public function getSmsPriceStatus()
    {

        $EnableSmsPrice = Mage::getStoreConfig('vivas/smspricegroup/smsprice_active');

        return ($EnableSmsPrice);
    }

     public function collect(Mage_Sales_Model_Quote_Address $address)
    {
         parent :: collect($address);
         $items = $this->_getAddressItems($address);
         if (!count($items)) {
            return $this;
         }
         $quote= $address->getQuote();

        if($this->getSmsPriceStatus())
            {
         $discountAmount = Mage::getStoreConfig('vivas/smspricegroup/smsprice_fee');


            $address->setSmspriceAmount($discountAmount);
            $address->setBaseSmspriceAmount($discountAmount);

            $quote->setSmspriceAmount($discountAmount);     


         //amount definition

         $discountAmount = $quote -> getStore() -> roundPrice($discountAmount);
         $this -> _setAmount($discountAmount) -> _setBaseAmount($discountAmount);
         $address->setData('smsprice_total',$discountAmount);

         return $this;
            }
     }


     public function fetch(Mage_Sales_Model_Quote_Address $address)
    {

         $EnableSmsPrice = Mage::getStoreConfig('vivas/smspricegroup/smsprice_active');
        if($this->getSmsPriceStatus())
            {
         parent :: fetch($address);
         $amount = $address -> getTotalAmount($this -> getCode());
         if ($amount != 0){
             $address -> addTotal(array(
                     'code' => $this -> getCode(),
                     'title' => $this -> getLabel(),
                     'value' => $amount
                    ));
         }

         return $address;
            }
     }

     public function getLabel()
    {   
         $SmspriceLabel = Mage::getStoreConfig('vivas/smspricegroup/smsprice_name');
         return Mage::helper('smsnotification')->__("$SmspriceLabel:");
    }

}

我在:/store/app/code/community/VivasIndustries/SmsNotification/Model/Order/Invoice/Total/Smsprice.php:

<?php
    class VivasIndustries_SmsNotification_Model_Order_Invoice_Total_Smsprice
    extends Mage_Sales_Model_Order_Invoice_Total_Abstract
    {
        public function collect(Mage_Sales_Model_Order_Invoice $invoice)
        {
            $order=$invoice->getOrder();
            $orderDiscountTotal = $order->getSmspriceTotal();
            if ($orderDiscountTotal&&count($order->getInvoiceCollection())==0) {
                $invoice->setGrandTotal($invoice->getGrandTotal()+$orderDiscountTotal);
                $invoice->setBaseGrandTotal($invoice->getBaseGrandTotal()+$orderDiscountTotal);
            }
            return $this;
        }
    }

我在:/store/app/code/community/VivasIndustries/SmsNotification/Model/Order/Creditmemo/Total/Smsprice.php:

<?php
class VivasIndustries_SmsNotification_Model_Order_Creditmemo_Total_Smsprice 
extends Mage_Sales_Model_Order_Creditmemo_Total_Abstract
{
    public function collect(Mage_Sales_Model_Order_Creditmemo $creditmemo)
    {

        return $this;

        $order = $creditmemo->getOrder();
        $orderDiscountTotal        = $order->getSmspriceTotal();

        if ($orderDiscountTotal) {
            $creditmemo->setGrandTotal($creditmemo->getGrandTotal()+$orderDiscountTotal);
            $creditmemo->setBaseGrandTotal($creditmemo->getBaseGrandTotal()+$orderDiscountTotal);
        }

        return $this;
    }
}

我在:/store/app/code/community/VivasIndustries/SmsNotification/Model/Resource/Smsnotification/Collection.php:

<?php 
class VivasIndustries_SmsNotification_Model_Resource_Smsnotification_Collection extends Mage_Core_Model_Resource_Db_Collection_Abstract{
    protected function _construct(){
        $this->_init('smsnotification/smsnotification');    
    }
}

我在:/store/app/code/community/VivasIndustries/SmsNotification/sql/smsnotification_setup/mysql4-install-1.0.0.php:

<?php
$installer=$this;
$installer->startSetup();

$installer->run("
CREATE TABLE IF NOT EXISTS `VivasIndustries_SmsNotification` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `state` varchar(500) NOT NULL,
  `smstext` varchar(500) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `id` (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `VivasIndustries_SmsHistory` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `receiver` varchar(500) NOT NULL,
  `phone` varchar(500) NOT NULL,
  `email` varchar(500) NOT NULL,
  `smstext` text NOT NULL,
  `date` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

    ");

/*$installer->run("

        ALTER TABLE  `".$this->getTable('sales/quote_address')."` ADD  `smsprice_total` DECIMAL( 10, 2 ) NOT NULL;
        ALTER TABLE  `".$this->getTable('sales/order')."` ADD  `smsprice_total` DECIMAL( 10, 2 ) NOT NULL;

        "); */

$installer->addAttribute("quote_address", "smsprice_total", array("type"=>"varchar"));
$installer->addAttribute("order", "smsprice_total", array("type"=>"varchar"));  
$installer->endSetup();
?>

所以这些人都是我认为可能对解决我的问题很重要的文件。如果您需要更多信息,请告诉我。

我希望你能帮我解决问题。提前谢谢!

0 个答案:

没有答案