atributo de produto para cotar item e solicitar item

25

Qual é a maneira correta no Magento de manter um atributo de produto automaticamente para citar um item e, finalmente, para solicitar um item?

É tão simples quanto um pequeno XML de configuração ou é um processo manual antes de salvar eventos e assim por diante?

Marty Wallace
fonte

Respostas:

21

uma maneira seria usar um observador e um conversor.

o observador deve obter o atributo do produto na cotação (usando um atributo chamado 'teste') e o conversor obtém o atributo da cotação no pedido.

na sua configuração:

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

no seu observador:

public function setTestAttribute(Varien_Event_Observer $observer) {

    $item = $observer->getQuoteItem();
    $product = $observer->getProduct();
    $item->setTest($product->getTest());
    return $this;
}
Laura
fonte
11
Bem feito!!!.
Philwinkle
6
Um aviso para futuros googlers: exclua manualmente sua pasta de cache antes de testar isso. Passei muitas horas testando muitas variações dessa resposta, limpando índices e caches via back-end. O que quer que eu tenha feito, os atributos personalizados não foram salvos no db, alterando o título do quote_item, no entanto, funcionou bem. Até eu limpar o cache manualmente , excluindo / var / cache ... Louco!
Maurice
Desejo esse atributo personalizado no painel de back-end e ao lado de sku na página de detalhes do pedido de vendas. Por favor, sugira, como conseguir?
inrsaurabh
21

Isso é feito combinando seu conhecimento de observadores e config.xml. O Config.xml gerenciará o fornecimento de uma definição de atributo personalizado no item de cotação e um observador tratará de salvar o atributo do produto na cotação quando adicionado a uma cotação.

A partir daí, você usa o config.xml para chamar a definição de conjunto de campos, que manipulará a conversão de quote_itempara order_item.

Divulgação completa: O conteúdo abaixo é da Atwix. Link abaixo da resposta.

Inicialmente, você deve adicionar atributo personalizado ao sales->quote->item->product_attributesnó:

<sales>
    <quote>
        <item>
            <product_attributes>
                <custom_attribute />
            </product_attributes>
        </item>
    </quote>
</sales>

Isso torna o atributo acessível quando o copiaremos do produto para o item de cotação - que é o próximo passo. Para esta tarefa, o observador é usado e o evento será chamado 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());
}

A última coisa com a qual precisamos nos preocupar - é converter o atributo de quote_itempara order_item. E isso pode ser feito com 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>

Fonte: Atwix (que está cheia de vitórias): http://www.atwix.com/magento/custom-product-attribute-quote-order-item/

philwinkle
fonte
2
+1. Sinto como se tivesse marcado com +1. Quando eu estava prestes a enviar algo muito semelhante, apareceu uma mensagem: 'esta pergunta tem uma nova resposta'. então marque +1 porque você digita rapidamente :)
Marius
Hahaha - na verdade é o Atwix.
philwinkle
@ philwinkle, o acima funciona bem, mas assuma que seu atributo personalizado é o produto, dependendo da quantidade. Se o produto A tiver 50 pontos e 2 quantidades, o total de pontos deve ser 50 * 2 = 100. Como definir valor em 100vez de 50no item de cotação? Se o valor do atributo for atualizado, como faço para salvar esse valor atualizado e não o valor definido pelo admin
Slimshadddyyy