cancel
Showing results for 
Search instead for 
Did you mean: 

Magento 2 add custom attributes in quote and order

SOLVED

Magento 2 add custom attributes in quote and order

Bonjour à tous,
Dans ma page détails produit, configurable ou simple, apres le choix de la couleur, de la taille et de la quantité j'ai ajouté un système de customisation du produit. La customisation ne sont pas des attributs produits car ils sont choisi en fonction de l'acheteur.
J'ai donc ajouté dans la table quote_item des attributs longueur, largeur, type, matière, customisation_price_unit, customisation_price_option.
J'ai ajouté un observer sur 'checkout_cart_product_add_before'.
Je récupère bien les éléments dans 'info' mais je n'arrive pas à les ajouter dans la variable 'produit' ce qui fait que lors du add to cart dans ma table quote_item mes champs ajoutés sont vide.
Avez-vous une solution?
Je suis sous Magento 2.4.1
 
Merci d'avance
 
FranckSub
1 ACCEPTED SOLUTION

Accepted Solutions

Re: Magento 2 add custom attributes in quote and order

@Sanjay Jethva 

Merci pour votre solution,

 

J'ai résolu mon problème en modifiant mon observer.

Maintenant j'ai bien tous mes éléments.

 

Merci,

 

FranckSub

View solution in original post

5 REPLIES 5

Re: Magento 2 add custom attributes in quote and order

@francksub 

Here is the solution:

Create events.xml at app\code\Vendor\Extension\etc\

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
    <event name="checkout_cart_product_add_after">
        <observer name="extension_checkout_cart_product_add_after" instance="Vendor\Extension\Observer\CheckoutCartAddObserver" />
    </event>
     <event name="sales_model_service_quote_submit_before">
        <observer name="extesnionadd" instance="Vendor\Extension\Observer\AddOptionToOrderObserver" />
    </event>
</config>
Create CheckoutCartAddObserver.php at app\code\Vendor\Extension\Observer\
namespace Vendor\Extension\Observer;

use Magento\Framework\Event\Observer as EventObserver;
use Magento\Framework\Event\ObserverInterface;
use Magento\Store\Model\StoreManagerInterface;
use Magento\Framework\View\LayoutInterface;
use Magento\Framework\App\RequestInterface;
use Magento\Framework\Serialize\SerializerInterface;

class CheckoutCartAddObserver implements ObserverInterface
{
    protected $layout;
    protected $storeManager;
    protected $request;
    private $serializer;

    public function __construct(
        StoreManagerInterface $storeManager,
        LayoutInterface $layout,
        RequestInterface $request,
        SerializerInterface $serializer
    )
    {
        $this->layout = $layout;
        $this->storeManager = $storeManager;
        $this->request = $request;
        $this->serializer = $serializer;
    }

    public function execute(EventObserver $observer)
    {

        $item = $observer->getQuoteItem();
        $post = $this->request->getPost();


        $additionalOptions = array();
        if ($additionalOption = $item->getOptionByCode('additional_options')) {
            $additionalOptions = $this->serializer->unserialize($additionalOption->getValue());
        }

        $additionalOptions[] = [
            'label' => 'Size',
            'value' => 'XL'
        ];

        if (count($additionalOptions) > 0) {
            $item->addOption(array(
                'product_id' => $item->getProductId(),
                'code' => 'additional_options',
                'value' => $this->serializer->serialize($additionalOptions)
            ));
        }

    }
}
Create AddOptionToOrderObserver.php at app\code\Vendor\Extension\Observer\
<?php

namespace Vendor\Extension\Observer;

use Magento\Framework\Event\ObserverInterface;
use Magento\Framework\Serialize\SerializerInterface;

class AddOptionToOrderObserver implements ObserverInterface
{
    private $serializer;

    public function __construct(
        SerializerInterface $serializer
    )
    {
        $this->serializer = $serializer;
    }

    public function execute(\Magento\Framework\Event\Observer $observer)
    {
        if ($this->helperData->isModuleEnabled()) {
            $quote = $observer->getQuote();
            $order = $observer->getOrder();
            foreach ($quote->getAllVisibleItems() as $quoteItem) {
                $quoteItems[$quoteItem->getId()] = $quoteItem;
            }

            foreach ($order->getAllVisibleItems() as $orderItem) {
                $quoteItemId = $orderItem->getQuoteItemId();
                $quoteItem = $quoteItems[$quoteItemId];
                $additionalOptions = $quoteItem->getOptionByCode('additional_options');
                if (count($additionalOptions) > 0) {
                    $options = $orderItem->getProductOptions();
                    $options['additional_options'] = $this->serializer->unserialize($additionalOptions->getValue());
                    $orderItem->setProductOptions($options);
                }
            }

            return $this;
        }
    }
}
Implementation.png
Problem solved? Click Kudos and "Accept as Solution".
200+ Magento 2 Extensions for Enhanced Shopping Experience.

Re: Magento 2 add custom attributes in quote and order

@Sanjay Jethva 

Merci pour votre solution,

 

J'ai résolu mon problème en modifiant mon observer.

Maintenant j'ai bien tous mes éléments.

 

Merci,

 

FranckSub

View solution in original post

Re: Magento 2 add custom attributes in quote and order

Hello  @francksub ,

please refer to the following link in order to solve this issue

https://www.siphor.com/adding-custom-attributes-to-magento-2-quotes-and-orders/

Hope this helps you!

Problem Solved! Click Kudos & Accept as Solution!



Re: Magento 2 add custom attributes in quote and order

I need same solution in english

Re: Magento 2 add custom attributes in quote and order

Hello,

 

Offering a highly informative checkout page and process to your online customers is essential. Magento 2 Order Attribute is exactly that. This new and special solution allows you to add custom attributes to your online store.

 

Read the full blog:- Order Attribute for Magento 2 To add Custom Field To Order