Quote y Order en Magento 2

Un quote se crea, por ejemplo, cuando añades un producto al carrito. Se crea el order cuando clicas el botón pagar. Los datos del quote están guardados en la tabla quote. Los ítems que añadimos al carrito, su información 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 crear a partir de un quote. Este es el flujo normal en Magento.

Cuando creamos un quote a través del código, sólo basta que espeficiquemos el precio de los ítems y loa totales se calcularán de forma automática con el método collectTotals del quote por ejemplo subtotal y grandTotal.

Si queremos añadir un descuento al quote, podemos hacerlo por 2 formas. 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 setear los totales con el descuento después del cálculo automático en la ejecución del collecTotals. ¡Ojo! Los totales los setearemos en el quote_address invocando el objeto $quote->getShippingAddress()