diff --git a/addons/point_of_sale/static/src/js/Screens/TicketScreen/TicketScreen.js b/addons/point_of_sale/static/src/js/Screens/TicketScreen/TicketScreen.js
index dd7adce4e074e9d08a0c7d686db7da91c7909a85..f59b72d0b0a775d9282c726cbfba8b917e0dba3e 100644
--- a/addons/point_of_sale/static/src/js/Screens/TicketScreen/TicketScreen.js
+++ b/addons/point_of_sale/static/src/js/Screens/TicketScreen/TicketScreen.js
@@ -91,6 +91,7 @@ odoo.define('point_of_sale.TicketScreen', function (require) {
                 if (!confirmed) return;
             }
             if (order) {
+                await this._canDeleteOrder(order);
                 order.destroy({ reason: 'abandon' });
             }
             posbus.trigger('order-deleted');
@@ -191,6 +192,9 @@ odoo.define('point_of_sale.TicketScreen', function (require) {
                 screenToStatusMap: this._screenToStatusMap,
             });
         }
+        async _canDeleteOrder(order) {
+            return true;
+        }
         getOrderStates() {
             return {
                 AllTickets: this.env._t('All Tickets'),
diff --git a/addons/point_of_sale/static/src/js/models.js b/addons/point_of_sale/static/src/js/models.js
index eedae8d9a8c2d5f19dd52b53f9dff5b7924c6be6..a2cd058ac068d864077648f03f4e9e84006490cd 100644
--- a/addons/point_of_sale/static/src/js/models.js
+++ b/addons/point_of_sale/static/src/js/models.js
@@ -1157,9 +1157,8 @@ exports.PosModel = Backbone.Model.extend({
                 timeout: timeout,
                 shadow: true,
             })
-            .then(function (ids) {
-                self.db.set_ids_removed_from_server(server_ids);
-                return server_ids;
+            .then(function (data) {
+                return self._post_remove_from_server(server_ids, data)
             }).catch(function (reason){
                 var error = reason.message;
                 if(error.code === 200 ){    // Business Logic Error, not a connection problem
@@ -1175,6 +1174,12 @@ exports.PosModel = Backbone.Model.extend({
             });
     },
 
+    // to override
+    _post_remove_from_server(server_ids, data) {
+        this.db.set_ids_removed_from_server(server_ids);
+        return server_ids;
+    },
+
     scan_product: function(parsed_code){
         var selectedOrder = this.get_order();
         var product = this.db.get_product_by_barcode(parsed_code.base_code);
diff --git a/addons/pos_restaurant/static/src/js/floors.js b/addons/pos_restaurant/static/src/js/floors.js
index 35dfec2d9fcdb77ef1c53843206977556dc8fbc1..3f5b739a260377189083574ba4db7f64dfecc07c 100644
--- a/addons/pos_restaurant/static/src/js/floors.js
+++ b/addons/pos_restaurant/static/src/js/floors.js
@@ -168,14 +168,7 @@ models.PosModel = models.PosModel.extend({
         if (orders_to_sync.length) {
             this.set_synch('connecting', orders_to_sync.length);
             this._save_to_server(orders_to_sync, {'draft': true}).then(function (server_ids) {
-                server_ids.forEach(function(server_id){
-                    table_orders.some(function(o){
-                        if (o.name === server_id.pos_reference) {
-                            o.server_id = server_id.id;
-                            o.save_to_db();
-                        }
-                    });
-                });
+                server_ids.forEach(server_id => self.update_table_order(server_id, table_orders));
                 if (!ids_to_remove.length) {
                     self.set_synch('connected');
                 } else {
@@ -194,6 +187,15 @@ models.PosModel = models.PosModel.extend({
         }
     },
 
+    update_table_order: function(server_id, table_orders) {
+        const order = table_orders.find(o => o.name === server_id.pos_reference);
+        if (order) {
+            order.server_id = server_id.id;
+            order.save_to_db();
+        }
+        return order;
+    },
+
     /**
      * @param {models.Order} order order to set
      */