[FIX] point_of_sale: Separate order sync from set table
Separate orders synchronization from set table to make the code clearer and enable overriding. X-original-commit: 5dd115b885193d1b301f4154d76f028194a7ae09
This commit is contained in:
committed by
Antoine Prieels
parent
766e43a0d3
commit
22fc63af16
@@ -881,6 +881,110 @@ models.PosModel = models.PosModel.extend({
|
||||
}
|
||||
},
|
||||
|
||||
transfer_order_to_table: function(table) {
|
||||
this.order_to_transfer_to_different_table.table = table;
|
||||
this.order_to_transfer_to_different_table.save_to_db();
|
||||
},
|
||||
|
||||
push_order_for_transfer: function(order_ids, table_orders) {
|
||||
order_ids.push(this.order_to_transfer_to_different_table.uid);
|
||||
table_orders.push(this.order_to_transfer_to_different_table);
|
||||
},
|
||||
|
||||
clean_table_transfer: function(table) {
|
||||
if (this.order_to_transfer_to_different_table && table) {
|
||||
this.order_to_transfer_to_different_table = null;
|
||||
this.set_table(table);
|
||||
}
|
||||
},
|
||||
|
||||
sync_from_server: function(table, table_orders, order_ids) {
|
||||
var self = this;
|
||||
var ids_to_remove = this.db.get_ids_to_remove_from_server();
|
||||
this.set_idle_timer(true);
|
||||
var orders_to_sync = this.db.get_unpaid_orders_to_sync(order_ids);
|
||||
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();
|
||||
}
|
||||
});
|
||||
});
|
||||
if (!ids_to_remove.length) {
|
||||
self.set_synch('connected');
|
||||
} else {
|
||||
self.remove_from_server_and_set_sync_state(ids_to_remove);
|
||||
}
|
||||
}).catch(function(reason){
|
||||
self.set_synch('error');
|
||||
}).finally(function(){
|
||||
self.clean_table_transfer(table);
|
||||
});
|
||||
} else {
|
||||
if (ids_to_remove.length) {
|
||||
self.remove_from_server_and_set_sync_state(ids_to_remove);
|
||||
}
|
||||
self.clean_table_transfer(table);
|
||||
}
|
||||
},
|
||||
|
||||
set_order_on_table: function() {
|
||||
var orders = this.get_order_list();
|
||||
if (orders.length) {
|
||||
this.set_order(orders[0]); // and go to the first one ...
|
||||
} else {
|
||||
this.add_new_order(); // or create a new order with the current table
|
||||
}
|
||||
},
|
||||
|
||||
sync_to_server: function(table) {
|
||||
var self = this;
|
||||
var ids_to_remove = this.db.get_ids_to_remove_from_server();
|
||||
|
||||
clearInterval(this.table_longpolling);
|
||||
this.set_idle_timer();
|
||||
|
||||
this.set_synch('connecting', 1);
|
||||
this._get_from_server(table.id).then(function (server_orders) {
|
||||
var orders = self.get_order_list();
|
||||
orders.forEach(function(order){
|
||||
if (order.server_id){
|
||||
self.get("orders").remove(order);
|
||||
order.destroy();
|
||||
}
|
||||
});
|
||||
server_orders.forEach(function(server_order){
|
||||
if (server_order.lines.length){
|
||||
var new_order = new models.Order({},{pos: self, json: server_order});
|
||||
self.get("orders").add(new_order);
|
||||
new_order.save_to_db();
|
||||
}
|
||||
})
|
||||
if (!ids_to_remove.length) {
|
||||
self.set_synch('connected');
|
||||
} else {
|
||||
self.remove_from_server_and_set_sync_state(ids_to_remove);
|
||||
}
|
||||
}).catch(function(reason){
|
||||
self.set_synch('error');
|
||||
}).finally(function(){
|
||||
self.set_order_on_table();
|
||||
});
|
||||
},
|
||||
|
||||
get_order_with_uid: function() {
|
||||
var order_ids = [];
|
||||
this.get_order_list().forEach(function(o){
|
||||
order_ids.push(o.uid);
|
||||
});
|
||||
|
||||
return order_ids;
|
||||
},
|
||||
|
||||
/**
|
||||
* Changes the current table.
|
||||
*
|
||||
@@ -888,96 +992,20 @@ models.PosModel = models.PosModel.extend({
|
||||
* @param {object} table.
|
||||
*/
|
||||
set_table: function(table) {
|
||||
var self = this;
|
||||
var ids_to_remove = this.db.get_ids_to_remove_from_server();
|
||||
if (!table || this.order_to_transfer_to_different_table) { // no table ? go back to the floor plan, see ScreenSelector
|
||||
this.set_idle_timer(true);
|
||||
var order_ids = [];
|
||||
var table_orders = this.get_order_list();
|
||||
table_orders.forEach(function(o){
|
||||
order_ids.push(o.uid);
|
||||
});
|
||||
if(!table){
|
||||
this.sync_from_server(table, this.get_order_list(), this.get_order_with_uid());
|
||||
this.set_order(null);
|
||||
} else if (this.order_to_transfer_to_different_table) {
|
||||
var order_ids = this.get_order_with_uid();
|
||||
|
||||
if (this.order_to_transfer_to_different_table && table) {
|
||||
this.order_to_transfer_to_different_table.table = table;
|
||||
this.order_to_transfer_to_different_table.save_to_db();
|
||||
order_ids.push(this.order_to_transfer_to_different_table.uid);
|
||||
table_orders.push(this.order_to_transfer_to_different_table);
|
||||
}
|
||||
|
||||
var orders_to_sync = this.db.get_unpaid_orders_to_sync(order_ids);
|
||||
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();
|
||||
}
|
||||
});
|
||||
});
|
||||
if (!ids_to_remove.length) {
|
||||
self.set_synch('connected');
|
||||
} else {
|
||||
self.remove_from_server_and_set_sync_state(ids_to_remove);
|
||||
}
|
||||
}).catch(function(reason){
|
||||
self.set_synch('error');
|
||||
}).finally(function(){
|
||||
if (self.order_to_transfer_to_different_table && table) {
|
||||
self.order_to_transfer_to_different_table = null;
|
||||
self.set_table(table);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
if (ids_to_remove.length) {
|
||||
self.remove_from_server_and_set_sync_state(ids_to_remove);
|
||||
}
|
||||
if (self.order_to_transfer_to_different_table && table) {
|
||||
self.order_to_transfer_to_different_table = null;
|
||||
self.set_table(table);
|
||||
}
|
||||
}
|
||||
this.set_order(null); // unset curent selected order
|
||||
this.transfer_order_to_table(table);
|
||||
this.push_order_for_transfer(order_ids, this.get_order_list());
|
||||
|
||||
this.sync_from_server(table, this.get_order_list(), order_ids);
|
||||
this.set_order(null);
|
||||
} else {
|
||||
|
||||
clearInterval(this.table_longpolling);
|
||||
this.table = table;
|
||||
this.set_idle_timer();
|
||||
|
||||
this.set_synch('connecting', 1);
|
||||
this._get_from_server(table.id)
|
||||
.then(function (server_orders) {
|
||||
var orders = self.get_order_list();
|
||||
orders.forEach(function(order){
|
||||
if (order.server_id){
|
||||
self.get("orders").remove(order);
|
||||
order.destroy();
|
||||
}
|
||||
});
|
||||
server_orders.forEach(function(server_order){
|
||||
var new_order = new models.Order({},{pos: self, json: server_order});
|
||||
self.get("orders").add(new_order);
|
||||
new_order.save_to_db();
|
||||
})
|
||||
if (!ids_to_remove.length) {
|
||||
self.set_synch('connected');
|
||||
} else {
|
||||
self.remove_from_server_and_set_sync_state(ids_to_remove);
|
||||
}
|
||||
}).catch(function(reason){
|
||||
self.set_synch('error');
|
||||
}).finally(function(){
|
||||
var orders = self.get_order_list();
|
||||
if (orders.length) {
|
||||
self.set_order(orders[0]); // and go to the first one ...
|
||||
} else {
|
||||
self.add_new_order(); // or create a new order with the current table
|
||||
}
|
||||
});
|
||||
this.sync_to_server(table);
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
Reference in New Issue
Block a user