[IMP] point_of_sale: get login_number in the same transaction as update it
Otherwise, if two POS stations are using the same user with the same pos.config, i.e. create two session AND if you have bad luck, then those sessions will get same login_number, which leads to losing half of orders, because POS stations will generate same pos_reference and only first order from the POSes is saved, while another order is lost without let know to cashier. closes odoo/odoo#24486 Signed-off-by: Martin Trigaux (mat) <mat@odoo.com>
This commit is contained in:
committed by
Martin Trigaux
parent
bf8d288d04
commit
c0a897d528
@@ -34,12 +34,12 @@ class PosController(http.Controller):
|
||||
pos_session = request.env['pos.session'].sudo().search(domain, limit=1)
|
||||
if not pos_session:
|
||||
return werkzeug.utils.redirect('/web#action=point_of_sale.action_client_pos_menu')
|
||||
pos_session.login()
|
||||
# The POS only work in one company, so we enforce the one of the session in the context
|
||||
session_info = request.env['ir.http'].session_info()
|
||||
session_info['user_context']['allowed_company_ids'] = pos_session.company_id.ids
|
||||
context = {
|
||||
'session_info': session_info
|
||||
'session_info': session_info,
|
||||
'login_number': pos_session.login(),
|
||||
}
|
||||
return request.render('point_of_sale.index', qcontext=context)
|
||||
|
||||
|
||||
@@ -220,9 +220,11 @@ class PosSession(models.Model):
|
||||
|
||||
def login(self):
|
||||
self.ensure_one()
|
||||
login_number = self.login_number + 1
|
||||
self.write({
|
||||
'login_number': self.login_number + 1,
|
||||
'login_number': login_number,
|
||||
})
|
||||
return login_number
|
||||
|
||||
def action_pos_session_open(self):
|
||||
# second browse because we need to refetch the data from the DB for cash_register_id
|
||||
|
||||
@@ -242,7 +242,7 @@ exports.PosModel = Backbone.Model.extend({
|
||||
},
|
||||
},{
|
||||
model: 'pos.session',
|
||||
fields: ['id', 'name', 'user_id', 'config_id', 'start_at', 'stop_at', 'sequence_number', 'login_number', 'payment_method_ids'],
|
||||
fields: ['id', 'name', 'user_id', 'config_id', 'start_at', 'stop_at', 'sequence_number', 'payment_method_ids'],
|
||||
domain: function(self){
|
||||
var domain = [
|
||||
['state','=','opened'],
|
||||
@@ -253,6 +253,7 @@ exports.PosModel = Backbone.Model.extend({
|
||||
},
|
||||
loaded: function(self, pos_sessions, tmp){
|
||||
self.pos_session = pos_sessions[0];
|
||||
self.pos_session.login_number = odoo.login_number;
|
||||
self.config_id = self.config_id || self.pos_session && self.pos_session.config_id[0];
|
||||
tmp.payment_method_ids = pos_sessions[0].payment_method_ids;
|
||||
},
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
var odoo = <t t-raw="json.dumps({
|
||||
'csrf_token': request.csrf_token(None),
|
||||
'session_info': session_info,
|
||||
'login_number': login_number,
|
||||
'debug': debug,
|
||||
})"/>;
|
||||
</script>
|
||||
|
||||
Reference in New Issue
Block a user