2

I am building a module that needs to display a second custom price value at all times. I have solved most of what this entails but got stuck with the quite item.

So far i added a column in the quote item table called something like "my_special_price".

I also added the extension attributes to the TotalsItemInterface:

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Api/etc/extension_attributes.xsd">
    <extension_attributes for="Magento\Quote\Api\Data\TotalsItemInterface">
        <attribute code="my_special_price" type="float"></attribute>
    </extension_attributes>
</config>

I then proceded to set the value using a plugin:

    $this->totalsItemExtensionInterface->setMySpecialPrice($item->getData('my_special_price'));

    $result->setData('my_special_price', $item->getData('my_special_price'));
    $result->setExtensionAttributes($this->totalsItemExtensionInterface);

    return $result;

I do this with a around on modelToDataObject which is in the class Magento\Quote\Model\Cart\Totals\ItemConverter.

I also created a class that implements "TotalsItemExtensionInterface" where setMySpecialPrice etc is implemented because of the interface.

Then, when I instantiate \Magento\Checkout\Api\Data\PaymentDetailsInterface and set all the details for that interface(totals, etc) it shows up under:

items[0][_data][extension_attributes(My TotalsItemExtension class)[_data][my_special_price] = 123

I then proceed to return that PaymentDetailsInterface through the API. But the value is not included in the response.

I am obviously doing something wrong here, but what? Some input would be greatly appreciated.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.