diff --git a/web/org.openbravo.retail.posterminal/app/model/business-object/ticket/TicketUtils.js b/web/org.openbravo.retail.posterminal/app/model/business-object/ticket/TicketUtils.js
index 8b771be96..efbb950d8 100644
--- a/web/org.openbravo.retail.posterminal/app/model/business-object/ticket/TicketUtils.js
+++ b/web/org.openbravo.retail.posterminal/app/model/business-object/ticket/TicketUtils.js
@@ -423,6 +423,7 @@
           grossUnitPrice,
           grossUnitAmount,
           baseNetUnitPrice,
+          netUnitPrice,
           netUnitAmount,
           qty
         } = line;
@@ -443,12 +444,18 @@
                 OB.DEC.sub(OB.DEC.mul(baseNetUnitPrice, qty), discounted)
           };
         }
+        const isBooked = OB.App.State.Ticket.Utils.isBooked(this.ticket);
         const discounts = line.skipApplyPromotions
           ? undefined
           : discountsResult.lines.find(l => l.id === line.id);
         const newLine = {
           ...line,
-          promotions: discounts ? discounts.discounts : []
+          // eslint-disable-next-line no-nested-ternary
+          promotions: discounts
+            ? discounts.discounts
+            : isBooked
+            ? line.promotions
+            : []
         };
         const calculateUnitAmountWithoutTicketDiscounts = (
           baseUnitPrice,
@@ -481,12 +488,20 @@
         if (priceIncludesTax) {
           newLine.baseGrossUnitAmount = OB.DEC.mul(baseGrossUnitPrice, qty);
           newLine.baseNetUnitAmount = OB.DEC.Zero;
+          // eslint-disable-next-line no-nested-ternary
           newLine.grossUnitPrice = discounts
             ? discounts.grossUnitPrice
+            : isBooked
+            ? grossUnitPrice
             : baseGrossUnitPrice;
           newLine.grossUnitAmount = discounts
             ? discounts.grossUnitAmount
-            : OB.DEC.mul(baseGrossUnitPrice, qty);
+            : OB.DEC.mul(
+                isBooked
+                  ? grossUnitPrice || line.grossListPrice
+                  : baseGrossUnitPrice,
+                qty
+              );
           // This part is only used for visualization in WebPOS 2.0
           newLine.grossUnitAmountWithoutTicketDiscounts = calculateUnitAmountWithoutTicketDiscounts(
             newLine.baseGrossUnitAmount,
@@ -499,12 +514,15 @@
         } else {
           newLine.baseGrossUnitAmount = OB.DEC.Zero;
           newLine.baseNetUnitAmount = OB.DEC.mul(baseNetUnitPrice, qty);
+          // eslint-disable-next-line no-nested-ternary
           newLine.netUnitPrice = discounts
             ? discounts.netUnitPrice
+            : isBooked
+            ? netUnitPrice
             : baseNetUnitPrice;
           newLine.netUnitAmount = discounts
             ? discounts.netUnitAmount
-            : OB.DEC.mul(baseNetUnitPrice, qty);
+            : OB.DEC.mul(isBooked ? netUnitPrice : baseNetUnitPrice, qty);
           // This part is only used for visualization in WebPOS 2.0
           newLine.netUnitAmountWithoutTicketDiscounts = calculateUnitAmountWithoutTicketDiscounts(
             newLine.baseNetUnitAmount,
@@ -955,6 +973,18 @@
         : processedPaymentsAmount > total;
     },
 
+    /**
+     * Checks if a ticket is booked
+     *
+     * @param {object} ticket - The ticket to check
+     * @returns {boolean} - True if the given ticket is booked, false if it is draft
+     */
+    isBooked(ticket) {
+      return Boolean(
+        ticket.loaded || (ticket.isQuotation && ticket.hasbeenpaid === 'Y')
+      );
+    },
+
     /**
      * Generates a new ticket resulting of adding a new line into the provided ticket
      *
