¿Cómo guardar el nombre del cliente para el pago de invitados?

9

El nombre del cliente no se guarda en el módulo onestepcheckout. ¿Hay un paso que perdí al guardar el orden?

$shippingInfo = array(
        'city'=> (string)$shippingAddress->City,
        'country_id' => (string)$shippingAddress->CountryCode,
        'email' => (string)$customerInfo->Email,
        'firstname' => (string)$firstname,
        'lastname' => (string)$lastname,
        'postcode' => (string)$shippingAddress->PostalCode,
        'street' => array(   (string)$shippingAddress->AddressLine1, ),
        'telephone' => (string)$shippingAddress->Phone,
        'use_for_shipping' => '1',
        'name'=>'hello there'
    );
    if(!empty($regionId)){
        $shippingInfo['region_id'] = $regionId;
    }
    else{
        $shippingInfo['region'] = $regionCode;
    }

$quote = $this->getOnepage()->getQuote();  
$quote->collectTotals()->save();
$quote->getBillingAddress()
    ->addData($shippingInfo);

$quote->getShippingAddress()
    ->addData($shippingInfo);
$quote->setCheckoutMethod('guest')
        ->setCustomerId(null)
        ->setCustomerEmail('[email protected]')
        ->setCustomerIsGuest(true)
        ->setCustomerGroupId(Mage_Customer_Model_Group::NOT_LOGGED_IN_ID)->save();
    $this->getOnepage()->saveOrder();
    $this->getOnepage()->getQuote()->save();

ingrese la descripción de la imagen aquí

Vlad Vinnikov
fuente

Respuestas:

9

Lamentablemente no te has perdido un paso. En la plantilla de la sección de administración, /app/design/adminhtml/default/default/template/sales/order/view/info.phtmlpuede ver la llamada a getCustomerName en el pedido.

En la clase de orden, Mage_Sales_Model_Orderla función getCustomerName es la siguiente:

public function getCustomerName()
{
    if ($this->getCustomerFirstname()) {
        $customerName = $this->getCustomerFirstname() . ' ' . $this->getCustomerLastname();
    }
    else {
        $customerName = Mage::helper('sales')->__('Guest');
    }
    return $customerName;
}

Cuando el sistema prepara una cotización de invitado, nunca establece el nombre y el apellido, por lo que nunca se guarda en el pedido:

protected function _prepareGuestQuote()
{
    $quote = $this->getQuote();
    $quote->setCustomerId(null)
        ->setCustomerEmail($quote->getBillingAddress()->getEmail())
        ->setCustomerIsGuest(true)
        ->setCustomerGroupId(Mage_Customer_Model_Group::NOT_LOGGED_IN_ID);
    return $this;
}

Lamentablemente, todos los pedidos de invitados se mostrarán como invitados en la sección de administración. Podrías hacer una de las siguientes cosas aquí.

  1. Si el código no está en el proceso estándar, simplemente use lo siguiente $quote->setCustomerFirstname($firstname)y $quote->setCustomerLastname($lastname).
  2. Refleje la pantalla del correo electrónico del pedido de front end y tome el nombre establecido en la dirección de facturación. $customerName = $this->getBillingAddress()->getName();
  3. Establezca el nombre y apellido del cliente (de la dirección) en la acción sales_order_place_beforeosales_convert_quote_to_order
David modales
fuente
El observador sales_convert_quote_to_order no funciona. probablemente estoy haciendo algo malclass Amazon_Payments_Model_Observer extends Varien_Object { public function salesQuoteSaveAfter($observer) { $order = $observer->getEvent()->getOrder(); $order->setCustomerFirstname('ljslkdfjds'); $order->save();
Vlad Vinnikov
¿Tienes algún error con eso?
David Manners
Llamada a una función miembro getMethodInstance() en un no objeto en app/code/core/Mage/Payment/Model/Observer.php.
Vlad Vinnikov
3

actualizar el código de pago resolvió mi problema: app/code/local/AW/Onestepcheckout/controllers/AjaxController.php

$quote = $this->getOnepage()->getQuote();
$quote->collectTotals()->save();
$quote->getBillingAddress()
        ->addData($shippingInfo);

$quote->getShippingAddress()
        ->addData($shippingInfo);

$quote->setCustomerFirstname('first')->setCustomerLastname('last');
$this->getOnepage()->saveOrder();
$this->getOnepage()->getQuote()->save();
Vlad Vinnikov
fuente