Esto se hace combinando su conocimiento de observadores y config.xml. Config.xml administrará la provisión de una definición de atributo personalizado en el elemento de cotización, y un observador se encargará de guardar el atributo del producto en la cotización cuando se agregue a una cotización.
Desde allí, usa config.xml para llamar a la definición del conjunto de campos, que manejará la conversión de quote_item
a order_item
.
Divulgación completa: El contenido a continuación es de Atwix. Enlace debajo de la respuesta.
Al principio, debe agregar un atributo personalizado al
sales->quote->item->product_attributes
nodo:
<sales>
<quote>
<item>
<product_attributes>
<custom_attribute />
</product_attributes>
</item>
</quote>
</sales>
Esto hace que el atributo sea accesible cuando lo copiaremos del producto para cotizarlo, que es nuestro siguiente paso. Para esta tarea se utiliza el observador y se llamará al evento
sales_quote_item_set_product
:
<sales_quote_item_set_product>
<observers>
<yourmodule_customattribute>
<class>yourmodule_customattribute/observer</class>
<method>salesQuoteItemSetCustomAttribute</method>
</yourmodule_customattribute>
</observers>
</sales_quote_item_set_product>
Observador:
public function salesQuoteItemSetCustomAttribute($observer)
{
$quoteItem = $observer->getQuoteItem();
$product = $observer->getProduct();
$quoteItem->setCustomAttribute($product->getCustomAttribute());
}
Lo último que debemos preocuparnos es convertir el atributo de quote_item
a order_item
. Y esto se puede hacer con XML:
<fieldsets>
<sales_convert_quote_item>
<custom_attribute>
<to_order_item>*</to_order_item>
</custom_attribute>
</sales_convert_quote_item>
<sales_convert_order_item>
<custom_attribute>
<to_quote_item>*</to_quote_item>
</custom_attribute>
</sales_convert_order_item>
</fieldsets>
Fuente: Atwix (quien está lleno de victorias): http://www.atwix.com/magento/custom-product-attribute-quote-order-item/