2012-07-26 52 views
4

我已經花了兩天時間,我覺得我已經嘗試過所有的東西,但我仍然一直在撞牆。如何將報價屬性轉換爲在Magento中訂購?

我有兩個屬性(module_job_id,module_channel_id),我想添加到報價和訂單。我設法得到的是報價屬性工作正常,我可以看到他們存儲在數據庫中,他們可以很好地檢索。

唯一剩下的就是將價格從報價轉移到訂單。我究竟做錯了什麼?

這是我的模塊配置文件:

<?xml version="1.0" encoding="UTF-8"?> 
<config> 

    <modules> 
     <Company_Module> 
      <version>0.1.9</version> 
     </Company_Module> 
    </modules> 

    <global> 
     <fieldsets> 
      <sales_convert_quote> 
       <module_job_id> 
        <to_order>*</to_order> 
       </module_job_id> 

       <module_channel_id> 
        <to_order>*</to_order> 
       </module_channel_id> 
      </sales_convert_quote> 
     </fieldsets> 

     <resources> 
      <company_module> 
       <setup> 
        <module>Company_Module</module> 
        <class>Mage_Sales_Model_Mysql4_Setup</class> 
       </setup> 
       <connection> 
        <use>core_setup</use> 
       </connection> 
      </company_module> 
     </resources> 

    </global> 
</config> 

安裝文件SQL/company_module/mysql4安裝-0.1.0.php:

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

    $installer->getConnection()->addColumn($installer->getTable('sales/quote'), 'module_job_id', 
     'VARCHAR(255) NULL DEFAULT NULL'); 
    $installer->getConnection()->addColumn($installer->getTable('sales/quote'), 'module_channel_id', 
     'VARCHAR(255) NULL DEFAULT NULL'); 

    $installer->getConnection()->addColumn($installer->getTable('sales/order'), 'module_job_id', 
     'VARCHAR(255) NULL DEFAULT NULL'); 
    $installer->getConnection()->addColumn($installer->getTable('sales/order'), 'module_channel_id', 
     'VARCHAR(255) NULL DEFAULT NULL'); 

    $installer->addAttribute('order', 'module_job_id', array('type' => 'varchar')); 
    $installer->addAttribute('quote', 'module_job_id', array('type' => 'varchar')); 

    $installer->addAttribute('order', 'module_channel_id', array('type' => 'varchar')); 
    $installer->addAttribute('quote', 'module_channel_id', array('type' => 'varchar')); 

    $installer->endSetup(); 

我試過的addAttribute的所有可能的組合和addColumns在安裝文件中。結果是我在sales_flat_quote和sales_flat_order中都有兩個屬性作爲列。但是,沒有任何屬性在eav_attribute中。我不確定是否可以。

我試過的另一件事是在sales_convert_quote_to_order觀察者中顯式設置order屬性值。這不起作用:

public function salesConvertQuoteToOrder($observer) 
{ 
    $order = $observer->getEvent()->getOrder(); 

    $order->setModuleJobId('123'); 
    $order->setModuleChannelId('456'); 
} 

我不知道這是否是重要的,但這些都是我的系統(僅順序,無報價...)的實體類型:

mysql> SELECT entity_type_id, entity_type_code FROM eav_entity_type; 
+----------------+------------------+ 
| entity_type_id | entity_type_code | 
+----------------+------------------+ 
|    3 | catalog_category | 
|    4 | catalog_product | 
|    7 | creditmemo  | 
|    1 | customer   | 
|    2 | customer_address | 
|    6 | invoice   | 
|    5 | order   | 
|    8 | shipment   | 
+----------------+------------------+ 

而且,eav_entity是空的。我也希望這也可以。

mysql> select * from eav_entity; 
Empty set (0.00 sec) 

這是在Magento 1.6.2.0上。感謝堆!

回答

6

在Magento 1.6.2.0上,訂單保存在sales_flat_order上&報價保存在sales_flat_quote上。他們不再使用eav結構AFAIK,所以我會說這沒關係。你應該看一看類Mage_Sales_Model_Convert_Quote並添加調試代碼:

