Comment enregistrer le nom du client pour le paiement des invités?

9

Le nom du client n'est pas enregistré dans le module onestepcheckout. Y a-t-il une étape que j'ai manquée dans la sauvegarde de la commande?

$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();

entrez la description de l'image ici

Vlad Vinnikov
la source

Réponses:

9

Malheureusement, vous n'avez pas raté une étape. Dans le modèle de section d'administration, /app/design/adminhtml/default/default/template/sales/order/view/info.phtmlvous pouvez voir l'appel à getCustomerName sur la commande.

Dans la classe d'ordre, Mage_Sales_Model_Orderla fonction getCustomerName est la suivante:

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

Quand un devis client est préparé par le système, il ne définit jamais le prénom et le nom et il n'est donc jamais enregistré dans la commande:

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

Malheureusement, toutes les commandes d'invités seront affichées en tant qu'invités dans la section d'administration. Vous pouvez effectuer l'une des opérations suivantes ici.

  1. Si le code n'est pas dans le processus standard, utilisez simplement les touches $quote->setCustomerFirstname($firstname)et $quote->setCustomerLastname($lastname).
  2. Mettez en miroir l'affichage de l'e-mail de commande frontale et prenez le nom défini dans l'adresse de facturation. $customerName = $this->getBillingAddress()->getName();
  3. Définissez le prénom et le nom du client (à partir de l'adresse) sur l'action sales_order_place_beforeousales_convert_quote_to_order
David Manners
la source
L'observateur sales_convert_quote_to_order ne fonctionne pas. je fais probablement quelque chose de malclass Amazon_Payments_Model_Observer extends Varien_Object { public function salesQuoteSaveAfter($observer) { $order = $observer->getEvent()->getOrder(); $order->setCustomerFirstname('ljslkdfjds'); $order->save();
Vlad Vinnikov
Avez-vous des erreurs avec ça?
David Manners
Appel à une fonction membre getMethodInstance() sur un non-objet dans app/code/core/Mage/Payment/Model/Observer.php.
Vlad Vinnikov
3

la mise à jour du code de paiement a résolu mon problème: 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
la source