diff --git a/src/pages/Ticket/Card/TicketSale.vue b/src/pages/Ticket/Card/TicketSale.vue
index 345427256..ece871918 100644
--- a/src/pages/Ticket/Card/TicketSale.vue
+++ b/src/pages/Ticket/Card/TicketSale.vue
@@ -174,14 +174,18 @@ const getSaleTotal = (sale) => {
     return price - discount;
 };
 
-const getRowUpdateInputEvents = (sale) => ({
-    'keyup.enter': () => {
-        changeQuantity(sale);
-    },
-    blur: () => {
-        changeQuantity(sale);
-    },
-});
+const getRowUpdateInputEvents = (sale) => {
+    return {
+        'keyup.enter': (evt) => {
+            console.error(evt);
+            changeQuantity(sale);
+        },
+        blur: (evt) => {
+            console.error(evt);
+            changeQuantity(sale);
+        },
+    };
+};
 
 const resetChanges = async () => {
     arrayData.fetch({ append: false });
@@ -191,12 +195,12 @@ const resetChanges = async () => {
 const changeQuantity = async (sale) => {
     if (!sale.itemFk || sale.quantity == null || sale?.originalQuantity === sale.quantity)
         return;
+    else sale.originalQuantity = sale.quantity;
     if (!sale.id) return addSale(sale);
 
     if (await isSalePrepared(sale)) {
         await confirmUpdate(() => updateQuantity(sale));
     } else await updateQuantity(sale);
-    resetChanges();
 };
 
 const updateQuantity = async (sale) => {
@@ -205,6 +209,7 @@ const updateQuantity = async (sale) => {
         sale.isNew = false;
         await axios.post(`Sales/${id}/updateQuantity`, { quantity });
         notify('globals.dataSaved', 'positive');
+        resetChanges();
     } catch (e) {
         const { quantity } = tableRef.value.CrudModelRef.originalData.find(
             (s) => s.id === sale.id,
diff --git a/test/cypress/integration/ticket/ticketSale.spec.js b/test/cypress/integration/ticket/ticketSale.spec.js
index 556b1f433..61ba9fe4f 100644
--- a/test/cypress/integration/ticket/ticketSale.spec.js
+++ b/test/cypress/integration/ticket/ticketSale.spec.js
@@ -1,141 +1,14 @@
 /// <reference types="cypress" />
+const firstRow = 'tbody > :nth-child(1)';
 
 describe('TicketSale', () => {
-    describe('Free ticket #31', () => {
-        beforeEach(() => {
-            cy.login('developer');
-            cy.viewport(1920, 1080);
-            cy.visit('/#/ticket/31/sale');
-        });
-
-        const firstRow = 'tbody > :nth-child(1)';
-
-        const selectFirstRow = () => {
-            cy.waitForElement(firstRow);
-            cy.get(firstRow).find('.q-checkbox__inner').click();
-        };
-
-        it('it should add item to basket', () => {
-            cy.window().then((win) => {
-                cy.stub(win, 'open').as('windowOpen');
-            });
-            cy.dataCy('ticketSaleAddToBasketBtn').should('exist');
-            cy.dataCy('ticketSaleAddToBasketBtn').click();
-            cy.get('@windowOpen').should('be.calledWithMatch', /\/order\/\d+\/catalog/);
-        });
-
-        it('should send SMS', () => {
-            selectFirstRow();
-            cy.dataCy('ticketSaleMoreActionsDropdown').click();
-            cy.waitForElement('[data-cy="sendShortageSMSItem"]');
-            cy.dataCy('sendShortageSMSItem').should('exist');
-            cy.dataCy('sendShortageSMSItem').click();
-            cy.dataCy('vnSmsDialog').should('exist');
-            cy.dataCy('sendSmsBtn').click();
-            cy.checkNotification('SMS sent');
-        });
-
-        it('should recalculate price when "Recalculate price" is clicked', () => {
-            cy.intercept('POST', '**/recalculatePrice').as('recalculatePrice');
-            selectFirstRow();
-            cy.dataCy('ticketSaleMoreActionsDropdown').click();
-            cy.waitForElement('[data-cy="recalculatePriceItem"]');
-            cy.dataCy('recalculatePriceItem').should('exist');
-            cy.dataCy('recalculatePriceItem').click();
-            cy.wait('@recalculatePrice').its('response.statusCode').should('eq', 200);
-            cy.checkNotification('Data saved');
-            cy.dataCy('ticketSaleMoreActionsDropdown').should('be.disabled');
-        });
-
-        it('should update discount when "Update discount" is clicked', () => {
-            selectFirstRow();
-            cy.dataCy('ticketSaleMoreActionsDropdown').click();
-            cy.waitForElement('[data-cy="updateDiscountItem"]');
-            cy.dataCy('updateDiscountItem').should('exist');
-            cy.dataCy('updateDiscountItem').click();
-            cy.waitForElement('[data-cy="ticketSaleDiscountInput"]');
-            cy.dataCy('ticketSaleDiscountInput').find('input').focus();
-            cy.dataCy('ticketSaleDiscountInput').find('input').type('10');
-            cy.dataCy('saveManaBtn').click();
-            cy.waitForElement('.q-notification__message');
-            cy.checkNotification('Data saved');
-            cy.dataCy('ticketSaleMoreActionsDropdown').should('be.disabled');
-        });
-
-        it('adds claim', () => {
-            selectFirstRow();
-            cy.dataCy('ticketSaleMoreActionsDropdown').click();
-            cy.dataCy('createClaimItem').click();
-            cy.dataCy('VnConfirm_confirm').click();
-            cy.url().should('contain', 'claim/');
-            // Delete created claim to avoid cluttering the database
-            cy.dataCy('descriptor-more-opts').click();
-            cy.dataCy('deleteClaim').click();
-            cy.dataCy('VnConfirm_confirm').click();
-            cy.checkNotification('Data deleted');
-        });
-
-        it('marks row as reserved', () => {
-            selectFirstRow();
-            cy.dataCy('ticketSaleMoreActionsDropdown').click();
-            cy.waitForElement('[data-cy="markAsReservedItem"]');
-            cy.dataCy('markAsReservedItem').click();
-            cy.dataCy('ticketSaleReservedIcon').should('exist');
-        });
-
-        it('unmarks row as reserved', () => {
-            selectFirstRow();
-            cy.dataCy('ticketSaleMoreActionsDropdown').click();
-            cy.waitForElement('[data-cy="unmarkAsReservedItem"]');
-            cy.dataCy('unmarkAsReservedItem').click();
-            cy.dataCy('ticketSaleReservedIcon').should('not.exist');
-        });
-
-        it('refunds row with warehouse', () => {
-            selectFirstRow();
-            cy.dataCy('ticketSaleMoreActionsDropdown').click();
-            cy.dataCy('ticketSaleRefundItem').click();
-            cy.dataCy('ticketSaleRefundWithWarehouse').click();
-            cy.checkNotification('The following refund ticket have been created');
-        });
-
-        it('refunds row without warehouse', () => {
-            selectFirstRow();
-            cy.dataCy('ticketSaleMoreActionsDropdown').click();
-            cy.dataCy('ticketSaleRefundItem').click();
-            cy.dataCy('ticketSaleRefundWithoutWarehouse').click();
-            cy.checkNotification('The following refund ticket have been created');
-        });
-
-        it('transfer sale to a new ticket', () => {
-            cy.visit('/#/ticket/32/sale');
-            cy.get('.q-item > .q-item__label').should('have.text', ' #32');
-            selectFirstRow();
-            cy.dataCy('ticketSaleTransferBtn').click();
-            cy.dataCy('ticketTransferPopup').should('exist');
-            cy.dataCy('ticketTransferNewTicketBtn').click();
-            cy.get('.q-item > .q-item__label').should('not.have.text', ' #32');
-        });
-
-        it('should redirect to ticket logs', () => {
-            cy.get(firstRow).find('.q-btn:last').click();
-            cy.url().should('match', /\/ticket\/31\/log/);
-        });
-    });
-    describe('Ticket prepared #23', () => {
+    describe('Ticket  #23', () => {
         beforeEach(() => {
             cy.login('developer');
             cy.viewport(1920, 1080);
             cy.visit('/#/ticket/23/sale');
         });
 
-        const firstRow = 'tbody > :nth-child(1)';
-
-        const selectFirstRow = () => {
-            cy.waitForElement(firstRow);
-            cy.get(firstRow).find('.q-checkbox__inner').click();
-        };
-
         it('update price', () => {
             const price = Number((Math.random() * 99 + 1).toFixed(2));
             cy.waitForElement(firstRow);
@@ -198,8 +71,144 @@ describe('TicketSale', () => {
                 .should('have.value', `${quantity}`);
         });
     });
-});
+    describe('Ticket to add claim #24', () => {
+        beforeEach(() => {
+            cy.login('developer');
+            cy.viewport(1920, 1080);
+            cy.visit('/#/ticket/24/sale');
+        });
 
+        it('adds claim', () => {
+            selectFirstRow();
+            cy.dataCy('ticketSaleMoreActionsDropdown').click();
+            cy.dataCy('createClaimItem').click();
+            cy.dataCy('VnConfirm_confirm').click();
+            cy.url().should('contain', 'claim/');
+            // Delete created claim to avoid cluttering the database
+            cy.dataCy('descriptor-more-opts').click();
+            cy.dataCy('deleteClaim').click();
+            cy.dataCy('VnConfirm_confirm').click();
+        });
+    });
+    describe('Free ticket #31', () => {
+        beforeEach(() => {
+            cy.login('developer');
+            cy.viewport(1920, 1080);
+            cy.visit('/#/ticket/31/sale');
+        });
+
+        it('it should add item to basket', () => {
+            cy.window().then((win) => {
+                cy.stub(win, 'open').as('windowOpen');
+            });
+            cy.dataCy('ticketSaleAddToBasketBtn').should('exist');
+            cy.dataCy('ticketSaleAddToBasketBtn').click();
+            cy.get('@windowOpen').should('be.calledWithMatch', /\/order\/\d+\/catalog/);
+        });
+
+        it('should send SMS', () => {
+            selectFirstRow();
+            cy.dataCy('ticketSaleMoreActionsDropdown').click();
+            cy.waitForElement('[data-cy="sendShortageSMSItem"]');
+            cy.dataCy('sendShortageSMSItem').should('exist');
+            cy.dataCy('sendShortageSMSItem').click();
+            cy.dataCy('vnSmsDialog').should('exist');
+            cy.dataCy('sendSmsBtn').click();
+            cy.checkNotification('SMS sent');
+        });
+
+        it('should recalculate price when "Recalculate price" is clicked', () => {
+            cy.intercept('POST', '**/recalculatePrice').as('recalculatePrice');
+            selectFirstRow();
+            cy.dataCy('ticketSaleMoreActionsDropdown').click();
+            cy.waitForElement('[data-cy="recalculatePriceItem"]');
+            cy.dataCy('recalculatePriceItem').should('exist');
+            cy.dataCy('recalculatePriceItem').click();
+            cy.wait('@recalculatePrice').its('response.statusCode').should('eq', 200);
+            cy.checkNotification('Data saved');
+            cy.dataCy('ticketSaleMoreActionsDropdown').should('be.disabled');
+        });
+
+        it('should update discount when "Update discount" is clicked', () => {
+            selectFirstRow();
+            cy.dataCy('ticketSaleMoreActionsDropdown').click();
+            cy.waitForElement('[data-cy="updateDiscountItem"]');
+            cy.dataCy('updateDiscountItem').should('exist');
+            cy.dataCy('updateDiscountItem').click();
+            cy.waitForElement('[data-cy="ticketSaleDiscountInput"]');
+            cy.dataCy('ticketSaleDiscountInput').find('input').focus();
+            cy.dataCy('ticketSaleDiscountInput').find('input').type('10');
+            cy.dataCy('saveManaBtn').click();
+            cy.waitForElement('.q-notification__message');
+            cy.checkNotification('Data saved');
+            cy.dataCy('ticketSaleMoreActionsDropdown').should('be.disabled');
+        });
+
+        it('adds claim', () => {
+            selectFirstRow();
+            cy.dataCy('ticketSaleMoreActionsDropdown').click();
+            cy.dataCy('createClaimItem').click();
+            cy.dataCy('VnConfirm_confirm').click();
+            cy.checkNotification('Future ticket date not allowed');
+        });
+
+        it('marks row as reserved', () => {
+            selectFirstRow();
+            cy.dataCy('ticketSaleMoreActionsDropdown').click();
+            cy.waitForElement('[data-cy="markAsReservedItem"]');
+            cy.dataCy('markAsReservedItem').click();
+            cy.dataCy('ticketSaleReservedIcon').should('exist');
+        });
+
+        it('unmarks row as reserved', () => {
+            selectFirstRow();
+            cy.dataCy('ticketSaleMoreActionsDropdown').click();
+            cy.waitForElement('[data-cy="unmarkAsReservedItem"]');
+            cy.dataCy('unmarkAsReservedItem').click();
+            cy.dataCy('ticketSaleReservedIcon').should('not.exist');
+        });
+
+        it('refunds row with warehouse', () => {
+            selectFirstRow();
+            cy.dataCy('ticketSaleMoreActionsDropdown').click();
+            cy.dataCy('ticketSaleRefundItem').click();
+            cy.dataCy('ticketSaleRefundWithWarehouse').click();
+            cy.checkNotification('The following refund ticket have been created');
+        });
+
+        it('refunds row without warehouse', () => {
+            selectFirstRow();
+            cy.dataCy('ticketSaleMoreActionsDropdown').click();
+            cy.dataCy('ticketSaleRefundItem').click();
+            cy.dataCy('ticketSaleRefundWithoutWarehouse').click();
+            cy.checkNotification('The following refund ticket have been created');
+        });
+
+        it('should redirect to ticket logs', () => {
+            cy.get(firstRow).find('.q-btn:last').click();
+            cy.url().should('match', /\/ticket\/31\/log/);
+        });
+    });
+    describe('Ticket to transfer #32', () => {
+        beforeEach(() => {
+            cy.login('developer');
+            cy.viewport(1920, 1080);
+            cy.visit('/#/ticket/32/sale');
+        });
+        it('transfer sale to a new ticket', () => {
+            cy.get('.q-item > .q-item__label').should('have.text', ' #32');
+            selectFirstRow();
+            cy.dataCy('ticketSaleTransferBtn').click();
+            cy.dataCy('ticketTransferPopup').should('exist');
+            cy.dataCy('ticketTransferNewTicketBtn').click();
+            cy.get('.q-item > .q-item__label').should('not.have.text', ' #32');
+        });
+    });
+});
+function selectFirstRow() {
+    cy.waitForElement(firstRow);
+    cy.get(firstRow).find('.q-checkbox__inner').click();
+}
 function handleVnConfirm() {
     cy.get('[data-cy="VnConfirm_confirm"]').click();
     cy.waitForElement('.q-notification__message');