Durante el proceso de pago, incluso si el cliente selecciona el formulario de dirección existente, el menú desplegable de la customer_address
entidad se está volviendo a guardar. ¿Alguna idea de para qué?
Actualizar:
Comienza en Mage_Checkout_Model_Type_Onepage::saveOrder
donde se ejecuta el siguiente código:
$service = Mage::getModel('sales/service_quote', $this->getQuote());
$service->submitAll();
Esto submitAll
llama Mage_Sales_Model_Service_Quote::submitOrder
que ejecuta lo siguiente:
$transaction->save();
Este método recorre todos los objetos de la cita (?) Y los guarda.
Actualizar:
Lo más desagradable es que lo están haciendo para todas las direcciones que tiene el cliente. Entonces, si su visitante obtiene 10 direcciones guardadas en la libreta de direcciones, todas se volverán a guardar durante el pago. No se pregunte por qué es la parte más consumidora de recursos de Magento.
customer_address_entity
o en la cita?customer_address
entidad se guarda al realizar el pedido. No hay conexión para cotizar.Respuestas:
Usualmente, a menos que los datos hayan cambiado en un modelo, llamar a save () en él no hará que el modelo se vuelva a guardar .
Esta debe haber sido la suposición durante la implementación de la lógica de esta manera.
Sin embargo, dado que el método del modelo de dirección de presupuesto
_beforeSave()
establece la ID de cotización, la ID de cliente, más posiblemente la ID de dirección de cliente y lasame_as_billing
propiedad a través del_populateBeforeSaveData()
método, se evita la protección contra el ahorro innecesario.Una solución fácil en el método
populateBeforeSaveData()
sería verificar si los valores a punto de establecerse en el modelo de dirección ya están presentes en el modelo actual con el mismo valor.Afortunadamente, las direcciones de cotizaciones se almacenan en una tabla plana, lo que significa que guardar es bastante eficiente. Y a excepción de algunas tiendas B2B, no he experimentado clientes que tengan más de un par de direcciones.
fuente
Me arriesgaría a adivinar que esto no fue pensado.
Tal vez se pensó que, en lugar de actualizar cualquier dirección nueva más cualquier cambio en la dirección de facturación y envío predeterminada, sería más fácil guardar todo, ya que las personas no tendrán tantas direcciones y el pago ya es lento, la gente no se dará cuenta ... mucho .
Nota: esta es solo una idea, pero pensé que valía la pena compartirla, también me imagino haciendo las mismas suposiciones :(
fuente
el guardado de direcciones durante el pago se realiza mediante _afterSave () - Método en el modelo de recursos del cliente.
Como recuerdo, el modelo del cliente se guarda durante el pedido.
salud
fuente