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()