Quote y Order en Magento 2

Un quote se crea, por ejemplo, cuando añades un producto al carrito. Se genera el order cuando clicas el botón pagar. Los datos del quote están guardados en la tabla quote. La información de los ítems añadidos al carrito se guarda en la tabla quote_items. Un quote puede tener muchos ítems.

Al igual que el quote, la información del order también se guarda en la base de datos pero en distintas tablas. Se guarda en sales_order y sales_order_items. Un order se crea a partir de un quote. Este es el flujo normal en Magento.

Crear el order dinámicamente

Si queremos crear un quote a través del código, solo basta poner el precio de los ítems. Los totales se calcularán de forma automática con el método collectTotals del quote, por ejemplo, los totales como subtotal y grandTotal.

Si queremos añadir un descuento al quote, podemos hacerlo de 2 maneras. El flujo normal es que creamos un código de cupón y al especificarlo en el quote, y al invocar el collectTotals, automáticamente, se calcularán los totales con el descuento. Es decir que los descuentos están sujetos a cart rule price en el flujo normal de Magento. Pero si no queremos crear descuento a través del código de cupón podemos hacerlo de otra manera. Esa manera es dar valor de descuento a los totales después del cálculo automático en la ejecución del collectTotals. ¡Ojo! Pondremos los totales en el quote_address invocando el objeto $quote->getShippingAddress()