public function toOrder(Mage_Sales_Model_Quote $quote, $order=null) 
{ 
    if (!($order instanceof Mage_Sales_Model_Order)) { 
     $order = Mage::getModel('sales/order'); 
    } 
    /* @var $order Mage_Sales_Model_Order */ 

    $order->setIncrementId($quote->getReservedOrderId()) 
     ->setStoreId($quote->getStoreId()) 
     ->setQuoteId($quote->getId()) 
     ->setQuote($quote) 
     ->setCustomer($quote->getCustomer()); 

    Mage::helper('core')->copyFieldset('sales_convert_quote', 'to_order', $quote, $order); 

    Mage::dispatchEvent('sales_convert_quote_to_order', array('order'=>$order, 'quote'=>$quote)); 

    //I add my debug code here using Mage::log, you can debug using your own method 
    Mage::log($order->getData()); 

    return $order; 
} 

要查看module_job_id和module_channel_id是否設置了那裏。

1

請檢查以下代碼對我有用(但我的Magento安裝是1.7.0.2)。我認爲問題出在你的模型資源上。

應用程序/代碼/本地/決賽/測試的/ etc/config.xml中

<?xml version="1.0" encoding="UTF-8" ?> 
<config> 
<modules> 
    <Final_Test> 
     <version>0.0.1</version> 
    </Final_Test> 
</modules> 
<frontend> 
    <routers> 
     <test> 
      <use>standard</use> 
      <args> 
       <module>Final_Test</module> 
       <frontName>test</frontName> 
      </args> 
     </test> 
    </routers> 
</frontend> 
<global> 
    <models> 
     <test> 
      <class>Final_Test_Model</class> 
      <resourceModel>test_resource</resourceModel> 
     </test> 
     <test_resource> 
      <class>Final_Test_Model_Resource</class> 
      <deprecatedNote>test_mysql4</deprecatedNote> 
     </test_resource> 
    </models> 
    <resources> 
     <test_setup> 
      <setup> 
       <module>Final_Test</module> 
       <class>Final_Test_Model_Resource_Setup</class> 
      </setup> 
     </test_setup> 
    </resources> 
    <fieldsets> 
     <sales_convert_quote> 
      <final_test1> 
       <to_order>*</to_order> 
      </final_test1> 
      <final_test2> 
       <to_order>*</to_order> 
      </final_test2> 
     </sales_convert_quote> 
     <sales_convert_order> 
      <final_test1> 
       <to_quote>*</to_quote> 
      </final_test1> 
      <final_test2> 
       <to_quote>*</to_quote> 
      </final_test2> 
     </sales_convert_order> 
    </fieldsets> 
</global> 
</config> 

安裝人員應Mage_Sales_Model_Resource_Setup的一個實例,所以我創建了自己的類,它僅僅簡單地擴展上述類

app/code/local/Final/Test/Model/Resource/Setup。PHP

<?php 
    class Final_Test_Model_Resource_Setup extends Mage_Sales_Model_Resource_Setup{ 

    } 
?> 

最後我的安裝腳本是某事像這樣

應用程序/代碼/本地/決賽/測試/ SQL/test_setup /安裝-0.0.1.php

<?php 
$installer=$this; 
$installer->startSetup(); 
$entitiesToAlter = array('quote','order'); 
$attributes = array(
    'final_test1' => array(
     'type' => Varien_Db_Ddl_Table::TYPE_INTEGER, 
     'default' =>5 
     ), 
    'final_test2' => array(
     'type' => Varien_Db_Ddl_Table::TYPE_INTEGER, 
     'default' =>0 
     ) 
    ); 

foreach ($entitiesToAlter as $entityName) { 
    foreach ($attributes as $attributeCode => $attributeParams) { 
     $installer->addAttribute($entityName, $attributeCode, $attributeParams); 
    } 
} 
$installer->endSetup(); 
?> 

您可以參考Mage_Sales_Model_Resource_Setup和Mage_Sales模塊安裝程序文件,在它的sql文件夾下更好地瞭解正在發生的事情