[FIX] point_of_sale: prevent duplicated order posting
authorDenis Ledoux <dle@openerp.com>
Mon, 17 Mar 2014 16:41:31 +0000 (17:41 +0100)
committerDenis Ledoux <dle@openerp.com>
Mon, 17 Mar 2014 16:41:31 +0000 (17:41 +0100)
bzr revid: dle@openerp.com-20140317164131-eewyqmzz5niebz2a

addons/point_of_sale/point_of_sale.py

index 206b4a8..f79b8b3 100644 (file)
@@ -488,10 +488,14 @@ class pos_order(osv.osv):
     _description = "Point of Sale"
     _order = "id desc"
 
-    def create_from_ui(self, cr, uid, orders, context=None):
-        #_logger.info("orders: %r", orders)
+    def create_from_ui(self, cr, uid, orders, context=None):      
+        # Keep only new orders
+        submitted_references = [o['data']['name'] for o in orders]
+        existing_orders = self.search_read(cr, uid, domain=[('pos_reference', 'in', submitted_references)], fields=['pos_reference'], context=context)
+        existing_references = set([o['pos_reference'] for o in existing_orders])
+        orders_to_save = [o for o in orders if o['data']['name'] not in existing_references]
         order_ids = []
-        for tmp_order in orders:
+        for tmp_order in orders_to_save:
             order = tmp_order['data']
             order_id = self.create(cr, uid, {
                 'name': order['name'],
@@ -529,7 +533,10 @@ class pos_order(osv.osv):
                 }, context=context)
             order_ids.append(order_id)
             wf_service = netsvc.LocalService("workflow")
-            wf_service.trg_validate(uid, 'pos.order', order_id, 'paid', cr)
+            try:
+                wf_service.trg_validate(uid, 'pos.order', order_id, 'paid', cr)
+            except Exception:
+                _logger.error('ERROR: Could not mark POS Order as Paid.', exc_info=True)
         return order_ids
 
     def write(self, cr, uid, ids, vals, context=None):