atributo del producto para cotizar el artículo y ordenar el artículo

25

¿Cuál es la forma correcta en Magento de hacer que un atributo de producto sea persistido automáticamente para cotizar un artículo y finalmente ordenarlo?

¿Es tan simple como una pequeña configuración XML o es un proceso manual que se analiza antes de guardar eventos, etc.?

Marty Wallace
fuente

Respuestas:

21

una forma sería usar un observador y un convertidor.

el observador debería obtener el atributo del producto a la cotización (usando un atributo llamado 'prueba'), y el convertidor obtiene el atributo de la cotización al pedido.

en su configuración:

<global>
    <fieldsets>
        <sales_convert_quote_item>
            <test>
                <to_order_item>*</to_order_item>
            </test>
        </sales_convert_quote_item>
    </fieldsets>

    <sales>
        <quote>
            <item>
                <product_attributes>
                    <test />
                </product_attributes>
            </item>
        </quote>
    </sales>

    <events>
        <sales_quote_item_set_product>
            <observers>
                <YOUR_MODULE>
                    <class>YOUR_MODULE/observer</class>
                    <method>setTestAttribute</method>
                </YOUR_MODULE>
            </observers>
        </sales_quote_item_set_product>
    </events>
</global>

en tu observador:

public function setTestAttribute(Varien_Event_Observer $observer) {

    $item = $observer->getQuoteItem();
    $product = $observer->getProduct();
    $item->setTest($product->getTest());
    return $this;
}
Laura
fuente
1
¡¡¡Bien hecho!!!.
philwinkle
66
Una advertencia para futuros googlers: elimine manualmente su carpeta de caché antes de probar esto. Pasé muchas horas probando muchas variaciones en esta respuesta, borrando índices y cachés a través del backend. Independientemente de lo que hice, los atributos personalizados no se guardaron en db, pero cambiar el título de quote_item funcionó bien. Hasta que borré el caché manualmente eliminando / var / cache ... ¡Loco!
Maurice
Quiero este atributo personalizado en el panel de back-end y al lado de sku en la página de detalles del pedido de ventas. Sugiera amablemente, ¿cómo lograrlo?
inrsaurabh
21

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_itema 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_attributesnodo:

<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_itema 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/

philwinkle
fuente
2
+1. Siento que yo mismo hice +1. Cuando estaba a punto de presentar algo muy similar, apareció un mensaje: "esta pregunta tiene una nueva respuesta". entonces +1 porque escribes rápido :)
Marius
Jajaja - es Atwix, de verdad.
philwinkle
@philwinkle, lo anterior funciona bien, pero suponga que su atributo personalizado son los puntos del producto dependiendo de la cantidad. Si el producto A tiene 50 puntos y 2 cant., El total de puntos debe ser 50 * 2 = 100. ¿Cómo configuro el valor en 100lugar de 50en el artículo de presupuesto? Si el valor del atributo se actualiza, ¿cómo
guardo