Cuando un cliente llega a nuestra tienda y va a pagar varios artículos, necesito escribir un módulo para calcular el envío en función de varios factores. A partir de mi investigación, he determinado que debería ocurrir lo siguiente:
Primero, necesito separar los artículos del carrito en diferentes pedidos para el cálculo del envío. Quiero que los pedidos se ordenen por valor de atributo "vendedor". "Proveedor" es un atributo que agregamos al sistema que se aplica a todos los productos simples. Digamos que en el carrito hay una camisa rosa con el valor de "vendedor" "1", un lápiz con el valor de "vendedor" "1" y una camisa azul con el valor de "vendedor" "2". Todos los artículos con el valor de "proveedor" "1" deben ser un pedido, mientras que el artículo con el valor de "proveedor" "2" debe ser un pedido diferente. Veo que esta otra pregunta responde a este dilema, pero luego plantea otra.
En segundo lugar, necesito calcular el envío con las funciones de envío UPS y Fedex predeterminadas de Magento pero con una dirección de origen determinada por el número de valor del "proveedor" (almacenado en una tabla de base de datos separada). Cualquier sugerencia bienvenida!
Estoy usando fragmentos de código para comenzar desde aquí y aquí .
Probablemente tendré varias preguntas, pero las primeras son las que están en negrita arriba.
ACTUALIZACIÓN Decidí que sería mejor anular el módulo principal de magento de envíos múltiples para hacer lo que estoy tratando de hacer. ¡Por favor, ayúdenme a encontrar dónde y qué poner para manipular la funcionalidad de Magento de multipunto para dividir los artículos de un pedido en envíos basados en el atributo "vendedor"! Estoy luchando con esto.
Respuestas:
Algo a tener en cuenta aquí es que es posible que solo necesite aplicar algunos cambios cosméticos en el front-end a las plantillas de multipunto (
template/checkout/multishipping/
) para que los dos pedidos simplemente aparezcan como un pedido para el cliente. Las plantillasshipping.phtml
yoverview.phtml
dividen los dos pedidos, cada uno con un encabezado (Dirección 1 de 2, etc.) y otra copia para mostrar que son dos pedidos.En lugar del valor predeterminado, podría sugerir ser un poco creativo en estas plantillas para que los dos pedidos simplemente se dividan y aparezcan como dos líneas de pedido separadas.
El siguiente bit sería manejar diferentes orígenes de envío basados en el atributo del proveedor. Esto tal vez podría hacerse en Mage_Shipping_Model_Shipping. Puede ver que en la parte superior es donde Magento está tomando la dirección de origen del envío de la configuración y luego más abajo en el
requestToShipment()
método, los elementos de la dirección de origen se asignan a la solicitud de envío (que supongo que se usaría más adelante dependiendo del método de envío llamado).Esa al menos podría ser una dirección para ir. Al leer su pregunta y su actualización, tengo la impresión de que está haciendo esto más difícil de lo necesario. Recuerde siempre que, en general, es mejor dejar que Magento haga lo que quiere hacer, y solo modifique pequeños bits para manejar sus casos específicos. La mayoría de lo que necesita ya está hecho en el núcleo, por lo que parece un poco tonto reescribir los componentes de envío múltiple cuando puede haber opciones más simples.
fuente
Mage_Shipping_Model_Shipping
que simplemente reemplazarían la dirección de origen en la solicitud de envío con el origen asignado a ese proveedor. Magento luego continuaría con su negocio y retiraría las tarifas de envío que se aplicarían a ese pedido. Posiblemente podría ver que uno de los módulos de envío de WebShopApps es útil aquí, ya que le permite asignar métodos de envío basados en varios criterios. - De nuevo, todo esto es en teoría, no he hecho algo como esto antes, por lo que puede haber algunas advertencias (siempre las hay). -/app/code/core/Mage/Sales/Model/Quote.php
en cuenta que Magento no es tan lineal como otros carritos de compras. Baja por la madriguera del conejo y mira cómo las cotizaciones se cambian a pedidos (y créditos, etc.). En algún momento encontrarás los métodos que deseas modificar. Nuevamente, como dije anteriormente, a menudo es beneficioso simplemente invertir en un módulo de back-end de calidad (y lo más importante, el soporte) que logrará lo que necesita rápidamente. A algunos locos no les gusta que los cambien.