Por que o Magento salva novamente os endereços dos clientes existentes durante a finalização da compra?

16

Durante o processo de checkout, mesmo que o cliente selecione o endereço existente no menu suspenso, a customer_addressentidade está sendo salva novamente. Alguma idéia para que?

Atualizar:

Começa Mage_Checkout_Model_Type_Onepage::saveOrderonde o seguinte código é executado:

$service = Mage::getModel('sales/service_quote', $this->getQuote());
$service->submitAll();

Isso submitAllchama Mage_Sales_Model_Service_Quote::submitOrderque executa o seguinte:

$transaction->save();

Este método percorre todos os objetos da citação (?) E os salva.

Atualizar:

O mais repugnante é que eles estão fazendo isso para todos os endereços que o cliente possui. Portanto, se seu visitante conseguir 10 endereços salvos no catálogo de endereços, todos eles serão salvos novamente durante o checkout. Não se pergunte por que é a parte que consome mais recursos do Magento.

user487772
fonte
Na customer_address_entityou na citação?
Matthias Kleine
Desculpe, não sei o que você quer dizer. A customer_addressentidade está sendo salva durante a colocação do pedido. Sem conexão para citar.
User487772
1
Você pode fornecer o código que faz isso? Ele iria me salvar o trabalho de pesquisa
Marius
Atualizado a pergunta.
User487772
@ Tim Acho que a resposta porque eles não pensaram que seria uma resposta aceitável;) Meu palpite é que eles não queriam verificar se o endereço existe, então seria mais fácil / preguiçoso salvar tudo. Apenas um palpite
David Manners

Respostas:

6

Normalmente, a menos que os dados sejam alterados em um modelo, chamar save () não fará com que o modelo seja salvo novamente .
Essa deve ter sido a suposição durante a implementação da lógica dessa maneira.

No entanto, como o método do modelo de endereço de cotação _beforeSave()define o ID da cotação, o ID do cliente e, possivelmente, o ID do endereço do cliente e a same_as_billingpropriedade por meio do _populateBeforeSaveData()método, a proteção contra economia desnecessária é contornada.

Uma solução fácil no método populateBeforeSaveData()seria verificar se os valores a serem definidos no modelo de endereço já estão presentes no modelo atual com o mesmo valor.

Felizmente, os endereços de cotação são armazenados em uma tabela plana, o que significa que o salvamento é bastante eficiente. E, exceto em algumas lojas B2B, não tenho clientes com mais de dois endereços.

Vinai
fonte
2

Eu arriscaria um palpite de que isso não foi pensado.

Talvez se tenha pensado que, em vez de atualizar qualquer novo endereço mais qualquer alteração no endereço de cobrança e envio padrão, seria mais fácil salvar tudo, já que as pessoas não têm tantos endereços e o check-out já é lento, as pessoas não notam .... muito .

Nota: esta é apenas uma ideia, mas achei que vale a pena compartilhar, também posso me imaginar fazendo as mesmas suposições :(

David Manners
fonte
0

o salvamento de endereço durante a finalização da compra é feito por _afterSave () - método no modelo de recursos do cliente.

protected function _afterSave(Varien_Object $customer)
{
    $this->_saveAddresses($customer);
    return parent::_afterSave($customer);
}

como eu me lembro do modelo do cliente ser salvo durante a colocação do pedido.

Felicidades

sbothner_mzentrale
fonte
Sim, isso ficou claro. A pergunta é "Para quê?".
User487772
@ Tim: geral eu acho. Nenhuma razão observável para o caixa eletrônico.
Sbothner_mzentrale
@ Tim: Por exemplo, saveAction in admin precisa desse comportamento.
Sbothner_mzentrale
Para que ele precisa?
User487772