[imp] implemented dao interface

bzr revid: nicolas.vanhoren@openerp.com-20120417091836-ej2g238h7x7firnp
This commit is contained in:
niv-openerp
2012-04-17 11:18:36 +02:00
parent 43358fe249
commit b12d4bce8d
+68 -26
View File
@@ -36,10 +36,46 @@ openerp.point_of_sale = function(db) {
var _t = db.web._t;
var DAOInterface = {
add_operation: function(operation) {},
remove_operation: function(id) {},
get_operations: function() {},
};
var LocalStorageDAO = db.web.Class.extend({
add_operation: function(operation) {
var self = this;
return $.async_when().pipe(function() {
var tmp = self._get('oe_pos_operations', []);
var last_id = self._get('oe_pos_operations_sequence', 1);
tmp.push({'id': last_id, 'data': operation});
self._set('oe_pos_operations', tmp);
self._set('oe_pos_operations_sequence', last_id + 1);
});
},
remove_operation: function(id) {
var self = this;
return $.async_when().pipe(function() {
var tmp = self._get('oe_pos_operations', []);
tmp = _.filter(tmp, function(el) {
return el.id !== id;
});
self._set('oe_pos_operations', tmp);
});
},
get_operations: function() {
var self = this;
return $.async_when().pipe(function() {
return self._get('oe_pos_operations', []);
});
},
_get: function(key, default_) {
var txt = localStorage[key];
if (! txt)
return default_;
return JSON.parse(txt);
},
_set: function(key, value) {
localStorage[key] = JSON.stringify(value);
},
});
var fetch = function(osvModel, fields, domain) {
@@ -59,7 +95,7 @@ openerp.point_of_sale = function(db) {
this.flush_mutex = new $.Mutex();
this.build_tree = _.bind(this.build_tree, this);
this.session = session;
this.set({'pending_operations': [],
this.set({'nbr_pending_operations': 0,
'currency': {symbol: '$', position: 'after'},
'shop': {},
'company': {},
@@ -80,7 +116,7 @@ openerp.point_of_sale = function(db) {
var tax_def = fetch('account.tax', ['amount', 'price_include', 'type']).then(function(result) {
return self.set({'taxes': result});
});
$.when(cat_def, prod_def, bank_def, tax_def, this.get_app_data())
$.when(cat_def, prod_def, bank_def, tax_def, this.get_app_data(), this.flush())
.pipe(_.bind(this.build_tree, this));
},
get_app_data: function() {
@@ -102,10 +138,10 @@ openerp.point_of_sale = function(db) {
}));
},
pushOrder: function(record) {
var ops = _.clone(this.get('pending_operations'));
ops.push(record);
this.set({pending_operations: ops});
return this.flush();
var self = this;
return this.dao.add_operation(record).pipe(function() {
return self.flush();
});
},
flush: function() {
return this.flush_mutex.exec(_.bind(function() {
@@ -113,21 +149,27 @@ openerp.point_of_sale = function(db) {
}, this));
},
_int_flush : function() {
var ops = this.get('pending_operations');
if (ops.length === 0)
return $.when();
var op = ops[0];
/* we prevent the default error handler and assume errors
* are a normal use case, except we stop the current iteration
*/
return new db.web.Model("pos.order").get_func("create_from_ui")([op]).fail(function(unused, event) {
event.preventDefault();
}).pipe(_.bind(function() {
console.debug('saved 1 record');
var ops2 = this.get('pending_operations');
this.set({'pending_operations': _.without(ops2, op)});
return this._int_flush();
}, this), function() {return $.when()});
var self = this;
this.dao.get_operations().pipe(function(ops) {
self.set({"nbr_pending_operations": ops.length});
if (ops.length === 0)
return $.when();
var op = ops[0].data;
var op_id = ops[0].id;
/* we prevent the default error handler and assume errors
* are a normal use case, except we stop the current iteration
*/
return new db.web.Model("pos.order").get_func("create_from_ui")([op]).fail(function(unused, event) {
event.preventDefault();
}).pipe(function() {
console.debug('saved 1 record');
self.dao.remove_operation(op_id).pipe(function() {
return self._int_flush();
});
}, function() {
return $.when();
});
});
},
categories: {},
build_tree: function() {
@@ -1299,7 +1341,7 @@ openerp.point_of_sale = function(db) {
this.synch_notification.replace($('.oe_pos_synch-notification', this.$element));
this.synch_notification.on_synch.add(_.bind(pos.flush, pos));
pos.bind('change:pending_operations', this.changed_pending_operations, this);
pos.bind('change:nbr_pending_operations', this.changed_pending_operations, this);
this.changed_pending_operations();
this.$element.find("#loggedas button").click(function() {
@@ -1323,12 +1365,12 @@ openerp.point_of_sale = function(db) {
return qweb_template("PointOfSale")();
},
changed_pending_operations: function () {
this.synch_notification.on_change_nbr_pending(pos.get('pending_operations').length);
this.synch_notification.on_change_nbr_pending(pos.get('nbr_pending_operations'));
},
try_close: function() {
pos.flush().then(_.bind(function() {
var close = _.bind(this.close, this);
if (pos.get('pending_operations').length > 0) {
if (pos.get('nbr_pending_operations') > 0) {
var confirm = false;
$(QWeb.render('pos-close-warning')).dialog({
resizable: false,