¿Se puede configurar Magento de manera que las vistas de varias tiendas del mismo sitio web puedan compartir el mismoincrement_id
rango de números de pedido ? Y si es así, ¿cómo?
Por ejemplo, con una configuración de varios pisos como esta en core_store
:
store_id code website_id group_id
0 admin 0 0
1 alpha 1 1
2 bravo 2 2
3 charlie 2 2
Ahora delta
se agrega una nueva vista de la tienda :
store_id code website_id group_id
4 delta 1 1
Suponiendo que alpha
el último ID de incremento de pedido actualmente es 1000123, cómo lograr:
next sell order number
alpha 1000124
delta 1000125
delta 1000126
alpha 1000127
La misma pregunta se increment_id
aplica a las vistas de varias tiendas que comparten el mismo rango de números de factura y / o comparten el mismo rango de increment_id
números de tarjeta de crédito .
¿Magento es compatible con este producto listo para usar?
configuration
magento-1
multistore
Jürgen Thelen
fuente
fuente
Respuestas:
Me imagino que esto sería bastante difícil. Los ID de incremento se almacenan en la
eav_entity_store
tabla y, como era de esperar, cada tienda tiene su propia entrada que se actualiza cuando se crea un pedido (y presupuesto, factura, etc.). Para que todas las tiendas usen el mismo incrementador, necesitaría reescribir de alguna manera esta lógica para que use la misma fila en la base de datos. El impacto que esto puede tener en otras áreas del sitio es algo más que debería considerarse.fuente
Mage::getModel('eav/entity_type')->loadByCode('invoice')->setIncrementPerStore(false)->save()
Puede anular el modelo de incremento de pedidos, envíos, facturas y notas de crédito reescribiendo la clase "eav / entity_increment_numeric" que proporciona una lógica personalizada en un modelo suyo.
Eche un vistazo a las clases ancestrales (Mage_Eav_Model_Entity_Increment_Numeric y Mage_Eav_Model_Entity_Increment_Abstract) para comprender cómo proporcionar su propia lógica.
Puede diferenciar la lógica entre diferentes entidades marcando el parámetro $ entityTypeCode de la función getNextId () que anulará.
Otra forma (más invasiva) es la de especificar un modelo de incremento diferente para cada tipo de entidad sobrescribiendo (mediante script de instalación) el valor de la columna "increment_model" de la tabla "eav_entity_type". Personalmente, prefiero la solución de "reescritura" mencionada anteriormente.
Preste atención: los identificadores de incremento tienen una restricción de unicidad en las últimas versiones de Magento, por lo que no puede almacenar el mismo identificador de incremento para dos entidades diferentes del mismo tipo. En otras palabras, no puede tener dos facturas diferentes con el mismo ID de incremento.
Espero eso ayude.
fuente
getLastId()
enMage_Eav_Model_Entity_Increment_Numeric
o en cualquier otra clase o interfaz en la jerarquía. Por cierto, esta debería ser la respuesta aceptada.Varien_Object
deMage_Eav_Model_Entity_Type
Mientras cavaba más profundo, me di cuenta de que
eav_entity_type.increment_per_store
puede ser útil.Es. Pero solo para el caso, cuando desea que todas las vistas de la tienda (globalmente, sin importar en qué sitio web estén definidas) de su instalación de Magento compartan el mismo
increment_id
rango de números de pedido .Esto no resuelve mi problema específico, pero tal vez sea útil para otros, así que aquí vamos:
Para activar el intercambio global de sus números de pedido, configure
eav_entity_type.increment_per_store
la entidad de pedido en0
,Esto conduce al
Mage_Eav_Model_Entity_Type::fetchNewIncrementId()
usostore_id = 0
al cargar eleav_entity_store
registro de la entidad de pedido, sin importar a qué vista de la tienda pertenezca realmente.Si no existe tal registro, Magento crea uno, usando
store_id
yincrement_prefix
de0
.Esto debería funcionar para cualquier tipo de entidad utilizando el
eav/entity_increment_numeric
modelo, comoorder
,invoice
,shipment
ycreditmemo
.Sin embargo, tenga en cuenta que
increment_per_store
todavía no pude encontrar ninguna documentación oficial . Y que no hay ninguna opción en el backend de Magento que le permita configurar esto.Esto puede o no significar que no se cree que se use oficialmente.
Úselo bajo su propio riesgo. Si tus cambios causan estragos, no me culpes. Has sido advertido ^^
fuente
No es compatible de fábrica. También quería hacer esto una vez para que una segunda vista de tienda para una Prueba A / B comparta el mismo increment_id de la tienda original.
Traté de hacer coincidir esos 2 números de la manera más simple cuando
checkout_submit_all_after
se disparó, pero me sentí muy incómodo, así que lo dejé caer. Supongo que con más vistas de tienda y mucho tráfico, esto puede resultar en un verdadero desastre, por lo que debe profundizar en la lógica de Magentos.fuente
Solución:
Tener un orden / factura / tarjeta de crédito diferente, etc., el rango de números es bastante bueno para diferentes países, lo que a menudo significa a nivel de grupo de tiendas.
Pero tener diferentes rangos de números en el nivel de vista de la tienda es algo malo si usa vistas de la tienda para diferentes idiomas, lo que podría hacerse en el 90% de los casos.
Afortunadamente no es tan difícil como se propone en este hilo:
Lo que vamos a hacer es buscar la ID de vista de tienda predeterminada en lugar de usar la ID de vista de tienda con la que se llama el método . Estamos haciendo esto resolviendo el grupo de tiendas para la vista de la tienda actual y buscando su ID de vista de tienda predeterminada. Luego, cada vista de la tienda de un grupo de tiendas específico utiliza el mismo formato de rango de números (el de la vista de la tienda predeterminada).
Crea esta clase:
Agregue esta reescritura a config.xml de su módulo:
Si tiene una mejor manera, sin tener que reescribir, difunda el conocimiento. Que te diviertas. No hackear el núcleo.
fuente
Usar en magento2 ... SELECCIONAR * DESDE
sales_sequence_meta
Todas las filas de la tabla de secuencia se utilizan en la misma tabla de incremento Ejemplo 'secuencia_orden_1' ejemplo:
sales_sequence_meta
SET ACTUALIZACIÓNsequence_table
= 'secuencia_orden_1'. donde meta_id = ?? ()Nota: Vacíe todas las filas relacionadas con la cotización y la factura anteriores O use en la tabla de valor_secuencia más alta de estas tablas (secuencia_orden_1, secuencia_orden_0, secuencia_orden_2)
fuente