La propiedad no tiene el setter correspondiente en la clase Magento \ Quote \ Api \ Data \ AddressInterface mientras cambia el paso de pago

18

1 - Agrego un atributo eav a customer_address

$attributesInfo = [
    'reference' => [
         'label' => 'Reference',
         'type' => 'varchar',
         'input' => 'text',
         'position' => 100,
         'visible' => true,
         'required' => false,
    ],
];

foreach ($attributesInfo as $attributeCode => $attributeParams) {
    $customerSetup->addAttribute('customer_address', $attributeCode, $attributeParams);
}

2 - Agregué el atributo de extensión en mi módulo

<extension_attributes for="Magento\Quote\Api\Data\AddressInterface">
    <attribute code="reference" type="string"/>
</extension_attributes>

En mi requirejs-config.js anulo algún archivo javascript para agregar un campo de referencia

var config = {
"map": {
    "*": {
        "Magento_Checkout/js/model/shipping-save-processor/default" : "Agr_Checkout/js/shipping-save-processor-default-override",
        "Magento_Customer/js/model/customer/address" : "Agr_Checkout/js/model/customer/address",
        "Magento_Checkout/js/model/address-converter" : "Agr_Checkout/js/model/address-converter",
        "Magento_Checkout/js/model/new-customer-address" : "Agr_Checkout/js/model/new-customer-address"
    }
}

3 - Confirmo que el campo de referencia está enviando la dirección

ingrese la descripción de la imagen aquí

4 - Cuando envío mi información de envío (haga clic en Siguiente) obtengo este error: "Referencia de" Propiedad "no tiene el configurador correspondiente en la clase" Magento \ Quote \ Api \ Data \ AddressInterface ".

ingrese la descripción de la imagen aquí

Ya lo hago: - Limpiar y vaciar caché de magento - Ejecutar configuración: actualización - Ejecutar configuración: di: compilar

¿Qué estoy haciendo mal?

allamgr
fuente
¿Funcionó la respuesta a continuación?
Stevie G
Lo resolví mediante la inserción de sql duro, ejecutando un script para actualizar la referencia con address_id, sé que está mal, pero estaba un poco apurado, lo probaré y te daré un comentario más tarde.
allamgr
No creo que se te pueda culpar ... aparentemente solo puedes agregar atributos_personalizados en Enterprise y hasta ahora no he encontrado una forma de "pago fácilmente personalizable".
LM_Fielding
alguna actualización con respecto?
Magento2 Devloper
@allamgr También estoy enfrentando el mismo problema con el nuevo atributo de dirección de cliente. ¿Obtuviste una solución para esto? ¿Puedes compartirme tus pensamientos sobre esto? prnt.sc/iovkp2
Nagaraju K

Respuestas:

1

La configuración de atributos en un script de configuración o actualización de eav funciona mejor y se agregará automáticamente a los formularios a los que solicite agregarlos.

    class InstallData implements InstallDataInterface
    {
        private $_eavSetupFactory;
        private $_eavConfig;
        private $_attributeResource;
        protected $_logger;

        public function __construct(EavSetupFactory $eavSetupFactory, Config $eavConfig, Attribute $attributeResource, Monolog $logger)
        {
            $this->_eavSetupFactory = $eavSetupFactory;
            $this->_eavConfig = $eavConfig;
            $this->_attributeResource = $attributeResource;
            $this->_logger = $logger;
        }

        public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
        {
            $eavSetup = $this->_eavSetupFactory->create(['setup' => $setup]);
            $addressAttributes = [
        'attribute1' => [
            'type' => 'int',
            'label' => 'attribute1',
            'input' => 'text',
            'unique' => true,
            'required' => false,
            'visible' => true,
            'user_defined' => false,
            'position' => 100,
            'system' => false,
            'adminhtml_only' => 0
        ],
        'attribute2' => [
            'type' => 'int',
            'label' => 'attribute2',
            'input' => 'text',
            'required' => false,
            'visible' => true,
            'user_defined' => false,
            'position' => 110,
            'system' => false,
            'adminhtml_only' => 1
        ]
    ];

    $usedInFormsAddress = [
            'adminhtml_customer_address',
            'customer_address_edit',
            'customer_register_address'
        ];

    foreach ($addressAttributes as $code => $options) {
        $eavSetup->addAttribute(
            'customer_address',
            $code,
            $options
        );

        try {
            $attribute = $this->_eavConfig->getAttribute('customer_address', $code);
            $attribute->setData(
                'used_in_forms',
                $usedInFormsAddress
            );
            $this->_attributeResource->save($attribute);
        } catch (LocalizedException $exception) {
            $this->_logger->critical($exception->getMessage());
        } catch (Exception $exception) {
            $this->_logger->critical($exception->getMessage());
        }
    }

ingrese la descripción de la imagen aquí

Este código aquí se agregará a los formularios y no habrá ningún problema al guardar o ir al siguiente paso

$usedInFormsAddress = [
            'adminhtml_customer_address',
            'customer_address_edit',
            'customer_register_address'
        ];

try {
            $attribute = $this->_eavConfig->getAttribute('customer_address', $code);
            $attribute->setData(
                'used_in_forms',
                $usedInFormsAddress
            );
            $this->_attributeResource->save($attribute);
        } catch (LocalizedException $exception) {
            $this->_logger->critical($exception->getMessage());
        } catch (Exception $exception) {
            $this->_logger->critical($exception->getMessage());
        }
djfordz
fuente
0

Intenta configurarlo a través de atributos personalizados.

Ejemplo:

...
 custom_attribute: [{"attribute_code": "reference", "value": "Your value"}]
...
Phoenix128_RiccardoT
fuente
¿Alguna vez conseguiste que esto funcionara o es solo un experimento?
LM_Fielding
Lo tengo funcionando
Phoenix128_RiccardoT
¿Con edición comunitaria? Lo agradecería enormemente, incluso con generosidad si pudieras demostrar cómo.
LM_Fielding
1
Fue con Magento2 Enterprise Edition en un procedimiento de pago de interfaz de usuario separado y personalizado. Tengo que buscar ese código. Es un trabajo antiguo.
Phoenix128_RiccardoT
Muéstrame si lo encuentras, pero no creo que esté disponible.
LM_Fielding
0

¿Cómo pasa el atributo en la solicitud? puedes consultar la consola del navegador así

{
    ...
    extension_attributes: {
         reference: "value"
    }
}

Es correcto. Puede eliminar la carpeta var y la carpeta generada var / cache var / page_cache var / view_proceed y generado / .

Magento2 Devloper
fuente